Insert a kickstart file into a iso image
From Leo's Notes
Last edited on 18 February 2022, at 04:37.
You may wish to include a customized kickstart file tailored to your needs with the installer ISO. Here's a script that will take your custom kickstart file and stuff it into an existing ISO image. It will then adjust the boot options to include the inst.ks=
option and rebuild the ISO.
This script should work for all Red Hat Enterprise Linux / CentOS / Rocky Linux / Alma Linux. It does not support UEFI.
#!/bin/bash
# Creates a ISO image with a custom kickstart file
# Requires: genisoimage, syslinux, createrepo
if [ $# -lt 2 ]; then
echo "Usage1: $0 source_iso kickstart"
exit 1
fi
if [ ! -f $1 ]; then
echo "ISO image $1 does not exist!"
exit 1
fi
if [ ! -f $2 ]; then
echo "Kickstart file $2 does not exist!"
exit 1
fi
SourceImage="$1"
KickstartFile="$2"
OutputImage=$(basename "$SourceImage" | sed 's/.iso$/-ks.iso/')
echo "Source file: $SourceImage"
echo "Kickstart file: $KickstartFile"
WorkDir=`pwd`/work
if [ -d $WorkDir ] ; then
echo "An existing work directory exists."
echo "Delete it and start from scratch."
exit 1
fi
echo "Copying iso contents"
mkdir -p $WorkDir/source $WorkDir/output
mount -o loop $SourceImage $WorkDir/source
rsync -a $WorkDir/source/ $WorkDir/output/
umount $WorkDir/source
# Copy kickstart
cp -v $KickstartFile $WorkDir/output/ks.cfg
# Tweak the isolinux.cfg so default boot option uses the kickstart
sed 's/\(hd:LABEL[^ ]*\)/\1 inst.ks=\1:\/ks.cfg/' -i $WorkDir/output/isolinux/isolinux.cfg
Label=$(file $SourceImage | grep -ohE "'.*'" | tr -d \')
pushd .
cd $WorkDir/output
genisoimage \
-V "$Label" \
-A "$Label" \
-o $WorkDir/$OutputImage \
-joliet-long \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-R -J -v -T \
$WorkDir/output
popd
echo "Output file: $WorkDir/$OutputImage"