blob: 4191fed5dc74f46d0612017fa4f9a4563aba2271 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#!/bin/bash
# shellcheck disable=SC2034
TEST_DESCRIPTION="UEFI boot"
# Linux kernel requirements
# CONFIG_BLK_DEV_INITRD for initramfs
# CONFIG_EFI_HANDOVER_PROTOCOL for ovmf (Open Virtual Machine Firmware)
# CONFIG_SATA_AHCI for ahci.ko
# CONFIG_BLK_DEV_SD for sd_mod.ko
# CONFIG_SQUASHFS_ZLIB for squashfs.ko
ovmf_code() {
for path in \
"/usr/share/OVMF/OVMF_CODE.fd" \
"/usr/share/edk2/x64/OVMF_CODE.fd" \
"/usr/share/edk2-ovmf/OVMF_CODE.fd" \
"/usr/share/qemu/ovmf-x86_64-4m.bin"; do
[[ -s $path ]] && echo -n "$path" && return
done
}
test_check() {
[[ -n "$(ovmf_code)" ]]
}
KVERSION="${KVERSION-$(uname -r)}"
test_marker_reset() {
dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
}
test_marker_check() {
grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success -- "$TESTDIR"/marker.img
return $?
}
test_dracut() {
TEST_DRACUT_ARGS+=" --local --no-hostonly --no-early-microcode --add test --kver $KVERSION"
# shellcheck disable=SC2162
IFS=' ' read -a TEST_DRACUT_ARGS_ARRAY <<< "$TEST_DRACUT_ARGS"
"$DRACUT" "$@" \
--kernel-cmdline "panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot selinux=0 console=ttyS0,115200n81 $DEBUGFAIL" \
"${TEST_DRACUT_ARGS_ARRAY[@]}" || return 1
}
test_run() {
declare -a disk_args=()
declare -i disk_index=1
qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
qemu_add_drive_args disk_index disk_args "$TESTDIR"/squashfs.img root
test_marker_reset
"$testdir"/run-qemu "${disk_args[@]}" -net none \
-drive file=fat:rw:"$TESTDIR"/ESP,format=vvfat,label=EFI \
-global driver=cfi.pflash01,property=secure,value=on \
-drive if=pflash,format=raw,unit=0,file="$(ovmf_code)",readonly=on
test_marker_check || return 1
}
test_setup() {
# Create what will eventually be our root filesystem
"$DRACUT" --local --no-hostonly --no-early-microcode --nofscks \
--tmpdir "$TESTDIR" --keep --modules "test-root" --include ./test-init.sh /sbin/init \
"$TESTDIR"/tmp-initramfs.root "$KVERSION" || return 1
mkdir -p "$TESTDIR"/dracut.*/initramfs/proc
mksquashfs "$TESTDIR"/dracut.*/initramfs/ "$TESTDIR"/squashfs.img -quiet -no-progress
mkdir -p "$TESTDIR"/ESP/EFI/BOOT
if [ -f "/usr/lib/gummiboot/linuxx64.efi.stub" ]; then
TEST_DRACUT_ARGS+=" --uefi-stub /usr/lib/gummiboot/linuxx64.efi.stub "
fi
mkdir -p "$TESTDIR"/ESP/EFI/BOOT
test_dracut \
--modules 'rootfs-block test' \
--kernel-cmdline 'root=/dev/sdc ro rd.skipfsck rootfstype=squashfs' \
--drivers 'ahci sd_mod squashfs' \
--uefi \
"$TESTDIR"/ESP/EFI/BOOT/BOOTX64.efi
}
test_cleanup() {
return 0
}
# shellcheck disable=SC1090
. "$testdir"/test-functions
|