メインコンテンツへスキップ

AndroidスマートフォンにLinuxディストリビューションを入れる:Termux proot-distro使用方法

·
カテゴリー スマートフォン Termuxチュートリアル
タグ Proot-Distro Chroot
目次

この記事では、proot-distroでLinuxディストリビューションをインストールする方法を説明する。

Termuxはターミナルエミュレーターとして、Root権限なしでproot-distroツールを使い、スマートフォン上にLinuxディストリビューションをインストールできる。

たとえばUbuntu、Arch Linux、Alpine Linux、Fedora、Debian、openSUSEなどをインストールできる。

Sony Xperia 5 IIでDebian 11システムを実行

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コマンドの使い方
#

  1. Termuxを開き、proot-distroパッケージをインストールする。
pkg install proot-distro
  1. 次のコマンドで、オンラインにどのディストリビューションがあるか確認する。
proot-distro list
  1. 現在はAlpine Linux、Arch Linux、Debian、Fedora、openSUSE、Ubuntu、Void Linux、Pardus Linuxがある。

  2. Debianをインストールすると仮定して、次を実行する:

proot-distro install debian
  1. ダウンロード後、システムへログインする:
proot-distro login debian
  1. ログイン後はrootアカウントになる。apt updateを入力すれば、パッケージをインストールできるようになる。使い終わったらexitを入力してシステムから出る。

  2. Proot-distroのグラフィカル環境と音声サーバーを続けて設定し、中国語化する場合は、Termux Proot Debianを参考に後続設定を行う。

1つのLinuxディストリビューションにインストールできるrootfsは1つだけだ。同じディストリビューションを複数起動したい場合は、後述の「カスタムrootfs」を使う。

prootシステムを削除するコマンド:

proot-distro remove debian

ダウンロード済みrootfsキャッシュを削除する:

proot-distro clear-cache

3. 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はバックアップされないため、別途バックアップが必要だ。

  1. 次のコマンドで、prootシステムを圧縮ファイルとしてスマートフォン内部ストレージへバックアップする。たとえばdebianのファイルをバックアップする場合:
proot-distro backup --output storage/shared/debianbackup.tar.gz debian
  1. 次のコマンドでprootシステムを復元する:
proot-distro restore debianbackup.tar.gz

5. 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では削除できない可能性がある。

関連記事


最後までお読みいただきありがとうございます。本サイトでは公開コメント欄を設けていません。私はソーシャルな反応やアクセス数を追い求めるためではなく、自分の考えを誠実に探求するために文章を書いています。記事を丁寧にお読みいただいたうえで、ご感想やご意見をお寄せいただければ幸いです。誤字・誤り・技術的な問題などを見つけた場合、またはフィードバックを共有したい場合は、Aboutページに記載しているメールアドレスまでお気軽にご連絡ください。