]> git.ipfire.org Git - thirdparty/dracut.git/blob - test/TEST-10-RAID/test.sh
test: list only the required modules explicitly
[thirdparty/dracut.git] / test / TEST-10-RAID / test.sh
1 #!/bin/bash
2 # shellcheck disable=SC2034
3 TEST_DESCRIPTION="root filesystem on an encrypted LVM PV on a RAID-5"
4
5 KVERSION=${KVERSION-$(uname -r)}
6
7 # Uncomment this to debug failures
8 #DEBUGFAIL="rd.shell rd.udev.log-priority=debug loglevel=70 systemd.log_target=kmsg"
9 #DEBUGFAIL="rd.break rd.shell rd.debug debug"
10 test_run() {
11 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
12 declare -a disk_args=()
13 # shellcheck disable=SC2034
14 declare -i disk_index=0
15 qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
16 qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-1.img raid1
17 qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-2.img raid2
18 qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-3.img raid3
19
20 "$testdir"/run-qemu \
21 "${disk_args[@]}" \
22 -append "panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot root=/dev/dracut/root rd.auto rw rd.retry=10 console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \
23 -initrd "$TESTDIR"/initramfs.testing || return 1
24
25 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/marker.img
26 }
27
28 test_setup() {
29 kernel=$KVERSION
30 # Create what will eventually be our root filesystem onto an overlay
31 (
32 # shellcheck disable=SC2030
33 export initdir=$TESTDIR/overlay/source
34 # shellcheck disable=SC1090
35 . "$basedir"/dracut-init.sh
36 (
37 cd "$initdir" || exit
38 mkdir -p -- dev sys proc etc var/run tmp
39 mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
40 )
41 inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
42 mount dmesg dhclient mkdir cp ping dhclient dd sync
43 for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
44 [ -f ${_terminfodir}/l/linux ] && break
45 done
46 inst_multiple -o ${_terminfodir}/l/linux
47
48 inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
49 inst_simple "${basedir}/modules.d/99base/dracut-dev-lib.sh" "/lib/dracut-dev-lib.sh"
50 inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util"
51 ln -s dracut-util "${initdir}/usr/bin/dracut-getarg"
52 ln -s dracut-util "${initdir}/usr/bin/dracut-getargs"
53
54 inst_simple /etc/os-release
55 inst ./test-init.sh /sbin/init
56 inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
57 inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
58 inst_multiple grep
59 inst_multiple -o /lib/systemd/systemd-shutdown
60 find_binary plymouth > /dev/null && inst_multiple plymouth
61 cp -a /etc/ld.so.conf* "$initdir"/etc
62 ldconfig -r "$initdir"
63 )
64
65 # second, install the files needed to make the root filesystem
66 (
67 # shellcheck disable=SC2031
68 # shellcheck disable=SC2030
69 export initdir=$TESTDIR/overlay
70 # shellcheck disable=SC1090
71 . "$basedir"/dracut-init.sh
72 inst_multiple sfdisk mke2fs poweroff cp umount dd sync grep
73 inst_hook initqueue 01 ./create-root.sh
74 inst_hook initqueue/finished 01 ./finished-false.sh
75 )
76
77 # create an initramfs that will create the target root filesystem.
78 # We do it this way so that we do not risk trashing the host mdraid
79 # devices, volume groups, encrypted partitions, etc.
80 "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
81 -m "bash crypt lvm mdraid kernel-modules qemu" \
82 -d "piix ide-gd_mod ata_piix ext2 sd_mod" \
83 --nomdadmconf \
84 --no-hostonly-cmdline -N \
85 -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
86 rm -rf -- "$TESTDIR"/overlay
87
88 # Create the blank files to use as a root filesystem
89 dd if=/dev/zero of="$TESTDIR"/raid-1.img bs=1MiB count=40
90 dd if=/dev/zero of="$TESTDIR"/raid-2.img bs=1MiB count=40
91 dd if=/dev/zero of="$TESTDIR"/raid-3.img bs=1MiB count=40
92 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
93 declare -a disk_args=()
94 # shellcheck disable=SC2034
95 declare -i disk_index=0
96 qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
97 qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-1.img raid1
98 qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-2.img raid2
99 qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid-3.img raid3
100
101 "$testdir"/run-qemu \
102 "${disk_args[@]}" \
103 -append "root=/dev/cannotreach rw rootfstype=ext2 console=ttyS0,115200n81 selinux=0" \
104 -initrd "$TESTDIR"/initramfs.makeroot || return 1
105 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1
106 eval "$(grep -F -a -m 1 ID_FS_UUID "$TESTDIR"/marker.img)"
107
108 (
109 # shellcheck disable=SC2031
110 export initdir=$TESTDIR/overlay
111 # shellcheck disable=SC1090
112 . "$basedir"/dracut-init.sh
113 inst_multiple poweroff shutdown dd
114 inst_hook shutdown-emergency 000 ./hard-off.sh
115 inst_hook emergency 000 ./hard-off.sh
116 inst ./cryptroot-ask.sh /sbin/cryptroot-ask
117 mkdir -p "$initdir"/etc
118 echo "testluks UUID=$ID_FS_UUID /etc/key" > "$initdir"/etc/crypttab
119 #echo "luks-$ID_FS_UUID /dev/md0 none" > $initdir/etc/crypttab
120 echo -n "test" > "$initdir"/etc/key
121 )
122
123 "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
124 -o "plymouth network kernel-network-modules" \
125 -a "debug" \
126 -d "piix ide-gd_mod ata_piix ext2 sd_mod" \
127 --no-hostonly-cmdline -N \
128 -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
129 }
130
131 test_cleanup() {
132 return 0
133 }
134
135 # shellcheck disable=SC1090
136 . "$testdir"/test-functions