Cómo compilar Container-Optimized OS desde la fuente

Container-Optimized OS se basa en las herramientas del proyecto de código abierto de Chromium OS y se compila con el uso de las herramientas de tal proyecto. 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 incluya 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 ARM) para el nombre de la placa de la siguiente manera:

Imagen x86

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

Imagen de brazo

   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 generas una imagen de Container-Optimized OS, debes cumplir con varios requisitos de atribución de licencias de terceros. La imagen que genera una compilación contiene toda la información de atribución relevante en /opt/google/chrome/resources/about_os_credits.html. Como artefacto de compilación independiente, también está disponible como archivo license_credits.html en el directorio de salida 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 un hipervisor

Para iniciar tu imagen en un 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 de brazo

   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 mediante SSH. Para establecer una conexión SSH a la imagen, usa 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 de brazo

   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 de brazo

   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.