本文示範如何在Android Termux的proot-distro工具新增自己喜歡的Linux發行版。
以Ubuntu為例子,我們將安裝舊版Ubunut 22.04 LTS
的proot Ubuntu。
1. proot vs proot-distro#
proot是為chroot的userspace實作版,可免root權限做到類似chroot的功能。
有些開發者分發Termux的proot發行版時是用proot指令硬幹的,比方說 Box64Droid,你可以看到它是下載自訂rootfs,再用一長串指令登入proot發行版。
但既然有proot-distro這好用的指令稿,何不善加利用呢?它是一個proot的wrapper script,整合了下載、登入、登出proot發行版的程序,還可以方便執行指令。
我在 proot-distro使用教學講述了用法,可是萬一proot-distro維護者提供的發行版不符需求呢?例如:
- 要特定Linux版本的rootfs,比方說LTS版的Ubuntu,但proot-distro的Ubuntu都是最新版本。
- 需要特定架構的rootfs,例如32位元x86架構的Manjaro
- 想在ARM64的裝置執行x86_64的系統
所幸,proot-distro是允許我們「註冊」proot發行版的,我們可以新增自己的rootfs,再用proot-disro指令操作。
2. 如何建置自訂Linux rootfs#
大部份發行版都有自己的建置rootfs工具。注意Termux收錄的debootstrap
這類套件可能有權限問題,於Linux電腦製作rootfs再移動到手機比較保險。
- Ubuntu: debootstrap或下載 自動建置的rootfs
- Debian: debootstrap
- Fedora: supermin
- openSUSE:下載 自動建置的rootfs
- Alpine: Bootstrapping Alpine Linux
- Arch: pacstrap
- Manjaro: pacstrap
- Void: Installation via chroot
您也可以參照 proot-distro作者的指令稿了解如何建立自訂rootfs。
3. 註冊新的Ubuntu proot-distro#
- 開啟Termux,安裝proot-distro
pkg install proot-distro
至 Ubuntu daily builds,複製Ubuntu base 22.04網址。這是最小化的系統。
暫時下載到Termux家目錄
pkg install wget
wget https://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04.3-base-arm64.tar.gz
- 計算SHA256校驗碼,之後移除
pkg install coreutils
sha256sum ubuntu-base-22.04.3-base-arm64.tar.gz
rm ubuntu-base-22.04.3-base-arm64.tar.gz
- 切換到存放proot指令稿的
$PREFIX/etc/proot-distro
,複製範本指令稿,將其命名為ubuntu22.04.sh
cd $PREFIX/etc/proot-distro
cp distro.sh.sample ubuntu22.04.sh
- 編輯
vim ubuntu22.04.sh
- 新增以下內容。我省略了原文註解。
# 架構應與手機處理器架構一致
DISTRO_ARCH=aarch64
# 發行版顯示的名字
DISTRO_NAME="Ubuntu 22.04 LTS"
# 註解
DISTRO_COMMENT="Ubuntu 22.04 LTS Jammy Jellyfish"
# 壓縮檔的檔案目錄深度,預設為1,即忽略root目錄。但Ubuntu base解壓縮即是檔案系統,所以這裡填0
TARBALL_STRIP_OPT=0
# 每個陣列一個架構對應一個rootfs網址。你也可以改把rootfs上傳到自己的Github
TARBALL_URL['aarch64']="https://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04.3-base-arm64.tar.gz"
# 填入壓縮檔的SHA256校驗碼
TARBALL_SHA256['aarch64']="bdae94b05d0fca7decbe164010af2ac1b772a9dda21ed9fb5552b5674ad634a3"
# 安裝後要執行的指令
distro_setup() {
run_proot_cmd touch /etc/hello-world
}
嘗試執行
proot-distro list
,可以看到我們剛剛新增的Ubuntu 22.04 LTS已經出現在列表嘗試安裝Ubuntu 22.04 LTS,proot-distro會自動修正權限問題
proot-distro install ubuntu22.04
- 登入
proot-distro login ubuntu22.04
- 用
cat /etc/os-release
檢查,確認顯示版本為Ubuntu 22.04。這樣再參照 proot Ubuntu安裝教學,即可將其安裝為完整系統。