RockyRpi/Rocky8_Rpi4_mkimage.sh

59 lines
1.9 KiB
Bash
Raw Normal View History

#!/bin/bash
# Simple script that runs a Rocky Raspberry pi creation (via appliance-creator), then inserts a UUID to the kernel boot line of the image
# after-the-fact
#
# Usage: ./Rocky8_Rpi4_mkimage.sh /path/to/outputfolder/
#
#
# Needs to be run in the same directory as the rocky rpi kickstart, as it relies on it!
#
# Exit with error if we don't have an output directory:
OUTDIR=$1
if [[ -z "$OUTDIR" ]]; then
echo "Need to run this script with a path to output directory. Like: ${0} /path/to/output/"
exit 1
fi
mkdir -p ${OUTDIR}
# Actually create the image. Our kickstart data should be in the same git repo as this script:
# (This takes a while, especially building on an rpi. Patience!)
appliance-creator -v -c ./Rocky8_Rpi4.ks -n RockyRpi --version=20210626 --release=1 --vmem=2048 --vcpu=2 --no-compress -o ${OUTDIR}
# Post appliance-creator sequence to add UUID to the cmdline.txt file under /boot :
# (We don't want to rely on a /dev/ device name, what if a user wants to use a non-sdcard boot mechanism?)
mkdir -p /mnt/tmp
# find the image we just made, and make it available on /dev/maper/loop* devices:
image=`find ${OUTDIR} -iname *.raw | head -1`
echo "Getting UUID and inserting to boot from ${image} ...."
kpartx -av ${image}
# Get the UUID of our root partition (the ext4 one) (UUID=e3984938429 , strip out quotes("))
partuuid=`blkid | grep "mapper/loop0p3" | head -1 | awk '{print $NF}' | tr -d '"' | tr '[:lower:]' '[:upper:]'`
# Mount the /boot partition:
mkdir -p /mnt/tmp
umount /mnt/tmp
mount /dev/mapper/loop0p1 /mnt/tmp
# Swap out the "root=" part of cmdline.txt for our "root=UUID=blah"
sed -i "s/root= /root=${partuuid} /" /mnt/tmp/cmdline.txt
# Debug check to make sure it looks right:
echo "cmdline.txt looks like this, please review:"
cat /mnt/tmp/cmdline.txt
# Finished, unmount and clean loopbacks:
umount /mnt/tmp
kpartx -d ${image}