kdump/kdump-move-network-setup-to-module-setup.patch

239 lines
6.5 KiB
Diff

From: Petr Tesarik <ptesarik@suse.cz>
Date: Tue Sep 23 11:02:22 2014 +0200
Subject: Move dracut network command line to module-setup.sh
References: bnc#885897
Patch-mainline: v0.8.16
Git-commit: 16e3640c2bcbb08fb31c7c3da03a8fb726d7686a
This is mostly a cleanup to allow adding more code to module-setup.sh
without too much duplication.
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
---
init/mkdumprd | 54 -------------------------------
init/module-setup.sh | 76 ++++++++++++++++++++++++++++++++++++++++++---
init/setup-kdump.functions | 19 ++++++++++-
3 files changed, 90 insertions(+), 59 deletions(-)
--- a/init/mkdumprd
+++ b/init/mkdumprd
@@ -120,8 +120,6 @@ function run_mkinitrd()
# Create a new initrd using dracut {{{
function run_dracut()
{
- local modules="kdump"
-
DRACUT_ARGS="--force --hostonly --omit 'plymouth resume usrmount'"
DRACUT_ARGS="$DRACUT_ARGS --compress='xz -0 --check=crc32'"
@@ -136,60 +134,10 @@ function run_dracut()
i=$((i+1))
done
- # Check for additional modules
- neednet=
- for protocol in "${kdump_Protocol[@]}" ; do
- if [ "$protocol" = "nfs" ]; then
- modules="$modules nfs"
- fi
- if [ "$protocol" = "cifs" -o "$protocol" = "smb" ]; then
- modules="$modules cifs"
- fi
- if [ "$protocol" != "file" ]; then
- neednet=y
- fi
- done
-
- # network configuration
- if [ -n "$KDUMP_SMTP_SERVER" -a -n "$KDUMP_NOTIFICATION_TO" ]; then
- neednet=y
- fi
- if [ "$KDUMP_NETCONFIG" = "auto" ] ; then
- status_message "Network: auto"
- if [ -n "$neednet" ]; then
- DRACUT_ARGS+=" --kernel-cmdline 'rd.neednet=1 ip=any'"
- modules="$modules network"
- fi
- elif [ -z "$KDUMP_NETCONFIG" ] ; then
- status_message "Network: none"
- else
- interface=$(echo "$KDUMP_NETCONFIG" | cut -d ':' -f 1)
- mode=$(echo "$KDUMP_NETCONFIG" | cut -d ':' -f 2)
-
- if [ "$interface" = "default" ] ; then
- interface=$( kdump_default_netdev )
- status_message "Network interface: $interface (default)"
- else
- status_message "Network interface: $interface"
- fi
-
- if [ "$mode" = "static" ] ; then
- ipcfg="$(kdump_ip_config "$interface")"
- hwaddr=$(cat "/sys/class/net/$interface/address")
- status_message "Network mode: Static IP"
- DRACUT_ARGS+=" --kernel-cmdline 'rd.neednet=1 ip=$ipcfg::$hwaddr'"
- else
- status_message "Network mode: Automatic IP (DHCP)"
- DRACUT_ARGS+=" --kernel-cmdline 'rd.neednet=1 ip=${interface}:dhcp'"
- fi
- modules="$modules network"
- fi
-
# Make resolved variables visible to the dracut module
kdump_export_targets
- DRACUT_ARGS="$DRACUT_ARGS --add '$modules' $INITRD $KERNELVERSION"
- status_message "Calling dracut $DRACUT_ARGS"
+ 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
@@ -3,12 +3,51 @@
. /lib/kdump/setup-kdump.functions
+kdump_check_net() {
+ kdump_neednet=
+ for protocol in "${kdump_Protocol[@]}" ; do
+ if [ "$protocol" != "file" ]; then
+ kdump_neednet=y
+ fi
+ done
+
+ # network configuration
+ if [ -n "$KDUMP_SMTP_SERVER" -a -n "$KDUMP_NOTIFICATION_TO" ]; then
+ kdump_neednet=y
+ fi
+
+ # network explicitly disabled in configuration?
+ [ -z "$KDUMP_NETCONFIG" ] && kdump_neednet=
+}
+
check() {
+ # Get configuration
+ kdump_import_targets || return 1
+ kdump_get_config || return 1
+ kdump_check_net
+
return 255
}
depends() {
- echo drm
+ local -A _modules
+
+ # drm is needed to get console output, but it is not included
+ # automatically, because kdump does not use plymouth
+ _modules[drm]=
+
+ [ "$kdump_neednet" = y ] && _modules[network]=
+
+ for protocol in "${kdump_Protocol[@]}" ; do
+ if [ "$protocol" = "nfs" ]; then
+ _modules[nfs]=
+ fi
+ if [ "$protocol" = "cifs" -o "$protocol" = "smb" ]; then
+ _modules[cifs]=
+ fi
+ done
+
+ echo ${!_modules[@]}
}
kdump_add_mpath_dev() {
@@ -22,10 +61,39 @@ kdump_add_mpath_dev() {
fi
}
+kdump_cmdline_ip() {
+ [ "$kdump_neednet" = y ] || return 0
+
+ echo -n "rd.neednet=1"
+ if [ "$KDUMP_NETCONFIG" = "auto" ] ; then
+ echo -n " ip=any"
+ else
+ set -- ${KDUMP_NETCONFIG//:/ }
+ local _if=$1
+ local _mode=$2
+
+ if [ "$_if" = "default" ] ; then
+ _if=$(kdump_default_netdev)
+ fi
+ printf " %s" $(kdump_ifname_config "$_if")
+
+ if [ "$_mode" = "static" ] ; then
+ printf " %s" $(kdump_ip_config "$_if")
+ else
+ echo -n " ip=${_if}:dhcp"
+ fi
+ fi
+}
+
+cmdline() {
+ kdump_cmdline_ip
+}
+
install() {
- # Get configuration
- kdump_get_config || return 1
- kdump_import_targets
+ if [[ $hostonly_cmdline == "yes" ]] ; then
+ local _cmdline=$(cmdline)
+ [ -n "$_cmdline" ] && printf "%s\n" "$_cmdline" >> "${initdir}/etc/cmdline.d/99kdump.conf"
+ fi
# Get a list of required multipath devices
local kdump_mpath_wwids
--- a/init/setup-kdump.functions
+++ b/init/setup-kdump.functions
@@ -193,6 +193,20 @@ function kdump_netdev_mode() # {
} # }}}
#
+# Get the ifname parameter for a given device
+#
+# Parameters:
+# 1) device device name
+# Output:
+# ifname corresponding ifname= initrd parameter (or empty)
+function kdump_ifname_config() # {{{
+{
+ local iface="$1"
+ local hwaddr=$(<"/sys/class/net/$iface/address")
+ [ -n "$hwaddr" ] && echo "ifname=$iface:$hwaddr"
+} # }}}
+
+#
# Convert a CIDR prefix to IPv4 netmask
#
# Parameters:
@@ -219,7 +233,7 @@ kdump_prefix2netmask() { # {{{
# Get the ip= parameter for a given device
#
# Parameters:
-# 1) device device name (use default if empty)
+# 1) device device name
# Output:
# ip configuration string that can be used for the ip= initrd parameter
function kdump_ip_config() # {{{
@@ -249,7 +263,7 @@ function kdump_ip_config() # {{{
gwaddr=$(ip route show 0/0 | sed -n 's/.* via \([^ ]*\).*/\1/p')
hostname=$(hostname)
- echo "$ipaddr:$peeraddr:$gwaddr:$netmask:$hostname:$iface:none"
+ echo "ip=$ipaddr:$peeraddr:$gwaddr:$netmask:$hostname:$iface:none"
} # }}}
#
@@ -311,6 +325,7 @@ function kdump_import_targets()
eval "kdump_Host=( $KDUMP_x_Host )"
eval "kdump_Realpath=( $KDUMP_x_Realpath )"
eval "kdump_mnt=( $KDUMP_x_mnt )"
+ test ${#kdump_URL[@]} -gt 0
} # }}}
#