快轉到主要內容

iPhone 6裝Linux系統:透過checkra1n越獄跑postmarketOS

分類   智慧型手機 真Linux手機
標籤   IOS PostmarketOS Checkm8 Jailbreak IPhone
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

關於在iOS裝置跑Linux系統的嘗試,我之前討論過 iSH Shell終端機 UTM虛擬機的作法,現在我要來嘗試直接在iPhone裝Linux系統。

1. 背景
#

chem8可說是Apple近年來最大的漏洞,搭配checkra1n軟體,能夠在開機之前完成越獄操作。2020年,有神人搞了Project Sandcastle,成功在iPhone 7跑Android 10,作者也著手移植Linux核心,儘管差點被Apple告了,這個專案依然繼續開發。

幾年後,更多開發者嘗試在其他iPhone上跑Linux。checkm8仰賴的漏洞僅支援A7 ~ A11晶片,也就是iPhone 5S ~ iPhone X的裝置,更舊或更新的裝置都不行。

理想上iPhone 7是目前狀態相對好的裝置,能夠在AFPS掛載postmarketOS開機,甚至有開發者讓它能跑Wayland了。可惜我沒有這台。

我有兩台支援checkm8的舊iOS裝置,分別為iPhone SE (iOS 15)和iPod touch 6 (iOS 12)。網路上有許多成功啟動Linux的案例,但沒寫他們的iOS版本。iOS 15以上只能用palera1n越獄,得用指令paleran1 -p -f啟動pongoOS Shell,但我測試過有其他問題。所以改用iPod touch 6測試,這台的處理器跟iPhone 6相仿,理論上可行。

至於要怎麼跑Linux呢?首先要透過checkra1n進入pongoOS Shell,再引導Linux開機。

要選哪個Linux發行版呢?雖然Reddit有人成功編譯Ubuntu開機,Twitter也有人跑起Asahi Linux(見文末參考資料),但是postmarektOS Wiki上面有更多人成功的照片,加上這個社群是比較關注Linux行動裝置議題的,所以我以這個發行版為基礎下去嘗試。

後續有二種作法,一是將Linux編譯成ramdisk開機,重開機後資料就會消失。

二是利用 pmbootstrap提供的Netboot功能,進行網路開機,重開機後資料依然會消失,不過rootfs會留在電腦上。

嗯,所以嚴格說來這些都不是真正的「裝」Linux系統到iPhone上,系統沒有真正寫入到iPhone磁碟,只是暫時用Linux開機而已。目前不論用什麼方法,都得依賴電腦引導才能開機進入Linux。

2. 準備項目
#

  • Linux或Mac電腦,我使用Ubuntu 24.04
  • 支援checkra1n的iOS裝置,也就是A7 ~ A11晶片,iPhone 5S ~ iPhone X的裝置。我使用iPod touch 6,系統版本iOS 12.5.7。
  • Lightning to USB OTG轉接器,滑鼠和鍵盤。因為Linux沒有觸控驅動,所以iPhone開機後得用鍵盤滑鼠控制。若熟悉使用SSH指令控制X11的話不要也罷。

3. 編譯pongoOS
#

pongoOS是在載入iOS XNU核心之前執行的程式。

  1. 編譯pongoOS之前,需要依賴checkr1an。(paler1an不需要編譯pongoOS)

  2. 官網下載checkra1n執行檔,並塞到系統目錄

wget https://assets.checkra.in/downloads/linux/cli/x86_64/dac9968939ea6e6bfbdedeb41d7e2579c4711dc2c5083f91dced66ca397dc51d/checkra1n

sudo mv checkra1n /usr/bin/
  1. Linux安裝Clang 11
sudo apt install clang-11 xdd
  1. 從checkra1n的套件庫安裝ld64和cctools-strip,其他發行版需要針對新版Clang手動編譯。
echo 'deb https://assets.checkra.in/debian /' | sudo tee /etc/apt/sources.list.d/checkra1n.list
sudo apt-key adv --fetch-keys https://assets.checkra.in/debian/archive.key

sudo apt update

sudo apt install ld64 cctools-strip
  1. 取得pongoOS原始碼並編譯,使用konradybcio的fork。
git clone https://github.com/konradybcio/pongoOS

cd pongoOS

LD_LIBRARY_PATH="/usr/lib/llvm-11/lib/" EMBEDDED_CC="/usr/bin/clang-11" EMBEDDED_LDFLAGS=-fuse-ld=/usr/bin/ld64 STRIP=cctools-strip make all

