vmlab/debian-image/create_image.sh
2024-02-17 14:50:22 +01:00

78 lines
1.9 KiB
Bash
Executable file

#!/usr/bin/env bash
set -eu
# https://mvallim.github.io/kubernetes-under-the-hood/documentation/create-linux-image.html
SCRIPT=$(dirname "$0")
BUILD="$SCRIPT/build"
IMAGE="$BUILD/debian-image.raw"
mkdir -p "$BUILD"
if ! [ -f "$IMAGE" ]; then
# Create a 30GB disk
dd \
if=/dev/zero \
of="$IMAGE" \
bs=1 \
count=0 \
seek=32212254720 \
status=progress
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | sudo fdisk "$IMAGE"
o # clear the in memory partition table
n # new partition
p # primary partition
1 # partition number 1
# default - start at beginning of disk
+512M # 512 MB boot parttion
n # new partition
p # primary partition
2 # partion number 2
# default, start immediately after preceding partition
# default, extend partition to end of disk
a # make a partition bootable
1 # bootable partition is partition 1 -- /dev/loop0p1
p # print the in-memory partition table
w # write the partition table
q # and we're done
EOF
else
echo "INFO: Skipping disk creation"
fi
if ! [ -e "/dev/loop0" ]; then
sudo losetup -fP "$IMAGE"
sudo losetup -a
sudo fdisk -l /dev/loop0
sudo mkfs.ext4 /dev/loop0p1 # /boot
sudo mkfs.ext4 /dev/loop0p2 # /
else
echo "INFO: Skipping loop device setup"
fi
mkdir -p "$BUILD/chroot"
sudo mount /dev/loop0p2 "$BUILD/chroot/"
if ! [ -d "$BUILD/chroot/bin" ]; then
sudo debootstrap \
--arch=amd64 \
--variant=minbase \
--components "main" \
--include "ca-certificates,cron,iptables,isc-dhcp-client,libnss-myhostname,ntp,ntpdate,rsyslog,ssh,sudo,dialog,whiptail,man-db,curl,dosfstools,e2fsck-static" \
bullseye \
"$BUILD/chroot" \
http://deb.debian.org/debian/
else
echo "INFO: Skipping debian bootstrap"
fi
sudo mount --bind /dev "$BUILD/chroot/dev"
sudo mount --bind /run "$BUILD/chroot/run"
sudo cp "$SCRIPT/setup.sh" "$BUILD/chroot/usr/local/bin"
sudo chroot "$BUILD/chroot" /usr/local/bin/setup.sh