4 USE_NETWORK
="network-manager"
5 OMIT_NETWORK
="network-legacy"
7 USE_NETWORK
="network-legacy"
8 OMIT_NETWORK
="network-manager"
11 # shellcheck disable=SC2034
12 TEST_DESCRIPTION
="root filesystem over iSCSI with $USE_NETWORK"
14 KVERSION
=${KVERSION-$(uname -r)}
16 DEBUGFAIL
="loglevel=1"
17 #DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 "
18 DEBUGFAIL
="rd.debug loglevel=7 "
19 #SERVER_DEBUG="rd.debug loglevel=7"
20 #SERIAL="tcp:127.0.0.1:9999"
24 echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server"
26 declare -a disk_args
=()
27 declare -i disk_index
=0
28 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/server.img serverroot
1
29 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/singleroot.img singleroot
30 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/raid0-1.img raid0-1
31 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/raid0-2.img raid0-2
35 -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \
36 -net nic
,macaddr
=52:54:00:12:34:56,model
=e1000 \
37 -net nic
,macaddr
=52:54:00:12:34:57,model
=e1000 \
38 -net socket
,listen
=127.0.0.1:12330 \
39 -append "panic=1 oops=panic softlockup_panic=1 quiet root=/dev/disk/by-id/ata-disk_serverroot rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \
40 -initrd "$TESTDIR"/initramfs.server \
41 -pidfile "$TESTDIR"/server.pid
-daemonize ||
return 1
42 chmod 644 "$TESTDIR"/server.pid ||
return 1
44 # Cleanup the terminal if we have one
47 if ! [[ $SERIAL ]]; then
49 grep Serving
"$TESTDIR"/server.log
&& break
50 echo "Waiting for the server to startup"
51 tail "$TESTDIR"/server.log
55 echo Sleeping
10 seconds to give the server a
head start
64 echo "CLIENT TEST START: $test_name"
66 dd if=/dev
/zero of
="$TESTDIR"/marker.img bs
=1MiB count
=1
67 declare -a disk_args
=()
68 declare -i disk_index
=0
69 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/marker.img marker
73 -net nic
,macaddr
=52:54:00:12:34:00,model
=e1000 \
74 -net nic
,macaddr
=52:54:00:12:34:01,model
=e1000 \
75 -net socket
,connect
=127.0.0.1:12330 \
76 -acpitable file=ibft.table \
77 -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 $*" \
78 -initrd "$TESTDIR"/initramfs.testing
80 # shellcheck disable=SC2181
81 if [[ $?
-ne 0 ]] ||
! grep -U --binary-files=binary
-F -m 1 -q iscsi-OK
"$TESTDIR"/marker.img
; then
82 echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
86 echo "CLIENT TEST END: $test_name [OK]"
91 initiator
=$
(iscsi-iname
)
93 run_client
"root=dhcp" \
94 "root=/dev/root netroot=dhcp ip=enp0s1:dhcp" \
95 "rd.iscsi.initiator=$initiator" \
98 run_client
"netroot=iscsi target0" \
99 "root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \
100 "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:enp0s1:off" \
101 "rd.iscsi.initiator=$initiator" \
104 run_client
"netroot=iscsi target1 target2" \
105 "root=LABEL=sysroot" \
107 "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
108 "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
109 "rd.iscsi.initiator=$initiator" \
112 run_client
"root=ibft" \
113 "root=LABEL=singleroot" \
115 "rd.iscsi.firmware=1" \
118 echo "All tests passed [OK]"
123 if ! run_server
; then
124 echo "Failed to start server" 1>&2
129 if [[ -s $TESTDIR/server.pid
]]; then
130 kill -TERM "$(cat "$TESTDIR"/server.pid)"
131 rm -f -- "$TESTDIR"/server.pid
137 if ! command -v tgtd
&> /dev
/null ||
! command -v tgtadm
&> /dev
/null
; then
138 echo "Need tgtd and tgtadm from scsi-target-utils"
143 # Create what will eventually be our root filesystem onto an overlay
144 rm -rf -- "$TESTDIR"/overlay
146 # shellcheck disable=SC2030
147 export initdir
=$TESTDIR/overlay
/source
148 # shellcheck disable=SC1090
149 .
"$basedir"/dracut-init.sh
151 cd "$initdir" ||
exit
152 mkdir
-p -- dev sys proc etc var
/run tmp
153 mkdir
-p root usr
/bin usr
/lib usr
/lib64 usr
/sbin
154 mkdir
-p -- var
/lib
/nfs
/rpc_pipefs
156 inst_multiple sh shutdown poweroff stty
cat ps
ln ip \
157 mount dmesg mkdir
cp ping grep setsid
dd sync
158 for _terminfodir
in /lib
/terminfo
/etc
/terminfo
/usr
/share
/terminfo
; do
159 [ -f ${_terminfodir}/l
/linux
] && break
161 inst_multiple
-o ${_terminfodir}/l
/linux
162 inst_simple
/etc
/os-release
164 inst_simple
"${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh"
165 inst_simple
"${basedir}/modules.d/99base/dracut-dev-lib.sh" "/lib/dracut-dev-lib.sh"
166 inst_binary
"${basedir}/dracut-util" "/usr/bin/dracut-util"
167 ln -s dracut-util
"${initdir}/usr/bin/dracut-getarg"
168 ln -s dracut-util
"${initdir}/usr/bin/dracut-getargs"
170 inst .
/client-init.sh
/sbin
/init
171 cp -a /etc
/ld.so.conf
* "$initdir"/etc
172 ldconfig
-r "$initdir"
175 # second, install the files needed to make the root filesystem
177 # shellcheck disable=SC2031
178 # shellcheck disable=SC2030
179 export initdir
=$TESTDIR/overlay
180 # shellcheck disable=SC1090
181 .
"$basedir"/dracut-init.sh
182 inst_multiple sfdisk mkfs.ext3 poweroff
cp umount setsid
dd sync blockdev
183 inst_hook initqueue
01 .
/create-client-root.sh
184 inst_hook initqueue
/finished
01 .
/finished-false.sh
187 # create an initramfs that will create the target root filesystem.
188 # We do it this way so that we do not risk trashing the host mdraid
189 # devices, volume groups, encrypted partitions, etc.
190 "$basedir"/dracut.sh
-l -i "$TESTDIR"/overlay
/ \
191 -m "dash crypt lvm mdraid udev-rules base rootfs-block fs-lib kernel-modules qemu" \
192 -d "piix ide-gd_mod ata_piix ext3 sd_mod" \
193 --no-hostonly-cmdline -N \
194 -f "$TESTDIR"/initramfs.makeroot
"$KVERSION" ||
return 1
195 rm -rf -- "$TESTDIR"/overlay
197 dd if=/dev
/zero of
="$TESTDIR"/marker.img bs
=1MiB count
=1
198 dd if=/dev
/zero of
="$TESTDIR"/singleroot.img bs
=1MiB count
=200
199 dd if=/dev
/zero of
="$TESTDIR"/raid0-1.img bs
=1MiB count
=100
200 dd if=/dev
/zero of
="$TESTDIR"/raid0-2.img bs
=1MiB count
=100
202 declare -a disk_args
=()
203 declare -i disk_index
=0
204 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/marker.img marker
205 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/singleroot.img singleroot
206 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/raid0-1.img raid0-1
207 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/raid0-2.img raid0-2
209 # Invoke KVM and/or QEMU to actually create the target filesystem.
210 "$testdir"/run-qemu \
212 -append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
213 -initrd "$TESTDIR"/initramfs.makeroot ||
return 1
214 grep -U --binary-files=binary
-F -m 1 -q dracut-root-block-created
"$TESTDIR"/marker.img ||
return 1
215 rm -- "$TESTDIR"/marker.img
217 # shellcheck disable=SC2031
218 export kernel
=$KVERSION
219 rm -rf -- "$TESTDIR"/overlay
221 mkdir
-p "$TESTDIR"/overlay
/source
222 # shellcheck disable=SC2031
223 # shellcheck disable=SC2030
224 export initdir
=$TESTDIR/overlay
/source
225 # shellcheck disable=SC1090
226 .
"$basedir"/dracut-init.sh
228 cd "$initdir" ||
exit
229 mkdir
-p dev sys proc etc var
/run tmp var
/lib
/dhcpd
/etc
/iscsi
231 inst
/etc
/passwd
/etc
/passwd
232 inst_multiple sh
ls shutdown poweroff stty
cat ps
ln ip \
233 dmesg mkdir
cp ping modprobe tcpdump setsid \
234 sleep mount
chmod pidof
235 inst_multiple tgtd tgtadm
236 for _terminfodir
in /lib
/terminfo
/etc
/terminfo
/usr
/share
/terminfo
; do
237 [ -f ${_terminfodir}/l
/linux
] && break
239 inst_multiple
-o ${_terminfodir}/l
/linux
240 instmods iscsi_tcp crc32c ipv6 af_packet
241 [ -f /etc
/netconfig
] && inst_multiple
/etc
/netconfig
242 type -P dhcpd
> /dev
/null
&& inst_multiple dhcpd
243 [ -x /usr
/sbin
/dhcpd3
] && inst
/usr
/sbin
/dhcpd3
/usr
/sbin
/dhcpd
244 inst .
/server-init.sh
/sbin
/init
245 inst .
/hosts
/etc
/hosts
246 inst .
/dhcpd.conf
/etc
/dhcpd.conf
247 inst_multiple
-o {,/usr
}/etc
/nsswitch.conf
{,/usr
}/etc
/rpc \
248 {,/usr
}/etc
/protocols
{,/usr
}/etc
/services \
249 /etc
/group
/etc
/os-release
252 cat "$dracutsysrootdir"/{,usr
/}etc
/nsswitch.conf
2> /dev
/null \
253 |
sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \
254 |
tr -s '[:space:]' '\n' |
sort -u |
tr -s '[:space:]' '|'
256 _nsslibs
=${_nsslibs#|}
257 _nsslibs
=${_nsslibs%|}
259 inst_libdir_file
-n "$_nsslibs" 'libnss_*.so*'
261 cp -a /etc
/ld.so.conf
* "$initdir"/etc
262 ldconfig
-r "$initdir"
266 # second, install the files needed to make the root filesystem
268 # shellcheck disable=SC2031
269 # shellcheck disable=SC2030
270 export initdir
=$TESTDIR/overlay
271 # shellcheck disable=SC1090
272 .
"$basedir"/dracut-init.sh
273 inst_multiple sfdisk mkfs.ext3 poweroff
cp umount sync
dd
274 inst_hook initqueue
01 .
/create-server-root.sh
275 inst_hook initqueue
/finished
01 .
/finished-false.sh
278 # create an initramfs that will create the target root filesystem.
279 # We do it this way so that we do not risk trashing the host mdraid
280 # devices, volume groups, encrypted partitions, etc.
281 "$basedir"/dracut.sh
-l -i "$TESTDIR"/overlay
/ \
282 -m "dash udev-rules base rootfs-block fs-lib kernel-modules fs-lib qemu" \
283 -d "piix ide-gd_mod ata_piix ext3 sd_mod" \
285 --no-hostonly-cmdline -N \
286 -f "$TESTDIR"/initramfs.makeroot
"$KVERSION" ||
return 1
287 rm -rf -- "$TESTDIR"/overlay
289 dd if=/dev
/zero of
="$TESTDIR"/server.img bs
=1MiB count
=60
290 dd if=/dev
/zero of
="$TESTDIR"/marker.img bs
=1MiB count
=1
291 declare -a disk_args
=()
292 # shellcheck disable=SC2034
293 declare -i disk_index
=0
294 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/marker.img marker
295 qemu_add_drive_args disk_index disk_args
"$TESTDIR"/server.img root
297 # Invoke KVM and/or QEMU to actually create the target filesystem.
298 "$testdir"/run-qemu \
300 -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
301 -initrd "$TESTDIR"/initramfs.makeroot ||
return 1
302 grep -U --binary-files=binary
-F -m 1 -q dracut-root-block-created
"$TESTDIR"/marker.img ||
return 1
303 rm -- "$TESTDIR"/marker.img
305 # Make an overlay with needed tools for the test harness
307 # shellcheck disable=SC2031
308 # shellcheck disable=SC2030
309 export initdir
=$TESTDIR/overlay
310 # shellcheck disable=SC1090
311 .
"$basedir"/dracut-init.sh
312 inst_multiple poweroff shutdown
313 inst_hook shutdown-emergency
000 .
/hard-off.sh
314 inst_hook emergency
000 .
/hard-off.sh
315 inst_simple .
/client.link
/etc
/systemd
/network
/01-client.link
317 # Make client's dracut image
318 "$basedir"/dracut.sh
-l -i "$TESTDIR"/overlay
/ \
319 -o "dash plymouth dmraid nfs ${OMIT_NETWORK}" \
320 -a "debug ${USE_NETWORK}" \
321 --no-hostonly-cmdline -N \
322 -f "$TESTDIR"/initramfs.testing
"$KVERSION" ||
return 1
325 # shellcheck disable=SC2031
326 export initdir
="$TESTDIR"/overlay
327 # shellcheck disable=SC1090
328 .
"$basedir"/dracut-init.sh
329 rm "$initdir"/etc
/systemd
/network
/01-client.link
330 inst_simple .
/server.link
/etc
/systemd
/network
/01-server.link
331 inst_hook pre-mount
99 .
/wait-if-server.sh
333 # Make server's dracut image
334 "$basedir"/dracut.sh
-l -i "$TESTDIR"/overlay
/ \
335 -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules network network-legacy" \
336 -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \
337 --no-hostonly-cmdline -N \
338 -f "$TESTDIR"/initramfs.server
"$KVERSION" ||
return 1
340 rm -rf -- "$TESTDIR"/overlay
344 if [[ -s $TESTDIR/server.pid
]]; then
345 kill -TERM "$(cat "$TESTDIR"/server.pid)"
346 rm -f -- "$TESTDIR"/server.pid
350 # shellcheck disable=SC1090
351 .
"$testdir"/test-functions