Container-Optimized OS は、オープンソースの Chromium OS プロジェクトのツールを使って構築されています。必要に応じて、Container-Optimized OS ソースコードから直接 Container-Optimized OS イメージをビルドできます。
前提条件
Container-Optimized OS のイメージをビルドするには、開発マシンに以下のツールをインストールする必要があります。
git
とcurl
depot_tools
という名前の Chromium スクリプトのパッケージ。repo
やcros_sdk
などのツールが含まれています。
Container-Optimized OS のソースコードを入手する
Container-Optimized OS のソースコードは、depot_tools
中の repo
ツールを使用してダウンロードできます。
まず、ソースコードを保存するディレクトリを作成します。たとえば、ホーム ディレクトリで cos-src
を指定します。
mkdir $HOME/cos-src
cd $HOME/cos-src
次に、以下のコマンドを使用して、ソースコードをダウンロードします。
repo init -u https://cos.googlesource.com/cos/manifest.git \
--repo-url https://chromium.googlesource.com/external/repo.git
repo sync
Container-Optimized OS イメージをビルドする
Container-Optimized OS をビルドするには、適切な chroot
環境を作成する必要があります。前の手順で作成したソース ディレクトリで次のコマンドを実行し、depot_tools
に含まれる cros_sdk
を使用して、Container-Optimized OS のコンパイル用の chroot
を作成してその中に移動できます。
cd $HOME/cos-src
cros_sdk --enter
chroot
に移動したら、ディスク イメージをビルドできます。Container-Optimized OS をビルドするには、次のようにボード名に lakitu
(x86 イメージ)または lakitu-arm64
(Arm イメージ)を指定します。
x86 イメージ
build_packages --board=lakitu
build_image --board=lakitu test
ARM イメージ
build_packages --board=lakitu-arm64
build_image --board=lakitu-arm64 test
test
に加えて、./build image
スクリプト コマンドに適切なパラメータを渡すことで base
または dev
イメージをビルドできます。パラメータを指定しない場合は、デフォルトで dev
イメージがビルドされます。
dev
イメージには、base
イメージの上にインストールされる追加のデバッグツールが含まれます。test
イメージには、Container-Optimized OS の自動テストの実行に必要なツールのほかに、dev
イメージのデバッグツールが含まれます。
帰属表示の要件
Container-Optimized OS イメージを作成する場合は、サードパーティ ライセンスのさまざまな帰属表示要件を満たす必要があります。ビルドによって生成されたイメージには、/opt/google/chrome/resources/about_os_credits.html
に関連するすべての帰属情報が含まれます。また、別のビルド アーティファクトとして、license_credits.html
ファイルとして使用することもできます。
イメージを実行する
Container-Optimized OS イメージを作成したら、KVM を使用してイメージを実行するか、イメージを Compute Engine インスタンスにインポートできます。
ハイパーバイザで実行する
イメージをハイパーバイザで起動するには、次のコマンドを実行します。
x86 イメージ
kvm -m 1024 -nographic -net nic,model=virtio -net user,hostfwd=tcp:127.0.0.1:9222-:22 -hda src/build/images/lakitu/latest/chromiumos_test_image.bin
ARM イメージ
sudo apt-get install qemu-system-arm qemu-efi
dd if=/dev/zero of=/tmp/flash0.img bs=1M count=64
dd if=/usr/share/qemu-efi/QEMU_EFI.fd of=/tmp/flash0.img conv=notrunc
sudo qemu-system-aarch64 -m 1024 -cpu cortex-a57 -M virt -nographic \ -pflash /tmp/flash0.img \ -device virtio-scsi-pci,id=scsi \ -drive if=none,file=src/build/images/lakitu-arm64/latest/chromiumos_test_image.bin,id=hd0 \ -device scsi-hd,drive=hd0,bootindex=0 \ -net nic \ -net user,hostfwd=tcp::9222-:22
この方法で起動すると、VM のシリアルポートがコンソールに接続されたままになり、SSH を使用せずにログインできるようになります。test
イメージを実行している場合は、ユーザー名とパスワードのペア「root / test0000」でログインできます。
VM が起動したら、SSH を使用して dev
または test
イメージにアクセスできます。イメージに SSH 接続するには、そのイメージ用に生成されたキーを次のように使用します。
x86 イメージ
ssh root@localhost -p 9222 -i src/build/images/lakitu/latest/id_rsa
ARM イメージ
ssh root@localhost -p 9222 -i src/build/images/lakitu-arm64/latest/id_rsa
Compute Engine での実行
Compute Engine インスタンスにイメージをインポートするには、イメージを .tar
ファイルに圧縮する必要があります。イメージを圧縮するには、次のコマンドを実行します。
x86 イメージ
tar -Sczf compressed-image.tar.gz images/lakitu/latest/chromiumos_image.bin --transform 's|images/lakitu/latest/chromiumos_image.bin|disk.raw|'
ARM イメージ
tar -Sczf compressed-image.tar.gz images/lakitu-arm64/latest/chromiumos_image.bin --transform 's|images/lakitu-arm64/latest/chromiumos_image.bin|disk.raw|'
.tar
ファイルを作成したら、Compute Engine のドキュメントの手順に従って既存のイメージをインポートできます。