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