この記事では、proot-distroでLinuxディストリビューションをインストールする方法を説明する。
Termuxはターミナルエミュレーターとして、Root権限なしでproot-distroツールを使い、スマートフォン上にLinuxディストリビューションをインストールできる。
たとえばUbuntu、Arch Linux、Alpine Linux、Fedora、Debian、openSUSEなどをインストールできる。
proot-distroでインストールしたLinuxディストリビューションはテキストインターフェイスのみで、グラフィカルインターフェイスは自分で設定する必要がある。
面倒だと感じる場合は、記事末尾に載せた自動化スクリプトを参照してほしい。
1. proot & proot-distroとは#
PCのGNU/Linuxシステムでは、chrootコマンドを使って隔離されたLinux環境を作れる。これはcgroups以前からある、最初期のコンテナ概念だ。chrootコマンドで中へ切り替えると、まるで別のシステムに入ったように見える。たとえばUbuntuでdebootstrapを使ってDebian環境を作り、そのDebian環境を動かす、といった使い方だ。
chrootは仮想マシンでもエミュレーターでもない。chrootコンテナ内部はホストとLinuxカーネルを共有し、多くのシステムリソースも共有するためだ。
関連記事:Termux chroot Ubuntu
しかしchrootには必ずroot権限が必要になる。AndroidのTermux端末には、その代替としてprootパッケージが収録されている。
PRoot公式サイトの説明によると、prootはchrootのuserspace実装で、ptraceを使ってシステムコールをエミュレートし、bindやbinfmtなどの機能も含む。
ptraceを使う関係で、proot上のプログラム実行速度はchrootより必ず遅くなる。しかし、root権限なしでLinux環境を動かせるのが利点だ。
chrootと同様に、prootはLinux rootfs(ルートファイルシステム)を用意し、Termuxから偽のLinuxカーネルを読み込ませることで、プログラムに本物のLinux環境で動いていると思わせる。
ただし、proot環境はあくまでコンテナであり、完全なLinuxシステムではない点に注意してほしい。
なぜTermuxで直接コマンドを実行せず、prootを使うのか?Termux自体に収録されているパッケージは少ない。prootでLinuxシステムをインストールすれば、PC版Linuxのパッケージを活用して特定の目的を達成できる。たとえばTermuxにはずっと「Chromium」が収録されていないが、多くのLinuxディストリビューションでは提供されている。
Proot環境でPC向けソフトウェアを実行すること自体は、あまり問題にならない。GIMP、LibreOffice、Firefoxはいずれも正常に実行できる。ただし、systemctlのシステム管理コマンドは使えない。AndroidにはSystemdがなく、移植も難しいからだ。
Termuxにはprootパッケージが収録されており、proot環境の設定に使える。prootでインストールしたLinuxディストリビューションを、ここでは「Proot Distro」と呼ぶ。
prootで入れたLinuxディストリビューションは、せいぜい「コンテナ」(container)であり、仮想マシンのような完全なシステムではない。
ただし、「Proot Distro」と「proot-distro」を混同しないこと。後者はツール名だ。
prootではLinuxシステムのrootfsを自分で用意する必要があり、コマンドも複雑だ。そのためTermuxはproot-distroというラッパースクリプト(wrapper script)を提供している。これはTermux公式がメンテナンスしているLinuxディストリビューションのrootfsを自動でインストールし、proot関連の環境問題も処理してくれるので、かなり使いやすい。
2. proot-distroコマンドの使い方#
- Termuxを開き、proot-distroパッケージをインストールする。
pkg install proot-distro- 次のコマンドで、オンラインにどのディストリビューションがあるか確認する。
proot-distro list現在はAlpine Linux、Arch Linux、Debian、Fedora、openSUSE、Ubuntu、Void Linux、Pardus Linuxがある。