註:pongoOS原始碼太久沒更新了,有時會編譯失敗。你也可以用macOS虛擬機編譯。以下為在macOS Ventura用Xcode編譯的指令:

xcode-select --install

git clone https://github.com/konradybcio/pongoOS

cd pongoOS

make all

最終會得到build/Pongo.bin

4. 編譯Linux核心
#

  1. 安裝編譯依賴套件
sudo apt install build-essential clang  libncurses5 flex git bc bison
  1. 取得konradybcio提供的linux-apple核心原始碼
git clone https://github.com/konradybcio/linux-apple

cd linux-apple
  1. 取得SoMainline提供的defconfig
wget https://raw.githubusercontent.com/SoMainline/linux-apple-resources/master/example.config -O ./.config
  1. 調整PAGESIZE
make ARCH=arm64 LLVM=1 menuconfig
  1. /搜尋,輸入_PAGE,按1

  2. PAGESIZE,A8處理器設定4K,A9處理器以上設定為16K。之後按下Exitt,儲存.config。

  3. 編譯核心

make ARCH=arm64 LLVM=1 -j$(nproc) Image.lzma dtbs
  1. 最終會得到arch/arm64/boot/Image.lzma

  2. 取得dtbpack指令稿,放到Linux核心所在目錄

wget https://raw.githubusercontent.com/SoMainline/linux-apple-resources/master/dtbpack.sh

chmod +x dtbpack.sh
  1. 生成dtbpack
./dtbpack.sh

5. 編譯postmarketOS的rootfs
#

  1. 安裝 pmbootstrap

  2. 初始化,機型選apple-iphone6。桌面環境選xfce4。

pmbootstrap init
  1. 建立rootfs
pmbootstrap install

6. 開機進入Linux
#

  1. 設定 libimobiledevice,確認Linux認得到iPhone。

  2. 將iPhone插上電腦,手動進入DFU模式:關機,等5秒。按住電源鍵3秒,接著按電源鍵+Home鍵10秒,然後鬆開電源鍵,繼續按著Home鍵。

  3. 確認進入DFU後,在pongoOS原始碼的目錄開啟終端機,用checkra1n進入pongoOS Shell

cd pongoOS

sudo checkra1n -v -V -p -c -k ./build/Pongo.bin
  1. 此時iOS裝置的螢幕會看到pongoOS Shell

  2. 啟動postmarketOS的neboot

pmbootstrap initfs hook_add netboot

pmbootstrap export
  1. 將Linux的initramfs傳到iOS裝置
cd pongoOS

python3 scripts/load_linux.py -k "linux-apple核心目錄/arch/arm64/boot/Image.lzma" -d "linux-apple核心目錄/dtbpack" -r /tmp/postmarketOS-export/initramfs
  1. 等待Linux開機…結果kernel panic,幹。

  2. 如果正常開機的話,再傳送Netboot的rootfs,即可進入Linux系統。

pmbootstrap netboot serve

ssh [email protected]

7. 總結
#

每次幹這種事的時候我就會想到這首歌。It’s all a waste of time again.

目前沒有實用性,有點像是驅動支援度差的Android機硬要刷postmarketOS那樣。最大問題還是驅動程式支援度差,看 SoMainline提供的表格就知道,幾乎全部的硬體功能都是打叉的。

而Apple裝置的驅動程式又有誰有辦法逆向工程出來呢?有像Asahi Linux那樣熱忱的開發者嗎?況且啟動Linux還是靠硬體漏洞實現的。

除了能開機跑些Linux程式外沒什麼發展性。

比較現實的策略,可能還是在iOS裝置跑JIT加速的UTM虛擬機,再於裡面跑Linux虛擬機較為實用。

參考資料
#

相關文章

如果iPhone越獄工具沒有Windows版,你還有Live USB可以用 (palera1n)
分類   智慧型手機 iOS玩機與越獄
標籤   Jailbreak Checkm8 IOS Windows IPhone
postmarketOS介紹,專為手機打造的GNU/Linux發行版
分類   智慧型手機 真Linux手機
標籤   PostmarketOS Alpine Linux
postmarketOS安裝教學,使用pmbootstrap建立安裝檔
分類   智慧型手機 真Linux手機
標籤   PostmarketOS Alpine Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。