更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io
前言
近日,国外一名 16 岁的开发者发布了一则视频,展示自己为一台已经无法正常使用的 iPhone 7 成功移植了 Ubuntu 20.04,并将其作为服务器来使用。
发布视频的开发者网名为 Daniel Rodriguez[1],是一名在校高中生。据 Daniel 介绍,他使用的 iPhone7 来自他的外婆,这台手机的屏幕、电源等硬件设备基本上保存完好,但由于 NVMe NAND 已经完全无法访问,这意味着这台手机将永远无法再运行 iOS 系统,基本上已经相当于一块砖头。于是他拿到这台手机,萌生了改造它的想法。
Daniel[2] 参考并使用了 checkra1n[3],linux-sandcastle[4],projectsandcastle[5] 等开源项目,同时自己编写了网桥设置 script/udev 规则[6]来实现这一复杂的工作。最终成功在这台坏掉的 iPhone7 上运行了 Ubuntu 20.04 。
来观摩下他的改造步骤。
debootstrap
是 Ubuntu 提供的用于建立精简 Ubuntu 系统的方案,可以在指定的目录下安装一个精简的 Ubuntu 系统,除了一些配置以外,其内容与使用 Ubuntu 安装镜像第一阶段安装的内容基本相同。首先要在 arm64
架构的 Ubuntu 中安装 debootstrap:
$ sudo apt-get install debootstrap -y
假设你的 nfs 服务提供的文件目录为 /mnt/nfsrootarm64
。然后执行以下命令:
$ sudo debootstrap focal /mnt/nfsrootarm64
# chroot 进入新系统
$ chroot /mnt/nfsrootarm64
# 安装必要工具
$ apt install vim network-manager openssh-server
# 修复 LC_ALL 错误,选择 en_US.utf-8 作为默认值。
$ dpkg-reconfigure locales
# 修复时区
$ dpkg-reconfigure tzdata
# 添加用户
$ adduser <someuser>
$ adduser <someuser> sudo
# 添加 focal-updates, focal-backports 和 focal-security
$ vim /etc/apt/sources.list
克隆 Sandcastle 内核项目[11],执行以下命令生成配置文件:
$ make hx_h9p_defconfig
然后修改 .config
文件,改动部分如下:
直接编译:
$ make -j 4 Image
编译完成后,执行以下命令生成设备树,后面 PongoOS 会用到:
$ ./dtbpack.sh
最后生成 PongoOS 启动镜像:
$ lzma -z --stdout arch/arm64/boot/Image > ../Image.lzma
克隆 projectsandcastle 项目:
$ git clone https://github.com/corellium/projectsandcastle
然后进入 loader 目录,直接运行以下命令进行编译:
$ cc -O2 -Wall load-linux.c -lusb-1.0 -o load-linux
克隆作者的项目:
$ git clone https://github.com/newperson1746/iphone7-linux-nfsroot
你可以编辑 ethbridge.sh
来修改网卡名,使其可以作为 udev 接受的参数,不过我比较懒,就不改了。
编辑 70-iphone7.rules
,将 MAC 地址修改为步骤 2 中设置的 MAC 地址。然后将 70-iphone7.rules
移动到 /etc/udev/rules.d
目录中,执行以下命令:
$ sudo udevadm control --reload
checkra1n
,不加任何参数。CTRL-C
键。checkra1n -cpE
进入 PongoOS 的命令行模式。load-linux <path to Image.lzma> <path to dtbpack>
进入 Ubuntu 系统。接下来你就会在屏幕上看到 Ubuntu 会自动配置 DHCP,挂载 rootfs,然后启动 systemd,进入登录提示!
你可以通过 DHCP 服务器来查看它的 IP 地址,最后通过 ssh 连接到 iPhone!
以上就是在 iPhone 7 中安装 Ubuntu 20.04(不带桌面)的所有步骤,如果你想安装桌面版,可以参考作者的改进版[13]。
尽管有网友夸赞其为天才少年,但 Daniel 本人仍然十分谦逊。他表示这些工作都要归功于 Corellium 和 checkra1n 项目的开发人员,Linus Torvalds 以及 Linux 内核的所有贡献者,Ubuntu 和 Debian 维护者等等。“他们是为这个项目制作所有作品的真正英雄,而我只是恰好在 iPhone 上很好地组装了这些前辈们留下的拼图。”Daniel 说。
[1]
Daniel Rodriguez: https://www.youtube.com/channel/UCQrHIS1NFfD06-yE5tdbBUw
[2]
Daniel: https://www.youtube.com/channel/UCQrHIS1NFfD06-yE5tdbBUw
[3]
checkra1n: https://checkra.in/releases/0.10.2-beta#all-downloads
[4]
linux-sandcastle: https://github.com/corellium/linux-sandcastle
[5]
projectsandcastle: https://github.com/corellium/projectsandcastle.git
[6]
网桥设置 script/udev 规则: https://github.com/newperson1746/iphone7-linux-nfsroot
[7]
checkra1n 0.10.2-beta: https://checkra.in/releases/0.10.2-beta#all-downloads
[8]
Kernel fork for h9x/A10: https://github.com/corellium/linux-sandcastle
[9]
projectsandcastle 工具: https://github.com/corellium/projectsandcastle.git
[10]
网桥设置 script/udev 规则: https://github.com/newperson1746/iphone7-linux-nfsroot
[11]
Sandcastle 内核项目: https://github.com/corellium/linux-sandcastle
[12]
<: https://172.16.13.1
[13]
作者的改进版: https://www.reddit.com/r/linux/comments/kvmsfd/success_iphone_7_booting_ubuntu_2004_to_full/