Skip to content

Commit

Permalink
fix(test): dmsquash-live test without an iso
Browse files Browse the repository at this point in the history
Remove fedore specific parts and use squash filesystem as live root.
LaszloGombos authored and johannbg committed Jun 2, 2022

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 1354d63 commit 6ee2baf
Showing 6 changed files with 96 additions and 295 deletions.
1 change: 1 addition & 0 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
@@ -55,6 +55,7 @@ jobs:
"13",
"14",
"15",
"16",
"17",
"20",
"21",
22 changes: 22 additions & 0 deletions test/TEST-16-DMSQUASH/create-root.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/sh

trap 'poweroff -f' EXIT

# don't let udev and this script step on eachother's toes
for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
: > "/etc/udev/rules.d/$x"
done
rm -f -- /etc/lvm/lvm.conf
udevadm control --reload
set -e

udevadm settle
mkfs.ext4 -q -L dracut /dev/disk/by-id/ata-disk_root
mkdir -p /root
mount /dev/disk/by-id/ata-disk_root /root
mkdir -p /root/run /root/testdir
echo "Creating squashfs"
mksquashfs /source /root/testdir/rootfs.img -quiet
umount /root
echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker
poweroff -f
197 changes: 0 additions & 197 deletions test/TEST-16-DMSQUASH/create.py

This file was deleted.

22 changes: 0 additions & 22 deletions test/TEST-16-DMSQUASH/livecd-fedora-minimal.ks

This file was deleted.

147 changes: 72 additions & 75 deletions test/TEST-16-DMSQUASH/test.sh
Original file line number Diff line number Diff line change
@@ -1,122 +1,119 @@
#!/bin/bash

# shellcheck disable=SC2034
TEST_DESCRIPTION="root filesystem on a LiveCD dmsquash filesystem"
TEST_DESCRIPTION="live root on a squash filesystem"

KVERSION="${KVERSION-$(uname -r)}"

# Uncomment this to debug failures
#DEBUGFAIL="rd.shell rd.break rd.debug systemd.log_level=debug systemd.log_target=console"

test_check() {
for pdir in $(python3 -c "import site; print(site.getsitepackages())" | sed -e 's/\[\(.*\)\]/\1/' -e "s/', /' /g"); do
# shellcheck disable=SC2001
pdir1=$(echo "$pdir" | sed "s/^'\(.*\)'$/\1/")
if [[ -d $pdir1/imgcreate ]]; then
return 0
fi
done
echo "python-imgcreate not installed"
return 1
}
# DEBUGFAIL="rd.shell rd.debug loglevel=7"

test_run() {
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/livecd.iso livecd 1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root

"$testdir"/run-qemu \
"${disk_args[@]}" \
-boot order=d \
-append "panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot root=live:CDLABEL=LiveCD live rw quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \
-append "rd.live.image rd.live.overlay.overlayfs=1 rd.live.dir=testdir root=LABEL=dracut console=ttyS0,115200n81 quiet selinux=0 rd.info rd.shell=0 panic=1 oops=panic softlockup_panic=1 $DEBUGFAIL" \
-initrd "$TESTDIR"/initramfs.testing

# mediacheck test with qemu GUI
# "$testdir"/run-qemu \
# -drive format=raw,bps=1000000,index=0,media=disk,file="$TESTDIR"/livecd.iso \
# -drive format=raw,index=1,media=disk,file="$TESTDIR"/root.img \
# -m 512M -smp 2 \
# -net none \
# -append "root=live:CDLABEL=LiveCD live quiet rhgb selinux=0 rd.live.check" \
# -initrd "$TESTDIR"/initramfs.testing

grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success -- "$TESTDIR"/marker.img || return 1
}

