Cómo compilar Container-Optimized OS desde la fuente

Container-Optimized OS se basa en herramientas del conjunto de datos código abierto Chromium en un proyecto final. Si lo deseas, puedes compilar una imagen de Container-Optimized OS directamente desde el código fuente de Container-Optimized OS.

Requisitos previos

Para compilar una imagen de Container-Optimized OS, tendrás que instalar las siguientes herramientas en la máquina de desarrollo:

  • git y curl
  • Un paquete de secuencias de comandos de Chromium llamado depot_tools que incluye herramientas como repo y cros_sdk.

Cómo obtener el código fuente de Container-Optimized OS

Puedes descargar el código fuente para Container-Optimized OS con la herramienta repo que se incluye en depot_tools.

Primero, crea un directorio para almacenar el código fuente. Por ejemplo, cos-src en tu directorio principal:

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

Ahora, descarga el código fuente con los siguientes comandos:

repo init -u https://cos.googlesource.com/cos/manifest.git \
  --repo-url https://chromium.googlesource.com/external/repo.git
repo sync

Cómo compilar una imagen de Container-Optimized OS

Para compilar Container-Optimized OS, debes crear un entorno chroot adecuado. Puedes usar la herramienta de cros_sdk incluida en depot_tools a fin de crear y, luego, ingresar un chroot que está listo para la compilación de Container-Optimized OS, ejecuta el siguiente comando en el directorio del código fuente que creaste en el paso anterior:

cd $HOME/cos-src
cros_sdk --enter

Una vez dentro del chroot, puedes compilar la imagen. Para compilar Container-Optimized OS, especifica lakitu (imagen x86) o lakitu-arm64 (imagen del brazo) para el nombre de la placa de la siguiente manera:

Imagen x86

   build_packages --board=lakitu
   build_image --board=lakitu test

Imagen ARM

   build_packages --board=lakitu-arm64
   build_image --board=lakitu-arm64 test

Además de test, puedes compilar una imagen base o dev si pasas el parámetro adecuado para el comando de la secuencia de comandos ./build image. Si no especificas un parámetro, la imagen dev se compila de forma predeterminada.

La imagen de dev contiene algunas herramientas de depuración adicionales instaladas en la parte superior de la imagen de base. La imagen test incluye las herramientas de depuración de la imagen dev y las herramientas necesarias para ejecutar pruebas automáticas de Container-Optimized OS.

Requisitos de atribución

Cuando produces una imagen de Container-Optimized OS, debes cumplir con varios requisitos de atribución de las licencias de terceros. La imagen generada por una compilación contiene toda la información de atribución relevante en /opt/google/chrome/resources/about_os_credits.html Como una compilación independiente artefacto, también está disponible como archivo license_credits.html en el resultado de la compilación .

Cómo ejecutar la imagen

Una vez que hayas compilado la imagen de Container-Optimized OS, puedes ejecutar la imagen con el uso de KVM, o importar la imagen a una instancia de Compute Engine.

Ejecución en hipervisor

Para iniciar la imagen en el hipervisor, ejecuta el siguiente comando:

Imagen 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

Imagen 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
   

El arranque de esta manera deja el puerto en serie de la VM conectado a la consola, lo que te permite acceder sin usar SSH. Si ejecutas una imagen test, puedes acceder con el par de nombre de usuario/contraseña “root/test0000”.

Una vez que se inicia la VM, puedes acceder a la imagen dev o test con el uso de SSH. Para emplear SSH en la imagen, utiliza la clave generada para esa imagen de la siguiente manera:

Imagen x86

   ssh root@localhost -p 9222 -i src/build/images/lakitu/latest/id_rsa

Imagen ARM

   ssh root@localhost -p 9222 -i src/build/images/lakitu-arm64/latest/id_rsa

Cómo ejecutar en Compute Engine

Para importar la imagen a una instancia de Compute Engine, debes comprimir la imagen en un archivo .tar. Para comprimir la imagen, ejecuta el siguiente comando:

Imagen x86

   tar -Sczf compressed-image.tar.gz images/lakitu/latest/chromiumos_image.bin --transform 's|images/lakitu/latest/chromiumos_image.bin|disk.raw|'

Imagen 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|'

Una vez que hayas creado el archivo .tar, puedes seguir las instrucciones para importar una imagen existente en la documentación de Compute Engine.