3 # shellcheck disable=SC2034
4 TEST_DESCRIPTION
="root filesystem over iSCSI with $USE_NETWORK"
6 #DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 "
7 #SERVER_DEBUG="rd.debug loglevel=7"
8 #SERIAL="tcp:127.0.0.1:9999"
12 echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server"
14 declare -a disk_args
=()
15 declare -i disk_index
=0
16 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/server.img serverroot
0 1
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
23 -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \
24 -net nic
,macaddr
=52:54:00:12:34:56,model
=e1000 \
25 -net nic
,macaddr
=52:54:00:12:34:57,model
=e1000 \
26 -net socket
,listen
=127.0.0.1:12330 \
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" \
28 -initrd "$TESTDIR"/initramfs.server \
29 -pidfile "$TESTDIR"/server.pid
-daemonize ||
return 1
30 chmod 644 "$TESTDIR"/server.pid ||
return 1
32 # Cleanup the terminal if we have one
35 if ! [[ $SERIAL ]]; then
37 grep Serving
"$TESTDIR"/server.log
&& break
38 echo "Waiting for the server to startup"
39 tail "$TESTDIR"/server.log
43 echo Sleeping
10 seconds to give the server a
head start
52 echo "CLIENT TEST START: $test_name"
54 declare -a disk_args
=()
55 declare -i disk_index
=0
56 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/marker.img marker
61 -net nic
,macaddr
=52:54:00:12:34:00,model
=e1000 \
62 -net nic
,macaddr
=52:54:00:12:34:01,model
=e1000 \
63 -net socket
,connect
=127.0.0.1:12330 \
64 -acpitable file=ibft.table \
65 -append "panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot rw rd.auto rd.retry=50 console=ttyS0,115200n81 selinux=0 rd.debug=0 rd.shell=0 $DEBUGFAIL $*" \
66 -initrd "$TESTDIR"/initramfs.testing
68 # shellcheck disable=SC2181
69 if [[ $?
-ne 0 ]] ||
! test_marker_check iscsi-OK
; then
70 echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
74 echo "CLIENT TEST END: $test_name [OK]"
79 initiator
=$
(iscsi-iname
)
81 run_client
"root=dhcp" \
82 "root=/dev/root netroot=dhcp ip=enp0s1:dhcp" \
83 "rd.iscsi.initiator=$initiator" \
86 run_client
"netroot=iscsi target0" \
87 "root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \
88 "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:enp0s1:off" \
89 "rd.iscsi.initiator=$initiator" \
92 run_client
"netroot=iscsi target1 target2" \
93 "root=LABEL=sysroot" \
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" \
100 run_client
"root=ibft" \
101 "root=LABEL=singleroot" \
103 "rd.iscsi.firmware=1" \
106 echo "All tests passed [OK]"
111 if ! run_server
; then
112 echo "Failed to start server" 1>&2
117 if [[ -s $TESTDIR/server.pid
]]; then
118 kill -TERM "$(cat "$TESTDIR"/server.pid)"
119 rm -f -- "$TESTDIR"/server.pid
125 if ! command -v tgtd
&> /dev
/null ||
! command -v tgtadm
&> /dev
/null
; then
126 echo "Need tgtd and tgtadm from scsi-target-utils"
133 # Create what will eventually be our root filesystem onto an overlay
134 rm -rf -- "$TESTDIR"/overlay
136 # shellcheck disable=SC2030
137 export initdir
=$TESTDIR/overlay
/source
138 # shellcheck disable=SC1090
139 .
"$basedir"/dracut-init.sh
141 cd "$initdir" ||
exit
142 mkdir
-p -- dev sys proc etc var
/run tmp
143 mkdir
-p root usr
/bin usr
/lib usr
/lib64 usr
/sbin
144 mkdir
-p -- var
/lib
/nfs
/rpc_pipefs
146 inst_multiple sh shutdown poweroff stty
cat ps
ln ip \
147 mount dmesg mkdir
cp ping grep setsid
dd sync
148 for _terminfodir
in /lib
/terminfo
/etc
/terminfo
/usr
/share
/terminfo
; do
149 [ -f ${_terminfodir}/l
/linux
] && break
151 inst_multiple
-o ${_terminfodir}/l
/linux
152 inst_simple
/etc
/os-release
154 inst_simple
"${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
155 inst_simple
"${basedir}/modules.d/99base/dracut-dev-lib.sh" "/lib/dracut-dev-lib.sh"
156 inst_binary
"${basedir}/dracut-util" "/usr/bin/dracut-util"
157 ln -s dracut-util
"${initdir}/usr/bin/dracut-getarg"
158 ln -s dracut-util
"${initdir}/usr/bin/dracut-getargs"
160 inst .
/client-init.sh
/sbin
/init
161 cp -a /etc
/ld.so.conf
* "$initdir"/etc
162 ldconfig
-r "$initdir"
165 # second, install the files needed to make the root filesystem
167 # shellcheck disable=SC2031
168 # shellcheck disable=SC2030
169 export initdir
=$TESTDIR/overlay
170 # shellcheck disable=SC1090
171 .
"$basedir"/dracut-init.sh
172 inst_multiple sfdisk mkfs.ext4 poweroff
cp umount setsid
dd sync blockdev
173 inst_hook initqueue
01 .
/create-client-root.sh
174 inst_hook initqueue
/finished
01 .
/finished-false.sh
177 # create an initramfs that will create the target root filesystem.
178 # We do it this way so that we do not risk trashing the host mdraid
179 # devices, volume groups, encrypted partitions, etc.
180 "$basedir"/dracut.sh
-l -i "$TESTDIR"/overlay
/ \
181 -m "dash crypt lvm mdraid kernel-modules qemu" \
182 -d "piix ide-gd_mod ata_piix ext4 sd_mod" \
183 --no-hostonly-cmdline -N \
184 -f "$TESTDIR"/initramfs.makeroot
"$KVERSION" ||
return 1
185 rm -rf -- "$TESTDIR"/overlay
187 declare -a disk_args
=()
188 declare -i disk_index
=0
189 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/marker.img marker
1
190 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/singleroot.img singleroot
200
191 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/raid0-1.img raid0-1
100
192 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/raid0-2.img raid0-2
100
194 # Invoke KVM and/or QEMU to actually create the target filesystem.
195 "$testdir"/run-qemu \
197 -append "root=/dev/fakeroot rw rootfstype=ext4 quiet console=ttyS0,115200n81 selinux=0" \
198 -initrd "$TESTDIR"/initramfs.makeroot ||
return 1
199 test_marker_check dracut-root-block-created ||
return 1
200 rm -- "$TESTDIR"/marker.img
202 # shellcheck disable=SC2031
203 export kernel
=$KVERSION
204 rm -rf -- "$TESTDIR"/overlay
206 mkdir
-p "$TESTDIR"/overlay
/source
207 # shellcheck disable=SC2031
208 # shellcheck disable=SC2030
209 export initdir
=$TESTDIR/overlay
/source
210 # shellcheck disable=SC1090
211 .
"$basedir"/dracut-init.sh
213 cd "$initdir" ||
exit
214 mkdir
-p dev sys proc etc var
/run tmp var
/lib
/dhcpd
/etc
/iscsi
216 inst
/etc
/passwd
/etc
/passwd
217 inst_multiple sh
ls shutdown poweroff stty
cat ps
ln ip \
218 dmesg mkdir
cp ping modprobe tcpdump setsid \
219 sleep mount
chmod pidof
220 inst_multiple tgtd tgtadm
221 for _terminfodir
in /lib
/terminfo
/etc
/terminfo
/usr
/share
/terminfo
; do
222 [ -f ${_terminfodir}/l
/linux
] && break
224 inst_multiple
-o ${_terminfodir}/l
/linux
225 instmods iscsi_tcp crc32c ipv6 af_packet
226 [ -f /etc
/netconfig
] && inst_multiple
/etc
/netconfig
227 type -P dhcpd
> /dev
/null
&& inst_multiple dhcpd
228 inst .
/server-init.sh
/sbin
/init
229 inst .
/hosts
/etc
/hosts
230 inst .
/dhcpd.conf
/etc
/dhcpd.conf
231 inst_multiple
-o {,/usr
}/etc
/nsswitch.conf
{,/usr
}/etc
/rpc \
232 {,/usr
}/etc
/protocols
{,/usr
}/etc
/services \
233 /etc
/group
/etc
/os-release
236 cat "$dracutsysrootdir"/{,usr
/}etc
/nsswitch.conf
2> /dev
/null \
237 |
sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
238 |
tr -s '[:space:]' '\n' |
sort -u |
tr -s '[:space:]' '|'
240 _nsslibs
=${_nsslibs#|}
241 _nsslibs
=${_nsslibs%|}
243 inst_libdir_file
-n "$_nsslibs" 'libnss_*.so*'
245 cp -a /etc
/ld.so.conf
* "$initdir"/etc
246 ldconfig
-r "$initdir"
250 # second, install the files needed to make the root filesystem
252 # shellcheck disable=SC2031
253 # shellcheck disable=SC2030
254 export initdir
=$TESTDIR/overlay
255 # shellcheck disable=SC1090
256 .
"$basedir"/dracut-init.sh
257 inst_multiple sfdisk mkfs.ext4 poweroff
cp umount sync
dd
258 inst_hook initqueue
01 .
/create-server-root.sh
259 inst_hook initqueue
/finished
01 .
/finished-false.sh
262 # create an initramfs that will create the target root filesystem.
263 # We do it this way so that we do not risk trashing the host mdraid
264 # devices, volume groups, encrypted partitions, etc.
265 "$basedir"/dracut.sh
-l -i "$TESTDIR"/overlay
/ \
266 -m "dash rootfs-block kernel-modules qemu" \
267 -d "piix ide-gd_mod ata_piix ext4 sd_mod" \
269 --no-hostonly-cmdline -N \
270 -f "$TESTDIR"/initramfs.makeroot
"$KVERSION" ||
return 1
271 rm -rf -- "$TESTDIR"/overlay
273 declare -a disk_args
=()
274 # shellcheck disable=SC2034
275 declare -i disk_index
=0
276 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/marker.img marker
1
277 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/server.img root
60
279 # Invoke KVM and/or QEMU to actually create the target filesystem.
280 "$testdir"/run-qemu \
282 -append "root=/dev/dracut/root rw rootfstype=ext4 quiet console=ttyS0,115200n81 selinux=0" \
283 -initrd "$TESTDIR"/initramfs.makeroot ||
return 1
284 test_marker_check dracut-root-block-created ||
return 1
285 rm -- "$TESTDIR"/marker.img
287 # Make an overlay with needed tools for the test harness
289 # shellcheck disable=SC2031
290 # shellcheck disable=SC2030
291 export initdir
=$TESTDIR/overlay
292 # shellcheck disable=SC1090
293 .
"$basedir"/dracut-init.sh
294 inst_multiple poweroff shutdown
295 inst_hook shutdown-emergency
000 .
/hard-off.sh
296 inst_hook emergency
000 .
/hard-off.sh
297 inst_simple .
/client.link
/etc
/systemd
/network
/01-client.link
299 # Make client's dracut image
300 "$basedir"/dracut.sh
-l -i "$TESTDIR"/overlay
/ \
301 -o "plymouth dmraid nfs" \
302 -a "debug ${USE_NETWORK}" \
303 --no-hostonly-cmdline -N \
304 -f "$TESTDIR"/initramfs.testing
"$KVERSION" ||
return 1
307 # shellcheck disable=SC2031
308 export initdir
="$TESTDIR"/overlay
309 # shellcheck disable=SC1090
310 .
"$basedir"/dracut-init.sh
311 rm "$initdir"/etc
/systemd
/network
/01-client.link
312 inst_simple .
/server.link
/etc
/systemd
/network
/01-server.link
313 inst_hook pre-mount
99 .
/wait-if-server.sh
316 # Make server's dracut image
317 "$basedir"/dracut.sh
-l -i "$TESTDIR"/overlay
/ \
318 -a "dash rootfs-block debug kernel-modules network network-legacy" \
319 -d "af_packet piix ide-gd_mod ata_piix ext4 sd_mod e1000 drbg" \
320 --no-hostonly-cmdline -N \
321 -f "$TESTDIR"/initramfs.server
"$KVERSION" ||
return 1
323 rm -rf -- "$TESTDIR"/overlay
327 if [[ -s $TESTDIR/server.pid
]]; then
328 kill -TERM "$(cat "$TESTDIR"/server.pid)"
329 rm -f -- "$TESTDIR"/server.pid
333 # shellcheck disable=SC1090
334 .
"$testdir"/test-functions