Creación de un sistema operativo optimizado para contenedores desde el código fuente

Container-Optimized OS se basa en herramientas del proyecto Chromium OS de código abierto y se ha desarrollado con ellas. Si lo desea, puede crear una imagen de Container-Optimized OS directamente desde su código fuente.

Prerrequisitos

Para crear una imagen de sistema operativo optimizada para contenedores, necesitará instalar las siguientes herramientas en su máquina de desarrollo:

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

Obtención del código fuente del sistema operativo optimizado para contenedores

Puede descargar el código fuente de Container-Optimized OS utilizando la herramienta repo que está incluida en depot_tools .

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

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

Ahora descargue el código fuente usando los siguientes comandos:

repo init https://cos.googlesource.com/cos/manifest.git
repo sync

Creación de una imagen de sistema operativo optimizada para contenedores

Para compilar un sistema operativo optimizado para contenedores, debe crear un entorno chroot adecuado. Puede usar la herramienta cros_sdk , incluida en depot_tools para crear e ingresar un chroot listo para la compilación del sistema operativo optimizado para contenedores. Para ello, ejecute el siguiente comando en el directorio de origen creado en el paso anterior:

cd $HOME/cos-src
cros_sdk --enter

Una vez dentro de chroot , puede crear la imagen de disco. Para crear un sistema operativo optimizado para contenedores, especifique lakitu (imagen x86) o lakitu-arm64 (imagen ARM) como nombre de la placa, como se indica a continuación:

imagen x86

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

Imagen del brazo

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

Además de test , puedes crear una imagen base o dev pasando el parámetro correspondiente al comando de script ./build image . Si no especificas ningún parámetro, la imagen dev se crea por defecto .

La imagen dev contiene 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 del sistema operativo optimizado para contenedores.

Requisitos de atribución

Al generar una imagen de SO optimizada para contenedores, debe cumplir con varios requisitos de atribución de 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 artefacto de compilación independiente, también está disponible como archivo license_credits.html en el directorio de salida de la compilación.

Ejecutando su imagen

Una vez que haya creado su imagen de sistema operativo optimizada para contenedores, puede ejecutar la imagen usando KVM o importarla a una instancia de Compute Engine .

Ejecutándose en el hipervisor

Para iniciar su imagen en el hipervisor, ejecute 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 del 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
   

Al arrancar de esta manera, el puerto serie de la máquina virtual permanece conectado a la consola, lo que permite iniciar sesión sin usar SSH. Si está ejecutando una imagen test , puede iniciar sesión con el par de nombre de usuario y contraseña "root/test0000".

Una vez iniciada la máquina virtual, puede acceder a su imagen dev o test mediante SSH. Para acceder a la imagen mediante SSH, utilice la clave generada para ella, como se indica a continuación:

imagen x86

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

Imagen del brazo

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

Ejecutándose en Compute Engine

Para importar su imagen a una instancia de Compute Engine, debe comprimirla en un archivo .tar . Para ello, ejecute 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 del 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|'

Después de haber creado su archivo .tar , puede seguir las instrucciones para importar una imagen existente en la documentación de Compute Engine.