fix: shellcheck for dracut*.sh

master
Harald Hoyer 2021-03-26 12:30:15 +01:00 committed by Harald Hoyer
parent 0342a7d11c
commit 2b5ddc7722
5 changed files with 100 additions and 65 deletions

View 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

View File

@ -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

View 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=$?

View File

@ -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
}

View File

@ -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