From 108f6ac2cc6988fd2516ec5f74078a73ccb5dc9e Mon Sep 17 00:00:00 2001 From: Amerigo Wang Date: Thu, 28 Jul 2011 22:50:43 +0800 Subject: [PATCH] mkdumprd: use shutdown module of dracut to handle reboot/shutdown/halt. --- kdump_dracut_modules/99kdumpbase/install | 3 +- kdump_dracut_modules/99kdumpbase/kdump-lib.sh | 48 -------- kdump_dracut_modules/99kdumpbase/kdump.sh | 105 ++++++++++++++++++ .../99kdumpbase/kdump_localfs.sh | 18 --- kexec-tools.spec | 7 +- mkdumprd | 14 +-- sources | 3 + 7 files changed, 121 insertions(+), 77 deletions(-) delete mode 100755 kdump_dracut_modules/99kdumpbase/kdump-lib.sh create mode 100755 kdump_dracut_modules/99kdumpbase/kdump.sh delete mode 100755 kdump_dracut_modules/99kdumpbase/kdump_localfs.sh diff --git a/kdump_dracut_modules/99kdumpbase/install b/kdump_dracut_modules/99kdumpbase/install index c237329..6e22aa9 100755 --- a/kdump_dracut_modules/99kdumpbase/install +++ b/kdump_dracut_modules/99kdumpbase/install @@ -5,6 +5,5 @@ inst "/bin/sync" "/bin/sync" inst "/usr/bin/reboot" "/bin/reboot" inst "/sbin/makedumpfile" "/sbin/makedumpfile" inst "/etc/kdump.conf" "/etc/kdump.conf" -inst "$moddir/kdump-lib.sh" "/lib/kdump-lib.sh" -inst_hook pre-pivot 01 "$moddir/kdump_localfs.sh" +inst_hook pre-pivot 01 "$moddir/kdump.sh" diff --git a/kdump_dracut_modules/99kdumpbase/kdump-lib.sh b/kdump_dracut_modules/99kdumpbase/kdump-lib.sh deleted file mode 100755 index 298f2b5..0000000 --- a/kdump_dracut_modules/99kdumpbase/kdump-lib.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh - -. /lib/dracut-lib.sh - -KDUMP_PATH="/var/crash" -CORE_COLLECTOR="makedumpfile -d 31 -c" -DEFAULT_ACTION="reboot -f" - -read_kdump_conf() -{ - local conf_file="/etc/kdump.conf" - if [ -f "$conf_file" ]; then - while read config_opt config_val; - do - case "$config_opt" in - path) - KDUMP_PATH="$config_val" - ;; - core_collector) - CORE_COLLECTOR="$config_val" - ;; - default) - case $config_val in - shell) - DEFAULT_ACTION="sh -i -l" - ;; - reboot) - DEFAULT_ACTION="reboot -f" - ;; - halt) - DEFAULT_ACTION="halt -f" - ;; - poweroff) - DEFAULT_ACTION="poweroff -f" - ;; - esac - ;; - esac - done < $conf_file - fi -} - -do_default_action() -{ - wait_for_loginit - $DEFAULT_ACTION -} - diff --git a/kdump_dracut_modules/99kdumpbase/kdump.sh b/kdump_dracut_modules/99kdumpbase/kdump.sh new file mode 100755 index 0000000..22d475f --- /dev/null +++ b/kdump_dracut_modules/99kdumpbase/kdump.sh @@ -0,0 +1,105 @@ +#!/bin/sh + +. /lib/dracut-lib.sh + +set -x +KDUMP_PATH="/var/crash" +CORE_COLLECTOR="makedumpfile -d 31 -c" +DEFAULT_ACTION="reboot -f" +DATEDIR=`date +%d.%m.%y-%T` +DUMP_INSTRUCTION="" + +do_default_action() +{ + wait_for_loginit + $DEFAULT_ACTION +} + +add_dump_instruction() +{ + if [ -z "$DUMP_INSTRUCTION" ] + then + DUMP_INSTRUCTION="$1" + else + DUMP_INSTRUCTION="$DUMP_INSTRUCTION && $1" + fi +} + +dump_rootfs() +{ + mount -o remount,rw $NEWROOT/ || return 1 + mkdir -p $NEWROOT/$KDUMP_PATH/$DATEDIR + $CORE_COLLECTOR /proc/vmcore $NEWROOT/$KDUMP_PATH/$DATEDIR/vmcore || return 1 + sync + return 0 +} + +dump_nfs() +{ + mount -o nolock -o tcp -t nfs $1 $NEWROOT/mnt/ + mkdir -p $NEWROOT/mnt/$KDUMP_PATH/$DATEDIR || return 1 + $CORE_COLLECTOR /proc/vmcore $NEWROOT/mnt/$KDUMP_PATH/$DATEDIR/vmcore || return 1 + umount $NEWROOT/mnt/ || return 1 + return 0 +} + +dump_ssh() +{ + ssh -q -o BatchMode=yes -o StrictHostKeyChecking=yes $1 mkdir -p $KDUMP_PATH/$DATEDIR || return 1 + scp -q -o BatchMode=yes -o StrictHostKeyChecking=yes /proc/vmcore "$1:$KDUMP_PATH/$DATEDIR" || return 1 + return 0 +} + +read_kdump_conf() +{ + local conf_file="/etc/kdump.conf" + if [ -f "$conf_file" ]; then + while read config_opt config_val; + do + case "$config_opt" in + path) + KDUMP_PATH="$config_val" + ;; + core_collector) + CORE_COLLECTOR="$config_val" + ;; + net) + if [ -n "$(echo $config_val | grep @)" ] + then + add_dump_instruction "dump_ssh $config_val || do_default_action" + else + add_dump_instruction "dump_nfs $config_val || do_default_action" + fi + ;; + default) + case $config_val in + shell) + DEFAULT_ACTION="sh -i -l" + ;; + reboot) + DEFAULT_ACTION="reboot -f" + ;; + halt) + DEFAULT_ACTION="halt -f" + ;; + poweroff) + DEFAULT_ACTION="poweroff -f" + ;; + esac + ;; + esac + done < $conf_file + fi +} + +read_kdump_conf + +if [ -n "$DUMP_INSTRUCTION" ] +then + eval "$DUMP_INSTRUCTION" +else + dump_rootfs + do_default_action +fi + + diff --git a/kdump_dracut_modules/99kdumpbase/kdump_localfs.sh b/kdump_dracut_modules/99kdumpbase/kdump_localfs.sh deleted file mode 100755 index 90e0508..0000000 --- a/kdump_dracut_modules/99kdumpbase/kdump_localfs.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -. /lib/kdump-lib.sh -read_kdump_conf -set -x - -# We have the root file system mounted under $NEWROOT, so copy -# the vmcore there and call it a day -# -DATEDIR=`date +%d.%m.%y-%T` - -mount -o remount,rw $NEWROOT/ -mkdir -p $NEWROOT/$KDUMP_PATH/$DATEDIR -$CORE_COLLECTOR /proc/vmcore $NEWROOT/$KDUMP_PATH/$DATEDIR/vmcore -sync - -do_default_action - diff --git a/kexec-tools.spec b/kexec-tools.spec index 170331a..1e5d83b 100644 --- a/kexec-tools.spec +++ b/kexec-tools.spec @@ -1,6 +1,6 @@ Name: kexec-tools Version: 2.0.2 -Release: 14%{?dist} +Release: 15%{?dist} License: GPLv2 Group: Applications/System Summary: The kexec/kdump userspace component. @@ -169,7 +169,7 @@ mkdir -p -m755 $RPM_BUILD_ROOT/etc/kdump-adv-conf tar -C $RPM_BUILD_ROOT/etc/kdump-adv-conf -jxvf %{SOURCE100} chmod 755 $RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/check chmod 755 $RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/install -chmod 755 $RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/kdump_localfs.sh +chmod 755 $RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/99kdumpbase/kdump.sh #and move the custom dracut modules to the dracut directory @@ -281,6 +281,9 @@ done %changelog +* Wed Jul 28 2011 Cong Wang - 2.0.2-15 +- Use shutdown module of dracut to handle reboot/shutdown/halt. + * Wed Jul 27 2011 Cong Wang - 2.0.2-14 - Wait for loginit. diff --git a/mkdumprd b/mkdumprd index 6ba9d9f..9a1edcc 100644 --- a/mkdumprd +++ b/mkdumprd @@ -10,7 +10,7 @@ export IN_KDUMP=1 conf_file="/etc/kdump.conf" extra_modules="" -dracut_args="-H -o i18n -o plymouth" +dracut_args="-H -o i18n -o plymouth --add shutdown -c /dev/null" add_dracut_arg() { dracut_args="$dracut_args $*" @@ -38,12 +38,12 @@ done # $1 target device # $2 if this is a raw dump -dump_local() { +check_local() { return } # $1 remote target -dump_remote() { +check_remote() { return } @@ -55,14 +55,14 @@ if [ -n "$conf_file" ]; then extra_modules="$extra_modules $config_val" ;; ext[234]|xfs|btrfs|minix) - dump_local "$config_val" 0 + check_local "$config_val" 0 ;; raw) - dump_local "$config_val" 1 + check_local "$config_val" 1 ;; net) add_dracut_arg "--add network" - dump_remote "$config_val" + check_remote "$config_val" ;; core_collector) add_dracut_arg "-I ${config_val% *}" @@ -75,7 +75,6 @@ if [ -n "$conf_file" ]; then then continue fi - dump_local "" ;; esac done < $conf_file @@ -87,4 +86,5 @@ then fi dracut $dracut_args "$@" +exit $? diff --git a/sources b/sources index 1950ce3..afce193 100644 --- a/sources +++ b/sources @@ -9,3 +9,6 @@ d872bdde29eb036cd59e7b71c148fca6 dracut-files.tbz2 7d1516ae8af7000cec149b9409f9b859 dracut-files.tbz2 ea7a345cbaa0d3d9a9dbd46631155550 dracut-files.tbz2 d220ff5e4b07c34701d9a1fe991ef2e4 dracut-files.tbz2 +1548d83e2713660c4cbd2c284fdad25b dracut-files.tbz2 +adea715e719a4c460c41d8134aafa95b dracut-files.tbz2 +c7e9dd35476cb33f09f22037f6c16982 dracut-files.tbz2