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
|
exec &> /dev/console
|
||||||
. /lib/dracut-lib.sh
|
. /lib/dracut-lib.sh
|
||||||
. /lib/kdump-lib.sh
|
. /lib/kdump-lib-initramfs.sh
|
||||||
|
|
||||||
if [ -f "$initdir/lib/dracut/no-emergency-shell" ]; then
|
if [ -f "$initdir/lib/dracut/no-emergency-shell" ]; then
|
||||||
rm -f -- $initdir/lib/dracut/no-emergency-shell
|
rm -f -- $initdir/lib/dracut/no-emergency-shell
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set -o pipefail
|
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
|
DUMP_RETVAL=0
|
||||||
conf_file="/etc/kdump.conf"
|
|
||||||
KDUMP_PRE=""
|
|
||||||
KDUMP_POST=""
|
|
||||||
MOUNTS=""
|
|
||||||
|
|
||||||
export PATH=$PATH:$KDUMP_SCRIPT_DIR
|
export PATH=$PATH:$KDUMP_SCRIPT_DIR
|
||||||
|
|
||||||
@ -48,27 +32,6 @@ do_dump()
|
|||||||
return $_ret
|
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()
|
do_kdump_pre()
|
||||||
{
|
{
|
||||||
if [ -n "$KDUMP_PRE" ]; then
|
if [ -n "$KDUMP_PRE" ]; then
|
||||||
@ -88,39 +51,6 @@ add_dump_code()
|
|||||||
DUMP_INSTRUCTION=$1
|
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()
|
dump_raw()
|
||||||
{
|
{
|
||||||
local _raw=$1
|
local _raw=$1
|
||||||
@ -170,26 +100,6 @@ dump_ssh()
|
|||||||
return 0
|
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() {
|
save_vmcore_dmesg_ssh() {
|
||||||
local _dmesg_collector=$1
|
local _dmesg_collector=$1
|
||||||
local _path=$2
|
local _path=$2
|
||||||
@ -208,7 +118,6 @@ save_vmcore_dmesg_ssh() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
get_host_ip()
|
get_host_ip()
|
||||||
{
|
{
|
||||||
local _host
|
local _host
|
||||||
@ -228,61 +137,12 @@ get_host_ip()
|
|||||||
|
|
||||||
read_kdump_conf()
|
read_kdump_conf()
|
||||||
{
|
{
|
||||||
if [ ! -f "$conf_file" ]; then
|
if [ ! -f "$KDUMP_CONF" ]; then
|
||||||
echo "kdump: $conf_file not found"
|
echo "kdump: $KDUMP_CONF not found"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# first get the necessary variables
|
get_kdump_confs
|
||||||
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
|
|
||||||
|
|
||||||
# rescan for add code for dump target
|
# rescan for add code for dump target
|
||||||
while read config_opt config_val;
|
while read config_opt config_val;
|
||||||
@ -300,7 +160,7 @@ read_kdump_conf()
|
|||||||
add_dump_code "dump_ssh $SSH_KEY_LOCATION $config_val"
|
add_dump_code "dump_ssh $SSH_KEY_LOCATION $config_val"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done < $conf_file
|
done < $KDUMP_CONF
|
||||||
}
|
}
|
||||||
|
|
||||||
fence_kdump_notify()
|
fence_kdump_notify()
|
||||||
|
@ -580,6 +580,7 @@ install() {
|
|||||||
inst "/sbin/vmcore-dmesg" "/sbin/vmcore-dmesg"
|
inst "/sbin/vmcore-dmesg" "/sbin/vmcore-dmesg"
|
||||||
inst_hook pre-pivot 9999 "$moddir/kdump.sh"
|
inst_hook pre-pivot 9999 "$moddir/kdump.sh"
|
||||||
inst "/lib/kdump/kdump-lib.sh" "/lib/kdump-lib.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
|
# 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
|
# 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
|
Source21: kdump-in-cluster-environment.txt
|
||||||
Source22: kdump-dep-generator.sh
|
Source22: kdump-dep-generator.sh
|
||||||
Source23: kdump-anaconda-addon-001-4-g03898ef.tar.gz
|
Source23: kdump-anaconda-addon-001-4-g03898ef.tar.gz
|
||||||
|
Source24: kdump-lib-initramfs.sh
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# These are sources for mkdumpramfs
|
# 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 755 %{SOURCE11} $RPM_BUILD_ROOT%{_datadir}/kdump/firstboot_kdump.py
|
||||||
install -m 644 %{SOURCE12} $RPM_BUILD_ROOT%{_mandir}/man8/mkdumprd.8
|
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 %{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
|
%ifnarch s390x
|
||||||
# For s390x the ELF header is created in the kdump kernel and therefore kexec
|
# For s390x the ELF header is created in the kdump kernel and therefore kexec
|
||||||
# udev rules are not required
|
# udev rules are not required
|
||||||
|
Loading…
Reference in New Issue
Block a user