test_setup() {
mkdir -p -- "$TESTDIR"/overlay
(
# shellcheck disable=SC2030
export initdir="$TESTDIR"/overlay
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
inst_multiple poweroff shutdown
inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh
)

"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
-a "debug dmsquash-live qemu" \
-o "rngd" \
-d "piix ide-gd_mod ata_piix ext3 sd_mod" \
--no-hostonly-cmdline -N \
-f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1

mkdir -p -- "$TESTDIR"/root-source
kernel="$KVERSION"
mkdir -p -- "$TESTDIR"/overlay/source
# Create what will eventually be our root filesystem onto an overlay
(
# shellcheck disable=SC2030
# shellcheck disable=SC2031
export initdir="$TESTDIR"/root-source
export initdir="$TESTDIR"/overlay/source
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
(
cd "$initdir" || exit
mkdir -p -- dev sys proc etc var/run tmp
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
)
inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
mount dmesg dhclient mkdir cp ping dhclient \
umount strace less dd sync
for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
[[ -f ${_terminfodir}/l/linux ]] && break
done
inst_multiple -o "${_terminfodir}"/l/linux
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
inst_simple /etc/os-release
[[ -f /etc/machine-id ]] && read -r MACHINE_ID < /etc/machine-id

inst ./test-init.sh /sbin/init
inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
inst_simple "${basedir}/modules.d/99base/dracut-dev-lib.sh" "/lib/dracut-dev-lib.sh"
inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util"
ln -s dracut-util "${initdir}/usr/bin/dracut-getarg"
ln -s dracut-util "${initdir}/usr/bin/dracut-getargs"

inst_multiple grep syslinux isohybrid
for f in /usr/share/syslinux/*; do
inst_simple "$f"
done
inst_simple /etc/os-release
inst ./test-init.sh /sbin/init
inst "$TESTDIR"/initramfs.testing "/boot/initramfs-$KVERSION.img"
[[ -f /etc/machine-id ]] && read -r MACHINE_ID < /etc/machine-id

VMLINUZ="/lib/modules/${KVERSION}/vmlinuz"
if ! [[ -e $VMLINUZ ]]; then
if [[ $MACHINE_ID ]] && { [[ -d /boot/${MACHINE_ID} ]] || [[ -L /boot/${MACHINE_ID} ]]; }; then
VMLINUZ="/boot/${MACHINE_ID}/$KVERSION/linux"
fi
fi
[[ -e $VMLINUZ ]] || VMLINUZ="/boot/vmlinuz-${KVERSION}"
inst_multiple mkdir ln dd stty mount poweroff

inst "$VMLINUZ" "/boot/vmlinuz-${KVERSION}"
find_binary plymouth > /dev/null && inst_multiple plymouth
cp -a -- /etc/ld.so.conf* "$initdir"/etc
ldconfig -r "$initdir"
)
python3 create.py -d -c livecd-fedora-minimal.ks
return 0

# second, install the files needed to make the root filesystem
(
# shellcheck disable=SC2030
# shellcheck disable=SC2031
export initdir=$TESTDIR/overlay
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
inst_multiple sfdisk poweroff cp umount sync dd mkfs.ext4 mksquashfs
inst_hook initqueue 01 ./create-root.sh
inst_hook initqueue/finished 01 ./finished-false.sh
)

# create an initramfs that will create the target root filesystem.
# We do it this way so that we do not risk trashing the host mdraid
# devices, volume groups, encrypted partitions, etc.
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
--modules "rootfs-block qemu" \
--no-hostonly --no-hostonly-cmdline --no-early-microcode --nofscks --nomdadmconf --nohardlink --nostrip \
--force "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
rm -rf -- "$TESTDIR"/overlay

# Create the blank file to use as a root filesystem
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
dd if=/dev/zero of="$TESTDIR"/root.img bs=1MiB count=160
declare -a disk_args=()
# shellcheck disable=SC2034
declare -i disk_index=0
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root

# Invoke KVM and/or QEMU to actually create the target filesystem.
"$testdir"/run-qemu \
"${disk_args[@]}" \
-append "root=/dev/dracut/root rw rootfstype=ext4 quiet console=ttyS0,115200n81 selinux=0" \
-initrd "$TESTDIR"/initramfs.makeroot || return 1

if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img; then
echo "Could not create root filesystem"
return 1
fi

(
# shellcheck disable=SC2030
# shellcheck disable=SC2031
export initdir="$TESTDIR"/overlay
# shellcheck disable=SC1090
. "$basedir"/dracut-init.sh
inst_multiple poweroff shutdown mkfs.ext4 find
inst_hook shutdown-emergency 000 ./hard-off.sh
inst_hook emergency 000 ./hard-off.sh
)
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
--modules "dmsquash-live qemu" \
--omit "rngd" \
--no-hostonly --no-hostonly-cmdline \
--force "$TESTDIR"/initramfs.testing "$KVERSION" || return 1

ls -sh "$TESTDIR"/initramfs.testing
rm -rf -- "$TESTDIR"/overlay
}

test_cleanup() {
2 changes: 1 addition & 1 deletion test/container/Dockerfile-Fedora-latest
Original file line number Diff line number Diff line change
@@ -45,7 +45,7 @@ RUN dnf -y install --setopt=install_weak_deps=False \
dbus-daemon \
kbd \
NetworkManager \
python3-imgcreate \
squashfs-tools \
which \
ShellCheck \
shfmt \

0 comments on commit 6ee2baf

Please sign in to comment.