1*bb4ee6a4SAndroid Build Coastguard Worker#!/bin/bash 2*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2022 The ChromiumOS Authors 3*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file. 5*bb4ee6a4SAndroid Build Coastguard Worker 6*bb4ee6a4SAndroid Build Coastguard Worker# Example VM with a simple ubuntu guest OS but no UI, audio or networking. 7*bb4ee6a4SAndroid Build Coastguard Worker 8*bb4ee6a4SAndroid Build Coastguard Workerset -e 9*bb4ee6a4SAndroid Build Coastguard Worker 10*bb4ee6a4SAndroid Build Coastguard WorkerSRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 11*bb4ee6a4SAndroid Build Coastguard Workermkdir -p "$SRC/images/simple" && cd "$_" 12*bb4ee6a4SAndroid Build Coastguard Worker 13*bb4ee6a4SAndroid Build Coastguard Workerif ! [ -f rootfs ]; then 14*bb4ee6a4SAndroid Build Coastguard Worker # ANCHOR: build 15*bb4ee6a4SAndroid Build Coastguard Worker # Build a simple ubuntu image and create a user with no password. 16*bb4ee6a4SAndroid Build Coastguard Worker virt-builder ubuntu-20.04 \ 17*bb4ee6a4SAndroid Build Coastguard Worker --run-command "useradd -m -g sudo -p '' $USER ; chage -d 0 $USER" \ 18*bb4ee6a4SAndroid Build Coastguard Worker -o ./rootfs 19*bb4ee6a4SAndroid Build Coastguard Worker # Packages can be pre-installed to the image using 20*bb4ee6a4SAndroid Build Coastguard Worker # --install PACKAGE_NAME 21*bb4ee6a4SAndroid Build Coastguard Worker # Ex: virt-builder ubuntu-20.04 ... --install openssh-server,ncat 22*bb4ee6a4SAndroid Build Coastguard Worker # In this example, the ubuntu image will come pre-installed with OpenSSH-server and with Ncat. 23*bb4ee6a4SAndroid Build Coastguard Worker # ANCHOR_END: build 24*bb4ee6a4SAndroid Build Coastguard Worker 25*bb4ee6a4SAndroid Build Coastguard Worker # ANCHOR: kernel 26*bb4ee6a4SAndroid Build Coastguard Worker virt-builder --get-kernel ./rootfs -o . 27*bb4ee6a4SAndroid Build Coastguard Worker # ANCHOR_END: kernel 28*bb4ee6a4SAndroid Build Coastguard Workerfi 29*bb4ee6a4SAndroid Build Coastguard Worker 30*bb4ee6a4SAndroid Build Coastguard Workerif [ "$(groups | grep kvm -c)" -eq 0 ]; then 31*bb4ee6a4SAndroid Build Coastguard Worker echo "Adding user $USER to the kvm group to grant access to /dev/kvm" 32*bb4ee6a4SAndroid Build Coastguard Worker # ANCHOR: kvm 33*bb4ee6a4SAndroid Build Coastguard Worker sudo adduser "$USER" kvm 34*bb4ee6a4SAndroid Build Coastguard Worker # ANCHOR_END: kvm 35*bb4ee6a4SAndroid Build Coastguard Worker echo "Please logout and log back in to reflect the kvm group." 36*bb4ee6a4SAndroid Build Coastguard Worker exit 1 37*bb4ee6a4SAndroid Build Coastguard Workerfi 38*bb4ee6a4SAndroid Build Coastguard Worker 39*bb4ee6a4SAndroid Build Coastguard Worker# ANCHOR: run 40*bb4ee6a4SAndroid Build Coastguard Worker# Create `/var/empty` where crosvm can do chroot for jailing each virtio device. 41*bb4ee6a4SAndroid Build Coastguard Worker# Devices can't be jailed if /var/empty doesn't exist. 42*bb4ee6a4SAndroid Build Coastguard Worker# You can change this directory(/var/empty) by setting the environment variable: DEFAULT_PIVOT_ROOT 43*bb4ee6a4SAndroid Build Coastguard Workersudo mkdir -p /var/empty 44*bb4ee6a4SAndroid Build Coastguard Worker# Run crosvm. 45*bb4ee6a4SAndroid Build Coastguard Worker# The rootfs is an image of a partitioned hard drive, so we need to tell 46*bb4ee6a4SAndroid Build Coastguard Worker# the kernel which partition to use (vda5 in case of ubuntu-20.04). 47*bb4ee6a4SAndroid Build Coastguard Workercargo run --no-default-features -- run \ 48*bb4ee6a4SAndroid Build Coastguard Worker --rwdisk ./rootfs \ 49*bb4ee6a4SAndroid Build Coastguard Worker --initrd ./initrd.img-* \ 50*bb4ee6a4SAndroid Build Coastguard Worker -p "root=/dev/vda5" \ 51*bb4ee6a4SAndroid Build Coastguard Worker ./vmlinuz-* 52*bb4ee6a4SAndroid Build Coastguard Worker# ANCHOR_END: run 53