Compilar Container-Optimized OS a partir del código fuente

Container-Optimized OS se basa en herramientas del proyecto de código abierto Chromium OS y se ha creado con ellas. Si quieres, puedes compilar una imagen de Container-Optimized OS directamente desde el código fuente de Container-Optimized OS.

Requisitos previos

Para crear una imagen de Container-Optimized OS, debes instalar las siguientes herramientas en tu 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.

Obtener el código fuente de Container-Optimized OS

Puedes descargar el código fuente de Container-Optimized OS con la herramienta repo incluida 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 https://cos.googlesource.com/cos/manifest.git
repo sync

Crear una imagen de Container-Optimized OS

Para compilar Container-Optimized OS, debe crear un chroot entorno adecuado. Puedes usar la herramienta cros_sdk incluida en depot_tools para crear e introducir un chroot que esté listo para la compilación de Container-Optimized OS. Para ello, ejecuta el siguiente comando en el directorio de origen que has creado en el paso anterior:

cd $HOME/cos-src
cros_sdk --enter

Una vez dentro de chroot, puedes crear la imagen de disco. Para compilar Container-Optimized OS, especifica lakitu (imagen x86) o lakitu-arm64 (imagen Arm) en 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 crear una imagen base o dev si envías el parámetro adecuado al comando de secuencia de comandos ./build image. Si no especifica ningún parámetro, la imagen dev se genera de forma predeterminada.

La imagen dev contiene algunas herramientas de depuración adicionales instaladas sobre la imagen base. La imagen test incluye las herramientas de depuración de la imagen dev, así como las herramientas necesarias para ejecutar pruebas automáticas de Container-Optimized OS.

Requisitos de atribución

Cuando creas una imagen de Container-Optimized OS, debes cumplir varios requisitos de atribución de licencias de terceros. La imagen generada por una compilación contiene toda la información de atribución pertinente 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.

Ejecutar la imagen

Una vez que hayas creado tu imagen de Container-Optimized OS, puedes ejecutarla con KVM o importarla a una instancia de Compute Engine.

Se está ejecutando en el hipervisor

Para arrancar 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 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
   

Si arrancas de esta forma, el puerto serie de la VM se conectará a tu consola, lo que te permitirá iniciar sesión sin usar SSH. Si estás ejecutando una imagen test, puedes iniciar sesión con el par de nombre de usuario y contraseña "root/test0000".

Una vez que se haya iniciado la VM, podrás acceder a tu imagen de dev o test mediante SSH. Para acceder a la imagen mediante SSH, usa la clave generada para esa imagen, como se indica a continuación:

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

Ejecutar en Compute Engine

Para importar una imagen a una instancia de Compute Engine, debes comprimirla 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 en la documentación de Compute Engine.