在未越狱的iOS设备上运行简陋的Linux系统

众所周知,由于iOS的封闭性,在不越狱的情况下应用被严格限制在各自的沙盒内,无法访问任何其他未经授权的文件。同时,每个应用或扩展(extension)只允许运行一个进程,这样使未越狱的iOS上无法运行原生的shell。最近AppStore批准了一款叫Terminal开源应用,实现了简易的shell,并可以运行少数几个Unix命令。其思想很简单,用创建线程代替创建进程,很多如curl的命令完全可以运行。所有代码都封装进framework中,也可以实现self-contained。事实上,如果愿意折腾的话,完全可以通过模拟器的方式实现真正的Linux Shell。

安装修改后的dospad

DOSBox是一个x86模拟器,使用平台无关的代码实现了基本的
x86处理器指令集,可以用来运行大部分DOS游戏。DOSBox SVN Daum是DOSBox的改良版本,增加了大量高级功能,甚至可以运行Windows 98。dospad是DOSBox的iOS的移植版,使用原版DOSBox 0.74。然而,由于DOSBox官方太久没有更新,性能已经远远落后于Daum版本,兼容性也差很多。
经过几天的折腾,我已经成功将dospad中的DOSBox替换成Daum版本。经过测试,在Simple模式下可以在17款iPad Pro上模拟出最高100MHz的奔腾处理器,如果能用arm64汇编实现指令集速度应该至少还能翻3倍。
修改后的代码已经放在fork里: https://github.com/imxieyi/dospad
安装方法推荐自行编译。如果实在没法找到XCode环境,这里提供一个未签名的ipa,可以使用Cydia ImpactoriResign等重签名工具安装: dospad.ipa

下载PC版DOSBox Daum

链接前面已经给出。PC版因为可以使用原生x86汇编,性能比iOS设备强很多,所以推荐在PC上进行前期安装工作。当然,如果你有足够的耐心,在iOS上安装也完全没有问题。

获取磁盘镜像

为了实现虚拟IDE驱动器,挂载img镜像是必不可少的。镜像可以跟着这个教程创建,也可以直接下载现成的。由于iOS系统限制,直接在dospad中运行imgmake命令会报错,所以这一步必须在PC上进行。

安装MuLinux

准备安装工具

MuLinux是非常轻量级的Linux发行版,可以直接在DOS环境下引导。DOSTOOLSmulinux-*.tgz两个文件必不可少,剩余的addons则可以根据需要下载,tgz文件都不要提前解压。全部下载完后,将DOSTOOLS解压到电脑版dosbox文件夹中mulinux下,剩下的压缩包也放进这个文件夹,mulinux-*.tgz重命名为mu.tgz,然后打开dosbox.conf进行修改,在文件最后的[autoexec]部分增加以下内容:

1
2
imgmount c linux.img
mount d mulinux

其中mulinuxlinux.img请根据实际情况修改。
然后下载MSDOS 6.22启动盘,将622C.IMG也放到mulinux目录下。

格式化磁盘镜像

启动dosbox,输入以下命令启动MSDOS:

1
boot d:\622c.img

然后运行fdisk,连续按回车直到提示重启。如果显示Primary DOS Partition already exists,就连续按ESC退出fdisk。
重启dosbox后,用同样的方法进入MSDOS中,运行:

1
format c:

输入Y同意,label随便写一个或者不写,然后关闭dosbox。

复制所需文件

挂载目录无法模拟IDE设备,所以必须将相关文件复制到镜像中。
再次启动dosbox,输入以下命令:

1
2
3
4
c:
md mulinux
cd mulinux
xcopy /s /r d:\ .

安装MuLinux

终于进入正片了。输入以下命令:

1
2
unpack.bat
boot.bat

等待一段时间后会显示以下界面:

选择2并回车,然后等待安装,这一过程需要较长时间,直到显示以下界面:

按回车后选择0并回车,dosbox会自动重启。

配置MuLinux

首次启动需要进行大量设置,所以建议也在电脑上完成。
输入以下命令进入MuLinux中:

1
2
3
c:
cd linux
linux.bat

系统会挨个询问是否安装addon,建议为了启动速度尽量少安装,尤其是会启动服务的插件如SRV和VNC。X11建议也不要安装,桌面环境是无法启动的。EMU一定不要安装,会导致系统启动时崩溃。由于之前已经将插件放进mulinux目录中,系统可以自动找到相关文件。如果找不到,路径格式为/DOS/path/to/tgz,其中path/to/tgz为挂载的C盘中的绝对路径。
addon安装完成后,会显示如下界面:

这里选择minimal或lazy即可,等待其配置完毕。Available Wizards界面移动光标至Editor-Wizard后按回车,选择e3开头的任意一个编辑器(根据偏好),等待配置完成后选择Cancel退出。tour界面选择No(有兴趣看内置的文档也可以选择Yes)。接下来就会出现登录提示了:

输入账号root,接下来就会出现shell,直接运行shutdown now,dosbox自动重启。
用和之前相同的命令再次启动MuLinux,直到出现以下配置界面:

一路回车即可,直到再次提示登录,进入shell,运行shutdown now,重启后直接关闭dosbox。

转移镜像到iOS设备

将设备连上电脑,使用iTunes文件共享将linux.img导入DOSPAD Beta中:

另外新建一个文本文件,保存为linux.bat,内容如下:

1
2
3
4
imgmount e d:\linux.img
e:
cd linux
linux.bat

也将其用iTunes导入。

在iOS设备上启动

打开iOS设备上的DOSPAD Beta,输入以下命令(推荐使用物理键盘):

1
2
d:
linux.bat

接下来就是漫长的启动过程。如果不想等太久,也可以在出现Press -ENTER-的时候按回车跳过配置读取。

安装完成

当以下界面出现时,说明已经大功告成:

用root登录后就可以随意折腾了。
可以看到内核已经相当老了,不过好歹也是真正的Linux,跑些内置命令是完全没问题的,还能运行gcc编译器,Java编译器和虚拟机也可以:

menu命令可以打开主菜单,如果前面配置有问题可以在这里更改。

运行视频: https://youtu.be/z0De7r21pBU

文章目录
  1. 1. 安装修改后的dospad
  2. 2. 下载PC版DOSBox Daum
  3. 3. 获取磁盘镜像
  4. 4. 安装MuLinux
    1. 4.1. 准备安装工具
    2. 4.2. 格式化磁盘镜像
    3. 4.3. 复制所需文件
    4. 4.4. 安装MuLinux
    5. 4.5. 配置MuLinux
    6. 4.6. 转移镜像到iOS设备
    7. 4.7. 在iOS设备上启动
  5. 5. 安装完成
|