前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >16 岁高中生成功在 iPhone 7 上安装 Ubuntu 20.04 桌面!

16 岁高中生成功在 iPhone 7 上安装 Ubuntu 20.04 桌面!

作者头像
米开朗基杨
发布2021-01-28 12:34:32
1.2K0
发布2021-01-28 12:34:32
举报
文章被收录于专栏:云原生实验室云原生实验室

更多奇技淫巧欢迎订阅博客: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 。

来观摩下他的改造步骤。

准备工作

  • NFS 服务、dhcp 服务
  • 越狱工具 checkra1n 0.10.2-beta[7]
  • Kernel fork for h9x/A10[8]
  • projectsandcastle 工具[9]。projectsandcastle 是一款针对 iPhone 的 Android/Linux 支持工具,该工具可以给广大研究人员提供很多实用工具。
  • 你还需要一个运行在 arm64 平台中的 Ubuntu 系统来进行编译,或者你也可以使用交叉编译器,当然最方便的是使用 ?docker buildx
  • 网桥设置 script/udev 规则[10]

1. 构建 Rootfs

debootstrap 是 Ubuntu 提供的用于建立精简 Ubuntu 系统的方案,可以在指定的目录下安装一个精简的 Ubuntu 系统,除了一些配置以外,其内容与使用 Ubuntu 安装镜像第一阶段安装的内容基本相同。首先要在 arm64 架构的 Ubuntu 中安装 debootstrap:

代码语言:javascript
复制
$ sudo apt-get install debootstrap -y

假设你的 nfs 服务提供的文件目录为 /mnt/nfsrootarm64。然后执行以下命令:

代码语言:javascript
复制
$ 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

2. 编译内核

克隆 Sandcastle 内核项目[11],执行以下命令生成配置文件:

代码语言:javascript
复制
$ make hx_h9p_defconfig

然后修改 .config 文件,改动部分如下:

  • CONFIG_USB_ETH=y
  • CONFIG_NFS_FS=y
  • CONFIG_IP_PNP=y
  • CONFIG_IP_PNP_DHCP=y
  • CONFIG_BLK_DEV_INITRD=n // (none needed, otherwise it'll complain about wanting one)
  • CONFIG_CMDLINE="earlycon=hx_uart,0x20a0c0000 console=tty0 root=/dev/nfs rw nfsroot=<your_nfs_server_ip>:/nfsrootarm64,vers=4,tcp init=/usr/bin/systemd rootwait ip=dhcp g_ether.host_addr=12:a5:cf:42:92:fd g_ether.dev_addr=5e:bc:ca:27:92:b1 g_ether.idVendor=1317 g_ether.idProduct=42146 mitigations=off"
    • 可以替换其中的 MAC 地址,不替换也无所谓
    • 替换 NFS Server 的地址
  • CONFIG_ROOT_NFS=y
  • CONFIG_CMDLINE_FORCE=y
  • CONFIG_DEBUG_INFO=n // 可以大大加快编译速度

直接编译:

代码语言:javascript
复制
$ make -j 4 Image

编译完成后,执行以下命令生成设备树,后面 PongoOS 会用到:

代码语言:javascript
复制
$ ./dtbpack.sh

最后生成 PongoOS 启动镜像:

代码语言:javascript
复制
$ lzma -z --stdout arch/arm64/boot/Image > ../Image.lzma

3. 通过 pongoOS 加载内核和设备树

克隆 projectsandcastle 项目:

代码语言:javascript
复制
$ git clone https://github.com/corellium/projectsandcastle

然后进入 loader 目录,直接运行以下命令进行编译:

代码语言:javascript
复制
$ cc -O2 -Wall load-linux.c -lusb-1.0 -o load-linux

4. 设置网络

克隆作者的项目:

代码语言:javascript
复制
$ 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 目录中,执行以下命令:

代码语言:javascript
复制
$ sudo udevadm control --reload

5. 最后的大招

  • 首先重启 iPhone 7 进入恢复模式:
  1. 将 iPhone 用数据线和电脑上的 iTunes 连接;
  2. 将 iPhone 关机;
  3. 同时按下电源键“音量 -”键,看到苹果 Logo 也不要松开,直到看到下面这个界面;
  1. 此时手机已进入恢复模式。
  • 然后启动越狱工具 checkra1n,不加任何参数。
  • 点击 start,然后根据提示进入 DFU 模式。一但进入了 DFU 模式,在手机尝试启动进入 iOS 系统之前立即按下 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/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
  • 1. 构建 Rootfs
  • 2. 编译内核
  • 3. 通过 pongoOS 加载内核和设备树
  • 4. 设置网络
  • 5. 最后的大招
  • 总结
    • 参考资料
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档