You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.3 KiB
79 lines
2.3 KiB
4 months ago
|
# 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" ]
|