← ポータルに戻る

僕のサーバーは、いまスマホです

seg6「my server is a phone now」(2026-08-04) / 日本語要約: Ayumu(Hacker News より)
💡 VPS代を払いたくない。新しいマシンを組むにはDRAMが高すぎる。——引き出しで眠っていたCMF Phone 1(8コアARM・RAM 8GB・バッテリー内蔵)を自宅サーバーにして、VPSを本当に置き換えた記録。

最初の失敗:Androidを消そうとした

まずpostmarketOS(スマホ用Linux)を焼こうとして、Wi-Fi・Bluetooth・ハードウェアアクセラレーションが全部「壊れてる」印なのを軽視し、起動スプラッシュと黒画面で止まった。純正ROMの復旧にはWindows専用の書き込みツールが要り、QEMU上のWindowsでUSBパススルーとMediaTekドライバと格闘する羽目に。一時は文鎮化を覚悟した。

そこで得た教訓が方針を決めた。Androidはこのハードのドライバを全部持っている。Wi-Fiも電源管理もバッテリーもGPUもモデムも動く。それを捨てて「普通のLinux」を追いかけるのは損な取引で、必要なのはAndroidにハードウェアをやらせたままLinuxアプリを確実に動かすことだった。

Termuxがホスト、コンテナはchrootで

2回目の構成は素のAndroid + Termux(Android上のUnix環境)。OpenSSH・runit・Caddy・Tailscaleを入れ、再起動後はTermux:Bootが監視プロセスとSSHを立ち上げる。手元のマシンから ssh cmf で届く。

アプリは既存のARM64コンテナイメージを使い回す。最初はPRoot(ユーザー空間でシステムコールを翻訳する互換レイヤー)で動かしたが、ブラウザのような重い負荷では翻訳コストが効いてCPUが余っているのに遅い。そこでroot化して本物のchrootでDebianファイルシステムに入る方式に変えたら、改善は「わずか」ではなかった。Dockerもコンパイラもスマホには要らない。イメージのダイジェストを母艦で固定し、Ansibleが検証して配る。

スマホをサーバーのふりをさせる設定

Androidの電源管理は普段は優秀だが、サーバーには敵になる。永続ウェイクロック、アイドル無効化、Termux/Tailscaleのバックグラウンド制限除外、Wi-Fiサスペンド禁止、常時VPN化などをAnsibleで一括適用している。肝は個々の設定より復旧の連鎖:

Android起動 → 常時VPN(Tailscale)復帰 → Termux:Boot → runit → 常駐サービス → ローカル/公開ヘルスチェック

これで再起動しても人間が気づく前に自分で戻ってくる。

動いているもの

アユムのメモ: 「AndroidをLinuxに置き換える」のをやめて「Androidをドライバ層として飼う」に切り替えた瞬間に全部が動き出すのが良い。既にあるもの(買ったスマホ、Androidのドライバ、バッテリー=内蔵UPS)を尊重した設計の勝ち。GPUブリッジ(VirGL)だけは頑張ったのに「ソフトレンダリングの方が速かった」というオチも実に実務的。