Now all dracut module dependency install code are in one place in module-setup.sh, and allows user to omit non-mandatory modules.
For example, squash module could be omitted by using: dracut_args --omit squash
Kairui Song (3): Move some dracut module dependencies checks to module-setup.sh Add a helper to omit non-mandatory dracut module Move watchdog detect and install code to module-setup.sh
dracut-module-setup.sh | 21 ++++++++++++++++++--- kdump-lib.sh | 12 ++++++++++++ mkdumprd | 27 --------------------------- 3 files changed, 30 insertions(+), 30 deletions(-)
depend() in module-setup.sh is a better place to setup dracut module dependency, it will do early check, and fail early if needed module is missing. Also remove a unneeded helper add_dracut_module.
Also remove the unnecessary return in depend() function.
Signed-off-by: Kairui Song kasong@redhat.com --- dracut-module-setup.sh | 9 ++++++++- mkdumprd | 9 --------- 2 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index a186570..e68ad1b 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -36,6 +36,14 @@ depends() { dwarning "Required modules to build a squashed kdump image is missing!" fi
+ if is_ssh_dump_target; then + _dep="$_dep ssh-client" + fi + + if [ "$(uname -m)" = "s390x" ]; then + _dep="$_dep znet" + fi + if [ -n "$( find /sys/devices -name drm )" ] || [ -d /sys/module/hyperv_fb ]; then _dep="$_dep drm" fi @@ -45,7 +53,6 @@ depends() { fi
echo $_dep - return 0 }
kdump_is_bridge() { diff --git a/mkdumprd b/mkdumprd index 3ea1d19..dfc8694 100644 --- a/mkdumprd +++ b/mkdumprd @@ -51,10 +51,6 @@ add_dracut_arg() { dracut_args="$dracut_args $@" }
-add_dracut_module() { - add_dracut_arg "--add" ""$1"" -} - add_dracut_mount() { add_dracut_arg "--mount" ""$1"" } @@ -410,10 +406,6 @@ if [ -f "$keyfile" ]; then SSH_KEY_LOCATION=$(/usr/bin/readlink -m $keyfile) fi
-if [ "$(uname -m)" = "s390x" ]; then - add_dracut_module "znet" -fi - if is_wdt_addition_needed; then add_dracut_arg "-a" "watchdog" fi @@ -446,7 +438,6 @@ do then mkdir_save_path_ssh $config_val check_size ssh $config_val - add_dracut_module "ssh-client" add_dracut_sshkey "$SSH_KEY_LOCATION" else perror_exit "Bad ssh dump target $config_val"
Use dracut_args to omit some non-mandatory modules.
Signed-off-by: Kairui Song kasong@redhat.com --- dracut-module-setup.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index e68ad1b..8c5e148 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -20,6 +20,10 @@ check() { depends() { local _dep="base shutdown"
+ add_opt_module() { + [[ " $omit_dracutmodules " != *\ $1\ * ]] && _dep="$_dep $1" + } + is_squash_available() { for kmodule in squashfs overlay loop; do if [ -z "$KDUMP_KERNELVER" ]; then @@ -31,7 +35,7 @@ depends() { }
if is_squash_available && ! is_fadump_capable; then - _dep="$_dep squash" + add_opt_module squash else dwarning "Required modules to build a squashed kdump image is missing!" fi @@ -45,7 +49,7 @@ depends() { fi
if [ -n "$( find /sys/devices -name drm )" ] || [ -d /sys/module/hyperv_fb ]; then - _dep="$_dep drm" + add_opt_module drm fi
if is_generic_fence_kdump || is_pcs_fence_kdump; then
Signed-off-by: Kairui Song kasong@redhat.com --- dracut-module-setup.sh | 4 ++++ kdump-lib.sh | 12 ++++++++++++ mkdumprd | 18 ------------------ 3 files changed, 16 insertions(+), 18 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 8c5e148..db9250d 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -40,6 +40,10 @@ depends() { dwarning "Required modules to build a squashed kdump image is missing!" fi
+ if is_wdt_active; then + add_opt_module watchdog + fi + if is_ssh_dump_target; then _dep="$_dep ssh-client" fi diff --git a/kdump-lib.sh b/kdump-lib.sh index e18c473..119b7e2 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -477,6 +477,18 @@ is_wdt_mod_omitted() { return $ret }
+is_wdt_active() { + local active + + [ -d /sys/class/watchdog ] || return 1 + for dir in /sys/class/watchdog/*; do + [ -f "$dir/state" ] || continue + active=$(< "$dir/state") + [ "$active" = "active" ] && return 0 + done + return 1 +} + # If "dracut_args" contains "--mount" information, use it # directly without any check(users are expected to ensure # its correctness). diff --git a/mkdumprd b/mkdumprd index dfc8694..baa6c06 100644 --- a/mkdumprd +++ b/mkdumprd @@ -33,20 +33,6 @@ trap ' # clean up after ourselves no matter how we die. trap 'exit 1;' SIGINT
-is_wdt_addition_needed() { - local active - - is_wdt_mod_omitted - [[ $? -eq 0 ]] && return 1 - [[ -d /sys/class/watchdog/ ]] || return 1 - for dir in /sys/class/watchdog/*; do - [[ -f "$dir/state" ]] || continue - active=$(< "$dir/state") - [[ "$active" = "active" ]] && return 0 - done - return 1 -} - add_dracut_arg() { dracut_args="$dracut_args $@" } @@ -406,10 +392,6 @@ if [ -f "$keyfile" ]; then SSH_KEY_LOCATION=$(/usr/bin/readlink -m $keyfile) fi
-if is_wdt_addition_needed; then - add_dracut_arg "-a" "watchdog" -fi - while read config_opt config_val; do # remove inline comments after the end of a directive.
Signed-off-by: Kairui Song kasong@redhat.com --- dracut-module-setup.sh | 4 ++++ kdump-lib.sh | 12 ++++++++++++ mkdumprd | 18 ------------------ 3 files changed, 16 insertions(+), 18 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 8c5e148..db9250d 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -40,6 +40,10 @@ depends() { dwarning "Required modules to build a squashed kdump image is missing!" fi
+ if is_wdt_active; then + add_opt_module watchdog + fi + if is_ssh_dump_target; then _dep="$_dep ssh-client" fi diff --git a/kdump-lib.sh b/kdump-lib.sh index e18c473..119b7e2 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -477,6 +477,18 @@ is_wdt_mod_omitted() { return $ret }
+is_wdt_active() { + local active + + [ -d /sys/class/watchdog ] || return 1 + for dir in /sys/class/watchdog/*; do + [ -f "$dir/state" ] || continue + active=$(< "$dir/state") + [ "$active" = "active" ] && return 0 + done + return 1 +} + # If "dracut_args" contains "--mount" information, use it # directly without any check(users are expected to ensure # its correctness). diff --git a/mkdumprd b/mkdumprd index dfc8694..baa6c06 100644 --- a/mkdumprd +++ b/mkdumprd @@ -33,20 +33,6 @@ trap ' # clean up after ourselves no matter how we die. trap 'exit 1;' SIGINT
-is_wdt_addition_needed() { - local active - - is_wdt_mod_omitted - [[ $? -eq 0 ]] && return 1 - [[ -d /sys/class/watchdog/ ]] || return 1 - for dir in /sys/class/watchdog/*; do - [[ -f "$dir/state" ]] || continue - active=$(< "$dir/state") - [[ "$active" = "active" ]] && return 0 - done - return 1 -} - add_dracut_arg() { dracut_args="$dracut_args $@" } @@ -406,10 +392,6 @@ if [ -f "$keyfile" ]; then SSH_KEY_LOCATION=$(/usr/bin/readlink -m $keyfile) fi
-if is_wdt_addition_needed; then - add_dracut_arg "-a" "watchdog" -fi - while read config_opt config_val; do # remove inline comments after the end of a directive.
Hi, Kairui
That's a good idea to put the module dependency checks into the depends() in module-setup.sh. Thanks for the improvement.
Acked-by: Lianbo Jiang lijiang@redhat.com
在 2020年10月15日 18:16, Kairui Song 写道:
Now all dracut module dependency install code are in one place in module-setup.sh, and allows user to omit non-mandatory modules.
For example, squash module could be omitted by using: dracut_args --omit squash
Kairui Song (3): Move some dracut module dependencies checks to module-setup.sh Add a helper to omit non-mandatory dracut module Move watchdog detect and install code to module-setup.sh
dracut-module-setup.sh | 21 ++++++++++++++++++--- kdump-lib.sh | 12 ++++++++++++ mkdumprd | 27 --------------------------- 3 files changed, 30 insertions(+), 30 deletions(-)