On 01/29/15 at 03:31pm, Dave Young wrote:
On 01/29/15 at 03:17pm, Baoquan He wrote:
> 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.
The last sentence can be dropped "It's empty if not specified", it is
confusing.
Otherwise:
Acked-by: Dave Young <dyoung(a)redhat.com>
Bao, thanks for the update.
Hmm, we need take care of ppc64 and s390x, at least do a test.
For s390x there's no grub, not sure if BOOT_IMAGE is same. so Bao can you change
the code to check [ -n "$BOOT_IMAGE" ] before calling dirname or there will be
an error even it works ok in functionality.
Thanks
Dave