]> git.ipfire.org Git - thirdparty/dracut.git/blame - test/TEST-30-ISCSI/test.sh
95iscsi: decouple iscsi from sysinit.target
[thirdparty/dracut.git] / test / TEST-30-ISCSI / test.sh
CommitLineData
ac4ded91 1#!/bin/bash
eeb72103
HH
2TEST_DESCRIPTION="root filesystem over iSCSI"
3
4KVERSION=${KVERSION-$(uname -r)}
5
c22c43f8 6DEBUGFAIL="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
12run_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
41run_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 65do_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
91test_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
105test_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
246test_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