Debianをインストールすると仮定して、次を実行する:
proot-distro install debian- ダウンロード後、システムへログインする:
proot-distro login debianログイン後はrootアカウントになる。
apt updateを入力すれば、パッケージをインストールできるようになる。使い終わったらexitを入力してシステムから出る。Proot-distroのグラフィカル環境と音声サーバーを続けて設定し、中国語化する場合は、Termux Proot Debianを参考に後続設定を行う。
1つのLinuxディストリビューションにインストールできるrootfsは1つだけだ。同じディストリビューションを複数起動したい場合は、後述の「カスタムrootfs」を使う。
prootシステムを削除するコマンド:
proot-distro remove debianダウンロード済みrootfsキャッシュを削除する:
proot-distro clear-cache3. proot-distroコマンド引数#
Github説明を参考に、proot-distro login debianコマンドの後ろで次の引数を使える。
--:ログイン後にコマンドを実行する。たとえば下の--の後ろの内容は、prootへログインしてsshdを実行するものであり、proot-distroの引数ではない。
proot-distro login debian -- /usr/bin/sshd--user:ログインするユーザー
--fix-low-ports:低い番号のポートをリダイレクトする。prootの関係で、SSH daemonのように低い番号の22番ポートを使うプログラムでは問題が起きる。このオプションを使うと、SSHのポートは2022(つまりデフォルトポート+2000)へリダイレクトされる。
--isolated:/sdcard、/data/data/com.termuxをproot内部へマウントしない。
proot-distroはデフォルトで、スマートフォンの内部ストレージをprootシステムの/sdcardディレクトリへbind mountする。つまり、proot Linuxシステム内でrm -rfを実行すると、スマートフォン側のファイルもまとめて削除できてしまう。
さらにTermuxは自身のPATHもproot内部へマウントする。たとえばPythonコマンドを実行するとき、Termux側のバージョンが実行される可能性がある。このオプションを使えば、Pythonコマンド実行時にproot Linux内部のPythonを実行するよう保証できる。
--termux-home:Termuxのホームディレクトリをproot Linux内部のホームディレクトリへマウントする。そのため、proot-distro内のユーザーのホームディレクトリはTermuxホームディレクトリと共有され、プログラムが生成したファイルはproot-distroの外へ出る。
--shared-tmp:Termuxのtmpディレクトリをproot Linux内部のtmpへマウントする。
--bind path:path:追加でマウントするパス。形式は<外部パス>:<Proot Linux内部パス>。
--no-link2symlink:PRoot link2symlink拡張モジュールを無効化し、prootのハードリンクエミュレーション機能をオフにする。SELinuxがpermissiveまたは無効になっている場合のみ使用できる。
--no-sysvipc:PRootのSystem V IPCエミュレーションを無効化する。クラッシュが発生した場合にのみ使う。
--no-kill-on-exit:ログアウト時にすべてのプロセスを終了しない。
4. proot-distroをバックアップする方法#
Termux Backup commandsではproot-distroはバックアップされないため、別途バックアップが必要だ。
- 次のコマンドで、prootシステムを圧縮ファイルとしてスマートフォン内部ストレージへバックアップする。たとえば
debianのファイルをバックアップする場合:
proot-distro backup --output storage/shared/debianbackup.tar.gz debian- 次のコマンドでprootシステムを復元する:
proot-distro restore debianbackup.tar.gz5. proot-distroでカスタムLinux rootfsを使う#
proot-distro custom rootfsを参照。
6. proot-distroで異種アーキテクチャシステムをエミュレートする#
proot-distroはqemu-userエミュレーターとの併用に対応している。たとえばARM64アーキテクチャのシステム上で、x86_64のLinuxシステムをエミュレートして実行できる。
Termux proot-distro qemu-static rootfsを参照。
付録:スクリプトでProot Distroを自動インストールする#
Githubには、Linux+グラフィカルインターフェイスのインストールをまとめて処理してくれる簡易スクリプトが多くある。通常はコピーして貼り付けるだけでよい。
ただし、それらの一部はproot-distroではなく、prootコマンドで直接インストールしている。そのため、そのディストリビューションは本記事で説明したproot-distroでは削除できない可能性がある。


