]> git.ipfire.org Git - thirdparty/dracut.git/blame - test/TEST-30-ISCSI/test.sh
test: make dracut directory configurable
[thirdparty/dracut.git] / test / TEST-30-ISCSI / test.sh
CommitLineData
ac4ded91 1#!/bin/bash
a3f73298 2
2aa97ff2 3# shellcheck disable=SC2034
a3f73298 4TEST_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
10run_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
49run_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 78do_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
110test_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 124test_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 131test_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
232test_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