cleanup: extract functions from kdump.sh to kdump-lib-initramfs.sh
Extract functions from kdump.sh, and construct kdump-lib-initramfs.sh as kdump common functions/varaibles library. kdump-lib-initramfs.sh will include kdump-lib.sh, because it will use the functions from there. IOW, kdump-lib-initramfs.sh will be a superset of kdump-lib.sh So after this cleanup: - scripts running in 1st kernel only have to include kdump-lib.sh - scripts running in 2nd kernel only have to include kdump-lib-initramfs.sh Signed-off-by: WANG Chao <chaowang@redhat.com> Acked-by: Vivek Goyal <vgoyal@redhat.com> Acked-by: Dave Young <dyoung@redhat.com>
This commit is contained in:
parent
7f2717aa0a
commit
3b27570bea
150
dracut-kdump.sh
150
dracut-kdump.sh
@ -7,30 +7,14 @@ fi
|
||||
|
||||
exec &> /dev/console
|
||||
. /lib/dracut-lib.sh
|
||||
. /lib/kdump-lib.sh
|
||||
. /lib/kdump-lib-initramfs.sh
|
||||
|
||||
if [ -f "$initdir/lib/dracut/no-emergency-shell" ]; then
|
||||
rm -f -- $initdir/lib/dracut/no-emergency-shell
|
||||
fi
|
||||
|
||||
set -o pipefail
|
||||
KDUMP_PATH="/var/crash"
|
||||
CORE_COLLECTOR=""
|
||||
DEFAULT_CORE_COLLECTOR="makedumpfile -l --message-level 1 -d 31"
|
||||
DMESG_COLLECTOR="/sbin/vmcore-dmesg"
|
||||
DEFAULT_ACTION="reboot -f"
|
||||
DATEDIR=`date +%Y.%m.%d-%T`
|
||||
HOST_IP='127.0.0.1'
|
||||
DUMP_INSTRUCTION=""
|
||||
SSH_KEY_LOCATION="/root/.ssh/kdump_id_rsa"
|
||||
KDUMP_SCRIPT_DIR="/kdumpscripts"
|
||||
DD_BLKSIZE=512
|
||||
FINAL_ACTION="reboot -f"
|
||||
DUMP_RETVAL=0
|
||||
conf_file="/etc/kdump.conf"
|
||||
KDUMP_PRE=""
|
||||
KDUMP_POST=""
|
||||
MOUNTS=""
|
||||
|
||||
export PATH=$PATH:$KDUMP_SCRIPT_DIR
|
||||
|
||||
@ -48,27 +32,6 @@ do_dump()
|
||||
return $_ret
|
||||
}
|
||||
|
||||
do_umount()
|
||||
{
|
||||
if [ -n "$MOUNTS" ]; then
|
||||
for mount in $MOUNTS; do
|
||||
ismounted $mount && umount -R $mount
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
do_final_action()
|
||||
{
|
||||
do_umount
|
||||
eval $FINAL_ACTION
|
||||
}
|
||||
|
||||
do_default_action()
|
||||
{
|
||||
wait_for_loginit
|
||||
eval $DEFAULT_ACTION
|
||||
}
|
||||
|
||||
do_kdump_pre()
|
||||
{
|
||||
if [ -n "$KDUMP_PRE" ]; then
|
||||
@ -88,39 +51,6 @@ add_dump_code()
|
||||
DUMP_INSTRUCTION=$1
|
||||
}
|
||||
|
||||
# dump_fs <mount point| device>
|
||||
dump_fs()
|
||||
{
|
||||
local _dev=$(findmnt -k -f -n -r -o SOURCE $1)
|
||||
local _mp=$(findmnt -k -f -n -r -o TARGET $1)
|
||||
|
||||
echo "kdump: dump target is $_dev"
|
||||
|
||||
if [ -z "$_mp" ]; then
|
||||
echo "kdump: error: Dump target $_dev is not mounted."
|
||||
return 1
|
||||
fi
|
||||
MOUNTS="$MOUNTS $_mp"
|
||||
|
||||
# Remove -F in makedumpfile case. We don't want a flat format dump here.
|
||||
[[ $CORE_COLLECTOR = *makedumpfile* ]] && CORE_COLLECTOR=`echo $CORE_COLLECTOR | sed -e "s/-F//g"`
|
||||
|
||||
echo "kdump: saving to $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/"
|
||||
|
||||
mount -o remount,rw $_mp || return 1
|
||||
mkdir -p $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR || return 1
|
||||
|
||||
save_vmcore_dmesg_fs ${DMESG_COLLECTOR} "$_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/"
|
||||
|
||||
echo "kdump: saving vmcore"
|
||||
$CORE_COLLECTOR /proc/vmcore $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/vmcore-incomplete || return 1
|
||||
mv $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/vmcore-incomplete $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/vmcore
|
||||
sync
|
||||
|
||||
echo "kdump: saving vmcore complete"
|
||||
return 0
|
||||
}
|
||||
|
||||
dump_raw()
|
||||
{
|
||||
local _raw=$1
|
||||
@ -170,26 +100,6 @@ dump_ssh()
|
||||
return 0
|
||||
}
|
||||
|
||||
save_vmcore_dmesg_fs() {
|
||||
local _dmesg_collector=$1
|
||||
local _path=$2
|
||||
|
||||
echo "kdump: saving vmcore-dmesg.txt"
|
||||
$_dmesg_collector /proc/vmcore > ${_path}/vmcore-dmesg-incomplete.txt
|
||||
_exitcode=$?
|
||||
if [ $_exitcode -eq 0 ]; then
|
||||
mv ${_path}/vmcore-dmesg-incomplete.txt ${_path}/vmcore-dmesg.txt
|
||||
|
||||
# Make sure file is on disk. There have been instances where later
|
||||
# saving vmcore failed and system rebooted without sync and there
|
||||
# was no vmcore-dmesg.txt available.
|
||||
sync
|
||||
echo "kdump: saving vmcore-dmesg.txt complete"
|
||||
else
|
||||
echo "kdump: saving vmcore-dmesg.txt failed"
|
||||
fi
|
||||
}
|
||||
|
||||
save_vmcore_dmesg_ssh() {
|
||||
local _dmesg_collector=$1
|
||||
local _path=$2
|
||||
@ -208,7 +118,6 @@ save_vmcore_dmesg_ssh() {
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
get_host_ip()
|
||||
{
|
||||
local _host
|
||||
@ -228,61 +137,12 @@ get_host_ip()
|
||||
|
||||
read_kdump_conf()
|
||||
{
|
||||
if [ ! -f "$conf_file" ]; then
|
||||
echo "kdump: $conf_file not found"
|
||||
if [ ! -f "$KDUMP_CONF" ]; then
|
||||
echo "kdump: $KDUMP_CONF not found"
|
||||
return
|
||||
fi
|
||||
|
||||
# first get the necessary variables
|
||||
while read config_opt config_val;
|
||||
do
|
||||
# remove inline comments after the end of a directive.
|
||||
config_val=$(strip_comments $config_val)
|
||||
case "$config_opt" in
|
||||
path)
|
||||
KDUMP_PATH="$config_val"
|
||||
;;
|
||||
core_collector)
|
||||
[ -n "$config_val" ] && CORE_COLLECTOR="$config_val"
|
||||
;;
|
||||
sshkey)
|
||||
if [ -f "$config_val" ]; then
|
||||
SSH_KEY_LOCATION=$config_val
|
||||
fi
|
||||
;;
|
||||
kdump_pre)
|
||||
KDUMP_PRE="$config_val"
|
||||
;;
|
||||
kdump_post)
|
||||
KDUMP_POST="$config_val"
|
||||
;;
|
||||
fence_kdump_args)
|
||||
FENCE_KDUMP_ARGS="$config_val"
|
||||
;;
|
||||
fence_kdump_nodes)
|
||||
FENCE_KDUMP_NODES="$config_val"
|
||||
;;
|
||||
default)
|
||||
case $config_val in
|
||||
shell)
|
||||
DEFAULT_ACTION="_emergency_shell kdump"
|
||||
;;
|
||||
reboot)
|
||||
DEFAULT_ACTION="do_umount; reboot -f"
|
||||
;;
|
||||
halt)
|
||||
DEFAULT_ACTION="do_umount; halt -f"
|
||||
;;
|
||||
poweroff)
|
||||
DEFAULT_ACTION="do_umount; poweroff -f"
|
||||
;;
|
||||
dump_to_rootfs)
|
||||
DEFAULT_ACTION="dump_fs $NEWROOT"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
done < $conf_file
|
||||
get_kdump_confs
|
||||
|
||||
# rescan for add code for dump target
|
||||
while read config_opt config_val;
|
||||
@ -300,7 +160,7 @@ read_kdump_conf()
|
||||
add_dump_code "dump_ssh $SSH_KEY_LOCATION $config_val"
|
||||
;;
|
||||
esac
|
||||
done < $conf_file
|
||||
done < $KDUMP_CONF
|
||||
}
|
||||
|
||||
fence_kdump_notify()
|
||||
|
@ -580,6 +580,7 @@ install() {
|
||||
inst "/sbin/vmcore-dmesg" "/sbin/vmcore-dmesg"
|
||||
inst_hook pre-pivot 9999 "$moddir/kdump.sh"
|
||||
inst "/lib/kdump/kdump-lib.sh" "/lib/kdump-lib.sh"
|
||||
inst "/lib/kdump/kdump-lib-initramfs.sh" "/lib/kdump-lib-initramfs.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
|
||||
|
151
kdump-lib-initramfs.sh
Executable file
151
kdump-lib-initramfs.sh
Executable file
@ -0,0 +1,151 @@
|
||||
# These variables and functions are useful in 2nd kernel
|
||||
|
||||
. /lib/dracut-lib.sh
|
||||
. /lib/kdump-lib.sh
|
||||
|
||||
KDUMP_PATH="/var/crash"
|
||||
CORE_COLLECTOR=""
|
||||
DEFAULT_CORE_COLLECTOR="makedumpfile -l --message-level 1 -d 31"
|
||||
DMESG_COLLECTOR="/sbin/vmcore-dmesg"
|
||||
DEFAULT_ACTION="reboot -f"
|
||||
DATEDIR=`date +%Y.%m.%d-%T`
|
||||
HOST_IP='127.0.0.1'
|
||||
DUMP_INSTRUCTION=""
|
||||
SSH_KEY_LOCATION="/root/.ssh/kdump_id_rsa"
|
||||
KDUMP_SCRIPT_DIR="/kdumpscripts"
|
||||
DD_BLKSIZE=512
|
||||
FINAL_ACTION="reboot -f"
|
||||
KDUMP_CONF="/etc/kdump.conf"
|
||||
KDUMP_PRE=""
|
||||
KDUMP_POST=""
|
||||
NEWROOT="/sysroot"
|
||||
MOUNTS=""
|
||||
|
||||
get_kdump_confs()
|
||||
{
|
||||
local config_opt config_val
|
||||
|
||||
while read config_opt config_val;
|
||||
do
|
||||
# remove inline comments after the end of a directive.
|
||||
config_val=$(strip_comments $config_val)
|
||||
case "$config_opt" in
|
||||
path)
|
||||
KDUMP_PATH="$config_val"
|
||||
;;
|
||||
core_collector)
|
||||
[ -n "$config_val" ] && CORE_COLLECTOR="$config_val"
|
||||
;;
|
||||
sshkey)
|
||||
if [ -f "$config_val" ]; then
|
||||
SSH_KEY_LOCATION=$config_val
|
||||
fi
|
||||
;;
|
||||
kdump_pre)
|
||||
KDUMP_PRE="$config_val"
|
||||
;;
|
||||
kdump_post)
|
||||
KDUMP_POST="$config_val"
|
||||
;;
|
||||
fence_kdump_args)
|
||||
FENCE_KDUMP_ARGS="$config_val"
|
||||
;;
|
||||
fence_kdump_nodes)
|
||||
FENCE_KDUMP_NODES="$config_val"
|
||||
;;
|
||||
default)
|
||||
case $config_val in
|
||||
shell)
|
||||
DEFAULT_ACTION="_emergency_shell kdump"
|
||||
;;
|
||||
reboot)
|
||||
DEFAULT_ACTION="do_umount; reboot -f"
|
||||
;;
|
||||
halt)
|
||||
DEFAULT_ACTION="do_umount; halt -f"
|
||||
;;
|
||||
poweroff)
|
||||
DEFAULT_ACTION="do_umount; poweroff -f"
|
||||
;;
|
||||
dump_to_rootfs)
|
||||
DEFAULT_ACTION="dump_fs $NEWROOT"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
done < $KDUMP_CONF
|
||||
}
|
||||
|
||||
# dump_fs <mount point| device>
|
||||
dump_fs()
|
||||
{
|
||||
|
||||
local _dev=$(findmnt -k -f -n -r -o SOURCE $1)
|
||||
local _mp=$(findmnt -k -f -n -r -o TARGET $1)
|
||||
|
||||
echo "kdump: dump target is $_dev"
|
||||
|
||||
if [ -z "$_mp" ]; then
|
||||
echo "kdump: error: Dump target $_dev is not mounted."
|
||||
return 1
|
||||
fi
|
||||
MOUNTS="$MOUNTS $_mp"
|
||||
|
||||
# Remove -F in makedumpfile case. We don't want a flat format dump here.
|
||||
[[ $CORE_COLLECTOR = *makedumpfile* ]] && CORE_COLLECTOR=`echo $CORE_COLLECTOR | sed -e "s/-F//g"`
|
||||
|
||||
echo "kdump: saving to $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/"
|
||||
|
||||
mount -o remount,rw $_mp || return 1
|
||||
mkdir -p $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR || return 1
|
||||
|
||||
save_vmcore_dmesg_fs ${DMESG_COLLECTOR} "$_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/"
|
||||
|
||||
echo "kdump: saving vmcore"
|
||||
$CORE_COLLECTOR /proc/vmcore $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/vmcore-incomplete || return 1
|
||||
mv $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/vmcore-incomplete $_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/vmcore
|
||||
sync
|
||||
|
||||
echo "kdump: saving vmcore complete"
|
||||
}
|
||||
|
||||
save_vmcore_dmesg_fs() {
|
||||
local _dmesg_collector=$1
|
||||
local _path=$2
|
||||
|
||||
echo "kdump: saving vmcore-dmesg.txt"
|
||||
$_dmesg_collector /proc/vmcore > ${_path}/vmcore-dmesg-incomplete.txt
|
||||
_exitcode=$?
|
||||
if [ $_exitcode -eq 0 ]; then
|
||||
mv ${_path}/vmcore-dmesg-incomplete.txt ${_path}/vmcore-dmesg.txt
|
||||
|
||||
# Make sure file is on disk. There have been instances where later
|
||||
# saving vmcore failed and system rebooted without sync and there
|
||||
# was no vmcore-dmesg.txt available.
|
||||
sync
|
||||
echo "kdump: saving vmcore-dmesg.txt complete"
|
||||
else
|
||||
echo "kdump: saving vmcore-dmesg.txt failed"
|
||||
fi
|
||||
}
|
||||
|
||||
do_umount()
|
||||
{
|
||||
if [ -n "$MOUNTS" ]; then
|
||||
for mount in $MOUNTS; do
|
||||
ismounted $mount && umount -R $mount
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
do_default_action()
|
||||
{
|
||||
wait_for_loginit
|
||||
eval $DEFAULT_ACTION
|
||||
}
|
||||
|
||||
do_final_action()
|
||||
{
|
||||
do_umount
|
||||
eval $FINAL_ACTION
|
||||
}
|
@ -27,6 +27,7 @@ Source20: kdump-lib.sh
|
||||
Source21: kdump-in-cluster-environment.txt
|
||||
Source22: kdump-dep-generator.sh
|
||||
Source23: kdump-anaconda-addon-001-4-g03898ef.tar.gz
|
||||
Source24: kdump-lib-initramfs.sh
|
||||
|
||||
#######################################
|
||||
# These are sources for mkdumpramfs
|
||||
@ -178,6 +179,7 @@ install -m 644 kexec/kexec.8 $RPM_BUILD_ROOT%{_mandir}/man8/kexec.8
|
||||
install -m 755 %{SOURCE11} $RPM_BUILD_ROOT%{_datadir}/kdump/firstboot_kdump.py
|
||||
install -m 644 %{SOURCE12} $RPM_BUILD_ROOT%{_mandir}/man8/mkdumprd.8
|
||||
install -m 755 %{SOURCE20} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-lib.sh
|
||||
install -m 755 %{SOURCE24} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-lib-initramfs.sh
|
||||
%ifnarch s390x
|
||||
# For s390x the ELF header is created in the kdump kernel and therefore kexec
|
||||
# udev rules are not required
|
||||
|
Loading…
Reference in New Issue
Block a user