]>
Commit | Line | Data |
---|---|---|
ac4ded91 | 1 | #!/bin/bash |
a3f73298 | 2 | |
2aa97ff2 | 3 | # shellcheck disable=SC2034 |
a3f73298 | 4 | TEST_DESCRIPTION="root filesystem over iSCSI with $USE_NETWORK" |
eeb72103 | 5 | |
6251f82c | 6 | #DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " |
c22c43f8 | 7 | #SERVER_DEBUG="rd.debug loglevel=7" |
b0d6254d | 8 | #SERIAL="tcp:127.0.0.1:9999" |
eeb72103 HH |
9 | |
10 | run_server() { | |
11 | # Start server first | |
12 | echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server" | |
13 | ||
b80ee080 HH |
14 | declare -a disk_args=() |
15 | declare -i disk_index=0 | |
f1346763 | 16 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img serverroot 0 1 |
b80ee080 HH |
17 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/singleroot.img singleroot |
18 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-1.img raid0-1 | |
19 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-2.img raid0-2 | |
20 | ||
2aa97ff2 | 21 | "$testdir"/run-qemu \ |
b80ee080 | 22 | "${disk_args[@]}" \ |
2aa97ff2 | 23 | -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \ |
3905f669 | 24 | -net nic,macaddr=52:54:00:12:34:56,model=e1000 \ |
c22c43f8 | 25 | -net nic,macaddr=52:54:00:12:34:57,model=e1000 \ |
3905f669 | 26 | -net socket,listen=127.0.0.1:12330 \ |
006890a2 | 27 | -append "panic=1 oops=panic softlockup_panic=1 quiet root=/dev/disk/by-id/ata-disk_serverroot rootfstype=ext4 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \ |
2aa97ff2 HH |
28 | -initrd "$TESTDIR"/initramfs.server \ |
29 | -pidfile "$TESTDIR"/server.pid -daemonize || return 1 | |
30 | chmod 644 "$TESTDIR"/server.pid || return 1 | |
eeb72103 HH |
31 | |
32 | # Cleanup the terminal if we have one | |
33 | tty -s && stty sane | |
34 | ||
3aae122c | 35 | if ! [[ $SERIAL ]]; then |
b80ee080 HH |
36 | while :; do |
37 | grep Serving "$TESTDIR"/server.log && break | |
f7b9356c | 38 | echo "Waiting for the server to startup" |
b80ee080 | 39 | tail "$TESTDIR"/server.log |
3aae122c HH |
40 | sleep 1 |
41 | done | |
42 | else | |
43 | echo Sleeping 10 seconds to give the server a head start | |
44 | sleep 10 | |
45 | fi | |
b80ee080 | 46 | |
eeb72103 HH |
47 | } |
48 | ||
49 | run_client() { | |
9a52c3fd HH |
50 | local test_name=$1 |
51 | shift | |
9373aec6 | 52 | echo "CLIENT TEST START: $test_name" |
eeb72103 | 53 | |
b80ee080 HH |
54 | declare -a disk_args=() |
55 | declare -i disk_index=0 | |
56 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker | |
eeb72103 | 57 | |
f1346763 | 58 | test_marker_reset |
2aa97ff2 | 59 | "$testdir"/run-qemu \ |
b80ee080 | 60 | "${disk_args[@]}" \ |
3905f669 | 61 | -net nic,macaddr=52:54:00:12:34:00,model=e1000 \ |
c22c43f8 | 62 | -net nic,macaddr=52:54:00:12:34:01,model=e1000 \ |
3905f669 | 63 | -net socket,connect=127.0.0.1:12330 \ |
9a752007 | 64 | -acpitable file=ibft.table \ |
af31df4b | 65 | -append "$*" \ |
2aa97ff2 | 66 | -initrd "$TESTDIR"/initramfs.testing |
b80ee080 HH |
67 | |
68 | # shellcheck disable=SC2181 | |
f1346763 | 69 | if [[ $? -ne 0 ]] || ! test_marker_check iscsi-OK; then |
2f78bafa HH |
70 | echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" |
71 | return 1 | |
0be1785a | 72 | fi |
169f1671 | 73 | |
9373aec6 HH |
74 | echo "CLIENT TEST END: $test_name [OK]" |
75 | return 0 | |
76 | } | |
3905f669 | 77 | |
9373aec6 | 78 | do_test_run() { |
0a66b74b HH |
79 | initiator=$(iscsi-iname) |
80 | ||
c22c43f8 | 81 | run_client "root=dhcp" \ |
b80ee080 | 82 | "root=/dev/root netroot=dhcp ip=enp0s1:dhcp" \ |
9a52c3fd | 83 | "rd.iscsi.initiator=$initiator" \ |
c22c43f8 | 84 | || return 1 |
3905f669 | 85 | |
9a52c3fd HH |
86 | run_client "netroot=iscsi target0" \ |
87 | "root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \ | |
b80ee080 | 88 | "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:enp0s1:off" \ |
9a52c3fd | 89 | "rd.iscsi.initiator=$initiator" \ |
c22c43f8 | 90 | || return 1 |
9373aec6 | 91 | |
9a9c67d6 | 92 | run_client "netroot=iscsi target1 target2" \ |
9a52c3fd HH |
93 | "root=LABEL=sysroot" \ |
94 | "ip=dhcp" \ | |
95 | "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ | |
96 | "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ | |
97 | "rd.iscsi.initiator=$initiator" \ | |
9a9c67d6 | 98 | || return 1 |
0a66b74b | 99 | |
9a752007 | 100 | run_client "root=ibft" \ |
9a52c3fd HH |
101 | "root=LABEL=singleroot" \ |
102 | "rd.iscsi.ibft=1" \ | |
103 | "rd.iscsi.firmware=1" \ | |
9a752007 LR |
104 | || return 1 |
105 | ||
d7c9ad50 | 106 | echo "All tests passed [OK]" |
9373aec6 | 107 | return 0 |
eeb72103 | 108 | } |
ac4ded91 HH |
109 | |
110 | test_run() { | |
eeb72103 | 111 | if ! run_server; then |
3905f669 HH |
112 | echo "Failed to start server" 1>&2 |
113 | return 1 | |
eeb72103 | 114 | fi |
9373aec6 | 115 | do_test_run |
54aaad9d | 116 | ret=$? |
0be1785a | 117 | if [[ -s $TESTDIR/server.pid ]]; then |
2aa97ff2 HH |
118 | kill -TERM "$(cat "$TESTDIR"/server.pid)" |
119 | rm -f -- "$TESTDIR"/server.pid | |
eeb72103 | 120 | fi |
54aaad9d | 121 | return $ret |
ac4ded91 HH |
122 | } |
123 | ||
1843c16c | 124 | test_check() { |
9a52c3fd | 125 | if ! command -v tgtd &> /dev/null || ! command -v tgtadm &> /dev/null; then |
dba97484 | 126 | echo "Need tgtd and tgtadm from scsi-target-utils" |
3905f669 | 127 | return 1 |
eeb72103 | 128 | fi |
1843c16c | 129 | } |
eeb72103 | 130 | |
1843c16c | 131 | test_setup() { |
af31df4b | 132 | # Create what will eventually be the client root filesystem onto an overlay |
f9939d0e | 133 | "$DRACUT" -l --keep --tmpdir "$TESTDIR" \ |
af31df4b HG |
134 | -m "test-root" \ |
135 | -i ./client-init.sh /sbin/init \ | |
136 | -I "ip ping grep setsid" \ | |
137 | -i "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh" \ | |
138 | -i "${basedir}/modules.d/99base/dracut-dev-lib.sh" "/lib/dracut-dev-lib.sh" \ | |
139 | --no-hostonly --no-hostonly-cmdline --nohardlink \ | |
140 | -f "$TESTDIR"/initramfs.root "$KVERSION" || return 1 | |
141 | mkdir -p "$TESTDIR"/overlay/source && mv "$TESTDIR"/dracut.*/initramfs/* "$TESTDIR"/overlay/source && rm -rf "$TESTDIR"/dracut.* | |
142 | ||
143 | mkdir -p -- "$TESTDIR"/overlay/source/var/lib/nfs/rpc_pipefs | |
3b403b32 | 144 | |
ac4ded91 HH |
145 | # create an initramfs that will create the target root filesystem. |
146 | # We do it this way so that we do not risk trashing the host mdraid | |
147 | # devices, volume groups, encrypted partitions, etc. | |
f9939d0e | 148 | "$DRACUT" -l -i "$TESTDIR"/overlay / \ |
af31df4b HG |
149 | -m "test-makeroot crypt lvm mdraid" \ |
150 | -I "mkfs.ext4 setsid blockdev" \ | |
151 | -i ./create-client-root.sh /lib/dracut/hooks/initqueue/01-create-client-root.sh \ | |
9a52c3fd | 152 | --no-hostonly-cmdline -N \ |
2aa97ff2 HH |
153 | -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 |
154 | rm -rf -- "$TESTDIR"/overlay | |
eeb72103 | 155 | |
b80ee080 HH |
156 | declare -a disk_args=() |
157 | declare -i disk_index=0 | |
f1346763 HG |
158 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker 1 |
159 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/singleroot.img singleroot 200 | |
160 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-1.img raid0-1 100 | |
161 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/raid0-2.img raid0-2 100 | |
b80ee080 | 162 | |
ac4ded91 | 163 | # Invoke KVM and/or QEMU to actually create the target filesystem. |
2aa97ff2 | 164 | "$testdir"/run-qemu \ |
b80ee080 | 165 | "${disk_args[@]}" \ |
006890a2 | 166 | -append "root=/dev/fakeroot rw rootfstype=ext4 quiet console=ttyS0,115200n81 selinux=0" \ |
2aa97ff2 | 167 | -initrd "$TESTDIR"/initramfs.makeroot || return 1 |
f1346763 | 168 | test_marker_check dracut-root-block-created || return 1 |
b80ee080 | 169 | rm -- "$TESTDIR"/marker.img |
0f62da04 | 170 | |
af31df4b | 171 | # Create what will eventually be the server root filesystem onto an overlay |
f9939d0e | 172 | "$DRACUT" -l --keep --tmpdir "$TESTDIR" \ |
af31df4b HG |
173 | -m "test-root network network-legacy" \ |
174 | -d "iscsi_tcp crc32c ipv6" \ | |
175 | -i ./server-init.sh /sbin/init \ | |
176 | -i "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh" \ | |
177 | -i "${basedir}/modules.d/99base/dracut-dev-lib.sh" "/lib/dracut-dev-lib.sh" \ | |
178 | -I "modprobe chmod ip ping tcpdump setsid pidof tgtd tgtadm /etc/passwd" \ | |
179 | --install-optional "/etc/netconfig dhcpd /etc/group /etc/nsswitch.conf /etc/rpc /etc/protocols /etc/services /usr/etc/nsswitch.conf /usr/etc/rpc /usr/etc/protocols /usr/etc/services" \ | |
180 | -i "./hosts" "/etc/hosts" \ | |
181 | -i "./dhcpd.conf" "/etc/dhcpd.conf" \ | |
182 | --no-hostonly --no-hostonly-cmdline --nohardlink \ | |
183 | -f "$TESTDIR"/initramfs.root "$KVERSION" || return 1 | |
184 | mkdir -p "$TESTDIR"/overlay/source && mv "$TESTDIR"/dracut.*/initramfs/* "$TESTDIR"/overlay/source && rm -rf "$TESTDIR"/dracut.* | |
185 | ||
186 | mkdir -p "$TESTDIR"/overlay/source/var/lib/dhcpd | |
eeb72103 | 187 | |
0f62da04 | 188 | # second, install the files needed to make the root filesystem |
0f62da04 HH |
189 | # create an initramfs that will create the target root filesystem. |
190 | # We do it this way so that we do not risk trashing the host mdraid | |
191 | # devices, volume groups, encrypted partitions, etc. | |
f9939d0e | 192 | "$DRACUT" -l -i "$TESTDIR"/overlay / \ |
af31df4b HG |
193 | -m "test-makeroot" \ |
194 | -I "mkfs.ext4" \ | |
195 | -i ./create-server-root.sh /lib/dracut/hooks/initqueue/01-create-server-root.sh \ | |
9a52c3fd HH |
196 | --nomdadmconf \ |
197 | --no-hostonly-cmdline -N \ | |
2aa97ff2 | 198 | -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 |
b80ee080 HH |
199 | rm -rf -- "$TESTDIR"/overlay |
200 | ||
b80ee080 HH |
201 | declare -a disk_args=() |
202 | # shellcheck disable=SC2034 | |
203 | declare -i disk_index=0 | |
f1346763 | 204 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker 1 |
af31df4b | 205 | qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root 240 |
a3f73298 | 206 | |
0f62da04 | 207 | # Invoke KVM and/or QEMU to actually create the target filesystem. |
2aa97ff2 | 208 | "$testdir"/run-qemu \ |
b80ee080 | 209 | "${disk_args[@]}" \ |
006890a2 | 210 | -append "root=/dev/dracut/root rw rootfstype=ext4 quiet console=ttyS0,115200n81 selinux=0" \ |
2aa97ff2 | 211 | -initrd "$TESTDIR"/initramfs.makeroot || return 1 |
f1346763 | 212 | test_marker_check dracut-root-block-created || return 1 |
b80ee080 | 213 | rm -- "$TESTDIR"/marker.img |
0f62da04 | 214 | |
0f62da04 | 215 | # Make server's dracut image |
f9939d0e | 216 | "$DRACUT" -l \ |
af31df4b HG |
217 | -a "dash rootfs-block test kernel-modules network network-legacy" \ |
218 | -d "piix ide-gd_mod ata_piix ext4 sd_mod e1000 drbg" \ | |
219 | -i "./server.link" "/etc/systemd/network/01-server.link" \ | |
220 | -i ./wait-if-server.sh /lib/dracut/hooks/pre-mount/99-wait-if-server.sh \ | |
9a52c3fd | 221 | --no-hostonly-cmdline -N \ |
2aa97ff2 | 222 | -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 |
0f62da04 | 223 | |
af31df4b HG |
224 | # Make client's dracut image |
225 | test_dracut \ | |
226 | --add "$USE_NETWORK" \ | |
227 | --include "./client.link" "/etc/systemd/network/01-client.link" \ | |
228 | --kernel-cmdline "rw rd.auto rd.retry=50" \ | |
229 | "$TESTDIR"/initramfs.testing | |
ac4ded91 HH |
230 | } |
231 | ||
232 | test_cleanup() { | |
0be1785a | 233 | if [[ -s $TESTDIR/server.pid ]]; then |
2aa97ff2 HH |
234 | kill -TERM "$(cat "$TESTDIR"/server.pid)" |
235 | rm -f -- "$TESTDIR"/server.pid | |
eeb72103 | 236 | fi |
ac4ded91 HH |
237 | } |
238 | ||
2aa97ff2 HH |
239 | # shellcheck disable=SC1090 |
240 | . "$testdir"/test-functions |