通过源代码构建 Container-Optimized OS

Container-Optimized OS 基于 开源 Chromium OS 项目。如果愿意,您可以直接使用 Container-Optimized OS 源代码自行构建 Container-Optimized OS 映像。

前提条件

要构建 Container-Optimized OS 映像,您需要在开发机器上安装以下工具:

  • git”和“curl
  • 一个名为 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 -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 image) 作为板名称,如下所示:

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 映像时,您需要满足第三方许可的各种归属要求。build 生成的图片包含 /opt/google/chrome/resources/about_os_credits.html 中的所有相关归属信息。作为单独的 build 工件,它还可在 build 输出目录中作为 license_credits.html 文件提供。

运行您的映像

构建好 Container-Optimized OS 映像后,您可以使用 KVM 运行映像,或将映像导入 Compute Engine 实例。

在 Hypervisor 中运行

如需在 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
   

以这种方式启动时,系统会将虚拟机的串行端口连接到控制台,让您无需使用 SSH 即可登录。如果您运行的是 test 映像,则可以使用用户名/密码对“root/test0000”登录。

启动虚拟机后,您可以使用 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 文档中的说明导入现有映像