Creazione di Container-Optimized OS dal codice sorgente

Container-Optimized OS è basato e creato utilizzando gli strumenti del progetto open source Chromium OS. Se vuoi, puoi creare autonomamente un'immagine del sistema operativo ottimizzato per i container direttamente dal codice sorgente di Container-Optimized OS.

Prerequisiti

Per creare un'immagine del sistema operativo ottimizzato per i container, devi installare i seguenti strumenti sulla tua macchina di sviluppo:

  • git e curl
  • Un pacchetto di script di Chromium chiamato depot_tools che include strumenti come repo e cros_sdk.

Ottenere il codice sorgente di Container-Optimized OS

Puoi scaricare il codice sorgente di Container-Optimized OS utilizzando lo strumento repo incluso in depot_tools.

Per prima cosa, crea una directory per archiviare il codice sorgente. Ad esempio, cos-src nella tua home directory:

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

Ora scarica il codice sorgente utilizzando i seguenti comandi:

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

Creazione di un'immagine del sistema operativo ottimizzato per i container

Per compilare Container-Optimized OS, devi creare un ambiente chroot idoneo. Puoi utilizzare lo strumento cros_sdk incluso in depot_tools per creare e inserire un chroot pronto per la compilazione del sistema operativo ottimizzato per i container eseguendo il seguente comando nella directory di origine creata nel passaggio precedente:

cd $HOME/cos-src
cros_sdk --enter

Una volta all'interno di chroot, puoi creare l'immagine disco. Per compilare Container-Optimized OS, specifica lakitu (immagine x86) o lakitu-arm64 (immagine ARM) per il nome della scheda come segue:

Immagine x86

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

Immagine del braccio

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

Oltre a test, puoi creare un'immagine base o dev passando il parametro appropriato al comando dello script ./build image. Se non specifichi un parametro, l'immagine dev viene creata per impostazione predefinita.

L'immagine dev contiene alcuni strumenti di debug aggiuntivi installati sopra l'immagine base. L'immagine test include gli strumenti di debug dell'immagine dev, nonché gli strumenti necessari per eseguire test automatici di Container-Optimized OS.

Requisiti di attribuzione

Quando produci un'immagine del sistema operativo ottimizzato per i container, devi soddisfare diversi requisiti di attribuzione delle licenze di terze parti. L'immagine generata da una compilazione contiene tutte le informazioni sull'attribuzione pertinenti in /opt/google/chrome/resources/about_os_credits.html. Come elemento compilato distinto, è disponibile anche come file license_credits.html nella directory di output della compilazione.

Eseguire l'immagine

Dopo aver creato l'immagine del sistema operativo ottimizzato per i container, puoi eseguirla utilizzando KVM o importarla in un'istanza Compute Engine.

Esecuzione in hypervisor

Per avviare l'immagine nell'hypervisor, esegui il seguente comando:

Immagine 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

Immagine del braccio

   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
   

L'avvio in questo modo lascia la porta seriale della VM connessa alla console, consentendoti di accedere senza utilizzare SSH. Se stai utilizzando un'immagine test, puoi accedere con la coppia di nome utente/password "root/test0000".

Una volta avviata la VM, puoi accedere all'immagine dev o test utilizzando SSH. Per eseguire SSH nell'immagine, utilizza la chiave generata per l'immagine, come segue:

Immagine x86

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

Immagine del braccio

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

Esecuzione su Compute Engine

Per importare l'immagine in un'istanza Compute Engine, devi comprimerla in un file .tar. Per comprimere l'immagine, esegui il seguente comando:

Immagine x86

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

Immagine del braccio

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

Dopo aver creato il file .tar, puoi seguire le istruzioni per importare un'immagine esistente riportate nella documentazione di Compute Engine.