0507006
#!/bin/bash
0507006
set -eux
7fbe63b
7fbe63b
FAILANY=0
7fbe63b
BOOTISO=/var/tmp/lorax-fedora-iso/images/boot.iso
7fbe63b
KSNAME=fedora-minimal.ks
7fbe63b
KS="/usr/share/doc/lorax/$KSNAME"
7fbe63b
OUTISO=/var/tmp/out.iso
7fbe63b
ISODIR=/var/tmp/iso
7fbe63b
## Functions for testing mkkiso
7fbe63b
7fbe63b
7fbe63b
function fail {
7fbe63b
    echo -e "\n\n#### ERROR: $1\n"
7fbe63b
    FAIL=1
7fbe63b
    FAILANY=1
7fbe63b
}
7fbe63b
7fbe63b
function status {
7fbe63b
    if [ "$FAIL" -eq 0 ]; then
7fbe63b
        echo -e "\n\n#### PASS: $1\n"
7fbe63b
    else
7fbe63b
        echo -e "\n\n#### FAIL: $1\n"
7fbe63b
    fi
7fbe63b
}
7fbe63b
7fbe63b
function running {
7fbe63b
    FAIL=0
7fbe63b
    echo -e "\n\n#### RUN: $1\n"
7fbe63b
}
7fbe63b
32ec53c
# unmount the dirs lazily because sometimes some outside thing is still touching them
32ec53c
function umount_dirs {
32ec53c
    umount --lazy "$ISODIR"
52072bb
    rm -f "$OUTISO"
32ec53c
}
32ec53c
7fbe63b
[ -e "$ISODIR" ] || mkdir "$ISODIR"
7fbe63b
7fbe63b
# Only add kickstart
7fbe63b
function ks_only {
7fbe63b
    running "Add kickstart to iso"
7fbe63b
0dc57a0
    mkksiso --ks $KS $BOOTISO $OUTISO || exit 1
7fbe63b
    mount $OUTISO $ISODIR || exit 1
7fbe63b
7fbe63b
    test_ks
7fbe63b
7fbe63b
    status "Add kickstart"
32ec53c
    umount_dirs
7fbe63b
}
7fbe63b
7fbe63b
function test_ks {
7fbe63b
    ## This all needs to be another function
7fbe63b
    # Is there a kickstart in / of the iso?
7fbe63b
    [ -e "$ISODIR/$KSNAME" ] || fail "Missing kickstart"
7fbe63b
dcb51c3
    # Is the kickstart in the GRUB2 BIOS config?
dcb51c3
    grep "inst.ks=.*$KSNAME" "$ISODIR/boot/grub2/grub.cfg" || fail "Missing BIOS grub.cfg kickstart entry"
7fbe63b
7fbe63b
    # Is the kickstart in the UEFI config?
52072bb
    grep "inst.ks=.*$KSNAME" "$ISODIR/EFI/BOOT/grub.cfg" || fail "Missing UEFI grub.cfg kickstart entry"
7fbe63b
}
7fbe63b
7fbe63b
# Add ks and cmdline
7fbe63b
function ks_serial {
7fbe63b
    running "Add kickstart and serial cmdline"
7fbe63b
0dc57a0
    mkksiso -c "console=ttyS0,115200n8" --ks $KS $BOOTISO $OUTISO || exit 1
7fbe63b
    mount $OUTISO $ISODIR || exit 1
7fbe63b
7fbe63b
    test_ks
0dc57a0
    test_serial
7fbe63b
7fbe63b
    status "Add kickstart and serial cmdline"
32ec53c
    umount_dirs
7fbe63b
}
7fbe63b
0dc57a0
# Only add serial console to cmdline
0dc57a0
function only_serial {
0dc57a0
    running "Add serial cmdline (no ks)"
0dc57a0
0dc57a0
    mkksiso -c "console=ttyS0,115200n8" $BOOTISO $OUTISO || exit 1
0dc57a0
    mount $OUTISO $ISODIR || exit 1
0dc57a0
0dc57a0
    test_serial
0dc57a0
0dc57a0
    status "Add kickstart and serial cmdline"
0dc57a0
    umount_dirs
0dc57a0
}
0dc57a0
0dc57a0
function test_serial {
7fbe63b
7fbe63b
    # Is the serial in the BIOS config?
dcb51c3
    grep "console=ttyS0,115200n8" "$ISODIR/boot/grub2/grub.cfg" || fail "Missing BIOS grub.cfg cmdline entry"
7fbe63b
7fbe63b
    # Is the serial in the UEFI config?
52072bb
    grep "console=ttyS0,115200n8" "$ISODIR/EFI/BOOT/grub.cfg" || fail "Missing UEFI grub.cfg cmdline entry"
7fbe63b
}
7fbe63b
7fbe63b
# New VOLID
7fbe63b
function new_volid {
7fbe63b
    running "Use a new VOLID"
7fbe63b
0dc57a0
    mkksiso -V "mkksiso-test" --ks $KS $BOOTISO $OUTISO || exit 1
7fbe63b
    mount $OUTISO $ISODIR || exit 1
7fbe63b
7fbe63b
    test_ks
7fbe63b
    test_volid
7fbe63b
7fbe63b
    status "Use a new VOLID"
32ec53c
    umount_dirs
7fbe63b
}
7fbe63b
7fbe63b
function test_volid {
7fbe63b
    # Is the VOLID in the BIOS config?
dcb51c3
    grep "hd:LABEL=mkksiso-test" "$ISODIR/boot/grub2/grub.cfg" || fail "Missing BIOS grub.cfg kickstart entry"
7fbe63b
7fbe63b
    # Is the VOLID in the UEFI config?
52072bb
    grep "hd:LABEL=mkksiso-test" "$ISODIR/EFI/BOOT/grub.cfg" || fail "Missing UEFI grub.cfg kickstart entry"
7fbe63b
}
7fbe63b
7fbe63b
# Add extra files
7fbe63b
function add_files {
7fbe63b
    running "Add files"
7fbe63b
0dc57a0
    mkksiso -a /etc/services --ks $KS $BOOTISO $OUTISO || exit 1
7fbe63b
    mount $OUTISO $ISODIR || exit 1
7fbe63b
7fbe63b
    test_ks
7fbe63b
    test_files
7fbe63b
7fbe63b
    status "Add files"
32ec53c
    umount_dirs
7fbe63b
}
7fbe63b
0dc57a0
# Remove quiet from the cmdline
0dc57a0
function remove_quiet {
0dc57a0
    running "remove quiet from cmdline (no ks)"
0dc57a0
0dc57a0
    mkksiso --rm "quiet"  $BOOTISO $OUTISO || exit 1
0dc57a0
    mount $OUTISO $ISODIR || exit 1
0dc57a0
0dc57a0
    test_quiet
0dc57a0
0dc57a0
    status "Remove quiet from cmdline"
0dc57a0
    umount_dirs
0dc57a0
}
0dc57a0
0dc57a0
function test_quiet {
0dc57a0
    # Is quiet in the BIOS config?
0dc57a0
    ! grep "append.*quiet" "$ISODIR/boot/grub2/grub.cfg" || fail "quiet not removed from BIOS grub.cfg cmdline entry"
0dc57a0
0dc57a0
    # Is quiet in the UEFI config?
0dc57a0
    ! grep "linux.*quiet" "$ISODIR/EFI/BOOT/grub.cfg" || fail "quiet not removed from UEFI grub.cfg cmdline entry"
0dc57a0
}
0dc57a0
0dc57a0
7fbe63b
function test_files {
7fbe63b
    [ -e "$ISODIR/services" ] || fail "Missing file from iso"
7fbe63b
}
7fbe63b
7fbe63b
# All of the changes
7fbe63b
function run_all {
7fbe63b
    running "Use all the options"
7fbe63b
0dc57a0
    mkksiso -a /etc/services -V "mkksiso-test" -c "console=ttyS0,115200n8" --rm "quiet"  --ks $KS $BOOTISO $OUTISO || exit 1
7fbe63b
    mount $OUTISO $ISODIR || exit 1
7fbe63b
7fbe63b
    test_ks
0dc57a0
    test_serial
7fbe63b
    test_volid
7fbe63b
    test_files
0dc57a0
    test_quiet
7fbe63b
7fbe63b
    status "Use all the options"
32ec53c
    umount_dirs
7fbe63b
}
7fbe63b
7fbe63b
7fbe63b
0507006
# Gather up the list of system repo files and use them for lorax
0507006
REPOS=$(for f in /etc/yum.repos.d/*repo; do echo -n "--repo $f "; done)
0507006
if [ -z "$REPOS" ]; then
0507006
    echo "No system repos found"
0507006
    exit 1
0507006
fi
0507006
0507006
# NOTE: We must use --nomacboot because the test system doesn't have the hfsplus fs available
0507006
# Run lorax using the host's repository configuration file
52072bb
if [ ! -e "$BOOTISO" ]; then
52072bb
    running "Build boot.iso with lorax"
52072bb
    lorax --product="Fedora" --version=rawhide --release=rawhide --volid="Fedora-rawhide-test" \
52072bb
        $REPOS --isfinal --nomacboot /var/tmp/lorax-fedora-iso/ || exit 1
52072bb
fi
7fbe63b
7fbe63b
# Test mkksiso on the new boot.iso
7fbe63b
ks_only
7fbe63b
ks_serial
0dc57a0
only_serial
7fbe63b
new_volid
7fbe63b
add_files
0dc57a0
remove_quiet
7fbe63b
run_all
7fbe63b
7fbe63b
exit $FAILANY