]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fix(TEST FULL-SYSTEMD): shellcheck
authorHarald Hoyer <harald@redhat.com>
Tue, 30 Mar 2021 10:17:10 +0000 (12:17 +0200)
committerHarald Hoyer <harald@hoyer.xyz>
Tue, 30 Mar 2021 18:54:26 +0000 (20:54 +0200)
test/TEST-04-FULL-SYSTEMD/.shchkdir [new file with mode: 0644]
test/TEST-04-FULL-SYSTEMD/create-root.sh
test/TEST-04-FULL-SYSTEMD/test-init.sh
test/TEST-04-FULL-SYSTEMD/test.sh

diff --git a/test/TEST-04-FULL-SYSTEMD/.shchkdir b/test/TEST-04-FULL-SYSTEMD/.shchkdir
new file mode 100644 (file)
index 0000000..e69de29
index 5b2c94f8b551c9b497e60c6accf651f1211c5aee..9f8b5ba1fed30d2d46ef797fc17a98edd9be052a 100755 (executable)
@@ -2,7 +2,7 @@
 # don't let udev and this script step on eachother's toes
 set -x
 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
 modprobe btrfs
index 44077ef3bc9e2cfe0f9b628c08db2a40b61770a5..d46a1263a4f7566a0dcce3401c6ed4d7c4228d44 100755 (executable)
 #!/bin/sh
-> /dev/watchdog
-getcmdline() {
-    while read -r _line || [ -n "$_line" ]; do
-        printf "%s" "$_line"
-    done < /proc/cmdline
-}
+: > /dev/watchdog
 
