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

Termux proot-distroでカスタムrootfsを使い、Linuxコンテナを作成する

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

この記事では、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のメンテナーが提供するディストリビューションが要件に合わない場合はどうするのでしょうか。たとえば次のようなケースです。

  1. 特定のLinuxバージョンのrootfsが必要。たとえばLTS版Ubuntuが欲しいが、proot-distroのUbuntuは常に最新版である
  2. 特定アーキテクチャのrootfsが必要。たとえば32ビットx86アーキテクチャのManjaro
  3. ARM64デバイスでx86_64のシステムを実行したい

幸い、proot-distroではprootディストリビューションを「登録」できます。自分のrootfsを追加して、proot-disroコマンドで操作できます。

2. カスタムLinux rootfsを構築する方法
#

多くのディストリビューションには、それぞれrootfsを構築するためのツールがあります。Termuxに収録されているdebootstrapのようなパッケージは権限問題が起きる可能性があるため、Linux PCでrootfsを作成してからスマホへ移動するほうが安全です。

proot-distro作者のスクリプトを参照して、カスタムrootfsの作り方を理解することもできます。

3. 新しいUbuntu proot-distroを登録する
#

  1. Termuxを開き、proot-distroをインストールします
pkg install proot-distro
  1. Ubuntu daily buildsへ行き、Ubuntu base 22.04のURLをコピーします。これは最小構成のシステムです。

  2. 一時的にTermuxのホームディレクトリへダウンロードします

pkg install wget

wget https://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04.3-base-arm64.tar.gz
  1. SHA256チェックサムを計算し、その後削除します
pkg install coreutils

sha256sum ubuntu-base-22.04.3-base-arm64.tar.gz

rm ubuntu-base-22.04.3-base-arm64.tar.gz
  1. prootスクリプトを保存する$PREFIX/etc/proot-distroへ移動し、テンプレートスクリプトをコピーしてubuntu22.04.shという名前にします
cd $PREFIX/etc/proot-distro
cp distro.sh.sample ubuntu22.04.sh
  1. 編集します
vim ubuntu22.04.sh
  1. 以下の内容を追加します。原文のコメントは省略しています。
# アーキテクチャはスマホのプロセッサアーキテクチャと一致させる
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
}
  1. proot-distro listを試しに実行すると、先ほど追加したUbuntu 22.04 LTSがリストに表示されます

  2. Ubuntu 22.04 LTSをインストールしてみます。proot-distroが権限問題を自動で修正します

proot-distro install ubuntu22.04
  1. ログインします
proot-distro login ubuntu22.04
  1. cat /etc/os-releaseで確認し、表示されるバージョンがUbuntu 22.04であることを確かめます。あとはproot Ubuntuのインストールチュートリアルを参照すれば、完全なシステムとしてインストールできます。

関連記事


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