From 1fea1a3ef0e2e59707cb008ba8dc74d126ff76f1 Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Wed, 13 Nov 2024 16:11:36 +0300 Subject: [PATCH] import kexec-tools-2.0.27-16.el9_5.1 --- SOURCES/dracut-module-setup.sh | 69 ++++++++++++++++++- SOURCES/kdump-lib-initramfs.sh | 11 +-- SOURCES/kdump-lib.sh | 4 +- SOURCES/kdump.sysconfig | 2 +- SOURCES/kdump.sysconfig.ppc64 | 2 +- SOURCES/kdump.sysconfig.ppc64le | 2 +- SOURCES/kdump.sysconfig.x86_64 | 2 +- SOURCES/kdumpctl | 22 ++---- SOURCES/kdumpctl.8 | 4 ++ SOURCES/kexec-kdump-howto.txt | 7 +- ...exec_file-flag-to-support-debug-prin.patch | 44 ++++++++++++ SPECS/kexec-tools.spec | 34 +++++++-- 12 files changed, 158 insertions(+), 45 deletions(-) create mode 100644 SOURCES/kexec_file-add-kexec_file-flag-to-support-debug-prin.patch diff --git a/SOURCES/dracut-module-setup.sh b/SOURCES/dracut-module-setup.sh index 99685fe..8b67c86 100755 --- a/SOURCES/dracut-module-setup.sh +++ b/SOURCES/dracut-module-setup.sh @@ -494,6 +494,24 @@ _find_znet_nmconnection() { "$1"/*.nmconnection | LC_ALL=C sed -e "$2" } +kdump_setup_ovs() { + local _netdev="$1" + local _dev _phy_if + + _phy_if=$(ovs_find_phy_if "$_netdev") + + if kdump_is_bridge "$_phy_if"; then + kdump_setup_vlan "$_phy_if" + elif kdump_is_bond "$_phy_if"; then + kdump_setup_bond "$_phy_if" || return 1 + elif kdump_is_team "$_phy_if"; then + derror "Ovs bridge over team is not supported!" + exit 1 + fi + + _save_kdump_netifs "$_phy_if" +} + # setup s390 znet # # Note part of code is extracted from ccw_init provided by s390utils @@ -545,6 +563,28 @@ kdump_get_remote_ip() { echo "$_remote" } +# Find the physical interface of Open vSwitch (Ovs) bridge +# +# The physical network interface has the same MAC address as the Ovs bridge +ovs_find_phy_if() { + local _mac _dev + _mac=$(kdump_get_mac_addr $1) + + for _dev in $(ovs-vsctl list-ifaces $1); do + if [[ $_mac == $("${initdir}/etc/sysconfig/openvswitch" + + KDUMP_DROP_IN_DIR="${initdir}/etc/systemd/system/nm-initrd.service.d" + mkdir -p "$KDUMP_DROP_IN_DIR" + printf "[Unit]\nAfter=openvswitch.service\n" >$KDUMP_DROP_IN_DIR/01-after-ovs.conf + + $SYSTEMCTL -q --root "$initdir" enable openvswitch.service + $SYSTEMCTL -q --root "$initdir" add-wants basic.target openvswitch.service +} + # Setup dracut to bring up network interface that enable # initramfs accessing giving destination kdump_install_net() { @@ -627,6 +693,7 @@ kdump_install_net() { kdump_install_nm_netif_allowlist "$_netifs" kdump_install_nic_driver "$_netifs" kdump_install_resolv_conf + kdump_install_ovs_deps fi } @@ -1041,7 +1108,7 @@ remove_cpu_online_rule() { install() { declare -A unique_netifs ipv4_usage ipv6_usage - local arch + local arch has_ovs_bridge kdump_module_init kdump_install_conf diff --git a/SOURCES/kdump-lib-initramfs.sh b/SOURCES/kdump-lib-initramfs.sh index 6eaec93..41dc751 100755 --- a/SOURCES/kdump-lib-initramfs.sh +++ b/SOURCES/kdump-lib-initramfs.sh @@ -101,15 +101,8 @@ get_fs_type_from_target() get_mntpoint_from_target() { - local SOURCE TARGET - findmnt -k --pairs -o SOURCE,TARGET "$1" | while read line; do - eval "$line" - # omit sources that are bind mounts i.e. they contain a [/path/to/subpath]. - if [[ ! "$SOURCE" =~ \[ ]]; then - echo $TARGET - break - fi - done + # --source is applied to ensure non-bind mount is returned + get_mount_info TARGET source "$1" -f } is_ssh_dump_target() diff --git a/SOURCES/kdump-lib.sh b/SOURCES/kdump-lib.sh index 37ab75d..0ccabc0 100755 --- a/SOURCES/kdump-lib.sh +++ b/SOURCES/kdump-lib.sh @@ -15,7 +15,7 @@ is_uki() img="$1" [[ -f "$img" ]] || return - [[ "$(file -b --mime-type "$img")" == application/x-dosexec ]] || return + [[ "$(objdump -a "$img" 2> /dev/null)" =~ pei-(x86-64|aarch64-little) ]] || return objdump -h -j .linux "$img" &> /dev/null } @@ -213,7 +213,7 @@ get_bind_mount_source() _fsroot=${_src#${_src_nofsroot}[} _fsroot=${_fsroot%]} - _mnt=$(get_mntpoint_from_target "$_src_nofsroot") + _mnt=$(get_mount_info TARGET source "$_src_nofsroot" -f) # for btrfs, _fsroot will also contain the subvol value as well, strip it if [[ $_fstype == btrfs ]]; then diff --git a/SOURCES/kdump.sysconfig b/SOURCES/kdump.sysconfig index c1143f3..a185e41 100644 --- a/SOURCES/kdump.sysconfig +++ b/SOURCES/kdump.sysconfig @@ -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 # after processed by KDUMP_COMMANDLINE_REMOVE -KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 reset_devices novmcoredd cma=0 hugetlb_cma=0" +KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices novmcoredd cma=0 hugetlb_cma=0" # Any additional kexec arguments required. In most situations, this should # be left empty diff --git a/SOURCES/kdump.sysconfig.ppc64 b/SOURCES/kdump.sysconfig.ppc64 index 1b0cdc7..b7c4e79 100644 --- a/SOURCES/kdump.sysconfig.ppc64 +++ b/SOURCES/kdump.sysconfig.ppc64 @@ -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 # 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 nr_cpus=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" # Any additional kexec arguments required. In most situations, this should # be left empty diff --git a/SOURCES/kdump.sysconfig.ppc64le b/SOURCES/kdump.sysconfig.ppc64le index d951def..c1cee45 100644 --- a/SOURCES/kdump.sysconfig.ppc64le +++ b/SOURCES/kdump.sysconfig.ppc64le @@ -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 # 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 nr_cpus=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" # Any additional kexec arguments required. In most situations, this should # be left empty diff --git a/SOURCES/kdump.sysconfig.x86_64 b/SOURCES/kdump.sysconfig.x86_64 index 6a3ba6e..09d7350 100644 --- a/SOURCES/kdump.sysconfig.x86_64 +++ b/SOURCES/kdump.sysconfig.x86_64 @@ -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 # after processed by KDUMP_COMMANDLINE_REMOVE -KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off numa=off udev.children-max=2 panic=10 acpi_no_memhotplug transparent_hugepage=never nokaslr hest_disable novmcoredd cma=0 hugetlb_cma=0" +KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off numa=off udev.children-max=2 panic=10 acpi_no_memhotplug transparent_hugepage=never nokaslr hest_disable novmcoredd cma=0 hugetlb_cma=0 pcie_ports=compat" # Any additional kexec arguments required. In most situations, this should # be left empty diff --git a/SOURCES/kdumpctl b/SOURCES/kdumpctl index 503e44e..cb20708 100755 --- a/SOURCES/kdumpctl +++ b/SOURCES/kdumpctl @@ -5,7 +5,6 @@ KDUMP_KERNELVER="" KDUMP_KERNEL="" KDUMP_COMMANDLINE="" KEXEC_ARGS="" -KDUMP_LOG_PATH="/var/log" MKDUMPRD="/sbin/mkdumprd -f" MKFADUMPRD="/sbin/mkfadumprd" DRACUT_MODULES_FILE="/usr/lib/dracut/modules.txt" @@ -21,7 +20,7 @@ TARGET_INITRD="" DEFAULT_DUMP_MODE="kdump" image_time=0 -standard_kexec_args="-d -p" +standard_kexec_args="-p" # Some default values in case /etc/sysconfig/kdump doesn't include KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug" @@ -639,7 +638,7 @@ function load_kdump_kernel_key() # as the currently running kernel. load_kdump() { - local ret uki + local uki KEXEC_ARGS=$(prepare_kexec_args "${KEXEC_ARGS}") KDUMP_COMMANDLINE=$(prepare_cmdline "${KDUMP_COMMANDLINE}" "${KDUMP_COMMANDLINE_REMOVE}" "${KDUMP_COMMANDLINE_APPEND}") @@ -656,26 +655,12 @@ load_kdump() ddebug "$KEXEC $KEXEC_ARGS $standard_kexec_args --command-line=$KDUMP_COMMANDLINE --initrd=$TARGET_INITRD $KDUMP_KERNEL" - # The '12' represents an intermediate temporary file descriptor - # to store the standard error file descriptor '2', and later - # restore the error file descriptor with the file descriptor '12' - # and release it. - exec 12>&2 - 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}: ' - set -x - # shellcheck disable=SC2086 $KEXEC $KEXEC_ARGS $standard_kexec_args \ --command-line="$KDUMP_COMMANDLINE" \ --initrd="$TARGET_INITRD" "$KDUMP_KERNEL" - ret=$? - set +x - exec 2>&12 12>&- - - if [[ $ret == 0 ]]; then + if [[ $? == 0 ]]; then dinfo "kexec: loaded kdump kernel" return 0 else @@ -1658,6 +1643,7 @@ reset_crashkernel() _old_crashkernel=$(get_grub_kernel_boot_parameter "$_kernel" crashkernel) _old_fadump_val=$(get_grub_kernel_boot_parameter "$_kernel" fadump) + [[ "$_new_fadump_val" == off ]] && _new_fadump_val="" if [[ $_old_crashkernel != "$_new_crashkernel" || $_old_fadump_val != "$_new_fadump_val" ]]; then _update_kernel_cmdline "$_kernel" "$_new_crashkernel" "$_new_dump_mode" "$_new_fadump_val" if [[ $_reboot != yes ]]; then diff --git a/SOURCES/kdumpctl.8 b/SOURCES/kdumpctl.8 index 33c1115..29a6119 100644 --- a/SOURCES/kdumpctl.8 +++ b/SOURCES/kdumpctl.8 @@ -62,6 +62,10 @@ grubby's kernel-path=ALL and kernel-path=DEFAULT. ppc64le supports FADump and supports an additional [--fadump=[on|off|nocma]] parameter to toggle FADump on/off. +If the optional parameter [--reboot] is provided the system will automatically +reboot for changes to take effect. If no changes were made to the kernel +command line the reboot is omitted. + Note: The memory requirements for kdump varies heavily depending on the used hardware and system configuration. Thus the recommended crashkernel might not work for your specific setup. Please test if diff --git a/SOURCES/kexec-kdump-howto.txt b/SOURCES/kexec-kdump-howto.txt index 6741faf..c65d45a 100644 --- a/SOURCES/kexec-kdump-howto.txt +++ b/SOURCES/kexec-kdump-howto.txt @@ -1016,12 +1016,7 @@ Debugging Tips and the second kernel. In the first kernel, you can find the historical logs with the journalctl - command and check kdump service debugging information. In addition, the - 'kexec -d' debugging messages are also saved to /var/log/kdump.log in the - first kernel. For example: - - [root@ibm-z-109 ~]# ls -al /var/log/kdump.log - -rw-r--r--. 1 root root 63238 Oct 28 06:40 /var/log/kdump.log + command and check kdump service debugging information. If you want to get the debugging information of building kdump initramfs, you can enable the '--debug' option for the dracut_args in the /etc/kdump.conf, and diff --git a/SOURCES/kexec_file-add-kexec_file-flag-to-support-debug-prin.patch b/SOURCES/kexec_file-add-kexec_file-flag-to-support-debug-prin.patch new file mode 100644 index 0000000..7ded28a --- /dev/null +++ b/SOURCES/kexec_file-add-kexec_file-flag-to-support-debug-prin.patch @@ -0,0 +1,44 @@ +From 9d9cf8de8b2ad8273861a30476a46f34cd34871a Mon Sep 17 00:00:00 2001 +From: Baoquan He +Date: Tue, 14 Nov 2023 23:20:30 +0800 +Subject: [PATCH] kexec_file: add kexec_file flag to support debug printing +Content-type: text/plain + +This add KEXEC_FILE_DEBUG to kexec_file_flags so that it can be passed +to kernel when '-d' is added with kexec_file_load interface. With that +flag enabled, kernel can enable the debugging message printing. + +Signed-off-by: Baoquan He +Signed-off-by: Simon Horman +--- + kexec/kexec-syscall.h | 1 + + kexec/kexec.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h +index 2559bffb93da..73e52543e1b0 100644 +--- a/kexec/kexec-syscall.h ++++ b/kexec/kexec-syscall.h +@@ -119,6 +119,7 @@ static inline long kexec_file_load(int kernel_fd, int initrd_fd, + #define KEXEC_FILE_UNLOAD 0x00000001 + #define KEXEC_FILE_ON_CRASH 0x00000002 + #define KEXEC_FILE_NO_INITRAMFS 0x00000004 ++#define KEXEC_FILE_DEBUG 0x00000008 + + /* These values match the ELF architecture values. + * Unless there is a good reason that should continue to be the case. +diff --git a/kexec/kexec.c b/kexec/kexec.c +index 9d0ec46e5657..222f79e3112e 100644 +--- a/kexec/kexec.c ++++ b/kexec/kexec.c +@@ -1477,6 +1477,7 @@ int main(int argc, char *argv[]) + return 0; + case OPT_DEBUG: + kexec_debug = 1; ++ kexec_file_flags |= KEXEC_FILE_DEBUG; + break; + case OPT_NOIFDOWN: + skip_ifdown = 1; +-- +2.41.0 + diff --git a/SPECS/kexec-tools.spec b/SPECS/kexec-tools.spec index 9a7b31c..48a72a6 100644 --- a/SPECS/kexec-tools.spec +++ b/SPECS/kexec-tools.spec @@ -5,7 +5,7 @@ Name: kexec-tools Version: 2.0.27 -Release: 8%{?dist}.3 +Release: 16%{?dist}.1 License: GPLv2 Summary: The kexec/kdump userspace component @@ -114,6 +114,7 @@ Requires: systemd-udev%{?_isa} # Patches 601 onward are generic patches # Patch601: kexec-update-manpage-with-explicit-mention-of-clean-.patch +Patch602: kexec_file-add-kexec_file-flag-to-support-debug-prin.patch %description kexec-tools provides /sbin/kexec binary that facilitates a new @@ -130,6 +131,7 @@ tar -z -x -v -f %{SOURCE9} tar -z -x -v -f %{SOURCE19} %patch601 -p1 +%patch602 -p1 %ifarch ppc %define archdef ARCH=ppc @@ -408,16 +410,38 @@ fi %endif %changelog -* Wed Jul 24 2024 Tao Liu - 2.0.27-8.3 +* Wed Sep 18 2024 Tao Liu - 2.0.27-16.1 +- Rebuild with updated release + +* Tue Sep 10 2024 Tao Liu - 2.0.27-16 +- Revert "lib: Ensure we don't find bind mounts for device target" + +* Wed Aug 7 2024 Tao Liu - 2.0.27-15 +- Support setting up Open vSwitch (Ovs) Bridge network + +* Wed Jul 24 2024 Tao Liu - 2.0.27-14 - lib: Ensure we don't find bind mounts for device target - dracut: Disable ostree-prepare-root -* Thu Jul 4 2024 Tao Liu - 2.0.27-8.2 +* Tue Jul 16 2024 Tao Liu - 2.0.27-13 +- kdump-lib: Drop 'file' dependency in is_uki +- kdumpctl.8: Add description to reset-crashkernel --reboot +- kdumpctl: Fix misleading message and erratic reboot in reset_crashkernel +- kdumpctl: Drop default kexec '-d' option + +* Thu Jun 27 2024 Tao Liu - 2.0.27-12 +- ppc64le: replace kernel cmdline maxcpu=1 with nr_cpus=1 + +* Fri May 31 2024 Tao Liu - 2.0.27-11 +- sysconfig: add pcie_ports compat to KDUMP_COMMANDLINE_APPEND on x86_64 + +* Tue May 14 2024 Tao Liu - 2.0.27-10 +- mkdumprd: Fix makedumpfile parameter check. - Install the driver of physical device for a SR-IOV virtual device - Try to install PHY and MDIO bus drivers explicitly -* Wed Jun 19 2024 Tao Liu - 2.0.27-8.1 -- mkdumprd: Fix makedumpfile parameter check. +* Wed May 08 2024 Tao Liu - 2.0.27-9 +- kexec_file: add kexec_file flag to support debug printing * Tue Jan 30 2024 Tao Liu - 2.0.27-8 - dracut-module-setup: Skip initrd-cleanup and initrd-parse-etc in kdump