Droidspacesでスマートフォン上にsystemd対応の本格的Linux環境を構築する
古いAndroidスマートフォンは、家庭用サーバーやTelegramボット、ローカルテスト環境として再利用されることがよくあります。通常はTermuxとPRoot、またはchrootを使ってこれを実現しますが、これらのアプローチには重大な欠点があります。PRootはptrace経由で全てのシステムコールを傍受するため、パフォーマンスが低下します。通常のchrootはファイルシステムのみを隔離し、プロセスツリーやネットワークはホストと共有したままです。そして最も重要なことに、cgroups、SELinux、AndroidのLMKメモリキラー 인해、Android上で完全にsystemdをPID 1として動作させることは常に困難な課題でした。
開発者ravindu644によるDroidspacesプロジェクトは、別の解決策を提供します。musl libcでビルドされた約400KBのバイナリで、標準的なLinuxカーネル名前空間を使用し、実際の初期化、グラフィックアクセラレーション、ネットワークを備えた分離コンテナを起動します。
Droidspacesが他のツールと異なる点
Termux上で動作する重量級のLXCやDockerスタックとは異なり、Droidspacesはカーネルと直接連携します。外部依存関係はありません。システムのカーネルが名前空間をサポートしていれば、Android recovery環境(RecoveryまたはRamdisk)でも動作します。
Droidspacesと familiar なツールを比較してみましょう:
- PRootでは全てのシステムコールに遅延が発生します。ここではコンテナがネイティブに動作します。
- 通常のchrootは単純なプロセス表示コマンドで失敗します。DroidspacesはPID、MNT、UTS、IPC、Cgroupの真正な隔離を提供します。
- Androidのバックグラウンドプロセスキラーは、Termuxとそのサービスを閉じることがよくあります。Droidspacesはsetsidでアプリケーションセッションから切り離され、バックグラウンドデーモンとして動作します。
- Androidアプリを削除しても、コンテナは独立して動作し続け、データは保持されます。
手動設定不要のグラフィック、サウンド、ネットワーク
バージョン6.x以降、ユーティリティは自動的にグラフィックとオーディオを転送できます。XFCEやその他のデスクトップ環境が必要な場合でも、Termuxで環境変数を手動で設定したりサーバーを起動したりする必要はありません。
соответствующие togglesが有効な場合、ユーティリティは自動的にTermux:X11、VirGL、PulseAudioを起動します。コンテナ内では、DISPLAY=:5とGALLIUM_DRIVER=virpipe変数が自動的に設定されます。Qualcomm Adreno GPUの場合、Turnipドライバーと直接GPUパススルーが利用可能です。
4つのネットワークモードがサポートされています:
- Host(デバイスとネットワークを共有)
- NAT(インターフェースとポート転送の自動検出を伴う分離ネットワーク)
- None(完全なネットワーク隔離)
- Gateway(別のコンテナへのルーティング委任、例:OpenWRT)
管理とコード作業
Android用の便利なGUIがKotlinで作成されました。マウントポイントの設定、ハードウェアリソースの割り当て、ポート転送、systemdブートログの表示を行います。
デスクトップLinuxまたはSSH経由では、コマンドラインユーティリティでデバイスを管理します:
# Проверка готовности ядра
sudo ./droidspaces check
# Запуск контейнера с файлом конфигурации
sudo ./droidspaces start ubuntu --conf /path/to/ubuntu.config
# Вход в консоль запущенного контейнера
sudo ./droidspaces enter ubuntu
ファイルシステムを危険にさらすことなくソフトウェアをテストする必要がある場合、Volatileモードが便利です。OverlayFSを使用し、すべての変更をRAMに保存し、停止時に即座に破棄します。
カーネル要件とセキュリティのニュアンス
ルート権限がなければ、何も起こりません。KernelSU、Magisk、APatchのいずれかと、カーネルバージョン3.10以上が必要です。
古いカーネル(3.10〜4.19)では、Androidの仕様に対処する必要があります。FBE暗号化との競合とVFSの特性により、カーネルのデッドロックが発生することがあります。著者はDeadlock Shield toggleとBPFフィルター提供了しました。保護を無効にすると、Droidspaces内でDockerを実行することすら可能です(ネストされたコンテナ)。最新のGKIカーネル(5.4+)では、すべての機能が箱から出してすぐに利用可能です。
重要なセキュリティメモ:Droidspacesは熱心なユーザーのために作成されており、厳格なサンドボックスとしては機能しません。コンテナ内のroot権限を持つプロセスはカーネルコールにアクセスでき、--privilegedフラグはほとんどのcapabilitiesとseccomp制限を無効にします。個人デバイスで疑わしいコードを実行することは避けるべきです。
このプロジェクトが役立つ人
このツールは、古いタブレットやスマートフォンをローカルサーバーに変換したい人にアピールします。Dockerコンテナ、home Home Assistant、データベースインスタンス、またはGPUによるレンダリングを備えた完全なデスクトップ環境の起動に便利です。
GitHubのリリースでは、aarch64、armhf、x86_64、x86、riscv64アーキテクチャ用の готовыеバイナリが利用可能です。
関連プロジェクト