Chrome OS Flex の リカバリメディア を Linux上で作成

Chrome OS Flex を試してみようと思いました．

Get Chrome OS Flex for PC or Mac – Chrome Enterprise

Google ChromeのExtentionでリカバリメディアを作成して起動するようです．

Chromebook リカバリ ユーティリティ – Chrome ウェブストア

しかし，Linuxで試すと非対応……．

イメージデータさえ入手できればddあたりで書き込みできるのではと探してみました．

The manifest URL is https://dl.google.com/dl/edgedl/chromeos/recovery/cloudready…;

例 1. The extension just downloads a .bin file from Google and writes it onto the USB … | Hacker News

てことでマニフェストjsonファイルがあるのでこの中を見るとそれらしいものが書かれているので

$ curl -s https://dl.google.com/dl/edgedl/chromeos/recovery/cloudready_recovery.json
[
{
"channel": "dev-channel",
"desc": "",
"file": "chromeos_14516.0.0_reven_recovery_dev-channel_mp-v2.bin",
"filesize": 6939566592,
"hwidmatch": "^REVEN($| .*)",
"manufacturer": "Google Chrome OS Flex",
"md5": "7d91cf099c5d7bb33e66cab8cf56a23f",
"model": "Chrome OS Flex (Developer-Unstable)",
"name": "Chrome OS Flex (Developer-Unstable)",
"photourl": "",
"sha1": "b11edcd9ef35ec24a9fcb3d9f4e6c507d3da3637",
"sku": "",
"url": "https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_14516.0.0_reven_recovery_dev-channel_mp-v2.bin.zip",
"version": "14516.0.0",
"zipfilesize": 1095476192,
"chrome_version": "100.0.4880.0",
"hwids": []
}
]

.[].url をダウンロード

$ wget -c $( curl -s https://dl.google.com/dl/edgedl/chromeos/recovery/cloudready_recovery.json | jq -r .[].url )
$ ls -s chromeos_14516.0.0_reven_recovery_dev-channel_mp-v2.bin.zip
1069804 chromeos_14516.0.0_reven_recovery_dev-channel_mp-v2.bin.zip

チェックサムの確認．(md5やsha1なのか……)

$ sha1sum ./chromeos_14516.0.0_reven_recovery_dev-channel_mp-v2.bin.zip
b11edcd9ef35ec24a9fcb3d9f4e6c507d3da3637 ./chromeos_14516.0.0_reven_recovery_dev-channel_mp-v2.bin.zip
$ md5sum ./chromeos_14516.0.0_reven_recovery_dev-channel_mp-v2.bin.zip
7d91cf099c5d7bb33e66cab8cf56a23f ./chromeos_14516.0.0_reven_recovery_dev-channel_mp-v2.bin.zip

PCにターゲットのUSBメモリを差し込む前にdmesgを起動しておいて

$ sudo dmesg -Hw

差し込んだときのメッセージを確認してデバイス名を確認．ここでは sdb ．確認したらCtrl+cでdmesg終了

[ +0.000007] usb 4-2: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[ +0.000002] usb 4-2: Product: Transcend
[ +0.000001] usb 4-2: Manufacturer: TS-RDF5
[ +0.000001] usb 4-2: SerialNumber: 000000000037
[ +0.002415] usb-storage 4-2:1.0: USB Mass Storage device detected
[ +0.000165] scsi host6: usb-storage 4-2:1.0
[ +1.030606] scsi 6:0:0:0: Direct-Access TS-RDF5 SD Transcend TS3A PQ: 0 ANSI: 6
[ +0.000389] sd 6:0:0:0: Attached scsi generic sg2 type 0
[ +0.335897] sd 6:0:0:0: [sdb] 125173760 512-byte logical blocks: (64.1 GB/59.7 GiB)
[ +0.000722] sd 6:0:0:0: [sdb] Write Protect is off
[ +0.000005] sd 6:0:0:0: [sdb] Mode Sense: 23 00 00 00
[ +0.000784] sd 6:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ +0.011296] sdb: sdb1

確認したデバイスに解凍しつつ書き込み．

$ zcat ./chromeos_14516.0.0_reven_recovery_dev-channel_mp-v2.bin.zip | sudo dd of=/dev/sdb bs=8M conv=fsync status=progress

出来上がったメディアから起動すると動作しました．

環境

$ dpkg-query -W jq coreutils curl util-linux
coreutils 8.32-4.1
curl 7.81.0-1
jq 1.6-2.1
util-linux 2.37.3-1+b1
$ lsb_release -dr
Description: Debian GNU/Linux bookworm/sid
Release: unstable
$ arch
x86_64