Previously /boot is asumed as the default dir where kernel and initrd
is put. However, the directory containing the running kernel image
on Atomic systems differs in each installation. Usually something like:
/boot/ostree/rhel-atomic-host-b50a015b637c353dc6554c851f8a1212b60d6121a7316715e4a63e2a4113cd72
This means that kdump will not find vmlinuz when installed on an
Atomic host, and thus the kdump service will fail to start.
In this patch, the kdump boot dir finding behaviour is a little changed.
Firstly check whether user has specify a directory explicitly in
/etc/sysconfig/kdump. If yes that is respected. Otherwise we assume
1st kernel and kdump kernel are put in the same place under /boot.
Then find it according /proc/cmdline and append it to /boot/
Note:
So now the KDUMP_BOOTDIR in /etc/sysconfig/kdump is set as empty.
If user set KDUMP_BOOTDIR to other directory, then he need to
take care of all related things himself. Or kdump script handle
it automatically.
Signed-off-by: Baoquan He <bhe(a)redhat.com>
---
kdump.sysconfig.i386 | 4 ++--
kdump.sysconfig.ppc64 | 4 ++--
kdump.sysconfig.ppc64le | 4 ++--
kdump.sysconfig.s390x | 4 ++--
kdump.sysconfig.x86_64 | 4 ++--
kdumpctl | 11 +++++++++++
kexec-kdump-howto.txt | 11 +++++++++++
7 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/kdump.sysconfig.i386 b/kdump.sysconfig.i386
index 0d26a66..bb10c93 100644
--- a/kdump.sysconfig.i386
+++ b/kdump.sysconfig.i386
@@ -25,8 +25,8 @@ KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices numa=off udev.children
# KEXEC_ARGS="--elf32-core-headers"
KEXEC_ARGS=""
-#Where to find the boot image
-KDUMP_BOOTDIR="/boot"
+#Where to find the boot image, you can specify a place here.
+KDUMP_BOOTDIR=""
#What is the image type used for kdump
KDUMP_IMG="vmlinuz"
diff --git a/kdump.sysconfig.ppc64 b/kdump.sysconfig.ppc64
index 923aa26..bd7fb9d 100644
--- a/kdump.sysconfig.ppc64
+++ b/kdump.sysconfig.ppc64
@@ -25,8 +25,8 @@ KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 noirqdistrib reset_devices cgroup_di
# KEXEC_ARGS="--elf32-core-headers"
KEXEC_ARGS=""
-#Where to find the boot image
-KDUMP_BOOTDIR="/boot"
+#Where to find the boot image , you can specify a place here.
+KDUMP_BOOTDIR=""
#What is the image type used for kdump
KDUMP_IMG="vmlinuz"
diff --git a/kdump.sysconfig.ppc64le b/kdump.sysconfig.ppc64le
index 923aa26..e70409c 100644
--- a/kdump.sysconfig.ppc64le
+++ b/kdump.sysconfig.ppc64le
@@ -25,8 +25,8 @@ KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 noirqdistrib reset_devices cgroup_di
# KEXEC_ARGS="--elf32-core-headers"
KEXEC_ARGS=""
-#Where to find the boot image
-KDUMP_BOOTDIR="/boot"
+#Where to find the boot image, you can specify a place here.
+KDUMP_BOOTDIR=""
#What is the image type used for kdump
KDUMP_IMG="vmlinuz"
diff --git a/kdump.sysconfig.s390x b/kdump.sysconfig.s390x
index 848b043..c45d27b 100644
--- a/kdump.sysconfig.s390x
+++ b/kdump.sysconfig.s390x
@@ -28,8 +28,8 @@ MKDUMPRD_ARGS=""
# KEXEC_ARGS="--elf32-core-headers"
KEXEC_ARGS=""
-#Where to find the boot image
-KDUMP_BOOTDIR="/boot"
+#Where to find the boot image, you can specify a place here.
+KDUMP_BOOTDIR=""
#What is the image type used for kdump
KDUMP_IMG="vmlinuz"
diff --git a/kdump.sysconfig.x86_64 b/kdump.sysconfig.x86_64
index 989c3c7..abf358a 100644
--- a/kdump.sysconfig.x86_64
+++ b/kdump.sysconfig.x86_64
@@ -25,8 +25,8 @@ KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory
# KEXEC_ARGS="--elf32-core-headers"
KEXEC_ARGS=""
-#Where to find the boot image
-KDUMP_BOOTDIR="/boot"
+#Where to find the boot image, you can specify a place here.
+KDUMP_BOOTDIR=""
#What is the image type used for kdump
KDUMP_IMG="vmlinuz"
diff --git a/kdumpctl b/kdumpctl
index 1c97405..fb30934 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -292,6 +292,15 @@ get_pcs_cluster_modified_files()
echo $modified_files
}
+check_boot_dir()
+{
+ #If user specify a boot dir for kdump kernel, let's use it. Otherwise
+ #assume it's in the same place as 1st kernel.
+ [ -n "$KDUMP_BOOTDIR" ] && return
+ eval $(cat /proc/cmdline | grep "BOOT_IMAGE" | cut -d' ' -f1)
+ KDUMP_BOOTDIR="/boot"$(dirname $BOOT_IMAGE)
+}
+
setup_target_initrd()
{
if [ $DEFAULT_DUMP_MODE == "fadump" ]; then
@@ -311,6 +320,8 @@ check_rebuild()
local _force_rebuild force_rebuild="0"
local initramfs_has_fadump
+ check_boot_dir
+
if [ -z "$KDUMP_KERNELVER" ]; then
kdump_kver=`uname -r`
else
diff --git a/kexec-kdump-howto.txt b/kexec-kdump-howto.txt
index 5582e40..a7ec3ce 100644
--- a/kexec-kdump-howto.txt
+++ b/kexec-kdump-howto.txt
@@ -404,6 +404,17 @@ Say foo.com:/export/tmp is mounted on /var. In this case dump target is
nfs server and path will be adjusted to "/crash" and dump will be saved to
foo.com:/export/tmp/crash/ directory.
+Kdump boot directory
+====================
+Usually kdump kernel is the same as 1st kernel. So kdump will try to find
+kdump kernel under /boot according to /proc/cmdline. E.g we execute below
+command and get an output:
+ cat /proc/cmdline
+ BOOT_IMAGE=/xxx/vmlinuz-3.yyy.zzz root=xxxx .....
+Then kdump kernel will be /boot/xxx/vmlinuz-3.yyy.zzz.
+However a variable KDUMP_BOOTDIR in /etc/sysconfig/kdump is provided to
+user if kdump kernel is put in a different directory. It's empty if not
+specified.
Kdump Post-Capture Executable
--
1.8.5.3