Termux Bootを使って古いAndroidスマホをスタンドアローンサーバーにする方法
引き出しの中で埃をかぶっている古いAndroidスマホを持っている人は多いでしょう。画面は少しひび割れているし、バッテリーの持ち也不好いので、満足のいく価格で売ることもできません。しかし、中身を見れば、十分に使えるクアッドコアプロセッサと数GBのRAMが搭載されています。このハードウェアは、Telegramボット、軽量の自動化スクリプト、ローカルSSHノードなど、優れたホームサーバーになります。
Termuxターミナルは、Androidを本格的なLinux環境に変えてしまいました。しかし厄介な問題があります。バッテリー切れでスマホがシャットダウンしたりアップデート後に再起動したりすると、実行中のすべてのプロセスが終了してしまいます。アプリを手動で開いてコマンドを入力し、サービスをゼロから再起動する必要があります。
Termux:Bootアドオンはこの問題を解決します。オペレーティングシステムの起動イベントにフックして、ユーザーのスクリプトを実行するユーティリティです。
Androidにおける自動起動の仕組み
Androidはバックグラウンドプロセスに対して厳格です。システムは、ユーザーの直接的な同意と特別なパーミッションなしには、アプリがOSと一緒に起動することを許可しません。
Termux:Bootは、システムイベントとTermux内部のLinux環境の間の橋渡し役を果たします。スマホの電源を入れると、アドオンはシステムから信号を受け取り、ユーザーが指定したディレクトリを参照し、見つかった実行ファイルを順番に実行します。
アプリ署名に関する注意点があります。TermuxとTermux:Bootは共有アクセス権を通じて通信します。Androidのセキュリティルールにより、両方のアプリは同じ開発者キーで署名されている必要があります。
メインのTermuxをF-Droidからインストールした場合、Termux:Bootプラグインも必ずF-Droidから入手する必要があります。Google PlayビルドとF-Droid APKを混在させると、アクセスエラーが発生します。最新のコミットをテストしたい場合は、開発者がGitHub Actionsにデバッグビルドをアップロードしています。ただし、インストール元を変更すると、Termuxとその全プラグインを完全に削除する必要があります。
ステップバイステップのセットアップ
セットアップの構成はシンプルです。フォルダを1つ作成し、数個のテキストファイルを用意するだけです。
まず、Termux:Bootアドオン自体をインストールする必要があります。インストール後、必ずアプリメニューからそのアイコンを見つけて1回タップしてください。これにより、、アドオンがシステムの自動起動を傍受するパーミッションが付与されます。この操作を行わないと、Androidはバックグラウンドでの起動を単にブロックします。
次に、Termuxターミナルを開いてスクリプト用のディレクトリを作成します:
mkdir -p ~/.termux/boot/
このフォルダに置かれたすべてのファイルが自動起動シナリオになります。フォルダ内に複数のファイルがある場合、プラグインはアルファベット順にそれらを実行します。
起動後5分でスマホが深いスリープ状態に入るのを防ぎたい場合、スクリプトの最初でtermux-wake-lockコマンドが活躍します。これにより、AndroidにCPU清醒状態を保つよう強制します。
実用的なスクリプト例
いくつかの実用的なシナリオを説明します。システム起動直後にデバイスへのSSHアクセスを可能にすることは、一般的なタスクです。
ファイルを作成します:
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sshd
ファイルに実行権限を付与することを忘れないでください。付与しないと、システムはそれを無視します:
chmod +x ~/.termux/boot/start-sshd
これでスマホを再起動すると、TermuxがバックグラウンドでSSHサーバーを起動します。画面を操作せずに、ネットワーク経由で接続できるようになります。
システムデーモン管理にrunitパッケージ(通常のLinuxディストリビューションにおけるsystemdに相当)を使用している場合は、起動スクリプトは次のようになります:
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
source /data/data/com.termux/files/usr/etc/profile.d/start-services.sh
このファイルを~/.termux/boot/に作成し、実行権限を付与すると、sv-enableコマンドで有効にしたすべてのサービスが自動的に起動します。
実用的なユースケース
このプロジェクトの主な価値は、完全な自律性にあります。スマホは、内蔵の無停止電源装置を備えた、静かなミニサーバーになります。
いくつかの明確なシナリオを示します:
- Telegramボットホスティング。ボットはデバイスと一緒に起動し、常時監視なしで動作し続けます。
- Syncthingによるファイル同期。スマホは、写真やドキュメントをバックアップするための24時間体制のノードとして機能します。
- ホームネットワーク監視。スクリプトが定期的にルーターや外部サービスの可用性をチェックし、障害時に通知を送信します。
- SQLiteやPostgreSQLなどのローカルデータベースサーバー。スマートホームデバイスからのログ収集に使用。
デバッグと落とし穴
完璧なソリューションは存在せず、Termux:Bootにも独自の癖があります。
最新のAndroidファームウェアの積極的な省電力機能は、バックグラウンドプロセスを終了させることが好きです。MIUI、One UI、EMUIは特にこれが顕著です。プラグインを問題없이動作させるには、Androidのバッテリー設定に移動し、TermuxとTermux:Bootのバッテリー最適化を無効にしてください。MIUI系のファームウェアでは、アプリ設定でアドオンが自動起動することを手動で許可する必要があります。
次に、ロギング機能を確認することをお勧めします。スクリプトが起動していない場合は、スクリプト内でエラー出力をファイルにリダイレクトします:
#!/data/data/com.termux/files/usr/bin/sh
exec 2>&1
exec 1>/sdcard/termux-boot.log
termux-wake-lock
echo "Boot completed at $(date)"
こうすれば、環境変数のパスでスクリプトが躓いたりや、必要なバイナリが見つからなかったりがすぐにわかります。
アプリの更新後やデバイスのフラッシュ後は、Termux:Bootをデスクトップアイコンから手動で再度起動する必要がある場合があります。
まとめ
Termux:Bootは、1つのタスクだけを持つ非常にシンプルなプラグインであり、その仕事を 잘 합니다。Javaのソースコードは最小限の容量で、基本的なbashを知っていれば誰でも理解できるロジックです。
古いスマホからホームサーバーやコンパクトな自動化システムを構築する予定がある場合、このアドオンはデバイスの誤った再起動時に時間を節約してくれます。
関連プロジェクト