iSH 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
iSH 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
iSH 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 未知
开发语言 C/C++ Objective-C
操作系统 跨平台
软件类型 开源软件
所属分类 其他开源桌面环境
开源组织
地区 不详
投 递 者 白开水不加糖
适用人群 未知
收录时间 2023-09-11

软件简介

iSH 是一个运行在 iOS 上的 Linux shell。本项目使用了 x86 用户模式仿真和系统调用翻译转换。

上手

本项目下包含了其他 git 项目作为子模块,请确保在克隆时使用参数--recurse-submodules,即 git clone --recurse-submodules https://github.com/ish-app/ish.git。或是在克隆好了之后执行 git submodule update --init

编译此项目需要以下依赖:

  • Python 3
    • Meson (pip3 install meson)
  • Ninja 请查看此处
  • Clang and LLD (在安装了 brew 的 macOS 系统上运行 brew install llvm。在 Linux 系统上请根据你的包管理器,选择运行相应的安装命令 sudo apt install clang lld 或者 sudo pacman -S clang lld)
  • sqlite3 (通常 sqlite3 在 macOS 上是预安装的,但它或许没有安装在你的 Linux 上,运行 which sqlite3 以查看它是否存在。如果没有,你可以根据你的包管理器运行 sudo apt install libsqlite3-dev 之类的安装命令)
  • libarchive (在 macOS 系统上使用 brew install libarchive  sudo port install libarchive 来安装。在 Linux 系统上请根据你的包管理器,选择运行相应的安装命令如 sudo apt install libarchive-dev 来安装)

创建iOS应用

使用 Xcode 打开项目,选择 iSH.xcconfig,并且修改 ROOT_BUNDLE_IDENTIFIER 为你的唯一值。此外,还需要在项目(project)的构建设置(build settings)中更新开发团队 ID,注意这里指的不是目标(target)的构建设置(build settings)。然后点击 运行,之后应该有脚本帮你自动执行相关操作。如果遇到了任何问题,请提交 issue,我们会帮你解决。

为测试构建命令行工具

在项目目录中运行命令 meson build,之后 build 目录会被创建。进入到 build 目录并运行命令 ninja

为了建立一个自有的 Alpine linux 文件系统,请从 Alpine 网站 下载 Alpine minirotfs tarball for i386 并运行 tools/fakefsify 。将 minirotfs tarball 指定为第一个参数,将输出目录的名称(如alpine)指定为第二个参数,即 tools/fakefsify $MinirotfsTarballFilename alpine 然后在 Alpine 文件系统中运行 /ish -f alpine/bin/login -f root。如果 build 目录下找不到 tools/fakefsify,可能是系统上找不到 libarchive 的依赖(请参照前面的章节进行安装)。

除了可以使用 ish,你也可以使用 tools/ptraceomatic 替代它,以便在某个真实进程中单步比较寄存器。我通常使用它来进行调试(需要 64 位 Linux 4.11 或更高版本)。

日志

在编译过程中,iSH 提供数种日志类型,默认情况下它们都被禁用,想要启用它们需要:

  • 在 Xcode 中将 iSH.xcconfig 中 ISH_LOG 设置为以空格分隔的日志类型列表。
  • 在 Meson (测试使用的命令行工具) 中执行命令 meson configure -Dlog="<space-separated list of log channels>"

可用的日志类型:

  • strace: 最有用的类型,记录几乎每个系统调用的参数和返回值。
  • instr: 记录模拟器执行的每个指令,这会让所有执行变得很慢。
  • verbose: 记录不属于其他类别的调试日志。
  • 使用 grep 命令查看 DEFAULT_CHANNEL 变量,以确认在更新此列表后是否添加了更多日志频道。
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
4 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部