Currently, while building the initrd with dump capture support, if a
network-based dump target is specified, network is configured in the
initial ramdisk which includes an interface name change if necessary.
When fadump is configured, the initrd used for booting production
kernel is rebuilt with dump capturing support. This initrd applies
the network configuration changes, intended for capturing a dump,
while booting the production kernel as well, potentially changing
the network interface name in production kernel. Avoid enforcing
kdump specific network parameters while boot production kernel to
tackle that problem. The first patch in this patch-set prefixes all
network related cmdline conf files with 'kdump' for graceful handling.
The second patch adds a dracut cmdline hook in the initrd to remove
network cmdline conf files while booting production kernel. The last
patch ensures that the network interface name is renamed only when
it is kernel assigned.
---
Hari Bathini (3):
add kdump prefix to network cmdline config files
fadump: avoid renaming network interface name during regular boot
avoid network interface rename when unnecessary
dracut-kdump-boot.sh | 12 ++++++++++++
dracut-module-setup.sh | 13 +++++--------
kexec-tools.spec | 3 +++
3 files changed, 20 insertions(+), 8 deletions(-)
create mode 100644 dracut-kdump-boot.sh
--
Show replies by date
Prefix 'kdump-' to cmdline config files used for bringing up network.
This gives flexibilty in handling network configuration gracefully in
different scenarios.
Signed-off-by: Hari Bathini <hbathini(a)linux.ibm.com>
---
dracut-module-setup.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index a10244b..0898a9a 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -291,7 +291,7 @@ kdump_setup_netdev() {
_proto=dhcp
fi
- _ip_conf="${initdir}/etc/cmdline.d/40ip.conf"
+ _ip_conf="${initdir}/etc/cmdline.d/40kdump-ip.conf"
_ip_opts=" ip=${_static}$(kdump_setup_ifname $_netdev):${_proto}"
# dracut doesn't allow duplicated configuration for same NIC, even they're
exactly the same.
@@ -360,9 +360,9 @@ kdump_install_net() {
# call kdump_install_net again and we don't want eth1 to be the default
# gateway.
if [ ! -f ${initdir}/etc/cmdline.d/60kdumpnic.conf ] &&
- [ ! -f ${initdir}/etc/cmdline.d/70bootdev.conf ]; then
+ [ ! -f ${initdir}/etc/cmdline.d/70kdump-bootdev.conf ]; then
echo "kdumpnic=$(kdump_setup_ifname $_netdev)" >
${initdir}/etc/cmdline.d/60kdumpnic.conf
- echo "bootdev=$(kdump_setup_ifname $_netdev)" >
${initdir}/etc/cmdline.d/70bootdev.conf
+ echo "bootdev=$(kdump_setup_ifname $_netdev)" >
${initdir}/etc/cmdline.d/70kdump-bootdev.conf
fi
}
When a network-based dump target is configured, the interface name is
prefixed with 'kdump-'. While this has no consequence for production
kernel when kdump is configured, the network interface name is changed
for production kernel as well when fadump is configured. Avoid that
and ensure network interface is renamed only while capturing vmcore.
Signed-off-by: Hari Bathini <hbathini(a)linux.ibm.com>
---
dracut-kdump-boot.sh | 12 ++++++++++++
dracut-module-setup.sh | 1 +
kexec-tools.spec | 3 +++
3 files changed, 16 insertions(+)
create mode 100644 dracut-kdump-boot.sh
diff --git a/dracut-kdump-boot.sh b/dracut-kdump-boot.sh
new file mode 100644
index 0000000..ba205dc
--- /dev/null
+++ b/dracut-kdump-boot.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# An Initrd with dump capturing support can boot a production kernel
+# as well (FADump). In such scenario, avoid enforcing such parameters
+# in production kernel that make sense only while capturing dump.
+[ ! -f /etc/fadump.initramfs ] && return
+
+if [ ! -f /proc/device-tree/rtas/ibm,kernel-dump ]; then
+ rm -f /etc/cmdline.d/40kdump-ip.conf
+ rm -f /etc/cmdline.d/60kdumpnic.conf
+ rm -f /etc/cmdline.d/70kdump-bootdev.conf
+fi
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index 0898a9a..9d0b956 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -745,6 +745,7 @@ install() {
cp "$moddir/kdump-emergency.target"
"$initdir/$systemdsystemunitdir/emergency.target"
# Also redirect dracut-emergency to kdump error handler
ln_r "$systemdsystemunitdir/emergency.service"
"$systemdsystemunitdir/dracut-emergency.service"
+ inst_hook cmdline 50 "$moddir/kdump-boot.sh"
# Check for all the devices and if any device is iscsi, bring up iscsi
# target. Ideally all this should be pushed into dracut iscsi module
diff --git a/kexec-tools.spec b/kexec-tools.spec
index a411182..8e3013f 100644
--- a/kexec-tools.spec
+++ b/kexec-tools.spec
@@ -44,6 +44,7 @@ Source106: dracut-kdump-capture.service
Source107: dracut-kdump-emergency.target
Source108: dracut-early-kdump.sh
Source109: dracut-early-kdump-module-setup.sh
+Source110: dracut-kdump-boot.sh
Requires(post): systemd-units
Requires(preun): systemd-units
@@ -205,6 +206,8 @@ cp %{SOURCE108}
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99earlyk
cp %{SOURCE109}
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99earlykdump/%{remove_dracut_early_kdump_prefix
%{SOURCE109}}
chmod 755
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99earlykdump/%{remove_dracut_prefix
%{SOURCE108}}
chmod 755
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99earlykdump/%{remove_dracut_early_kdump_prefix
%{SOURCE109}}
+cp %{SOURCE110}
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/%{remove_dracut_prefix
%{SOURCE110}}
+chmod 755
$RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/%{remove_dracut_prefix
%{SOURCE110}}
%define dracutlibdir %{_prefix}/lib/dracut
Currently, 'kdump-' is prefixed to the name of the network interface
for interface names such as net0, randomnet, persistentnet, etc., even
though they are persistent in nature. Ensure the interface name is
renamed only when it is a kernel assigned name (eth#).
Signed-off-by: Hari Bathini <hbathini(a)linux.ibm.com>
---
dracut-module-setup.sh | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index 9d0b956..a8a22bd 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -161,11 +161,7 @@ kdump_get_perm_addr() {
kdump_setup_ifname() {
local _ifname
- # If ifname already has 'kdump-' prefix, we must be switching from
- # fadump to kdump. Skip prefixing 'kdump-' in this case as adding
- # another prefix may truncate the ifname. Since an ifname with
- # 'kdump-' is already persistent, this should be fine.
- if [[ $1 =~ eth* ]] && [[ ! $1 =~ ^kdump-* ]]; then
+ if [[ $1 =~ ^eth[0-9] ]]; then
_ifname="kdump-$1"
else
_ifname="$1"