From 57daebe2f73d7fbd0c5fe9abcbcd602e757c530d Mon Sep 17 00:00:00 2001 From: Tao Liu Date: Wed, 3 Nov 2021 19:12:35 +0800 Subject: [PATCH] kdump-lib-initramfs.sh: make it POSIX compatible upstream: fedora resolves: bz2003832 conflict: none commit 5debf397fef03931c0736d473a55ebcf6dc08380 Author: Kairui Song Date: Tue Sep 14 03:04:08 2021 +0800 kdump-lib-initramfs.sh: make it POSIX compatible POSIX doesn't support keyword local, so add double underscore and prefix to variable names, and reduce variable usage, to avoid any variable name conflict. Also reformat the code with `shfmt -s -w kdump-lib-initramfs.sh`. Signed-off-by: Kairui Song Acked-by: Philipp Rudo Signed-off-by: Tao Liu --- kdump-lib-initramfs.sh | 92 +++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh index b30b024..0cdb465 100755 --- a/kdump-lib-initramfs.sh +++ b/kdump-lib-initramfs.sh @@ -9,124 +9,122 @@ KDUMP_CONFIG_FILE="/etc/kdump.conf" # Read kdump config in well formated style kdump_read_conf() { - # Following steps are applied in order: strip trailing comment, strip trailing space, - # strip heading space, match non-empty line, remove duplicated spaces between conf name and value - [ -f "$KDUMP_CONFIG_FILE" ] && sed -n -e "s/#.*//;s/\s*$//;s/^\s*//;s/\(\S\+\)\s*\(.*\)/\1 \2/p" $KDUMP_CONFIG_FILE + # Following steps are applied in order: strip trailing comment, strip trailing space, + # strip heading space, match non-empty line, remove duplicated spaces between conf name and value + [ -f "$KDUMP_CONFIG_FILE" ] && sed -n -e "s/#.*//;s/\s*$//;s/^\s*//;s/\(\S\+\)\s*\(.*\)/\1 \2/p" $KDUMP_CONFIG_FILE } # Retrieves config value defined in kdump.conf # $1: config name, sed regexp compatible -kdump_get_conf_val() { - # For lines matching "^\s*$1\s+", remove matched part (config name including space), - # remove tailing comment, space, then store in hold space. Print out the hold buffer on last line. - [ -f "$KDUMP_CONFIG_FILE" ] && \ - sed -n -e "/^\s*\($1\)\s\+/{s/^\s*\($1\)\s\+//;s/#.*//;s/\s*$//;h};\${x;p}" $KDUMP_CONFIG_FILE +kdump_get_conf_val() +{ + # For lines matching "^\s*$1\s+", remove matched part (config name including space), + # remove tailing comment, space, then store in hold space. Print out the hold buffer on last line. + [ -f "$KDUMP_CONFIG_FILE" ] && + sed -n -e "/^\s*\($1\)\s\+/{s/^\s*\($1\)\s\+//;s/#.*//;s/\s*$//;h};\${x;p}" $KDUMP_CONFIG_FILE } is_mounted() { - findmnt -k -n $1 &>/dev/null + findmnt -k -n "$1" > /dev/null 2>&1 } +# $1: info type +# $2: mount source type +# $3: mount source +# $4: extra args get_mount_info() { - local _info_type=$1 _src_type=$2 _src=$3; shift 3 - local _info=$(findmnt -k -n -r -o $_info_type --$_src_type $_src $@) + __kdump_mnt=$(findmnt -k -n -r -o "$1" "--$2" "$3" $4) - [ -z "$_info" ] && [ -e "/etc/fstab" ] && _info=$(findmnt -s -n -r -o $_info_type --$_src_type $_src $@) + [ -z "$__kdump_mnt" ] && [ -e "/etc/fstab" ] && __kdump_mnt=$(findmnt -s -n -r -o "$1" "--$2" "$3" $4) - echo $_info + echo "$__kdump_mnt" } is_ipv6_address() { - echo $1 | grep -q ":" + echo "$1" | grep -q ":" } is_fs_type_nfs() { - [ "$1" = "nfs" ] || [ "$1" = "nfs4" ] + [ "$1" = "nfs" ] || [ "$1" = "nfs4" ] } # If $1 contains dracut_args "--mount", return get_dracut_args_fstype() { - echo $1 | grep "\-\-mount" | sed "s/.*--mount .\(.*\)/\1/" | cut -d' ' -f3 + echo $1 | grep "\-\-mount" | sed "s/.*--mount .\(.*\)/\1/" | cut -d' ' -f3 } # If $1 contains dracut_args "--mount", return get_dracut_args_target() { - echo $1 | grep "\-\-mount" | sed "s/.*--mount .\(.*\)/\1/" | cut -d' ' -f1 + echo $1 | grep "\-\-mount" | sed "s/.*--mount .\(.*\)/\1/" | cut -d' ' -f1 } get_save_path() { - local _save_path=$(kdump_get_conf_val path) - [ -z "$_save_path" ] && _save_path=$DEFAULT_PATH + __kdump_path=$(kdump_get_conf_val path) + [ -z "$__kdump_path" ] && __kdump_path=$DEFAULT_PATH - # strip the duplicated "/" - echo $_save_path | tr -s / + # strip the duplicated "/" + echo "$__kdump_path" | tr -s / } get_root_fs_device() { - findmnt -k -f -n -o SOURCE / + findmnt -k -f -n -o SOURCE / } # Return the current underlying device of a path, ignore bind mounts get_target_from_path() { - local _target - - _target=$(df $1 2>/dev/null | tail -1 | awk '{print $1}') - [[ "$_target" == "/dev/root" ]] && [[ ! -e /dev/root ]] && _target=$(get_root_fs_device) - echo $_target + __kdump_target=$(df "$1" 2> /dev/null | tail -1 | awk '{print $1}') + [ "$__kdump_target" = "/dev/root" ] && [ ! -e /dev/root ] && __kdump_target=$(get_root_fs_device) + echo "$__kdump_target" } get_fs_type_from_target() { - get_mount_info FSTYPE source $1 -f + get_mount_info FSTYPE source "$1" -f } get_mntpoint_from_target() { - # --source is applied to ensure non-bind mount is returned - get_mount_info TARGET source $1 -f + # --source is applied to ensure non-bind mount is returned + get_mount_info TARGET source "$1" -f } is_ssh_dump_target() { - [[ $(kdump_get_conf_val ssh) == *@* ]] + kdump_get_conf_val ssh | grep -q @ } is_raw_dump_target() { - [[ $(kdump_get_conf_val raw) ]] + [ -n "$(kdump_get_conf_val raw)" ] } is_nfs_dump_target() { - if [[ $(kdump_get_conf_val nfs) ]]; then - return 0; - fi + if [ -n "$(kdump_get_conf_val nfs)" ]; then + return 0 + fi - if is_fs_type_nfs $(get_dracut_args_fstype "$(kdump_get_conf_val dracut_args)"); then - return 0 - fi + if is_fs_type_nfs "$(get_dracut_args_fstype "$(kdump_get_conf_val dracut_args)")"; then + return 0 + fi - local _save_path=$(get_save_path) - local _target=$(get_target_from_path $_save_path) - local _fstype=$(get_fs_type_from_target $_target) + if is_fs_type_nfs "$(get_fs_type_from_target "$(get_target_from_path "$(get_save_path)")")"; then + return 0 + fi - if is_fs_type_nfs $_fstype; then - return 0 - fi - - return 1 + return 1 } is_fs_dump_target() { - [[ $(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix") ]] + [ -n "$(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix")" ] }