]>
Commit | Line | Data |
---|---|---|
66a3d405 | 1 | #!/bin/bash |
a3f73298 HH |
2 | |
3 | if [[ $NM ]]; then | |
4 | USE_NETWORK="network-manager" | |
5 | OMIT_NETWORK="network-legacy" | |
6 | else | |
7 | USE_NETWORK="network-legacy" | |
8 | OMIT_NETWORK="network-manager" | |
9 | fi | |
10 | ||
11 | TEST_DESCRIPTION="root filesystem over multiple iSCSI with $USE_NETWORK" | |
66a3d405 HH |
12 | |
13 | KVERSION=${KVERSION-$(uname -r)} | |
14 | ||
0f294d90 | 15 | #DEBUGFAIL="loglevel=1" |
66a3d405 | 16 | #DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " |
0f294d90 | 17 | DEBUGFAIL="rd.debug loglevel=7 " |
66a3d405 HH |
18 | #SERVER_DEBUG="rd.debug loglevel=7" |
19 | #SERIAL="tcp:127.0.0.1:9999" | |
20 | ||
21 | run_server() { | |
22 | # Start server first | |
23 | echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server" | |
24 | ||
25 | $testdir/run-qemu \ | |
26 | -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \ | |
27 | -drive format=raw,index=1,media=disk,file=$TESTDIR/root.ext3 \ | |
28 | -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \ | |
29 | -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \ | |
66a3d405 HH |
30 | ${SERIAL:+-serial "$SERIAL"} \ |
31 | ${SERIAL:--serial file:"$TESTDIR"/server.log} \ | |
32 | -net nic,macaddr=52:54:00:12:34:56,model=e1000 \ | |
33 | -net nic,macaddr=52:54:00:12:34:57,model=e1000 \ | |
ffbd37d7 | 34 | -net socket,listen=127.0.0.1:12331 \ |
0f62da04 | 35 | -append "panic=1 systemd.crash_reboot root=/dev/sda2 rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \ |
66a3d405 HH |
36 | -initrd $TESTDIR/initramfs.server \ |
37 | -pidfile $TESTDIR/server.pid -daemonize || return 1 | |
4bd0ab61 | 38 | chmod 644 $TESTDIR/server.pid || return 1 |
66a3d405 HH |
39 | |
40 | # Cleanup the terminal if we have one | |
41 | tty -s && stty sane | |
42 | ||
3aae122c | 43 | if ! [[ $SERIAL ]]; then |
9a52c3fd | 44 | while :; do |
3aae122c | 45 | grep Serving "$TESTDIR"/server.log && break |
a3f73298 HH |
46 | echo "Waiting for the server to startup" |
47 | tail "$TESTDIR"/server.log | |
3aae122c HH |
48 | sleep 1 |
49 | done | |
50 | else | |
51 | echo Sleeping 10 seconds to give the server a head start | |
52 | sleep 10 | |
53 | fi | |
66a3d405 HH |
54 | } |
55 | ||
56 | run_client() { | |
9a52c3fd HH |
57 | local test_name=$1 |
58 | shift | |
66a3d405 HH |
59 | echo "CLIENT TEST START: $test_name" |
60 | ||
61 | dd if=/dev/zero of=$TESTDIR/client.img bs=1M count=1 | |
62 | ||
63 | $testdir/run-qemu \ | |
64 | -drive format=raw,index=0,media=disk,file=$TESTDIR/client.img \ | |
66a3d405 HH |
65 | -net nic,macaddr=52:54:00:12:34:00,model=e1000 \ |
66 | -net nic,macaddr=52:54:00:12:34:01,model=e1000 \ | |
ffbd37d7 | 67 | -net socket,connect=127.0.0.1:12331 \ |
7934c6f9 | 68 | -append "panic=1 systemd.crash_reboot rw rd.auto rd.retry=50 console=ttyS0,115200n81 selinux=0 rd.debug=0 rd.shell=0 $DEBUGFAIL $*" \ |
66a3d405 | 69 | -initrd $TESTDIR/initramfs.testing |
d85c71fb | 70 | if ! grep -U --binary-files=binary -F -m 1 -q iscsi-OK $TESTDIR/client.img; then |
2f78bafa HH |
71 | echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" |
72 | return 1 | |
66a3d405 HH |
73 | fi |
74 | ||
75 | echo "CLIENT TEST END: $test_name [OK]" | |
76 | return 0 | |
77 | } | |
78 | ||
79 | do_test_run() { | |
80 | initiator=$(iscsi-iname) | |
81 | run_client "netroot=iscsi target1 target2" \ | |
9a52c3fd HH |
82 | "root=LABEL=sysroot" \ |
83 | "ip=192.168.50.101:::255.255.255.0::ens2:off" \ | |
84 | "ip=192.168.51.101:::255.255.255.0::ens3:off" \ | |
85 | "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ | |
86 | "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ | |
87 | "rd.iscsi.initiator=$initiator" \ | |
66a3d405 HH |
88 | || return 1 |
89 | ||
28a68f1f | 90 | run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0" \ |
9a52c3fd HH |
91 | "root=LABEL=sysroot" \ |
92 | "ip=192.168.50.101:::255.255.255.0::ens2:off" \ | |
93 | "ip=192.168.51.101:::255.255.255.0::ens3:off" \ | |
94 | "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ | |
95 | "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ | |
96 | "rd.iscsi.firmware" \ | |
97 | "rd.iscsi.initiator=$initiator" \ | |
98 | "rd.iscsi.waitnet=0" \ | |
28a68f1f HH |
99 | || return 1 |
100 | ||
101 | run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ | |
9a52c3fd HH |
102 | "root=LABEL=sysroot" \ |
103 | "ip=192.168.50.101:::255.255.255.0::ens2:off" \ | |
104 | "ip=192.168.51.101:::255.255.255.0::ens3:off" \ | |
105 | "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ | |
106 | "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ | |
107 | "rd.iscsi.firmware" \ | |
108 | "rd.iscsi.initiator=$initiator" \ | |
109 | "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ | |
28a68f1f HH |
110 | || return 1 |
111 | ||
112 | run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0 default GW" \ | |
9a52c3fd HH |
113 | "root=LABEL=sysroot" \ |
114 | "ip=192.168.50.101::192.168.50.1:255.255.255.0::ens2:off" \ | |
115 | "ip=192.168.51.101::192.168.51.1:255.255.255.0::ens3:off" \ | |
116 | "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ | |
117 | "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ | |
118 | "rd.iscsi.firmware" \ | |
119 | "rd.iscsi.initiator=$initiator" \ | |
120 | "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ | |
28a68f1f | 121 | || return 1 |
66a3d405 HH |
122 | |
123 | echo "All tests passed [OK]" | |
124 | return 0 | |
125 | } | |
126 | ||
127 | test_run() { | |
128 | if ! run_server; then | |
129 | echo "Failed to start server" 1>&2 | |
130 | return 1 | |
131 | fi | |
132 | do_test_run | |
133 | ret=$? | |
134 | if [[ -s $TESTDIR/server.pid ]]; then | |
4bd0ab61 | 135 | kill -TERM $(cat $TESTDIR/server.pid) |
66a3d405 HH |
136 | rm -f -- $TESTDIR/server.pid |
137 | fi | |
138 | return $ret | |
139 | } | |
140 | ||
141 | test_setup() { | |
9a52c3fd | 142 | if ! command -v tgtd &> /dev/null || ! command -v tgtadm &> /dev/null; then |
66a3d405 HH |
143 | echo "Need tgtd and tgtadm from scsi-target-utils" |
144 | return 1 | |
145 | fi | |
146 | ||
147 | # Create the blank file to use as a root filesystem | |
1149ed2a | 148 | dd if=/dev/zero of=$TESTDIR/root.ext3 bs=1M count=180 |
a22ab24d HH |
149 | dd if=/dev/zero of=$TESTDIR/iscsidisk2.img bs=1M count=90 |
150 | dd if=/dev/zero of=$TESTDIR/iscsidisk3.img bs=1M count=90 | |
66a3d405 HH |
151 | |
152 | kernel=$KVERSION | |
153 | # Create what will eventually be our root filesystem onto an overlay | |
a3f73298 | 154 | rm -rf -- $TESTDIR/overlay |
66a3d405 HH |
155 | ( |
156 | export initdir=$TESTDIR/overlay/source | |
157 | . $basedir/dracut-init.sh | |
158 | ( | |
159 | cd "$initdir" | |
160 | mkdir -p -- dev sys proc etc var/run tmp | |
161 | mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin | |
162 | for i in bin sbin lib lib64; do | |
163 | ln -sfnr usr/$i $i | |
164 | done | |
165 | mkdir -p -- var/lib/nfs/rpc_pipefs | |
166 | ) | |
167 | inst_multiple sh shutdown poweroff stty cat ps ln ip \ | |
9a52c3fd | 168 | mount dmesg mkdir cp ping grep setsid dd |
66a3d405 HH |
169 | for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do |
170 | [ -f ${_terminfodir}/l/linux ] && break | |
171 | done | |
172 | inst_multiple -o ${_terminfodir}/l/linux | |
173 | inst_simple /etc/os-release | |
174 | inst ./client-init.sh /sbin/init | |
175 | cp -a /etc/ld.so.conf* $initdir/etc | |
4bd0ab61 | 176 | ldconfig -r "$initdir" |
66a3d405 HH |
177 | ) |
178 | ||
179 | # second, install the files needed to make the root filesystem | |
180 | ( | |
181 | export initdir=$TESTDIR/overlay | |
182 | . $basedir/dracut-init.sh | |
9ca53063 | 183 | inst_multiple sfdisk mkfs.ext3 poweroff cp umount setsid dd |
0f62da04 | 184 | inst_hook initqueue 01 ./create-client-root.sh |
66a3d405 HH |
185 | inst_hook initqueue/finished 01 ./finished-false.sh |
186 | inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules | |
187 | ) | |
188 | ||
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. | |
192 | $basedir/dracut.sh -l -i $TESTDIR/overlay / \ | |
9a52c3fd HH |
193 | -m "dash crypt lvm mdraid udev-rules base rootfs-block fs-lib kernel-modules qemu" \ |
194 | -d "piix ide-gd_mod ata_piix ext3 sd_mod" \ | |
195 | --no-hostonly-cmdline -N \ | |
196 | -f $TESTDIR/initramfs.makeroot $KVERSION || return 1 | |
66a3d405 HH |
197 | rm -rf -- $TESTDIR/overlay |
198 | ||
66a3d405 | 199 | # Need this so kvm-qemu will boot (needs non-/dev/zero local disk) |
a22ab24d | 200 | if ! dd if=/dev/zero of=$TESTDIR/client.img bs=1M count=1; then |
66a3d405 HH |
201 | echo "Unable to make client sdb image" 1>&2 |
202 | return 1 | |
203 | fi | |
204 | # Invoke KVM and/or QEMU to actually create the target filesystem. | |
205 | $testdir/run-qemu \ | |
206 | -drive format=raw,index=0,media=disk,file=$TESTDIR/root.ext3 \ | |
207 | -drive format=raw,index=1,media=disk,file=$TESTDIR/client.img \ | |
208 | -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \ | |
209 | -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \ | |
66a3d405 | 210 | -append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ |
9a52c3fd | 211 | -initrd $TESTDIR/initramfs.makeroot || return 1 |
d85c71fb | 212 | grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created $TESTDIR/client.img || return 1 |
66a3d405 | 213 | rm -- $TESTDIR/client.img |
66a3d405 HH |
214 | |
215 | # Make server root | |
0f62da04 HH |
216 | echo "MAKE SERVER ROOT" |
217 | ||
a22ab24d | 218 | dd if=/dev/zero of=$TESTDIR/server.ext3 bs=1M count=60 |
66a3d405 HH |
219 | |
220 | kernel=$KVERSION | |
a3f73298 | 221 | rm -rf -- $TESTDIR/overlay |
66a3d405 | 222 | ( |
0f62da04 HH |
223 | mkdir -p $TESTDIR/overlay/source |
224 | export initdir=$TESTDIR/overlay/source | |
66a3d405 HH |
225 | . $basedir/dracut-init.sh |
226 | ( | |
9a52c3fd | 227 | cd "$initdir" |
66a3d405 HH |
228 | mkdir -p dev sys proc etc var/run tmp var/lib/dhcpd /etc/iscsi |
229 | ) | |
230 | inst /etc/passwd /etc/passwd | |
231 | inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ | |
9a52c3fd HH |
232 | dmesg mkdir cp ping \ |
233 | modprobe tcpdump setsid \ | |
234 | /etc/services sleep mount chmod | |
66a3d405 HH |
235 | inst_multiple tgtd tgtadm |
236 | for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do | |
237 | [ -f ${_terminfodir}/l/linux ] && break | |
238 | done | |
239 | inst_multiple -o ${_terminfodir}/l/linux | |
240 | instmods iscsi_tcp crc32c ipv6 | |
241 | [ -f /etc/netconfig ] && inst_multiple /etc/netconfig | |
9a52c3fd | 242 | type -P dhcpd > /dev/null && inst_multiple dhcpd |
66a3d405 HH |
243 | [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd |
244 | inst_simple /etc/os-release | |
245 | inst ./server-init.sh /sbin/init | |
246 | inst ./hosts /etc/hosts | |
247 | inst ./dhcpd.conf /etc/dhcpd.conf | |
248 | inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols | |
249 | inst /etc/group /etc/group | |
250 | ||
251 | cp -a /etc/ld.so.conf* $initdir/etc | |
4bd0ab61 | 252 | ldconfig -r "$initdir" |
66a3d405 HH |
253 | dracut_kernel_post |
254 | ) | |
0f62da04 HH |
255 | # second, install the files needed to make the root filesystem |
256 | ( | |
257 | export initdir=$TESTDIR/overlay | |
258 | . $basedir/dracut-init.sh | |
259 | inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd | |
260 | inst_hook initqueue 01 ./create-server-root.sh | |
261 | inst_hook initqueue/finished 01 ./finished-false.sh | |
262 | inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules | |
263 | ) | |
66a3d405 | 264 | |
0f62da04 HH |
265 | # create an initramfs that will create the target root filesystem. |
266 | # We do it this way so that we do not risk trashing the host mdraid | |
267 | # devices, volume groups, encrypted partitions, etc. | |
66a3d405 | 268 | $basedir/dracut.sh -l -i $TESTDIR/overlay / \ |
9a52c3fd HH |
269 | -m "dash udev-rules base rootfs-block fs-lib kernel-modules fs-lib qemu" \ |
270 | -d "piix ide-gd_mod ata_piix ext3 sd_mod" \ | |
271 | --nomdadmconf \ | |
272 | --no-hostonly-cmdline -N \ | |
273 | -f $TESTDIR/initramfs.makeroot $KVERSION || return 1 | |
a3f73298 | 274 | |
0f62da04 HH |
275 | # Invoke KVM and/or QEMU to actually create the target filesystem. |
276 | $testdir/run-qemu \ | |
277 | -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \ | |
278 | -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ | |
9a52c3fd | 279 | -initrd $TESTDIR/initramfs.makeroot || return 1 |
d85c71fb | 280 | grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created $TESTDIR/server.ext3 || return 1 |
a3f73298 | 281 | rm -rf -- $TESTDIR/overlay |
0f62da04 HH |
282 | |
283 | # Make an overlay with needed tools for the test harness | |
a3f73298 HH |
284 | ( |
285 | export initdir=$TESTDIR/overlay | |
286 | . $basedir/dracut-init.sh | |
287 | inst_multiple poweroff shutdown | |
288 | inst_hook shutdown-emergency 000 ./hard-off.sh | |
289 | inst_hook emergency 000 ./hard-off.sh | |
290 | inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules | |
291 | ) | |
0f62da04 HH |
292 | |
293 | # Make server's dracut image | |
294 | $basedir/dracut.sh -l -i $TESTDIR/overlay / \ | |
9a52c3fd HH |
295 | -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules" \ |
296 | -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \ | |
297 | --no-hostonly-cmdline -N \ | |
298 | -f $TESTDIR/initramfs.server $KVERSION || return 1 | |
0f62da04 HH |
299 | |
300 | # Make client's dracut image | |
a3f73298 | 301 | $basedir/dracut.sh -l -i $TESTDIR/overlay / \ |
9a52c3fd HH |
302 | -o "dash plymouth dmraid nfs ${OMIT_NETWORK}" \ |
303 | -a "debug ${USE_NETWORK}" \ | |
304 | -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod" \ | |
305 | --no-hostonly-cmdline -N \ | |
306 | -f $TESTDIR/initramfs.testing $KVERSION || return 1 | |
a3f73298 HH |
307 | |
308 | rm -rf -- $TESTDIR/overlay | |
66a3d405 HH |
309 | } |
310 | ||
311 | test_cleanup() { | |
312 | if [[ -s $TESTDIR/server.pid ]]; then | |
4bd0ab61 | 313 | kill -TERM $(cat $TESTDIR/server.pid) |
66a3d405 HH |
314 | rm -f -- $TESTDIR/server.pid |
315 | fi | |
316 | } | |
317 | ||
318 | . $testdir/test-functions |