-_dogetarg() {
-    local _o _val _doecho
-    unset _val
-    unset _o
-    unset _doecho
-    CMDLINE=$(getcmdline)
+. /lib/dracut-lib.sh
 
-    for _o in $CMDLINE; do
-        if [ "${_o%%=*}" = "${1%%=*}" ]; then
-            if [ -n "${1#*=}" -a "${1#*=*}" != "${1}" ]; then
-                # if $1 has a "=<value>", 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 "=<value>", 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
-strstr() { [ "${1##*"$2"*}" != "$1" ]; }
-CMDLINE=$(while read line || [ -n "$line" ]; do echo $line; done < /proc/cmdline)
-plymouth --quit
-exec < /dev/console > /dev/console 2>&1
-
-ismounted() {
-    while read a m a || [ -n "$a" ]; do
-        [ "$m" = "$1" ] && return 0
-    done < /proc/mounts
-    return 1
-}
+command -v plymouth > /dev/null 2>&1 && plymouth --quit
+exec > /dev/console 2>&1
 
 systemctl --failed --no-legend --no-pager > /failed
 
@@ -148,6 +37,7 @@ if getargbool 0 rd.shell; then
     strstr "$(setsid --help)" "control" && CTTY="-c"
     setsid $CTTY sh -i
 fi
-set -x
-/usr/bin/systemctl poweroff
+sync
+systemctl poweroff
 echo "Powering down."
+exit 0
index f42e9f636a7a1961689ea0cda62da53bd094699d..bbe268c56b2bdb095ecd793952ebe6e787fb30e6 100755 (executable)
@@ -1,5 +1,6 @@
 #!/bin/bash
 
+# shellcheck disable=SC2034
 TEST_DESCRIPTION="Full systemd serialization/deserialization test with /usr mount"
 
 export KVERSION=${KVERSION-$(uname -r)}
@@ -16,15 +17,15 @@ client_run() {
 
     echo "CLIENT TEST START: $test_name"
 
-    dd if=/dev/zero of=$TESTDIR/result bs=1M count=1
-    $testdir/run-qemu \
-        -drive format=raw,index=0,media=disk,file=$TESTDIR/root.btrfs \
-        -drive format=raw,index=1,media=disk,file=$TESTDIR/usr.btrfs \
-        -drive format=raw,index=2,media=disk,file=$TESTDIR/result \
+    dd if=/dev/zero of="$TESTDIR"/result bs=1M count=1
+    "$testdir"/run-qemu \
+        -drive format=raw,index=0,media=disk,file="$TESTDIR"/root.btrfs \
+        -drive format=raw,index=1,media=disk,file="$TESTDIR"/usr.btrfs \
+        -drive format=raw,index=2,media=disk,file="$TESTDIR"/result \
         -append "panic=1 systemd.crash_reboot root=LABEL=dracut $client_opts rd.retry=3 console=ttyS0,115200n81 selinux=0 $DEBUGOUT rd.shell=0 $DEBUGFAIL" \
-        -initrd $TESTDIR/initramfs.testing
+        -initrd "$TESTDIR"/initramfs.testing
 
-    if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success $TESTDIR/result; then
+    if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success "$TESTDIR"/result; then
         echo "CLIENT TEST END: $test_name [FAILED]"
         return 1
     fi
@@ -40,18 +41,20 @@ test_run() {
 }
 
 test_setup() {
-    rm -f -- $TESTDIR/root.btrfs
-    rm -f -- $TESTDIR/usr.btrfs
+    rm -f -- "$TESTDIR"/root.btrfs
+    rm -f -- "$TESTDIR"/usr.btrfs
     # Create the blank file to use as a root filesystem
-    dd if=/dev/zero of=$TESTDIR/root.btrfs bs=1M count=320
-    dd if=/dev/zero of=$TESTDIR/usr.btrfs bs=1M count=320
+    dd if=/dev/zero of="$TESTDIR"/root.btrfs bs=1M count=320
+    dd if=/dev/zero of="$TESTDIR"/usr.btrfs bs=1M count=320
 
     export kernel=$KVERSION
     # Create what will eventually be our root filesystem onto an overlay
     (
+        # shellcheck disable=SC2030
         export initdir=$TESTDIR/overlay/source
-        mkdir -p $initdir
-        . $basedir/dracut-init.sh
+        mkdir -p "$initdir"
+        # shellcheck disable=SC1090
+        . "$basedir"/dracut-init.sh
 
         for d in usr/bin usr/sbin bin etc lib "$libdir" sbin tmp usr var var/log dev proc sys sysroot root run; do
             if [ -L "/$d" ]; then
@@ -66,7 +69,7 @@ test_setup() {
 
         inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
             mount dmesg mkdir cp ping dd \
-            umount strace less setsid tree systemctl reset
+            umount strace less setsid tree systemctl reset sync
 
         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
             [ -f ${_terminfodir}/l/linux ] && break
@@ -74,7 +77,7 @@ test_setup() {
         inst_multiple -o ${_terminfodir}/l/linux
         inst_multiple grep
         inst_simple ./fstab /etc/fstab
-        rpm -ql systemd | xargs -r $DRACUT_INSTALL ${initdir:+-D "$initdir"} -o -a -l
+        rpm -ql systemd | xargs -r "$DRACUT_INSTALL" ${initdir:+-D "$initdir"} -o -a -l
         inst /lib/systemd/system/systemd-remount-fs.service
         inst /lib/systemd/systemd-remount-fs
         inst /lib/systemd/system/systemd-journal-flush.service
@@ -83,8 +86,13 @@ test_setup() {
         inst /lib/systemd/system/system.slice
         inst_multiple -o /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"
+        ln -s dracut-util "${initdir}/usr/bin/dracut-getarg"
+        ln -s dracut-util "${initdir}/usr/bin/dracut-getargs"
+
         # make a journal directory
-        mkdir -p $initdir/var/log/journal
+        mkdir -p "$initdir"/var/log/journal
 
         # install some basic config files
         inst_multiple -o \
@@ -101,11 +109,11 @@ test_setup() {
             /etc/localtime
 
         # we want an empty environment
-        > $initdir/etc/environment
+        : > "$initdir"/etc/environment
 
         # setup the testsuite target
-        mkdir -p $initdir/etc/systemd/system
-        cat > $initdir/etc/systemd/system/testsuite.target << EOF
+        mkdir -p "$initdir"/etc/systemd/system
+        cat > "$initdir"/etc/systemd/system/testsuite.target << EOF
 [Unit]
 Description=Testsuite target
 Requires=basic.target
@@ -117,7 +125,7 @@ EOF
         inst ./test-init.sh /sbin/test-init
 
         # setup the testsuite service
-        cat > $initdir/etc/systemd/system/testsuite.service << EOF
+        cat > "$initdir"/etc/systemd/system/testsuite.service << EOF
 [Unit]
 Description=Testsuite service
 After=basic.target
@@ -128,11 +136,11 @@ Type=oneshot
 StandardInput=tty
 StandardOutput=tty
 EOF
-        mkdir -p $initdir/etc/systemd/system/testsuite.target.wants
-        ln -fs ../testsuite.service $initdir/etc/systemd/system/testsuite.target.wants/testsuite.service
+        mkdir -p "$initdir"/etc/systemd/system/testsuite.target.wants
+        ln -fs ../testsuite.service "$initdir"/etc/systemd/system/testsuite.target.wants/testsuite.service
 
         # make the testsuite the default target
-        ln -fs testsuite.target $initdir/etc/systemd/system/default.target
+        ln -fs testsuite.target "$initdir"/etc/systemd/system/default.target
 
         #         mkdir -p $initdir/etc/rc.d
         #         cat >$initdir/etc/rc.d/rc.local <<EOF
@@ -155,8 +163,8 @@ EOF
             /etc/security \
             /lib64/security \
             /lib/security -xtype f \
-            | while read file || [ -n "$file" ]; do
-                inst_multiple -o $file
+            | while read -r file || [ -n "$file" ]; do
+                inst_multiple -o "$file"
             done
 
         # install dbus socket and service file
@@ -168,17 +176,16 @@ EOF
         (
             echo "FONT=eurlatgr"
             echo "KEYMAP=us"
-        ) > $initrd/etc/vconsole.conf
+        ) > "$initrd"/etc/vconsole.conf
 
         # install basic keyboard maps and fonts
         for i in \
             /usr/lib/kbd/consolefonts/eurlatgr* \
             /usr/lib/kbd/keymaps/{legacy/,/}include/* \
             /usr/lib/kbd/keymaps/{legacy/,/}i386/include/* \
-            /usr/lib/kbd/keymaps/{legacy/,/}i386/qwerty/us.* \
-            ${NULL}; do
+            /usr/lib/kbd/keymaps/{legacy/,/}i386/qwerty/us.*; do
             [[ -f $i ]] || continue
-            inst $i
+            inst "$i"
         done
 
         # some basic terminfo files
@@ -188,33 +195,33 @@ EOF
         inst_multiple -o ${_terminfodir}/l/linux
 
         # softlink mtab
-        ln -fs /proc/self/mounts $initdir/etc/mtab
+        ln -fs /proc/self/mounts "$initdir"/etc/mtab
 
         # install any Execs from the service files
-        grep -Eho '^Exec[^ ]*=[^ ]+' $initdir/lib/systemd/system/*.service \
-            | while read i || [ -n "$i" ]; do
+        grep -Eho '^Exec[^ ]*=[^ ]+' "$initdir"/lib/systemd/system/*.service \
+            | while read -r i || [ -n "$i" ]; do
                 i=${i##Exec*=}
                 i=${i##-}
-                inst_multiple -o $i
+                inst_multiple -o "$i"
             done
 
         # some helper tools for debugging
-        [[ $DEBUGTOOLS ]] && inst_multiple $DEBUGTOOLS
+        [[ $DEBUGTOOLS ]] && inst_multiple "$DEBUGTOOLS"
 
         # install ld.so.conf* and run ldconfig
-        cp -a /etc/ld.so.conf* $initdir/etc
+        cp -a /etc/ld.so.conf* "$initdir"/etc
         ldconfig -r "$initdir"
         ddebug "Strip binaeries"
-        find "$initdir" -perm /0111 -type f | xargs -r strip --strip-unneeded | ddebug
+        find "$initdir" -perm /0111 -type f -print0 | xargs -0 -r strip --strip-unneeded | ddebug
 
         hostonly='' instmods fuse
 
         # copy depmod files
-        inst /lib/modules/$kernel/modules.order
-        inst /lib/modules/$kernel/modules.builtin
+        inst /lib/modules/"$kernel"/modules.order
+        inst /lib/modules/"$kernel"/modules.builtin
         # generate module dependencies
         if [[ -d $initdir/lib/modules/$kernel ]] \
-            && ! depmod -a -b "$initdir" $kernel; then
+            && ! depmod -a -b "$initdir" "$kernel"; then
             dfatal "\"depmod -a $kernel\" failed."
             exit 1
         fi
@@ -225,8 +232,11 @@ EOF
 
     # second, install the files needed to make the root filesystem
     (
+        # shellcheck disable=SC2030
+        # shellcheck disable=SC2031
         export initdir=$TESTDIR/overlay
-        . $basedir/dracut-init.sh
+        # shellcheck disable=SC1090
+        . "$basedir"/dracut-init.sh
         inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync dd
         inst_hook initqueue 01 ./create-root.sh
         inst_hook initqueue/finished 01 ./finished-false.sh
@@ -236,32 +246,34 @@ EOF
     # 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/overlay / \
+    "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
         -m "bash udev-rules btrfs base rootfs-block fs-lib kernel-modules qemu" \
         -d "piix ide-gd_mod ata_piix btrfs sd_mod" \
         --nomdadmconf \
         --nohardlink \
         --no-hostonly-cmdline -N \
-        -f $TESTDIR/initramfs.makeroot $KVERSION || return 1
+        -f "$TESTDIR"/initramfs.makeroot "$KVERSION" || return 1
 
     # Invoke KVM and/or QEMU to actually create the target filesystem.
-    rm -rf -- $TESTDIR/overlay
+    rm -rf -- "$TESTDIR"/overlay
 
-    dd if=/dev/zero of=$TESTDIR/result bs=1M count=1
-    $testdir/run-qemu \
-        -drive format=raw,index=0,media=disk,file=$TESTDIR/root.btrfs \
-        -drive format=raw,index=1,media=disk,file=$TESTDIR/usr.btrfs \
-        -drive format=raw,index=2,media=disk,file=$TESTDIR/result \
+    dd if=/dev/zero of="$TESTDIR"/result bs=1M count=1
+    "$testdir"/run-qemu \
+        -drive format=raw,index=0,media=disk,file="$TESTDIR"/root.btrfs \
+        -drive format=raw,index=1,media=disk,file="$TESTDIR"/usr.btrfs \
+        -drive format=raw,index=2,media=disk,file="$TESTDIR"/result \
         -append "root=/dev/fakeroot rw rootfstype=btrfs quiet console=ttyS0,115200n81 selinux=0" \
-        -initrd $TESTDIR/initramfs.makeroot || return 1
-    if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created $TESTDIR/result; then
+        -initrd "$TESTDIR"/initramfs.makeroot || return 1
+    if ! grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created "$TESTDIR"/result; then
         echo "Could not create root filesystem"
         return 1
     fi
 
     (
+        # shellcheck disable=SC2031
         export initdir=$TESTDIR/overlay
-        . $basedir/dracut-init.sh
+        # shellcheck disable=SC1090
+        . "$basedir"/dracut-init.sh
         inst_multiple poweroff shutdown dd
         inst_hook shutdown-emergency 000 ./hard-off.sh
         inst_hook emergency 000 ./hard-off.sh
@@ -271,19 +283,20 @@ EOF
     [ -e /etc/machine-id ] && EXTRA_MACHINE="/etc/machine-id"
     [ -e /etc/machine-info ] && EXTRA_MACHINE+=" /etc/machine-info"
 
-    $basedir/dracut.sh -l -i $TESTDIR/overlay / \
+    "$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
         -a "debug systemd i18n qemu" \
         ${EXTRA_MACHINE:+-I "$EXTRA_MACHINE"} \
         -o "dash network plymouth lvm mdraid resume crypt caps dm terminfo usrmount kernel-network-modules rngd" \
         -d "piix ide-gd_mod ata_piix btrfs sd_mod i6300esb ib700wdt" \
         --no-hostonly-cmdline -N \
-        -f $TESTDIR/initramfs.testing $KVERSION || return 1
+        -f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1
 
-    rm -rf -- $TESTDIR/overlay
+    rm -rf -- "$TESTDIR"/overlay
 }
 
 test_cleanup() {
     return 0
 }
 
-. $testdir/test-functions
+# shellcheck disable=SC1090
+. "$testdir"/test-functions