]> git.ipfire.org Git - thirdparty/dracut.git/blob - test/TEST-14-IMSM/test.sh
fix: always use mkdir -p
[thirdparty/dracut.git] / test / TEST-14-IMSM / test.sh
1 #!/bin/bash
2 TEST_DESCRIPTION="root filesystem on LVM PV on a isw dmraid"
3
4 KVERSION=${KVERSION-$(uname -r)}
5
6 # Uncomment this to debug failures
7 #DEBUGFAIL="rd.shell"
8 #DEBUGFAIL="$DEBUGFAIL udev.log-priority=debug"
9
10 client_run() {
11 echo "CLIENT TEST START: $@"
12
13 rm -f -- $TESTDIR/marker.img
14 dd if=/dev/zero of=$TESTDIR/marker.img bs=1M count=1
15
16 $testdir/run-qemu \
17 -drive format=raw,index=0,media=disk,file=$TESTDIR/marker.img \
18 -drive format=raw,index=1,media=disk,file=$TESTDIR/disk1 \
19 -drive format=raw,index=2,media=disk,file=$TESTDIR/disk2 \
20 -append "panic=1 systemd.crash_reboot $* root=LABEL=root rw debug rd.retry=5 rd.debug console=ttyS0,115200n81 selinux=0 rd.info rd.shell=0 $DEBUGFAIL" \
21 -initrd $TESTDIR/initramfs.testing
22
23 if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success $TESTDIR/marker.img; then
24 echo "CLIENT TEST END: $@ [FAIL]"
25 return 1;
26 fi
27
28 echo "CLIENT TEST END: $@ [OK]"
29 return 0
30 }
31
32 test_run() {
33 read MD_UUID < $TESTDIR/mduuid
34 if [[ -z $MD_UUID ]]; then
35 echo "Setup failed"
36 return 1
37 fi
38
39 client_run rd.auto rd.md.imsm=0 || return 1
40 client_run rd.md.uuid=$MD_UUID rd.dm=0 || return 1
41 # This test succeeds, because the mirror parts are found without
42 # assembling the mirror itsself, which is what we want
43 client_run rd.md.uuid=$MD_UUID rd.md=0 rd.md.imsm failme && return 1
44 client_run rd.md.uuid=$MD_UUID rd.md=0 failme && return 1
45 # the following test hangs on newer md
46 client_run rd.md.uuid=$MD_UUID rd.dm=0 rd.md.imsm rd.md.conf=0 || return 1
47 return 0
48 }
49
50 test_setup() {
51
52 # Create the blank file to use as a root filesystem
53 rm -f -- $TESTDIR/marker.img
54 rm -f -- $TESTDIR/disk1
55 rm -f -- $TESTDIR/disk2
56 dd if=/dev/zero of=$TESTDIR/marker.img bs=1M count=1
57 dd if=/dev/zero of=$TESTDIR/disk1 bs=1M count=104
58 dd if=/dev/zero of=$TESTDIR/disk2 bs=1M count=104
59
60 kernel=$KVERSION
61 # Create what will eventually be our root filesystem onto an overlay
62 (
63 export initdir=$TESTDIR/overlay/source
64 . $basedir/dracut-init.sh
65 (
66 cd "$initdir"
67 mkdir -p -- dev sys proc etc var/run tmp
68 mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
69 for i in bin sbin lib lib64; do
70 ln -sfnr usr/$i $i
71 done
72 )
73 inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
74 mount dmesg dhclient mkdir cp ping dhclient dd
75 for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
76 [ -f ${_terminfodir}/l/linux ] && break
77 done
78 inst_multiple -o ${_terminfodir}/l/linux
79 inst_simple /etc/os-release
80 inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
81 inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
82 inst_multiple grep
83 inst ./test-init.sh /sbin/init
84 find_binary plymouth >/dev/null && inst_multiple plymouth
85 cp -a /etc/ld.so.conf* $initdir/etc
86 mkdir -p $initdir/run
87 ldconfig -r "$initdir"
88 )
89
90 # second, install the files needed to make the root filesystem
91 (
92 export initdir=$TESTDIR/overlay
93 . $basedir/dracut-init.sh
94 inst_multiple sfdisk mke2fs poweroff cp umount grep dd
95 inst_hook initqueue 01 ./create-root.sh
96 inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
97 )
98
99 # create an initramfs that will create the target root filesystem.
100 # We do it this way so that we do not risk trashing the host mdraid
101 # devices, volume groups, encrypted partitions, etc.
102 $basedir/dracut.sh -l -i $TESTDIR/overlay / \
103 -m "dash lvm mdraid dmraid udev-rules base rootfs-block fs-lib kernel-modules qemu" \
104 -d "piix ide-gd_mod ata_piix ext2 sd_mod dm-multipath dm-crypt dm-round-robin faulty linear multipath raid0 raid10 raid1 raid456" \
105 --no-hostonly-cmdline -N \
106 -f $TESTDIR/initramfs.makeroot $KVERSION || return 1
107 rm -rf -- $TESTDIR/overlay
108 # Invoke KVM and/or QEMU to actually create the target filesystem.
109 $testdir/run-qemu \
110 -drive format=raw,index=0,media=disk,file=$TESTDIR/marker.img \
111 -drive format=raw,index=1,media=disk,file=$TESTDIR/disk1 \
112 -drive format=raw,index=2,media=disk,file=$TESTDIR/disk2 \
113 -append "root=/dev/dracut/root rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \
114 -initrd $TESTDIR/initramfs.makeroot || return 1
115 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created $TESTDIR/marker.img || return 1
116 eval $(grep -F --binary-files=text -m 1 MD_UUID $TESTDIR/marker.img)
117
118 if [[ -z $MD_UUID ]]; then
119 echo "Setup failed"
120 return 1
121 fi
122
123 echo $MD_UUID > $TESTDIR/mduuid
124 (
125 export initdir=$TESTDIR/overlay
126 . $basedir/dracut-init.sh
127 inst_multiple poweroff shutdown
128 inst_hook shutdown-emergency 000 ./hard-off.sh
129 inst_hook emergency 000 ./hard-off.sh
130 inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
131 )
132 $basedir/dracut.sh -l -i $TESTDIR/overlay / \
133 -o "plymouth network kernel-network-modules" \
134 -a "debug" \
135 -d "piix ide-gd_mod ata_piix ext2 sd_mod" \
136 --no-hostonly-cmdline -N \
137 -f $TESTDIR/initramfs.testing $KVERSION || return 1
138 }
139
140 test_cleanup() {
141 return 0
142 }
143
144 . $testdir/test-functions