Pixel9でChromiumOS を起動するメモ
はじめに
Android 15 QPR2 Beta2になり、Android 仮想化フレームワーク (AVF)を使用したカスタムVMを簡単に利用することが可能となるVmLauncherがStock ROMに含まれたので、これを利用してChromiumOSを起動する方法のメモを残しておきます。
前提条件
カスタムVMを利用するための前提は以下となります。
Android 15 QPR2 Beta1がインストールされていること
BootLoaderがUnlockされていること
root権限が使用できること
PixelシリーズでpKVMが有効となっていること
(fastboot oem pkvmの結果でpKVM is enabledであること)SELinuxが無効になっていること(VmLauncher起動条件)
基本的に対象機器は、Pixel6以降の機種になるかと思います。
(私はPixel 9 Pro Foldで試しています)
実装してみる
基本的には「Custom VM」の内容通り実行すれば動きますが、少しノウハウがあるので細かく記載していきます。
ChromiumOSを準備する
Graphical VMsの「Download ChromiumOS from build server」の項目部分に記載があります。
Googleでテストしている「R128-15926.0.0.」を使う場合は、「https://storage.googleapis.com/chromiumos-image-archive/ferrochrome-public/R128-15926.0.0/chromiumos_test_image.tar.xz」をダウンロードしてください。
最新のバージョンをダウンロードする場合は、下記手順になります。
$ URL=https://storage.googleapis.com/chromiumos-image-archive/ferrochrome-public
$ LATEST_VERSION=$(curl -s ${URL}/LATEST-main)
$ curl -O ${URL}/${LATEST_VERSION}/chromiumos_test_image.tar.xz
Linuxの別環境でDownloadしてadb pushでPixelの/data/local/tmpへ送っても良いですし、Termuxとかをインストールしていれば端末上で直接ダウンロードしてもOKです。
xzを解凍したchromiumos_test_image.binを、端末の/data/local/tmpへ配置してください。
以下は、adb shellで直接ダウンロードする場合の例(Termuxを使用している場合。)
・TermuxのcurlにPathを通す
comet:/data/local/tmp # export PATH=/data/data/com.termux/files/usr/bin:$PATH
・/data/local/tmpにchromiumos_test_image.tar.xzをDownloadする
comet:/data/local/tmp # URL=https://storage.googleapis.com/chromiumos-image-archive/ferrochrome-public
comet:/data/local/tmp # LATEST_VERSION=$(curl -s ${URL}/LATEST-main)
comet:/data/local/tmp # curl -O ${URL}/${LATEST_VERSION}/chromiumos_test_image.tar.xz
・chromiumos_test_image.tar.xzを解凍
comet:/data/local/tmp # tar Jxfv chromiumos_test_image.tar.xz
chromiumos_test_image.bin
vm_config.jsonファイルの作成と配置
Create a guest VM configurationの項目になります。
下記の内容の「vm_config.json」ファイルを作成・配置をします。
{
"name": "cros",
"disks": [
{
"image": "/data/local/tmp/chromiumos_test_image.bin",
"partitions": [],
"writable": true
}
],
"protected": false,
"cpu_topology": "match_host",
"platform_version": "~1.0",
"memory_mib": 8096,
"debuggable": true,
"console_out": true,
"connect_console": true,
"console_input_device": "hvc0",
"network": true,
"input": {
"touchscreen": true,
"keyboard": true,
"mouse": true,
"trackpad": true,
"switches": true
},
"audio": {
"speaker": true,
"microphone": true
},
"gpu": {
"backend": "virglrenderer",
"context_types": ["virgl2"]
},
"display": {
"scale": "0.77",
"refresh_rate": "30"
}
}
作成したらPixel端末へ送ります。
$ adb push vm_config.json /data/local/tmp
ここまで出来たらあとはVmLauncherを起動するだけです。
VmLauncherの起動
後は起動するだけです。「Running the VM」の項目通り進めます。
・・・が、VmLauncherはデバッグアプリ扱いだからかSELinuxを無効化しないと起動しないです。セキュリティがかなり落ちますのでご注意ください。
(1)adb shell起動
> adb shell
comet:/ $ su
(2)権限付与
comet:/ # pm grant com.google.android.virtualization.vmlauncher android.permission.USE_CUSTOM_VIRTUAL_MACHINE
(3)SELinux 無効化
comet:/ # setenforce 0
(4)VmLauncherの起動
comet:/ # am start-activity -a android.virtualization.VM_LAUNCHER
※起動時は画面ロックを解除しておいてください。
起動画面スクショ
あとがき
今回の実装により、Android端末により簡単にVM環境を降り扱えるようになりました。
今回は「ChromiumOS」を取り上げましたが、同じページの説明のあるDebianもデスクトップの設定を行うことでGUI起動することが出来ています。今後様々なOSでの起動のチャレンジや、launcher自体の最適化が進んでいくと思うので期待しています。