1+ #! /usr/bin/env bash
2+ # Install the generated image to the EBS volume
3+
4+ set -euxETo pipefail
5+
6+ declare -rx DEBIAN_FRONTEND=" noninteractive"
7+
8+ declare -r IMAGE_DEVICE=" /dev/xvdf"
9+
10+ sudo apt-get update
11+ sudo apt-get install --yes --no-install-recommends \
12+ coreutils ` # needed for chroot` \
13+ e2fsprogs ` # needed to resize root filesystem` \
14+ gdisk ` # needed to resize root partition` \
15+ parted ` # needed to partprobe image after transfer` \
16+ zstd ` # needed to decompress system image`
17+ sudo zstd --decompress --force -o " ${IMAGE_DEVICE} " /tmp/rust_ibverbs.img.zst
18+ sync
19+
20+ sudo partprobe --summary
21+
22+ declare -ri ROOT_DEVICE_PARTITION_NUMBER=3
23+ declare -ri BOOT_DEVICE_PARTITION_NUMBER=2
24+ declare -r ROOT_DEVICE=" ${IMAGE_DEVICE}${ROOT_DEVICE_PARTITION_NUMBER} "
25+ declare -r BOOT_DEVICE=" ${IMAGE_DEVICE}${BOOT_DEVICE_PARTITION_NUMBER} "
26+
27+ # Resize the root partition to take all available space.
28+ sync
29+ sudo sgdisk --move-second-header " ${IMAGE_DEVICE} "
30+ sync
31+ sudo sgdisk --delete=" ${ROOT_DEVICE_PARTITION_NUMBER} " " ${IMAGE_DEVICE} "
32+ sync
33+ sudo sgdisk --largest-new=" ${ROOT_DEVICE_PARTITION_NUMBER} " " ${IMAGE_DEVICE} "
34+ sync
35+ sudo sgdisk --change-name=" ${ROOT_DEVICE_PARTITION_NUMBER} " :root " ${IMAGE_DEVICE} "
36+ sync
37+ sudo sgdisk --move-second-header " ${IMAGE_DEVICE} "
38+ sync
39+ sudo partprobe --summary
40+ sync
41+ sudo e2fsck -v -f " ${ROOT_DEVICE} " || true
42+ sync
43+ sudo e2fsck -v -f " ${ROOT_DEVICE} "
44+ sync
45+ sudo resize2fs " ${ROOT_DEVICE} "
46+ sync
47+ sudo partprobe --summary
48+ sync
49+
50+ declare CHROOT
51+ CHROOT=" $( sudo mktemp -t --directory --suffix=" .rust_ibverbs.rootfs" ) "
52+ declare -r CHROOT
53+
54+ sudo mount " ${ROOT_DEVICE} " " ${CHROOT} "
55+ sudo mount " ${BOOT_DEVICE} " " ${CHROOT} /boot"
56+
57+ # Prepare our chroot with necessary bind mounts
58+ sudo mount -t proc /proc " ${CHROOT} " /proc
59+ sudo mount --rbind /sys " ${CHROOT} " /sys
60+ sudo mount --rbind /dev/ " ${CHROOT} " /dev
61+ sudo mount --make-rslave " ${CHROOT} "
62+ sudo mount -t tmpfs -o size=128M tmpfs " ${CHROOT} /tmp"
63+
64+ sudo cp /tmp/provision-image.sh " ${CHROOT} /tmp/provision-image.sh"
65+ sudo mv " ${CHROOT} /etc/resolv.conf" " ${CHROOT} /etc/resolv.conf.orig"
66+ sudo cp /etc/resolv.conf " ${CHROOT} /etc/resolv.conf"
67+ sudo chmod +x " ${CHROOT} /tmp/provision-image.sh"
68+
69+ sudo chroot " ${CHROOT} " /tmp/provision-image.sh " ${IMAGE_DEVICE} "
70+ sync
71+ sudo mv " ${CHROOT} /etc/resolv.conf.orig" " ${CHROOT} /etc/resolv.conf"
72+ sync
0 commit comments