From 1c6dd0ddfd43c7eca32389fea0c2744ec9710ec5 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Tue, 30 Mar 2021 12:17:46 +0200 Subject: [PATCH] fix(TEST NFS): shellcheck --- test/TEST-20-NFS/.shchkdir | 0 test/TEST-20-NFS/client-init.sh | 118 +++------------------------ test/TEST-20-NFS/create-root.sh | 2 +- test/TEST-20-NFS/server-init.sh | 10 +-- test/TEST-20-NFS/test.sh | 139 ++++++++++++++++++-------------- 5 files changed, 93 insertions(+), 176 deletions(-) create mode 100644 test/TEST-20-NFS/.shchkdir diff --git a/test/TEST-20-NFS/.shchkdir b/test/TEST-20-NFS/.shchkdir new file mode 100644 index 00000000..e69de29b diff --git a/test/TEST-20-NFS/client-init.sh b/test/TEST-20-NFS/client-init.sh index 8062d534..4dec9374 100755 --- a/test/TEST-20-NFS/client-init.sh +++ b/test/TEST-20-NFS/client-init.sh @@ -1,116 +1,13 @@ #!/bin/sh -getcmdline() { - while read -r _line || [ -n "$_line" ]; do - printf "%s" "$_line" - done < /proc/cmdline -} +: > /dev/watchdog +. /lib/dracut-lib.sh -_dogetarg() { - local _o _val _doecho - unset _val - unset _o - unset _doecho - CMDLINE=$(getcmdline) - - for _o in $CMDLINE; do - if [ "${_o%%=*}" = "${1%%=*}" ]; then - if [ -n "${1#*=}" -a "${1#*=*}" != "${1}" ]; then - # if $1 has a "=", we want the exact match - if [ "$_o" = "$1" ]; then - _val="1" - unset _doecho - fi - continue - fi - - if [ "${_o#*=}" = "$_o" ]; then - # if cmdline argument has no "=", we assume "=1" - _val="1" - unset _doecho - continue - fi - - _val="${_o#*=}" - _doecho=1 - fi - done - if [ -n "$_val" ]; then - [ "x$_doecho" != "x" ] && echo "$_val" - return 0 - fi - return 1 -} - -getarg() { - local _deprecated _newoption - while [ $# -gt 0 ]; do - case $1 in - -d) - _deprecated=1 - shift - ;; - -y) - if _dogetarg $2 > /dev/null; then - if [ "$_deprecated" = "1" ]; then - [ -n "$_newoption" ] && warn "Kernel command line option '$2' is deprecated, use '$_newoption' instead." || warn "Option '$2' is deprecated." - fi - echo 1 - return 0 - fi - _deprecated=0 - shift 2 - ;; - -n) - if _dogetarg $2 > /dev/null; then - echo 0 - if [ "$_deprecated" = "1" ]; then - [ -n "$_newoption" ] && warn "Kernel command line option '$2' is deprecated, use '$_newoption=0' instead." || warn "Option '$2' is deprecated." - fi - return 1 - fi - _deprecated=0 - shift 2 - ;; - *) - if [ -z "$_newoption" ]; then - _newoption="$1" - fi - if _dogetarg $1; then - if [ "$_deprecated" = "1" ]; then - [ -n "$_newoption" ] && warn "Kernel command line option '$1' is deprecated, use '$_newoption' instead." || warn "Option '$1' is deprecated." - fi - return 0 - fi - _deprecated=0 - shift - ;; - esac - done - return 1 -} - -getargbool() { - local _b - unset _b - local _default - _default="$1" - shift - _b=$(getarg "$@") - [ $? -ne 0 -a -z "$_b" ] && _b="$_default" - if [ -n "$_b" ]; then - [ $_b = "0" ] && return 1 - [ $_b = "no" ] && return 1 - [ $_b = "off" ] && return 1 - fi - return 0 -} export PATH=/sbin:/bin:/usr/sbin:/usr/bin +command -v plymouth > /dev/null 2>&1 && plymouth --quit exec > /dev/console 2>&1 + export TERM=linux export PS1='initramfs-test:\w\$ ' -CMDLINE=$(while read line || [ -n "$line" ]; do echo $line; done < /proc/cmdline) -strstr() { [ "${1##*"$2"*}" != "$1" ]; } - stty sane if getargbool 0 rd.shell; then [ -c /dev/watchdog ] && printf 'V' > /dev/watchdog @@ -120,10 +17,13 @@ fi echo "made it to the rootfs! Powering down." -while read dev fs fstype opts rest || [ -n "$dev" ]; do +while read -r dev _ fstype opts rest || [ -n "$dev" ]; do [ "$fstype" != "nfs" -a "$fstype" != "nfs4" ] && continue echo "nfs-OK $dev $fstype $opts" | dd oflag=direct,dsync of=/dev/sda break done < /proc/mounts -> /dev/watchdog + +: > /dev/watchdog + +sync poweroff -f diff --git a/test/TEST-20-NFS/create-root.sh b/test/TEST-20-NFS/create-root.sh index 3366d2f8..8f33cb6f 100755 --- a/test/TEST-20-NFS/create-root.sh +++ b/test/TEST-20-NFS/create-root.sh @@ -1,7 +1,7 @@ #!/bin/sh # don't let udev and this script step on eachother's toes for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do - > "/etc/udev/rules.d/$x" + : > "/etc/udev/rules.d/$x" done rm -f -- /etc/lvm/lvm.conf udevadm control --reload diff --git a/test/TEST-20-NFS/server-init.sh b/test/TEST-20-NFS/server-init.sh index 93555cda..ba2bdd23 100755 --- a/test/TEST-20-NFS/server-init.sh +++ b/test/TEST-20-NFS/server-init.sh @@ -13,10 +13,10 @@ wait_for_if_link() { local cnt=0 local li while [ $cnt -lt 600 ]; do - li=$(ip -o link show dev $1 2> /dev/null) + li=$(ip -o link show dev "$1" 2> /dev/null) [ -n "$li" ] && return 0 if [[ $2 ]]; then - li=$(ip -o link show dev $2 2> /dev/null) + li=$(ip -o link show dev "$2" 2> /dev/null) [ -n "$li" ] && return 0 fi sleep 0.1 @@ -29,7 +29,7 @@ wait_for_if_up() { local cnt=0 local li while [ $cnt -lt 200 ]; do - li=$(ip -o link show up dev $1) + li=$(ip -o link show up dev "$1") [ -n "$li" ] && return 0 sleep 0.1 cnt=$((cnt + 1)) @@ -49,7 +49,7 @@ wait_for_route_ok() { } 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 "$1" 2> /dev/null && ip link set "$1" up 2> /dev/null && wait_for_if_up "$1" 2> /dev/null } wait_for_if_link eth0 ens2 @@ -95,7 +95,7 @@ echo > /dev/watchdog exportfs -r echo > /dev/watchdog mkdir -p /var/lib/dhcpd -> /var/lib/dhcpd/dhcpd.leases +: > /var/lib/dhcpd/dhcpd.leases echo > /dev/watchdog chmod 777 /var/lib/dhcpd/dhcpd.leases echo > /dev/watchdog diff --git a/test/TEST-20-NFS/test.sh b/test/TEST-20-NFS/test.sh index 2f6206ea..950f184b 100755 --- a/test/TEST-20-NFS/test.sh +++ b/test/TEST-20-NFS/test.sh @@ -8,39 +8,37 @@ else OMIT_NETWORK="network-manager" fi +# shellcheck disable=SC2034 TEST_DESCRIPTION="root filesystem on NFS with $USE_NETWORK" KVERSION=${KVERSION-$(uname -r)} # Uncomment this to debug failures -DEBUGFAIL="loglevel=1" +#DEBUGFAIL="loglevel=1" #DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " -#DEBUGFAIL="rd.debug loglevel=7 " +#DEBUGFAIL="rd.debug loglevel=7 rd.break=initqueue rd.shell" #SERVER_DEBUG="rd.debug loglevel=7" -#SERIAL="tcp:127.0.0.1:9999" +#SERIAL="unix:/tmp/server.sock" run_server() { # Start server first echo "NFS TEST SETUP: Starting DHCP/NFS server" - - $testdir/run-qemu \ - -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \ + "$testdir"/run-qemu \ + -drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ -net socket,listen=127.0.0.1:12320 \ -net nic,macaddr=52:54:00:12:34:56,model=e1000 \ - ${SERIAL:+-serial "$SERIAL"} \ - ${SERIAL:--serial file:"$TESTDIR"/server.log} \ + -serial "${SERIAL:-"file:$TESTDIR/server.log"}" \ -watchdog i6300esb -watchdog-action poweroff \ - -append "panic=1 quiet root=LABEL=dracut rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0" \ - -initrd $TESTDIR/initramfs.server \ - -pidfile $TESTDIR/server.pid -daemonize || return 1 - chmod 644 $TESTDIR/server.pid || return 1 + -append "panic=1 quiet 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 # Cleanup the terminal if we have one tty -s && stty sane if ! [[ $SERIAL ]]; then - while :; do - grep Serving "$TESTDIR"/server.log && break + while ! grep -q Serving "$TESTDIR"/server.log; do echo "Waiting for the server to startup" sleep 1 done @@ -61,26 +59,27 @@ client_test() { echo "CLIENT TEST START: $test_name" # Need this so kvm-qemu will boot (needs non-/dev/zero local disk) - if ! dd if=/dev/zero of=$TESTDIR/client.img bs=1M count=1 &> /dev/null; then + if ! dd if=/dev/zero of="$TESTDIR"/client.img bs=1M count=1 &> /dev/null; then echo "Unable to make client sda image" 1>&2 return 1 fi - $testdir/run-qemu \ - -drive format=raw,index=0,media=disk,file=$TESTDIR/client.img \ - -net nic,macaddr=$mac,model=e1000 \ + "$testdir"/run-qemu \ + -drive format=raw,index=0,media=disk,file="$TESTDIR"/client.img \ + -net nic,macaddr="$mac",model=e1000 \ -net socket,connect=127.0.0.1:12320 \ -watchdog i6300esb -watchdog-action poweroff \ -append "rd.net.timeout.dhcp=3 panic=1 systemd.crash_reboot rd.shell=0 $cmdline $DEBUGFAIL rd.retry=10 quiet ro console=ttyS0,115200n81 selinux=0" \ - -initrd $TESTDIR/initramfs.testing + -initrd "$TESTDIR"/initramfs.testing - if [[ $? -ne 0 ]] || ! grep -U --binary-files=binary -F -m 1 -q nfs-OK $TESTDIR/client.img; then + # shellcheck disable=SC2181 + if [[ $? -ne 0 ]] || ! grep -U --binary-files=binary -F -m 1 -q nfs-OK "$TESTDIR"/client.img; then echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" return 1 fi # nfsinfo=( server:/path nfs{,4} options ) - nfsinfo=($(awk '{print $2, $3, $4; exit}' $TESTDIR/client.img)) + read -r -a nfsinfo < <(awk '{print $2, $3, $4; exit}' "$TESTDIR"/client.img) if [[ ${nfsinfo[0]%%:*} != "$server" ]]; then echo "CLIENT TEST INFO: got server: ${nfsinfo[0]%%:*}" @@ -98,7 +97,7 @@ client_test() { opts=${nfsinfo[2]}, while [[ $opts ]]; do - if [[ ${opts%%,*} == $check_opt ]]; then + if [[ ${opts%%,*} == "$check_opt" ]]; then found=1 break fi @@ -200,8 +199,8 @@ test_nfsv4() { test_run() { if [[ -s server.pid ]]; then - kill -TERM $(cat $TESTDIR/server.pid) - rm -f -- $TESTDIR/server.pid + kill -TERM "$(cat "$TESTDIR"/server.pid)" + rm -f -- "$TESTDIR"/server.pid fi if ! run_server; then @@ -215,8 +214,8 @@ test_run() { ret=$? if [[ -s $TESTDIR/server.pid ]]; then - kill -TERM $(cat $TESTDIR/server.pid) - rm -f -- $TESTDIR/server.pid + kill -TERM "$(cat "$TESTDIR"/server.pid)" + rm -f -- "$TESTDIR"/server.pid fi return $ret @@ -224,26 +223,28 @@ test_run() { test_setup() { # Make server root - dd if=/dev/zero of=$TESTDIR/server.ext3 bs=1M count=120 + dd if=/dev/zero of="$TESTDIR"/server.ext3 bs=1M count=120 export kernel=$KVERSION export srcmods="/lib/modules/$kernel/" # Detect lib paths ( - mkdir -p $TESTDIR/server/overlay/source + mkdir -p "$TESTDIR"/server/overlay/source + # shellcheck disable=SC2030 export initdir=$TESTDIR/server/overlay/source - . $basedir/dracut-init.sh + # shellcheck disable=SC1090 + . "$basedir"/dracut-init.sh for _f in modules.builtin.bin modules.builtin; do - [[ $srcmods/$_f ]] && break + [[ -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 - [[ $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f" + [[ -f $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f" done inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ @@ -280,7 +281,7 @@ test_setup() { inst_libdir_file -n "$_nsslibs" 'libnss_*.so*' ( - cd "$initdir" + 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 @@ -290,7 +291,7 @@ test_setup() { 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 @@ -298,19 +299,14 @@ test_setup() { # Make client root inside server root ( + # shellcheck disable=SC2030 + # shellcheck disable=SC2031 export initdir=$TESTDIR/server/overlay/source/nfs/client - . $basedir/dracut-init.sh + # shellcheck disable=SC1090 + . "$basedir"/dracut-init.sh - inst_multiple sh shutdown poweroff stty cat ps ln ip dd \ - mount dmesg mkdir cp ping grep setsid ls vi /etc/virc less cat - for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do - [ -f ${_terminfodir}/l/linux ] && break - done - inst_multiple -o ${_terminfodir}/l/linux - inst ./client-init.sh /sbin/init - inst_simple /etc/os-release ( - cd "$initdir" + 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 @@ -318,6 +314,21 @@ test_setup() { ln -sfnr usr/$i $i done ) + + inst_multiple sh shutdown poweroff stty cat ps ln ip dd \ + mount dmesg mkdir cp ping grep setsid ls vi /etc/virc less cat sync + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do + [ -f ${_terminfodir}/l/linux ] && break + 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" + ln -s dracut-util "${initdir}/usr/bin/dracut-getarg" + ln -s dracut-util "${initdir}/usr/bin/dracut-getargs" + + inst ./client-init.sh /sbin/init + inst_simple /etc/os-release inst /etc/nsswitch.conf /etc/nsswitch.conf inst /etc/passwd /etc/passwd inst /etc/group /etc/group @@ -333,14 +344,17 @@ test_setup() { 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" ) # second, install the files needed to make the root filesystem ( + # shellcheck disable=SC2030 + # shellcheck disable=SC2031 export initdir=$TESTDIR/server/overlay - . $basedir/dracut-init.sh + # shellcheck disable=SC1090 + . "$basedir"/dracut-init.sh inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd inst_hook initqueue 01 ./create-root.sh inst_hook initqueue/finished 01 ./finished-false.sh @@ -350,26 +364,28 @@ test_setup() { # create an initramfs that will create the target root filesystem. # We do it this way so that we do not risk trashing the host mdraid # devices, volume groups, encrypted partitions, etc. - $basedir/dracut.sh -l -i $TESTDIR/server/overlay / \ + "$basedir"/dracut.sh -l -i "$TESTDIR"/server/overlay / \ -m "bash udev-rules base rootfs-block fs-lib kernel-modules fs-lib qemu" \ -d "piix ide-gd_mod ata_piix ext3 sd_mod" \ --nomdadmconf \ --no-hostonly-cmdline -N \ - -f $TESTDIR/initramfs.makeroot $KVERSION || return 1 - rm -rf -- $TESTDIR/server + -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1 + rm -rf -- "$TESTDIR"/server # Invoke KVM and/or QEMU to actually create the target filesystem. - $testdir/run-qemu \ - -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \ + "$testdir"/run-qemu \ + -drive format=raw,index=0,media=disk,file="$TESTDIR"/server.ext3 \ -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ - -initrd $TESTDIR/initramfs.makeroot || return 1 - grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created $TESTDIR/server.ext3 || return 1 + -initrd "$TESTDIR"/initramfs.makeroot || return 1 + grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/server.ext3 || return 1 # Make an overlay with needed tools for the test harness ( + # shellcheck disable=SC2031 export initdir=$TESTDIR/overlay - . $basedir/dracut-init.sh - 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 @@ -378,26 +394,27 @@ test_setup() { ) # Make server's dracut image - $basedir/dracut.sh -l -i $TESTDIR/overlay / \ + "$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 + -f "$TESTDIR"/initramfs.server "$KVERSION" || return 1 # Make client's dracut image - $basedir/dracut.sh -l -i $TESTDIR/overlay / \ + "$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 + -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1 } test_cleanup() { if [[ -s $TESTDIR/server.pid ]]; then - kill -TERM $(cat $TESTDIR/server.pid) - rm -f -- $TESTDIR/server.pid + kill -TERM "$(cat "$TESTDIR"/server.pid)" + rm -f -- "$TESTDIR"/server.pid fi } -. $testdir/test-functions +# shellcheck disable=SC1090 +. "$testdir"/test-functions