From: Harald Hoyer Date: Fri, 7 May 2021 07:58:28 +0000 (+0200) Subject: fix: make testsuite pass on OpenSuse and Arch X-Git-Tag: 054~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8b2afb08baea7fc6e15ece94e287dcc4a008bcc4;p=thirdparty%2Fdracut.git fix: make testsuite pass on OpenSuse and Arch This removes some hard assumptions about the file system layout. It also hardens the tests with network interface renaming rules and guards. --- diff --git a/test/TEST-01-BASIC/test-init.sh b/test/TEST-01-BASIC/test-init.sh index 9a3940b29..108e626ba 100755 --- a/test/TEST-01-BASIC/test-init.sh +++ b/test/TEST-01-BASIC/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh index 645ac7e87..c2685c27b 100755 --- a/test/TEST-01-BASIC/test.sh +++ b/test/TEST-01-BASIC/test.sh @@ -37,9 +37,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ mount dmesg dhclient mkdir cp ping dhclient \ diff --git a/test/TEST-02-SYSTEMD/test-init.sh b/test/TEST-02-SYSTEMD/test-init.sh index 9a3940b29..108e626ba 100755 --- a/test/TEST-02-SYSTEMD/test-init.sh +++ b/test/TEST-02-SYSTEMD/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-02-SYSTEMD/test.sh b/test/TEST-02-SYSTEMD/test.sh index 41e22cf45..fd247c1ef 100755 --- a/test/TEST-02-SYSTEMD/test.sh +++ b/test/TEST-02-SYSTEMD/test.sh @@ -35,9 +35,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done mkdir -p -- var/lib/nfs/rpc_pipefs ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ diff --git a/test/TEST-03-USR-MOUNT/test-init.sh b/test/TEST-03-USR-MOUNT/test-init.sh index 9a3940b29..108e626ba 100755 --- a/test/TEST-03-USR-MOUNT/test-init.sh +++ b/test/TEST-03-USR-MOUNT/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-03-USR-MOUNT/test.sh b/test/TEST-03-USR-MOUNT/test.sh index b3d9d23bd..9bd9a129e 100755 --- a/test/TEST-03-USR-MOUNT/test.sh +++ b/test/TEST-03-USR-MOUNT/test.sh @@ -57,9 +57,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ mount dmesg dhclient mkdir cp ping dhclient \ diff --git a/test/TEST-04-FULL-SYSTEMD/test-init.sh b/test/TEST-04-FULL-SYSTEMD/test-init.sh index e87f30cc7..b7261b5f8 100755 --- a/test/TEST-04-FULL-SYSTEMD/test-init.sh +++ b/test/TEST-04-FULL-SYSTEMD/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-04-FULL-SYSTEMD/test.sh b/test/TEST-04-FULL-SYSTEMD/test.sh index e2f352b5a..036c2b0fb 100755 --- a/test/TEST-04-FULL-SYSTEMD/test.sh +++ b/test/TEST-04-FULL-SYSTEMD/test.sh @@ -90,11 +90,7 @@ test_setup() { return 1 fi inst /sbin/init - inst /lib/systemd/system/systemd-remount-fs.service - inst /lib/systemd/systemd-remount-fs - inst /lib/systemd/system/systemd-journal-flush.service - inst /lib/systemd/system/slices.target - inst_multiple -o /lib/systemd/system/dracut* + inst_multiple -o {,/usr}/lib/systemd/system/"dracut*" inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh" inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util" @@ -112,7 +108,7 @@ test_setup() { /etc/shadow \ /etc/group \ /etc/shells \ - /etc/nsswitch.conf \ + {,/usr}/etc/nsswitch.conf \ /etc/pam.conf \ /etc/securetty \ /etc/os-release \ @@ -200,7 +196,7 @@ EOF ln -fs /proc/self/mounts "$initdir"/etc/mtab # install any Execs from the service files - grep -Eho '^Exec[^ ]*=[^ ]+' "$initdir"/lib/systemd/system/*.service \ + grep -Eho '^Exec[^ ]*=[^ ]+' "$initdir"{,/usr}/lib/systemd/system/*.service \ | while read -r i || [ -n "$i" ]; do i=${i##Exec*=} i=${i##-} diff --git a/test/TEST-10-RAID/test-init.sh b/test/TEST-10-RAID/test-init.sh index 9a3940b29..108e626ba 100755 --- a/test/TEST-10-RAID/test-init.sh +++ b/test/TEST-10-RAID/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-10-RAID/test.sh b/test/TEST-10-RAID/test.sh index 25f590896..477a82e3a 100755 --- a/test/TEST-10-RAID/test.sh +++ b/test/TEST-10-RAID/test.sh @@ -37,9 +37,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ mount dmesg dhclient mkdir cp ping dhclient dd sync diff --git a/test/TEST-11-LVM/test-init.sh b/test/TEST-11-LVM/test-init.sh index 9a3940b29..108e626ba 100755 --- a/test/TEST-11-LVM/test-init.sh +++ b/test/TEST-11-LVM/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-11-LVM/test.sh b/test/TEST-11-LVM/test.sh index 0b336f245..8170939f2 100755 --- a/test/TEST-11-LVM/test.sh +++ b/test/TEST-11-LVM/test.sh @@ -38,9 +38,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done mkdir -p -- var/lib/nfs/rpc_pipefs ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ diff --git a/test/TEST-12-RAID-DEG/test-init.sh b/test/TEST-12-RAID-DEG/test-init.sh index 64fc6059a..a5360ef66 100755 --- a/test/TEST-12-RAID-DEG/test-init.sh +++ b/test/TEST-12-RAID-DEG/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-12-RAID-DEG/test.sh b/test/TEST-12-RAID-DEG/test.sh index 2b4e85374..8ebfd82d0 100755 --- a/test/TEST-12-RAID-DEG/test.sh +++ b/test/TEST-12-RAID-DEG/test.sh @@ -69,9 +69,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ mount dmesg dhclient mkdir cp ping dhclient dd sync diff --git a/test/TEST-13-ENC-RAID-LVM/test-init.sh b/test/TEST-13-ENC-RAID-LVM/test-init.sh index 64fc6059a..a5360ef66 100755 --- a/test/TEST-13-ENC-RAID-LVM/test-init.sh +++ b/test/TEST-13-ENC-RAID-LVM/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-13-ENC-RAID-LVM/test.sh b/test/TEST-13-ENC-RAID-LVM/test.sh index bce386cbc..491589507 100755 --- a/test/TEST-13-ENC-RAID-LVM/test.sh +++ b/test/TEST-13-ENC-RAID-LVM/test.sh @@ -66,9 +66,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done mkdir -p -- var/lib/nfs/rpc_pipefs ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ diff --git a/test/TEST-14-IMSM/create-root.sh b/test/TEST-14-IMSM/create-root.sh index 5097688e5..343999219 100755 --- a/test/TEST-14-IMSM/create-root.sh +++ b/test/TEST-14-IMSM/create-root.sh @@ -27,7 +27,6 @@ sleep 1 udevadm settle sfdisk -g /dev/mapper/isw*Test0 -# save a partition at the beginning for future flagging purposes sfdisk --no-reread /dev/mapper/isw*Test0 << EOF ,4M ,28M @@ -35,6 +34,8 @@ sfdisk --no-reread /dev/mapper/isw*Test0 << EOF ,28M EOF +set -x + udevadm settle dmraid -a n udevadm settle @@ -49,10 +50,7 @@ done udevadm settle mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 \ - /dev/mapper/isw*p2 \ - /dev/mapper/isw*p3 \ - /dev/mapper/isw*p4 - + /dev/mapper/isw*p*[234] # wait for the array to finish initailizing, otherwise this sometimes fails # randomly. mdadm -W /dev/md0 diff --git a/test/TEST-14-IMSM/test-init.sh b/test/TEST-14-IMSM/test-init.sh index 64fc6059a..a5360ef66 100755 --- a/test/TEST-14-IMSM/test-init.sh +++ b/test/TEST-14-IMSM/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-14-IMSM/test.sh b/test/TEST-14-IMSM/test.sh index be2d8221b..8841c5771 100755 --- a/test/TEST-14-IMSM/test.sh +++ b/test/TEST-14-IMSM/test.sh @@ -63,9 +63,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ mount dmesg dhclient mkdir cp ping dhclient dd sync diff --git a/test/TEST-15-BTRFSRAID/test-init.sh b/test/TEST-15-BTRFSRAID/test-init.sh index 4fb9146bf..068e8f38e 100755 --- a/test/TEST-15-BTRFSRAID/test-init.sh +++ b/test/TEST-15-BTRFSRAID/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-15-BTRFSRAID/test.sh b/test/TEST-15-BTRFSRAID/test.sh index ed1453315..2d37d9d2a 100755 --- a/test/TEST-15-BTRFSRAID/test.sh +++ b/test/TEST-15-BTRFSRAID/test.sh @@ -41,9 +41,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done mkdir -p -- var/lib/nfs/rpc_pipefs ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ diff --git a/test/TEST-16-DMSQUASH/test-init.sh b/test/TEST-16-DMSQUASH/test-init.sh index 4fb9146bf..068e8f38e 100755 --- a/test/TEST-16-DMSQUASH/test-init.sh +++ b/test/TEST-16-DMSQUASH/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-16-DMSQUASH/test.sh b/test/TEST-16-DMSQUASH/test.sh index 2b7ca22c8..f5b1ddefb 100755 --- a/test/TEST-16-DMSQUASH/test.sh +++ b/test/TEST-16-DMSQUASH/test.sh @@ -76,9 +76,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ mount dmesg dhclient mkdir cp ping dhclient \ diff --git a/test/TEST-17-LVM-THIN/test-init.sh b/test/TEST-17-LVM-THIN/test-init.sh index 9a3940b29..108e626ba 100755 --- a/test/TEST-17-LVM-THIN/test-init.sh +++ b/test/TEST-17-LVM-THIN/test-init.sh @@ -3,7 +3,7 @@ . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-17-LVM-THIN/test.sh b/test/TEST-17-LVM-THIN/test.sh index 607edef57..b6c1d27ef 100755 --- a/test/TEST-17-LVM-THIN/test.sh +++ b/test/TEST-17-LVM-THIN/test.sh @@ -36,9 +36,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done mkdir -p -- var/lib/nfs/rpc_pipefs ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ diff --git a/test/TEST-20-NFS/client-init.sh b/test/TEST-20-NFS/client-init.sh index e4cfe5c59..c7e88314b 100755 --- a/test/TEST-20-NFS/client-init.sh +++ b/test/TEST-20-NFS/client-init.sh @@ -2,7 +2,7 @@ : > /dev/watchdog . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-20-NFS/99-default.link b/test/TEST-20-NFS/client.link similarity index 100% rename from test/TEST-20-NFS/99-default.link rename to test/TEST-20-NFS/client.link diff --git a/test/TEST-20-NFS/server-init.sh b/test/TEST-20-NFS/server-init.sh index 00841c0fd..3ddb73334 100755 --- a/test/TEST-20-NFS/server-init.sh +++ b/test/TEST-20-NFS/server-init.sh @@ -1,10 +1,10 @@ #!/bin/sh exec < /dev/console > /dev/console 2>&1 set -x -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin export TERM=linux export PS1='nfstest-server:\w\$ ' -echo > /dev/watchdog +: > /dev/watchdog stty sane echo "made it to the rootfs!" echo server > /proc/sys/kernel/hostname @@ -48,57 +48,61 @@ linkup() { wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null } -wait_for_if_link enp0s1 +wait_for_if_link enx525400123456 ip addr add 127.0.0.1/8 dev lo ip link set lo up -ip addr add 192.168.50.1/24 dev enp0s1 -ip addr add 192.168.50.2/24 dev enp0s1 -ip addr add 192.168.50.3/24 dev enp0s1 -linkup enp0s1 +ip addr add 192.168.50.1/24 dev enx525400123456 +ip addr add 192.168.50.2/24 dev enx525400123456 +ip addr add 192.168.50.3/24 dev enx525400123456 +linkup enx525400123456 -echo > /dev/watchdog +: > /dev/watchdog modprobe af_packet -echo > /dev/watchdog +: > /dev/watchdog +mkdir /nfs/nfs3-5 mount --bind /nfs/client /nfs/nfs3-5 -echo > /dev/watchdog +: > /dev/watchdog +mkdir -p /nfs/ip/192.168.50.101 mount --bind /nfs/client /nfs/ip/192.168.50.101 -echo > /dev/watchdog +: > /dev/watchdog +mkdir -p /nfs/tftpboot/nfs4-5 mount --bind /nfs/client /nfs/tftpboot/nfs4-5 -echo > /dev/watchdog +: > /dev/watchdog modprobe sunrpc -echo > /dev/watchdog +: > /dev/watchdog mount -t rpc_pipefs sunrpc /var/lib/nfs/rpc_pipefs -echo > /dev/watchdog +: > /dev/watchdog [ -x /sbin/portmap ] && portmap -echo > /dev/watchdog +: > /dev/watchdog mkdir -p /run/rpcbind [ -x /sbin/rpcbind ] && rpcbind -echo > /dev/watchdog +: > /dev/watchdog modprobe nfsd -echo > /dev/watchdog +: > /dev/watchdog mount -t nfsd nfsd /proc/fs/nfsd -echo > /dev/watchdog +: > /dev/watchdog exportfs -r -echo > /dev/watchdog +: > /dev/watchdog rpc.nfsd -echo > /dev/watchdog +: > /dev/watchdog rpc.mountd -echo > /dev/watchdog +: > /dev/watchdog rpc.idmapd -echo > /dev/watchdog +: > /dev/watchdog exportfs -r -echo > /dev/watchdog +: > /dev/watchdog mkdir -p /var/lib/dhcpd : > /var/lib/dhcpd/dhcpd.leases -echo > /dev/watchdog +: > /dev/watchdog chmod 777 /var/lib/dhcpd/dhcpd.leases -echo > /dev/watchdog +: > /dev/watchdog rm -f /var/run/dhcpd.pid dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases & +exportfs -s echo "Serving NFS mounts" while :; do - [ -n "$(jobs -rp)" ] && echo > /dev/watchdog + [ -n "$(jobs -rp)" ] && : > /dev/watchdog sleep 10 done mount -n -o remount,ro / diff --git a/test/TEST-60-BONDBRIDGEVLANIFCFG/99-default.link b/test/TEST-20-NFS/server.link similarity index 100% rename from test/TEST-60-BONDBRIDGEVLANIFCFG/99-default.link rename to test/TEST-20-NFS/server.link diff --git a/test/TEST-20-NFS/test.sh b/test/TEST-20-NFS/test.sh index f8f81a30e..e48b69520 100755 --- a/test/TEST-20-NFS/test.sh +++ b/test/TEST-20-NFS/test.sh @@ -14,10 +14,10 @@ TEST_DESCRIPTION="root filesystem on NFS with $USE_NETWORK" KVERSION=${KVERSION-$(uname -r)} # Uncomment this to debug failures -#DEBUGFAIL="loglevel=1" +DEBUGFAIL="rd.debug loglevel=7" #DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " #DEBUGFAIL="rd.debug loglevel=7 rd.break=initqueue rd.shell" -#SERVER_DEBUG="rd.debug loglevel=7" +SERVER_DEBUG="rd.debug loglevel=7" #SERIAL="unix:/tmp/server.sock" run_server() { @@ -26,7 +26,7 @@ run_server() { declare -a disk_args=() # shellcheck disable=SC2034 declare -i disk_index=0 - qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root 1 + qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root 1 "$testdir"/run-qemu \ "${disk_args[@]}" \ @@ -34,7 +34,7 @@ run_server() { -net nic,macaddr=52:54:00:12:34:56,model=e1000 \ -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \ -watchdog i6300esb -watchdog-action poweroff \ - -append "panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 quiet root=LABEL=dracut rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \ + -append "panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 root=LABEL=dracut rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \ -initrd "$TESTDIR"/initramfs.server \ -pidfile "$TESTDIR"/server.pid -daemonize || return 1 chmod 644 "$TESTDIR"/server.pid || return 1 @@ -236,6 +236,7 @@ test_setup() { export srcmods="/lib/modules/$kernel/" # Detect lib paths + rm -rf -- "$TESTDIR"/overlay ( mkdir -p "$TESTDIR"/server/overlay/source # shellcheck disable=SC2030 @@ -243,25 +244,23 @@ test_setup() { # shellcheck disable=SC1090 . "$basedir"/dracut-init.sh - for _f in modules.builtin.bin modules.builtin; do - [[ -f $srcmods/$_f ]] && break - done || { - dfatal "No modules.builtin.bin and modules.builtin found!" - return 1 - } - - for _f in modules.builtin.bin modules.builtin modules.order; do - [[ -f $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f" - done + ( + cd "$initdir" || exit + mkdir -p dev sys proc run etc var/run tmp var/lib/{dhcpd,rpcbind} + mkdir -p var/lib/nfs/{v4recovery,rpc_pipefs} + chmod 777 var/lib/rpcbind var/lib/nfs + ) inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ dmesg mkdir cp ping exportfs \ modprobe rpc.nfsd rpc.mountd showmount tcpdump \ - /etc/services sleep mount chmod rm + sleep mount chmod rm for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do - [ -f ${_terminfodir}/l/linux ] && break + if [ -f "${_terminfodir}"/l/linux ]; then + inst_multiple -o "${_terminfodir}"/l/linux + break + fi done - inst_multiple -o ${_terminfodir}/l/linux type -P portmap > /dev/null && inst_multiple portmap type -P rpcbind > /dev/null && inst_multiple rpcbind [ -f /etc/netconfig ] && inst_multiple /etc/netconfig @@ -273,35 +272,29 @@ test_setup() { inst ./hosts /etc/hosts inst ./exports /etc/exports inst ./dhcpd.conf /etc/dhcpd.conf - inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols + inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc \ + {,/usr}/etc/protocols {,/usr}/etc/services inst_multiple rpc.idmapd /etc/idmapd.conf inst_libdir_file 'libnfsidmap_nsswitch.so*' inst_libdir_file 'libnfsidmap/*.so*' inst_libdir_file 'libnfsidmap*.so*' - _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' /etc/nsswitch.conf \ - | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|') + _nsslibs=$( + cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \ + | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \ + | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|' + ) _nsslibs=${_nsslibs#|} _nsslibs=${_nsslibs%|} - inst_libdir_file -n "$_nsslibs" 'libnss_*.so*' - ( - cd "$initdir" || exit - mkdir -p dev sys proc run etc var/run tmp var/lib/{dhcpd,rpcbind} - mkdir -p var/lib/nfs/{v4recovery,rpc_pipefs} - chmod 777 var/lib/rpcbind var/lib/nfs - ) - inst /etc/nsswitch.conf /etc/nsswitch.conf - inst /etc/passwd /etc/passwd inst /etc/group /etc/group cp -a /etc/ld.so.conf* "$initdir"/etc ldconfig -r "$initdir" dracut_kernel_post - ) # Make client root inside server root @@ -314,20 +307,17 @@ test_setup() { ( cd "$initdir" || exit - mkdir -p dev sys proc etc run - mkdir -p var/lib/nfs/rpc_pipefs - mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done + mkdir -p dev sys proc etc run root usr var/lib/nfs/rpc_pipefs ) inst_multiple sh shutdown poweroff stty cat ps ln ip dd \ mount dmesg mkdir cp ping grep setsid ls vi less cat sync for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do - [ -f ${_terminfodir}/l/linux ] && break + if [ -f "${_terminfodir}"/l/linux ]; then + inst_multiple -o "${_terminfodir}"/l/linux + break + fi done - inst_multiple -o ${_terminfodir}/l/linux inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh" inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util" @@ -336,7 +326,7 @@ test_setup() { inst ./client-init.sh /sbin/init inst_simple /etc/os-release - inst /etc/nsswitch.conf /etc/nsswitch.conf + inst_multiple -o {,/usr}/etc/nsswitch.conf inst /etc/passwd /etc/passwd inst /etc/group /etc/group @@ -344,11 +334,13 @@ test_setup() { inst_libdir_file 'libnfsidmap/*.so*' inst_libdir_file 'libnfsidmap*.so*' - _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' /etc/nsswitch.conf \ - | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|') + _nsslibs=$( + cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \ + | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \ + | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|' + ) _nsslibs=${_nsslibs#|} _nsslibs=${_nsslibs%|} - inst_libdir_file -n "$_nsslibs" 'libnss_*.so*' cp -a /etc/ld.so.conf* "$initdir"/etc @@ -378,13 +370,13 @@ test_setup() { -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 rm -rf -- "$TESTDIR"/server - dd if=/dev/zero of="$TESTDIR"/root.img bs=1MiB count=80 + dd if=/dev/zero of="$TESTDIR"/server.img bs=1MiB count=80 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1 declare -a disk_args=() # shellcheck disable=SC2034 declare -i disk_index=0 qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker - qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.img root + qemu_add_drive_args disk_index disk_args "$TESTDIR"/server.img root # Invoke KVM and/or QEMU to actually create the target filesystem. "$testdir"/run-qemu \ @@ -396,30 +388,41 @@ test_setup() { # Make an overlay with needed tools for the test harness ( # shellcheck disable=SC2031 - export initdir=$TESTDIR/overlay + # shellcheck disable=SC2030 + export initdir="$TESTDIR"/overlay + mkdir -p "$TESTDIR"/overlay # shellcheck disable=SC1090 . "$basedir"/dracut-init.sh - mkdir -p "$TESTDIR"/overlay inst_multiple poweroff shutdown inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh - inst_simple ./99-default.link /etc/systemd/network/99-default.link + inst_simple ./client.link /etc/systemd/network/01-client.link ) - # Make server's dracut image - "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ - -m "dash udev-rules base rootfs-block fs-lib debug kernel-modules watchdog qemu" \ - -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 i6300esb" \ - --no-hostonly-cmdline -N \ - -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 - # Make client's dracut image "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ -o "plymouth dash ${OMIT_NETWORK}" \ -a "debug watchdog ${USE_NETWORK}" \ - -d "af_packet piix ide-gd_mod ata_piix sd_mod e1000 nfs sunrpc i6300esb" \ --no-hostonly-cmdline -N \ -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1 + + ( + # shellcheck disable=SC2031 + export initdir="$TESTDIR"/overlay + # shellcheck disable=SC1090 + . "$basedir"/dracut-init.sh + rm "$initdir"/etc/systemd/network/01-client.link + inst_simple ./server.link /etc/systemd/network/01-server.link + inst_hook pre-mount 99 ./wait-if-server.sh + ) + # Make server's dracut image + "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ + -m "dash udev-rules base rootfs-block fs-lib debug kernel-modules watchdog qemu network network-legacy" \ + -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 i6300esb" \ + --no-hostonly-cmdline -N \ + -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 + + rm -rf -- "$TESTDIR"/overlay } test_cleanup() { diff --git a/test/TEST-20-NFS/wait-if-server.sh b/test/TEST-20-NFS/wait-if-server.sh new file mode 100644 index 000000000..8ae21f8ae --- /dev/null +++ b/test/TEST-20-NFS/wait-if-server.sh @@ -0,0 +1,3 @@ +#!/bin/sh +. /lib/net-lib.sh +wait_for_if_link enx525400123456 diff --git a/test/TEST-30-ISCSI/client-init.sh b/test/TEST-30-ISCSI/client-init.sh index 441c7e399..21f9bb15f 100755 --- a/test/TEST-30-ISCSI/client-init.sh +++ b/test/TEST-30-ISCSI/client-init.sh @@ -1,7 +1,7 @@ #!/bin/sh . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-50-MULTINIC/99-default.link b/test/TEST-30-ISCSI/client.link similarity index 100% rename from test/TEST-50-MULTINIC/99-default.link rename to test/TEST-30-ISCSI/client.link diff --git a/test/TEST-30-ISCSI/dhcpd.conf b/test/TEST-30-ISCSI/dhcpd.conf index 5fa1c1506..3c4dad74e 100644 --- a/test/TEST-30-ISCSI/dhcpd.conf +++ b/test/TEST-30-ISCSI/dhcpd.conf @@ -37,7 +37,7 @@ subnet 192.168.51.0 netmask 255.255.255.0 { # NFSv3: last octect starts at 0x00 and works up group { - option root-path "iscsi:192.168.51.1:::1:iqn.2009-06.dracut:target1"; + #option root-path "iscsi:192.168.51.1:::1:iqn.2009-06.dracut:target1"; host iscsi-2 { hardware ethernet 52:54:00:12:34:01; diff --git a/test/TEST-30-ISCSI/server-init.sh b/test/TEST-30-ISCSI/server-init.sh index 9c00d7d9b..fd5538d86 100755 --- a/test/TEST-30-ISCSI/server-init.sh +++ b/test/TEST-30-ISCSI/server-init.sh @@ -1,7 +1,7 @@ #!/bin/sh exec < /dev/console > /dev/console 2>&1 set -x -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin export TERM=linux export PS1='server:\w\$ ' stty sane @@ -20,15 +20,47 @@ wait_for_if_link() { return 1 } -wait_for_if_link enp0s1 -wait_for_if_link enp0s2 +wait_for_if_up() { + local cnt=0 + local li + while [ $cnt -lt 200 ]; do + li=$(ip -o link show up dev "$1") + [ -n "$li" ] && return 0 + sleep 0.1 + cnt=$((cnt + 1)) + done + return 1 +} + +wait_for_route_ok() { + local cnt=0 + while [ $cnt -lt 200 ]; do + li=$(ip route show) + [ -n "$li" ] && [ -z "${li##*$1*}" ] && return 0 + sleep 0.1 + cnt=$((cnt + 1)) + done + return 1 +} + +linkup() { + wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null +} + +wait_for_if_link enx525400123456 +wait_for_if_link enx525400123457 ip addr add 127.0.0.1/8 dev lo ip link set lo up -ip addr add 192.168.50.1/24 dev enp0s1 -ip link set enp0s1 up -ip addr add 192.168.51.1/24 dev enp0s2 -ip link set enp0s2 up + +ip addr add 192.168.50.1/24 dev enx525400123456 +linkup enx525400123456 + +ip addr add 192.168.51.1/24 dev enx525400123457 +linkup enx525400123457 + +modprobe af_packet + : > /var/lib/dhcpd/dhcpd.leases chmod 777 /var/lib/dhcpd/dhcpd.leases dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases & @@ -44,9 +76,8 @@ tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.50.101 tgtadm --lld iscsi --mode target --op bind --tid 2 -I 192.168.51.101 tgtadm --lld iscsi --mode target --op bind --tid 3 -I 192.168.50.101 -echo "Serving iSCSI" - # Wait forever for the VM to die +echo "Serving iSCSI" while pidof tgtd > /dev/null; do : > /dev/watchdog dmesg -c diff --git a/test/TEST-30-ISCSI/server.link b/test/TEST-30-ISCSI/server.link new file mode 100644 index 000000000..1d2185679 --- /dev/null +++ b/test/TEST-30-ISCSI/server.link @@ -0,0 +1,6 @@ +[Match] +OriginalName=* + +[Link] +NamePolicy=mac +MACAddressPolicy=keep diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh index 91f0aaadf..329ce5901 100755 --- a/test/TEST-30-ISCSI/test.sh +++ b/test/TEST-30-ISCSI/test.sh @@ -139,14 +139,6 @@ test_setup() { return 1 fi - # Create the blank file to use as a root filesystem - rm -f "$TESTDIR"/root.ext3 - dd if=/dev/zero of="$TESTDIR"/root.ext3 bs=4096 count=$((200 * 256)) - rm -f "$TESTDIR"/iscsidisk2.img - dd if=/dev/zero of="$TESTDIR"/iscsidisk2.img bs=4096 count=$((100 * 256)) - rm -f "$TESTDIR"/iscsidisk3.img - dd if=/dev/zero of="$TESTDIR"/iscsidisk3.img bs=4096 count=$((100 * 256)) - kernel=$KVERSION # Create what will eventually be our root filesystem onto an overlay rm -rf -- "$TESTDIR"/overlay @@ -159,9 +151,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done mkdir -p -- var/lib/nfs/rpc_pipefs ) inst_multiple sh shutdown poweroff stty cat ps ln ip \ @@ -224,9 +213,6 @@ test_setup() { grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1 rm -- "$TESTDIR"/marker.img - # Make server root - dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120 - # shellcheck disable=SC2031 export kernel=$KVERSION rm -rf -- "$TESTDIR"/overlay @@ -244,22 +230,32 @@ test_setup() { inst /etc/passwd /etc/passwd inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ dmesg mkdir cp ping modprobe tcpdump setsid \ - /etc/services sleep mount chmod pidof + sleep mount chmod pidof inst_multiple tgtd tgtadm for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do [ -f ${_terminfodir}/l/linux ] && break done inst_multiple -o ${_terminfodir}/l/linux - instmods iscsi_tcp crc32c ipv6 + instmods iscsi_tcp crc32c ipv6 af_packet [ -f /etc/netconfig ] && inst_multiple /etc/netconfig type -P dhcpd > /dev/null && inst_multiple dhcpd [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd - inst_simple /etc/os-release inst ./server-init.sh /sbin/init inst ./hosts /etc/hosts inst ./dhcpd.conf /etc/dhcpd.conf - inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols - inst /etc/group /etc/group + inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc \ + {,/usr}/etc/protocols {,/usr}/etc/services \ + /etc/group /etc/os-release + + _nsslibs=$( + cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \ + | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \ + | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|' + ) + _nsslibs=${_nsslibs#|} + _nsslibs=${_nsslibs%|} + + inst_libdir_file -n "$_nsslibs" 'libnss_*.so*' cp -a /etc/ld.so.conf* "$initdir"/etc ldconfig -r "$initdir" @@ -308,30 +304,39 @@ test_setup() { # Make an overlay with needed tools for the test harness ( # shellcheck disable=SC2031 + # shellcheck disable=SC2030 export initdir=$TESTDIR/overlay # shellcheck disable=SC1090 . "$basedir"/dracut-init.sh inst_multiple poweroff shutdown inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh + inst_simple ./client.link /etc/systemd/network/01-client.link ) + # Make client's dracut image + "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ + -o "dash plymouth dmraid nfs ${OMIT_NETWORK}" \ + -a "debug ${USE_NETWORK}" \ + --no-hostonly-cmdline -N \ + -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1 + ( + # shellcheck disable=SC2031 + export initdir="$TESTDIR"/overlay + # shellcheck disable=SC1090 + . "$basedir"/dracut-init.sh + rm "$initdir"/etc/systemd/network/01-client.link + inst_simple ./server.link /etc/systemd/network/01-server.link + inst_hook pre-mount 99 ./wait-if-server.sh + ) # Make server's dracut image "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ - -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules" \ + -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules network network-legacy" \ -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \ --no-hostonly-cmdline -N \ -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 - # Make client dracut image - "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ - -o "dash plymouth dmraid nfs ${OMIT_NETWORK}" \ - -a "debug ${USE_NETWORK}" \ - -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod" \ - --no-hostonly-cmdline -N \ - -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1 rm -rf -- "$TESTDIR"/overlay - } test_cleanup() { diff --git a/test/TEST-30-ISCSI/wait-if-server.sh b/test/TEST-30-ISCSI/wait-if-server.sh new file mode 100644 index 000000000..b53e41fe6 --- /dev/null +++ b/test/TEST-30-ISCSI/wait-if-server.sh @@ -0,0 +1,4 @@ +#!/bin/sh +. /lib/net-lib.sh +wait_for_if_link enx525400123456 +wait_for_if_link enx525400123457 diff --git a/test/TEST-35-ISCSI-MULTI/client-init.sh b/test/TEST-35-ISCSI-MULTI/client-init.sh index 441c7e399..21f9bb15f 100755 --- a/test/TEST-35-ISCSI-MULTI/client-init.sh +++ b/test/TEST-35-ISCSI-MULTI/client-init.sh @@ -1,7 +1,7 @@ #!/bin/sh . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-35-ISCSI-MULTI/client.link b/test/TEST-35-ISCSI-MULTI/client.link new file mode 100644 index 000000000..b992bfd20 --- /dev/null +++ b/test/TEST-35-ISCSI-MULTI/client.link @@ -0,0 +1,6 @@ +[Match] +OriginalName=* + +[Link] +NamePolicy=keep kernel database onboard slot path +MACAddressPolicy=keep diff --git a/test/TEST-35-ISCSI-MULTI/create-client-root.sh b/test/TEST-35-ISCSI-MULTI/create-client-root.sh index 279363ee9..1ec20afff 100755 --- a/test/TEST-35-ISCSI-MULTI/create-client-root.sh +++ b/test/TEST-35-ISCSI-MULTI/create-client-root.sh @@ -10,22 +10,24 @@ rm -f -- /etc/lvm/lvm.conf udevadm control --reload udevadm settle -mkfs.ext3 -j -L singleroot -F /dev/disk/by-id/ata-disk_singleroot \ - && mkdir -p /sysroot \ - && mount /dev/disk/by-id/ata-disk_singleroot /sysroot \ - && cp -a -t /sysroot /source/* \ - && umount /sysroot \ - && mdadm --create /dev/md0 --run --auto=yes --level=stripe --raid-devices=2 /dev/disk/by-id/ata-disk_raid0-1 /dev/disk/by-id/ata-disk_raid0-2 \ - && mdadm -W /dev/md0 || : \ - && lvm pvcreate -ff -y /dev/md0 \ - && lvm vgcreate dracut /dev/md0 \ - && lvm lvcreate -l 100%FREE -n root dracut \ - && lvm vgchange -ay \ - && mkfs.ext3 -j -L sysroot /dev/dracut/root \ - && mount /dev/dracut/root /sysroot \ - && cp -a -t /sysroot /source/* \ - && umount /sysroot \ - && lvm lvchange -a n /dev/dracut/root \ - && echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker +set -ex + +mkfs.ext3 -j -L singleroot -F /dev/disk/by-id/ata-disk_singleroot +mkdir -p /sysroot +mount /dev/disk/by-id/ata-disk_singleroot /sysroot +cp -a -t /sysroot /source/* +umount /sysroot +mdadm --create /dev/md0 --run --auto=yes --level=stripe --raid-devices=2 /dev/disk/by-id/ata-disk_raid0-1 /dev/disk/by-id/ata-disk_raid0-2 +mdadm -W /dev/md0 || : +lvm pvcreate -ff -y /dev/md0 +lvm vgcreate dracut /dev/md0 +lvm lvcreate -l 100%FREE -n root dracut +lvm vgchange -ay +mkfs.ext3 -j -L sysroot /dev/dracut/root +mount /dev/dracut/root /sysroot +cp -a -t /sysroot /source/* +umount /sysroot +lvm lvchange -a n /dev/dracut/root +echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker sync poweroff -f diff --git a/test/TEST-35-ISCSI-MULTI/dhcpd.conf b/test/TEST-35-ISCSI-MULTI/dhcpd.conf index 5fa1c1506..3c4dad74e 100644 --- a/test/TEST-35-ISCSI-MULTI/dhcpd.conf +++ b/test/TEST-35-ISCSI-MULTI/dhcpd.conf @@ -37,7 +37,7 @@ subnet 192.168.51.0 netmask 255.255.255.0 { # NFSv3: last octect starts at 0x00 and works up group { - option root-path "iscsi:192.168.51.1:::1:iqn.2009-06.dracut:target1"; + #option root-path "iscsi:192.168.51.1:::1:iqn.2009-06.dracut:target1"; host iscsi-2 { hardware ethernet 52:54:00:12:34:01; diff --git a/test/TEST-35-ISCSI-MULTI/server-init.sh b/test/TEST-35-ISCSI-MULTI/server-init.sh index 613d26a1f..fd5538d86 100755 --- a/test/TEST-35-ISCSI-MULTI/server-init.sh +++ b/test/TEST-35-ISCSI-MULTI/server-init.sh @@ -1,7 +1,7 @@ #!/bin/sh exec < /dev/console > /dev/console 2>&1 set -x -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin export TERM=linux export PS1='server:\w\$ ' stty sane @@ -47,17 +47,19 @@ linkup() { wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null } -wait_for_if_link enp0s1 -wait_for_if_link enp0s2 +wait_for_if_link enx525400123456 +wait_for_if_link enx525400123457 ip addr add 127.0.0.1/8 dev lo ip link set lo up -ip addr add 192.168.50.1/24 dev enp0s1 -linkup enp0s1 +ip addr add 192.168.50.1/24 dev enx525400123456 +linkup enx525400123456 -ip addr add 192.168.51.1/24 dev enp0s2 -linkup enp0s2 +ip addr add 192.168.51.1/24 dev enx525400123457 +linkup enx525400123457 + +modprobe af_packet : > /var/lib/dhcpd/dhcpd.leases chmod 777 /var/lib/dhcpd/dhcpd.leases diff --git a/test/TEST-35-ISCSI-MULTI/server.link b/test/TEST-35-ISCSI-MULTI/server.link new file mode 100644 index 000000000..1d2185679 --- /dev/null +++ b/test/TEST-35-ISCSI-MULTI/server.link @@ -0,0 +1,6 @@ +[Match] +OriginalName=* + +[Link] +NamePolicy=mac +MACAddressPolicy=keep diff --git a/test/TEST-35-ISCSI-MULTI/test.sh b/test/TEST-35-ISCSI-MULTI/test.sh index b283d63ef..e1e342ee3 100755 --- a/test/TEST-35-ISCSI-MULTI/test.sh +++ b/test/TEST-35-ISCSI-MULTI/test.sh @@ -163,9 +163,6 @@ test_setup() { cd "$initdir" || exit mkdir -p -- dev sys proc etc var/run tmp mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done mkdir -p -- var/lib/nfs/rpc_pipefs ) inst_multiple sh shutdown poweroff stty cat ps ln ip \ @@ -228,9 +225,6 @@ test_setup() { grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/marker.img || return 1 rm -- "$TESTDIR"/marker.img - # Make server root - echo "MAKE SERVER ROOT" - # shellcheck disable=SC2031 export kernel=$KVERSION rm -rf -- "$TESTDIR"/overlay @@ -247,29 +241,39 @@ test_setup() { ) inst /etc/passwd /etc/passwd inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ - dmesg mkdir cp ping \ - modprobe tcpdump setsid \ - /etc/services sleep mount chmod pidof + dmesg mkdir cp ping modprobe tcpdump setsid \ + sleep mount chmod pidof inst_multiple tgtd tgtadm for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do [ -f ${_terminfodir}/l/linux ] && break done inst_multiple -o ${_terminfodir}/l/linux - instmods iscsi_tcp crc32c ipv6 + instmods iscsi_tcp crc32c ipv6 af_packet [ -f /etc/netconfig ] && inst_multiple /etc/netconfig type -P dhcpd > /dev/null && inst_multiple dhcpd [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd - inst_simple /etc/os-release inst ./server-init.sh /sbin/init inst ./hosts /etc/hosts inst ./dhcpd.conf /etc/dhcpd.conf - inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols - inst /etc/group /etc/group + inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc \ + {,/usr}/etc/protocols {,/usr}/etc/services \ + /etc/group /etc/os-release + + _nsslibs=$( + cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \ + | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \ + | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|' + ) + _nsslibs=${_nsslibs#|} + _nsslibs=${_nsslibs%|} + + inst_libdir_file -n "$_nsslibs" 'libnss_*.so*' cp -a /etc/ld.so.conf* "$initdir"/etc ldconfig -r "$initdir" dracut_kernel_post ) + # second, install the files needed to make the root filesystem ( # shellcheck disable=SC2031 @@ -312,29 +316,38 @@ test_setup() { # Make an overlay with needed tools for the test harness ( # shellcheck disable=SC2031 + # shellcheck disable=SC2030 export initdir=$TESTDIR/overlay # shellcheck disable=SC1090 . "$basedir"/dracut-init.sh inst_multiple poweroff shutdown inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh + inst_simple ./client.link /etc/systemd/network/01-client.link ) - - # Make server's dracut image - "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ - -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules" \ - -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \ - --no-hostonly-cmdline -N \ - -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 - # Make client's dracut image "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ -o "dash plymouth dmraid nfs ${OMIT_NETWORK}" \ -a "debug ${USE_NETWORK}" \ - -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod" \ --no-hostonly-cmdline -N \ -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1 + ( + # shellcheck disable=SC2031 + export initdir="$TESTDIR"/overlay + # shellcheck disable=SC1090 + . "$basedir"/dracut-init.sh + rm "$initdir"/etc/systemd/network/01-client.link + inst_simple ./server.link /etc/systemd/network/01-server.link + inst_hook pre-mount 99 ./wait-if-server.sh + ) + # Make server's dracut image + "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ + -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules network network-legacy" \ + -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \ + --no-hostonly-cmdline -N \ + -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 + rm -rf -- "$TESTDIR"/overlay } diff --git a/test/TEST-35-ISCSI-MULTI/wait-if-server.sh b/test/TEST-35-ISCSI-MULTI/wait-if-server.sh new file mode 100644 index 000000000..b53e41fe6 --- /dev/null +++ b/test/TEST-35-ISCSI-MULTI/wait-if-server.sh @@ -0,0 +1,4 @@ +#!/bin/sh +. /lib/net-lib.sh +wait_for_if_link enx525400123456 +wait_for_if_link enx525400123457 diff --git a/test/TEST-40-NBD/client-init.sh b/test/TEST-40-NBD/client-init.sh index f250626f8..c5c57a2d2 100755 --- a/test/TEST-40-NBD/client-init.sh +++ b/test/TEST-40-NBD/client-init.sh @@ -2,7 +2,7 @@ : > /dev/watchdog . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 diff --git a/test/TEST-40-NBD/client.link b/test/TEST-40-NBD/client.link new file mode 100644 index 000000000..b992bfd20 --- /dev/null +++ b/test/TEST-40-NBD/client.link @@ -0,0 +1,6 @@ +[Match] +OriginalName=* + +[Link] +NamePolicy=keep kernel database onboard slot path +MACAddressPolicy=keep diff --git a/test/TEST-40-NBD/create-encrypted-root.sh b/test/TEST-40-NBD/create-encrypted-root.sh index 8b60ccd7a..f56ec4798 100755 --- a/test/TEST-40-NBD/create-encrypted-root.sh +++ b/test/TEST-40-NBD/create-encrypted-root.sh @@ -20,6 +20,7 @@ lvm pvcreate -ff -y /dev/mapper/dracut_crypt_test lvm vgcreate dracut /dev/mapper/dracut_crypt_test lvm lvcreate -l 100%FREE -n root dracut lvm vgchange -ay +udevadm settle mkfs.ext3 -L dracut -j /dev/dracut/root mkdir -p /sysroot mount /dev/dracut/root /sysroot diff --git a/test/TEST-40-NBD/server-init.sh b/test/TEST-40-NBD/server-init.sh index 7866f659e..729d6a804 100755 --- a/test/TEST-40-NBD/server-init.sh +++ b/test/TEST-40-NBD/server-init.sh @@ -1,7 +1,7 @@ #!/bin/sh exec < /dev/console > /dev/console 2>&1 set -x -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin export TERM=linux export PS1='nbdtest-server:\w\$ ' stty sane @@ -50,9 +50,9 @@ linkup() { ip addr add 127.0.0.1/8 dev lo ip link set lo up -wait_for_if_link enp0s1 -ip addr add 192.168.50.1/24 dev enp0s1 -linkup enp0s1 +wait_for_if_link enx525400123456 +ip addr add 192.168.50.1/24 dev enx525400123456 +linkup enx525400123456 modprobe af_packet nbd-server @@ -60,9 +60,9 @@ nbd-server chmod 777 /var/lib/dhcpd/dhcpd.leases dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases & echo "Serving NBD disks" -while :; do - [ -n "$(jobs -rp)" ] && echo > /dev/watchdog - sleep 10 +while pidof nbd-server && pidof dhcpd; do + echo > /dev/watchdog + sleep 1 done mount -n -o remount,ro / poweroff -f diff --git a/test/TEST-40-NBD/server.link b/test/TEST-40-NBD/server.link new file mode 100644 index 000000000..1d2185679 --- /dev/null +++ b/test/TEST-40-NBD/server.link @@ -0,0 +1,6 @@ +[Match] +OriginalName=* + +[Link] +NamePolicy=mac +MACAddressPolicy=keep diff --git a/test/TEST-40-NBD/test.sh b/test/TEST-40-NBD/test.sh index a650691f7..b54f37621 100755 --- a/test/TEST-40-NBD/test.sh +++ b/test/TEST-40-NBD/test.sh @@ -14,11 +14,12 @@ TEST_DESCRIPTION="root filesystem on NBD with $USE_NETWORK" KVERSION=${KVERSION-$(uname -r)} # Uncomment this to debug failures +# DEBUGFAIL="rd.debug systemd.log_target=console loglevel=7" #DEBUGFAIL="rd.shell rd.break rd.debug systemd.log_target=console loglevel=7 systemd.log_level=debug" #SERIAL="tcp:127.0.0.1:9999" test_check() { - if ! type -p nbd-server 2> /dev/null; then + if ! type -p nbd-server &> /dev/null; then echo "Test needs nbd-server... Skipping" return 1 fi @@ -208,10 +209,6 @@ make_encrypted_root() { ( cd "$initdir" || exit mkdir -p dev sys proc etc run var/run tmp - mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done ) inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ @@ -242,10 +239,7 @@ make_encrypted_root() { . "$basedir"/dracut-init.sh ( cd "$initdir" || exit - mkdir -p dev sys proc etc tmp var run root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done + mkdir -p dev sys proc etc tmp var run root ln -s ../run var/run ) inst_multiple mkfs.ext3 poweroff cp umount dd sync @@ -296,10 +290,6 @@ make_client_root() { ( cd "$initdir" || exit mkdir -p dev sys proc etc run var/run tmp - mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done ) inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ dmesg mkdir cp ping dd mount sync @@ -315,7 +305,7 @@ make_client_root() { inst ./client-init.sh /sbin/init inst_simple /etc/os-release - inst /etc/nsswitch.conf /etc/nsswitch.conf + inst_multiple -o {,/usr}/etc/nsswitch.conf inst /etc/passwd /etc/passwd inst /etc/group /etc/group for i in /usr/lib*/libnss_files* /lib*/libnss_files*; do @@ -395,28 +385,34 @@ bs = 4096 EOF inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ dmesg mkdir cp ping grep \ - sleep nbd-server chmod modprobe vi + sleep nbd-server chmod modprobe vi pidof for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do [ -f ${_terminfodir}/l/linux ] && break done inst_multiple -o ${_terminfodir}/l/linux - instmods af_packet + instmods nfsd sunrpc ipv6 lockd af_packet 8021q ipvlan macvlan type -P dhcpd > /dev/null && inst_multiple dhcpd [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd inst ./server-init.sh /sbin/init inst_simple /etc/os-release inst ./hosts /etc/hosts inst ./dhcpd.conf /etc/dhcpd.conf - inst /etc/nsswitch.conf /etc/nsswitch.conf + inst_multiple -o {,/usr}/etc/nsswitch.conf inst /etc/passwd /etc/passwd inst /etc/group /etc/group - for i in /usr/lib*/libnss_files* /lib*/libnss_files*; do - [ -e "$i" ] || continue - inst "$i" - done + _nsslibs=$( + cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \ + | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \ + | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|' + ) + _nsslibs=${_nsslibs#|} + _nsslibs=${_nsslibs%|} + + inst_libdir_file -n "$_nsslibs" 'libnss_*.so*' cp -a /etc/ld.so.conf* "$initdir"/etc ldconfig -r "$initdir" + dracut_kernel_post ) # second, install the files needed to make the root filesystem @@ -467,6 +463,7 @@ test_setup() { # Make the test image ( # shellcheck disable=SC2031 + # shellcheck disable=SC2030 export initdir=$TESTDIR/overlay # shellcheck disable=SC1090 . "$basedir"/dracut-init.sh @@ -483,20 +480,31 @@ test_setup() { mkdir -p "$initdir"/etc echo "luks-$ID_FS_UUID /dev/nbd0 /etc/key" > "$initdir"/etc/crypttab echo -n test > "$initdir"/etc/key + inst_simple ./client.link /etc/systemd/network/01-client.link ) - "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ - -a "udev-rules base rootfs-block fs-lib debug kernel-modules" \ - -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \ - --no-hostonly-cmdline -N \ - -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 - "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ -o "plymouth dash iscsi nfs ${OMIT_NETWORK}" \ -a "debug watchdog ${USE_NETWORK}" \ - -d "af_packet piix ide-gd_mod ata_piix ext3 ext3 sd_mod e1000 i6300esb ib700wdt" \ --no-hostonly-cmdline -N \ -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1 + + ( + # shellcheck disable=SC2031 + export initdir="$TESTDIR"/overlay + # shellcheck disable=SC1090 + . "$basedir"/dracut-init.sh + rm "$initdir"/etc/systemd/network/01-client.link + inst_simple ./server.link /etc/systemd/network/01-server.link + inst_hook pre-mount 99 ./wait-if-server.sh + ) + "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ + -a "udev-rules base rootfs-block fs-lib debug kernel-modules network network-legacy" \ + -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \ + --no-hostonly-cmdline -N \ + -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 + + rm -rf -- "$TESTDIR"/overlay } kill_server() { diff --git a/test/TEST-40-NBD/wait-if-server.sh b/test/TEST-40-NBD/wait-if-server.sh new file mode 100644 index 000000000..8ae21f8ae --- /dev/null +++ b/test/TEST-40-NBD/wait-if-server.sh @@ -0,0 +1,3 @@ +#!/bin/sh +. /lib/net-lib.sh +wait_for_if_link enx525400123456 diff --git a/test/TEST-50-MULTINIC/client-init.sh b/test/TEST-50-MULTINIC/client-init.sh index 854c30d47..175a9d8a5 100755 --- a/test/TEST-50-MULTINIC/client-init.sh +++ b/test/TEST-50-MULTINIC/client-init.sh @@ -1,7 +1,7 @@ #!/bin/sh . /lib/dracut-lib.sh -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 @@ -9,6 +9,9 @@ export TERM=linux export PS1='initramfs-test:\w\$ ' stty sane echo "made it to the rootfs! Powering down." + +set -x + for i in /sys/class/net/*; do # booting with network-manager module state=/run/NetworkManager/devices/$(cat "$i"/ifindex) @@ -17,6 +20,7 @@ for i in /sys/class/net/*; do ip link show "$i" | grep -q master && continue IFACES="${IFACES}${i} " done + for i in /run/initramfs/net.*.did-setup; do # booting with network-legacy module [ -f "$i" ] || continue diff --git a/test/TEST-50-MULTINIC/client.link b/test/TEST-50-MULTINIC/client.link new file mode 100644 index 000000000..b992bfd20 --- /dev/null +++ b/test/TEST-50-MULTINIC/client.link @@ -0,0 +1,6 @@ +[Match] +OriginalName=* + +[Link] +NamePolicy=keep kernel database onboard slot path +MACAddressPolicy=keep diff --git a/test/TEST-50-MULTINIC/create-root.sh b/test/TEST-50-MULTINIC/create-root.sh index e012a13e3..7948b79ee 100755 --- a/test/TEST-50-MULTINIC/create-root.sh +++ b/test/TEST-50-MULTINIC/create-root.sh @@ -8,9 +8,10 @@ for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do done rm -f -- /etc/lvm/lvm.conf udevadm control --reload -set -e - udevadm settle + +set -ex + mkfs.ext3 -L dracut /dev/disk/by-id/ata-disk_root mkdir -p /root mount /dev/disk/by-id/ata-disk_root /root @@ -18,4 +19,5 @@ cp -a -t /root /source/* mkdir -p /root/run umount /root echo "dracut-root-block-created" | dd oflag=direct,dsync of=/dev/disk/by-id/ata-disk_marker +sync poweroff -f diff --git a/test/TEST-50-MULTINIC/server-init.sh b/test/TEST-50-MULTINIC/server-init.sh index a62ba5187..0808d8d76 100755 --- a/test/TEST-50-MULTINIC/server-init.sh +++ b/test/TEST-50-MULTINIC/server-init.sh @@ -1,10 +1,10 @@ #!/bin/sh exec < /dev/console > /dev/console 2>&1 set -x -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin export TERM=linux export PS1='nfstest-server:\w\$ ' -echo : > /dev/watchdog +: > /dev/watchdog stty sane echo "made it to the rootfs!" echo server > /proc/sys/kernel/hostname @@ -48,14 +48,12 @@ linkup() { wait_for_if_link "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null } -wait_for_if_link enp0s1 +wait_for_if_link enx525401123456 -: > /dev/watchdog ip addr add 127.0.0.1/8 dev lo -linkup lo - -ip addr add 192.168.50.1/24 dev enp0s1 -linkup enp0s1 +ip link set lo up +ip addr add 192.168.50.1/24 dev enx525401123456 +linkup enx525401123456 : > /dev/watchdog modprobe af_packet @@ -79,20 +77,21 @@ rpc.nfsd : > /dev/watchdog rpc.mountd : > /dev/watchdog -rpc.idmapd -S +rpc.idmapd : > /dev/watchdog exportfs -r : > /dev/watchdog - +mkdir -p /var/lib/dhcpd : > /var/lib/dhcpd/dhcpd.leases - : > /dev/watchdog chmod 777 /var/lib/dhcpd/dhcpd.leases : > /dev/watchdog +rm -f /var/run/dhcpd.pid dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases & +exportfs -s echo "Serving NFS mounts" while :; do - [ -n "$(jobs -rp)" ] && echo : > /dev/watchdog + [ -n "$(jobs -rp)" ] && : > /dev/watchdog sleep 10 done mount -n -o remount,ro / diff --git a/test/TEST-50-MULTINIC/server.link b/test/TEST-50-MULTINIC/server.link new file mode 100644 index 000000000..1d2185679 --- /dev/null +++ b/test/TEST-50-MULTINIC/server.link @@ -0,0 +1,6 @@ +[Match] +OriginalName=* + +[Link] +NamePolicy=mac +MACAddressPolicy=keep diff --git a/test/TEST-50-MULTINIC/test.sh b/test/TEST-50-MULTINIC/test.sh index 81603379c..66cc23986 100755 --- a/test/TEST-50-MULTINIC/test.sh +++ b/test/TEST-50-MULTINIC/test.sh @@ -14,7 +14,7 @@ TEST_DESCRIPTION="root filesystem on NFS with multiple nics with $USE_NETWORK" KVERSION=${KVERSION-$(uname -r)} # Uncomment this to debug failures -#DEBUGFAIL="rd.shell rd.break" +#DEBUGFAIL="loglevel=7 rd.shell rd.break" #SERIAL="tcp:127.0.0.1:9999" run_server() { @@ -32,7 +32,7 @@ run_server() { -net nic,macaddr=52:54:01:12:34:56,model=e1000 \ -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \ -watchdog i6300esb -watchdog-action poweroff \ - -append "panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot loglevel=7 root=LABEL=dracut rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0" \ + -append "panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot root=LABEL=dracut rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0" \ -initrd "$TESTDIR"/initramfs.server \ -pidfile "$TESTDIR"/server.pid -daemonize || return 1 @@ -70,6 +70,10 @@ client_test() { declare -i disk_index=0 qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker + if dhclient --help 2>&1 | grep -q -F -- '--timeout' 2> /dev/null; then + cmdline="$cmdline rd.net.timeout.dhcp=3" + fi + # Invoke KVM and/or QEMU to actually create the target filesystem. "$testdir"/run-qemu \ "${disk_args[@]}" \ @@ -82,7 +86,7 @@ client_test() { -device e1000,netdev=n1,mac=52:54:00:12:34:98 \ -device e1000,netdev=n2,mac=52:54:00:12:34:99 \ -watchdog i6300esb -watchdog-action poweroff \ - -append "quiet rd.net.timeout.dhcp=3 panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot rd.shell=0 $cmdline $DEBUGFAIL rd.retry=5 ro console=ttyS0,115200n81 selinux=0 init=/sbin/init rd.debug systemd.log_target=console" \ + -append "quiet panic=1 hung_task_panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot rd.shell=0 $cmdline $DEBUGFAIL rd.retry=5 ro console=ttyS0,115200n81 selinux=0 init=/sbin/init rd.debug systemd.log_target=console" \ -initrd "$TESTDIR"/initramfs.testing || return 1 { @@ -180,7 +184,9 @@ test_client() { } test_setup() { - kernel=$KVERSION + export kernel=$KVERSION + export srcmods="/lib/modules/$kernel/" + rm -rf -- "$TESTDIR"/overlay ( mkdir -p "$TESTDIR"/overlay/source # shellcheck disable=SC2030 @@ -190,61 +196,53 @@ test_setup() { ( cd "$initdir" || exit - mkdir -p -- dev sys proc run var/run etc tmp var/lib/{dhcpd,rpcbind} - mkdir -p -- var/lib/nfs/{v4recovery,rpc_pipefs} - chmod 777 -- var/lib/rpcbind var/lib/nfs + mkdir -p dev sys proc run etc var/run tmp var/lib/{dhcpd,rpcbind} + mkdir -p var/lib/nfs/{v4recovery,rpc_pipefs} + chmod 777 var/lib/rpcbind var/lib/nfs ) - for _f in modules.builtin.bin modules.builtin; do - [[ -f $srcmods/$_f ]] && break - done || { - dfatal "No modules.builtin.bin and modules.builtin found!" - return 1 - } - - for _f in modules.builtin.bin modules.builtin modules.order; do - [[ -f $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f" - done - inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ dmesg mkdir cp ping exportfs \ modprobe rpc.nfsd rpc.mountd showmount tcpdump \ - /etc/services sleep mount chmod + sleep mount chmod rm for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do - [ -f "${_terminfodir}"/l/linux ] && break + if [ -f "${_terminfodir}"/l/linux ]; then + inst_multiple -o "${_terminfodir}"/l/linux + break + fi done - inst_multiple -o "${_terminfodir}"/l/linux type -P portmap > /dev/null && inst_multiple portmap type -P rpcbind > /dev/null && inst_multiple rpcbind [ -f /etc/netconfig ] && inst_multiple /etc/netconfig type -P dhcpd > /dev/null && inst_multiple dhcpd [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd instmods nfsd sunrpc ipv6 lockd af_packet - inst_simple /etc/os-release inst ./server-init.sh /sbin/init + inst_simple /etc/os-release inst ./hosts /etc/hosts inst ./exports /etc/exports inst ./dhcpd.conf /etc/dhcpd.conf - inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols - + inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc \ + {,/usr}/etc/protocols {,/usr}/etc/services inst_multiple rpc.idmapd /etc/idmapd.conf inst_libdir_file 'libnfsidmap_nsswitch.so*' inst_libdir_file 'libnfsidmap/*.so*' inst_libdir_file 'libnfsidmap*.so*' - _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' /etc/nsswitch.conf \ - | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|') + _nsslibs=$( + cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \ + | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \ + | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|' + ) _nsslibs=${_nsslibs#|} _nsslibs=${_nsslibs%|} - inst_libdir_file -n "$_nsslibs" 'libnss_*.so*' - inst /etc/nsswitch.conf /etc/nsswitch.conf inst /etc/passwd /etc/passwd inst /etc/group /etc/group - cp -a -- /etc/ld.so.conf* "$initdir"/etc + cp -a /etc/ld.so.conf* "$initdir"/etc ldconfig -r "$initdir" dracut_kernel_post ) @@ -256,22 +254,20 @@ test_setup() { export initdir=$TESTDIR/overlay/source/nfs/client # shellcheck disable=SC1090 . "$basedir"/dracut-init.sh + ( cd "$initdir" || exit - mkdir -p dev sys proc etc run - mkdir -p var/lib/nfs/rpc_pipefs - mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin - for i in bin sbin lib lib64; do - ln -sfnr usr/$i $i - done + mkdir -p dev sys proc etc run root usr var/lib/nfs/rpc_pipefs ) - inst_multiple sh shutdown poweroff stty cat ps ln ip \ - mount dmesg mkdir cp ping grep ls dd sync + + inst_multiple sh shutdown poweroff stty cat ps ln ip dd \ + mount dmesg mkdir cp ping grep setsid ls vi less cat sync for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do - [[ -f ${_terminfodir}/l/linux ]] && break + if [ -f "${_terminfodir}"/l/linux ]; then + inst_multiple -o "${_terminfodir}"/l/linux + break + fi done - inst_multiple -o "${_terminfodir}"/l/linux - inst_simple /etc/os-release inst_simple "${basedir}/modules.d/99base/dracut-lib.sh" "/lib/dracut-lib.sh" inst_binary "${basedir}/dracut-util" "/usr/bin/dracut-util" @@ -279,23 +275,25 @@ test_setup() { ln -s dracut-util "${initdir}/usr/bin/dracut-getargs" inst ./client-init.sh /sbin/init - inst /etc/nsswitch.conf /etc/nsswitch.conf + inst_simple /etc/os-release + inst_multiple -o {,/usr}/etc/nsswitch.conf inst /etc/passwd /etc/passwd inst /etc/group /etc/group - inst_multiple rpc.idmapd /etc/idmapd.conf inst_libdir_file 'libnfsidmap_nsswitch.so*' inst_libdir_file 'libnfsidmap/*.so*' inst_libdir_file 'libnfsidmap*.so*' - _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' -- /etc/nsswitch.conf \ - | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|') + _nsslibs=$( + cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \ + | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \ + | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|' + ) _nsslibs=${_nsslibs#|} _nsslibs=${_nsslibs%|} - inst_libdir_file -n "$_nsslibs" 'libnss_*.so*' - cp -a -- /etc/ld.so.conf* "$initdir"/etc + cp -a /etc/ld.so.conf* "$initdir"/etc ldconfig -r "$initdir" ) @@ -320,7 +318,7 @@ test_setup() { --nomdadmconf \ --no-hostonly-cmdline -N \ -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 - rm -fr "$TESTDIR"/overlay + rm -rf -- "$TESTDIR"/overlay dd if=/dev/zero of="$TESTDIR"/server.img bs=1MiB count=120 dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1 @@ -340,31 +338,42 @@ test_setup() { # Make an overlay with needed tools for the test harness ( # shellcheck disable=SC2031 + # shellcheck disable=SC2030 export initdir="$TESTDIR"/overlay + mkdir -p "$TESTDIR"/overlay # shellcheck disable=SC1090 . "$basedir"/dracut-init.sh inst_multiple poweroff shutdown inst_hook shutdown-emergency 000 ./hard-off.sh inst_hook emergency 000 ./hard-off.sh - inst_simple ./99-default.link /etc/systemd/network/99-default.link + inst_simple ./client.link /etc/systemd/network/01-client.link + + inst_binary awk + inst_hook pre-pivot 85 "$basedir/modules.d/45ifcfg/write-ifcfg.sh" ) + # Make client's dracut image + "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ + -o "ifcfg plymouth dash ${OMIT_NETWORK}" \ + -a "debug watchdog ${USE_NETWORK}" \ + --no-hostonly-cmdline -N \ + -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1 + ( + # shellcheck disable=SC2031 + export initdir="$TESTDIR"/overlay + # shellcheck disable=SC1090 + . "$basedir"/dracut-init.sh + rm "$initdir"/etc/systemd/network/01-client.link + inst_simple ./server.link /etc/systemd/network/01-server.link + inst_hook pre-mount 99 ./wait-if-server.sh + ) # Make server's dracut image - "$basedir"/dracut.sh \ - -l -i "$TESTDIR"/overlay / \ - -m "dash udev-rules base rootfs-block fs-lib debug kernel-modules watchdog qemu" \ + "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ + -m "dash udev-rules base rootfs-block fs-lib debug kernel-modules watchdog qemu network network-legacy" \ -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod nfsv2 nfsv3 nfsv4 nfs_acl nfs_layout_nfsv41_files nfsd e1000 i6300esb ib700wdt" \ --no-hostonly-cmdline -N \ -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 - # Make client's dracut image - "$basedir"/dracut.sh \ - -l -i "$TESTDIR"/overlay / \ - -o "plymouth ${OMIT_NETWORK}" \ - -a "debug ${USE_NETWORK}" \ - -d "af_packet piix sd_mod sr_mod ata_piix ide-gd_mod e1000 nfsv2 nfsv3 nfsv4 nfs_acl nfs_layout_nfsv41_files sunrpc i6300esb ib700wdt" \ - --no-hostonly-cmdline -N \ - -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1 } kill_server() { diff --git a/test/TEST-50-MULTINIC/wait-if-server.sh b/test/TEST-50-MULTINIC/wait-if-server.sh new file mode 100644 index 000000000..cea725937 --- /dev/null +++ b/test/TEST-50-MULTINIC/wait-if-server.sh @@ -0,0 +1,3 @@ +#!/bin/sh +. /lib/net-lib.sh +wait_for_if_link enx525401123456 diff --git a/test/TEST-60-BONDBRIDGEVLANIFCFG/client-init.sh b/test/TEST-60-BONDBRIDGEVLANIFCFG/client-init.sh index c33b947a9..644308d13 100755 --- a/test/TEST-60-BONDBRIDGEVLANIFCFG/client-init.sh +++ b/test/TEST-60-BONDBRIDGEVLANIFCFG/client-init.sh @@ -1,6 +1,6 @@ #!/bin/sh exec > /dev/console 2>&1 -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin strstr() { [ "${1#*$2*}" != "$1" ]; } CMDLINE=$(while read -r line; do echo "$line"; done < /proc/cmdline) export TERM=linux diff --git a/test/TEST-60-BONDBRIDGEVLANIFCFG/client.link b/test/TEST-60-BONDBRIDGEVLANIFCFG/client.link new file mode 100644 index 000000000..b992bfd20 --- /dev/null +++ b/test/TEST-60-BONDBRIDGEVLANIFCFG/client.link @@ -0,0 +1,6 @@ +[Match] +OriginalName=* + +[Link] +NamePolicy=keep kernel database onboard slot path +MACAddressPolicy=keep diff --git a/test/TEST-60-BONDBRIDGEVLANIFCFG/server-init.sh b/test/TEST-60-BONDBRIDGEVLANIFCFG/server-init.sh index bc98b72f6..5e7e56ef6 100755 --- a/test/TEST-60-BONDBRIDGEVLANIFCFG/server-init.sh +++ b/test/TEST-60-BONDBRIDGEVLANIFCFG/server-init.sh @@ -1,7 +1,7 @@ #!/bin/sh exec < /dev/console > /dev/console 2>&1 set -x -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin export TERM=linux export PS1='nfstest-server:\w\$ ' stty sane diff --git a/test/TEST-60-BONDBRIDGEVLANIFCFG/server.link b/test/TEST-60-BONDBRIDGEVLANIFCFG/server.link new file mode 100644 index 000000000..1d2185679 --- /dev/null +++ b/test/TEST-60-BONDBRIDGEVLANIFCFG/server.link @@ -0,0 +1,6 @@ +[Match] +OriginalName=* + +[Link] +NamePolicy=mac +MACAddressPolicy=keep diff --git a/test/TEST-60-BONDBRIDGEVLANIFCFG/test.sh b/test/TEST-60-BONDBRIDGEVLANIFCFG/test.sh index 2a2afd736..27b98708f 100755 --- a/test/TEST-60-BONDBRIDGEVLANIFCFG/test.sh +++ b/test/TEST-60-BONDBRIDGEVLANIFCFG/test.sh @@ -211,6 +211,7 @@ test_setup() { dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120 kernel=$KVERSION + rm -rf -- "$TESTDIR"/overlay ( mkdir -p "$TESTDIR"/overlay/source # shellcheck disable=SC2030 @@ -255,7 +256,7 @@ test_setup() { inst ./hosts /etc/hosts inst ./exports /etc/exports inst ./dhcpd.conf /etc/dhcpd.conf - inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols + inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc {,/usr}/etc/protocols inst_multiple rpc.idmapd /etc/idmapd.conf @@ -263,14 +264,16 @@ test_setup() { inst_libdir_file 'libnfsidmap/*.so*' inst_libdir_file 'libnfsidmap*.so*' - _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' /etc/nsswitch.conf \ - | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|') + _nsslibs=$( + cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \ + | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \ + | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|' + ) _nsslibs=${_nsslibs#|} _nsslibs=${_nsslibs%|} inst_libdir_file -n "$_nsslibs" 'libnss_*.so*' - inst /etc/nsswitch.conf /etc/nsswitch.conf inst /etc/passwd /etc/passwd inst /etc/group /etc/group @@ -299,7 +302,7 @@ test_setup() { mkdir -p -- dev sys proc etc run mkdir -p -- var/lib/nfs/rpc_pipefs ) - inst /etc/nsswitch.conf /etc/nsswitch.conf + inst_multiple -o {,/usr}/etc/nsswitch.conf {,/usr}/etc/rpc {,/usr}/etc/protocols inst /etc/passwd /etc/passwd inst /etc/group /etc/group @@ -308,8 +311,11 @@ test_setup() { inst_libdir_file 'libnfsidmap/*.so*' inst_libdir_file 'libnfsidmap*.so*' - _nsslibs=$(sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' -- /etc/nsswitch.conf \ - | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|') + _nsslibs=$( + cat "$dracutsysrootdir"/{,usr/}etc/nsswitch.conf 2> /dev/null \ + | sed -e '/^#/d' -e 's/^.*://' -e 's/\[NOTFOUND=return\]//' \ + | tr -s '[:space:]' '\n' | sort -u | tr -s '[:space:]' '|' + ) _nsslibs=${_nsslibs#|} _nsslibs=${_nsslibs%|} @@ -358,13 +364,13 @@ test_setup() { . "$basedir"/dracut-init.sh inst_multiple poweroff shutdown inst_hook emergency 000 ./hard-off.sh + inst_simple ./client.link /etc/systemd/network/01-client.link ) # Make client's dracut image "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \ --no-early-microcode \ -o "plymouth ${OMIT_NETWORK}" \ -a "debug ${USE_NETWORK}" \ - -d "ipvlan macvlan af_packet piix sd_mod sr_mod ata_piix ide-gd_mod virtio-net nfsv2 nfsv3 nfsv4 nfs_acl nfs_layout_nfsv41_files sunrpc i6300esb ib700wdt" \ --no-hostonly-cmdline -N \ -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1 @@ -373,7 +379,7 @@ test_setup() { export initdir="$TESTDIR"/overlay # shellcheck disable=SC1090 . "$basedir"/dracut-init.sh - inst_simple ./99-default.link /etc/systemd/network/99-default.link + inst_simple ./server.link /etc/systemd/network/01-server.link inst_hook pre-mount 99 ./wait-if-server.sh ) # Make server's dracut image diff --git a/test/run-qemu b/test/run-qemu index f9892bac2..3c521a141 100755 --- a/test/run-qemu +++ b/test/run-qemu @@ -2,7 +2,7 @@ # Check which virtualization technology to use # We prefer kvm, kqemu, userspace in that order. -export PATH=/sbin:/bin:/usr/sbin:/usr/bin +export PATH=/usr/sbin:/usr/bin:/sbin:/bin [[ -x /usr/bin/qemu ]] && BIN=/usr/bin/qemu && ARGS=(-cpu max) (lsmod | grep -q '^kqemu ') && BIN=/usr/bin/qemu && ARGS=(-kernel-kqemu -cpu host) diff --git a/test/test-functions b/test/test-functions index c77075321..f2896a914 100644 --- a/test/test-functions +++ b/test/test-functions @@ -1,5 +1,5 @@ #!/bin/bash -PATH=/sbin:/bin:/usr/sbin:/usr/bin +PATH=/usr/sbin:/usr/bin:/sbin:/bin export PATH # shellcheck disable=SC1090