import kexec-tools-2.0.25-13.el9_2
This commit is contained in:
parent
603ceaf5ab
commit
899c5f5857
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,3 +1,3 @@
|
|||||||
SOURCES/eppic-e8844d3.tar.gz
|
SOURCES/eppic-e8844d3.tar.gz
|
||||||
SOURCES/kexec-tools-2.0.24.tar.xz
|
SOURCES/kexec-tools-2.0.25.tar.xz
|
||||||
SOURCES/makedumpfile-1.7.1.tar.gz
|
SOURCES/makedumpfile-1.7.2.tar.gz
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
80ac3f5e77d3c79883edadf14428734db4720009 SOURCES/eppic-e8844d3.tar.gz
|
80ac3f5e77d3c79883edadf14428734db4720009 SOURCES/eppic-e8844d3.tar.gz
|
||||||
62b7a99779d66ffd07a1684f7b640d32c9697f0c SOURCES/kexec-tools-2.0.24.tar.xz
|
78d5d4f7e9d358ca234db9c84a551d9d411eb0b5 SOURCES/kexec-tools-2.0.25.tar.xz
|
||||||
8f8485c2a1edbc730f4fa1b96ae3ec8d8f1f9761 SOURCES/makedumpfile-1.7.1.tar.gz
|
24bce02cd42cdbb960ada4d9e733355582e35784 SOURCES/makedumpfile-1.7.2.tar.gz
|
||||||
|
31
SOURCES/60-fadump.install
Executable file
31
SOURCES/60-fadump.install
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
COMMAND="$1"
|
||||||
|
KERNEL_VERSION="$2"
|
||||||
|
|
||||||
|
if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Currently, fadump is supported only in environments with
|
||||||
|
# writable /boot directory.
|
||||||
|
if [[ ! -w "/boot" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
FADUMP_INITRD="/boot/.initramfs-${KERNEL_VERSION}.img.default"
|
||||||
|
FADUMP_INITRD_CHECKSUM="$FADUMP_INITRD.checksum"
|
||||||
|
|
||||||
|
ret=0
|
||||||
|
case "$COMMAND" in
|
||||||
|
add)
|
||||||
|
# Do nothing, fadump initramfs is strictly host only
|
||||||
|
# and managed by kdump service
|
||||||
|
;;
|
||||||
|
remove)
|
||||||
|
rm -f -- "$FADUMP_INITRD"
|
||||||
|
rm -f -- "$FADUMP_INITRD_CHECKSUM"
|
||||||
|
ret=$?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
exit $ret
|
@ -7,7 +7,7 @@ KERNEL_IMAGE="$4"
|
|||||||
|
|
||||||
case "$COMMAND" in
|
case "$COMMAND" in
|
||||||
add)
|
add)
|
||||||
kdumpctl reset-crashkernel-for-installed_kernel "$KERNEL_VERSION"
|
kdumpctl _reset-crashkernel-for-installed_kernel "$KERNEL_VERSION"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -82,6 +82,8 @@ kernels to the default value is:
|
|||||||
|
|
||||||
grubby --update-kernel ALL --args "crashkernel=$(kdumpctl get-default-crashkernel)"
|
grubby --update-kernel ALL --args "crashkernel=$(kdumpctl get-default-crashkernel)"
|
||||||
|
|
||||||
|
NOTE: On s390x you also need to run zipl for the change to take effect.
|
||||||
|
|
||||||
Estimate crashkernel
|
Estimate crashkernel
|
||||||
====================
|
====================
|
||||||
|
|
||||||
|
@ -162,9 +162,15 @@ dump_fs()
|
|||||||
$CORE_COLLECTOR /proc/vmcore "$_dump_fs_path/vmcore-incomplete"
|
$CORE_COLLECTOR /proc/vmcore "$_dump_fs_path/vmcore-incomplete"
|
||||||
_dump_exitcode=$?
|
_dump_exitcode=$?
|
||||||
if [ $_dump_exitcode -eq 0 ]; then
|
if [ $_dump_exitcode -eq 0 ]; then
|
||||||
|
sync -f "$_dump_fs_path/vmcore-incomplete"
|
||||||
|
_sync_exitcode=$?
|
||||||
|
if [ $_sync_exitcode -eq 0 ]; then
|
||||||
mv "$_dump_fs_path/vmcore-incomplete" "$_dump_fs_path/vmcore"
|
mv "$_dump_fs_path/vmcore-incomplete" "$_dump_fs_path/vmcore"
|
||||||
sync
|
|
||||||
dinfo "saving vmcore complete"
|
dinfo "saving vmcore complete"
|
||||||
|
else
|
||||||
|
derror "sync vmcore failed, exitcode:$_sync_exitcode"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
derror "saving vmcore failed, exitcode:$_dump_exitcode"
|
derror "saving vmcore failed, exitcode:$_dump_exitcode"
|
||||||
fi
|
fi
|
||||||
@ -472,27 +478,54 @@ save_vmcore_dmesg_ssh()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait_online_network()
|
||||||
|
{
|
||||||
|
# In some cases, network may still not be ready because nm-online is called
|
||||||
|
# with "-s" which means to wait for NetworkManager startup to complete, rather
|
||||||
|
# than waiting for network connectivity specifically. Wait 10mins more for the
|
||||||
|
# network to be truely ready in these cases.
|
||||||
|
_loop=0
|
||||||
|
while [ $_loop -lt 600 ]; do
|
||||||
|
sleep 1
|
||||||
|
_loop=$((_loop + 1))
|
||||||
|
if _route=$(kdump_get_ip_route "$1" 2> /dev/null); then
|
||||||
|
printf "%s" "$_route"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
derror "Oops. The network still isn't ready after waiting 10mins."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
get_host_ip()
|
get_host_ip()
|
||||||
{
|
{
|
||||||
if is_nfs_dump_target || is_ssh_dump_target; then
|
|
||||||
kdumpnic=$(getarg kdumpnic=)
|
if ! is_nfs_dump_target && ! is_ssh_dump_target; then
|
||||||
if [ -z "$kdumpnic" ]; then
|
|
||||||
derror "failed to get kdumpnic!"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
if ! kdumphost=$(ip addr show dev "$kdumpnic" | grep '[ ]*inet'); then
|
|
||||||
derror "wrong kdumpnic: $kdumpnic"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
kdumphost=$(echo "$kdumphost" | head -n 1 | awk '{print $2}')
|
|
||||||
kdumphost="${kdumphost%%/*}"
|
|
||||||
if [ -z "$kdumphost" ]; then
|
|
||||||
derror "wrong kdumpnic: $kdumpnic"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
HOST_IP=$kdumphost
|
|
||||||
fi
|
|
||||||
return 0
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
_kdump_remote_ip=$(getarg kdump_remote_ip=)
|
||||||
|
|
||||||
|
if [ -z "$_kdump_remote_ip" ]; then
|
||||||
|
derror "failed to get remote IP address!"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! _route=$(wait_online_network "$_kdump_remote_ip"); then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
_netdev=$(kdump_get_ip_route_field "$_route" "dev")
|
||||||
|
|
||||||
|
if ! _kdumpip=$(ip addr show dev "$_netdev" | grep '[ ]*inet'); then
|
||||||
|
derror "Failed to get IP of $_netdev"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
_kdumpip=$(echo "$_kdumpip" | head -n 1 | awk '{print $2}')
|
||||||
|
_kdumpip="${_kdumpip%%/*}"
|
||||||
|
HOST_IP=$_kdumpip
|
||||||
}
|
}
|
||||||
|
|
||||||
read_kdump_confs()
|
read_kdump_confs()
|
||||||
@ -515,7 +548,7 @@ read_kdump_confs()
|
|||||||
DUMP_INSTRUCTION="dump_fs $config_val"
|
DUMP_INSTRUCTION="dump_fs $config_val"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
ext[234] | xfs | btrfs | minix | nfs)
|
ext[234] | xfs | btrfs | minix | nfs | virtiofs)
|
||||||
config_val=$(get_mntpoint_from_target "$config_val")
|
config_val=$(get_mntpoint_from_target "$config_val")
|
||||||
DUMP_INSTRUCTION="dump_fs $config_val"
|
DUMP_INSTRUCTION="dump_fs $config_val"
|
||||||
;;
|
;;
|
||||||
|
@ -1,10 +1,22 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
_DRACUT_KDUMP_NM_TMP_DIR="$DRACUT_TMPDIR/$$-DRACUT_KDUMP_NM"
|
||||||
|
|
||||||
|
_save_kdump_netifs() {
|
||||||
|
unique_netifs[$1]=1
|
||||||
|
}
|
||||||
|
|
||||||
|
_get_kdump_netifs() {
|
||||||
|
echo -n "${!unique_netifs[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
kdump_module_init() {
|
kdump_module_init() {
|
||||||
if ! [[ -d "${initdir}/tmp" ]]; then
|
if ! [[ -d "${initdir}/tmp" ]]; then
|
||||||
mkdir -p "${initdir}/tmp"
|
mkdir -p "${initdir}/tmp"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$_DRACUT_KDUMP_NM_TMP_DIR"
|
||||||
|
|
||||||
. /lib/kdump/kdump-lib.sh
|
. /lib/kdump/kdump-lib.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,6 +52,14 @@ depends() {
|
|||||||
_dep="$_dep ssh-client"
|
_dep="$_dep ssh-client"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if is_lvm2_thinp_dump_target; then
|
||||||
|
if grep -q lvmthinpool-monitor <<< $(dracut --list-modules); then
|
||||||
|
add_opt_module lvmthinpool-monitor
|
||||||
|
else
|
||||||
|
dwarning "Required lvmthinpool-monitor modules is missing! Please upgrade dracut >= 057."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$(uname -m)" == "s390x" ]]; then
|
if [[ "$(uname -m)" == "s390x" ]]; then
|
||||||
_dep="$_dep znet"
|
_dep="$_dep znet"
|
||||||
fi
|
fi
|
||||||
@ -84,39 +104,6 @@ source_ifcfg_file() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
kdump_setup_dns() {
|
|
||||||
local _netdev="$1"
|
|
||||||
local _conpath="$2"
|
|
||||||
local _nameserver _dns _tmp array
|
|
||||||
local _dnsfile=${initdir}/etc/cmdline.d/42dns.conf
|
|
||||||
|
|
||||||
_tmp=$(get_nmcli_field_by_conpath "IP4.DNS" "$_conpath")
|
|
||||||
# shellcheck disable=SC2206
|
|
||||||
array=(${_tmp//|/ })
|
|
||||||
if [[ ${array[*]} ]]; then
|
|
||||||
for _dns in "${array[@]}"; do
|
|
||||||
echo "nameserver=$_dns" >> "$_dnsfile"
|
|
||||||
done
|
|
||||||
else
|
|
||||||
dwarning "Failed to get DNS info via nmcli output. Now try sourcing ifcfg script"
|
|
||||||
source_ifcfg_file "$_netdev"
|
|
||||||
[[ -n $DNS1 ]] && echo "nameserver=$DNS1" > "$_dnsfile"
|
|
||||||
[[ -n $DNS2 ]] && echo "nameserver=$DNS2" >> "$_dnsfile"
|
|
||||||
fi
|
|
||||||
|
|
||||||
while read -r content; do
|
|
||||||
_nameserver=$(echo "$content" | grep ^nameserver)
|
|
||||||
[[ -z $_nameserver ]] && continue
|
|
||||||
|
|
||||||
_dns=$(echo "$_nameserver" | awk '{print $2}')
|
|
||||||
[[ -z $_dns ]] && continue
|
|
||||||
|
|
||||||
if [[ ! -f $_dnsfile ]] || ! grep -q "$_dns" "$_dnsfile"; then
|
|
||||||
echo "nameserver=$_dns" >> "$_dnsfile"
|
|
||||||
fi
|
|
||||||
done < "/etc/resolv.conf"
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1: repeat times
|
# $1: repeat times
|
||||||
# $2: string to be repeated
|
# $2: string to be repeated
|
||||||
# $3: separator
|
# $3: separator
|
||||||
@ -227,89 +214,6 @@ cal_netmask_by_prefix() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
#$1: netdev name
|
|
||||||
#$2: srcaddr
|
|
||||||
#if it use static ip echo it, or echo null
|
|
||||||
kdump_static_ip() {
|
|
||||||
local _netdev="$1" _srcaddr="$2" kdumpnic="$3" _ipv6_flag
|
|
||||||
local _netmask _gateway _ipaddr _target _nexthop _prefix
|
|
||||||
|
|
||||||
_ipaddr=$(ip addr show dev "$_netdev" permanent | awk "/ $_srcaddr\/.* /{print \$2}")
|
|
||||||
|
|
||||||
if is_ipv6_address "$_srcaddr"; then
|
|
||||||
_ipv6_flag="-6"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n $_ipaddr ]]; then
|
|
||||||
_gateway=$(ip $_ipv6_flag route list dev "$_netdev" \
|
|
||||||
| awk '/^default /{print $3}' | head -n 1)
|
|
||||||
|
|
||||||
if [[ "x" != "x"$_ipv6_flag ]]; then
|
|
||||||
# _ipaddr="2002::56ff:feb6:56d5/64", _netmask is the number after "/"
|
|
||||||
_netmask=${_ipaddr#*\/}
|
|
||||||
_srcaddr="[$_srcaddr]"
|
|
||||||
_gateway="[$_gateway]"
|
|
||||||
else
|
|
||||||
_prefix=$(cut -d'/' -f2 <<< "$_ipaddr")
|
|
||||||
if ! _netmask=$(cal_netmask_by_prefix "$_prefix" "$_ipv6_flag"); then
|
|
||||||
derror "Failed to calculate netmask for $_ipaddr"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo -n "${_srcaddr}::${_gateway}:${_netmask}::"
|
|
||||||
fi
|
|
||||||
|
|
||||||
/sbin/ip $_ipv6_flag route show | grep -v default \
|
|
||||||
| grep ".*via.* $_netdev " | grep -v "^[[:space:]]*nexthop" \
|
|
||||||
| while read -r _route; do
|
|
||||||
_target=$(echo "$_route" | awk '{print $1}')
|
|
||||||
_nexthop=$(echo "$_route" | awk '{print $3}')
|
|
||||||
if [[ "x" != "x"$_ipv6_flag ]]; then
|
|
||||||
_target="[$_target]"
|
|
||||||
_nexthop="[$_nexthop]"
|
|
||||||
fi
|
|
||||||
echo "rd.route=$_target:$_nexthop:$kdumpnic"
|
|
||||||
done >> "${initdir}/etc/cmdline.d/45route-static.conf"
|
|
||||||
|
|
||||||
kdump_handle_mulitpath_route "$_netdev" "$_srcaddr" "$kdumpnic"
|
|
||||||
}
|
|
||||||
|
|
||||||
kdump_handle_mulitpath_route() {
|
|
||||||
local _netdev="$1" _srcaddr="$2" kdumpnic="$3" _ipv6_flag
|
|
||||||
local _target _nexthop _route _weight _max_weight _rule
|
|
||||||
|
|
||||||
if is_ipv6_address "$_srcaddr"; then
|
|
||||||
_ipv6_flag="-6"
|
|
||||||
fi
|
|
||||||
|
|
||||||
while IFS="" read -r _route; do
|
|
||||||
if [[ $_route =~ [[:space:]]+nexthop ]]; then
|
|
||||||
_route=${_route##[[:space:]]}
|
|
||||||
# Parse multipath route, using previous _target
|
|
||||||
[[ $_target == 'default' ]] && continue
|
|
||||||
[[ $_route =~ .*via.*\ $_netdev ]] || continue
|
|
||||||
|
|
||||||
_weight=$(echo "$_route" | cut -d ' ' -f7)
|
|
||||||
if [[ $_weight -gt $_max_weight ]]; then
|
|
||||||
_nexthop=$(echo "$_route" | cut -d ' ' -f3)
|
|
||||||
_max_weight=$_weight
|
|
||||||
if [[ "x" != "x"$_ipv6_flag ]]; then
|
|
||||||
_rule="rd.route=[$_target]:[$_nexthop]:$kdumpnic"
|
|
||||||
else
|
|
||||||
_rule="rd.route=$_target:$_nexthop:$kdumpnic"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
[[ -n $_rule ]] && echo "$_rule"
|
|
||||||
_target=$(echo "$_route" | cut -d ' ' -f1)
|
|
||||||
_rule="" _max_weight=0 _weight=0
|
|
||||||
fi
|
|
||||||
done >> "${initdir}/etc/cmdline.d/45route-static.conf" \
|
|
||||||
<<< "$(/sbin/ip $_ipv6_flag route show)"
|
|
||||||
|
|
||||||
[[ -n $_rule ]] && echo "$_rule" >> "${initdir}/etc/cmdline.d/45route-static.conf"
|
|
||||||
}
|
|
||||||
|
|
||||||
kdump_get_mac_addr() {
|
kdump_get_mac_addr() {
|
||||||
cat "/sys/class/net/$1/address"
|
cat "/sys/class/net/$1/address"
|
||||||
}
|
}
|
||||||
@ -326,192 +230,293 @@ kdump_get_perm_addr() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Prefix kernel assigned names with "kdump-". EX: eth0 -> kdump-eth0
|
apply_nm_initrd_generator_timeouts() {
|
||||||
# Because kernel assigned names are not persistent between 1st and 2nd
|
local _timeout_conf
|
||||||
# kernel. We could probably end up with eth0 being eth1, eth0 being
|
|
||||||
# eth1, and naming conflict happens.
|
|
||||||
kdump_setup_ifname() {
|
|
||||||
local _ifname
|
|
||||||
|
|
||||||
# If ifname already has 'kdump-' prefix, we must be switching from
|
_timeout_conf=$_DRACUT_KDUMP_NM_TMP_DIR/timeout_conf
|
||||||
# fadump to kdump. Skip prefixing 'kdump-' in this case as adding
|
cat << EOF > "$_timeout_conf"
|
||||||
# another prefix may truncate the ifname. Since an ifname with
|
[device-95-kdump]
|
||||||
# 'kdump-' is already persistent, this should be fine.
|
carrier-wait-timeout=30000
|
||||||
if [[ $1 =~ eth* ]] && [[ ! $1 =~ ^kdump-* ]]; then
|
|
||||||
_ifname="kdump-$1"
|
[connection-95-kdump]
|
||||||
else
|
ipv4.dhcp-timeout=90
|
||||||
_ifname="$1"
|
ipv6.dhcp-timeout=90
|
||||||
|
EOF
|
||||||
|
|
||||||
|
inst "$_timeout_conf" "/etc/NetworkManager/conf.d/95-kdump-timeouts.conf"
|
||||||
|
}
|
||||||
|
|
||||||
|
use_ipv4_or_ipv6() {
|
||||||
|
local _netif=$1 _uuid=$2
|
||||||
|
|
||||||
|
if [[ -v "ipv4_usage[$_netif]" ]]; then
|
||||||
|
nmcli connection modify --temporary "$_uuid" ipv4.may-fail no &> >(ddebug)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "$_ifname"
|
if [[ -v "ipv6_usage[$_netif]" ]]; then
|
||||||
|
nmcli connection modify --temporary "$_uuid" ipv6.may-fail no &> >(ddebug)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -v "ipv4_usage[$_netif]" ]] && [[ ! -v "ipv6_usage[$_netif]" ]]; then
|
||||||
|
nmcli connection modify --temporary "$_uuid" ipv6.method disabled &> >(ddebug)
|
||||||
|
elif [[ ! -v "ipv4_usage[$_netif]" ]] && [[ -v "ipv6_usage[$_netif]" ]]; then
|
||||||
|
nmcli connection modify --temporary "$_uuid" ipv4.method disabled &> >(ddebug)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_clone_nmconnection() {
|
||||||
|
local _clone_output _name _unique_id
|
||||||
|
|
||||||
|
_unique_id=$1
|
||||||
|
_name=$(nmcli --get-values connection.id connection show "$_unique_id")
|
||||||
|
if _clone_output=$(nmcli connection clone --temporary uuid "$_unique_id" "$_name"); then
|
||||||
|
sed -E -n "s/.* \(.*\) cloned as.*\((.*)\)\.$/\1/p" <<< "$_clone_output"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
_match_nmconnection_by_mac() {
|
||||||
|
local _unique_id _dev _mac _mac_field
|
||||||
|
|
||||||
|
_unique_id=$1
|
||||||
|
_dev=$2
|
||||||
|
|
||||||
|
_mac=$(kdump_get_perm_addr "$_dev")
|
||||||
|
[[ $_mac != 'not set' ]] || return
|
||||||
|
_mac_field=$(nmcli --get-values connection.type connection show "$_unique_id").mac-address
|
||||||
|
nmcli connection modify --temporary "$_unique_id" "$_mac_field" "$_mac" &> >(ddebug)
|
||||||
|
nmcli connection modify --temporary "$_unique_id" "connection.interface-name" "" &> >(ddebug)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clone and modify NM connection profiles
|
||||||
|
#
|
||||||
|
# This function makes use of "nmcli clone" to automatically convert ifcfg-*
|
||||||
|
# files to Networkmanager .nmconnection connection profiles and also modify the
|
||||||
|
# properties of .nmconnection if necessary.
|
||||||
|
clone_and_modify_nmconnection() {
|
||||||
|
local _dev _cloned_nmconnection_file_path _tmp_nmconnection_file_path _old_uuid _uuid
|
||||||
|
|
||||||
|
_dev=$1
|
||||||
|
_nmconnection_file_path=$2
|
||||||
|
|
||||||
|
_old_uuid=$(nmcli --get-values connection.uuid connection show filename "$_nmconnection_file_path")
|
||||||
|
|
||||||
|
if ! _uuid=$(_clone_nmconnection "$_old_uuid"); then
|
||||||
|
derror "Failed to clone $_old_uuid"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
use_ipv4_or_ipv6 "$_dev" "$_uuid"
|
||||||
|
|
||||||
|
nmcli connection modify --temporary uuid "$_uuid" connection.wait-device-timeout 60000 &> >(ddebug)
|
||||||
|
# For physical NIC i.e. non-user created NIC, ask NM to match a
|
||||||
|
# connection profile based on MAC address
|
||||||
|
_match_nmconnection_by_mac "$_uuid" "$_dev"
|
||||||
|
|
||||||
|
_cloned_nmconnection_file_path=$(nmcli --get-values UUID,FILENAME connection show | sed -n "s/^${_uuid}://p")
|
||||||
|
_tmp_nmconnection_file_path=$_DRACUT_KDUMP_NM_TMP_DIR/$(basename "$_nmconnection_file_path")
|
||||||
|
cp "$_cloned_nmconnection_file_path" "$_tmp_nmconnection_file_path"
|
||||||
|
# change uuid back to old value in case it's refered by other connection
|
||||||
|
# profile e.g. connection.master could be interface name of the master
|
||||||
|
# device or UUID of the master connection.
|
||||||
|
sed -i -E "s/(^uuid=).*$/\1${_old_uuid}/g" "$_tmp_nmconnection_file_path"
|
||||||
|
nmcli connection del "$_uuid" &> >(ddebug)
|
||||||
|
echo -n "$_tmp_nmconnection_file_path"
|
||||||
|
}
|
||||||
|
|
||||||
|
_install_nmconnection() {
|
||||||
|
local _src _nmconnection_name _dst
|
||||||
|
|
||||||
|
_src=$1
|
||||||
|
_nmconnection_name=$(basename "$_src")
|
||||||
|
_dst="/etc/NetworkManager/system-connections/$_nmconnection_name"
|
||||||
|
inst "$_src" "$_dst"
|
||||||
|
}
|
||||||
|
|
||||||
|
kdump_install_nmconnections() {
|
||||||
|
local _netif _nm_conn_path _cloned_nm_path
|
||||||
|
|
||||||
|
while IFS=: read -r _netif _nm_conn_path; do
|
||||||
|
[[ -v "unique_netifs[$_netif]" ]] || continue
|
||||||
|
if _cloned_nm_path=$(clone_and_modify_nmconnection "$_netif" "$_nm_conn_path"); then
|
||||||
|
_install_nmconnection "$_cloned_nm_path"
|
||||||
|
else
|
||||||
|
derror "Failed to install the .nmconnection for $_netif"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done <<< "$(nmcli -t -f device,filename connection show --active)"
|
||||||
|
|
||||||
|
# Stop dracut 35network-manger to calling nm-initrd-generator.
|
||||||
|
# Note this line of code can be removed after NetworkManager >= 1.35.2
|
||||||
|
# gets released.
|
||||||
|
echo > "${initdir}/usr/libexec/nm-initrd-generator"
|
||||||
|
}
|
||||||
|
|
||||||
|
kdump_install_nm_netif_allowlist() {
|
||||||
|
local _netif _except_netif _netif_allowlist _netif_allowlist_nm_conf
|
||||||
|
|
||||||
|
for _netif in $1; do
|
||||||
|
_per_mac=$(kdump_get_perm_addr "$_netif")
|
||||||
|
if [[ "$_per_mac" != 'not set' ]]; then
|
||||||
|
_except_netif="mac:$_per_mac"
|
||||||
|
else
|
||||||
|
_except_netif="interface-name:$_netif"
|
||||||
|
fi
|
||||||
|
_netif_allowlist="${_netif_allowlist}except:${_except_netif};"
|
||||||
|
done
|
||||||
|
|
||||||
|
_netif_allowlist_nm_conf=$_DRACUT_KDUMP_NM_TMP_DIR/netif_allowlist_nm_conf
|
||||||
|
cat << EOF > "$_netif_allowlist_nm_conf"
|
||||||
|
[device-others]
|
||||||
|
match-device=${_netif_allowlist}
|
||||||
|
managed=false
|
||||||
|
EOF
|
||||||
|
|
||||||
|
inst "$_netif_allowlist_nm_conf" "/etc/NetworkManager/conf.d/10-kdump-netif_allowlist.conf"
|
||||||
|
}
|
||||||
|
|
||||||
|
_get_nic_driver() {
|
||||||
|
ethtool -i "$1" | sed -n -E "s/driver: (.*)/\1/p"
|
||||||
|
}
|
||||||
|
|
||||||
|
_get_hpyerv_physical_driver() {
|
||||||
|
local _physical_nic
|
||||||
|
|
||||||
|
_physical_nic=$(find /sys/class/net/"$1"/ -name 'lower_*' | sed -En "s/\/.*lower_(.*)/\1/p")
|
||||||
|
[[ -n $_physical_nic ]] || return
|
||||||
|
_get_nic_driver "$_physical_nic"
|
||||||
|
}
|
||||||
|
|
||||||
|
kdump_install_nic_driver() {
|
||||||
|
local _netif _driver _drivers
|
||||||
|
|
||||||
|
_drivers=()
|
||||||
|
|
||||||
|
for _netif in $1; do
|
||||||
|
[[ $_netif == lo ]] && continue
|
||||||
|
_driver=$(_get_nic_driver "$_netif")
|
||||||
|
if [[ -z $_driver ]]; then
|
||||||
|
derror "Failed to get the driver of $_netif"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $_driver == "802.1Q VLAN Support" ]]; then
|
||||||
|
# ethtool somehow doesn't return the driver name for a VLAN NIC
|
||||||
|
_driver=8021q
|
||||||
|
elif [[ $_driver == "team" ]]; then
|
||||||
|
# install the team mode drivers like team_mode_roundrobin.ko as well
|
||||||
|
_driver='=drivers/net/team'
|
||||||
|
elif [[ $_driver == "hv_netvsc" ]]; then
|
||||||
|
# A Hyper-V VM may have accelerated networking
|
||||||
|
# https://learn.microsoft.com/en-us/azure/virtual-network/accelerated-networking-overview
|
||||||
|
# Install the driver of physical NIC as well
|
||||||
|
_drivers+=("$(_get_hpyerv_physical_driver "$_netif")")
|
||||||
|
fi
|
||||||
|
|
||||||
|
_drivers+=("$_driver")
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ -n ${_drivers[*]} ]] || return
|
||||||
|
instmods "${_drivers[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
kdump_setup_bridge() {
|
kdump_setup_bridge() {
|
||||||
local _netdev=$1
|
local _netdev=$1
|
||||||
local _brif _dev _mac _kdumpdev
|
local _dev
|
||||||
for _dev in "/sys/class/net/$_netdev/brif/"*; do
|
for _dev in "/sys/class/net/$_netdev/brif/"*; do
|
||||||
[[ -e $_dev ]] || continue
|
[[ -e $_dev ]] || continue
|
||||||
_dev=${_dev##*/}
|
_dev=${_dev##*/}
|
||||||
_kdumpdev=$_dev
|
|
||||||
if kdump_is_bond "$_dev"; then
|
if kdump_is_bond "$_dev"; then
|
||||||
(kdump_setup_bond "$_dev" "$(get_nmcli_connection_apath_by_ifname "$_dev")") || exit 1
|
kdump_setup_bond "$_dev" || return 1
|
||||||
elif kdump_is_team "$_dev"; then
|
elif kdump_is_team "$_dev"; then
|
||||||
kdump_setup_team "$_dev"
|
kdump_setup_team "$_dev"
|
||||||
elif kdump_is_vlan "$_dev"; then
|
elif kdump_is_vlan "$_dev"; then
|
||||||
kdump_setup_vlan "$_dev"
|
kdump_setup_vlan "$_dev"
|
||||||
else
|
|
||||||
_mac=$(kdump_get_mac_addr "$_dev")
|
|
||||||
_kdumpdev=$(kdump_setup_ifname "$_dev")
|
|
||||||
echo -n " ifname=$_kdumpdev:$_mac" >> "${initdir}/etc/cmdline.d/41bridge.conf"
|
|
||||||
fi
|
fi
|
||||||
_brif+="$_kdumpdev,"
|
_save_kdump_netifs "$_dev"
|
||||||
done
|
done
|
||||||
echo " bridge=$_netdev:${_brif%,}" >> "${initdir}/etc/cmdline.d/41bridge.conf"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# drauct takes bond=<bondname>[:<bondslaves>:[:<options>]] syntax to parse
|
|
||||||
# bond. For example:
|
|
||||||
# bond=bond0:eth0,eth1:mode=balance-rr
|
|
||||||
kdump_setup_bond() {
|
kdump_setup_bond() {
|
||||||
local _netdev="$1"
|
local _netdev="$1"
|
||||||
local _conpath="$2"
|
local _dev
|
||||||
local _dev _mac _slaves _kdumpdev _bondoptions
|
|
||||||
for _dev in $(cat "/sys/class/net/$_netdev/bonding/slaves"); do
|
for _dev in $(< "/sys/class/net/$_netdev/bonding/slaves"); do
|
||||||
_mac=$(kdump_get_perm_addr "$_dev")
|
_save_kdump_netifs "$_dev"
|
||||||
_kdumpdev=$(kdump_setup_ifname "$_dev")
|
|
||||||
echo -n " ifname=$_kdumpdev:$_mac" >> "${initdir}/etc/cmdline.d/42bond.conf"
|
|
||||||
_slaves+="$_kdumpdev,"
|
|
||||||
done
|
done
|
||||||
echo -n " bond=$_netdev:${_slaves%,}" >> "${initdir}/etc/cmdline.d/42bond.conf"
|
|
||||||
|
|
||||||
_bondoptions=$(get_nmcli_field_by_conpath "bond.options" "$_conpath")
|
|
||||||
|
|
||||||
if [[ -z $_bondoptions ]]; then
|
|
||||||
dwarning "Failed to get bond configuration via nmlci output. Now try sourcing ifcfg script."
|
|
||||||
source_ifcfg_file "$_netdev"
|
|
||||||
_bondoptions="$(echo "$BONDING_OPTS" | xargs echo | tr " " ",")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z $_bondoptions ]]; then
|
|
||||||
derror "Get empty bond options"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ":$_bondoptions" >> "${initdir}/etc/cmdline.d/42bond.conf"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kdump_setup_team() {
|
kdump_setup_team() {
|
||||||
local _netdev=$1
|
local _netdev=$1
|
||||||
local _dev _mac _slaves _kdumpdev
|
local _dev
|
||||||
for _dev in $(teamnl "$_netdev" ports | awk -F':' '{print $2}'); do
|
for _dev in $(teamnl "$_netdev" ports | awk -F':' '{print $2}'); do
|
||||||
_mac=$(kdump_get_perm_addr "$_dev")
|
_save_kdump_netifs "$_dev"
|
||||||
_kdumpdev=$(kdump_setup_ifname "$_dev")
|
|
||||||
echo -n " ifname=$_kdumpdev:$_mac" >> "${initdir}/etc/cmdline.d/44team.conf"
|
|
||||||
_slaves+="$_kdumpdev,"
|
|
||||||
done
|
done
|
||||||
echo " team=$_netdev:${_slaves%,}" >> "${initdir}/etc/cmdline.d/44team.conf"
|
|
||||||
#Buggy version teamdctl outputs to stderr!
|
|
||||||
#Try to use the latest version of teamd.
|
|
||||||
if ! teamdctl "$_netdev" config dump > "${initdir}/tmp/$$-$_netdev.conf"; then
|
|
||||||
derror "teamdctl failed."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
inst_dir /etc/teamd
|
|
||||||
inst_simple "${initdir}/tmp/$$-$_netdev.conf" "/etc/teamd/$_netdev.conf"
|
|
||||||
rm -f "${initdir}/tmp/$$-$_netdev.conf"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kdump_setup_vlan() {
|
kdump_setup_vlan() {
|
||||||
local _netdev=$1
|
local _netdev=$1
|
||||||
local _phydev
|
local _parent_netif
|
||||||
local _netmac
|
|
||||||
local _kdumpdev
|
|
||||||
|
|
||||||
_phydev="$(awk '/^Device:/{print $2}' /proc/net/vlan/"$_netdev")"
|
_parent_netif="$(awk '/^Device:/{print $2}' /proc/net/vlan/"$_netdev")"
|
||||||
_netmac="$(kdump_get_mac_addr "$_phydev")"
|
|
||||||
|
|
||||||
#Just support vlan over bond and team
|
#Just support vlan over bond and team
|
||||||
if kdump_is_bridge "$_phydev"; then
|
if kdump_is_bridge "$_parent_netif"; then
|
||||||
derror "Vlan over bridge is not supported!"
|
derror "Vlan over bridge is not supported!"
|
||||||
exit 1
|
exit 1
|
||||||
elif kdump_is_bond "$_phydev"; then
|
elif kdump_is_bond "$_parent_netif"; then
|
||||||
(kdump_setup_bond "$_phydev" "$(get_nmcli_connection_apath_by_ifname "$_phydev")") || exit 1
|
kdump_setup_bond "$_parent_netif" || return 1
|
||||||
echo " vlan=$(kdump_setup_ifname "$_netdev"):$_phydev" > "${initdir}/etc/cmdline.d/43vlan.conf"
|
elif kdump_is_team "$_parent_netif"; then
|
||||||
else
|
kdump_setup_team "$_parent_netif" || return 1
|
||||||
_kdumpdev="$(kdump_setup_ifname "$_phydev")"
|
|
||||||
echo " vlan=$(kdump_setup_ifname "$_netdev"):$_kdumpdev ifname=$_kdumpdev:$_netmac" > "${initdir}/etc/cmdline.d/43vlan.conf"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
_save_kdump_netifs "$_parent_netif"
|
||||||
}
|
}
|
||||||
|
|
||||||
# find online znet device
|
_find_znet_nmconnection() {
|
||||||
# return ifname (_netdev)
|
LANG=C grep -s -E -i -l \
|
||||||
# code reaped from the list_configured function of
|
"^s390-subchannels=([0-9]\.[0-9]\.[a-f0-9]+;){0,2}" \
|
||||||
# https://github.com/hreinecke/s390-tools/blob/master/zconf/znetconf
|
"$1"/*.nmconnection | LC_ALL=C sed -e "$2"
|
||||||
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 -r 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 -r 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
|
||||||
# $1: netdev (ifname)
|
#
|
||||||
# $2: nmcli connection path
|
# Note part of code is extracted from ccw_init provided by s390utils
|
||||||
kdump_setup_znet() {
|
kdump_setup_znet() {
|
||||||
local _netdev="$1"
|
local _config_file _unique_name _NM_conf_dir
|
||||||
local _conpath="$2"
|
local __sed_discard_ignored_files='/\(~\|\.bak\|\.old\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
|
||||||
local s390_prefix="802-3-ethernet.s390-"
|
|
||||||
local _options=""
|
|
||||||
local NETTYPE
|
|
||||||
local SUBCHANNELS
|
|
||||||
|
|
||||||
NETTYPE=$(get_nmcli_field_by_conpath "${s390_prefix}nettype" "$_conpath")
|
if [[ "$(uname -m)" != "s390x" ]]; then
|
||||||
SUBCHANNELS=$(get_nmcli_field_by_conpath "${s390_prefix}subchannels" "$_conpath")
|
return
|
||||||
_options=$(get_nmcli_field_by_conpath "${s390_prefix}options" "$_conpath")
|
|
||||||
|
|
||||||
if [[ -z $NETTYPE || -z $SUBCHANNELS || -z $_options ]]; then
|
|
||||||
dwarning "Failed to get znet configuration via nmlci output. Now try sourcing ifcfg script."
|
|
||||||
source_ifcfg_file "$_netdev"
|
|
||||||
for i in $OPTIONS; do
|
|
||||||
_options=${_options},$i
|
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z $NETTYPE || -z $SUBCHANNELS || -z $_options ]]; then
|
_NM_conf_dir="/etc/NetworkManager/system-connections"
|
||||||
exit 1
|
|
||||||
|
_config_file=$(_find_znet_nmconnection "$initdir/$_NM_conf_dir" "$__sed_discard_ignored_files")
|
||||||
|
if [[ -n "$_config_file" ]]; then
|
||||||
|
ddebug "$_config_file has already contained the znet config"
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "rd.znet=${NETTYPE},${SUBCHANNELS},${_options} rd.znet_ifname=$_netdev:${SUBCHANNELS}" > "${initdir}/etc/cmdline.d/30znet.conf"
|
_config_file=$(LANG=C grep -s -E -i -l \
|
||||||
}
|
"^[[:space:]]*SUBCHANNELS=['\"]?([0-9]\.[0-9]\.[a-f0-9]+,){0,2}" \
|
||||||
|
/etc/sysconfig/network-scripts/ifcfg-* \
|
||||||
|
| LC_ALL=C sed -e "$__sed_discard_ignored_files")
|
||||||
|
|
||||||
kdump_get_ip_route() {
|
if [[ -z "$_config_file" ]]; then
|
||||||
local _route
|
_config_file=$(_find_znet_nmconnection "$_NM_conf_dir" "$__sed_discard_ignored_files")
|
||||||
if ! _route=$(/sbin/ip -o route get to "$1" 2>&1); then
|
fi
|
||||||
derror "Bad kdump network destination: $1"
|
|
||||||
exit 1
|
if [[ -n "$_config_file" ]]; then
|
||||||
|
_unique_name=$(cat /proc/sys/kernel/random/uuid)
|
||||||
|
nmcli connection clone --temporary "$_config_file" "$_unique_name" &> >(ddebug)
|
||||||
|
nmcli connection modify --temporary "$_unique_name" connection.autoconnect false
|
||||||
|
inst "/run/NetworkManager/system-connections/${_unique_name}.nmconnection" "${_NM_conf_dir}/${_unique_name}.nmconnection"
|
||||||
|
nmcli connection del "$_unique_name" &> >(ddebug)
|
||||||
fi
|
fi
|
||||||
echo "$_route"
|
|
||||||
}
|
|
||||||
|
|
||||||
kdump_get_ip_route_field() {
|
|
||||||
echo "$1" | sed -n -e "s/^.*\<$2\>\s\+\(\S\+\).*$/\1/p"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kdump_get_remote_ip() {
|
kdump_get_remote_ip() {
|
||||||
@ -527,83 +532,55 @@ kdump_get_remote_ip() {
|
|||||||
echo "$_remote"
|
echo "$_remote"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Setup dracut to bring up network interface that enable
|
# Collect netifs needed by kdump
|
||||||
# initramfs accessing giving destination
|
|
||||||
# $1: destination host
|
# $1: destination host
|
||||||
kdump_install_net() {
|
kdump_collect_netif_usage() {
|
||||||
local _destaddr _srcaddr _route _netdev _conpath kdumpnic
|
local _destaddr _srcaddr _route _netdev
|
||||||
local _static _proto _ip_conf _ip_opts _ifname_opts
|
|
||||||
local _znet_netdev _znet_conpath
|
|
||||||
|
|
||||||
_destaddr=$(kdump_get_remote_ip "$1")
|
_destaddr=$(kdump_get_remote_ip "$1")
|
||||||
_route=$(kdump_get_ip_route "$_destaddr")
|
_route=$(kdump_get_ip_route "$_destaddr")
|
||||||
_srcaddr=$(kdump_get_ip_route_field "$_route" "src")
|
_srcaddr=$(kdump_get_ip_route_field "$_route" "src")
|
||||||
_netdev=$(kdump_get_ip_route_field "$_route" "dev")
|
_netdev=$(kdump_get_ip_route_field "$_route" "dev")
|
||||||
_conpath=$(get_nmcli_connection_apath_by_ifname "$_netdev")
|
|
||||||
_netmac=$(kdump_get_mac_addr "$_netdev")
|
|
||||||
kdumpnic=$(kdump_setup_ifname "$_netdev")
|
|
||||||
|
|
||||||
_znet_netdev=$(find_online_znet_device)
|
|
||||||
if [[ -n $_znet_netdev ]]; then
|
|
||||||
_znet_conpath=$(get_nmcli_connection_apath_by_ifname "$_znet_netdev")
|
|
||||||
if ! (kdump_setup_znet "$_znet_netdev" "$_znet_conpath"); then
|
|
||||||
derror "Failed to set up znet"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
_static=$(kdump_static_ip "$_netdev" "$_srcaddr" "$kdumpnic")
|
|
||||||
if [[ -n $_static ]]; then
|
|
||||||
_proto=none
|
|
||||||
elif is_ipv6_address "$_srcaddr"; then
|
|
||||||
_proto=auto6
|
|
||||||
else
|
|
||||||
_proto=dhcp
|
|
||||||
fi
|
|
||||||
|
|
||||||
_ip_conf="${initdir}/etc/cmdline.d/40ip.conf"
|
|
||||||
_ip_opts=" ip=${_static}$kdumpnic:${_proto}"
|
|
||||||
|
|
||||||
# dracut doesn't allow duplicated configuration for same NIC, even they're exactly the same.
|
|
||||||
# so we have to avoid adding duplicates
|
|
||||||
# We should also check /proc/cmdline for existing ip=xx arg.
|
|
||||||
# For example, iscsi boot will specify ip=xxx arg in cmdline.
|
|
||||||
if [[ ! -f $_ip_conf ]] || ! grep -q "$_ip_opts" "$_ip_conf" \
|
|
||||||
&& ! grep -q "ip=[^[:space:]]*$_netdev" /proc/cmdline; then
|
|
||||||
echo "$_ip_opts" >> "$_ip_conf"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if kdump_is_bridge "$_netdev"; then
|
if kdump_is_bridge "$_netdev"; then
|
||||||
kdump_setup_bridge "$_netdev"
|
kdump_setup_bridge "$_netdev"
|
||||||
elif kdump_is_bond "$_netdev"; then
|
elif kdump_is_bond "$_netdev"; then
|
||||||
(kdump_setup_bond "$_netdev" "$_conpath") || exit 1
|
kdump_setup_bond "$_netdev" || return 1
|
||||||
elif kdump_is_team "$_netdev"; then
|
elif kdump_is_team "$_netdev"; then
|
||||||
kdump_setup_team "$_netdev"
|
kdump_setup_team "$_netdev"
|
||||||
elif kdump_is_vlan "$_netdev"; then
|
elif kdump_is_vlan "$_netdev"; then
|
||||||
kdump_setup_vlan "$_netdev"
|
kdump_setup_vlan "$_netdev"
|
||||||
else
|
|
||||||
_ifname_opts=" ifname=$kdumpnic:$_netmac"
|
|
||||||
echo "$_ifname_opts" >> "$_ip_conf"
|
|
||||||
fi
|
fi
|
||||||
|
_save_kdump_netifs "$_netdev"
|
||||||
kdump_setup_dns "$_netdev" "$_conpath"
|
|
||||||
|
|
||||||
if [[ ! -f ${initdir}/etc/cmdline.d/50neednet.conf ]]; then
|
if [[ ! -f ${initdir}/etc/cmdline.d/50neednet.conf ]]; then
|
||||||
# network-manager module needs this parameter
|
# network-manager module needs this parameter
|
||||||
echo "rd.neednet" >> "${initdir}/etc/cmdline.d/50neednet.conf"
|
echo "rd.neednet" >> "${initdir}/etc/cmdline.d/50neednet.conf"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Save netdev used for kdump as cmdline
|
if [[ ! -f ${initdir}/etc/cmdline.d/60kdumpip.conf ]]; then
|
||||||
# Whoever calling kdump_install_net() is setting up the default gateway,
|
echo "kdump_remote_ip=$_destaddr" > "${initdir}/etc/cmdline.d/60kdumpip.conf"
|
||||||
# ie. bootdev/kdumpnic. So don't override the setting if calling
|
fi
|
||||||
# kdump_install_net() for another time. For example, after setting eth0 as
|
|
||||||
# the default gate way for network dump, eth1 in the fence kdump path will
|
if is_ipv6_address "$_srcaddr"; then
|
||||||
# call kdump_install_net again and we don't want eth1 to be the default
|
ipv6_usage[$_netdev]=1
|
||||||
# gateway.
|
else
|
||||||
if [[ ! -f ${initdir}/etc/cmdline.d/60kdumpnic.conf ]] \
|
ipv4_usage[$_netdev]=1
|
||||||
&& [[ ! -f ${initdir}/etc/cmdline.d/70bootdev.conf ]]; then
|
fi
|
||||||
echo "kdumpnic=$kdumpnic" > "${initdir}/etc/cmdline.d/60kdumpnic.conf"
|
}
|
||||||
echo "bootdev=$kdumpnic" > "${initdir}/etc/cmdline.d/70bootdev.conf"
|
|
||||||
|
# Setup dracut to bring up network interface that enable
|
||||||
|
# initramfs accessing giving destination
|
||||||
|
kdump_install_net() {
|
||||||
|
local _netifs
|
||||||
|
|
||||||
|
_netifs=$(_get_kdump_netifs)
|
||||||
|
if [[ -n "$_netifs" ]]; then
|
||||||
|
kdump_install_nmconnections
|
||||||
|
apply_nm_initrd_generator_timeouts
|
||||||
|
kdump_setup_znet
|
||||||
|
kdump_install_nm_netif_allowlist "$_netifs"
|
||||||
|
kdump_install_nic_driver "$_netifs"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -642,7 +619,7 @@ default_dump_target_install_conf() {
|
|||||||
|
|
||||||
_fstype=$(get_fs_type_from_target "$_target")
|
_fstype=$(get_fs_type_from_target "$_target")
|
||||||
if is_fs_type_nfs "$_fstype"; then
|
if is_fs_type_nfs "$_fstype"; then
|
||||||
kdump_install_net "$_target"
|
kdump_collect_netif_usage "$_target"
|
||||||
_fstype="nfs"
|
_fstype="nfs"
|
||||||
else
|
else
|
||||||
_target=$(kdump_get_persistent_dev "$_target")
|
_target=$(kdump_get_persistent_dev "$_target")
|
||||||
@ -673,16 +650,16 @@ kdump_install_conf() {
|
|||||||
_pdev=$(persistent_policy="by-id" kdump_get_persistent_dev "$_val")
|
_pdev=$(persistent_policy="by-id" kdump_get_persistent_dev "$_val")
|
||||||
sed -i -e "s#^${_opt}[[:space:]]\+$_val#$_opt $_pdev#" "${initdir}/tmp/$$-kdump.conf"
|
sed -i -e "s#^${_opt}[[:space:]]\+$_val#$_opt $_pdev#" "${initdir}/tmp/$$-kdump.conf"
|
||||||
;;
|
;;
|
||||||
ext[234] | xfs | btrfs | minix)
|
ext[234] | xfs | btrfs | minix | virtiofs)
|
||||||
_pdev=$(kdump_get_persistent_dev "$_val")
|
_pdev=$(kdump_get_persistent_dev "$_val")
|
||||||
sed -i -e "s#^${_opt}[[:space:]]\+$_val#$_opt $_pdev#" "${initdir}/tmp/$$-kdump.conf"
|
sed -i -e "s#^${_opt}[[:space:]]\+$_val#$_opt $_pdev#" "${initdir}/tmp/$$-kdump.conf"
|
||||||
;;
|
;;
|
||||||
ssh | nfs)
|
ssh | nfs)
|
||||||
kdump_install_net "$_val"
|
kdump_collect_netif_usage "$_val"
|
||||||
;;
|
;;
|
||||||
dracut_args)
|
dracut_args)
|
||||||
if [[ $(get_dracut_args_fstype "$_val") == nfs* ]]; then
|
if [[ $(get_dracut_args_fstype "$_val") == nfs* ]]; then
|
||||||
kdump_install_net "$(get_dracut_args_target "$_val")"
|
kdump_collect_netif_usage "$(get_dracut_args_target "$_val")"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
kdump_pre | kdump_post | extra_bins)
|
kdump_pre | kdump_post | extra_bins)
|
||||||
@ -804,7 +781,7 @@ kdump_setup_iscsi_device() {
|
|||||||
|
|
||||||
[[ -n $username_in ]] && userpwd_in_str=":$username_in:$password_in"
|
[[ -n $username_in ]] && userpwd_in_str=":$username_in:$password_in"
|
||||||
|
|
||||||
kdump_install_net "$tgt_ipaddr"
|
kdump_collect_netif_usage "$tgt_ipaddr"
|
||||||
|
|
||||||
# prepare netroot= command line
|
# prepare netroot= command line
|
||||||
# FIXME: Do we need to parse and set other parameters like protocol, port
|
# FIXME: Do we need to parse and set other parameters like protocol, port
|
||||||
@ -840,7 +817,7 @@ kdump_check_iscsi_targets() {
|
|||||||
# If our prerequisites are not met, fail anyways.
|
# If our prerequisites are not met, fail anyways.
|
||||||
type -P iscsistart > /dev/null || return 1
|
type -P iscsistart > /dev/null || return 1
|
||||||
|
|
||||||
kdump_check_setup_iscsi() (
|
kdump_check_setup_iscsi() {
|
||||||
local _dev
|
local _dev
|
||||||
_dev=$1
|
_dev=$1
|
||||||
|
|
||||||
@ -850,7 +827,7 @@ kdump_check_iscsi_targets() {
|
|||||||
cd ..
|
cd ..
|
||||||
done
|
done
|
||||||
[[ -d iscsi_session ]] && kdump_setup_iscsi_device "$PWD"
|
[[ -d iscsi_session ]] && kdump_setup_iscsi_device "$PWD"
|
||||||
)
|
}
|
||||||
|
|
||||||
[[ $hostonly ]] || [[ $mount_needs ]] && {
|
[[ $hostonly ]] || [[ $mount_needs ]] && {
|
||||||
for_each_host_dev_and_slaves_all kdump_check_setup_iscsi
|
for_each_host_dev_and_slaves_all kdump_check_setup_iscsi
|
||||||
@ -968,7 +945,7 @@ kdump_configure_fence_kdump() {
|
|||||||
|
|
||||||
# setup network for each node
|
# setup network for each node
|
||||||
for node in ${nodes}; do
|
for node in ${nodes}; do
|
||||||
kdump_install_net "$node"
|
kdump_collect_netif_usage "$node"
|
||||||
done
|
done
|
||||||
|
|
||||||
dracut_install /etc/hosts
|
dracut_install /etc/hosts
|
||||||
@ -1017,6 +994,7 @@ remove_cpu_online_rule() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
install() {
|
install() {
|
||||||
|
declare -A unique_netifs ipv4_usage ipv6_usage
|
||||||
local arch
|
local arch
|
||||||
|
|
||||||
kdump_module_init
|
kdump_module_init
|
||||||
@ -1076,6 +1054,8 @@ install() {
|
|||||||
inst "ip"
|
inst "ip"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
kdump_install_net
|
||||||
|
|
||||||
# For the lvm type target under kdump, in /etc/lvm/lvm.conf we can
|
# For the lvm type target under kdump, in /etc/lvm/lvm.conf we can
|
||||||
# safely replace "reserved_memory=XXXX"(default value is 8192) with
|
# safely replace "reserved_memory=XXXX"(default value is 8192) with
|
||||||
# "reserved_memory=1024" to lower memory pressure under kdump. We do
|
# "reserved_memory=1024" to lower memory pressure under kdump. We do
|
||||||
|
39
SOURCES/kdump.conf → SOURCES/gen-kdump-conf.sh
Normal file → Executable file
39
SOURCES/kdump.conf → SOURCES/gen-kdump-conf.sh
Normal file → Executable file
@ -1,3 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# $1: target arch
|
||||||
|
|
||||||
|
SED_EXP=""
|
||||||
|
|
||||||
|
generate()
|
||||||
|
{
|
||||||
|
sed "$SED_EXP" << EOF
|
||||||
# This file contains a series of commands to perform (in order) in the kdump
|
# This file contains a series of commands to perform (in order) in the kdump
|
||||||
# kernel after a kernel crash in the crash kernel(1st kernel) has happened.
|
# kernel after a kernel crash in the crash kernel(1st kernel) has happened.
|
||||||
#
|
#
|
||||||
@ -43,6 +51,7 @@
|
|||||||
# It's recommended to use persistent device names
|
# It's recommended to use persistent device names
|
||||||
# such as /dev/vg/<devname>.
|
# such as /dev/vg/<devname>.
|
||||||
# Otherwise it's suggested to use label or uuid.
|
# Otherwise it's suggested to use label or uuid.
|
||||||
|
# Supported fs types: ext[234], xfs, btrfs, minix, virtiofs
|
||||||
#
|
#
|
||||||
# path <path>
|
# path <path>
|
||||||
# - "path" represents the file system path in which vmcore
|
# - "path" represents the file system path in which vmcore
|
||||||
@ -171,6 +180,7 @@
|
|||||||
#ext4 /dev/vg/lv_kdump
|
#ext4 /dev/vg/lv_kdump
|
||||||
#ext4 LABEL=/boot
|
#ext4 LABEL=/boot
|
||||||
#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
|
#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
|
||||||
|
#virtiofs myfs
|
||||||
#nfs my.server.com:/export/tmp
|
#nfs my.server.com:/export/tmp
|
||||||
#nfs [2001:db8::1:2:3:4]:/export/tmp
|
#nfs [2001:db8::1:2:3:4]:/export/tmp
|
||||||
#ssh user@my.server.com
|
#ssh user@my.server.com
|
||||||
@ -190,3 +200,32 @@ core_collector makedumpfile -l --message-level 7 -d 31
|
|||||||
#dracut_args --omit-drivers "cfg80211 snd" --add-drivers "ext2 ext3"
|
#dracut_args --omit-drivers "cfg80211 snd" --add-drivers "ext2 ext3"
|
||||||
#fence_kdump_args -p 7410 -f auto -c 0 -i 10
|
#fence_kdump_args -p 7410 -f auto -c 0 -i 10
|
||||||
#fence_kdump_nodes node1 node2
|
#fence_kdump_nodes node1 node2
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
update_param()
|
||||||
|
{
|
||||||
|
SED_EXP="${SED_EXP}s/^$1.*$/$1 $2/;"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
aarch64) ;;
|
||||||
|
|
||||||
|
i386) ;;
|
||||||
|
|
||||||
|
ppc64) ;;
|
||||||
|
|
||||||
|
ppc64le) ;;
|
||||||
|
|
||||||
|
s390x)
|
||||||
|
update_param core_collector \
|
||||||
|
"makedumpfile -c --message-level 7 -d 31"
|
||||||
|
;;
|
||||||
|
x86_64) ;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Warning: Unknown architecture '$1', using default kdump.conf template."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
generate
|
@ -7,6 +7,7 @@ DEFAULT_PATH="/var/crash/"
|
|||||||
KDUMP_CONFIG_FILE="/etc/kdump.conf"
|
KDUMP_CONFIG_FILE="/etc/kdump.conf"
|
||||||
FENCE_KDUMP_CONFIG_FILE="/etc/sysconfig/fence_kdump"
|
FENCE_KDUMP_CONFIG_FILE="/etc/sysconfig/fence_kdump"
|
||||||
FENCE_KDUMP_SEND="/usr/libexec/fence_kdump_send"
|
FENCE_KDUMP_SEND="/usr/libexec/fence_kdump_send"
|
||||||
|
LVM_CONF="/etc/lvm/lvm.conf"
|
||||||
|
|
||||||
# Read kdump config in well formated style
|
# Read kdump config in well formated style
|
||||||
kdump_read_conf()
|
kdump_read_conf()
|
||||||
@ -54,6 +55,11 @@ is_fs_type_nfs()
|
|||||||
[ "$1" = "nfs" ] || [ "$1" = "nfs4" ]
|
[ "$1" = "nfs" ] || [ "$1" = "nfs4" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_fs_type_virtiofs()
|
||||||
|
{
|
||||||
|
[ "$1" = "virtiofs" ]
|
||||||
|
}
|
||||||
|
|
||||||
# If $1 contains dracut_args "--mount", return <filesystem type>
|
# If $1 contains dracut_args "--mount", return <filesystem type>
|
||||||
get_dracut_args_fstype()
|
get_dracut_args_fstype()
|
||||||
{
|
{
|
||||||
@ -109,6 +115,23 @@ is_raw_dump_target()
|
|||||||
[ -n "$(kdump_get_conf_val raw)" ]
|
[ -n "$(kdump_get_conf_val raw)" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_virtiofs_dump_target()
|
||||||
|
{
|
||||||
|
if [ -n "$(kdump_get_conf_val virtiofs)" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if is_fs_type_virtiofs "$(get_dracut_args_fstype "$(kdump_get_conf_val dracut_args)")"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if is_fs_type_virtiofs "$(get_fs_type_from_target "$(get_target_from_path "$(get_save_path)")")"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
is_nfs_dump_target()
|
is_nfs_dump_target()
|
||||||
{
|
{
|
||||||
if [ -n "$(kdump_get_conf_val nfs)" ]; then
|
if [ -n "$(kdump_get_conf_val nfs)" ]; then
|
||||||
@ -128,5 +151,28 @@ is_nfs_dump_target()
|
|||||||
|
|
||||||
is_fs_dump_target()
|
is_fs_dump_target()
|
||||||
{
|
{
|
||||||
[ -n "$(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix")" ]
|
[ -n "$(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|virtiofs")" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
is_lvm2_thinp_device()
|
||||||
|
{
|
||||||
|
_device_path=$1
|
||||||
|
_lvm2_thin_device=$(lvm lvs -S 'lv_layout=sparse && lv_layout=thin' \
|
||||||
|
--nosuffix --noheadings -o vg_name,lv_name "$_device_path" 2> /dev/null)
|
||||||
|
|
||||||
|
[ -n "$_lvm2_thin_device" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
kdump_get_ip_route()
|
||||||
|
{
|
||||||
|
if ! _route=$(/sbin/ip -o route get to "$1" 2>&1); then
|
||||||
|
derror "Bad kdump network destination: $1"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "$_route"
|
||||||
|
}
|
||||||
|
|
||||||
|
kdump_get_ip_route_field()
|
||||||
|
{
|
||||||
|
echo "$1" | sed -n -e "s/^.*\<$2\>\s\+\(\S\+\).*$/\1/p"
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,12 @@ is_zstd_command_available()
|
|||||||
[[ -x "$(command -v zstd)" ]]
|
[[ -x "$(command -v zstd)" ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dracut_have_option()
|
||||||
|
{
|
||||||
|
local _option=$1
|
||||||
|
! dracut "$_option" 2>&1 | grep -q "unrecognized option"
|
||||||
|
}
|
||||||
|
|
||||||
perror_exit()
|
perror_exit()
|
||||||
{
|
{
|
||||||
derror "$@"
|
derror "$@"
|
||||||
@ -78,35 +84,31 @@ to_dev_name()
|
|||||||
|
|
||||||
is_user_configured_dump_target()
|
is_user_configured_dump_target()
|
||||||
{
|
{
|
||||||
[[ $(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|raw\|nfs\|ssh") ]] || is_mount_in_dracut_args
|
[[ $(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|raw\|nfs\|ssh\|virtiofs") ]] || is_mount_in_dracut_args
|
||||||
}
|
|
||||||
|
|
||||||
get_user_configured_dump_disk()
|
|
||||||
{
|
|
||||||
local _target
|
|
||||||
|
|
||||||
_target=$(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|raw")
|
|
||||||
[[ -n $_target ]] && echo "$_target" && return
|
|
||||||
|
|
||||||
_target=$(get_dracut_args_target "$(kdump_get_conf_val "dracut_args")")
|
|
||||||
[[ -b $_target ]] && echo "$_target"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_block_dump_target()
|
get_block_dump_target()
|
||||||
{
|
{
|
||||||
local _target _path
|
local _target _fstype
|
||||||
|
|
||||||
if is_ssh_dump_target || is_nfs_dump_target; then
|
if is_ssh_dump_target || is_nfs_dump_target; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_target=$(get_user_configured_dump_disk)
|
_target=$(kdump_get_conf_val "ext[234]\|xfs\|btrfs\|minix\|raw\|virtiofs")
|
||||||
[[ -n $_target ]] && to_dev_name "$_target" && return
|
[[ -n $_target ]] && to_dev_name "$_target" && return
|
||||||
|
|
||||||
# Get block device name from local save path
|
_target=$(get_dracut_args_target "$(kdump_get_conf_val "dracut_args")")
|
||||||
_path=$(get_save_path)
|
[[ -b $_target ]] && to_dev_name "$_target" && return
|
||||||
_target=$(get_target_from_path "$_path")
|
|
||||||
[[ -b $_target ]] && to_dev_name "$_target"
|
_fstype=$(get_dracut_args_fstype "$(kdump_get_conf_val "dracut_args")")
|
||||||
|
is_fs_type_virtiofs "$_fstype" && echo "$_target" && return
|
||||||
|
|
||||||
|
_target=$(get_target_from_path "$(get_save_path)")
|
||||||
|
[[ -b $_target ]] && to_dev_name "$_target" && return
|
||||||
|
|
||||||
|
_fstype=$(get_fs_type_from_target "$_target")
|
||||||
|
is_fs_type_virtiofs "$_fstype" && echo "$_target" && return
|
||||||
}
|
}
|
||||||
|
|
||||||
is_dump_to_rootfs()
|
is_dump_to_rootfs()
|
||||||
@ -114,6 +116,12 @@ is_dump_to_rootfs()
|
|||||||
[[ $(kdump_get_conf_val 'failure_action\|default') == dump_to_rootfs ]]
|
[[ $(kdump_get_conf_val 'failure_action\|default') == dump_to_rootfs ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_lvm2_thinp_dump_target()
|
||||||
|
{
|
||||||
|
_target=$(get_block_dump_target)
|
||||||
|
[ -n "$_target" ] && is_lvm2_thinp_device "$_target"
|
||||||
|
}
|
||||||
|
|
||||||
get_failure_action_target()
|
get_failure_action_target()
|
||||||
{
|
{
|
||||||
local _target
|
local _target
|
||||||
@ -122,6 +130,7 @@ get_failure_action_target()
|
|||||||
# Get rootfs device name
|
# Get rootfs device name
|
||||||
_target=$(get_root_fs_device)
|
_target=$(get_root_fs_device)
|
||||||
[[ -b $_target ]] && to_dev_name "$_target" && return
|
[[ -b $_target ]] && to_dev_name "$_target" && return
|
||||||
|
is_fs_type_virtiofs "$(get_fs_type_from_target "$_target")" && echo "$_target" && return
|
||||||
# Then, must be nfs root
|
# Then, must be nfs root
|
||||||
echo "nfs"
|
echo "nfs"
|
||||||
fi
|
fi
|
||||||
@ -245,9 +254,9 @@ kdump_get_persistent_dev()
|
|||||||
echo $(get_persistent_dev "$dev")
|
echo $(get_persistent_dev "$dev")
|
||||||
}
|
}
|
||||||
|
|
||||||
is_atomic()
|
is_ostree()
|
||||||
{
|
{
|
||||||
grep -q "ostree" /proc/cmdline
|
test -f /run/ostree-booted
|
||||||
}
|
}
|
||||||
|
|
||||||
# get ip address or hostname from nfs/ssh config value
|
# get ip address or hostname from nfs/ssh config value
|
||||||
@ -448,8 +457,7 @@ is_wdt_active()
|
|||||||
|
|
||||||
have_compression_in_dracut_args()
|
have_compression_in_dracut_args()
|
||||||
{
|
{
|
||||||
[[ "$(kdump_get_conf_val dracut_args)" =~ \
|
[[ "$(kdump_get_conf_val dracut_args)" =~ (^|[[:space:]])--(gzip|bzip2|lzma|xz|lzo|lz4|zstd|no-compress|compress|squash-compressor)([[:space:]]|$) ]]
|
||||||
(^|[[:space:]])--(gzip|bzip2|lzma|xz|lzo|lz4|zstd|no-compress|compress)([[:space:]]|$) ]]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# If "dracut_args" contains "--mount" information, use it
|
# If "dracut_args" contains "--mount" information, use it
|
||||||
@ -641,8 +649,13 @@ prepare_kdump_kernel()
|
|||||||
boot_dirlist=${KDUMP_BOOTDIR:-"/boot /boot/efi /efi /"}
|
boot_dirlist=${KDUMP_BOOTDIR:-"/boot /boot/efi /efi /"}
|
||||||
boot_imglist="$KDUMP_IMG-$kdump_kernelver$KDUMP_IMG_EXT $machine_id/$kdump_kernelver/$KDUMP_IMG"
|
boot_imglist="$KDUMP_IMG-$kdump_kernelver$KDUMP_IMG_EXT $machine_id/$kdump_kernelver/$KDUMP_IMG"
|
||||||
|
|
||||||
|
# The kernel of OSTree based systems is not in the standard locations.
|
||||||
|
if is_ostree; then
|
||||||
|
boot_dirlist="$(echo /boot/ostree/*) $boot_dirlist"
|
||||||
|
fi
|
||||||
|
|
||||||
# Use BOOT_IMAGE as reference if possible, strip the GRUB root device prefix in (hd0,gpt1) format
|
# Use BOOT_IMAGE as reference if possible, strip the GRUB root device prefix in (hd0,gpt1) format
|
||||||
boot_img="$(sed "s/^BOOT_IMAGE=\((\S*)\)\?\(\S*\) .*/\2/" /proc/cmdline)"
|
boot_img="$(grep -P -o '^BOOT_IMAGE=(\S+)' /proc/cmdline | sed "s/^BOOT_IMAGE=\((\S*)\)\?\(\S*\)/\2/")"
|
||||||
if [[ "$boot_img" == *"$kdump_kernelver" ]]; then
|
if [[ "$boot_img" == *"$kdump_kernelver" ]]; then
|
||||||
boot_imglist="$boot_img $boot_imglist"
|
boot_imglist="$boot_img $boot_imglist"
|
||||||
fi
|
fi
|
||||||
@ -672,8 +685,14 @@ prepare_kdump_bootinfo()
|
|||||||
|
|
||||||
if [[ -z $KDUMP_KERNELVER ]]; then
|
if [[ -z $KDUMP_KERNELVER ]]; then
|
||||||
KDUMP_KERNELVER=$(uname -r)
|
KDUMP_KERNELVER=$(uname -r)
|
||||||
|
|
||||||
|
# Fadump uses the regular bootloader, unlike kdump. So, use the same version
|
||||||
|
# for default kernel and capture kernel unless specified explicitly with
|
||||||
|
# KDUMP_KERNELVER option.
|
||||||
|
if ! is_fadump_capable; then
|
||||||
nondebug_kernelver=$(sed -n -e 's/\(.*\)+debug$/\1/p' <<< "$KDUMP_KERNELVER")
|
nondebug_kernelver=$(sed -n -e 's/\(.*\)+debug$/\1/p' <<< "$KDUMP_KERNELVER")
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Use nondebug kernel if possible, because debug kernel will consume more memory and may oom.
|
# Use nondebug kernel if possible, because debug kernel will consume more memory and may oom.
|
||||||
if [[ -n $nondebug_kernelver ]]; then
|
if [[ -n $nondebug_kernelver ]]; then
|
||||||
|
@ -21,7 +21,7 @@ KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swio
|
|||||||
|
|
||||||
# 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
|
||||||
KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 noirqdistrib reset_devices cgroup_disable=memory numa=off udev.children-max=2 ehea.use_mcs=0 panic=10 kvm_cma_resv_ratio=0 transparent_hugepage=never novmcoredd hugetlb_cma=0"
|
KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 noirqdistrib reset_devices cgroup_disable=memory numa=off udev.children-max=2 ehea.use_mcs=0 panic=10 kvm_cma_resv_ratio=0 transparent_hugepage=never novmcoredd hugetlb_cma=0 srcutree.big_cpu_lim=0"
|
||||||
|
|
||||||
# Any additional kexec arguments required. In most situations, this should
|
# Any additional kexec arguments required. In most situations, this should
|
||||||
# be left empty
|
# be left empty
|
||||||
|
@ -21,7 +21,7 @@ KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swio
|
|||||||
|
|
||||||
# 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
|
||||||
KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 noirqdistrib reset_devices cgroup_disable=memory numa=off udev.children-max=2 ehea.use_mcs=0 panic=10 kvm_cma_resv_ratio=0 transparent_hugepage=never novmcoredd hugetlb_cma=0"
|
KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 noirqdistrib reset_devices cgroup_disable=memory numa=off udev.children-max=2 ehea.use_mcs=0 panic=10 kvm_cma_resv_ratio=0 transparent_hugepage=never novmcoredd hugetlb_cma=0 srcutree.big_cpu_lim=0"
|
||||||
|
|
||||||
# Any additional kexec arguments required. In most situations, this should
|
# Any additional kexec arguments required. In most situations, this should
|
||||||
# be left empty
|
# be left empty
|
||||||
|
104
SOURCES/kdumpctl
104
SOURCES/kdumpctl
@ -11,10 +11,10 @@ MKFADUMPRD="/sbin/mkfadumprd"
|
|||||||
DRACUT_MODULES_FILE="/usr/lib/dracut/modules.txt"
|
DRACUT_MODULES_FILE="/usr/lib/dracut/modules.txt"
|
||||||
SAVE_PATH=/var/crash
|
SAVE_PATH=/var/crash
|
||||||
SSH_KEY_LOCATION="/root/.ssh/kdump_id_rsa"
|
SSH_KEY_LOCATION="/root/.ssh/kdump_id_rsa"
|
||||||
INITRD_CHECKSUM_LOCATION="/boot/.fadump_initrd_checksum"
|
|
||||||
DUMP_TARGET=""
|
DUMP_TARGET=""
|
||||||
DEFAULT_INITRD=""
|
DEFAULT_INITRD=""
|
||||||
DEFAULT_INITRD_BAK=""
|
DEFAULT_INITRD_BAK=""
|
||||||
|
INITRD_CHECKSUM_LOCATION=""
|
||||||
KDUMP_INITRD=""
|
KDUMP_INITRD=""
|
||||||
TARGET_INITRD=""
|
TARGET_INITRD=""
|
||||||
FADUMP_REGISTER_SYS_NODE="/sys/kernel/fadump_registered"
|
FADUMP_REGISTER_SYS_NODE="/sys/kernel/fadump_registered"
|
||||||
@ -44,9 +44,16 @@ fi
|
|||||||
|
|
||||||
single_instance_lock()
|
single_instance_lock()
|
||||||
{
|
{
|
||||||
local rc timeout=5
|
local rc timeout=5 lockfile
|
||||||
|
|
||||||
if ! exec 9> /var/lock/kdump; then
|
if [[ -d /run/lock ]]; then
|
||||||
|
lockfile=/run/lock/kdump
|
||||||
|
else
|
||||||
|
# when updating package using virt-customize, /run/lock doesn't exist
|
||||||
|
lockfile=/tmp/kdump.lock
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! exec 9> $lockfile; then
|
||||||
derror "Create file lock failed"
|
derror "Create file lock failed"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -181,7 +188,8 @@ backup_default_initrd()
|
|||||||
sha1sum "$DEFAULT_INITRD" > "$INITRD_CHECKSUM_LOCATION"
|
sha1sum "$DEFAULT_INITRD" > "$INITRD_CHECKSUM_LOCATION"
|
||||||
if ! cp "$DEFAULT_INITRD" "$DEFAULT_INITRD_BAK"; then
|
if ! cp "$DEFAULT_INITRD" "$DEFAULT_INITRD_BAK"; then
|
||||||
dwarn "WARNING: failed to backup $DEFAULT_INITRD."
|
dwarn "WARNING: failed to backup $DEFAULT_INITRD."
|
||||||
rm -f "$DEFAULT_INITRD_BAK"
|
rm -f -- "$INITRD_CHECKSUM_LOCATION"
|
||||||
|
rm -f -- "$DEFAULT_INITRD_BAK"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -232,7 +240,7 @@ check_config()
|
|||||||
fi
|
fi
|
||||||
config_opt=_target
|
config_opt=_target
|
||||||
;;
|
;;
|
||||||
ext[234] | minix | btrfs | xfs | nfs | ssh)
|
ext[234] | minix | btrfs | xfs | nfs | ssh | virtiofs)
|
||||||
config_opt=_target
|
config_opt=_target
|
||||||
;;
|
;;
|
||||||
sshkey | path | core_collector | kdump_post | kdump_pre | extra_bins | extra_modules | failure_action | default | final_action | force_rebuild | force_no_rebuild | fence_kdump_args | fence_kdump_nodes | auto_reset_crashkernel) ;;
|
sshkey | path | core_collector | kdump_post | kdump_pre | extra_bins | extra_modules | failure_action | default | final_action | force_rebuild | force_no_rebuild | fence_kdump_args | fence_kdump_nodes | auto_reset_crashkernel) ;;
|
||||||
@ -307,6 +315,7 @@ setup_initrd()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
DEFAULT_INITRD_BAK="$KDUMP_BOOTDIR/.$(basename "$DEFAULT_INITRD").default"
|
DEFAULT_INITRD_BAK="$KDUMP_BOOTDIR/.$(basename "$DEFAULT_INITRD").default"
|
||||||
|
INITRD_CHECKSUM_LOCATION="$DEFAULT_INITRD_BAK.checksum"
|
||||||
if [[ $DEFAULT_DUMP_MODE == "fadump" ]]; then
|
if [[ $DEFAULT_DUMP_MODE == "fadump" ]]; then
|
||||||
TARGET_INITRD="$DEFAULT_INITRD"
|
TARGET_INITRD="$DEFAULT_INITRD"
|
||||||
|
|
||||||
@ -380,6 +389,7 @@ check_files_modified()
|
|||||||
|
|
||||||
# HOOKS is mandatory and need to check the modification time
|
# HOOKS is mandatory and need to check the modification time
|
||||||
files="$files $HOOKS"
|
files="$files $HOOKS"
|
||||||
|
is_lvm2_thinp_dump_target && files="$files $LVM_CONF"
|
||||||
check_exist "$files" && check_executable "$EXTRA_BINS" || return 2
|
check_exist "$files" && check_executable "$EXTRA_BINS" || return 2
|
||||||
|
|
||||||
for file in $files; do
|
for file in $files; do
|
||||||
@ -468,8 +478,9 @@ check_fs_modified()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# No need to check in case of raw target.
|
# No need to check in case of raw target.
|
||||||
# Currently we do not check also if ssh/nfs target is specified
|
# Currently we do not check also if ssh/nfs/virtiofs/thinp target is specified
|
||||||
if is_ssh_dump_target || is_nfs_dump_target || is_raw_dump_target; then
|
if is_ssh_dump_target || is_nfs_dump_target || is_raw_dump_target ||
|
||||||
|
is_virtiofs_dump_target || is_lvm2_thinp_dump_target; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -666,6 +677,7 @@ load_kdump()
|
|||||||
# and release it.
|
# and release it.
|
||||||
exec 12>&2
|
exec 12>&2
|
||||||
exec 2>> $KDUMP_LOG_PATH/kdump.log
|
exec 2>> $KDUMP_LOG_PATH/kdump.log
|
||||||
|
chmod 600 $KDUMP_LOG_PATH/kdump.log
|
||||||
PS4='+ $(date "+%Y-%m-%d %H:%M:%S") ${BASH_SOURCE}@${LINENO}: '
|
PS4='+ $(date "+%Y-%m-%d %H:%M:%S") ${BASH_SOURCE}@${LINENO}: '
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
@ -1068,7 +1080,7 @@ start()
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_current_status; then
|
if [[ $DEFAULT_DUMP_MODE == "kdump" ]] && check_current_kdump_status; then
|
||||||
dwarn "Kdump already running: [WARNING]"
|
dwarn "Kdump already running: [WARNING]"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@ -1212,7 +1224,7 @@ do_estimate()
|
|||||||
local kdump_mods
|
local kdump_mods
|
||||||
local -A large_mods
|
local -A large_mods
|
||||||
local baseline
|
local baseline
|
||||||
local kernel_size mod_size initrd_size baseline_size runtime_size reserved_size estimated_size recommended_size
|
local kernel_size mod_size initrd_size baseline_size runtime_size reserved_size estimated_size recommended_size _cryptsetup_overhead
|
||||||
local size_mb=$((1024 * 1024))
|
local size_mb=$((1024 * 1024))
|
||||||
|
|
||||||
setup_initrd
|
setup_initrd
|
||||||
@ -1261,12 +1273,22 @@ do_estimate()
|
|||||||
for _dev in $(get_all_kdump_crypt_dev); do
|
for _dev in $(get_all_kdump_crypt_dev); do
|
||||||
_crypt_info=$(cryptsetup luksDump "/dev/block/$_dev")
|
_crypt_info=$(cryptsetup luksDump "/dev/block/$_dev")
|
||||||
[[ $(echo "$_crypt_info" | sed -n "s/^Version:\s*\(.*\)/\1/p") == "2" ]] || continue
|
[[ $(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
|
for _mem in $(echo "$_crypt_info" | sed -n "s/\sMemory:\s*\(.*\)/\1/p" | sort -n -r); do
|
||||||
crypt_size=$((crypt_size + _mem * 1024))
|
crypt_size=$((crypt_size + _mem * 1024))
|
||||||
break
|
break
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
[[ $crypt_size -ne 0 ]] && echo -e "Encrypted kdump target requires extra memory, assuming using the keyslot with minimun memory requirement\n"
|
|
||||||
|
if [[ $crypt_size -ne 0 ]]; then
|
||||||
|
if [[ $(uname -m) == aarch64 ]]; then
|
||||||
|
_cryptsetup_overhead=50
|
||||||
|
else
|
||||||
|
_cryptsetup_overhead=20
|
||||||
|
fi
|
||||||
|
|
||||||
|
crypt_size=$((crypt_size + _cryptsetup_overhead * size_mb))
|
||||||
|
echo -e "Encrypted kdump target requires extra memory, assuming using the keyslot with maximum memory requirement\n"
|
||||||
|
fi
|
||||||
|
|
||||||
estimated_size=$((kernel_size + mod_size + initrd_size + runtime_size + crypt_size))
|
estimated_size=$((kernel_size + mod_size + initrd_size + runtime_size + crypt_size))
|
||||||
if [[ $baseline_size -gt $estimated_size ]]; then
|
if [[ $baseline_size -gt $estimated_size ]]; then
|
||||||
@ -1360,7 +1382,7 @@ _filter_grubby_kernel_str()
|
|||||||
_find_kernel_path_by_release()
|
_find_kernel_path_by_release()
|
||||||
{
|
{
|
||||||
local _release="$1" _grubby_kernel_str _kernel_path
|
local _release="$1" _grubby_kernel_str _kernel_path
|
||||||
_grubby_kernel_str=$(grubby --info ALL | grep "^kernel=.*$_release")
|
_grubby_kernel_str=$(grubby --info ALL | grep "^kernel=.*$_release\"$")
|
||||||
_kernel_path=$(_filter_grubby_kernel_str "$_grubby_kernel_str")
|
_kernel_path=$(_filter_grubby_kernel_str "$_grubby_kernel_str")
|
||||||
if [[ -z $_kernel_path ]]; then
|
if [[ -z $_kernel_path ]]; then
|
||||||
derror "kernel $_release doesn't exist"
|
derror "kernel $_release doesn't exist"
|
||||||
@ -1381,26 +1403,25 @@ _get_current_running_kernel_path()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_update_grub()
|
_update_kernel_cmdline()
|
||||||
{
|
{
|
||||||
local _kernel_path=$1 _crashkernel=$2 _dump_mode=$3 _fadump_val=$4
|
local _kernel_path=$1 _crashkernel=$2 _dump_mode=$3 _fadump_val=$4
|
||||||
|
|
||||||
if is_atomic; then
|
if is_ostree; then
|
||||||
if rpm-ostree kargs | grep -q "crashkernel="; then
|
if rpm-ostree kargs | grep -q "crashkernel="; then
|
||||||
rpm-ostree kargs --replace="crashkernel=$_crashkernel"
|
rpm-ostree kargs --replace="crashkernel=$_crashkernel"
|
||||||
else
|
else
|
||||||
rpm-ostree kargs --append="crashkernel=$_crashkernel"
|
rpm-ostree kargs --append="crashkernel=$_crashkernel"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
[[ -f /etc/zipl.conf ]] && zipl_arg="--zipl"
|
grubby --args "crashkernel=$_crashkernel" --update-kernel "$_kernel_path"
|
||||||
grubby --args "crashkernel=$_crashkernel" --update-kernel "$_kernel_path" $zipl_arg
|
|
||||||
if [[ $_dump_mode == kdump ]]; then
|
if [[ $_dump_mode == kdump ]]; then
|
||||||
grubby --remove-args="fadump" --update-kernel "$_kernel_path"
|
grubby --remove-args="fadump" --update-kernel "$_kernel_path"
|
||||||
else
|
else
|
||||||
grubby --args="fadump=$_fadump_val" --update-kernel "$_kernel_path"
|
grubby --args="fadump=$_fadump_val" --update-kernel "$_kernel_path"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
[[ $zipl_arg ]] && zipl > /dev/null
|
[[ -f /etc/zipl.conf ]] && zipl > /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
_valid_grubby_kernel_path()
|
_valid_grubby_kernel_path()
|
||||||
@ -1448,6 +1469,10 @@ _update_kernel_arg_in_grub_etc_default()
|
|||||||
{
|
{
|
||||||
local _para=$1 _val=$2 _para_val
|
local _para=$1 _val=$2 _para_val
|
||||||
|
|
||||||
|
if [[ $(uname -m) == s390x ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -n $_val ]]; then
|
if [[ -n $_val ]]; then
|
||||||
_para_val="$_para=$_val"
|
_para_val="$_para=$_val"
|
||||||
fi
|
fi
|
||||||
@ -1515,18 +1540,18 @@ reset_crashkernel()
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
# 1. CoreOS uses "rpm-ostree kargs" instead of grubby to manage kernel command
|
# 1. OSTree systems use "rpm-ostree kargs" instead of grubby to manage kernel command
|
||||||
# line. --kernel=ALL doesn't make sense for CoreOS.
|
# line. --kernel=ALL doesn't make sense for OStree.
|
||||||
# 2. CoreOS doesn't support POWER so the dump mode is always kdump.
|
# 2. We don't have any OSTree POWER systems so the dump mode is always kdump.
|
||||||
# 3. "rpm-ostree kargs" would prompt the user to reboot the system after
|
# 3. "rpm-ostree kargs" would prompt the user to reboot the system after
|
||||||
# modifying the kernel command line so there is no need for kexec-tools
|
# modifying the kernel command line so there is no need for kexec-tools
|
||||||
# to repeat it.
|
# to repeat it.
|
||||||
if is_atomic; then
|
if is_ostree; then
|
||||||
_old_crashkernel=$(rpm-ostree kargs | sed -n -E 's/.*(^|\s)crashkernel=(\S*).*/\2/p')
|
_old_crashkernel=$(rpm-ostree kargs | sed -n -E 's/.*(^|\s)crashkernel=(\S*).*/\2/p')
|
||||||
_new_dump_mode=kdump
|
_new_dump_mode=kdump
|
||||||
_new_crashkernel=$(kdump_get_arch_recommend_crashkernel "$_new_dump_mode")
|
_new_crashkernel=$(kdump_get_arch_recommend_crashkernel "$_new_dump_mode")
|
||||||
if [[ $_old_crashkernel != "$_new_crashkernel" ]]; then
|
if [[ $_old_crashkernel != "$_new_crashkernel" ]]; then
|
||||||
_update_grub "" "$_new_crashkernel" "$_new_dump_mode" ""
|
_update_kernel_cmdline "" "$_new_crashkernel" "$_new_dump_mode" ""
|
||||||
if [[ $_reboot == yes ]]; then
|
if [[ $_reboot == yes ]]; then
|
||||||
systemctl reboot
|
systemctl reboot
|
||||||
fi
|
fi
|
||||||
@ -1594,7 +1619,7 @@ reset_crashkernel()
|
|||||||
_old_crashkernel=$(get_grub_kernel_boot_parameter "$_kernel" crashkernel)
|
_old_crashkernel=$(get_grub_kernel_boot_parameter "$_kernel" crashkernel)
|
||||||
_old_fadump_val=$(get_grub_kernel_boot_parameter "$_kernel" fadump)
|
_old_fadump_val=$(get_grub_kernel_boot_parameter "$_kernel" fadump)
|
||||||
if [[ $_old_crashkernel != "$_new_crashkernel" || $_old_fadump_val != "$_new_fadump_val" ]]; then
|
if [[ $_old_crashkernel != "$_new_crashkernel" || $_old_fadump_val != "$_new_fadump_val" ]]; then
|
||||||
_update_grub "$_kernel" "$_new_crashkernel" "$_new_dump_mode" "$_new_fadump_val"
|
_update_kernel_cmdline "$_kernel" "$_new_crashkernel" "$_new_dump_mode" "$_new_fadump_val"
|
||||||
if [[ $_reboot != yes ]]; then
|
if [[ $_reboot != yes ]]; then
|
||||||
if [[ $_old_crashkernel != "$_new_crashkernel" ]]; then
|
if [[ $_old_crashkernel != "$_new_crashkernel" ]]; then
|
||||||
_what_is_updated="Updated crashkernel=$_new_crashkernel"
|
_what_is_updated="Updated crashkernel=$_new_crashkernel"
|
||||||
@ -1613,6 +1638,15 @@ reset_crashkernel()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_is_bootloader_installed()
|
||||||
|
{
|
||||||
|
if [[ $(uname -m) == s390x ]]; then
|
||||||
|
test -f /etc/zipl.conf
|
||||||
|
else
|
||||||
|
test -f /boot/grub2/grub.cfg
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# update the crashkernel value in GRUB_ETC_DEFAULT if necessary
|
# update the crashkernel value in GRUB_ETC_DEFAULT if necessary
|
||||||
#
|
#
|
||||||
# called by reset_crashkernel_after_update and inherit its array variable
|
# called by reset_crashkernel_after_update and inherit its array variable
|
||||||
@ -1622,6 +1656,10 @@ update_crashkernel_in_grub_etc_default_after_update()
|
|||||||
local _crashkernel _fadump_val
|
local _crashkernel _fadump_val
|
||||||
local _dump_mode _old_default_crashkernel _new_default_crashkernel
|
local _dump_mode _old_default_crashkernel _new_default_crashkernel
|
||||||
|
|
||||||
|
if [[ $(uname -m) == s390x ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
_crashkernel=$(_read_kernel_arg_in_grub_etc_default crashkernel)
|
_crashkernel=$(_read_kernel_arg_in_grub_etc_default crashkernel)
|
||||||
|
|
||||||
if [[ -z $_crashkernel ]]; then
|
if [[ -z $_crashkernel ]]; then
|
||||||
@ -1647,6 +1685,10 @@ reset_crashkernel_after_update()
|
|||||||
local _kernel _crashkernel _dump_mode _fadump_val _old_default_crashkernel _new_default_crashkernel
|
local _kernel _crashkernel _dump_mode _fadump_val _old_default_crashkernel _new_default_crashkernel
|
||||||
declare -A _crashkernel_vals
|
declare -A _crashkernel_vals
|
||||||
|
|
||||||
|
if ! _is_bootloader_installed; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
_crashkernel_vals[old_kdump]=$(cat /tmp/old_default_crashkernel 2> /dev/null)
|
_crashkernel_vals[old_kdump]=$(cat /tmp/old_default_crashkernel 2> /dev/null)
|
||||||
_crashkernel_vals[old_fadump]=$(cat /tmp/old_default_crashkernel_fadump 2> /dev/null)
|
_crashkernel_vals[old_fadump]=$(cat /tmp/old_default_crashkernel_fadump 2> /dev/null)
|
||||||
_crashkernel_vals[new_kdump]=$(get_default_crashkernel kdump)
|
_crashkernel_vals[new_kdump]=$(get_default_crashkernel kdump)
|
||||||
@ -1663,7 +1705,7 @@ reset_crashkernel_after_update()
|
|||||||
if [[ $_crashkernel == "$_old_default_crashkernel" ]] &&
|
if [[ $_crashkernel == "$_old_default_crashkernel" ]] &&
|
||||||
[[ $_new_default_crashkernel != "$_old_default_crashkernel" ]]; then
|
[[ $_new_default_crashkernel != "$_old_default_crashkernel" ]]; then
|
||||||
_fadump_val=$(get_grub_kernel_boot_parameter "$_kernel" fadump)
|
_fadump_val=$(get_grub_kernel_boot_parameter "$_kernel" fadump)
|
||||||
if _update_grub "$_kernel" "$_new_default_crashkernel" "$_dump_mode" "$_fadump_val"; then
|
if _update_kernel_cmdline "$_kernel" "$_new_default_crashkernel" "$_dump_mode" "$_fadump_val"; then
|
||||||
echo "For kernel=$_kernel, crashkernel=$_new_default_crashkernel now."
|
echo "For kernel=$_kernel, crashkernel=$_new_default_crashkernel now."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -1697,6 +1739,12 @@ reset_crashkernel_for_installed_kernel()
|
|||||||
local _installed_kernel _running_kernel _crashkernel _crashkernel_running
|
local _installed_kernel _running_kernel _crashkernel _crashkernel_running
|
||||||
local _dump_mode_running _fadump_val_running
|
local _dump_mode_running _fadump_val_running
|
||||||
|
|
||||||
|
# During package install, only try to reset crashkernel for osbuild
|
||||||
|
# thus to avoid calling grubby when installing os via anaconda
|
||||||
|
if ! _is_bootloader_installed && ! _is_osbuild; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
if ! _installed_kernel=$(_find_kernel_path_by_release "$1"); then
|
if ! _installed_kernel=$(_find_kernel_path_by_release "$1"); then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -1719,9 +1767,11 @@ reset_crashkernel_for_installed_kernel()
|
|||||||
_fadump_val_running=$(get_grub_kernel_boot_parameter "$_kernel" fadump)
|
_fadump_val_running=$(get_grub_kernel_boot_parameter "$_kernel" fadump)
|
||||||
|
|
||||||
if [[ $_crashkernel != "$_crashkernel_running" ]]; then
|
if [[ $_crashkernel != "$_crashkernel_running" ]]; then
|
||||||
if _update_grub "$_installed_kernel" "$_crashkernel_running" "$_dump_mode_running" "$_fadump_val_running"; then
|
if _update_kernel_cmdline "$_installed_kernel" "$_crashkernel_running" "$_dump_mode_running" "$_fadump_val_running"; then
|
||||||
echo "kexec-tools has reset $_installed_kernel to use the new default crashkernel value $_crashkernel_running"
|
echo "kexec-tools has reset $_installed_kernel to use the new default crashkernel value $_crashkernel_running"
|
||||||
fi
|
fi
|
||||||
|
elif [[ $_crashkernel == auto ]]; then
|
||||||
|
reset_crashkernel "--kernel=$_installed_kernel"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1790,12 +1840,12 @@ main()
|
|||||||
shift
|
shift
|
||||||
reset_crashkernel "$@"
|
reset_crashkernel "$@"
|
||||||
;;
|
;;
|
||||||
reset-crashkernel-after-update)
|
_reset-crashkernel-after-update)
|
||||||
if [[ $(kdump_get_conf_val auto_reset_crashkernel) != no ]]; then
|
if [[ $(kdump_get_conf_val auto_reset_crashkernel) != no ]]; then
|
||||||
reset_crashkernel_after_update
|
reset_crashkernel_after_update
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
reset-crashkernel-for-installed_kernel)
|
_reset-crashkernel-for-installed_kernel)
|
||||||
if [[ $(kdump_get_conf_val auto_reset_crashkernel) != no ]]; then
|
if [[ $(kdump_get_conf_val auto_reset_crashkernel) != no ]]; then
|
||||||
reset_crashkernel_for_installed_kernel "$2"
|
reset_crashkernel_for_installed_kernel "$2"
|
||||||
fi
|
fi
|
||||||
|
@ -1,76 +0,0 @@
|
|||||||
commit 6d0d95ecc04a70f8448d562ff0fbbae237f5c929
|
|
||||||
Author: Kazuhito Hagio <k-hagio-ab@nec.com>
|
|
||||||
Date: Thu Apr 21 08:58:29 2022 +0900
|
|
||||||
|
|
||||||
[PATCH] Avoid false-positive mem_section validation with vmlinux
|
|
||||||
|
|
||||||
Currently get_mem_section() validates if SYMBOL(mem_section) is the address
|
|
||||||
of the mem_section array first. But there was a report that the first
|
|
||||||
validation wrongly returned TRUE with -x vmlinux and SPARSEMEM_EXTREME
|
|
||||||
(4.15+) on s390x. This leads to crash failing statup with the following
|
|
||||||
seek error:
|
|
||||||
|
|
||||||
crash: seek error: kernel virtual address: 67fffc2800 type: "memory section root table"
|
|
||||||
|
|
||||||
Skip the first validation when satisfying the conditions.
|
|
||||||
|
|
||||||
Reported-by: Dave Wysochanski <dwysocha@redhat.com>
|
|
||||||
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
|
||||||
Reviewed-and-Tested-by: Philipp Rudo <prudo@redhat.com>
|
|
||||||
Reviewed-by: Pingfan Liu <piliu@redhat.com>
|
|
||||||
|
|
||||||
diff --git a/makedumpfile-1.7.1/makedumpfile.c b/makedumpfile-1.7.1/makedumpfile.c
|
|
||||||
index a2f45c84cee3ba57ce3d3cf3f1905e6a03f4fd09..65d1c7c2f02c9ae8ead9de0f0217235fe72b3ca7 100644
|
|
||||||
--- a/makedumpfile-1.7.1/makedumpfile.c
|
|
||||||
+++ b/makedumpfile-1.7.1/makedumpfile.c
|
|
||||||
@@ -3698,6 +3698,22 @@ validate_mem_section(unsigned long *mem_sec,
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * SYMBOL(mem_section) varies with the combination of memory model and
|
|
||||||
+ * its source:
|
|
||||||
+ *
|
|
||||||
+ * SPARSEMEM
|
|
||||||
+ * vmcoreinfo: address of mem_section root array
|
|
||||||
+ * -x vmlinux: address of mem_section root array
|
|
||||||
+ *
|
|
||||||
+ * SPARSEMEM_EXTREME v1
|
|
||||||
+ * vmcoreinfo: address of mem_section root array
|
|
||||||
+ * -x vmlinux: address of mem_section root array
|
|
||||||
+ *
|
|
||||||
+ * SPARSEMEM_EXTREME v2 (with 83e3c48729d9 and a0b1280368d1) 4.15+
|
|
||||||
+ * vmcoreinfo: address of mem_section root array
|
|
||||||
+ * -x vmlinux: address of pointer to mem_section root array
|
|
||||||
+ */
|
|
||||||
static int
|
|
||||||
get_mem_section(unsigned int mem_section_size, unsigned long *mem_maps,
|
|
||||||
unsigned int num_section)
|
|
||||||
@@ -3710,12 +3726,27 @@ get_mem_section(unsigned int mem_section_size, unsigned long *mem_maps,
|
|
||||||
strerror(errno));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * There was a report that the first validation wrongly returned TRUE
|
|
||||||
+ * with -x vmlinux and SPARSEMEM_EXTREME v2 on s390x, so skip it.
|
|
||||||
+ * Howerver, leave the fallback validation as it is for the -i option.
|
|
||||||
+ */
|
|
||||||
+ if (is_sparsemem_extreme() && info->name_vmlinux) {
|
|
||||||
+ unsigned long flag = 0;
|
|
||||||
+ if (get_symbol_type_name("mem_section", DWARF_INFO_GET_SYMBOL_TYPE,
|
|
||||||
+ NULL, &flag)
|
|
||||||
+ && !(flag & TYPE_ARRAY))
|
|
||||||
+ goto skip_1st_validation;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
ret = validate_mem_section(mem_sec, SYMBOL(mem_section),
|
|
||||||
mem_section_size, mem_maps, num_section);
|
|
||||||
|
|
||||||
if (!ret && is_sparsemem_extreme()) {
|
|
||||||
unsigned long mem_section_ptr;
|
|
||||||
|
|
||||||
+skip_1st_validation:
|
|
||||||
if (!readmem(VADDR, SYMBOL(mem_section), &mem_section_ptr,
|
|
||||||
sizeof(mem_section_ptr)))
|
|
||||||
goto out;
|
|
@ -0,0 +1,37 @@
|
|||||||
|
From 6b6187f546f0ddad8ea84d22c3f7ad72133dcfe3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sourabh Jain <sourabhjain@linux.ibm.com>
|
||||||
|
Date: Thu, 15 Sep 2022 14:12:40 +0530
|
||||||
|
Subject: [PATCH] ppc64: remove rma_top limit
|
||||||
|
|
||||||
|
Restricting kexec tool to allocate hole for kexec segments below 768MB
|
||||||
|
may not be relavent now since first memory block size can be 1024MB and
|
||||||
|
more.
|
||||||
|
|
||||||
|
Removing rma_top restriction will give more space to find holes for
|
||||||
|
kexec segments and existing in-place checks make sure that kexec segment
|
||||||
|
allocation doesn't cross the first memory block because every kexec segment
|
||||||
|
has to be within first memory block for kdump kernel to boot properly.
|
||||||
|
|
||||||
|
Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
|
||||||
|
Acked-by: Hari Bathini <hbathini@linux.ibm.com>
|
||||||
|
Signed-off-by: Simon Horman <horms@kernel.org>
|
||||||
|
---
|
||||||
|
kexec/arch/ppc64/kexec-ppc64.c | 2 --
|
||||||
|
1 file changed, 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/kexec/arch/ppc64/kexec-ppc64.c b/kexec/arch/ppc64/kexec-ppc64.c
|
||||||
|
index 5b17740..611809f 100644
|
||||||
|
--- a/kexec/arch/ppc64/kexec-ppc64.c
|
||||||
|
+++ b/kexec/arch/ppc64/kexec-ppc64.c
|
||||||
|
@@ -717,8 +717,6 @@ static int get_devtree_details(unsigned long kexec_flags)
|
||||||
|
if (base < rma_base) {
|
||||||
|
rma_base = base;
|
||||||
|
rma_top = base + be64_to_cpu(((uint64_t *)buf)[1]);
|
||||||
|
- if (rma_top > 0x30000000UL)
|
||||||
|
- rma_top = 0x30000000UL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
--
|
||||||
|
2.38.1
|
||||||
|
|
@ -27,7 +27,7 @@ SAVE_PATH=$(get_save_path)
|
|||||||
OVERRIDE_RESETTABLE=0
|
OVERRIDE_RESETTABLE=0
|
||||||
|
|
||||||
extra_modules=""
|
extra_modules=""
|
||||||
dracut_args=(--add kdumpbase --quiet --hostonly --hostonly-cmdline --hostonly-i18n --hostonly-mode strict -o "plymouth resume ifcfg earlykdump")
|
dracut_args=(--add kdumpbase --quiet --hostonly --hostonly-cmdline --hostonly-i18n --hostonly-mode strict --hostonly-nics '' -o "plymouth resume ifcfg earlykdump")
|
||||||
|
|
||||||
MKDUMPRD_TMPDIR="$(mktemp -d -t mkdumprd.XXXXXX)"
|
MKDUMPRD_TMPDIR="$(mktemp -d -t mkdumprd.XXXXXX)"
|
||||||
[ -d "$MKDUMPRD_TMPDIR" ] || perror_exit "dracut: mktemp -p -d -t dracut.XXXXXX failed."
|
[ -d "$MKDUMPRD_TMPDIR" ] || perror_exit "dracut: mktemp -p -d -t dracut.XXXXXX failed."
|
||||||
@ -242,7 +242,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 \"$_mnt/$SAVE_PATH\" does not exist in dump target \"$_target\""
|
perror_exit "Dump path \"$SAVE_PATH\" does not exist in dump target \"$_target\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_size fs "$_target"
|
check_size fs "$_target"
|
||||||
@ -391,7 +391,7 @@ while read -r config_opt config_val; do
|
|||||||
extra_modules)
|
extra_modules)
|
||||||
extra_modules="$extra_modules $config_val"
|
extra_modules="$extra_modules $config_val"
|
||||||
;;
|
;;
|
||||||
ext[234] | xfs | btrfs | minix | nfs)
|
ext[234] | xfs | btrfs | minix | nfs | virtiofs)
|
||||||
check_user_configured_target "$config_val" "$config_opt"
|
check_user_configured_target "$config_val" "$config_opt"
|
||||||
add_mount "$config_val" "$config_opt"
|
add_mount "$config_val" "$config_opt"
|
||||||
;;
|
;;
|
||||||
@ -432,10 +432,9 @@ done <<< "$(kdump_read_conf)"
|
|||||||
handle_default_dump_target
|
handle_default_dump_target
|
||||||
|
|
||||||
if ! have_compression_in_dracut_args; then
|
if ! have_compression_in_dracut_args; then
|
||||||
# Here zstd is set as the default compression method. If squash module
|
if is_squash_available && dracut_have_option "--squash-compressor"; then
|
||||||
# is available for dracut, libzstd will be used by mksquashfs. If
|
add_dracut_arg "--squash-compressor" "zstd"
|
||||||
# squash module is unavailable, command zstd will be used instead.
|
elif is_zstd_command_available; then
|
||||||
if is_squash_available || is_zstd_command_available; then
|
|
||||||
add_dracut_arg "--compress" "zstd"
|
add_dracut_arg "--compress" "zstd"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -38,14 +38,18 @@ FADUMP_INITRD="$MKFADUMPRD_TMPDIR/fadump.img"
|
|||||||
# this file tells the initrd is fadump enabled
|
# this file tells the initrd is fadump enabled
|
||||||
touch "$MKFADUMPRD_TMPDIR/fadump.initramfs"
|
touch "$MKFADUMPRD_TMPDIR/fadump.initramfs"
|
||||||
ddebug "rebuild fadump initrd: $FADUMP_INITRD $DEFAULT_INITRD $KDUMP_KERNELVER"
|
ddebug "rebuild fadump initrd: $FADUMP_INITRD $DEFAULT_INITRD $KDUMP_KERNELVER"
|
||||||
if ! $MKDUMPRD "$FADUMP_INITRD" -i "$MKFADUMPRD_TMPDIR/fadump.initramfs" /etc/fadump.initramfs; then
|
# Don't use squash for capture image or default image as it negatively impacts
|
||||||
|
# compression ratio and increases the size of the initramfs image.
|
||||||
|
# Don't compress the capture image as uncompressed image is needed immediately.
|
||||||
|
# Also, early microcode would not be needed here.
|
||||||
|
if ! $MKDUMPRD "$FADUMP_INITRD" -i "$MKFADUMPRD_TMPDIR/fadump.initramfs" /etc/fadump.initramfs --omit squash --no-compress --no-early-microcode; then
|
||||||
perror_exit "mkfadumprd: failed to build image with dump capture support"
|
perror_exit "mkfadumprd: failed to build image with dump capture support"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### Unpack the initramfs having dump capture capability
|
### Unpack the initramfs having dump capture capability retaining previous file modification time.
|
||||||
|
# This helps in saving space by hardlinking identical files.
|
||||||
mkdir -p "$MKFADUMPRD_TMPDIR/fadumproot"
|
mkdir -p "$MKFADUMPRD_TMPDIR/fadumproot"
|
||||||
if ! (pushd "$MKFADUMPRD_TMPDIR/fadumproot" > /dev/null && lsinitrd --unpack "$FADUMP_INITRD" &&
|
if ! cpio -id --preserve-modification-time --quiet -D "$MKFADUMPRD_TMPDIR/fadumproot" < "$FADUMP_INITRD"; then
|
||||||
popd > /dev/null); then
|
|
||||||
derror "mkfadumprd: failed to unpack '$MKFADUMPRD_TMPDIR'"
|
derror "mkfadumprd: failed to unpack '$MKFADUMPRD_TMPDIR'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -58,13 +62,9 @@ _dracut_isolate_args=(
|
|||||||
/usr/lib/dracut/fadump-kernel-modules.txt
|
/usr/lib/dracut/fadump-kernel-modules.txt
|
||||||
)
|
)
|
||||||
|
|
||||||
if is_squash_available; then
|
# Use zstd compression method, if available
|
||||||
_dracut_isolate_args+=(--add squash)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Same as setting zstd in mkdumprd
|
|
||||||
if ! have_compression_in_dracut_args; then
|
if ! have_compression_in_dracut_args; then
|
||||||
if is_squash_available || is_zstd_command_available; then
|
if is_zstd_command_available; then
|
||||||
_dracut_isolate_args+=(--compress zstd)
|
_dracut_isolate_args+=(--compress zstd)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -45,6 +45,7 @@ storage:
|
|||||||
hardware FCoE (qla2xxx, lpfc)
|
hardware FCoE (qla2xxx, lpfc)
|
||||||
software FCoE (bnx2fc) (Extra configuration required,
|
software FCoE (bnx2fc) (Extra configuration required,
|
||||||
please read "Note on FCoE" section below)
|
please read "Note on FCoE" section below)
|
||||||
|
NVMe-FC (qla2xxx, lpfc)
|
||||||
|
|
||||||
network:
|
network:
|
||||||
Hardware using kernel modules: (igb, ixgbe, ice, i40e, e1000e, igc,
|
Hardware using kernel modules: (igb, ixgbe, ice, i40e, e1000e, igc,
|
||||||
@ -65,6 +66,7 @@ filesystem:
|
|||||||
ext[234]
|
ext[234]
|
||||||
xfs
|
xfs
|
||||||
nfs
|
nfs
|
||||||
|
virtiofs
|
||||||
|
|
||||||
firmware:
|
firmware:
|
||||||
BIOS
|
BIOS
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
%global eppic_ver e8844d3793471163ae4a56d8f95897be9e5bd554
|
%global eppic_ver e8844d3793471163ae4a56d8f95897be9e5bd554
|
||||||
%global eppic_shortver %(c=%{eppic_ver}; echo ${c:0:7})
|
%global eppic_shortver %(c=%{eppic_ver}; echo ${c:0:7})
|
||||||
%global mkdf_ver 1.7.1
|
%global mkdf_ver 1.7.2
|
||||||
%global mkdf_shortver %(c=%{mkdf_ver}; echo ${c:0:7})
|
%global mkdf_shortver %(c=%{mkdf_ver}; echo ${c:0:7})
|
||||||
|
|
||||||
Name: kexec-tools
|
Name: kexec-tools
|
||||||
Version: 2.0.24
|
Version: 2.0.25
|
||||||
Release: 5%{?dist}
|
Release: 13%{?dist}
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Summary: The kexec/kdump userspace component
|
Summary: The kexec/kdump userspace component
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ Source3: kdump.sysconfig.x86_64
|
|||||||
Source4: kdump.sysconfig.i386
|
Source4: kdump.sysconfig.i386
|
||||||
Source5: kdump.sysconfig.ppc64
|
Source5: kdump.sysconfig.ppc64
|
||||||
Source7: mkdumprd
|
Source7: mkdumprd
|
||||||
Source8: kdump.conf
|
Source8: gen-kdump-conf.sh
|
||||||
Source9: https://github.com/makedumpfile/makedumpfile/archive/%{mkdf_ver}/makedumpfile-%{mkdf_shortver}.tar.gz
|
Source9: https://github.com/makedumpfile/makedumpfile/archive/%{mkdf_ver}/makedumpfile-%{mkdf_shortver}.tar.gz
|
||||||
Source10: kexec-kdump-howto.txt
|
Source10: kexec-kdump-howto.txt
|
||||||
Source11: fadump-howto.txt
|
Source11: fadump-howto.txt
|
||||||
@ -44,7 +44,8 @@ Source33: 92-crashkernel.install
|
|||||||
Source34: crashkernel-howto.txt
|
Source34: crashkernel-howto.txt
|
||||||
Source35: kdump-migrate-action.sh
|
Source35: kdump-migrate-action.sh
|
||||||
Source36: kdump-restart.sh
|
Source36: kdump-restart.sh
|
||||||
Source37: supported-kdump-targets.txt
|
Source37: 60-fadump.install
|
||||||
|
Source38: supported-kdump-targets.txt
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# These are sources for mkdumpramfs
|
# These are sources for mkdumpramfs
|
||||||
@ -71,7 +72,6 @@ Requires: dracut >= 050
|
|||||||
Requires: dracut-network >= 050
|
Requires: dracut-network >= 050
|
||||||
Requires: dracut-squash >= 050
|
Requires: dracut-squash >= 050
|
||||||
Requires: ethtool
|
Requires: ethtool
|
||||||
Recommends: zstd
|
|
||||||
Recommends: grubby
|
Recommends: grubby
|
||||||
Recommends: hostname
|
Recommends: hostname
|
||||||
BuildRequires: make
|
BuildRequires: make
|
||||||
@ -100,6 +100,7 @@ Requires: systemd-udev%{?_isa}
|
|||||||
#
|
#
|
||||||
# Patches 301 through 400 are meant for ppc64 kexec-tools enablement
|
# Patches 301 through 400 are meant for ppc64 kexec-tools enablement
|
||||||
#
|
#
|
||||||
|
Patch301: kexec-tools-2.0.25-ppc64-ppc64-remove-rma_top-limit.patch
|
||||||
|
|
||||||
#
|
#
|
||||||
# Patches 401 through 500 are meant for s390 kexec-tools enablement
|
# Patches 401 through 500 are meant for s390 kexec-tools enablement
|
||||||
@ -112,7 +113,6 @@ Requires: systemd-udev%{?_isa}
|
|||||||
#
|
#
|
||||||
# Patches 601 onward are generic patches
|
# Patches 601 onward are generic patches
|
||||||
#
|
#
|
||||||
Patch601: ./kexec-tools-2.0.23-makedumpfile-Avoid_false_positive_mem_section_validation_with_vmlinux.patch
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
kexec-tools provides /sbin/kexec binary that facilitates a new
|
kexec-tools provides /sbin/kexec binary that facilitates a new
|
||||||
@ -128,7 +128,7 @@ mkdir -p -m755 kcp
|
|||||||
tar -z -x -v -f %{SOURCE9}
|
tar -z -x -v -f %{SOURCE9}
|
||||||
tar -z -x -v -f %{SOURCE19}
|
tar -z -x -v -f %{SOURCE19}
|
||||||
|
|
||||||
%patch601 -p1
|
%patch301 -p1
|
||||||
|
|
||||||
%ifarch ppc
|
%ifarch ppc
|
||||||
%define archdef ARCH=ppc
|
%define archdef ARCH=ppc
|
||||||
@ -154,7 +154,10 @@ cp %{SOURCE21} .
|
|||||||
cp %{SOURCE26} .
|
cp %{SOURCE26} .
|
||||||
cp %{SOURCE27} .
|
cp %{SOURCE27} .
|
||||||
cp %{SOURCE34} .
|
cp %{SOURCE34} .
|
||||||
cp %{SOURCE37} .
|
cp %{SOURCE38} .
|
||||||
|
|
||||||
|
# Generate kdump.conf file
|
||||||
|
%{SOURCE8} %{_target_cpu} > kdump.conf
|
||||||
|
|
||||||
make
|
make
|
||||||
%ifarch %{ix86} x86_64 ppc64 s390x ppc64le aarch64
|
%ifarch %{ix86} x86_64 ppc64 s390x ppc64le aarch64
|
||||||
@ -193,8 +196,7 @@ SYSCONFIG=$RPM_SOURCE_DIR/kdump.sysconfig.%{_target_cpu}
|
|||||||
install -m 644 $SYSCONFIG $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/kdump
|
install -m 644 $SYSCONFIG $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/kdump
|
||||||
|
|
||||||
install -m 755 %{SOURCE7} $RPM_BUILD_ROOT/usr/sbin/mkdumprd
|
install -m 755 %{SOURCE7} $RPM_BUILD_ROOT/usr/sbin/mkdumprd
|
||||||
install -m 755 %{SOURCE32} $RPM_BUILD_ROOT/usr/sbin/mkfadumprd
|
install -m 644 kdump.conf $RPM_BUILD_ROOT%{_sysconfdir}/kdump.conf
|
||||||
install -m 644 %{SOURCE8} $RPM_BUILD_ROOT%{_sysconfdir}/kdump.conf
|
|
||||||
install -m 644 kexec/kexec.8 $RPM_BUILD_ROOT%{_mandir}/man8/kexec.8
|
install -m 644 kexec/kexec.8 $RPM_BUILD_ROOT%{_mandir}/man8/kexec.8
|
||||||
install -m 644 %{SOURCE12} $RPM_BUILD_ROOT%{_mandir}/man8/mkdumprd.8
|
install -m 644 %{SOURCE12} $RPM_BUILD_ROOT%{_mandir}/man8/mkdumprd.8
|
||||||
install -m 644 %{SOURCE25} $RPM_BUILD_ROOT%{_mandir}/man8/kdumpctl.8
|
install -m 644 %{SOURCE25} $RPM_BUILD_ROOT%{_mandir}/man8/kdumpctl.8
|
||||||
@ -202,6 +204,7 @@ install -m 755 %{SOURCE20} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-lib.sh
|
|||||||
install -m 755 %{SOURCE23} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-lib-initramfs.sh
|
install -m 755 %{SOURCE23} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-lib-initramfs.sh
|
||||||
install -m 755 %{SOURCE31} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-logger.sh
|
install -m 755 %{SOURCE31} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-logger.sh
|
||||||
%ifarch ppc64 ppc64le
|
%ifarch ppc64 ppc64le
|
||||||
|
install -m 755 %{SOURCE32} $RPM_BUILD_ROOT/usr/sbin/mkfadumprd
|
||||||
install -m 755 %{SOURCE35} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-migrate-action.sh
|
install -m 755 %{SOURCE35} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-migrate-action.sh
|
||||||
install -m 755 %{SOURCE36} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-restart.sh
|
install -m 755 %{SOURCE36} $RPM_BUILD_ROOT%{_prefix}/lib/kdump/kdump-restart.sh
|
||||||
%endif
|
%endif
|
||||||
@ -215,6 +218,7 @@ 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 -D %{SOURCE37} $RPM_BUILD_ROOT%{_prefix}/lib/kernel/install.d/60-fadump.install
|
||||||
%endif
|
%endif
|
||||||
install -m 644 %{SOURCE15} $RPM_BUILD_ROOT%{_mandir}/man5/kdump.conf.5
|
install -m 644 %{SOURCE15} $RPM_BUILD_ROOT%{_mandir}/man5/kdump.conf.5
|
||||||
install -m 644 %{SOURCE16} $RPM_BUILD_ROOT%{_unitdir}/kdump.service
|
install -m 644 %{SOURCE16} $RPM_BUILD_ROOT%{_unitdir}/kdump.service
|
||||||
@ -268,13 +272,19 @@ mkdir -p $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/
|
|||||||
mv $RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/* $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/
|
mv $RPM_BUILD_ROOT/etc/kdump-adv-conf/kdump_dracut_modules/* $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/
|
||||||
|
|
||||||
%pre
|
%pre
|
||||||
# save the old default crashkernel values to /tmp/ when upgrading the package
|
# Save the old default crashkernel values to /tmp/ when upgrading the package
|
||||||
if ! grep -qs "ostree" /proc/cmdline && [ $1 == 2 ] && grep -q get-default-crashkernel /usr/bin/kdumpctl; then
|
# so kdumpctl later can tell if it should update the kernel crashkernel
|
||||||
|
# parameter in the posttrans scriptlet. Note this feauture of auto-updating
|
||||||
|
# the kernel crashkernel parameter currently doesn't support ostree, so skip it
|
||||||
|
# for ostree.
|
||||||
|
if [ ! -f /run/ostree-booted ] && [ $1 == 2 ] && grep -q get-default-crashkernel /usr/bin/kdumpctl; then
|
||||||
kdumpctl get-default-crashkernel kdump > /tmp/old_default_crashkernel 2>/dev/null
|
kdumpctl get-default-crashkernel kdump > /tmp/old_default_crashkernel 2>/dev/null
|
||||||
%ifarch ppc64 ppc64le
|
%ifarch ppc64 ppc64le
|
||||||
kdumpctl get-default-crashkernel fadump > /tmp/old_default_crashkernel_fadump 2>/dev/null
|
kdumpctl get-default-crashkernel fadump > /tmp/old_default_crashkernel_fadump 2>/dev/null
|
||||||
%endif
|
%endif
|
||||||
fi
|
fi
|
||||||
|
# don't block package update
|
||||||
|
:
|
||||||
|
|
||||||
%post
|
%post
|
||||||
# Initial installation
|
# Initial installation
|
||||||
@ -342,10 +352,15 @@ do
|
|||||||
done
|
done
|
||||||
|
|
||||||
%posttrans
|
%posttrans
|
||||||
# try to reset kernel crashkernel value to new default value when upgrading
|
# Try to reset kernel crashkernel value to new default value based on the old
|
||||||
# the package
|
# default value or set up crasherkernel value for osbuild
|
||||||
if ! grep -qs "ostree" /proc/cmdline && [ $1 == 1 ]; then
|
#
|
||||||
kdumpctl reset-crashkernel-after-update
|
# Note
|
||||||
|
# 1. Skip ostree systems as they are not supported.
|
||||||
|
# 2. "[ $1 == 1 ]" in posttrans scriptlet means both install and upgrade. The
|
||||||
|
# former case is used to set up crashkernel for osbuild
|
||||||
|
if [ ! -f /run/ostree-booted ] && [ $1 == 1 ]; then
|
||||||
|
kdumpctl _reset-crashkernel-after-update
|
||||||
rm /tmp/old_default_crashkernel 2>/dev/null
|
rm /tmp/old_default_crashkernel 2>/dev/null
|
||||||
%ifarch ppc64 ppc64le
|
%ifarch ppc64 ppc64le
|
||||||
rm /tmp/old_default_crashkernel_fadump 2>/dev/null
|
rm /tmp/old_default_crashkernel_fadump 2>/dev/null
|
||||||
@ -361,8 +376,11 @@ fi
|
|||||||
%ifarch %{ix86} x86_64 ppc64 s390x ppc64le aarch64
|
%ifarch %{ix86} x86_64 ppc64 s390x ppc64le aarch64
|
||||||
/usr/sbin/makedumpfile
|
/usr/sbin/makedumpfile
|
||||||
%endif
|
%endif
|
||||||
/usr/sbin/mkdumprd
|
%ifarch ppc64 ppc64le
|
||||||
/usr/sbin/mkfadumprd
|
/usr/sbin/mkfadumprd
|
||||||
|
%{_prefix}/lib/kernel/install.d/60-fadump.install
|
||||||
|
%endif
|
||||||
|
/usr/sbin/mkdumprd
|
||||||
/usr/sbin/vmcore-dmesg
|
/usr/sbin/vmcore-dmesg
|
||||||
%{_bindir}/*
|
%{_bindir}/*
|
||||||
%{_datadir}/kdump
|
%{_datadir}/kdump
|
||||||
@ -410,18 +428,101 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Mar 10 2023 Tao Liu <ltao@redhat.com> - 2.0.25-13
|
||||||
|
- kdump-lib: Add the CoreOS kernel dir to the boot_dirlist
|
||||||
|
- kdump-lib: attempt to fix BOOT_IMAGE detection
|
||||||
|
- kdump-lib: change how ostree based systems are detected
|
||||||
|
- kdump-lib: clear up references to Atomic/CoreOS
|
||||||
|
|
||||||
|
* Fri Feb 24 2023 Tao Liu <ltao@redhat.com> - 2.0.25-12
|
||||||
|
- Reset crashkernel to default value if newly installed kernel has crashkernel=auto
|
||||||
|
- Use the correct command to get architecture
|
||||||
|
|
||||||
|
* Wed Jan 11 2023 Pingfan Liu <piliu@redhat.com> - 2.0.25-11
|
||||||
|
- ppc64: tackle SRCU hang issue
|
||||||
|
|
||||||
|
* Tue Dec 27 2022 Pingfan Liu <piliu@redhat.com> - 2.0.25-10
|
||||||
|
- Update supported-kdump-targets.txt
|
||||||
|
- dracut-module-setup.sh: skip installing driver for the loopback interface
|
||||||
|
- Don't try to update crashkernel when bootloader is not installed
|
||||||
|
- dracut-module-setup.sh: also install the driver of physical NIC for Hyper-V VM with accelerated networking
|
||||||
|
- fadump: use 'zstd' as the default compression method
|
||||||
|
- fadump: fix default initrd backup and restore logic
|
||||||
|
- fadump: add a kernel install hook to clean up fadump initramfs
|
||||||
|
- fadump: avoid status check while starting in fadump mode
|
||||||
|
- spec: only install mkfadumprd for ppc
|
||||||
|
- fadump: preserve file modification time to help with hardlinking
|
||||||
|
- fadump: do not use squash to reduce image size
|
||||||
|
|
||||||
|
* Mon Dec 19 2022 Tao Liu <ltao@redhat.com> - 2.0.25-9
|
||||||
|
- Add virtiofs to kdump supported-kdump-targets.txt
|
||||||
|
- dracut-module-setup.sh: stop overwriting dracut's trap handler
|
||||||
|
|
||||||
|
* Wed Dec 7 2022 Tao Liu <ltao@redhat.com> - 2.0.25-8
|
||||||
|
- kexec-tools: ppc64: remove rma_top limit
|
||||||
|
- kdumpctl: Optimize _find_kernel_path_by_release regex string
|
||||||
|
- kdump.conf: use a simple generator script to maintain
|
||||||
|
|
||||||
|
* Fri Nov 25 2022 Tao Liu <ltao@redhat.com> - 2.0.25-7
|
||||||
|
- Don't run kdump_check_setup_iscsi in a subshell in order to collect needed network interfaces
|
||||||
|
|
||||||
|
* Thu Nov 24 2022 Tao Liu <ltao@redhat.com> - 2.0.25-6
|
||||||
|
- Simplify setup_znet by copying connection profile to initrd
|
||||||
|
- Wait for the network to be truly ready before dumping vmcore
|
||||||
|
- Address the cases where a NIC has a different name in kdump kernel
|
||||||
|
- Reduce kdump memory consumption by only installing needed NIC drivers
|
||||||
|
- Reduce kdump memory consumption by not letting NetworkManager manage unneeded network interfaces
|
||||||
|
- Set up kdump network by directly copying NM connection profile to initrd
|
||||||
|
- Stop dracut 35network-manager from running nm-initrd-generator
|
||||||
|
- Apply the timeout configuration of nm-initrd-generator
|
||||||
|
- Determine whether IPv4 or IPv6 is needed
|
||||||
|
- Add functions to copy NetworkManage connection profiles to the initramfs
|
||||||
|
- Fix error for vlan over team network interface
|
||||||
|
|
||||||
|
* Fri Nov 11 2022 Tao Liu <ltao@redhat.com> - 2.0.25-5
|
||||||
|
- Don't check fs modified when dump target is lvm2 thinp
|
||||||
|
- Add dependency of dracut lvmthinpool-monitor module
|
||||||
|
- lvm.conf should be check modified if lvm2 thinp enabled
|
||||||
|
- Add lvm2 thin provision dump target checker
|
||||||
|
- Fix the sync issue for dump_fs
|
||||||
|
|
||||||
|
* Tue Nov 1 2022 Tao Liu <ltao@redhat.com> - 2.0.25-4
|
||||||
|
- Rebase makedumpfile to 1.7.2
|
||||||
|
- Include the memory overhead cost of cryptsetup when estimating the memory requirement for LUKS-encrypted target
|
||||||
|
- Choosing the most memory-consuming key slot when estimating the memory requirement for LUKS-encrypted target
|
||||||
|
- Skip reading /etc/defaut/grub for s390x
|
||||||
|
- Only try to reset crashkernel for osbuild during package install
|
||||||
|
- Prefix reset-crashkernel-{for-installed_kernel,after-update} with underscore
|
||||||
|
- use /run/ostree-booted to tell if scriptlet is running on OSTree system
|
||||||
|
|
||||||
|
* Wed Oct 26 2022 Tao Liu <ltao@redhat.com> - 2.0.25-3
|
||||||
|
- virtiofs support for kexec-tools
|
||||||
|
- Seperate dracut and dracut-squash compressor for zstd
|
||||||
|
|
||||||
|
* Mon Oct 17 2022 Tao Liu <ltao@redhat.com> - 2.0.25-2
|
||||||
|
- mkdumprd: Improve error messages on non-existing NFS target directories
|
||||||
|
- fadump: avoid non-debug kernel use for fadump case
|
||||||
|
|
||||||
|
* Wed Sep 21 2022 Tao Liu <ltao@redhat.com> - 2.0.25-1
|
||||||
|
- Rebase kexec-tools to v2.0.25
|
||||||
|
- remind the users to run zipl after calling grubby on s390x
|
||||||
|
- remove useless --zipl when calling grubby to update kernel command line
|
||||||
|
- skip updating /etc/default/grub for s390x
|
||||||
|
- Allow to update kexec-tools using virt-customize for cloud base image
|
||||||
|
- kdumpctl: make the kdump.log root-readable-only
|
||||||
|
|
||||||
* Tue Jul 12 2022 Tao Liu <ltao@redhat.com> - 2.0.24-5
|
* Tue Jul 12 2022 Tao Liu <ltao@redhat.com> - 2.0.24-5
|
||||||
- kdump-lib: use non-debug kernels first
|
- kdump-lib: use non-debug kernels first
|
||||||
- kdump-lib: fix typo in variable name
|
- kdump-lib: fix typo in variable name
|
||||||
|
|
||||||
* Tue Wed 15 2022 Tao Liu <ltao@redhat.com> - 2.0.24-4
|
* Wed Jun 15 2022 Tao Liu <ltao@redhat.com> - 2.0.24-4
|
||||||
- crashkernel: optimize arm64 reserved size if PAGE_SIZE=4k
|
- crashkernel: optimize arm64 reserved size if PAGE_SIZE=4k
|
||||||
- kdump-lib.sh: Check the output of blkid with sed instead of eval
|
- kdump-lib.sh: Check the output of blkid with sed instead of eval
|
||||||
|
|
||||||
* Tue Jun 7 2022 Tao Liu <ltao@redhat.com> - 2.0.24-3
|
* Tue Jun 7 2022 Tao Liu <ltao@redhat.com> - 2.0.24-3
|
||||||
- kdump.sysconfig*: add ignition.firstboot to KDUMP_COMMANDLINE_REMOVE
|
- kdump.sysconfig*: add ignition.firstboot to KDUMP_COMMANDLINE_REMOVE
|
||||||
|
|
||||||
* Thu May 23 2022 Tao Liu <ltao@redhat.com> - 2.0.24-2
|
* Mon May 23 2022 Tao Liu <ltao@redhat.com> - 2.0.24-2
|
||||||
- remove the upper bound of default crashkernel value example
|
- remove the upper bound of default crashkernel value example
|
||||||
- update fadump-howto
|
- update fadump-howto
|
||||||
- update kexec-kdump-howto
|
- update kexec-kdump-howto
|
||||||
|
Loading…
Reference in New Issue
Block a user