從原始碼建構 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 原始碼

您可以使用 depot_tools 中的 repo 工具,下載 Container-Optimized OS 的原始碼。

首先,請建立目錄來儲存原始碼。例如主目錄中的 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 指令碼指令,藉此建構 basedev 映像檔。如未指定參數,「預設將會建構 dev 映像檔」

dev 映像檔包含以 base 映像檔為基礎所安裝的部分額外偵錯工具。test 映像檔包含來自 dev 映像檔的偵錯工具,以及執行自動 Container-Optimized OS 測試所需的工具。

註明出處基本需求

製作 Container-Optimized OS 映像檔時,您必須遵守第三方授權的各種歸屬要求。建構作業產生的圖片會包含 /opt/google/chrome/resources/about_os_credits.html 中的所有相關歸屬資訊。由於這是獨立的建構構件,因此也可在建構輸出目錄中做為 license_credits.html 檔案使用。

執行映像檔

建構 Container-Optimized OS 映像檔後,您可以執行使用 KVM 的映像檔,或將映像檔匯入至 Compute Engine 執行個體。

在管理程序中執行

如要在 Hypervisor 中啟動映像檔,請執行下列指令:

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 存取 devtest 映像檔。如要透過 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 說明文件的操作說明來匯入現有映像檔