古い Android スマートフォンを Linux サーバーに変えようという私の試みは、複数の Linux ディストリビューションを試すことで終わりました。
でも、Androidスマートフォンをホームサーバーにして、Raspberry Piのようなデバイスに匹敵するサーバーにするのはどうだろう? これがきっかけで別のアイデアが浮かび、このプロジェクトに挑戦してみることにしました。というのも、スマートフォンでPCゲームを動かすことは既に試していたので、Linuxコンテナを動かすのはそれほど難しくないはずだ、と。いや、正確にはそうでもなかったんです。ルート権限がないという制限のため、スマートフォンで実行できるディストリビューションは限られており、パッケージ化されたサービスを実行するよりも、ディストリビューションを切り替える方が便利な構成になってしまったのです。
このセットアップに適切なパッケージを選択します。
最終的に、Temux + proot-distro をセットアップすることを選択しました。
このプロジェクトにおける最大の課題は、スマートフォンをルート化せずに確実に動作する設定を見つけることでした。以前は、スマートフォンを購入後すぐにジェイルブレイクしていました。しかし、最近のアプリには様々な制限が課せられるため、ルート化は避けた方が良いと考えました。
残念ながら、コンテナを直接実行するにはルート化されたマシンが必要で、場合によってはカスタムカーネルモジュールも必要です。この制限のため、代替手段を探す必要がありました。仮想マシン(chroot経由で実行されたものも含む)の実行でも、ルート化されていないマシンで同様の問題が発生しました。
そこで、Androidプロジェクトでよく使う強力なターミナルエミュレーター、Termuxを使うという代替案を考えました。GitHubを少し探してみたところ、proot-distroを見つけました。今回の実験にはぴったりのパッケージだと思いました。これは基本的に、proot環境(chrootのユーザー空間版)を作成し、そこで好きなようにLinuxディストリビューションをいじることができるのです。まさかこれが、その後すぐにディストリビューション巡りの旅へと私を導くことになるとは、当時は知る由もありませんでした。
Android で Linux ディストリビューションをいじくり回す
最初はproot-distroは正常に動作していました。
準備がすべて完了し、プロジェクトを次の段階に進める時が来ました。Termuxで「pkg install proot-distro」コマンドを実行し、必要なパッケージがプルされるまで数分待ちました。その後、「proot-distro install debian」コマンドを実行し、スマートフォンにDebian環境の構築を開始しました。インストールが完了したら、「proot-distro login debian」コマンドを実行してDebianにログインすると、案の定、有名なDebianオペレーティングシステムがスマートフォン上で動作していました。
sudo権限でパッケージを実行できなかったため、まずはお決まりの「apt update」と「apt upgrade」コマンドを使ってパッケージをアップデートしました。次に、DokuWikiを含む通常のパッケージをいくつかインストールしてみましたが、ほとんどのパッケージはすぐに失敗しました。Dockerのインストールも試してみましたが、いくつかエラーが発生しました。これらの失敗にもめげず、Podmanに目を向けてみましたが、これも実行できませんでした。今振り返ってみると、これは完全に理にかなった選択でした。コンテナランタイムをスマートフォンで動作させるには、カーネルにいくつか修正を加える必要があったからです。
しかし、ルートアプリを実行できませんでした。
GitHubを少し覗いてみたら、proot-appsというリポジトリを見つけました。名前から想像がつくかもしれませんが、これはLinuxServerのクリエイティブな開発者たちがproot環境で動作するように設計したアプリケーションのコレクションです。そこで、これらのアプリケーションのいくつかをDebian仮想マシンにインストールしてみました。ところが残念ながら、Nextcloudのような一般的なDockerコンテナ向けに設計されたものは、私の環境では動作しませんでした。興味深いことに、エラーコードにはQEMU(というか、その不在)が記されていましたが、このアプリケーションはQEMUを必要としないはずでした。
しかし、別のディストリビューションでパッケージを実行してみるのもいいかもしれないと思いました。FedoraはPodmanのサポートが優れているので、コンテナランタイムを別のディストリビューションで実行してみることにしましたが、これもうまくいきませんでした。その後、Arch Linux環境でproot-appsを実行してみましたが、他のディストリビューションでは全く動作しませんでした。一番気になったのは、この最後の部分でした…。
Termux-Pentesting-Distroリポジトリに移動しました
しかし、その頃には、私は当初のプロジェクトの目的を見失っていました。
Debian、Fedora、Archといったディストリビューションは「動作」しましたが、多くのアプリケーションはパッケージの問題でインストールできないことに気づきました。neofetchのようなシンプルなプログラムでさえインストールできませんでした。そこで、GitHubでTermux-Pentesting-Distroリポジトリを見つけたので、もう一度試してみることにしました。結果は?このリポジトリは幅広い優れたディストリビューションをサポートしているだけでなく、多くのアプリケーションも実行できることがわかりました。ウィンドウマネージャーやデスクトップ環境は実行できませんでしたが、多くのディストリビューションをスマートフォンにインストールできました。
同様に、Emacs、Neovim、その他必須のLinuxアプリケーションも、新しいディストリビューションのリポジトリからインストールできました。問題は、この頃にはコンテナを実行するという当初の目標から完全に逸脱し、素晴らしいディストリビューションを試すことに完全に移行していたことです。言い訳をすると、Linuxディストリビューションの膨大な数に、特に全く新しい名前のディストリビューションがいくつかあったため、興奮せずにはいられませんでした。さらに、LinuxのすべてのバージョンにはNeofetchが標準搭載されており、ディストリビューションを切り替えること以上に好きなことがあるとすれば、それはNeofetchの素晴らしいウィジェットを見ることです。
今のところ、自分で設定したディストリビューション間の奇妙な切り替えに満足しています。特に、スマートフォンで基本的なコンテナを実行する方法が見つかっていないのでなおさらです。近いうちに、少し古いスマートフォンをルート化して、他の皆さんと同じようにDockerとPodmanコンテナでもう一度試してみる予定です。
コメントは締め切りました。