Hi Kairui,
On Thu, 12 Aug 2021 13:47:46 +0800
Kairui Song <kasong(a)redhat.com> wrote:
Move all function needed in second kernel from kdump-lib.sh
to kdump-lib-initramfs.sh, and update shebang headers.
Now kdump-lib-initramfs.sh is an independent lib scirpt, no longer
depend on kdump-lib.sh, and kdump-lib.sh is no longer needed for
second kernel.
In later commits, functions in kdump-lib-initramfs.sh will be reworked
to be POSIX compatible, kdump-lib.sh will contain bash only functions.
POSIX shell have very limited features, eg. `local` keyword doesn't
exist in POSIX but we rely on that heavily. So kdump-lib.sh will
use bash syntax and contain most complex helper and codes.
kdump-lib-initramfs.sh will contain minimun set of helpers, and
^^^^^^^
typo minimum
shared by both first and second kernel.
Signed-off-by: Kairui Song <kasong(a)redhat.com>
---
.editorconfig | 2 +-
dracut-module-setup.sh | 1 -
kdump-lib-initramfs.sh | 133 ++++++++++++++++++++++++++++++++++++++++-
kdump-lib.sh | 131 +---------------------------------------
4 files changed, 135 insertions(+), 132 deletions(-)
[...]
@@ -28,6 +32,131 @@ if [ $? -ne 0 ]; then
exit 1
fi
+# Read kdump config in well formated style
+kdump_read_conf()
+{
+ # Following steps are applied in order: strip tailing comment, strip tailing 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
+}
+
+# kdump_get_conf_val <config name>
+# retrieves config value defined in kdump.conf
+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
+}
+
+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 $@)
+
+ [ -z "$_info" ] && [ -e "/etc/fstab" ] &&
_info=$(findmnt -s -n -r -o $_info_type --$_src_type $_src $@)
+
+ echo $_info
+}
+
+is_ipv6_address()
+{
+ echo $1 | grep -q ":"
+}
+
+is_fs_type_nfs()
+{
+ [ "$1" = "nfs" ] || [ "$1" = "nfs4" ]
+}
+
+# If $1 contains dracut_args "--mount", return <filesystem type>
+get_dracut_args_fstype()
+{
+ echo $1 | grep "\-\-mount" | sed "s/.*--mount .\(.*\)/\1/" | cut
-d' ' -f3
+}
+
+# If $1 contains dracut_args "--mount", return <device>
+get_dracut_args_target()
+{
+ 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
+
+ # strip the duplicated "/"
+ echo $_save_path | tr -s /
+}
+
+get_root_fs_device()
+{
+ findmnt -k -f -n -o SOURCE /
+}
+
+# Return the current underlaying device of a path, ignore bind mounts
^^^^^^^^^^^
typo underlying
Thanks
Philipp
+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
+}
+
+get_fs_type_from_target()
+{
+ 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
+}
+
+is_ssh_dump_target()
+{
+ [[ $(kdump_get_conf_val ssh) == *@* ]]
+}
+
+is_raw_dump_target()
+{
+ [[ $(kdump_get_conf_val raw) ]]
+}
+
+is_nfs_dump_target()
+{
+ if [[ $(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
+
+ 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 $_fstype; then
+ return 0
+ fi
+
+ return 1
+}
+
+is_fs_dump_target()
+{
+ [[ $(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix") ]]
+}
+
get_kdump_confs()
{
local config_opt config_val
diff --git a/kdump-lib.sh b/kdump-lib.sh
index f0ab1885..5a1fcf02 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -1,13 +1,13 @@
-#!/bin/sh
+#!/bin/bash
#
# Kdump common variables and functions
#
-DEFAULT_PATH="/var/crash/"
+. /usr/lib/kdump/kdump-lib-initramfs.sh
+
FENCE_KDUMP_CONFIG_FILE="/etc/sysconfig/fence_kdump"
FENCE_KDUMP_SEND="/usr/libexec/fence_kdump_send"
FADUMP_ENABLED_SYS_NODE="/sys/kernel/fadump_enabled"
-KDUMP_CONFIG_FILE="/etc/kdump.conf"
is_fadump_capable()
{
@@ -35,64 +35,6 @@ perror_exit() {
exit 1
}
-is_fs_type_nfs()
-{
- [ "$1" = "nfs" ] || [ "$1" = "nfs4" ]
-}
-
-is_ssh_dump_target()
-{
- [[ $(kdump_get_conf_val ssh) == *@* ]]
-}
-
-is_nfs_dump_target()
-{
- if [[ $(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
-
- 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 $_fstype; then
- return 0
- fi
-
- return 1
-}
-
-is_raw_dump_target()
-{
- [[ $(kdump_get_conf_val raw) ]]
-}
-
-is_fs_dump_target()
-{
- [[ $(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix") ]]
-}
-
-# Read kdump config in well formated style
-kdump_read_conf()
-{
- # Following steps are applied in order: strip tailing comment, strip tailing 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
-}
-
-# kdump_get_conf_val <config name>
-# retrieves config value defined in kdump.conf
-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
-}
-
# Check if fence kdump is configured in Pacemaker cluster
is_pcs_fence_kdump()
{
@@ -142,20 +84,6 @@ get_user_configured_dump_disk()
[ -b "$_target" ] && echo $_target
}
-get_root_fs_device()
-{
- findmnt -k -f -n -o SOURCE /
-}
-
-get_save_path()
-{
- local _save_path=$(kdump_get_conf_val path)
- [ -z "$_save_path" ] && _save_path=$DEFAULT_PATH
-
- # strip the duplicated "/"
- echo $_save_path | tr -s /
-}
-
get_block_dump_target()
{
local _target _path
@@ -261,46 +189,10 @@ get_bind_mount_source()
echo $_mnt$_fsroot$_path
}
-# Return the current underlaying 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
-}
-
-is_mounted()
-{
- findmnt -k -n $1 &>/dev/null
-}
-
-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 $@)
-
- [ -z "$_info" ] && [ -e "/etc/fstab" ] &&
_info=$(findmnt -s -n -r -o $_info_type --$_src_type $_src $@)
-
- echo $_info
-}
-
-get_fs_type_from_target()
-{
- get_mount_info FSTYPE source $1 -f
-}
-
get_mntopt_from_target()
{
get_mount_info OPTIONS source $1 -f
}
-# Find the general mount point of a dump target, not the bind mount point
-get_mntpoint_from_target()
-{
- # Expcilitly specify --source to findmnt could ensure non-bind mount is returned
- get_mount_info TARGET source $1 -f
-}
# Get the path where the target will be mounted in kdump kernel
# $1: kdump target device
@@ -345,11 +237,6 @@ is_atomic()
grep -q "ostree" /proc/cmdline
}
-is_ipv6_address()
-{
- echo $1 | grep -q ":"
-}
-
# get ip address or hostname from nfs/ssh config value
get_remote_host()
{
@@ -562,18 +449,6 @@ is_mount_in_dracut_args()
[[ $(kdump_get_conf_val dracut_args) == *" --mount "* ]]
}
-# If $1 contains dracut_args "--mount", return <filesystem type>
-get_dracut_args_fstype()
-{
- echo $1 | grep "\-\-mount" | sed "s/.*--mount .\(.*\)/\1/" | cut
-d' ' -f3
-}
-
-# If $1 contains dracut_args "--mount", return <device>
-get_dracut_args_target()
-{
- echo $1 | grep "\-\-mount" | sed "s/.*--mount .\(.*\)/\1/" | cut
-d' ' -f1
-}
-
check_crash_mem_reserved()
{
local mem_reserved