Termux についてあれこれ2

Termux を素のまま使う方法は前回書いた。 パフォーマンスがいいのは素の状態なので、これで使えそうならこのまま使う方がいい。node, Python, C/C++ なんかは素のままでも十分使えるはずだ。

あまりサーバーとして使うこともなく、使うとしたらちょっとした開発だと思うので、3000/tcp あたりで node を使ったり、node や Python で使える静的 HTTP サーバー (http-server とか)で事足りることが多いと思うが、ちょっとコンテナ的なものを使いたいこともある。

こうした場合は、proot, proot-distro を使うと便利である。

proot-distro を使って、 Ubuntu を使う方法などは、さまざまな方法で紹介されているので、ガッツリ使う人は情報に事欠かないと思うが、私は軽めに使う方法がおすすめである。
Ubuntu 環境を作ったうえで、Docker もどきを入れる方法などもあるが、そこまでやっても本物の Docker ではないし、重いので、素の状態で工夫するか proot-distro でサーバー単位で導入するのがいい。

proot はディレクトリ構成のみを仮想化 (システムコールをフックして書き換えてしまう) する方法で、Docker 等と違いカプセル化されているわけではない。 あくまでパスがユーザーモードの世界で相対的にルートから構築できるだけで、CPU や TCPポートなどといったシステム資源は、下層の Android と共有になる。当然、ルートを取っていなければ、1024番未満の TCPポートを開いたりはできない。

proot, proot-distro のインストールは

1
2
3
pkg update
pkg install proot python3-pip
pip install proot-distro

で入る。pkg で proot-distro も入るが非常にバージョンが古く DockerHub が使えないので、お勧めしない。

proot-distro は DockerHub からアーカイブを拾ってきてくれて、展開してくれる便利なユーティリティーである。 カプセル化とか、TCPポートや、ディレクトリの割り当てをしてくれたりはしないので、イメージを拾ってきて展開したら、基本的には、その中の設定ファイルを書き換えて使う。

proot-distro は短縮形があり

標準 短縮形
proot-distro pd
proot-distro install pd i
proot-distro run pd run
proot-distro login pd sh
proot-distro list pd ls
proot-distro ps pd ps
proot-distro kill pd kill
proot-distro remove pd rm
proot-distro clear-cache pd cl

等が使える。

例えば、DockerHub から NGINX を拾ってきて起動するには

1
2
3
pd i nginx
nano ~/../usr/var/lib/proot-distro/containers/nginx/rootfs/etc/nginx/conf.d/default.conf
pd run nginx -d

もしくは

1
2
3
4
5
pd i nginx
pd sh nginx
# vi /etc/nginx/conf.d/default.conf
# exit
pd run nginx -d

などとする。

必要なくなったらpd rm nginxで削除できる。

ネット上の例では、Ubuntu でフル環境を作っている例が多いが、ちょっとサーバーを動かしたり、サンドボックス的(全然なってないけど)な環境を作りたいだけなら、nginx のようなサーバーのみのパッケージや、alpine あるいは debian のような小規模のパッケージを使った方がおすすめである。

前回の記事にも書いたが、Kernel は Android のものがそのまま使われるので、例えば Android 14 くらいなら Debian bookworm くらいの世代に合わせた方がいいと思われる。