]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fix: shellcheck for dracut*.sh
authorHarald Hoyer <harald@redhat.com>
Fri, 26 Mar 2021 11:30:15 +0000 (12:30 +0100)
committerHarald Hoyer <harald@hoyer.xyz>
Mon, 29 Mar 2021 07:54:52 +0000 (09:54 +0200)
.github/workflows/lint.yml
dracut-functions.sh
dracut-init.sh
dracut-logger.sh
dracut.sh

index 2f5d9106f59014b2c348f8d2600bd9039ae8f18b..ef6763e6922f9d7f1833ddf313e72a321766d4ca 100644 (file)
@@ -45,4 +45,8 @@ jobs:
           sh_checker_comment: true
 
       - name: shellcheck on all marked directories
-        run: while read -r -d '' dir; do shellcheck $(shfmt -f $dir); done < <(find . -name .shchkdir -printf '%h\0')
+        run: |
+          while read -r -d '' dir; do
+            shellcheck $(shfmt -f $dir)
+          done < <(find . -name .shchkdir -printf '%h\0')
+          shellcheck dracut.sh dracut-init.sh dracut-functions.sh dracut-logger.sh
index 6b701a681aa7fa83ac9e9d3da3827ecb6ce9d0f7..14cc90d05ce729860a443300b1ef6329d93cdd72 100755 (executable)
@@ -90,10 +90,10 @@ ldconfig_paths() {
 # $3 = version b
 vercmp() {
     local _n1
-    read -a _n1 <<< "${1//./ }"
+    read -r -a _n1 <<< "${1//./ }"
     local _op=$2
     local _n2
-    read -a _n2 <<< "${3//./ }"
+    read -r -a _n2 <<< "${3//./ }"
     local _i _res
 
     for ((_i = 0; ; _i++)); do
@@ -144,10 +144,11 @@ print_vars() {
 # $ normalize_path ///test/test//
 # /test/test
 normalize_path() {
+    # shellcheck disable=SC2064
+    trap "$(shopt -p extglob)" RETURN
     shopt -q -s extglob
-    set -- "${1//+(\/)//}"
-    shopt -q -u extglob
-    printf "%s\n" "${1%/}"
+    local p=${1//+(\/)//}
+    printf "%s\n" "${p%/}"
 }
 
 # convert_abs_rel <from> <to>
@@ -174,8 +175,8 @@ convert_abs_rel() {
         return
     }
 
-    read -d '/' -r -a __current <<< "$1"
-    read -d '/' -a __absolute <<< "$2"
+    IFS=/ read -r -a __current <<< "$1"
+    IFS=/ read -r -a __absolute <<< "$2"
 
     __abssize=${#__absolute[@]}
     __cursize=${#__current[@]}
@@ -213,8 +214,8 @@ get_fs_env() {
     [[ $1 ]] || return
     unset ID_FS_TYPE
     ID_FS_TYPE=$(blkid -u filesystem -o export -- "$1" \
-        | while read line || [ -n "$line" ]; do
-            if [[ $line == TYPE\=* ]]; then
+        | while read -r line || [ -n "$line" ]; do
+            if [[ $line == "TYPE="* ]]; then
                 printf "%s" "${line#TYPE=}"
                 exit 0
             fi
@@ -349,10 +350,10 @@ find_block_device() {
     if [[ $use_fstab != yes ]]; then
         [[ -d $_find_mpt/. ]]
         findmnt -e -v -n -o 'MAJ:MIN,SOURCE' --target "$_find_mpt" | {
-            while read _majmin _dev || [ -n "$_dev" ]; do
+            while read -r _majmin _dev || [ -n "$_dev" ]; do
                 if [[ -b $_dev ]]; then
                     if ! [[ $_majmin ]] || [[ $_majmin == 0:* ]]; then
-                        _majmin=$(get_maj_min $_dev)
+                        _majmin=$(get_maj_min "$_dev")
                     fi
                     if [[ $_majmin ]]; then
                         printf "%s\n" "$_majmin"
@@ -372,13 +373,13 @@ find_block_device() {
     # fall back to /etc/fstab
 
     findmnt -e --fstab -v -n -o 'MAJ:MIN,SOURCE' --target "$_find_mpt" | {
-        while read _majmin _dev || [ -n "$_dev" ]; do
+        while read -r _majmin _dev || [ -n "$_dev" ]; do
             if ! [[ $_dev ]]; then
                 _dev="$_majmin"
                 unset _majmin
             fi
             if [[ -b $_dev ]]; then
-                [[ $_majmin ]] || _majmin=$(get_maj_min $_dev)
+                [[ $_majmin ]] || _majmin=$(get_maj_min "$_dev")
                 if [[ $_majmin ]]; then
                     printf "%s\n" "$_majmin"
                 else
@@ -410,7 +411,7 @@ find_mp_fstype() {
 
     if [[ $use_fstab != yes ]]; then
         findmnt -e -v -n -o 'FSTYPE' --target "$1" | {
-            while read _fs || [ -n "$_fs" ]; do
+            while read -r _fs || [ -n "$_fs" ]; do
                 [[ $_fs ]] || continue
                 [[ $_fs == "autofs" ]] && continue
                 printf "%s" "$_fs"
@@ -421,7 +422,7 @@ find_mp_fstype() {
     fi
 
     findmnt --fstab -e -v -n -o 'FSTYPE' --target "$1" | {
-        while read _fs || [ -n "$_fs" ]; do
+        while read -r _fs || [ -n "$_fs" ]; do
             [[ $_fs ]] || continue
             [[ $_fs == "autofs" ]] && continue
             printf "%s" "$_fs"
@@ -450,7 +451,7 @@ find_dev_fstype() {
 
     if [[ $use_fstab != yes ]]; then
         findmnt -e -v -n -o 'FSTYPE' --source "$_find_dev" | {
-            while read _fs || [ -n "$_fs" ]; do
+            while read -r _fs || [ -n "$_fs" ]; do
                 [[ $_fs ]] || continue
                 [[ $_fs == "autofs" ]] && continue
                 printf "%s" "$_fs"
@@ -461,7 +462,7 @@ find_dev_fstype() {
     fi
 
     findmnt --fstab -e -v -n -o 'FSTYPE' --source "$_find_dev" | {
-        while read _fs || [ -n "$_fs" ]; do
+        while read -r _fs || [ -n "$_fs" ]; do
             [[ $_fs ]] || continue
             [[ $_fs == "autofs" ]] && continue
             printf "%s" "$_fs"
@@ -542,15 +543,15 @@ host_fs_all() {
 check_block_and_slaves() {
     local _x
     [[ -b /dev/block/$2 ]] || return 1 # Not a block device? So sorry.
-    if ! lvm_internal_dev $2; then "$1" $2 && return; fi
+    if ! lvm_internal_dev "$2"; then "$1" "$2" && return; fi
     check_vol_slaves "$@" && return 0
     if [[ -f /sys/dev/block/$2/../dev ]] && [[ /sys/dev/block/$2/../subsystem -ef /sys/class/block ]]; then
-        check_block_and_slaves $1 $(< "/sys/dev/block/$2/../dev") && return 0
+        check_block_and_slaves "$1" "$(< "/sys/dev/block/$2/../dev")" && return 0
     fi
-    for _x in /sys/dev/block/$2/slaves/*; do
+    for _x in /sys/dev/block/"$2"/slaves/*; do
         [[ -f $_x/dev ]] || continue
         [[ $_x/subsystem -ef /sys/class/block ]] || continue
-        check_block_and_slaves $1 $(< "$_x/dev") && return 0
+        check_block_and_slaves "$1" "$(< "$_x/dev")" && return 0
     done
     return 1
 }
@@ -558,17 +559,17 @@ check_block_and_slaves() {
 check_block_and_slaves_all() {
     local _x _ret=1
     [[ -b /dev/block/$2 ]] || return 1 # Not a block device? So sorry.
-    if ! lvm_internal_dev $2 && "$1" $2; then
+    if ! lvm_internal_dev "$2" && "$1" "$2"; then
         _ret=0
     fi
     check_vol_slaves_all "$@" && return 0
     if [[ -f /sys/dev/block/$2/../dev ]] && [[ /sys/dev/block/$2/../subsystem -ef /sys/class/block ]]; then
-        check_block_and_slaves_all $1 $(< "/sys/dev/block/$2/../dev") && _ret=0
+        check_block_and_slaves_all "$1" "$(< "/sys/dev/block/$2/../dev")" && _ret=0
     fi
-    for _x in /sys/dev/block/$2/slaves/*; do
+    for _x in /sys/dev/block/"$2"/slaves/*; do
         [[ -f $_x/dev ]] || continue
         [[ $_x/subsystem -ef /sys/class/block ]] || continue
-        check_block_and_slaves_all $1 $(< "$_x/dev") && _ret=0
+        check_block_and_slaves_all "$1" "$(< "$_x/dev")" && _ret=0
     done
     return $_ret
 }
@@ -584,7 +585,7 @@ for_each_host_dev_and_slaves_all() {
 
     for _dev in "${host_devs[@]}"; do
         [[ -b $_dev ]] || continue
-        if check_block_and_slaves_all $_func $(get_maj_min $_dev); then
+        if check_block_and_slaves_all "$_func" "$(get_maj_min "$_dev")"; then
             _ret=0
         fi
     done
@@ -599,7 +600,7 @@ for_each_host_dev_and_slaves() {
 
     for _dev in "${host_devs[@]}"; do
         [[ -b $_dev ]] || continue
-        check_block_and_slaves $_func $(get_maj_min $_dev) && return 0
+        check_block_and_slaves "$_func" "$(get_maj_min "$_dev")" && return 0
     done
     return 1
 }
@@ -611,40 +612,37 @@ for_each_host_dev_and_slaves() {
 # but you cannot create the logical volume without the volume group.
 # And the volume group might be bigger than the devices the LV needs.
 check_vol_slaves() {
-    local _lv _vg _pv _dm _majmin
+    local _vg _pv _dm _majmin
     _majmin="$2"
-    _lv="/dev/block/$_majmin"
     _dm=/sys/dev/block/$_majmin/dm
-    [[ -f $_dm/uuid && $(< $_dm/uuid) =~ LVM-* ]] || return 1
-    _vg=$(dmsetup splitname --noheadings -o vg_name $(< "$_dm/name"))
+    [[ -f $_dm/uuid && $(< "$_dm"/uuid) =~ LVM-* ]] || return 1
+    _vg=$(dmsetup splitname --noheadings -o vg_name "$(< "$_dm/name")")
     # strip space
     _vg="${_vg//[[:space:]]/}"
     if [[ $_vg ]]; then
         for _pv in $(lvm vgs --noheadings -o pv_name "$_vg" 2> /dev/null); do
-            check_block_and_slaves $1 $(get_maj_min $_pv) && return 0
+            check_block_and_slaves "$1" "$(get_maj_min "$_pv")" && return 0
         done
     fi
     return 1
 }
 
 check_vol_slaves_all() {
-    local _lv _vg _pv _majmin
+    local _vg _pv _majmin
     _majmin="$2"
-    _lv="/dev/block/$_majmin"
     _dm="/sys/dev/block/$_majmin/dm"
-    [[ -f $_dm/uuid && $(< $_dm/uuid) =~ LVM-* ]] || return 1
-    _vg=$(dmsetup splitname --noheadings -o vg_name $(< "$_dm/name"))
+    [[ -f $_dm/uuid && $(< "$_dm"/uuid) =~ LVM-* ]] || return 1
+    _vg=$(dmsetup splitname --noheadings -o vg_name "$(< "$_dm/name")")
     # strip space
     _vg="${_vg//[[:space:]]/}"
     if [[ $_vg ]]; then
         # when filter/global_filter is set, lvm may be failed
-        lvm lvs --noheadings -o vg_name $_vg 2> /dev/null 1> /dev/null
-        if [ $? -ne 0 ]; then
+        if ! lvm lvs --noheadings -o vg_name "$_vg" 2> /dev/null 1> /dev/null; then
             return 1
         fi
 
         for _pv in $(lvm vgs --noheadings -o pv_name "$_vg" 2> /dev/null); do
-            check_block_and_slaves_all $1 $(get_maj_min $_pv)
+            check_block_and_slaves_all "$1" "$(get_maj_min "$_pv")"
         done
         return 0
     fi
@@ -659,12 +657,13 @@ fs_get_option() {
     local _option=$2
     local OLDIFS="$IFS"
     IFS=,
+    # shellcheck disable=SC2086
     set -- $_fsopts
     IFS="$OLDIFS"
     while [ $# -gt 0 ]; do
         case $1 in
             $_option=*)
-                echo ${1#${_option}=}
+                echo "${1#${_option}=}"
                 break
                 ;;
         esac
@@ -690,7 +689,7 @@ check_kernel_config() {
 # 0 if the kernel module is either built-in or available
 # 1 if the kernel module is not enabled
 check_kernel_module() {
-    modprobe -S $kernel --dry-run $1 &> /dev/null || return 1
+    modprobe -S "$kernel" --dry-run "$1" &> /dev/null || return 1
 }
 
 # get_cpu_vendor
@@ -707,20 +706,23 @@ get_cpu_vendor() {
 # get_host_ucode
 # Get the hosts' ucode file based on the /proc/cpuinfo
 get_ucode_file() {
-    local family=$(grep -E "cpu family" /proc/cpuinfo | head -1 | sed s/.*:\ //)
-    local model=$(grep -E "model" /proc/cpuinfo | grep -v name | head -1 | sed s/.*:\ //)
-    local stepping=$(grep -E "stepping" /proc/cpuinfo | head -1 | sed s/.*:\ //)
+    local family
+    local model
+    local stepping
+    family=$(grep -E "cpu family" /proc/cpuinfo | head -1 | sed s/.*:\ //)
+    model=$(grep -E "model" /proc/cpuinfo | grep -v name | head -1 | sed s/.*:\ //)
+    stepping=$(grep -E "stepping" /proc/cpuinfo | head -1 | sed s/.*:\ //)
 
     if [[ "$(get_cpu_vendor)" == "AMD" ]]; then
         if [[ $family -ge 21 ]]; then
-            printf "microcode_amd_fam%xh.bin" $family
+            printf "microcode_amd_fam%xh.bin" "$family"
         else
             printf "microcode_amd.bin"
         fi
     fi
     if [[ "$(get_cpu_vendor)" == "Intel" ]]; then
         # The /proc/cpuinfo are in decimal.
-        printf "%02x-%02x-%02x" ${family} ${model} ${stepping}
+        printf "%02x-%02x-%02x" "${family}" "${model}" "${stepping}"
     fi
 }
 
@@ -728,9 +730,9 @@ get_ucode_file() {
 # If it is an LVM device, touch only devices which have /dev/VG/LV symlink.
 lvm_internal_dev() {
     local dev_dm_dir=/sys/dev/block/$1/dm
-    [[ ! -f $dev_dm_dir/uuid || $(< $dev_dm_dir/uuid) != LVM-* ]] && return 1 # Not an LVM device
+    [[ ! -f $dev_dm_dir/uuid || $(< "$dev_dm_dir"/uuid) != LVM-* ]] && return 1 # Not an LVM device
     local DM_VG_NAME DM_LV_NAME DM_LV_LAYER
-    eval $(dmsetup splitname --nameprefixes --noheadings --rows "$(< $dev_dm_dir/name)" 2> /dev/null)
+    eval "$(dmsetup splitname --nameprefixes --noheadings --rows "$(< "$dev_dm_dir"/name)" 2> /dev/null)"
     [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || return 0 # Better skip this!
     [[ ${DM_LV_LAYER} ]] || [[ ! -L /dev/${DM_VG_NAME}/${DM_LV_NAME} ]]
 }
@@ -738,7 +740,7 @@ lvm_internal_dev() {
 btrfs_devs() {
     local _mp="$1"
     btrfs device usage "$_mp" \
-        | while read _dev _rest; do
+        | while read -r _dev _; do
             str_starts "$_dev" "/" || continue
             _dev=${_dev%,}
             printf -- "%s\n" "$_dev"
@@ -746,13 +748,15 @@ btrfs_devs() {
 }
 
 iface_for_remote_addr() {
+    # shellcheck disable=SC2046
     set -- $(ip -o route get to "$1")
-    echo $3
+    echo "$3"
 }
 
 local_addr_for_remote_addr() {
+    # shellcheck disable=SC2046
     set -- $(ip -o route get to "$1")
-    echo $5
+    echo "$5"
 }
 
 peer_for_addr() {
@@ -809,7 +813,7 @@ is_unbracketed_ipv6_address() {
 # remote address can be reached
 ip_params_for_remote_addr() {
     local remote_addr=$1
-    local ifname local_addr peer netmask= gateway ifmac
+    local ifname local_addr peer netmask gateway ifmac
 
     [[ $remote_addr ]] || return 1
     ifname=$(iface_for_remote_addr "$remote_addr")
@@ -893,7 +897,7 @@ block_is_fcoe() {
     until [[ -d "$_dir/sys" ]]; do
         _dir="$_dir/.."
         if [[ -d "$_dir/subsystem" ]]; then
-            subsystem=$(basename $(readlink $_dir/subsystem))
+            subsystem=$(basename "$(readlink "$_dir"/subsystem)")
             [[ $subsystem == "fcoe" ]] && return 0
         fi
     done
index 859137d3997671eabbdccfb76337a6c3332851fd..786f50b1ef071a4274257eeda3db3c9b3b90e807 100644 (file)
@@ -550,6 +550,7 @@ prepare_udev_rules() {
 # $1 = type of hook, $2 = hook priority (lower runs first), $3 = hook
 # All hooks should be POSIX/SuS compliant, they will be sourced by init.
 inst_hook() {
+    local hook
     if ! [[ -f $3 ]]; then
         dfatal "Cannot install a hook ($3) that does not exist."
         dfatal "Aborting initrd creation."
@@ -558,7 +559,9 @@ inst_hook() {
         dfatal "No such hook type $1. Aborting initrd creation."
         exit 1
     fi
-    inst_simple "$3" "/lib/dracut/hooks/${1}/${2}-${3##*/}"
+    hook="/lib/dracut/hooks/${1}/${2}-${3##*/}"
+    inst_simple "$3" "$hook"
+    chmod u+x "$initdir/$hook"
 }
 
 # install any of listed files
@@ -677,6 +680,7 @@ module_check() {
     else
         unset check depends cmdline install installkernel
         check() { true; }
+        # shellcheck disable=SC1090
         . "$_moddir"/module-setup.sh
         is_func check || return 0
         [[ $_forced != 0 ]] && unset hostonly
@@ -708,6 +712,7 @@ module_check_mount() {
     else
         unset check depends cmdline install installkernel
         check() { false; }
+        # shellcheck disable=SC1090
         . "$_moddir"/module-setup.sh
         moddir=$_moddir check 0
         _ret=$?
@@ -733,6 +738,7 @@ module_depends() {
     else
         unset check depends cmdline install installkernel
         depends() { true; }
+        # shellcheck disable=SC1090
         . "$_moddir"/module-setup.sh
         moddir=$_moddir depends
         _ret=$?
@@ -750,11 +756,13 @@ module_cmdline() {
     [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
     [[ -d $_moddir ]] || return 1
     if [[ ! -f $_moddir/module-setup.sh ]]; then
+        # shellcheck disable=SC1090
         [[ -x $_moddir/cmdline ]] && . "$_moddir/cmdline"
         return $?
     else
         unset check depends cmdline install installkernel
         cmdline() { true; }
+        # shellcheck disable=SC1090
         . "$_moddir"/module-setup.sh
         moddir="$_moddir" cmdline
         _ret=$?
@@ -772,11 +780,13 @@ module_install() {
     [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
     [[ -d $_moddir ]] || return 1
     if [[ ! -f $_moddir/module-setup.sh ]]; then
+        # shellcheck disable=SC1090
         [[ -x $_moddir/install ]] && . "$_moddir/install"
         return $?
     else
         unset check depends cmdline install installkernel
         install() { true; }
+        # shellcheck disable=SC1090
         . "$_moddir"/module-setup.sh
         moddir="$_moddir" install
         _ret=$?
@@ -794,11 +804,13 @@ module_installkernel() {
     [[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
     [[ -d $_moddir ]] || return 1
     if [[ ! -f $_moddir/module-setup.sh ]]; then
+        # shellcheck disable=SC1090
         [[ -x $_moddir/installkernel ]] && . "$_moddir/installkernel"
         return $?
     else
         unset check depends cmdline install installkernel
         installkernel() { true; }
+        # shellcheck disable=SC1090
         . "$_moddir"/module-setup.sh
         moddir="$_moddir" installkernel
         _ret=$?
index dadbe8483cca9c4b6eea0c6f953d54522cd684c0..c36525d0697645046c2800f48f475c95a2db5c82 100755 (executable)
@@ -316,9 +316,10 @@ _dlvl2syslvl() {
 #   - @c INFO to @c info
 #   - @c DEBUG and @c TRACE both to @c debug
 _do_dlog() {
+    local lvlc
     local lvl="$1"
     shift
-    local lvlc=$(_lvl2char "$lvl") || return 0
+    lvlc=$(_lvl2char "$lvl") || return 0
     local msg="$*"
     local lmsg="$lvlc: $*"
 
@@ -376,7 +377,9 @@ dlog() {
 dtrace() {
     set +x
     dlog 6 "$@"
-    [ -n "$debug" ] && set -x || :
+    if [ -n "$debug" ]; then
+        set -x
+    fi
 }
 
 ## @brief Logs message at DEBUG level (5)
@@ -386,7 +389,9 @@ dtrace() {
 ddebug() {
     set +x
     dlog 5 "$@"
-    [ -n "$debug" ] && set -x || :
+    if [ -n "$debug" ]; then
+        set -x
+    fi
 }
 
 ## @brief Logs message at INFO level (4)
@@ -396,7 +401,9 @@ ddebug() {
 dinfo() {
     set +x
     dlog 4 "$@"
-    [ -n "$debug" ] && set -x || :
+    if [ -n "$debug" ]; then
+        set -x
+    fi
 }
 
 ## @brief Logs message at WARN level (3)
@@ -406,7 +413,9 @@ dinfo() {
 dwarn() {
     set +x
     dlog 3 "$@"
-    [ -n "$debug" ] && set -x || :
+    if [ -n "$debug" ]; then
+        set -x
+    fi
 }
 
 ## @brief It's an alias to dwarn() function.
@@ -416,7 +425,9 @@ dwarn() {
 dwarning() {
     set +x
     dwarn "$@"
-    [ -n "$debug" ] && set -x || :
+    if [ -n "$debug" ]; then
+        set -x
+    fi
 }
 
 ## @brief Logs message at ERROR level (2)
@@ -426,7 +437,9 @@ dwarning() {
 derror() {
     set +x
     dlog 2 "$@"
-    [ -n "$debug" ] && set -x || :
+    if [ -n "$debug" ]; then
+        set -x
+    fi
 }
 
 ## @brief Logs message at FATAL level (1)
@@ -436,5 +449,7 @@ derror() {
 dfatal() {
     set +x
     dlog 1 "$@"
-    [ -n "$debug" ] && set -x || :
+    if [ -n "$debug" ]; then
+        set -x
+    fi
 }
index 8890203a6d905e0ed6825ed9e14b1744498789dd..b8db2dd6de8835067c477e1ade15fa2a40d444c6 100755 (executable)
--- a/dracut.sh
+++ b/dracut.sh
@@ -850,7 +850,7 @@ if [[ $regenerate_all == "yes" ]]; then
     ((len = ${#dracut_args[@]}))
     for ((i = 0; i < len; i++)); do
         [[ ${dracut_args[$i]} == "--regenerate-all" ]] \
-            && unset "dracut_args[$i]"
+            && unset dracut_args["$i"]
     done
 
     cd "$dracutsysrootdir"/lib/modules || exit 1
@@ -1959,7 +1959,7 @@ if [[ $kernel_only != yes ]]; then
         if [ -z "${fstab_field[1]}" ]; then
             # Determine device and mount options from current system
             mountpoint -q "${fstab_field[0]}" || derror "${fstab_field[0]} is not a mount point!"
-            read -r -a fstab_field <<< "$(findmnt --raw -n --target "${fstab_field[0]}" --output=source,target,fstype,options)"
+            read -r -a fstab_field < <(findmnt --raw -n --target "${fstab_field[0]}" --output=source,target,fstype,options)
             dinfo "Line for ${fstab_field[1]}: ${fstab_field[*]}"
         else
             # Use default options