dockerをLinuxを入れたAndroid端末で動かす
以前Nexus 5にUbuntu Touchを入れる記事を書きました。目的はそこでdockerを動かすことだったのですがうまく行きませんでした。
dockerをAndroidで動かす方法がhttps://gist.github.com/FreddieOliveira/efe850df7ff3951cb62d74bd770dce27に書かれていたのですが、AndroidのOSイメージをビルドする必要がありちょっとハードルが高いなと思っていました。
AndroidOSはLinuxをベースにしていますが、docker用の設定がオフになっているためOSをビルドする必要があるようです。
なんとpostmarketOSというOSをインストールして、apk add dockerでdockerがインストールされてdockerが起動するとのこと。
下記が私がNexus 5にインストールした方法です。
インストール
作業はUbuntuマシンで行いました、wslでもpmbootstrapコマンドが実行できてUSBでfastbootでAndroid端末に接続できればいけるとおもいます。
# pmbootstrapのインストール
## まずpmbootstrapというコマンドを動くようにする apt install pmbootstrapで入れたがうまく動かなかったのでgit cloneした
$ git clone https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git
$ mkdir -p ~/.local/bin
$ ln -s "$PWD/pmbootstrap.py" ~/.local/bin/pmbootstrap
## 一旦ログアウトしてログイン
$ pmbootstrap --version
# 端末をfastbootモードにする
## Volume下ボタンを押しながら電源ボタンを押し起動
## USBケーブルでAndroid端末と作業用PCを接続
$ fastboot devices
### 端末が表示されるのを確認
# インストールイメージの作成
## イメージ用の初期設定
$ pmbootstrap init
### 下記のような選択項目が出るので参考にして設定してください
channel v24.12
vendor lg
device hammerhead
user sample-user
pdovider [default]: default
User interface [console]: phosh
Change them? (y/n) [n]: n
Extra packages [none]: none
GMT? (y/n) [y]: y
Locale [en_US]: ja_JP
Device hostname (short form, e.g. 'foo') [lg-hammerhead]: lg-hammerhead
Would you like to copy these public keys to the device? (y/n) [n]: n
Build outdated packages during 'pmbootstrap install'? (y/n) [y]: y
Zap existing chroots to apply configuration? (y/n) [y]: y
## OSイメージの作成、installはされないようです
$ pmbootstrap install
## 端末への書き込み
$ pmbootstrap flasher flash_lk2nd
$ pmbootstrap flasher flash_rootfs
$ pmbootstrap flasher flash_kernel
## 端末の再起動
$ fastboot reboot
起動
なお、私のNexus 5にはUbuntu TouchがインストールされていたのでbootloaderもrecoveryもUBPortのものが入っていました。そのためなのか起動がうまく行かない瞬間がありbootloaderだけ公式のものを入れなおしました。
https://developers.google.com/android/images?hl=ja から最新の nexus 5のイメージを持ってきて解凍し、下記コマンドを叩いてください。
$ fastboot flash bootloader ./bootloader-hammerhead-hhz20h.img
また起動がうまく行かない場合は起動時にVolumeの下ボタンか上ボタンを押してみてください。 うまく行かない場合は、電源長押しで電源をオフにして何度か試してください。
インターフェースについて
インストールイメージの作成時にconsoleやfbkeyboardを選ぶとGUIはインストールされずコンソール(ターミナル)のみが表示されます。 fbkeyboardはキーボードも表示されるので入力できるのですが、文字が小さすぎて虫メガネでも無いと無理です。
また、Xfce4などは普通のデスクトップ用のUIが表示されるのでこれも小さすぎて操作が困難です。
USB経由でのSSH接続
Linux PCとpostmarketOSの起動したAndroid端末をUSBで接続しておくと、下記でSSH接続できます。
$ ssh 172.16.42.1
詳細はpostmarketOSのwikiを参照してください。
Wi-Fiの設定
インターフェースにphoshを選択しているのであれば、postmarketOSを起動すればAndroidのようなホーム画面を表示できるようになります。
設定もしくはSettingsからWi-Fiを選択し、Wi-Fiネットワークに接続できます。
接続はいわゆるAndroidでのWi-Fiの接続と変わりません。
docker のインストールとhello-world
下記でdockerインストールからhello-worldが表示できます。
簡単です。
$ sudo apk add docker
$ sudo service docker start
$ sudo rc-update add docker default
$ sudo docker run hello-world
# docker compose コマンドを使う場合は下記
## /etc/apk/repositories に http://dl-cdn.alpinelinux.org/alpine/edge/testing を追記
$ sudo vim /etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/edge/testing
Nexus 5の固有設定
postmarketOSのNexus 5のページは下記です。うまく行かない場合は参照ください。
https://wiki.postmarketos.org/wiki/Google_Nexus_5_(lg-hammerhead)
追記
- 2025/01/14 USB経由でのSSH接続についてとWi-Fiについてを追記