Accepting request 599435 from home:ptesarik:branches:Kernel:kdump
- kdump-additional-mounts-in-dracut-module.patch: Handle additional mounts in the kdump dracut module (bsc#1089917). - kdump-run-mkinitrd-if-fadump-is-active.patch: Run mkinitrd if fadump is active (bsc#1089917). OBS-URL: https://build.opensuse.org/request/show/599435 OBS-URL: https://build.opensuse.org/package/show/Kernel:kdump/kdump?expand=0&rev=163
This commit is contained in:
parent
adcc9c6f39
commit
dd914e044d
206
kdump-additional-mounts-in-dracut-module.patch
Normal file
206
kdump-additional-mounts-in-dracut-module.patch
Normal file
@ -0,0 +1,206 @@
|
||||
From: Petr Tesarik <ptesarik@suse.com>
|
||||
Date: Fri, 20 Apr 2018 17:26:22 +0200
|
||||
Subject: Handle additional mounts in the kdump dracut module
|
||||
References: bsc#1089917
|
||||
Upstream: merged
|
||||
Git-commit: bd3cc31f3b91e81e6acc00f314142bbda9ace495
|
||||
|
||||
This change is needed to fix FADUMP, because in that case the kdump
|
||||
initrd is also used during normal boot, so it can get overwritten
|
||||
with an invocation of "mkinitrd".
|
||||
|
||||
Currently, dracut does not provide an API to add more mounts from a
|
||||
module, so part of the logic which sets up host devices and
|
||||
filesystem mappings must be copied to the kdump module.
|
||||
|
||||
The approach is not clean, but probably still better than passing
|
||||
some variables from mkdumprd to the kdump dracut module through
|
||||
environment variables, which was done before. Yes, this means that
|
||||
the ugly export/import functions can be removed and forgotten.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.com>
|
||||
---
|
||||
init/mkdumprd | 14 --------
|
||||
init/module-setup.sh | 75 +++++++++++++++++++++++++++++++++++++--------
|
||||
init/setup-kdump.functions | 53 -------------------------------
|
||||
3 files changed, 62 insertions(+), 80 deletions(-)
|
||||
|
||||
--- a/init/mkdumprd
|
||||
+++ b/init/mkdumprd
|
||||
@@ -128,20 +128,6 @@ function run_dracut()
|
||||
KERNELVERSION=$(get_kernel_version "$KERNEL")
|
||||
fi
|
||||
|
||||
- # add mount points
|
||||
- kdump_get_mountpoints || return 1
|
||||
- i=0
|
||||
- while [ $i -lt ${#kdump_mnt[@]} ]
|
||||
- do
|
||||
- if [ -n "${kdump_mnt[i]}" ] ; then
|
||||
- DRACUT_ARGS="$DRACUT_ARGS --mount '${kdump_dev[i]} ${kdump_mnt[i]} ${kdump_fstype[i]} ${kdump_opts[i]}'"
|
||||
- fi
|
||||
- i=$((i+1))
|
||||
- done
|
||||
-
|
||||
- # Make resolved variables visible to the dracut module
|
||||
- kdump_export_targets
|
||||
-
|
||||
DRACUT_ARGS="$DRACUT_ARGS --add 'kdump' $INITRD $KERNELVERSION"
|
||||
echo "Regenerating kdump initrd ..." >&2
|
||||
eval "bash -$- $DRACUT $DRACUT_ARGS"
|
||||
--- a/init/module-setup.sh
|
||||
+++ b/init/module-setup.sh
|
||||
@@ -45,10 +45,71 @@ kdump_check_net() {
|
||||
kdump_ifname_config "$kdump_host_if"
|
||||
}
|
||||
|
||||
+kdump_get_fs_type() {
|
||||
+ local _dev="/dev/block/$1"
|
||||
+ local _fstype
|
||||
+ if [ -b "$_dev" ] && _fstype=$(get_fs_env "$_dev") ; then
|
||||
+ host_fs_types["$(readlink -f "$_dev")"]="$_fstype"
|
||||
+ elif _fstype=$(find_dev_fstype "$_dev"); then
|
||||
+ host_fs_types["$_dev"]="$_fstype"
|
||||
+ fi
|
||||
+ return 1
|
||||
+}
|
||||
+
|
||||
+kdump_add_host_dev() {
|
||||
+ local _dev=$1
|
||||
+ [[ " ${host_devs[@]} " == *" $_dev "* ]] && return
|
||||
+ host_devs+=( "$_dev" )
|
||||
+ check_block_and_slaves_all kdump_get_fs_type "$(get_maj_min "$_dev")"
|
||||
+}
|
||||
+
|
||||
+kdump_add_mnt() {
|
||||
+ local _idx=$1
|
||||
+ local _dev="${kdump_dev[_idx]}"
|
||||
+ local _mp="${kdump_mnt[_idx]}"
|
||||
+
|
||||
+ # Convert system root mounts to bind mounts
|
||||
+ if [ "$KDUMP_FADUMP" = "yes" -a "${_mp%/*}" = "/kdump" ] ; then
|
||||
+ mkdir -p "$initdir/etc"
|
||||
+ echo "/sysroot $_mp none bind 0 0" >> "$initdir/etc/fstab"
|
||||
+ return
|
||||
+ fi
|
||||
+
|
||||
+ case "$_dev" in
|
||||
+ UUID=*|LABEL=*|PARTUUID=*|PARTLABLE=*)
|
||||
+ _dev=$(blkid -l -t "$_dev" -o device)
|
||||
+ ;;
|
||||
+ esac
|
||||
+ kdump_add_host_dev "$_dev"
|
||||
+ host_fs_types["$_dev"]="${kdump_fstype[_idx]}"
|
||||
+ if [ "${kdump_fstype[_idx]}" = btrfs ] ; then
|
||||
+ for _dev in $() ; do
|
||||
+ kdump_add_host_dev "$_dev"
|
||||
+ done
|
||||
+ fi
|
||||
+
|
||||
+ mkdir -p "$initdir/etc"
|
||||
+ local _passno=2
|
||||
+ [ "${kdump_fstype[_idx]}" = nfs ] && _passno=0
|
||||
+ echo "${kdump_dev[_idx]} ${kdump_mnt[_idx]} ${kdump_fstype[_idx]} ${kdump_opts[_idx]} 0 $_passno" >> "$initdir/etc/fstab"
|
||||
+}
|
||||
+
|
||||
check() {
|
||||
# Get configuration
|
||||
- kdump_import_targets || return 1
|
||||
kdump_get_config || return 1
|
||||
+
|
||||
+ # add mount points
|
||||
+ if ! [[ $mount_needs ]] ; then
|
||||
+ kdump_get_mountpoints || return 1
|
||||
+
|
||||
+ local _i=0
|
||||
+ while [ $_i -lt ${#kdump_mnt[@]} ]
|
||||
+ do
|
||||
+ [ -n "${kdump_mnt[_i]}" ] && kdump_add_mnt $_i
|
||||
+ _i=$((_i+1))
|
||||
+ done
|
||||
+ fi
|
||||
+
|
||||
kdump_check_net
|
||||
|
||||
return 255
|
||||
@@ -188,18 +249,6 @@ install() {
|
||||
kdump_map_mpath_wwid
|
||||
for_each_host_dev_and_slaves_all kdump_add_mpath_dev
|
||||
|
||||
- # Convert system root mounts to bind mounts
|
||||
- if [ "$KDUMP_FADUMP" = "yes" ] ; then
|
||||
- local i line
|
||||
- for i in "${!fstab_lines[@]}"
|
||||
- do
|
||||
- line=( ${fstab_lines[i]} )
|
||||
- if [ "${line[1]%/*}" = "/kdump" ] ; then
|
||||
- fstab_lines[i]="/sysroot ${line[1]} none bind 0 0"
|
||||
- fi
|
||||
- done
|
||||
- fi
|
||||
-
|
||||
kdump_setup_files "$initdir" "$kdump_mpath_wwids"
|
||||
|
||||
inst_hook cmdline 50 "$moddir/kdump-root.sh"
|
||||
--- a/init/setup-kdump.functions
|
||||
+++ b/init/setup-kdump.functions
|
||||
@@ -666,59 +666,6 @@ function kdump_get_targets() # {
|
||||
} # }}}
|
||||
|
||||
#
|
||||
-# Print array content so that it can be used as bash input
|
||||
-#
|
||||
-# Parameters:
|
||||
-# 1) name array variable to be printed
|
||||
-# Output:
|
||||
-# shell code that can be passed to eval to restore the array
|
||||
-function kdump_print_array()
|
||||
-{
|
||||
- local name="$1"
|
||||
- local i
|
||||
- echo -n "( "
|
||||
- for i in $(eval printf \"%q \" \"\${!$name[@]}\")
|
||||
- do
|
||||
- printf "[%s]=%q " "$i" "$(eval echo \"\${$name[i]}\")"
|
||||
- done
|
||||
- echo ")"
|
||||
-}
|
||||
-
|
||||
-#
|
||||
-# Export kdump_*[] arrays, returned by kdump_get_targets.
|
||||
-#
|
||||
-# Input variables:
|
||||
-# kdump_URL[], kdump_Protocol[], kdump_Host[], kdump_Realpath,
|
||||
-# kdump_mnt[]
|
||||
-# Output variables (exported):
|
||||
-# KDUMP_x_URL, KDUMP_x_Protocol, KDUMP_x_Host, KDUMP_x_Realpath,
|
||||
-# KDUMP_x_mnt
|
||||
-function kdump_export_targets() # {{{
|
||||
-{
|
||||
- export KDUMP_x_URL=$( kdump_print_array kdump_URL )
|
||||
- export KDUMP_x_Protocol=$( kdump_print_array kdump_Protocol )
|
||||
- export KDUMP_x_Host=$( kdump_print_array kdump_Host )
|
||||
- export KDUMP_x_Realpath=$( kdump_print_array kdump_Realpath )
|
||||
- export KDUMP_x_mnt=$( kdump_print_array kdump_mnt )
|
||||
- export kdump_max
|
||||
-} # }}}
|
||||
-
|
||||
-#
|
||||
-# Import kdump_*[] arrays from environment.
|
||||
-#
|
||||
-# Input/Output Variables:
|
||||
-# reverse of kdump_export_arrays
|
||||
-function kdump_import_targets() # {{{
|
||||
-{
|
||||
- eval "kdump_URL=$KDUMP_x_URL"
|
||||
- eval "kdump_Protocol=$KDUMP_x_Protocol"
|
||||
- eval "kdump_Host=$KDUMP_x_Host"
|
||||
- eval "kdump_Realpath=$KDUMP_x_Realpath"
|
||||
- eval "kdump_mnt=$KDUMP_x_mnt"
|
||||
- test ${#kdump_URL[@]} -gt 0
|
||||
-} # }}}
|
||||
-
|
||||
-#
|
||||
# Read and normalize /etc/fstab and /proc/mounts (if exists).
|
||||
# The following transformations are done:
|
||||
# - initial TABs and SPACEs are removed
|
58
kdump-run-mkinitrd-if-fadump-is-active.patch
Normal file
58
kdump-run-mkinitrd-if-fadump-is-active.patch
Normal file
@ -0,0 +1,58 @@
|
||||
From: Petr Tesarik <ptesarik@suse.com>
|
||||
Date: Fri, 20 Apr 2018 17:54:19 +0200
|
||||
Subject: Run mkinitrd if fadump is active
|
||||
References: bsc#1089917
|
||||
Upstream: merged
|
||||
Git-commit: a25562cb0ff7d2b6d6df2dded8bd29c2e4d7e9ea
|
||||
|
||||
With fadump, the default initrd is used. It is better to call the
|
||||
normal mkinitrd script to achieve consistent behaviour between
|
||||
updates triggered by kdump and other changes that may require a
|
||||
rebuild of the initrd.
|
||||
|
||||
Signed-off-by: Petr Tesarik <ptesarik@suse.com>
|
||||
---
|
||||
init/mkdumprd | 25 ++++++++++++++++++++++++-
|
||||
1 file changed, 24 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/init/mkdumprd
|
||||
+++ b/init/mkdumprd
|
||||
@@ -117,6 +117,25 @@ function run_mkinitrd()
|
||||
} # }}}
|
||||
|
||||
#
|
||||
+# Create a new fadump initrd using mkinitrd {{{
|
||||
+function run_mkinitrd_fadump()
|
||||
+{
|
||||
+ # With fadump, we have no control over which kernel will be booted
|
||||
+ # to save the dump, so do not add any versions here.
|
||||
+ MKINITRD_ARGS=""
|
||||
+
|
||||
+ #
|
||||
+ # if -q is specified, don't print mkinitrd output
|
||||
+ if (( $QUIET )) ; then
|
||||
+ MKINITRD_ARGS="$MKINITRD_ARGS &>/dev/null"
|
||||
+ fi
|
||||
+
|
||||
+ status_message "Calling mkinitrd $MKINITRD_ARGS"
|
||||
+ echo "Regenerating initrd ..." >&2
|
||||
+ eval "bash -$- /sbin/mkinitrd $MKINITRD_ARGS"
|
||||
+} # }}}
|
||||
+
|
||||
+#
|
||||
# Create a new initrd using dracut {{{
|
||||
function run_dracut()
|
||||
{
|
||||
@@ -219,7 +238,11 @@ if (( ! $FORCE )) ; then
|
||||
fi
|
||||
|
||||
if [ -e $DRACUT ] ; then
|
||||
- run_dracut
|
||||
+ if [ "$KDUMP_FADUMP" = "yes" ] ; then
|
||||
+ run_mkinitrd_fadump
|
||||
+ else
|
||||
+ run_dracut
|
||||
+ fi
|
||||
ret=$?
|
||||
else
|
||||
run_mkinitrd
|
@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 20 16:06:40 UTC 2018 - ptesarik@suse.com
|
||||
|
||||
- kdump-additional-mounts-in-dracut-module.patch: Handle additional
|
||||
mounts in the kdump dracut module (bsc#1089917).
|
||||
- kdump-run-mkinitrd-if-fadump-is-active.patch: Run mkinitrd if
|
||||
fadump is active (bsc#1089917).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 6 16:48:57 UTC 2018 - ptesarik@suse.com
|
||||
|
||||
|
@ -96,6 +96,8 @@ Patch46: %{name}-pass-IPv6-address-prefix-separately.patch
|
||||
Patch47: %{name}-pass-all-IP-routes-to-kdump-environment.patch
|
||||
Patch48: %{name}-remove-IPv6-brackets-for-getaddrinfo.patch
|
||||
Patch49: %{name}-skip-IPv4-if-no-address.patch
|
||||
Patch50: %{name}-additional-mounts-in-dracut-module.patch
|
||||
Patch51: %{name}-run-mkinitrd-if-fadump-is-active.patch
|
||||
BuildRequires: asciidoc
|
||||
BuildRequires: cmake
|
||||
BuildRequires: gcc-c++
|
||||
@ -207,6 +209,8 @@ cp %{S:1} tests/data/
|
||||
%patch47 -p1
|
||||
%patch48 -p1
|
||||
%patch49 -p1
|
||||
%patch50 -p1
|
||||
%patch51 -p1
|
||||
|
||||
%build
|
||||
export CFLAGS="%{optflags}"
|
||||
|
Loading…
x
Reference in New Issue
Block a user