Files
martanne-bitpixie/linux/initramfs/bitpixie
T
2025-02-26 10:42:14 +01:00

78 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
set -e
name="bitpixie"
scriptpath="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
images="$scriptpath/images"
# Images are stored in the images/ folder, named like $name.2024123101.* where
# the last two digits are an increasing counter.
latest_image() {
ls -1 "$images" | sort | tail -n 1 | rev | cut -d '.' -f 2- | rev
}
next_image() {
current_date=$(date +%Y%m%d)
counter=1
while [ -e "$images/$name.${current_date}$(printf %02d $counter).initramfs" ]; do
counter=$((counter + 1))
done
echo "$name.${current_date}$(printf %02d $counter)"
}
fixup_image() {
current_date=$(date +%Y%m%d)
counter=1
while [ -e "$images/$name.${current_date}$(printf %02d $((counter + 1))).initramfs" ]; do
counter=$((counter + 1))
done
echo "$name.${current_date}$(printf %02d $counter)"
}
mkdir -p "$images"
case "$1" in
build)
if [ "$2" = "--fixup" ]; then
image=$(fixup_image)
else
image=$(next_image)
fi
echo "Building image $image"
docker run --privileged --platform linux/amd64 --rm -v "${scriptpath}":/mnt -w /root \
alpine:3.20.3 "/mnt/$name-build.sh" "/mnt/images/$image"
;;
qemu)
image=$(latest_image)
echo "Running image $image in QEMU (terminate with Ctrl-A X," \
"shutdown with Ctrl-A C system_powerdown)"
# TODO do whole secure boot setup?
qemu-system-x86_64 -m 4G -nographic \
-kernel "$images/$image.kernel" \
-initrd "$images/$image.initramfs" \
-append "console=ttyS0"
;;
deploy)
image=$(latest_image)
echo "Deploying image $image to $scriptpath/../../pxe/tftp"
cp "$images/$image.kernel" "$scriptpath/../../pxe/tftp/linux"
cp "$images/$image.initramfs" "$scriptpath/../../pxe/tftp/alpine-initrd.xz"
;;
"")
echo "Usage: $0 <subcommand>"
echo
echo "Subcommands:"
echo " build [ --fixup ] - Build the image"
echo " qemu - Run the image in QEMU"
echo " deploy - Deploy the image to the PXE directory"
echo
echo "Latest image: $(latest_image)"
;;
*)
echo "Error: Unknown subcommand '$1'"
exit 1
;;
esac