この記事では、Android Termuxのproot-distroツールに、自分の好きなLinuxディストリビューションを追加する方法を示します。
Ubuntuを例に、古いバージョンのUbuntu 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 PCで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-distroUbuntu daily buildsへ行き、Ubuntu base 22.04のURLをコピーします。これは最小構成のシステムです。
一時的に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のURLを1つ対応させる。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.04cat /etc/os-releaseで確認し、表示されるバージョンがUbuntu 22.04であることを確かめます。あとはproot Ubuntuのインストールチュートリアルを参照すれば、完全なシステムとしてインストールできます。


