]> git.ipfire.org Git - thirdparty/dracut.git/blame - test/TEST-18-UEFI/test.sh
test: make dracut directory configurable
[thirdparty/dracut.git] / test / TEST-18-UEFI / test.sh
CommitLineData
ec2c7e1a
LG
1#!/bin/bash
2
3# shellcheck disable=SC2034
4TEST_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
13ovmf_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
23test_check() {
24 [[ -n "$(ovmf_code)" ]]
25}
26
27KVERSION="${KVERSION-$(uname -r)}"
28
29test_marker_reset() {
30 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
31}
32
33test_marker_check() {
34 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success -- "$TESTDIR"/marker.img
35 return $?
36}
37
38test_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
49test_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
63test_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
87test_cleanup() {
88 return 0
89}
90
91# shellcheck disable=SC1090
92. "$testdir"/test-functions