xref: /cloud-hypervisor/scripts/build-custom-image.sh (revision c16249486718264114138f723b913bc2f7578b4e)
1*c1624948SRob Bradford#!/bin/bash
2*c1624948SRob Bradford# shellcheck disable=SC2046,SC2086,SC2155
3*c1624948SRob Bradford
4*c1624948SRob Bradfordset -ex
5*c1624948SRob Bradford
6*c1624948SRob Bradford#VFIO_CUSTOM_IMAGE="-vfio"
7*c1624948SRob Bradford
8*c1624948SRob Bradfordmkdir -p custom-image
9*c1624948SRob Bradfordpushd custom-image || exit
10*c1624948SRob Bradfordwget -N https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
11*c1624948SRob Bradfordexport IMAGE_NAME_BASE=jammy-server-cloudimg-amd64
12*c1624948SRob Bradfordqemu-img convert -p -f qcow2 -O raw $IMAGE_NAME_BASE.img $IMAGE_NAME_BASE.raw
13*c1624948SRob Bradfordif [ -n "$VFIO_CUSTOM_IMAGE" ]; then
14*c1624948SRob Bradford    qemu-img resize -f raw "$IMAGE_NAME_BASE.raw" 5G
15*c1624948SRob Bradford    sudo sgdisk -e "$IMAGE_NAME_BASE.raw"
16*c1624948SRob Bradford    sudo parted "$IMAGE_NAME_BASE.raw" resizepart 1 5369MB
17*c1624948SRob Bradfordfi
18*c1624948SRob Bradfordmkdir -p mnt
19*c1624948SRob Bradfordexport ROOTFS=/dev/mapper/$(sudo kpartx -v -a $IMAGE_NAME_BASE.raw | grep "p1 " | cut -f 3 -d " ")
20*c1624948SRob Bradfordif [ -n "$VFIO_CUSTOM_IMAGE" ]; then
21*c1624948SRob Bradford    sudo e2fsck -f "$ROOTFS"
22*c1624948SRob Bradford    sudo resize2fs "$ROOTFS"
23*c1624948SRob Bradfordfi
24*c1624948SRob Bradfordsudo mount $ROOTFS mnt
25*c1624948SRob Bradfordsudo mv mnt/etc/resolv.conf mnt/etc/resolv.conf.backup
26*c1624948SRob Bradford
27*c1624948SRob Bradfordtouch extra_commands
28*c1624948SRob Bradford
29*c1624948SRob Bradfordif [ -n "$VFIO_CUSTOM_IMAGE" ]; then
30*c1624948SRob Bradford    cat >extra_commands <<EOF
31*c1624948SRob Bradford    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
32*c1624948SRob Bradford    sudo dpkg -i cuda-keyring_1.1-1_all.deb
33*c1624948SRob Bradford    sudo apt-get update
34*c1624948SRob Bradford    sudo apt-get -y install cuda-drivers
35*c1624948SRob BradfordEOF
36*c1624948SRob Bradfordfi
37*c1624948SRob Bradford
38*c1624948SRob Bradfordcat >script <<EOF
39*c1624948SRob Bradford#!/bin/bash
40*c1624948SRob Bradfordset -xe
41*c1624948SRob Bradfordmount -t proc proc /proc
42*c1624948SRob Bradfordmount -t devpts devpts /dev/pts
43*c1624948SRob Bradfordecho "nameserver 1.1.1.1" > /etc/resolv.conf
44*c1624948SRob Bradfordexport DEBIAN_FRONTEND=noninteractive
45*c1624948SRob Bradfordapt update
46*c1624948SRob Bradfordapt install -y fio iperf iperf3 socat stress cpuid tpm2-tools kexec-tools
47*c1624948SRob Bradfordapt remove -y --purge snapd pollinate
48*c1624948SRob Bradfordsource extra_commands
49*c1624948SRob Bradfordumount /dev/pts
50*c1624948SRob Bradfordumount /proc
51*c1624948SRob Bradfordhistory -c
52*c1624948SRob Bradfordexit
53*c1624948SRob BradfordEOF
54*c1624948SRob Bradford
55*c1624948SRob Bradfordsudo cp script extra_commands mnt
56*c1624948SRob Bradfordsudo chmod +x mnt/script
57*c1624948SRob Bradfordsudo chroot mnt ./script
58*c1624948SRob Bradfordsudo mv mnt/etc/resolv.conf.backup mnt/etc/resolv.conf
59*c1624948SRob Bradfordsudo umount mnt
60*c1624948SRob Bradfordsudo kpartx -d $IMAGE_NAME_BASE.raw
61*c1624948SRob Bradfordcp $IMAGE_NAME_BASE.raw $IMAGE_NAME_BASE-custom$VFIO_CUSTOM_IMAGE-$(date "+%Y%m%d")-0.raw
62*c1624948SRob Bradfordqemu-img convert -p -f raw -O qcow2 $IMAGE_NAME_BASE-custom$VFIO_CUSTOM_IMAGE-$(date "+%Y%m%d")-0.raw $IMAGE_NAME_BASE-custom$VFIO_CUSTOM_IMAGE-$(date "+%Y%m%d")-0.qcow2
63*c1624948SRob Bradfordpopd || exit
64