Termuxって何?
- Android端末でLinuxコンソールを動かすアプリです。
- Google Playから入手できます
- ☞ https://play.google.com/store/apps/details?id=com.termux&hl=ja
- 本家
https://termux.com/
もっと詳しく
-
Android OSのカーネルはLinuxそのものであり、Linuxが動くこと自体はなんら不思議ではないですし初期のころからBusyBoxのようなLinuxのコマンドを1つのelfに固めて実行するコンソールアプリケーションはありました
-
Termuxは、いわゆる BusyBox ではありますが、パッケージが比較的充実していますので、それ自体で軽量Linuxとして使用できます。
-
TermuxはUbuntuなどのLinuxと異なり、ディレクトリ構成が以下のような制約を受けます。Differences from Linux :Termux Wiki
-
アプリのディレクトリとして、 /data/data/com.termux/files/ が起点となり、その下にusr/ や home/ が置かれます。
-
それ以外の場所(例えば/etc/ や /var/、/tmp/ といった、普通のLinuxには存在するディレクトリはアプリからのアクセス権限がありませんし、必要ファイルが存在しない場合がほとんどです)
-
このような環境で動くパッケージやLinuxコマンドをビルドするには、どうすればよいか、それを解説していきます。
クロスビルド用のパソコンを用意する
- Termuxで動くパッケージを作るやり方はGithubで公開されています。
- ホストOSはx86_64のLinuxがあれば可能です。ARM64のバイナリー作成にはAndroid-sdkを使用します。
- さらに、環境構築を誰でも簡単に行えるようにDockerfileが用意されていますので、Dockerの実行環境さえ用意できればホストPCはWindowsでもMacでも良いことになります。(もちろん LinuxでもOKです)
とりあえずLinuxにDockerを入れてみる
-
Ubuntu18.04LTSにDockerを入れます
$ sudo apt install docker.io -
TermuxのGitリポジトリをクローンします
$ git clone https://github.com/termux/termux-packages.git -
Docker build します
$ cd termux-packeages/scripts/
$ sudo docker build . -
Docker を実行します。
$ sudo ./run-docker.sh
試しにパッケージを1つ作ってみます。
-
Docker の中にも git cloneしたTermuxのリポジトリが現れています
builder@7e9e46c4b0fa:~/termux-packages$ -
試しに bc(コマンドライン電卓、おなじみの多倍長演算ツール)を作ってみます。
builder@7e9e46c4b0fa:~/termux-packages$ ./build-package.sh bc -
ARM64のバイナリーは、以下の場所に生成されています。
~/.termux-build/bc/massage/data/data/com.termux/files/usr/bin/bc -
x86_64のバイナリーも生成されています。
~/.termux-build/bc/host-build/bc/bc -
ARM64のパッケージは以下の場所に作成されているようです
~/.termux-build/bc/package/data.tar.xz
Dockerを使わないやり方
-
お勧めするわけではありませんが、素のUbuntu Linuxでも
termux-packages/scripts/setup-ubuntu.sh -
と
termux-packages/scripts/setup-android-sdk.sh -
を実行すれば、クロスビルド環境(Android-sdk)を用意することは可能です。
-
パッケージビルドはDockerの中で行うのと同じです。
./build-package.sh 作成したいパッケージ名 -
Android端末そのものを使用してセルフビルドすることも可能らしいです。(後で調べます)
-
Termuxのパッケージに含まれていないLinuxのパッケージを新規にビルドする場合はそれなりにビルドスクリプトを工夫したりビルドがうまくいかない場合の対処を行う必要があります。
-
Termuxはchroot (proot) を使用せずに$PREFIX 環境で動かすのでそれに対応したビルドを行う必要があるのと、Androidのlibc(bionic)がglibcと互換性が無いためにソース等に手を入れる必要があるということです。
なぜTermuxは人気があるのか
- 動作が軽いこと
- ---- chroot(proot)が遅すぎるだけかも、というのはあります。
- ルート権限が要らない
- 必要十分な機能がそろっている
- CUIコンソール向きである
- ストレージやメモリーを圧迫しない
参考
- Termux wikiのFAQです。
https://wiki.termux.com/wiki/FAQ