# Copyright 2021 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # # Docker container for VMs that can run crosvm tests. This container is # primarily an intermediate step and imported into the crosvm_(aarch64)_builder # containers, but for testing purposes it can be run directly. # Target architecture of the VM. Either arm64 or amd64. ARG VM_ARCH # Build stage which will build the rootfs for our VM FROM debian:buster as vm_builder ARG VM_ARCH RUN apt-get update && apt-get install --yes \ cloud-image-utils \ curl \ expect \ qemu-system-arm \ qemu-system-x86 \ qemu-efi-aarch64 WORKDIR /workspace/vm RUN curl -sSfL -o rootfs.qcow2 \ "http://cloud.debian.org/images/cloud/bullseye/daily/20210208-542/debian-11-generic-${VM_ARCH}-daily-20210208-542.qcow2" # Package `cloud_init_data.yaml` to be loaded during `first_boot.expect` COPY build/cloud_init_data.yaml ./ RUN cloud-localds -v cloud_init.img cloud_init_data.yaml # Boot the VM once, to do initialization work so we do not have to do it at # every launch. COPY runtime/start_vm.${VM_ARCH} ./start_vm COPY build/first_boot.expect ./ RUN expect -f first_boot.expect # Compress and sparsify image after doing all the init work. RUN qemu-img convert -O qcow2 -c rootfs.qcow2 rootfs.compressed \ && mv -f rootfs.compressed rootfs.qcow2 # Runtime environment for amd64 FROM debian:buster as runtime_amd64 RUN apt-get update && apt-get install --yes --no-install-recommends \ qemu-system-x86 # Runtime environment for arm64 FROM debian:buster as runtime_arm64 RUN apt-get update && apt-get install --yes --no-install-recommends \ ipxe-qemu \ qemu-system-arm \ qemu-efi-aarch64 # Select the correct stage as runtime stage FROM runtime_${VM_ARCH} as runtime ARG VM_ARCH RUN apt-get install --yes --no-install-recommends \ openssh-client # Copy rootfs into runtime stage WORKDIR /workspace/vm COPY --from=vm_builder /workspace/vm/rootfs.qcow2 ./ # Setup SSH profile for `vm`. RUN mkdir -p ~/.ssh COPY runtime/ssh /root/.ssh RUN chmod 0600 /root/.ssh/id_rsa # Copy utility scripts COPY runtime/start_vm.${VM_ARCH} ./start_vm # Automatically start the VM. ENTRYPOINT [ "/workspace/vm/start_vm" ]