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