import kexec-tools-2.0.20-57.el8
This commit is contained in:
parent
0d79822752
commit
2793b39ac3
@ -1,15 +1,22 @@
|
|||||||
SUBSYSTEM=="cpu", ACTION=="online", GOTO="kdump_reload"
|
SUBSYSTEM=="cpu", ACTION=="online", GOTO="kdump_reload_cpu"
|
||||||
SUBSYSTEM=="memory", ACTION=="online", GOTO="kdump_reload"
|
SUBSYSTEM=="memory", ACTION=="online", GOTO="kdump_reload_mem"
|
||||||
SUBSYSTEM=="memory", ACTION=="offline", GOTO="kdump_reload"
|
SUBSYSTEM=="memory", ACTION=="offline", GOTO="kdump_reload_mem"
|
||||||
|
|
||||||
GOTO="kdump_reload_end"
|
GOTO="kdump_reload_end"
|
||||||
|
|
||||||
LABEL="kdump_reload"
|
|
||||||
|
|
||||||
# If kdump is not loaded, calling kdump-udev-throttle will end up
|
# If kdump is not loaded, calling kdump-udev-throttle will end up
|
||||||
# doing nothing, but systemd-run will always generate extra logs for
|
# doing nothing, but systemd-run will always generate extra logs for
|
||||||
# each call, so trigger the kdump-udev-throttler only if kdump
|
# each call, so trigger the kdump-udev-throttler only if kdump
|
||||||
# service is active to avoid unnecessary logs
|
# service is active to avoid unnecessary logs
|
||||||
|
|
||||||
|
LABEL="kdump_reload_mem"
|
||||||
|
|
||||||
RUN+="/bin/sh -c '/usr/bin/systemctl is-active kdump.service || exit 0; /usr/bin/systemd-run --quiet --no-block /usr/lib/udev/kdump-udev-throttler'"
|
RUN+="/bin/sh -c '/usr/bin/systemctl is-active kdump.service || exit 0; /usr/bin/systemd-run --quiet --no-block /usr/lib/udev/kdump-udev-throttler'"
|
||||||
|
|
||||||
|
GOTO="kdump_reload_end"
|
||||||
|
|
||||||
|
LABEL="kdump_reload_cpu"
|
||||||
|
|
||||||
|
RUN+="/bin/sh -c '/usr/bin/systemctl is-active kdump.service || exit 0; ! test -f /sys/kernel/fadump_enabled || cat /sys/kernel/fadump_enabled | grep 0 || exit 0; /usr/bin/systemd-run --quiet --no-block /usr/lib/udev/kdump-udev-throttler'"
|
||||||
|
|
||||||
LABEL="kdump_reload_end"
|
LABEL="kdump_reload_end"
|
||||||
|
@ -136,7 +136,7 @@ dump_ssh()
|
|||||||
fi
|
fi
|
||||||
_exitcode=$?
|
_exitcode=$?
|
||||||
else
|
else
|
||||||
$CORE_COLLECTOR /proc/vmcore | ssh $_opt $_host "dd bs=512 of=$_dir/vmcore-incomplete"
|
$CORE_COLLECTOR /proc/vmcore | ssh $_opt $_host "umask 0077 && dd bs=512 of=$_dir/vmcore-incomplete"
|
||||||
_exitcode=$?
|
_exitcode=$?
|
||||||
_vmcore="vmcore.flat"
|
_vmcore="vmcore.flat"
|
||||||
fi
|
fi
|
||||||
@ -218,7 +218,7 @@ save_vmcore_dmesg_ssh() {
|
|||||||
local _location=$4
|
local _location=$4
|
||||||
|
|
||||||
dinfo "saving vmcore-dmesg.txt to $_location:$_path"
|
dinfo "saving vmcore-dmesg.txt to $_location:$_path"
|
||||||
$_dmesg_collector /proc/vmcore | ssh $_opts $_location "dd of=$_path/vmcore-dmesg-incomplete.txt"
|
$_dmesg_collector /proc/vmcore | ssh $_opts $_location "umask 0077 && dd of=$_path/vmcore-dmesg-incomplete.txt"
|
||||||
_exitcode=$?
|
_exitcode=$?
|
||||||
|
|
||||||
if [ $_exitcode -eq 0 ]; then
|
if [ $_exitcode -eq 0 ]; then
|
||||||
|
@ -233,7 +233,7 @@ cal_netmask_by_prefix() {
|
|||||||
#$2: srcaddr
|
#$2: srcaddr
|
||||||
#if it use static ip echo it, or echo null
|
#if it use static ip echo it, or echo null
|
||||||
kdump_static_ip() {
|
kdump_static_ip() {
|
||||||
local _netdev="$1" _srcaddr="$2" _ipv6_flag
|
local _netdev="$1" _srcaddr="$2" kdumpnic="$3" _ipv6_flag
|
||||||
local _netmask _gateway _ipaddr _target _nexthop _prefix
|
local _netmask _gateway _ipaddr _target _nexthop _prefix
|
||||||
|
|
||||||
_ipaddr=$(ip addr show dev $_netdev permanent | awk "/ $_srcaddr\/.* /{print \$2}")
|
_ipaddr=$(ip addr show dev $_netdev permanent | awk "/ $_srcaddr\/.* /{print \$2}")
|
||||||
@ -270,7 +270,7 @@ kdump_static_ip() {
|
|||||||
_target="[$_target]"
|
_target="[$_target]"
|
||||||
_nexthop="[$_nexthop]"
|
_nexthop="[$_nexthop]"
|
||||||
fi
|
fi
|
||||||
echo "rd.route=$_target:$_nexthop:$_netdev"
|
echo "rd.route=$_target:$_nexthop:$kdumpnic"
|
||||||
done >> ${initdir}/etc/cmdline.d/45route-static.conf
|
done >> ${initdir}/etc/cmdline.d/45route-static.conf
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,6 +391,37 @@ kdump_setup_vlan() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# find online znet device
|
||||||
|
# return ifname (_netdev)
|
||||||
|
# code reaped from the list_configured function of
|
||||||
|
# https://github.com/hreinecke/s390-tools/blob/master/zconf/znetconf
|
||||||
|
find_online_znet_device() {
|
||||||
|
local CCWGROUPBUS_DEVICEDIR="/sys/bus/ccwgroup/devices"
|
||||||
|
local NETWORK_DEVICES d ifname ONLINE
|
||||||
|
|
||||||
|
[ ! -d "$CCWGROUPBUS_DEVICEDIR" ] && return
|
||||||
|
NETWORK_DEVICES=$(find $CCWGROUPBUS_DEVICEDIR)
|
||||||
|
for d in $NETWORK_DEVICES
|
||||||
|
do
|
||||||
|
[ ! -f "$d/online" ] && continue
|
||||||
|
read ONLINE < $d/online
|
||||||
|
if [ $ONLINE -ne 1 ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# determine interface name, if there (only for qeth and if
|
||||||
|
# device is online)
|
||||||
|
if [ -f $d/if_name ]
|
||||||
|
then
|
||||||
|
read ifname < $d/if_name
|
||||||
|
elif [ -d $d/net ]
|
||||||
|
then
|
||||||
|
ifname=$(ls $d/net/)
|
||||||
|
fi
|
||||||
|
[ -n "$ifname" ] && break
|
||||||
|
done
|
||||||
|
echo -n "$ifname"
|
||||||
|
}
|
||||||
|
|
||||||
# setup s390 znet cmdline
|
# setup s390 znet cmdline
|
||||||
# $1: netdev name
|
# $1: netdev name
|
||||||
kdump_setup_znet() {
|
kdump_setup_znet() {
|
||||||
@ -408,14 +439,22 @@ kdump_setup_znet() {
|
|||||||
# Setup dracut to bringup a given network interface
|
# Setup dracut to bringup a given network interface
|
||||||
kdump_setup_netdev() {
|
kdump_setup_netdev() {
|
||||||
local _netdev=$1 _srcaddr=$2
|
local _netdev=$1 _srcaddr=$2
|
||||||
local _static _proto _ip_conf _ip_opts _ifname_opts
|
local _static _proto _ip_conf _ip_opts _ifname_opts kdumpnic
|
||||||
local _netmac=$(kdump_get_mac_addr $_netdev)
|
local _netmac=$(kdump_get_mac_addr $_netdev)
|
||||||
|
local _znet_netdev
|
||||||
|
|
||||||
if [ "$(uname -m)" = "s390x" ]; then
|
kdumpnic=$(kdump_setup_ifname $_netdev)
|
||||||
kdump_setup_znet $_netdev
|
|
||||||
|
_znet_netdev=$(find_online_znet_device)
|
||||||
|
if [[ -n "$_znet_netdev" ]]; then
|
||||||
|
$(kdump_setup_znet "$_znet_netdev")
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
derror "Failed to set up znet"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_static=$(kdump_static_ip $_netdev $_srcaddr)
|
_static=$(kdump_static_ip $_netdev $_srcaddr $kdumpnic)
|
||||||
if [ -n "$_static" ]; then
|
if [ -n "$_static" ]; then
|
||||||
_proto=none
|
_proto=none
|
||||||
elif is_ipv6_address $_srcaddr; then
|
elif is_ipv6_address $_srcaddr; then
|
||||||
@ -425,7 +464,7 @@ kdump_setup_netdev() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
_ip_conf="${initdir}/etc/cmdline.d/40ip.conf"
|
_ip_conf="${initdir}/etc/cmdline.d/40ip.conf"
|
||||||
_ip_opts=" ip=${_static}$(kdump_setup_ifname $_netdev):${_proto}"
|
_ip_opts=" ip=${_static}$kdumpnic:${_proto}"
|
||||||
|
|
||||||
# dracut doesn't allow duplicated configuration for same NIC, even they're exactly the same.
|
# dracut doesn't allow duplicated configuration for same NIC, even they're exactly the same.
|
||||||
# so we have to avoid adding duplicates
|
# so we have to avoid adding duplicates
|
||||||
@ -445,7 +484,7 @@ kdump_setup_netdev() {
|
|||||||
elif kdump_is_vlan "$_netdev"; then
|
elif kdump_is_vlan "$_netdev"; then
|
||||||
kdump_setup_vlan "$_netdev"
|
kdump_setup_vlan "$_netdev"
|
||||||
else
|
else
|
||||||
_ifname_opts=" ifname=$(kdump_setup_ifname $_netdev):$_netmac"
|
_ifname_opts=" ifname=$kdumpnic:$_netmac"
|
||||||
echo "$_ifname_opts" >> $_ip_conf
|
echo "$_ifname_opts" >> $_ip_conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -944,6 +983,7 @@ install() {
|
|||||||
inst "/sbin/vmcore-dmesg" "/sbin/vmcore-dmesg"
|
inst "/sbin/vmcore-dmesg" "/sbin/vmcore-dmesg"
|
||||||
inst "/usr/bin/printf" "/sbin/printf"
|
inst "/usr/bin/printf" "/sbin/printf"
|
||||||
inst "/usr/bin/logger" "/sbin/logger"
|
inst "/usr/bin/logger" "/sbin/logger"
|
||||||
|
inst "/usr/bin/chmod" "/sbin/chmod"
|
||||||
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"
|
inst "/lib/kdump/kdump-lib-initramfs.sh" "/lib/kdump-lib-initramfs.sh"
|
||||||
inst "/lib/kdump/kdump-logger.sh" "/lib/kdump-logger.sh"
|
inst "/lib/kdump/kdump-logger.sh" "/lib/kdump-logger.sh"
|
||||||
|
@ -224,12 +224,16 @@ Things to remember:
|
|||||||
dracut_args --add "network"
|
dracut_args --add "network"
|
||||||
|
|
||||||
4) If FADump is configured to capture vmcore to a remote dump target using SSH
|
4) If FADump is configured to capture vmcore to a remote dump target using SSH
|
||||||
or NFS protocol, the network interface is renamed to kdump-<interface-name>
|
or NFS protocol, the corresponding network interface '<interface-name>' is
|
||||||
if <interface-name> is generic, for example, *eth#, or net#. This problem
|
renamed to 'kdump-<interface-name>', if it is generic (like *eth# or net#).
|
||||||
occurs because the vmcore capture scripts in the initial RAM disk (initrd)
|
It happens because vmcore capture scripts in the initial RAM disk (initrd)
|
||||||
add the kdump- prefix to the network interface name to secure persistent
|
add the 'kdump-' prefix to the network interface name to secure persistent
|
||||||
naming. As the same initrd is used for production kernel boot, the interface
|
naming. And as capture kernel and production kernel use the same initrd in
|
||||||
name is changed for the production kernel too.
|
case of FADump, the interface name is changed for the production kernel too.
|
||||||
|
This is likely to impact network configuration setup for production kernel.
|
||||||
|
So, it is recommended to use a non-generic name for a network interface,
|
||||||
|
before setting up FADump to capture vmcore to a remote dump target based on
|
||||||
|
that network interface, to avoid running into network configuration issues.
|
||||||
|
|
||||||
Dump Triggering methods:
|
Dump Triggering methods:
|
||||||
|
|
||||||
|
@ -111,6 +111,7 @@ save_log()
|
|||||||
if command -v journalctl > /dev/null; then
|
if command -v journalctl > /dev/null; then
|
||||||
journalctl -ab >> $KDUMP_LOG_FILE
|
journalctl -ab >> $KDUMP_LOG_FILE
|
||||||
fi
|
fi
|
||||||
|
chmod 600 $KDUMP_LOG_FILE
|
||||||
}
|
}
|
||||||
|
|
||||||
# dump_fs <mount point>
|
# dump_fs <mount point>
|
||||||
@ -171,6 +172,7 @@ save_vmcore_dmesg_fs() {
|
|||||||
_exitcode=$?
|
_exitcode=$?
|
||||||
if [ $_exitcode -eq 0 ]; then
|
if [ $_exitcode -eq 0 ]; then
|
||||||
mv ${_path}/vmcore-dmesg-incomplete.txt ${_path}/vmcore-dmesg.txt
|
mv ${_path}/vmcore-dmesg-incomplete.txt ${_path}/vmcore-dmesg.txt
|
||||||
|
chmod 600 ${_path}/vmcore-dmesg.txt
|
||||||
|
|
||||||
# Make sure file is on disk. There have been instances where later
|
# Make sure file is on disk. There have been instances where later
|
||||||
# saving vmcore failed and system rebooted without sync and there
|
# saving vmcore failed and system rebooted without sync and there
|
||||||
|
@ -694,7 +694,7 @@ prepare_kdump_bootinfo()
|
|||||||
local boot_imglist boot_dirlist boot_initrdlist curr_kver="$(uname -r)"
|
local boot_imglist boot_dirlist boot_initrdlist curr_kver="$(uname -r)"
|
||||||
local machine_id
|
local machine_id
|
||||||
|
|
||||||
if [ -z "$KDUMP_KERNELVER"]; then
|
if [ -z "$KDUMP_KERNELVER" ]; then
|
||||||
KDUMP_KERNELVER="$(uname -r)"
|
KDUMP_KERNELVER="$(uname -r)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -834,3 +834,192 @@ prepare_cmdline()
|
|||||||
|
|
||||||
echo ${cmdline}
|
echo ${cmdline}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#get system memory size in the unit of GB
|
||||||
|
get_system_size()
|
||||||
|
{
|
||||||
|
result=$(cat /proc/iomem | grep "System RAM" | awk -F ":" '{ print $1 }' | tr [:lower:] [:upper:] | paste -sd+)
|
||||||
|
result="+$result"
|
||||||
|
# replace '-' with '+0x' and '+' with '-0x'
|
||||||
|
sum=$( echo $result | sed -e 's/-/K0x/g' | sed -e 's/+/-0x/g' | sed -e 's/K/+/g' )
|
||||||
|
size=$(printf "%d\n" $(($sum)))
|
||||||
|
|
||||||
|
# in MB unit
|
||||||
|
let size=$size/1024/1024
|
||||||
|
# since RHEL-8.5 kernel round up total memory to 128M, so should user space
|
||||||
|
let size=($size+127)/128
|
||||||
|
let size=$size*128
|
||||||
|
# in GB unit
|
||||||
|
let size=$size/1024
|
||||||
|
|
||||||
|
echo $size
|
||||||
|
}
|
||||||
|
|
||||||
|
get_recommend_size()
|
||||||
|
{
|
||||||
|
local mem_size=$1
|
||||||
|
local _ck_cmdline=$2
|
||||||
|
local OLDIFS="$IFS"
|
||||||
|
|
||||||
|
last_sz=""
|
||||||
|
last_unit=""
|
||||||
|
|
||||||
|
start=${_ck_cmdline: :1}
|
||||||
|
if [ $mem_size -lt $start ]; then
|
||||||
|
echo "0M"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
IFS=','
|
||||||
|
for i in $_ck_cmdline; do
|
||||||
|
end=$(echo $i | awk -F "-" '{ print $2 }' | awk -F ":" '{ print $1 }')
|
||||||
|
recommend=$(echo $i | awk -F "-" '{ print $2 }' | awk -F ":" '{ print $2 }')
|
||||||
|
size=${end: : -1}
|
||||||
|
unit=${end: -1}
|
||||||
|
if [ $unit == 'T' ]; then
|
||||||
|
let size=$size*1024
|
||||||
|
fi
|
||||||
|
if [ $mem_size -lt $size ]; then
|
||||||
|
echo $recommend
|
||||||
|
IFS="$OLDIFS"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$OLDIFS"
|
||||||
|
}
|
||||||
|
|
||||||
|
# return recommended size based on current system RAM size
|
||||||
|
kdump_get_arch_recommend_size()
|
||||||
|
{
|
||||||
|
if ! [[ -r "/proc/iomem" ]] ; then
|
||||||
|
echo "Error, can not access /proc/iomem."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
arch=$(lscpu | grep Architecture | awk -F ":" '{ print $2 }' | tr [:lower:] [:upper:])
|
||||||
|
|
||||||
|
if [ $arch == "X86_64" ] || [ $arch == "S390X" ]; then
|
||||||
|
ck_cmdline="1G-4G:160M,4G-64G:192M,64G-1T:256M,1T-:512M"
|
||||||
|
elif [ $arch == "AARCH64" ]; then
|
||||||
|
ck_cmdline="2G-:448M"
|
||||||
|
elif [ $arch == "PPC64LE" ]; then
|
||||||
|
if is_fadump_capable; then
|
||||||
|
ck_cmdline="4G-16G:768M,16G-64G:1G,64G-128G:2G,128G-1T:4G,1T-2T:6G,2T-4T:12G,4T-8T:20G,8T-16T:36G,16T-32T:64G,32T-64T:128G,64T-:180G"
|
||||||
|
else
|
||||||
|
ck_cmdline="2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
ck_cmdline=$(echo $ck_cmdline | sed -e 's/-:/-102400T:/g')
|
||||||
|
sys_mem=$(get_system_size)
|
||||||
|
result=$(get_recommend_size $sys_mem "$ck_cmdline")
|
||||||
|
echo $result
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Print all underlying crypt devices of a block device
|
||||||
|
# print nothing if device is not on top of a crypt device
|
||||||
|
# $1: the block device to be checked in maj:min format
|
||||||
|
get_luks_crypt_dev()
|
||||||
|
{
|
||||||
|
[[ -b /dev/block/$1 ]] || return 1
|
||||||
|
|
||||||
|
local _type=$(eval "$(blkid -u filesystem,crypto -o export -- /dev/block/$1); echo \$TYPE")
|
||||||
|
[[ $_type == "crypto_LUKS" ]] && echo $1
|
||||||
|
|
||||||
|
for _x in /sys/dev/block/$1/slaves/*; do
|
||||||
|
[[ -f $_x/dev ]] || continue
|
||||||
|
[[ $_x/subsystem -ef /sys/class/block ]] || continue
|
||||||
|
get_luks_crypt_dev "$(< "$_x/dev")"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# kdump_get_maj_min <device>
|
||||||
|
# Prints the major and minor of a device node.
|
||||||
|
# Example:
|
||||||
|
# $ get_maj_min /dev/sda2
|
||||||
|
# 8:2
|
||||||
|
kdump_get_maj_min() {
|
||||||
|
local _majmin
|
||||||
|
_majmin="$(stat -L -c '%t:%T' "$1" 2> /dev/null)"
|
||||||
|
printf "%s" "$((0x${_majmin%:*})):$((0x${_majmin#*:}))"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_all_kdump_crypt_dev()
|
||||||
|
{
|
||||||
|
local _dev _crypt
|
||||||
|
|
||||||
|
for _dev in $(get_block_dump_target); do
|
||||||
|
_crypt=$(get_luks_crypt_dev $(kdump_get_maj_min "$_dev"))
|
||||||
|
[[ -n "$_crypt" ]] && echo $_crypt
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
check_vmlinux()
|
||||||
|
{
|
||||||
|
# Use readelf to check if it's a valid ELF
|
||||||
|
readelf -h $1 &>/dev/null || return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
get_vmlinux_size()
|
||||||
|
{
|
||||||
|
local size=0
|
||||||
|
|
||||||
|
while read _type _offset _virtaddr _physaddr _fsize _msize _flg _aln; do
|
||||||
|
size=$(( $size + $_msize ))
|
||||||
|
done <<< $(readelf -l -W $1 | grep "^ LOAD" 2>/dev/stderr)
|
||||||
|
|
||||||
|
echo $size
|
||||||
|
}
|
||||||
|
|
||||||
|
try_decompress()
|
||||||
|
{
|
||||||
|
# The obscure use of the "tr" filter is to work around older versions of
|
||||||
|
# "grep" that report the byte offset of the line instead of the pattern.
|
||||||
|
|
||||||
|
# Try to find the header ($1) and decompress from here
|
||||||
|
for pos in `tr "$1\n$2" "\n$2=" < "$4" | grep -abo "^$2"`
|
||||||
|
do
|
||||||
|
if ! type -P $3 > /dev/null; then
|
||||||
|
ddebug "Signiature detected but '$3' is missing, skip this decompressor"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
pos=${pos%%:*}
|
||||||
|
tail -c+$pos "$img" | $3 > $5 2> /dev/null
|
||||||
|
if check_vmlinux $5; then
|
||||||
|
ddebug "Kernel is extracted with '$3'"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Borrowed from linux/scripts/extract-vmlinux
|
||||||
|
get_kernel_size()
|
||||||
|
{
|
||||||
|
# Prepare temp files:
|
||||||
|
local img=$1 tmp=$(mktemp /tmp/vmlinux-XXX)
|
||||||
|
trap "rm -f $tmp" 0
|
||||||
|
|
||||||
|
# Try to check if it's a vmlinux already
|
||||||
|
check_vmlinux $img && get_vmlinux_size $img && return 0
|
||||||
|
|
||||||
|
# That didn't work, so retry after decompression.
|
||||||
|
try_decompress '\037\213\010' xy gunzip $img $tmp || \
|
||||||
|
try_decompress '\3757zXZ\000' abcde unxz $img $tmp || \
|
||||||
|
try_decompress 'BZh' xy bunzip2 $img $tmp || \
|
||||||
|
try_decompress '\135\0\0\0' xxx unlzma $img $tmp || \
|
||||||
|
try_decompress '\211\114\132' xy 'lzop -d' $img $tmp || \
|
||||||
|
try_decompress '\002!L\030' xxx 'lz4 -d' $img $tmp || \
|
||||||
|
try_decompress '(\265/\375' xxx unzstd $img $tmp
|
||||||
|
|
||||||
|
# Finally check for uncompressed images or objects:
|
||||||
|
[[ $? -eq 0 ]] && get_vmlinux_size $tmp && return 0
|
||||||
|
|
||||||
|
# Fallback to use iomem
|
||||||
|
local _size=0
|
||||||
|
for _seg in $(cat /proc/iomem | grep -E "Kernel (code|rodata|data|bss)" | cut -d ":" -f 1); do
|
||||||
|
_size=$(( $_size + 0x${_seg#*-} - 0x${_seg%-*} ))
|
||||||
|
done
|
||||||
|
echo $_size
|
||||||
|
}
|
||||||
|
8
SOURCES/kdump-migrate-action.sh
Executable file
8
SOURCES/kdump-migrate-action.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
systemctl is-active kdump
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
/usr/lib/kdump/kdump-restart.sh
|
8
SOURCES/kdump-restart.sh
Normal file
8
SOURCES/kdump-restart.sh
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
export PATH="$PATH:/usr/bin:/usr/sbin"
|
||||||
|
|
||||||
|
exec >>/var/log/kdump-migration.log 2>&1
|
||||||
|
|
||||||
|
echo "kdump: Partition Migration detected. Rebuilding initramfs image to reload."
|
||||||
|
/usr/bin/kdumpctl rebuild
|
||||||
|
/usr/bin/kdumpctl reload
|
@ -17,7 +17,7 @@ KDUMP_COMMANDLINE=""
|
|||||||
# This variable lets us remove arguments from the current kdump commandline
|
# This variable lets us remove arguments from the current kdump commandline
|
||||||
# as taken from either KDUMP_COMMANDLINE above, or from /proc/cmdline
|
# as taken from either KDUMP_COMMANDLINE above, or from /proc/cmdline
|
||||||
# NOTE: some arguments such as crashkernel will always be removed
|
# NOTE: some arguments such as crashkernel will always be removed
|
||||||
KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swiotlb"
|
KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swiotlb prot_virt"
|
||||||
|
|
||||||
# This variable lets us append arguments to the current kdump commandline
|
# This variable lets us append arguments to the current kdump commandline
|
||||||
# after processed by KDUMP_COMMANDLINE_REMOVE
|
# after processed by KDUMP_COMMANDLINE_REMOVE
|
||||||
|
111
SOURCES/kdumpctl
111
SOURCES/kdumpctl
@ -237,12 +237,7 @@ restore_default_initrd()
|
|||||||
check_config()
|
check_config()
|
||||||
{
|
{
|
||||||
local -A _opt_rec
|
local -A _opt_rec
|
||||||
while read config_opt config_val; do
|
while read -r config_opt config_val; do
|
||||||
if [ -z "$config_val" ]; then
|
|
||||||
derror "Invalid kdump config value for option $config_opt"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$config_opt" in
|
case "$config_opt" in
|
||||||
dracut_args)
|
dracut_args)
|
||||||
if [[ $config_val == *--mount* ]]; then
|
if [[ $config_val == *--mount* ]]; then
|
||||||
@ -269,12 +264,20 @@ check_config()
|
|||||||
derror "Deprecated kdump config option: $config_opt. Refer to kdump.conf manpage for alternatives."
|
derror "Deprecated kdump config option: $config_opt. Refer to kdump.conf manpage for alternatives."
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
|
'')
|
||||||
|
continue
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
derror "Invalid kdump config option $config_opt"
|
derror "Invalid kdump config option $config_opt"
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if [[ -z "$config_val" ]]; then
|
||||||
|
derror "Invalid kdump config value for option '$config_opt'"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "${_opt_rec[$config_opt]}" ]; then
|
if [ -n "${_opt_rec[$config_opt]}" ]; then
|
||||||
if [ $config_opt == _target ]; then
|
if [ $config_opt == _target ]; then
|
||||||
derror "More than one dump targets specified"
|
derror "More than one dump targets specified"
|
||||||
@ -1246,6 +1249,97 @@ rebuild() {
|
|||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_estimate() {
|
||||||
|
local kdump_mods
|
||||||
|
local -A large_mods
|
||||||
|
local baseline
|
||||||
|
local kernel_size mod_size initrd_size baseline_size runtime_size reserved_size estimated_size recommended_size
|
||||||
|
local size_mb=$(( 1024 * 1024 ))
|
||||||
|
|
||||||
|
setup_initrd
|
||||||
|
if [ ! -f "$TARGET_INITRD" ]; then
|
||||||
|
derror "kdumpctl estimate: kdump initramfs is not built yet."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
kdump_mods="$(lsinitrd "$TARGET_INITRD" -f /usr/lib/dracut/loaded-kernel-modules.txt | tr '\n' ' ')"
|
||||||
|
baseline=$(kdump_get_arch_recommend_size)
|
||||||
|
if [[ "${baseline: -1}" == "M" ]]; then
|
||||||
|
baseline=${baseline%M}
|
||||||
|
elif [[ "${baseline: -1}" == "G" ]]; then
|
||||||
|
baseline=$(( ${baseline%G} * 1024 ))
|
||||||
|
elif [[ "${baseline: -1}" == "T" ]]; then
|
||||||
|
baseline=$(( ${baseline%Y} * 1048576 ))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# The default value when using crashkernel=auto
|
||||||
|
baseline_size=$((baseline * size_mb))
|
||||||
|
# Current reserved crashkernel size
|
||||||
|
reserved_size=$(cat /sys/kernel/kexec_crash_size)
|
||||||
|
# A pre-estimated value for userspace usage and kernel
|
||||||
|
# runtime allocation, 64M should good for most cases
|
||||||
|
runtime_size=$((64 * size_mb))
|
||||||
|
# Kernel image size
|
||||||
|
kernel_size=$(get_kernel_size "$KDUMP_KERNEL")
|
||||||
|
# Kdump initramfs size
|
||||||
|
initrd_size=$(du -b "$TARGET_INITRD" | awk '{print $1}')
|
||||||
|
# Kernel modules static size after loaded
|
||||||
|
mod_size=0
|
||||||
|
while read -r _name _size _; do
|
||||||
|
if [[ ! " $kdump_mods " == *" $_name "* ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
mod_size=$((mod_size + _size))
|
||||||
|
|
||||||
|
# Mark module with static size larger than 2M as large module
|
||||||
|
if [[ $((_size / size_mb)) -ge 1 ]]; then
|
||||||
|
large_mods[$_name]=$_size
|
||||||
|
fi
|
||||||
|
done <<< "$(< /proc/modules)"
|
||||||
|
|
||||||
|
# Extra memory usage required for LUKS2 decryption
|
||||||
|
crypt_size=0
|
||||||
|
for _dev in $(get_all_kdump_crypt_dev); do
|
||||||
|
_crypt_info=$(cryptsetup luksDump "/dev/block/$_dev")
|
||||||
|
[[ $(echo "$_crypt_info" | sed -n "s/^Version:\s*\(.*\)/\1/p" ) == "2" ]] || continue
|
||||||
|
for _mem in $(echo "$_crypt_info" | sed -n "s/\sMemory:\s*\(.*\)/\1/p" | sort -n ); do
|
||||||
|
crypt_size=$((crypt_size + _mem * 1024))
|
||||||
|
break
|
||||||
|
done
|
||||||
|
done
|
||||||
|
[[ $crypt_size -ne 0 ]] && echo -e "Encrypted kdump target requires extra memory, assuming using the keyslot with minimun memory requirement\n"
|
||||||
|
|
||||||
|
estimated_size=$((kernel_size + mod_size + initrd_size + runtime_size + crypt_size))
|
||||||
|
if [[ $baseline_size -gt $estimated_size ]]; then
|
||||||
|
recommended_size=$baseline_size
|
||||||
|
else
|
||||||
|
recommended_size=$estimated_size
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Reserved crashkernel: $((reserved_size / size_mb))M"
|
||||||
|
echo "Recommended crashkernel: $((recommended_size / size_mb))M"
|
||||||
|
echo
|
||||||
|
echo "Kernel image size: $((kernel_size / size_mb))M"
|
||||||
|
echo "Kernel modules size: $((mod_size / size_mb))M"
|
||||||
|
echo "Initramfs size: $((initrd_size / size_mb))M"
|
||||||
|
echo "Runtime reservation: $((runtime_size / size_mb))M"
|
||||||
|
[[ $crypt_size -ne 0 ]] && \
|
||||||
|
echo "LUKS required size: $((crypt_size / size_mb))M"
|
||||||
|
echo -n "Large modules:"
|
||||||
|
if [[ "${#large_mods[@]}" -eq 0 ]]; then
|
||||||
|
echo " <none>"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
for _mod in "${!large_mods[@]}"; do
|
||||||
|
echo " $_mod: ${large_mods[$_mod]}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $reserved_size -lt $recommended_size ]]; then
|
||||||
|
echo "WARNING: Current crashkernel size is lower than recommended size $((recommended_size / size_mb))M."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
if [ ! -f "$KDUMP_CONFIG_FILE" ]; then
|
if [ ! -f "$KDUMP_CONFIG_FILE" ]; then
|
||||||
derror "Error: No kdump config file found!"
|
derror "Error: No kdump config file found!"
|
||||||
exit 1
|
exit 1
|
||||||
@ -1301,8 +1395,11 @@ main ()
|
|||||||
showmem)
|
showmem)
|
||||||
show_reserved_mem
|
show_reserved_mem
|
||||||
;;
|
;;
|
||||||
|
estimate)
|
||||||
|
do_estimate
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
dinfo $"Usage: $0 {start|stop|status|restart|reload|rebuild|propagate|showmem}"
|
dinfo $"Usage: $0 {estimate|start|stop|status|restart|reload|rebuild|propagate|showmem}"
|
||||||
exit 1
|
exit 1
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,11 @@ impossible to use password authentication during kdump.
|
|||||||
.TP
|
.TP
|
||||||
.I showmem
|
.I showmem
|
||||||
Prints the size of reserved memory for crash kernel in megabytes.
|
Prints the size of reserved memory for crash kernel in megabytes.
|
||||||
|
.TP
|
||||||
|
.I estimate
|
||||||
|
Estimate a suitable crashkernel value for current machine. This is a
|
||||||
|
best-effort estimate. It will print a recommanded crashkernel value
|
||||||
|
based on current kdump setup, and list some details of memory usage.
|
||||||
|
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR kdump.conf (5),
|
.BR kdump.conf (5),
|
||||||
|
@ -0,0 +1,177 @@
|
|||||||
|
From 3422e1d6bc3511c5af9cb05ba74ad97dd93ffd7f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Julien Thierry <jthierry@redhat.com>
|
||||||
|
Date: Tue, 24 Nov 2020 10:45:24 +0000
|
||||||
|
Subject: [PATCH] [PATCH 1/2] Add --dry-run option to prevent writing the
|
||||||
|
dumpfile
|
||||||
|
|
||||||
|
Add a --dry-run option to run all operations without writing the
|
||||||
|
dump to the output file.
|
||||||
|
|
||||||
|
Signed-off-by: Julien Thierry <jthierry@redhat.com>
|
||||||
|
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||||
|
---
|
||||||
|
makedumpfile.8 | 6 ++++++
|
||||||
|
makedumpfile.c | 37 ++++++++++++++++++++++++++++++-------
|
||||||
|
makedumpfile.h | 2 ++
|
||||||
|
print_info.c | 3 +++
|
||||||
|
4 files changed, 41 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/makedumpfile-1.6.8/makedumpfile.8 b/makedumpfile-1.6.8/makedumpfile.8
|
||||||
|
index b68a7e3..5e902cd 100644
|
||||||
|
--- a/makedumpfile-1.6.8/makedumpfile.8
|
||||||
|
+++ b/makedumpfile-1.6.8/makedumpfile.8
|
||||||
|
@@ -637,6 +637,12 @@ Show the version of makedumpfile.
|
||||||
|
Only check whether the command-line parameters are valid or not, and exit.
|
||||||
|
Preferable to be given as the first parameter.
|
||||||
|
|
||||||
|
+.TP
|
||||||
|
+\fB\-\-dry-run\fR
|
||||||
|
+Do not write the output dump file while still performing operations specified
|
||||||
|
+by other options.
|
||||||
|
+This option cannot be used with the --dump-dmesg, --reassemble and -g options.
|
||||||
|
+
|
||||||
|
.SH ENVIRONMENT VARIABLES
|
||||||
|
|
||||||
|
.TP 8
|
||||||
|
diff --git a/makedumpfile-1.6.8/makedumpfile.c b/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
index ecd63fa..8c80c49 100644
|
||||||
|
--- a/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
+++ b/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
@@ -1372,6 +1372,8 @@ open_dump_file(void)
|
||||||
|
if (info->flag_flatten) {
|
||||||
|
fd = STDOUT_FILENO;
|
||||||
|
info->name_dumpfile = filename_stdout;
|
||||||
|
+ } else if (info->flag_dry_run) {
|
||||||
|
+ fd = -1;
|
||||||
|
} else if ((fd = open(info->name_dumpfile, open_flags,
|
||||||
|
S_IRUSR|S_IWUSR)) < 0) {
|
||||||
|
ERRMSG("Can't open the dump file(%s). %s\n",
|
||||||
|
@@ -4711,6 +4713,9 @@ write_and_check_space(int fd, void *buf, size_t buf_size, char *file_name)
|
||||||
|
{
|
||||||
|
int status, written_size = 0;
|
||||||
|
|
||||||
|
+ if (info->flag_dry_run)
|
||||||
|
+ return TRUE;
|
||||||
|
+
|
||||||
|
while (written_size < buf_size) {
|
||||||
|
status = write(fd, buf + written_size,
|
||||||
|
buf_size - written_size);
|
||||||
|
@@ -4748,13 +4753,12 @@ write_buffer(int fd, off_t offset, void *buf, size_t buf_size, char *file_name)
|
||||||
|
}
|
||||||
|
if (!write_and_check_space(fd, &fdh, sizeof(fdh), file_name))
|
||||||
|
return FALSE;
|
||||||
|
- } else {
|
||||||
|
- if (lseek(fd, offset, SEEK_SET) == failed) {
|
||||||
|
- ERRMSG("Can't seek the dump file(%s). %s\n",
|
||||||
|
- file_name, strerror(errno));
|
||||||
|
- return FALSE;
|
||||||
|
- }
|
||||||
|
+ } else if (!info->flag_dry_run &&
|
||||||
|
+ lseek(fd, offset, SEEK_SET) == failed) {
|
||||||
|
+ ERRMSG("Can't seek the dump file(%s). %s\n", file_name, strerror(errno));
|
||||||
|
+ return FALSE;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
if (!write_and_check_space(fd, buf, buf_size, file_name))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
@@ -9112,7 +9116,7 @@ close_dump_memory(void)
|
||||||
|
void
|
||||||
|
close_dump_file(void)
|
||||||
|
{
|
||||||
|
- if (info->flag_flatten)
|
||||||
|
+ if (info->flag_flatten || info->flag_dry_run)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (close(info->fd_dumpfile) < 0)
|
||||||
|
@@ -10985,6 +10989,11 @@ check_param_for_generating_vmcoreinfo(int argc, char *argv[])
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
+ if (info->flag_dry_run) {
|
||||||
|
+ MSG("--dry-run cannot be used with -g.\n");
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -11029,6 +11038,11 @@ check_param_for_reassembling_dumpfile(int argc, char *argv[])
|
||||||
|
|| info->flag_exclude_xen_dom || info->flag_split)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
+ if (info->flag_dry_run) {
|
||||||
|
+ MSG("--dry-run cannot be used with --reassemble.\n");
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if ((info->splitting_info
|
||||||
|
= malloc(sizeof(struct splitting_info) * info->num_dumpfile))
|
||||||
|
== NULL) {
|
||||||
|
@@ -11057,6 +11071,11 @@ check_param_for_creating_dumpfile(int argc, char *argv[])
|
||||||
|
|| (info->flag_read_vmcoreinfo && info->name_xen_syms))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
+ if (info->flag_dry_run && info->flag_dmesg) {
|
||||||
|
+ MSG("--dry-run cannot be used with --dump-dmesg.\n");
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (info->flag_flatten && info->flag_split)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
@@ -11520,6 +11539,7 @@ static struct option longopts[] = {
|
||||||
|
{"work-dir", required_argument, NULL, OPT_WORKING_DIR},
|
||||||
|
{"num-threads", required_argument, NULL, OPT_NUM_THREADS},
|
||||||
|
{"check-params", no_argument, NULL, OPT_CHECK_PARAMS},
|
||||||
|
+ {"dry-run", no_argument, NULL, OPT_DRY_RUN},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -11686,6 +11706,9 @@ main(int argc, char *argv[])
|
||||||
|
info->flag_check_params = TRUE;
|
||||||
|
message_level = DEFAULT_MSG_LEVEL;
|
||||||
|
break;
|
||||||
|
+ case OPT_DRY_RUN:
|
||||||
|
+ info->flag_dry_run = TRUE;
|
||||||
|
+ break;
|
||||||
|
case '?':
|
||||||
|
MSG("Commandline parameter is invalid.\n");
|
||||||
|
MSG("Try `makedumpfile --help' for more information.\n");
|
||||||
|
diff --git a/makedumpfile-1.6.8/makedumpfile.h b/makedumpfile-1.6.8/makedumpfile.h
|
||||||
|
index 5f50080..4c4222c 100644
|
||||||
|
--- a/makedumpfile-1.6.8/makedumpfile.h
|
||||||
|
+++ b/makedumpfile-1.6.8/makedumpfile.h
|
||||||
|
@@ -1322,6 +1322,7 @@ struct DumpInfo {
|
||||||
|
int flag_vmemmap; /* kernel supports vmemmap address space */
|
||||||
|
int flag_excludevm; /* -e - excluding unused vmemmap pages */
|
||||||
|
int flag_use_count; /* _refcount is named _count in struct page */
|
||||||
|
+ int flag_dry_run; /* do not create a vmcore file */
|
||||||
|
unsigned long vaddr_for_vtop; /* virtual address for debugging */
|
||||||
|
long page_size; /* size of page */
|
||||||
|
long page_shift;
|
||||||
|
@@ -2425,6 +2426,7 @@ struct elf_prstatus {
|
||||||
|
#define OPT_NUM_THREADS OPT_START+16
|
||||||
|
#define OPT_PARTIAL_DMESG OPT_START+17
|
||||||
|
#define OPT_CHECK_PARAMS OPT_START+18
|
||||||
|
+#define OPT_DRY_RUN OPT_START+19
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function Prototype.
|
||||||
|
diff --git a/makedumpfile-1.6.8/print_info.c b/makedumpfile-1.6.8/print_info.c
|
||||||
|
index e0c38b4..d2b0cb7 100644
|
||||||
|
--- a/makedumpfile-1.6.8/print_info.c
|
||||||
|
+++ b/makedumpfile-1.6.8/print_info.c
|
||||||
|
@@ -308,6 +308,9 @@ print_usage(void)
|
||||||
|
MSG(" the crashkernel range, then calculates the page number of different kind per\n");
|
||||||
|
MSG(" vmcoreinfo. So currently /proc/kcore need be specified explicitly.\n");
|
||||||
|
MSG("\n");
|
||||||
|
+ MSG(" [--dry-run]:\n");
|
||||||
|
+ MSG(" This option runs makedumpfile without writting output dump file.\n");
|
||||||
|
+ MSG("\n");
|
||||||
|
MSG(" [-D]:\n");
|
||||||
|
MSG(" Print debugging message.\n");
|
||||||
|
MSG("\n");
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@ -0,0 +1,107 @@
|
|||||||
|
From 6f3e75a558ed50d6ff0b42e3f61c099b2005b7bb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Julien Thierry <jthierry@redhat.com>
|
||||||
|
Date: Tue, 24 Nov 2020 10:45:25 +0000
|
||||||
|
Subject: [PATCH] [PATCH 2/2] Add shorthand --show-stats option to show report
|
||||||
|
stats
|
||||||
|
|
||||||
|
Provide shorthand --show-stats option to enable report messages
|
||||||
|
without needing to set a particular value for message-level.
|
||||||
|
|
||||||
|
Signed-off-by: Julien Thierry <jthierry@redhat.com>
|
||||||
|
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||||
|
---
|
||||||
|
makedumpfile.8 | 5 +++++
|
||||||
|
makedumpfile.c | 9 ++++++++-
|
||||||
|
makedumpfile.h | 1 +
|
||||||
|
print_info.c | 7 ++++++-
|
||||||
|
4 files changed, 20 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/makedumpfile-1.6.8/makedumpfile.8 b/makedumpfile-1.6.8/makedumpfile.8
|
||||||
|
index 5e902cd..dcca2dd 100644
|
||||||
|
--- a/makedumpfile-1.6.8/makedumpfile.8
|
||||||
|
+++ b/makedumpfile-1.6.8/makedumpfile.8
|
||||||
|
@@ -643,6 +643,11 @@ Do not write the output dump file while still performing operations specified
|
||||||
|
by other options.
|
||||||
|
This option cannot be used with the --dump-dmesg, --reassemble and -g options.
|
||||||
|
|
||||||
|
+.TP
|
||||||
|
+\fB\-\-show-stats\fR
|
||||||
|
+Display report messages. This is an alternative to enabling bit 4 in the level
|
||||||
|
+provided to --message-level.
|
||||||
|
+
|
||||||
|
.SH ENVIRONMENT VARIABLES
|
||||||
|
|
||||||
|
.TP 8
|
||||||
|
diff --git a/makedumpfile-1.6.8/makedumpfile.c b/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
index 8c80c49..ba0003a 100644
|
||||||
|
--- a/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
+++ b/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
@@ -11540,13 +11540,14 @@ static struct option longopts[] = {
|
||||||
|
{"num-threads", required_argument, NULL, OPT_NUM_THREADS},
|
||||||
|
{"check-params", no_argument, NULL, OPT_CHECK_PARAMS},
|
||||||
|
{"dry-run", no_argument, NULL, OPT_DRY_RUN},
|
||||||
|
+ {"show-stats", no_argument, NULL, OPT_SHOW_STATS},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
- int i, opt, flag_debug = FALSE;
|
||||||
|
+ int i, opt, flag_debug = FALSE, flag_show_stats = FALSE;
|
||||||
|
|
||||||
|
if ((info = calloc(1, sizeof(struct DumpInfo))) == NULL) {
|
||||||
|
ERRMSG("Can't allocate memory for the pagedesc cache. %s.\n",
|
||||||
|
@@ -11709,6 +11710,9 @@ main(int argc, char *argv[])
|
||||||
|
case OPT_DRY_RUN:
|
||||||
|
info->flag_dry_run = TRUE;
|
||||||
|
break;
|
||||||
|
+ case OPT_SHOW_STATS:
|
||||||
|
+ flag_show_stats = TRUE;
|
||||||
|
+ break;
|
||||||
|
case '?':
|
||||||
|
MSG("Commandline parameter is invalid.\n");
|
||||||
|
MSG("Try `makedumpfile --help' for more information.\n");
|
||||||
|
@@ -11718,6 +11722,9 @@ main(int argc, char *argv[])
|
||||||
|
if (flag_debug)
|
||||||
|
message_level |= ML_PRINT_DEBUG_MSG;
|
||||||
|
|
||||||
|
+ if (flag_show_stats)
|
||||||
|
+ message_level |= ML_PRINT_REPORT_MSG;
|
||||||
|
+
|
||||||
|
if (info->flag_check_params)
|
||||||
|
/* suppress debugging messages */
|
||||||
|
message_level = DEFAULT_MSG_LEVEL;
|
||||||
|
diff --git a/makedumpfile-1.6.8/makedumpfile.h b/makedumpfile-1.6.8/makedumpfile.h
|
||||||
|
index 4c4222c..2fcb62e 100644
|
||||||
|
--- a/makedumpfile-1.6.8/makedumpfile.h
|
||||||
|
+++ b/makedumpfile-1.6.8/makedumpfile.h
|
||||||
|
@@ -2427,6 +2427,7 @@ struct elf_prstatus {
|
||||||
|
#define OPT_PARTIAL_DMESG OPT_START+17
|
||||||
|
#define OPT_CHECK_PARAMS OPT_START+18
|
||||||
|
#define OPT_DRY_RUN OPT_START+19
|
||||||
|
+#define OPT_SHOW_STATS OPT_START+20
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function Prototype.
|
||||||
|
diff --git a/makedumpfile-1.6.8/print_info.c b/makedumpfile-1.6.8/print_info.c
|
||||||
|
index d2b0cb7..ad4184e 100644
|
||||||
|
--- a/makedumpfile-1.6.8/print_info.c
|
||||||
|
+++ b/makedumpfile-1.6.8/print_info.c
|
||||||
|
@@ -309,7 +309,12 @@ print_usage(void)
|
||||||
|
MSG(" vmcoreinfo. So currently /proc/kcore need be specified explicitly.\n");
|
||||||
|
MSG("\n");
|
||||||
|
MSG(" [--dry-run]:\n");
|
||||||
|
- MSG(" This option runs makedumpfile without writting output dump file.\n");
|
||||||
|
+ MSG(" Do not write the output dump file while still performing operations specified\n");
|
||||||
|
+ MSG(" by other options. This option cannot be used with --dump-dmesg, --reassemble\n");
|
||||||
|
+ MSG(" and -g options.\n");
|
||||||
|
+ MSG("\n");
|
||||||
|
+ MSG(" [--show-stats]:\n");
|
||||||
|
+ MSG(" Set message-level to print report messages\n");
|
||||||
|
MSG("\n");
|
||||||
|
MSG(" [-D]:\n");
|
||||||
|
MSG(" Print debugging message.\n");
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@ -0,0 +1,59 @@
|
|||||||
|
From 0ef2ca6c9fa2f61f217a4bf5d7fd70f24e12b2eb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||||
|
Date: Thu, 4 Feb 2021 16:29:06 +0900
|
||||||
|
Subject: [PATCH] [PATCH] Show write byte size in report messages
|
||||||
|
|
||||||
|
Show write byte size in report messages. This value can be different
|
||||||
|
from the size of the actual file because of some holes on dumpfile
|
||||||
|
data structure.
|
||||||
|
|
||||||
|
$ makedumpfile --show-stats -l -d 1 vmcore dump.ld1
|
||||||
|
...
|
||||||
|
Total pages : 0x0000000000080000
|
||||||
|
Write bytes : 377686445
|
||||||
|
...
|
||||||
|
# ls -l dump.ld1
|
||||||
|
-rw------- 1 root root 377691573 Feb 4 16:28 dump.ld1
|
||||||
|
|
||||||
|
Note that this value should not be used with /proc/kcore to determine
|
||||||
|
how much disk space is needed for crash dump, because the real memory
|
||||||
|
usage when a crash occurs can vary widely.
|
||||||
|
|
||||||
|
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||||
|
---
|
||||||
|
makedumpfile.c | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/makedumpfile-1.6.8/makedumpfile.c b/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
index fcd766b..894c88e 100644
|
||||||
|
--- a/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
+++ b/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
@@ -48,6 +48,8 @@ char filename_stdout[] = FILENAME_STDOUT;
|
||||||
|
static unsigned long long cache_hit;
|
||||||
|
static unsigned long long cache_miss;
|
||||||
|
|
||||||
|
+static unsigned long long write_bytes;
|
||||||
|
+
|
||||||
|
static void first_cycle(mdf_pfn_t start, mdf_pfn_t max, struct cycle *cycle)
|
||||||
|
{
|
||||||
|
cycle->start_pfn = round(start, info->pfn_cyclic);
|
||||||
|
@@ -4715,6 +4717,8 @@ write_and_check_space(int fd, void *buf, size_t buf_size, char *file_name)
|
||||||
|
{
|
||||||
|
int status, written_size = 0;
|
||||||
|
|
||||||
|
+ write_bytes += buf_size;
|
||||||
|
+
|
||||||
|
if (info->flag_dry_run)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
@@ -10002,6 +10006,7 @@ print_report(void)
|
||||||
|
REPORT_MSG("Memory Hole : 0x%016llx\n", pfn_memhole);
|
||||||
|
REPORT_MSG("--------------------------------------------------\n");
|
||||||
|
REPORT_MSG("Total pages : 0x%016llx\n", info->max_mapnr);
|
||||||
|
+ REPORT_MSG("Write bytes : %llu\n", write_bytes);
|
||||||
|
REPORT_MSG("\n");
|
||||||
|
REPORT_MSG("Cache hit: %lld, miss: %lld", cache_hit, cache_miss);
|
||||||
|
if (cache_hit + cache_miss)
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@ -0,0 +1,60 @@
|
|||||||
|
From 38d921a2ef50ebd36258097553626443ffe27496 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Coiby Xu <coxu@redhat.com>
|
||||||
|
Date: Tue, 15 Jun 2021 18:26:31 +0800
|
||||||
|
Subject: [PATCH] check for invalid physical address of /proc/kcore
|
||||||
|
when finding max_paddr
|
||||||
|
|
||||||
|
Kernel commit 464920104bf7adac12722035bfefb3d772eb04d8 ("/proc/kcore:
|
||||||
|
update physical address for kcore ram and text") sets an invalid paddr
|
||||||
|
(0xffffffffffffffff = -1) for PT_LOAD segments of not direct mapped
|
||||||
|
regions:
|
||||||
|
|
||||||
|
$ readelf -l /proc/kcore
|
||||||
|
...
|
||||||
|
Program Headers:
|
||||||
|
Type Offset VirtAddr PhysAddr
|
||||||
|
FileSiz MemSiz Flags Align
|
||||||
|
NOTE 0x0000000000000120 0x0000000000000000 0x0000000000000000
|
||||||
|
0x0000000000002320 0x0000000000000000 0x0
|
||||||
|
LOAD 0x1000000000010000 0xd000000000000000 0xffffffffffffffff
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
0x0001f80000000000 0x0001f80000000000 RWE 0x10000
|
||||||
|
|
||||||
|
makedumpfile uses max_paddr to calculate the number of sections for
|
||||||
|
sparse memory model thus wrong number is obtained based on max_paddr
|
||||||
|
(-1). This error could lead to the failure of copying /proc/kcore
|
||||||
|
for RHEL-8.5 on ppc64le machine [1]:
|
||||||
|
|
||||||
|
$ makedumpfile /proc/kcore vmcore1
|
||||||
|
get_mem_section: Could not validate mem_section.
|
||||||
|
get_mm_sparsemem: Can't get the address of mem_section.
|
||||||
|
|
||||||
|
makedumpfile Failed.
|
||||||
|
|
||||||
|
Let's check if the phys_start of the segment is a valid physical
|
||||||
|
address to fix this problem.
|
||||||
|
|
||||||
|
[1] https://bugzilla.redhat.com/show_bug.cgi?id=1965267
|
||||||
|
|
||||||
|
Reported-by: Xiaoying Yan <yiyan@redhat.com>
|
||||||
|
Signed-off-by: Coiby Xu <coxu@redhat.com>
|
||||||
|
---
|
||||||
|
elf_info.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/makedumpfile-1.6.8/elf_info.c b/makedumpfile-1.6.8/elf_info.c
|
||||||
|
index e8affb7..bc24083 100644
|
||||||
|
--- a/makedumpfile-1.6.8/elf_info.c
|
||||||
|
+++ b/makedumpfile-1.6.8/elf_info.c
|
||||||
|
@@ -628,7 +628,7 @@ get_max_paddr(void)
|
||||||
|
|
||||||
|
for (i = 0; i < num_pt_loads; i++) {
|
||||||
|
pls = &pt_loads[i];
|
||||||
|
- if (max_paddr < pls->phys_end)
|
||||||
|
+ if (pls->phys_start != NOT_PADDR && max_paddr < pls->phys_end)
|
||||||
|
max_paddr = pls->phys_end;
|
||||||
|
}
|
||||||
|
return max_paddr;
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@ -0,0 +1,43 @@
|
|||||||
|
From 9a6f589d99dcef114c89fde992157f5467028c8f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tao Liu <ltao@redhat.com>
|
||||||
|
Date: Fri, 18 Jun 2021 18:28:04 +0800
|
||||||
|
Subject: [PATCH] check for invalid physical address of /proc/kcore
|
||||||
|
when making ELF dumpfile
|
||||||
|
|
||||||
|
Previously when executing makedumpfile with -E option against
|
||||||
|
/proc/kcore, makedumpfile will fail:
|
||||||
|
|
||||||
|
# makedumpfile -E -d 31 /proc/kcore kcore.dump
|
||||||
|
...
|
||||||
|
write_elf_load_segment: Can't convert physaddr(ffffffffffffffff) to an offset.
|
||||||
|
|
||||||
|
makedumpfile Failed.
|
||||||
|
|
||||||
|
It's because /proc/kcore contains PT_LOAD program headers which have
|
||||||
|
physaddr (0xffffffffffffffff). With -E option, makedumpfile will
|
||||||
|
try to convert the physaddr to an offset and fails.
|
||||||
|
|
||||||
|
Skip the PT_LOAD program headers which have such physaddr.
|
||||||
|
|
||||||
|
Signed-off-by: Tao Liu <ltao@redhat.com>
|
||||||
|
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||||
|
---
|
||||||
|
makedumpfile.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/makedumpfile-1.6.8/makedumpfile.c b/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
index 894c88e..fcb571f 100644
|
||||||
|
--- a/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
+++ b/makedumpfile-1.6.8/makedumpfile.c
|
||||||
|
@@ -7764,7 +7764,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)
|
||||||
|
if (!get_phdr_memory(i, &load))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
- if (load.p_type != PT_LOAD)
|
||||||
|
+ if (load.p_type != PT_LOAD || load.p_paddr == NOT_PADDR)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
off_memory= load.p_offset;
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@ -226,7 +226,7 @@ check_user_configured_target()
|
|||||||
|
|
||||||
# For user configured target, use $SAVE_PATH as the dump path within the target
|
# For user configured target, use $SAVE_PATH as the dump path within the target
|
||||||
if [ ! -d "$_mnt/$SAVE_PATH" ]; then
|
if [ ! -d "$_mnt/$SAVE_PATH" ]; then
|
||||||
perror_exit "Dump path \"$SAVE_PATH\" does not exist in dump target \"$_target\""
|
perror_exit "Dump path \"$_mnt/$SAVE_PATH\" does not exist in dump target \"$_target\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_size fs "$_target"
|
check_size fs "$_target"
|
||||||
@ -305,7 +305,6 @@ get_override_resettable()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# $1: function name
|
# $1: function name
|
||||||
for_each_block_target()
|
for_each_block_target()
|
||||||
{
|
{
|
||||||
@ -320,8 +319,6 @@ for_each_block_target()
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#judge if a specific device with $1 is unresettable
|
#judge if a specific device with $1 is unresettable
|
||||||
#return false if unresettable.
|
#return false if unresettable.
|
||||||
is_unresettable()
|
is_unresettable()
|
||||||
@ -358,32 +355,15 @@ check_resettable()
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: maj:min
|
|
||||||
is_crypt()
|
|
||||||
{
|
|
||||||
local majmin=$1 dev line ID_FS_TYPE=""
|
|
||||||
|
|
||||||
line=$(udevadm info --query=property --path=/sys/dev/block/$majmin \
|
|
||||||
| grep "^ID_FS_TYPE")
|
|
||||||
eval "$line"
|
|
||||||
[[ "$ID_FS_TYPE" = "crypto_LUKS" ]] && {
|
|
||||||
dev=$(udevadm info --query=all --path=/sys/dev/block/$majmin | awk -F= '/DEVNAME/{print $2}')
|
|
||||||
derror "Device $dev is encrypted."
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
check_crypt()
|
check_crypt()
|
||||||
{
|
{
|
||||||
local _ret _target
|
local _dev
|
||||||
|
|
||||||
for_each_block_target is_crypt
|
for _dev in $(get_kdump_targets); do
|
||||||
_ret=$?
|
if [[ -n $(get_luks_crypt_dev "$(get_maj_min "$_dev")") ]]; then
|
||||||
|
derror "Device $_dev is encrypted." && return 1
|
||||||
[ $_ret -eq 0 ] && return
|
fi
|
||||||
|
done
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ! check_resettable; then
|
if ! check_resettable; then
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Name: kexec-tools
|
Name: kexec-tools
|
||||||
Version: 2.0.20
|
Version: 2.0.20
|
||||||
Release: 46%{?dist}.2
|
Release: 57%{?dist}
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Group: Applications/System
|
Group: Applications/System
|
||||||
Summary: The kexec/kdump userspace component
|
Summary: The kexec/kdump userspace component
|
||||||
@ -36,6 +36,8 @@ Source30: kdump.sysconfig.aarch64
|
|||||||
Source31: fadump-howto.txt
|
Source31: fadump-howto.txt
|
||||||
Source32: 60-kdump.install
|
Source32: 60-kdump.install
|
||||||
Source33: kdump-logger.sh
|
Source33: kdump-logger.sh
|
||||||
|
Source34: kdump-migrate-action.sh
|
||||||
|
Source35: kdump-restart.sh
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# These are sources for mkdumpramfs
|
# These are sources for mkdumpramfs
|
||||||
@ -52,6 +54,9 @@ Source107: dracut-kdump-emergency.target
|
|||||||
Source108: dracut-early-kdump.sh
|
Source108: dracut-early-kdump.sh
|
||||||
Source109: dracut-early-kdump-module-setup.sh
|
Source109: dracut-early-kdump-module-setup.sh
|
||||||
|
|
||||||
|
%ifarch ppc64 ppc64le
|
||||||
|
Requires(post): servicelog
|
||||||
|
%endif
|
||||||
Requires(post): systemd-units
|
Requires(post): systemd-units
|
||||||
Requires(preun): systemd-units
|
Requires(preun): systemd-units
|
||||||
Requires(postun): systemd-units
|
Requires(postun): systemd-units
|
||||||
@ -111,7 +116,11 @@ Patch613: kexec-tools-2.0.20-eppic-Remove-duplicated-variable-declaration.patch
|
|||||||
|
|
||||||
# Patches 701 onward for makedumpfile
|
# Patches 701 onward for makedumpfile
|
||||||
Patch701: rhelonly-kexec-tools-2.0.20-makedumpfile-arm64-Add-support-for-ARMv8.2-LVA-52-bi.patch
|
Patch701: rhelonly-kexec-tools-2.0.20-makedumpfile-arm64-Add-support-for-ARMv8.2-LVA-52-bi.patch
|
||||||
|
Patch702: kexec-tools-2.0.20-makedumpfile-Add-dry-run-option-to-prevent-writing.patch
|
||||||
|
Patch703: kexec-tools-2.0.20-makedumpfile-Add-shorthand-show-stats-option-to-show.patch
|
||||||
|
Patch704: kexec-tools-2.0.20-makedumpfile-Show-write-byte-size-in-report-messages.patch
|
||||||
|
Patch705: kexec-tools-2.0.22-makedumpfile-check-for-invalid-physical-address-proc-kcore-when-finding-max_paddr.patch
|
||||||
|
Patch706: kexec-tools-2.0.22-makedumpfile-check-for-invalid-physical-address-proc-kcore-when-making-ELF-dumpfile.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
kexec-tools provides /usr/sbin/kexec binary that facilitates a new
|
kexec-tools provides /usr/sbin/kexec binary that facilitates a new
|
||||||
@ -141,6 +150,11 @@ tar -z -x -v -f %{SOURCE19}
|
|||||||
%patch612 -p1
|
%patch612 -p1
|
||||||
%patch613 -p1
|
%patch613 -p1
|
||||||
%patch701 -p1
|
%patch701 -p1
|
||||||
|
%patch702 -p1
|
||||||
|
%patch703 -p1
|
||||||
|
%patch704 -p1
|
||||||
|
%patch705 -p1
|
||||||
|
%patch706 -p1
|
||||||
|
|
||||||
%ifarch ppc
|
%ifarch ppc
|
||||||
%define archdef ARCH=ppc
|
%define archdef ARCH=ppc
|
||||||
@ -218,6 +232,8 @@ install -m 644 %{SOURCE13} $RPM_BUILD_ROOT%{_udevrulesdir}/98-kexec.rules
|
|||||||
%endif
|
%endif
|
||||||
%ifarch ppc64 ppc64le
|
%ifarch ppc64 ppc64le
|
||||||
install -m 644 %{SOURCE14} $RPM_BUILD_ROOT%{_udevrulesdir}/98-kexec.rules
|
install -m 644 %{SOURCE14} $RPM_BUILD_ROOT%{_udevrulesdir}/98-kexec.rules
|
||||||
|
install -m 755 %{SOURCE34} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-migrate-action.sh
|
||||||
|
install -m 755 %{SOURCE35} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-restart.sh
|
||||||
%endif
|
%endif
|
||||||
%ifnarch s390x
|
%ifnarch s390x
|
||||||
install -m 755 %{SOURCE29} $RPM_BUILD_ROOT%{_udevrulesdir}/../kdump-udev-throttler
|
install -m 755 %{SOURCE29} $RPM_BUILD_ROOT%{_udevrulesdir}/../kdump-udev-throttler
|
||||||
@ -270,6 +286,13 @@ mv $RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/* $RPM_BUILD_ROOT/%{d
|
|||||||
%systemd_post kdump.service
|
%systemd_post kdump.service
|
||||||
|
|
||||||
touch /etc/kdump.conf
|
touch /etc/kdump.conf
|
||||||
|
|
||||||
|
%ifarch ppc64 ppc64le
|
||||||
|
servicelog_notify --remove --command=/usr/lib/kdump/kdump-migrate-action.sh
|
||||||
|
servicelog_notify --add --command=/usr/lib/kdump/kdump-migrate-action.sh --match='refcode="#MIGRATE" and serviceable=0' --type=EVENT --method=pairs_stdin
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
# This portion of the script is temporary. Its only here
|
# This portion of the script is temporary. Its only here
|
||||||
# to fix up broken boxes that require special settings
|
# to fix up broken boxes that require special settings
|
||||||
# in /etc/sysconfig/kdump. It will be removed when
|
# in /etc/sysconfig/kdump. It will be removed when
|
||||||
@ -297,6 +320,9 @@ fi
|
|||||||
%systemd_postun_with_restart kdump.service
|
%systemd_postun_with_restart kdump.service
|
||||||
|
|
||||||
%preun
|
%preun
|
||||||
|
%ifarch ppc64 ppc64le
|
||||||
|
servicelog_notify --remove --command=/usr/lib/kdump/kdump-migrate-action.sh
|
||||||
|
%endif
|
||||||
# Package removal, not upgrade
|
# Package removal, not upgrade
|
||||||
%systemd_preun kdump.service
|
%systemd_preun kdump.service
|
||||||
|
|
||||||
@ -380,15 +406,60 @@ done
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Jul 1 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-46.2
|
* Fri Aug 27 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-57
|
||||||
- Write to `/var/lib/kdump` if $KDUMP_BOOTDIR not writable
|
|
||||||
|
|
||||||
* Wed May 12 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-46.1
|
|
||||||
- Implement IP netmask calculation to replace "ipcalc -m"
|
|
||||||
|
|
||||||
* Thu Feb 25 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-46
|
|
||||||
- kdumpctl: enable secure boot on ppc64le LPARs
|
- kdumpctl: enable secure boot on ppc64le LPARs
|
||||||
|
|
||||||
|
* Fri Aug 6 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-56
|
||||||
|
- kdumpctl: fix a typo
|
||||||
|
|
||||||
|
* Mon Aug 2 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-55
|
||||||
|
- kdump/ppc64: migration action registration clean up
|
||||||
|
|
||||||
|
* Fri Jul 23 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-54
|
||||||
|
- kdump/ppc64: rebuild initramfs image after migration
|
||||||
|
- Check the existence of /sys/bus/ccwgroup/devices/*/online beforehand
|
||||||
|
- kdump.sysconfig.s390: Remove "prot_virt" from kdump kernel cmdline
|
||||||
|
|
||||||
|
* Fri Jul 2 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-53
|
||||||
|
- check for invalid physical address of /proc/kcore when making ELF dumpfile
|
||||||
|
- check for invalid physical address of /proc/kcore when finding max_paddr
|
||||||
|
- fix format issue in find_online_znet_device
|
||||||
|
- check the existence of /sys/bus/ccwgroup/devices before trying to find online network device
|
||||||
|
- kdump-lib.sh: fix a warning in prepare_kdump_bootinfo()
|
||||||
|
|
||||||
|
* Thu Jun 17 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-52
|
||||||
|
- Write to `/var/lib/kdump` if $KDUMP_BOOTDIR not writable
|
||||||
|
- Iterate /sys/bus/ccwgroup/devices to tell if we should set up rd.znet
|
||||||
|
- mkdumprd: display the absolute path of dump location in the check_user_configured_target()
|
||||||
|
|
||||||
|
* Wed Jun 2 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-51
|
||||||
|
- Stop reloading kdump service on CPU hotplug event for FADump
|
||||||
|
- fadump: improve fadump-howto.txt about remote dump target setup
|
||||||
|
|
||||||
|
* Tue May 25 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-50
|
||||||
|
- rd.route should use the name from kdump_setup_ifname
|
||||||
|
- get kdump ifname once in kdump_install_netdev
|
||||||
|
|
||||||
|
* Tue May 25 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-49
|
||||||
|
- kdump-lib.sh: fix the case if no enough total RAM for kdump in get_recommend_size()
|
||||||
|
|
||||||
|
* Thu May 20 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-48
|
||||||
|
- kdumpctl: Add kdumpctl estimate
|
||||||
|
- mkdumprd: make use of the new get_luks_crypt_dev helper
|
||||||
|
- kdump-lib.sh: introduce a helper to get all crypt dev used by kdump
|
||||||
|
- kdump-lib.sh: introduce a helper to get underlying crypt device
|
||||||
|
- RHEL-only: keep total memory size coherent to RHEL-only kernel patch
|
||||||
|
- Show write byte size in report messages
|
||||||
|
- Add shorthand --show-stats option to show report stats
|
||||||
|
- Add --dry-run option to prevent writing the dumpfile
|
||||||
|
- kdump-lib.sh: introduce functions to return recommened mem size
|
||||||
|
|
||||||
|
* Mon May 10 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-47
|
||||||
|
- Implement IP netmask calculation to replace "ipcalc -m"
|
||||||
|
- kdumpctl: fix check_config error when kdump.conf is empty
|
||||||
|
- Fix incorrect vmcore permissions when dumped through ssh
|
||||||
|
- Fix incorrect permissions on kdump dmesg file
|
||||||
|
|
||||||
* Mon Jan 25 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-45
|
* Mon Jan 25 2021 Pingfan Liu <piliu@redhat.com> - 2.0.20-45
|
||||||
- origin/rhel-8.4.0) Revert "Revert "Append both nofail and x-systemd.before to kdump mount target""
|
- origin/rhel-8.4.0) Revert "Revert "Append both nofail and x-systemd.before to kdump mount target""
|
||||||
- kdump.conf: add ipv6 example for nfs and ssh dump
|
- kdump.conf: add ipv6 example for nfs and ssh dump
|
||||||
|
Loading…
Reference in New Issue
Block a user