소스로 Container-Optimized OS 빌드

Container-Optimized OS는 오픈소스 Chromium OS 프로젝트의 도구를 사용하여 제작되었습니다. 원하는 경우 Container-Optimized OS 소스 코드로 바로 Container-Optimized OS 이미지를 직접 빌드할 수 있습니다.

기본 요건

Container-Optimized OS 이미지를 빌드하려면 개발 머신에 다음 도구를 설치해야 합니다.

  • git, curl
  • repocros_sdk와 같은 도구가 포함된 depot_tools라는 Chromium 스크립트 패키지입니다.

Container-Optimized OS 소스 코드 받기

depot_tools에 포함된 repo 도구를 사용하여 Container-Optimized OS의 소스 코드를 다운로드할 수 있습니다.

먼저 소스 코드를 저장할 디렉터리를 만듭니다. 예를 들어 홈 디렉터리에 cos-src가 있습니다.

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

이제 다음 명령어를 사용하여 소스 코드를 다운로드합니다.

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

Container-Optimized OS 이미지 빌드

Container-Optimized OS를 빌드하려면 적절한 chroot 환경을 만들어야 합니다. depot_tools에 포함된 cros_sdk 도구를 사용하여 이전 단계에서 생성한 소스 디렉터리에서 다음 명령어를 실행하여 Container-Optimized OS 컴파일에 사용할 수 있는 chroot를 만들고 입력할 수 있습니다.

cd $HOME/cos-src
cros_sdk --enter

chroot 내부에 있으면 디스크 이미지를 빌드할 수 있습니다. Container-Optimized OS를 빌드하려면 다음과 같이 보드 이름에 lakitu(x86 이미지) 또는 lakitu-arm64(Arm 이미지)를 지정하세요.

x86 이미지

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

Arm 이미지

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

test 외에도 ./build image 스크립트 명령어에 적절한 매개변수를 전달하여 base 또는 dev 이미지를 빌드할 수 있습니다. 매개변수를 지정하지 않으면 기본적으로 dev 이미지가 빌드됩니다.

dev 이미지에는 base 이미지 위에 설치된 몇 가지 추가 디버그 도구가 포함되어 있습니다. test 이미지에는 dev 이미지의 디버그 도구와 자동 Container-Optimized OS 테스트를 실행하는 데 필요한 도구가 포함되어 있습니다.

저작자 표시 요구사항

Container-Optimized OS 이미지를 생성할 때는 서드 파티 라이선스의 다양한 저작자 표시 요구사항을 충족해야 합니다. 빌드를 통해 생성한 이미지는 /opt/google/chrome/resources/about_os_credits.html에 모든 관련 저작자 표시 정보가 포함됩니다. 이는 개별 빌드 아티팩트로서 빌드 출력 디렉터리에서도 license_credits.html 파일로 제공합니다.

이미지 실행

Container-Optimized OS 이미지를 빌드했으면 KVM을 사용하여 이미지를 실행하거나 Compute Engine 인스턴스로 이미지를 가져오면 됩니다.

하이퍼바이저에서 실행 중

하이퍼바이저에서 이미지를 부팅하려면 다음 명령어를 실행하세요.

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

Arm 이미지

   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
   

이 방식으로 부팅하면 VM의 직렬 포트가 콘솔에 연결된 상태로 유지되어 SSH를 사용하지 않고 로그인할 수 있습니다. test 이미지를 실행할 경우 'root/test0000'이라는 사용자 이름/비밀번호 쌍을 사용하여 로그인할 수 있습니다.

VM이 시작되면 SSH를 사용하여 dev 또는 test 이미지에 액세스할 수 있습니다. SSH를 사용하여 이미지에 액세스하려면 다음과 같이 해당 이미지를 위해 생성된 키를 사용하세요.

x86 이미지

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

Arm 이미지

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

Compute Engine에서 실행

Compute Engine 인스턴스로 이미지를 가져오려면 이미지를 .tar 파일로 압축해야 합니다. 이미지를 압축하려면 다음 명령어를 실행하세요.

x86 이미지

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

Arm 이미지

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

.tar 파일을 만든 후에는 Compute Engine 문서의 기존 이미지 가져오기 지침을 따르면 됩니다.