blob: aa19f17480e18e23be0abc5d14ee6463e6db9a48 [file] [log] [blame]
# 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" ]