#!/bin/bash set -eux FAILANY=0 BOOTISO=/var/tmp/lorax-rhel9-iso/images/boot.iso KSNAME=minimal.ks KS="/usr/share/doc/lorax/$KSNAME" OUTISO=/var/tmp/out.iso ISODIR=/var/tmp/iso IMGDIR=/var/tmp/img ## Functions for testing mkkiso function fail { echo -e "\n\n#### ERROR: $1\n" FAIL=1 FAILANY=1 } function status { if [ "$FAIL" -eq 0 ]; then echo -e "\n\n#### PASS: $1\n" else echo -e "\n\n#### FAIL: $1\n" fi } function running { FAIL=0 echo -e "\n\n#### RUN: $1\n" } # unmount the dirs lazily because sometimes some outside thing is still touching them function umount_dirs { umount --lazy "$IMGDIR" umount --lazy "$ISODIR" } [ -e "$ISODIR" ] || mkdir "$ISODIR" [ -e "$IMGDIR" ] || mkdir "$IMGDIR" # Only add kickstart function ks_only { running "Add kickstart to iso" mkksiso $KS $BOOTISO $OUTISO || exit 1 mount $OUTISO $ISODIR || exit 1 test_ks status "Add kickstart" umount_dirs } function test_ks { ## This all needs to be another function # Is there a kickstart in / of the iso? [ -e "$ISODIR/$KSNAME" ] || fail "Missing kickstart" # Is the kickstart in the BIOS config? grep "inst.ks=.*$KSNAME" "$ISODIR/isolinux/isolinux.cfg" || fail "Missing isolinux.cfg kickstart entry" # Is the kickstart in the UEFI config? mount "$ISODIR/images/efiboot.img" "$IMGDIR" || exit 1 grep "inst.ks=.*$KSNAME" "$IMGDIR/EFI/BOOT/grub.cfg" || fail "Missing UEFI grub.cfg kickstart entry" } # Add ks and cmdline function ks_serial { running "Add kickstart and serial cmdline" mkksiso -c "console=ttyS0,115200n8" $KS $BOOTISO $OUTISO || exit 1 mount $OUTISO $ISODIR || exit 1 test_ks test_ks_serial status "Add kickstart and serial cmdline" umount_dirs } function test_ks_serial { # Is the serial in the BIOS config? grep "console=ttyS0,115200n8" "$ISODIR/isolinux/isolinux.cfg" || fail "Missing isolinux.cfg cmdline entry" # Is the serial in the UEFI config? grep "console=ttyS0,115200n8" "$IMGDIR/EFI/BOOT/grub.cfg" || fail "Missing UEFI grub.cfg cmdline entry" } # New VOLID function new_volid { running "Use a new VOLID" mkksiso -V "mkksiso-test" $KS $BOOTISO $OUTISO || exit 1 mount $OUTISO $ISODIR || exit 1 test_ks test_volid status "Use a new VOLID" umount_dirs } function test_volid { # Is the VOLID in the BIOS config? grep "hd:LABEL=mkksiso-test" "$ISODIR/isolinux/isolinux.cfg" || fail "Missing isolinux.cfg kickstart entry" # Is the VOLID in the UEFI config? grep "hd:LABEL=mkksiso-test" "$IMGDIR/EFI/BOOT/grub.cfg" || fail "Missing UEFI grub.cfg kickstart entry" } # Add extra files function add_files { running "Add files" mkksiso -a /etc/services $KS $BOOTISO $OUTISO || exit 1 mount $OUTISO $ISODIR || exit 1 test_ks test_files status "Add files" umount_dirs } function test_files { [ -e "$ISODIR/services" ] || fail "Missing file from iso" } # All of the changes function run_all { running "Use all the options" mkksiso -a /etc/services -V "mkksiso-test" -c "console=ttyS0,115200n8" $KS $BOOTISO $OUTISO || exit 1 mount $OUTISO $ISODIR || exit 1 test_ks test_ks_serial test_volid test_files status "Use all the options" umount_dirs } if [ ! -e /usr/share/lorax/templates.d/80-rhel/ ]; then echo "Failed to find lorax-templates-rhel templates in /usr/share/lorax/templates.d/" exit 1 fi # Gather up the list of system repo files and use them for lorax REPOS=$(for f in /etc/yum.repos.d/*repo; do echo -n "--repo $f "; done) if [ -z "$REPOS" ]; then echo "No system repos found" exit 1 fi # Run lorax using the host's repository configuration file running "Build boot.iso with lorax" lorax --product="Red Hat Enterprise Linux" --version=9 --release=9 --volid="RHEL-9-test" \ $REPOS --isfinal /var/tmp/lorax-rhel9-iso/ || exit 1 # Test mkksiso on the new boot.iso ks_only ks_serial new_volid add_files run_all exit $FAILANY