Como criar o Container-Optimized OS a partir do código-fonte

O Container-Optimized OS é baseado e criado com ferramentas do projeto Chromium OS de código aberto. Se quiser, é possível criar uma imagem do Container-Optimized OS diretamente do código-fonte dele.

Pré-requisitos

Para criar uma imagem do Container-Optimized OS, instale as seguintes ferramentas na sua máquina de desenvolvimento:

  • git e curl
  • Um pacote de scripts do Chromium chamado depot_tools que inclui ferramentas como repo e cros_sdk.

Como conseguir o código-fonte do Container-Optimized OS

É possível fazer o download do código-fonte do Container-Optimized OS usando a ferramenta repo incluída em depot_tools.

Primeiro, crie um diretório para armazenar o código-fonte. Por exemplo, cos-src no seu diretório inicial:

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

Faça o download do código-fonte usando os seguintes comandos:

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

Como criar uma imagem do Container-Optimized OS

Para criar o Container-Optimized OS, é preciso criar um ambiente chroot adequado. É possível usar a ferramenta cros_sdk incluída em depot_tools para criar e inserir um chroot pronto para a compilação do Container-Optimized OS executando o seguinte comando no diretório de origem que você criou na etapa anterior:

cd $HOME/cos-src
cros_sdk --enter

Uma vez dentro de chroot, é possível criar a imagem do disco. Para criar o Container-Optimized OS, especifique lakitu (imagem x86) ou lakitu-arm64 (imagem ARM) para o nome da placa da seguinte maneira:

Imagem x86

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

Ligar imagem

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

Além de test, é possível criar uma imagem base ou dev passando o parâmetro apropriado para o comando de script ./build image. Se você não especificar um parâmetro, a imagem dev será criada por padrão.

A imagem dev contém algumas ferramentas de depuração adicionais instaladas na imagem base. A imagem test inclui as ferramentas de depuração da imagem dev, bem como as ferramentas necessárias para executar testes automáticos do Container-Optimized OS.

Requisitos de atribuição

Quando você produz uma imagem do Container-Optimized OS, é necessário atender a vários requisitos de atribuição de licenças de terceiros. A imagem gerada por um build contém todas as informações de atribuição relevantes em /opt/google/chrome/resources/about_os_credits.html. Como um artefato de build separado, ele também está disponível como um arquivo license_credits.html no diretório de saída do build.

Como executar sua imagem

Assim que for criada, sua imagem do Container-Optimized OS poderá ser executada usando KVM ou importada para uma instância do Compute Engine.

Como executar no hipervisor

Para inicializar a imagem no hipervisor, execute o seguinte comando:

Imagem 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

Ligar imagem

   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
   

Inicializar dessa maneira deixa a porta serial da VM conectada ao seu console, permitindo que você faça login sem usar SSH. Se você estiver executando uma imagem test, faça login com o par de nome de usuário/senha "root/test0000".

Depois que a VM for iniciada, você poderá acessar sua imagem dev ou test usando SSH. Para usar SSH na imagem, use a chave gerada para a imagem, da seguinte maneira:

Imagem x86

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

Ligar imagem

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

Executar no Compute Engine

Para importar sua imagem para uma instância do Compute Engine, você deve comprimir a imagem em uma .tar arquivo. Execute o seguinte comando para a compactação:

Imagem x86

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

Ligar imagem

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

Depois de criar o arquivo .tar, siga as instruções para importar uma imagem existente na documentação do Compute Engine.