]>
Commit | Line | Data |
---|---|---|
ac4ded91 | 1 | #!/bin/bash |
eeb72103 HH |
2 | TEST_DESCRIPTION="root filesystem over iSCSI" |
3 | ||
4 | KVERSION=${KVERSION-$(uname -r)} | |
5 | ||
c22c43f8 | 6 | DEBUGFAIL="loglevel=1" |
6251f82c HH |
7 | #DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " |
8 | #DEBUGFAIL="rd.debug loglevel=7 " | |
c22c43f8 | 9 | #SERVER_DEBUG="rd.debug loglevel=7" |
b0d6254d | 10 | #SERIAL="tcp:127.0.0.1:9999" |
eeb72103 HH |
11 | |
12 | run_server() { | |
13 | # Start server first | |
14 | echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server" | |
15 | ||
0be1785a | 16 | $testdir/run-qemu \ |
4358ace4 HH |
17 | -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \ |
18 | -drive format=raw,index=1,media=disk,file=$TESTDIR/root.ext3 \ | |
19 | -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \ | |
20 | -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \ | |
bdd62605 | 21 | -m 512M -smp 2 \ |
44f870be | 22 | -display none \ |
b0d6254d HH |
23 | ${SERIAL:+-serial "$SERIAL"} \ |
24 | ${SERIAL:--serial file:"$TESTDIR"/server.log} \ | |
3905f669 | 25 | -net nic,macaddr=52:54:00:12:34:56,model=e1000 \ |
c22c43f8 | 26 | -net nic,macaddr=52:54:00:12:34:57,model=e1000 \ |
3905f669 | 27 | -net socket,listen=127.0.0.1:12330 \ |
36867f1a HH |
28 | -no-reboot \ |
29 | -append "panic=1 root=/dev/sda rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \ | |
3905f669 HH |
30 | -initrd $TESTDIR/initramfs.server \ |
31 | -pidfile $TESTDIR/server.pid -daemonize || return 1 | |
0be1785a | 32 | sudo chmod 644 $TESTDIR/server.pid || return 1 |
eeb72103 HH |
33 | |
34 | # Cleanup the terminal if we have one | |
35 | tty -s && stty sane | |
36 | ||
93d7b95a HH |
37 | echo Sleeping 20 seconds to give the server a head start |
38 | sleep 20 | |
eeb72103 HH |
39 | } |
40 | ||
41 | run_client() { | |
9373aec6 HH |
42 | local test_name=$1; shift |
43 | echo "CLIENT TEST START: $test_name" | |
eeb72103 | 44 | |
9373aec6 | 45 | dd if=/dev/zero of=$TESTDIR/client.img bs=1M count=1 |
eeb72103 | 46 | |
0be1785a | 47 | $testdir/run-qemu \ |
4358ace4 | 48 | -drive format=raw,index=0,media=disk,file=$TESTDIR/client.img \ |
bdd62605 | 49 | -m 512M -smp 2 -nographic \ |
3905f669 | 50 | -net nic,macaddr=52:54:00:12:34:00,model=e1000 \ |
c22c43f8 | 51 | -net nic,macaddr=52:54:00:12:34:01,model=e1000 \ |
3905f669 | 52 | -net socket,connect=127.0.0.1:12330 \ |
36867f1a HH |
53 | -no-reboot \ |
54 | -append "panic=1 rw rd.auto rd.retry=50 console=ttyS0,115200n81 selinux=0 rd.debug=0 rd.shell=0 $DEBUGFAIL $*" \ | |
3905f669 | 55 | -initrd $TESTDIR/initramfs.testing |
021b2fdd | 56 | if ! grep -F -m 1 -q iscsi-OK $TESTDIR/client.img; then |
9373aec6 HH |
57 | echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" |
58 | return 1 | |
0be1785a | 59 | fi |
169f1671 | 60 | |
9373aec6 HH |
61 | echo "CLIENT TEST END: $test_name [OK]" |
62 | return 0 | |
63 | } | |
3905f669 | 64 | |
9373aec6 | 65 | do_test_run() { |
0a66b74b HH |
66 | initiator=$(iscsi-iname) |
67 | ||
c22c43f8 | 68 | run_client "root=dhcp" \ |
0a66b74b HH |
69 | "root=/dev/root netroot=dhcp ip=ens3:dhcp" \ |
70 | "rd.iscsi.initiator=$initiator" \ | |
c22c43f8 | 71 | || return 1 |
3905f669 | 72 | |
c22c43f8 | 73 | run_client "netroot=iscsi target0"\ |
0a66b74b HH |
74 | "root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \ |
75 | "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens3:off" \ | |
76 | "rd.iscsi.initiator=$initiator" \ | |
c22c43f8 | 77 | || return 1 |
9373aec6 | 78 | |
9a9c67d6 HH |
79 | run_client "netroot=iscsi target1 target2" \ |
80 | "root=LABEL=sysroot" \ | |
81 | "ip=dhcp" \ | |
82 | "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ | |
83 | "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ | |
84 | "rd.iscsi.initiator=$initiator" \ | |
85 | || return 1 | |
0a66b74b | 86 | |
d7c9ad50 | 87 | echo "All tests passed [OK]" |
9373aec6 | 88 | return 0 |
eeb72103 | 89 | } |
ac4ded91 HH |
90 | |
91 | test_run() { | |
eeb72103 | 92 | if ! run_server; then |
3905f669 HH |
93 | echo "Failed to start server" 1>&2 |
94 | return 1 | |
eeb72103 | 95 | fi |
9373aec6 | 96 | do_test_run |
54aaad9d | 97 | ret=$? |
0be1785a | 98 | if [[ -s $TESTDIR/server.pid ]]; then |
3905f669 | 99 | sudo kill -TERM $(cat $TESTDIR/server.pid) |
32bd2fbb | 100 | rm -f -- $TESTDIR/server.pid |
eeb72103 | 101 | fi |
54aaad9d | 102 | return $ret |
ac4ded91 HH |
103 | } |
104 | ||
105 | test_setup() { | |
dba97484 HH |
106 | if ! command -v tgtd &>/dev/null || ! command -v tgtadm &>/dev/null; then |
107 | echo "Need tgtd and tgtadm from scsi-target-utils" | |
3905f669 | 108 | return 1 |
eeb72103 HH |
109 | fi |
110 | ||
111 | # Create the blank file to use as a root filesystem | |
5a8efed0 HH |
112 | dd if=/dev/null of=$TESTDIR/root.ext3 bs=1M seek=40 |
113 | dd if=/dev/null of=$TESTDIR/iscsidisk2.img bs=1M seek=40 | |
114 | dd if=/dev/null of=$TESTDIR/iscsidisk3.img bs=1M seek=40 | |
ac4ded91 | 115 | |
eeb72103 | 116 | kernel=$KVERSION |
ac4ded91 HH |
117 | # Create what will eventually be our root filesystem onto an overlay |
118 | ( | |
27fa6044 | 119 | export initdir=$TESTDIR/overlay/source |
777f2db0 | 120 | . $basedir/dracut-init.sh |
06853123 HH |
121 | ( |
122 | cd "$initdir" | |
123 | mkdir -p -- dev sys proc etc var/run tmp | |
124 | mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin | |
125 | for i in bin sbin lib lib64; do | |
126 | ln -sfnr usr/$i $i | |
127 | done | |
128 | mkdir -p -- var/lib/nfs/rpc_pipefs | |
129 | ) | |
af119460 | 130 | inst_multiple sh shutdown poweroff stty cat ps ln ip \ |
cfd51d2b | 131 | mount dmesg mkdir cp ping grep setsid |
96d22bd7 | 132 | for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do |
3905f669 HH |
133 | [ -f ${_terminfodir}/l/linux ] && break |
134 | done | |
af119460 | 135 | inst_multiple -o ${_terminfodir}/l/linux |
021b2fdd | 136 | inst_simple /etc/os-release |
552ecca6 | 137 | inst ./client-init.sh /sbin/init |
3905f669 HH |
138 | cp -a /etc/ld.so.conf* $initdir/etc |
139 | sudo ldconfig -r "$initdir" | |
ac4ded91 | 140 | ) |
3b403b32 | 141 | |
ac4ded91 HH |
142 | # second, install the files needed to make the root filesystem |
143 | ( | |
27fa6044 | 144 | export initdir=$TESTDIR/overlay |
777f2db0 | 145 | . $basedir/dracut-init.sh |
cfd51d2b | 146 | inst_multiple sfdisk mkfs.ext3 poweroff cp umount setsid |
3905f669 | 147 | inst_hook initqueue 01 ./create-root.sh |
356333b3 | 148 | inst_hook initqueue/finished 01 ./finished-false.sh |
3905f669 | 149 | inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules |
ac4ded91 | 150 | ) |
3b403b32 | 151 | |
ac4ded91 HH |
152 | # create an initramfs that will create the target root filesystem. |
153 | # We do it this way so that we do not risk trashing the host mdraid | |
154 | # devices, volume groups, encrypted partitions, etc. | |
552ecca6 | 155 | $basedir/dracut.sh -l -i $TESTDIR/overlay / \ |
cfd51d2b | 156 | -m "dash crypt lvm mdraid udev-rules base rootfs-block fs-lib kernel-modules" \ |
cbefa470 | 157 | -d "piix ide-gd_mod ata_piix ext3 sd_mod" \ |
e3e1f406 | 158 | --no-hostonly-cmdline -N \ |
3905f669 | 159 | -f $TESTDIR/initramfs.makeroot $KVERSION || return 1 |
32bd2fbb | 160 | rm -rf -- $TESTDIR/overlay |
eeb72103 HH |
161 | |
162 | ||
163 | # Need this so kvm-qemu will boot (needs non-/dev/zero local disk) | |
0be1785a | 164 | if ! dd if=/dev/null of=$TESTDIR/client.img bs=1M seek=1; then |
3905f669 HH |
165 | echo "Unable to make client sdb image" 1>&2 |
166 | return 1 | |
eeb72103 | 167 | fi |
ac4ded91 | 168 | # Invoke KVM and/or QEMU to actually create the target filesystem. |
0be1785a | 169 | $testdir/run-qemu \ |
4358ace4 HH |
170 | -drive format=raw,index=0,media=disk,file=$TESTDIR/root.ext3 \ |
171 | -drive format=raw,index=1,media=disk,file=$TESTDIR/client.img \ | |
172 | -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \ | |
173 | -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \ | |
9b8e6e40 | 174 | -smp 2 -m 512M -nographic -net none \ |
bb278147 | 175 | -append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ |
3905f669 | 176 | -initrd $TESTDIR/initramfs.makeroot || return 1 |
021b2fdd | 177 | grep -F -m 1 -q dracut-root-block-created $TESTDIR/client.img || return 1 |
32bd2fbb | 178 | rm -- $TESTDIR/client.img |
ac4ded91 | 179 | ( |
27fa6044 | 180 | export initdir=$TESTDIR/overlay |
777f2db0 | 181 | . $basedir/dracut-init.sh |
af119460 | 182 | inst_multiple poweroff shutdown |
4e882b80 | 183 | inst_hook shutdown-emergency 000 ./hard-off.sh |
781f1971 | 184 | inst_hook emergency 000 ./hard-off.sh |
3905f669 | 185 | inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules |
ac4ded91 | 186 | ) |
552ecca6 | 187 | sudo $basedir/dracut.sh -l -i $TESTDIR/overlay / \ |
c22c43f8 | 188 | -o "dash plymouth dmraid nfs" \ |
3905f669 | 189 | -a "debug" \ |
5d833a9f | 190 | -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod" \ |
e3e1f406 | 191 | --no-hostonly-cmdline -N \ |
3905f669 | 192 | -f $TESTDIR/initramfs.testing $KVERSION || return 1 |
eeb72103 HH |
193 | |
194 | # Make server root | |
cbefa470 HH |
195 | dd if=/dev/null of=$TESTDIR/server.ext3 bs=1M seek=60 |
196 | mkfs.ext3 -j -F $TESTDIR/server.ext3 | |
0be1785a | 197 | mkdir $TESTDIR/mnt |
cbefa470 | 198 | sudo mount -o loop $TESTDIR/server.ext3 $TESTDIR/mnt |
eeb72103 HH |
199 | |
200 | kernel=$KVERSION | |
201 | ( | |
27fa6044 | 202 | export initdir=$TESTDIR/mnt |
777f2db0 | 203 | . $basedir/dracut-init.sh |
3905f669 HH |
204 | ( |
205 | cd "$initdir"; | |
206 | mkdir -p dev sys proc etc var/run tmp var/lib/dhcpd /etc/iscsi | |
207 | ) | |
208 | inst /etc/passwd /etc/passwd | |
af119460 | 209 | inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ |
3905f669 | 210 | dmesg mkdir cp ping \ |
cfd51d2b | 211 | modprobe tcpdump setsid \ |
3905f669 | 212 | /etc/services sleep mount chmod |
c22c43f8 | 213 | inst_multiple tgtd tgtadm |
96d22bd7 | 214 | for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do |
3905f669 HH |
215 | [ -f ${_terminfodir}/l/linux ] && break |
216 | done | |
af119460 | 217 | inst_multiple -o ${_terminfodir}/l/linux |
3905f669 | 218 | instmods iscsi_tcp crc32c ipv6 |
af119460 HH |
219 | [ -f /etc/netconfig ] && inst_multiple /etc/netconfig |
220 | type -P dhcpd >/dev/null && inst_multiple dhcpd | |
3905f669 | 221 | [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd |
021b2fdd | 222 | inst_simple /etc/os-release |
552ecca6 | 223 | inst ./server-init.sh /sbin/init |
3905f669 HH |
224 | inst ./hosts /etc/hosts |
225 | inst ./dhcpd.conf /etc/dhcpd.conf | |
af119460 | 226 | inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols |
3905f669 HH |
227 | inst /etc/group /etc/group |
228 | ||
3905f669 HH |
229 | cp -a /etc/ld.so.conf* $initdir/etc |
230 | sudo ldconfig -r "$initdir" | |
67ab4f77 | 231 | dracut_kernel_post |
eeb72103 HH |
232 | ) |
233 | ||
0be1785a | 234 | sudo umount $TESTDIR/mnt |
32bd2fbb | 235 | rm -fr -- $TESTDIR/mnt |
eeb72103 | 236 | |
eeb72103 | 237 | # Make server's dracut image |
552ecca6 | 238 | $basedir/dracut.sh -l -i $TESTDIR/overlay / \ |
3c20ac53 | 239 | -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules" \ |
c22c43f8 | 240 | -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \ |
e3e1f406 | 241 | --no-hostonly-cmdline -N \ |
3905f669 | 242 | -f $TESTDIR/initramfs.server $KVERSION || return 1 |
eeb72103 | 243 | |
ac4ded91 HH |
244 | } |
245 | ||
246 | test_cleanup() { | |
0be1785a | 247 | if [[ -s $TESTDIR/server.pid ]]; then |
3905f669 | 248 | sudo kill -TERM $(cat $TESTDIR/server.pid) |
32bd2fbb | 249 | rm -f -- $TESTDIR/server.pid |
eeb72103 | 250 | fi |
ac4ded91 HH |
251 | } |
252 | ||
253 | . $testdir/test-functions |