ソースから Container-Optimized OS をビルドする

Container-Optimized OS は、オープンソースの Chromium OS プロジェクトのツールを使って構築されています。必要に応じて、Container-Optimized OS ソースコードから直接 Container-Optimized OS イメージをビルドできます。

前提条件

Container-Optimized OS のイメージをビルドするには、開発マシンに以下のツールをインストールする必要があります。

  • gitcurl
  • depot_tools という名前の Chromium スクリプトのパッケージ。repocros_sdk などのツールが含まれています。

Container-Optimized OS のソースコードを入手する

Container-Optimized OS のソースコードは、depot_tools 中の repo ツールを使用してダウンロードできます。

まず、ソースコードを保存するディレクトリを作成します。たとえば、ホーム ディレクトリで cos-src を指定します。

mkdir $HOME/cos-src
cd $HOME/cos-src

次に、以下のコマンドを使用して、ソースコードをダウンロードします。

repo init https://cos.googlesource.com/cos/manifest.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 のドキュメントの手順に従って既存のイメージをインポートできます。