diff --git a/0120.patch b/0120.patch new file mode 100644 index 0000000..41a375d --- /dev/null +++ b/0120.patch @@ -0,0 +1,168 @@ +From d9ea05a69bc4b1aa5396e3205338ccc6200a506c Mon Sep 17 00:00:00 2001 +From: Antonio Alvarez Feijoo +Date: Mon, 4 Nov 2024 13:31:13 +0100 +Subject: [PATCH] fix(dracut): rework timeout for devices added via --mount and + --add-device + +Currently, dracut adds a systemd dropin that sets an infinite timeout _only_ for +the underlying persistent devices of each host device that must be active in the +initrd. E.g.: + +``` +localhost:~ # dracut -f --stdlog 3 --install "/mnt" --mount "/dev/sda1 /mnt btrfs rw,relatime" +localhost:~ # lsinitrd | grep timeout.conf +-rw-r--r-- 2 root root 0 Oct 28 14:21 etc/systemd/system/dev-disk-by\x2duuid-0d1b24c2\x2df112\x2d48ef\x2d8442\x2d1001cffc92f0.device.d/timeout.conf +localhost:~ # ls -l /dev/disk/by-uuid/0d1b24c2-f112-48ef-8442-1001cffc92f0 +lrwxrwxrwx 1 root root 10 Oct 28 11:43 /dev/disk/by-uuid/0d1b24c2-f112-48ef-8442-1001cffc92f0 -> ../../sda1 +``` + +It can be verified in the emergency shell: + +``` +sh-5.2# systemctl show --property JobRunningTimeoutUSec /dev/disk/by-uuid/0d1b24c2-f112-48ef-8442-1001cffc92f0 +JobRunningTimeoutUSec=infinity +sh-5.2# systemctl show --property JobRunningTimeoutUSec /dev/sda1 +JobRunningTimeoutUSec=1min 30s +``` + +This can cause a problem if a user application expects to mount /dev/sda1 in the +initrd (that's why it was explicitly added `--mount "/dev/sda1 ..."`), but for +some reason the link is not created within 1min 30s. + +(cherry picked from commit c79fc8fd0d4b9aaa8e753296cbafdb1f82781d08) + +Resolves: RHEL-212601 +--- + dracut-functions.sh | 8 ++++---- + dracut.sh | 20 +++++++++++++++----- + modules.d/99base/module-setup.sh | 18 +++++++++++++++++- + 3 files changed, 36 insertions(+), 10 deletions(-) + +diff --git a/dracut-functions.sh b/dracut-functions.sh +index 0cf605dcd..894c132cd 100755 +--- a/dracut-functions.sh ++++ b/dracut-functions.sh +@@ -593,9 +593,9 @@ for_each_host_dev_and_slaves_all() { + local _dev + local _ret=1 + +- [[ "${host_devs[*]}" ]] || return 2 ++ [[ "${host_devs[*]}" ]] || [[ "${user_devs[*]}" ]] || return 2 + +- for _dev in "${host_devs[@]}"; do ++ for _dev in "${host_devs[@]}" "${user_devs[@]}"; do + [[ -b $_dev ]] || continue + if check_block_and_slaves_all "$_func" "$(get_maj_min "$_dev")"; then + _ret=0 +@@ -608,9 +608,9 @@ for_each_host_dev_and_slaves() { + local _func="$1" + local _dev + +- [[ "${host_devs[*]}" ]] || return 2 ++ [[ "${host_devs[*]}" ]] || [[ "${user_devs[*]}" ]] || return 2 + +- for _dev in "${host_devs[@]}"; do ++ for _dev in "${host_devs[@]}" "${user_devs[@]}"; do + [[ -b $_dev ]] || continue + check_block_and_slaves "$_func" "$(get_maj_min "$_dev")" && return 0 + done +diff --git a/dracut.sh b/dracut.sh +index 4b6410c0b..fb967bbb2 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -330,6 +330,16 @@ read_arg() { + fi + } + ++# Fills up user_devs stack variable and makes sure there are no duplicates ++push_user_devs() { ++ local _dev ++ for _dev in "$@"; do ++ [[ -z $_dev ]] && continue ++ [[ " ${user_devs[*]} " == *" $_dev "* ]] && return ++ user_devs+=("$_dev") ++ done ++} ++ + check_conf_file() { + if grep -H -e '^[^#]*[+]=\("[^ ]\|.*[^ ]"\)' "$@"; then + printf '\ndracut: WARNING: +=" ": should have surrounding white spaces!\n' >&2 +@@ -1576,7 +1586,7 @@ for line in "${fstab_lines[@]}"; do + push_host_devs "$mp" + done + fi +- push_host_devs "$dev" ++ push_user_devs "$dev" + host_fs_types["$dev"]="$3" + done + +@@ -1588,12 +1598,12 @@ for f in $add_fstab; do + done + + for dev in $add_device; do +- push_host_devs "$dev" ++ push_user_devs "$dev" + done + + if ((${#add_device_l[@]})); then + add_device+=" ${add_device_l[*]} " +- push_host_devs "${add_device_l[@]}" ++ push_user_devs "${add_device_l[@]}" + fi + + if [[ $hostonly ]] && [[ $hostonly_default_device != "no" ]]; then +@@ -1715,7 +1725,7 @@ _get_fs_type() { + return 1 + } + +-for dev in "${host_devs[@]}"; do ++for dev in "${host_devs[@]}" "${user_devs[@]}"; do + _get_fs_type "$dev" + check_block_and_slaves_all _get_fs_type "$(get_maj_min "$dev")" + done +@@ -1943,7 +1953,7 @@ export initdir dracutbasedir \ + omit_drivers mdadmconf lvmconf root_devs \ + use_fstab fstab_lines libdirs fscks nofscks ro_mnt \ + stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \ +- debug host_fs_types host_devs swap_devs sshkey add_fstab \ ++ debug host_fs_types host_devs user_devs swap_devs sshkey add_fstab \ + DRACUT_VERSION udevdir udevconfdir udevrulesdir udevrulesconfdir \ + prefix filesystems drivers dbus dbusconfdir dbusinterfaces \ + dbusinterfacesconfdir dbusservices dbusservicesconfdir dbussession \ +diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh +index 3fa2659aa..74971cc50 100755 +--- a/modules.d/99base/module-setup.sh ++++ b/modules.d/99base/module-setup.sh +@@ -104,7 +104,7 @@ install() { + + ## save host_devs which we need bring up + if [[ $hostonly_cmdline == "yes" ]]; then +- if [[ -n ${host_devs[*]} ]]; then ++ if [[ -n ${host_devs[*]} ]] || [[ -n ${user_devs[*]} ]]; then + dracut_need_initqueue + fi + if [[ -f $initdir/lib/dracut/need-initqueue ]] || ! dracut_module_included "systemd"; then +@@ -137,6 +137,22 @@ install() { + *) ;; + esac + done ++ ++ for _dev in "${user_devs[@]}"; do ++ ++ case "$_dev" in ++ /dev/?*) wait_for_dev "$_dev" 0 ;; ++ *) ;; ++ esac ++ ++ _pdev=$(get_persistent_dev "$_dev") ++ [[ $_dev == "$_pdev" ]] && continue ++ ++ case "$_pdev" in ++ /dev/?*) wait_for_dev "$_pdev" 0 ;; ++ *) ;; ++ esac ++ done + ) + fi + fi + diff --git a/0121.patch b/0121.patch new file mode 100644 index 0000000..6cd1d4b --- /dev/null +++ b/0121.patch @@ -0,0 +1,43 @@ +From 804569a4bb90a440d777c045c5f4cc4aa844b193 Mon Sep 17 00:00:00 2001 +From: Pavel Valena +Date: Tue, 28 Jul 2026 05:10:09 +0200 +Subject: [PATCH] fix(base): escape die() message in emergency hook script +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +die() appends its error message to $hookdir/emergency/01-die.sh using +echo "warn dracut: FATAL: \"$*\"", which is later sourced by +emergency_shell(). When die() is called with DHCP-controlled data — +specifically $netroot derived from the DHCP ROOT_PATH option via +netroot.sh's handler-resolution failure path — a command-substitution +sequence such as $(cmd) embedded in that data executes as root when +dracut sources the emergency hook directory. + +Replace `echo` with `printf '%q'` to shell-escape the message before +writing it into the hook script, preventing command injection via +DHCP-controlled values that reach die() through error paths. + +Co-Authored-By: Claude Opus 4.6 + +(cherry picked from commit 626ec6752ec5eb6902c2a2424f58b8873b34c7a0) + +Resolves: RHEL-210940 +--- + modules.d/99base/dracut-lib.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index 43b023e14..b1ea95255 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -451,7 +451,7 @@ die() { + } > /dev/kmsg + + { +- echo "warn dracut: FATAL: \"$*\"" ++ printf 'warn dracut: FATAL: %q\n' "$*" + echo "warn dracut: Refusing to continue" + } >> $hookdir/emergency/01-die.sh + [ -d /run/initramfs ] || mkdir -p -- /run/initramfs + diff --git a/0122.patch b/0122.patch new file mode 100644 index 0000000..e5a2303 --- /dev/null +++ b/0122.patch @@ -0,0 +1,60 @@ +From 1a00697dfa5d58bc298fe77e48f2b586c0a0659e Mon Sep 17 00:00:00 2001 +From: Pavel Valena +Date: Wed, 29 Apr 2026 05:41:21 +0200 +Subject: [PATCH] fix(base): replace eval with safe variable indirection in + splitsep and export_n + +splitsep: use local nameref to avoid eval injection via single-quote breakout. +export_n: use ${!var} and printf -v to avoid eval injection via double-quote breakout. + +(cherry picked from commit efa38e72f2742456dc93060fb1ac28d98217ac21) + +Related: RHEL-210940 +--- + modules.d/99base/dracut-lib.sh | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index b1ea95255..1c753ba16 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -374,12 +374,18 @@ splitsep() { + + while [ -n "$str" -a "$#" -gt 1 ]; do + tmp="${str%%$sep*}" +- eval "$1='${tmp}'" ++ local -n _splitsep_ref="$1" ++ _splitsep_ref="$tmp" ++ unset -n _splitsep_ref + str="${str#"$tmp"}" + str="${str#$sep}" + shift + done +- [ -n "$str" -a -n "$1" ] && eval "$1='$str'" ++ if [ -n "$str" -a -n "$1" ]; then ++ local -n _splitsep_ref="$1" ++ _splitsep_ref="$str" ++ unset -n _splitsep_ref ++ fi + debug_on + return 0 + } +@@ -1016,14 +1022,13 @@ emergency_shell() { + } + + # Retain the values of these variables but ensure that they are unexported +-# This is a POSIX-compliant equivalent of bash's "export -n" + export_n() { + local var + local val + for var in "$@"; do +- eval val=\$$var +- unset $var +- [ -n "$val" ] && eval "$var=\"$val\"" ++ val="${!var}" ++ unset "$var" ++ [ -n "$val" ] && printf -v "$var" '%s' "$val" + done + } + + diff --git a/0123.patch b/0123.patch new file mode 100644 index 0000000..6b7f04c --- /dev/null +++ b/0123.patch @@ -0,0 +1,200 @@ +From 1b9026ddbbfafa006bc3cef01fc99047b4002282 Mon Sep 17 00:00:00 2001 +From: Steffen Maier +Date: Wed, 24 May 2023 19:02:09 +0200 +Subject: [PATCH] refactor(cms): use zdev to simplify handling CMSDASD=... boot + option + +This is just internal to initrd, so we can already migrate the code to +consolidated dasd device configuration with zdev +https://github.com/ibm-s390-linux/s390-tools/tree/master/zdev/. +The code change is transparent to users after dracut switch root. + +Signed-off-by: Steffen Maier + +(cherry picked from commit 6c55657e5278b3ab16dc20af1df315d62e9d690d) + +Resolves: RHEL-151848 +--- + modules.d/80cms/cmssetup.sh | 108 +++++++--------------------------------- + modules.d/80cms/module-setup.sh | 3 +- + 2 files changed, 21 insertions(+), 90 deletions(-) + +diff --git a/modules.d/80cms/cmssetup.sh b/modules.d/80cms/cmssetup.sh +index 68e45632f..23e81ca98 100755 +--- a/modules.d/80cms/cmssetup.sh ++++ b/modules.d/80cms/cmssetup.sh +@@ -2,34 +2,16 @@ + + type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh + +-function sysecho() { +- file="$1" +- shift +- local i=1 +- while [ $i -le 10 ]; do +- if [ ! -f "$file" ]; then +- sleep 1 +- i=$((i + 1)) +- else +- break +- fi +- done +- local status +- read -r status < "$file" +- if [[ $status != "$*" ]]; then +- [ -f "$file" ] && echo "$*" > "$file" +- fi +-} +- + function dasd_settle() { +- local dasd_status=/sys/bus/ccw/devices/$1/status ++ local dasd_status ++ dasd_status=$(lszdev dasd "$1" --columns ATTRPATH:status --no-headings --active) + if [ ! -f "$dasd_status" ]; then + return 1 + fi + local i=1 + while [ $i -le 60 ]; do + local status +- read -r status < "$dasd_status" ++ status=$(lszdev dasd "$1" --columns ATTR:status --no-headings --active) + case $status in + online | unformatted) + return 0 +@@ -43,77 +25,23 @@ function dasd_settle() { + return 1 + } + +-function dasd_settle_all() { +- for dasdccw in $(while read -r line || [ -n "$line" ]; do echo "${line%%(*}"; done < /proc/dasd/devices); do +- if ! dasd_settle "$dasdccw"; then +- echo $"Could not access DASD $dasdccw in time" +- return 1 +- fi +- done +- return 0 +-} +- +-# prints a canonocalized device bus ID for a given devno of any format +-function canonicalize_devno() { +- case ${#1} in +- 3) echo "0.0.0${1}" ;; +- 4) echo "0.0.${1}" ;; +- *) echo "${1}" ;; +- esac +- return 0 +-} +- + # read file from CMS and write it to /tmp + function readcmsfile() { # $1=dasdport $2=filename + local dev +- local numcpus + local devname + local ret=0 + if [ $# -ne 2 ]; then return; fi +- # precondition: udevd created dasda block device node +- if ! dasd_cio_free -d "$1"; then +- echo $"DASD $1 could not be cleared from device blacklist" +- return 1 +- fi +- +- modprobe dasd_mod dasd="$CMSDASD" +- modprobe dasd_eckd_mod +- udevadm settle +- +- # precondition: dasd_eckd_mod driver incl. dependencies loaded, +- # dasd_mod must be loaded without setting any DASD online +- dev=$(canonicalize_devno "$1") +- numcpus=$( +- while read -r line || [ -n "$line" ]; do +- if strstr "$line" "# processors"; then +- echo "${line##*:}" +- break +- fi +- done < /proc/cpuinfo +- ) ++ # precondition: udevd created block device node + +- if [ "${numcpus}" -eq 1 ]; then +- echo 1 > /sys/bus/ccw/devices/"$dev"/online +- else +- if ! sysecho /sys/bus/ccw/devices/"$dev"/online 1; then +- echo $"DASD $dev could not be set online" +- return 1 +- fi +- udevadm settle +- if ! dasd_settle "$dev"; then +- echo $"Could not access DASD $dev in time" +- return 1 +- fi ++ dev="$1" ++ chzdev --enable --active --yes --quiet --no-root-update --force dasd "$dev" || return 1 ++ if ! dasd_settle "$dev"; then ++ echo $"Could not access DASD $dev in time" ++ return 1 + fi + +- udevadm settle +- +- devname=$( +- cd /sys/bus/ccw/devices/"$dev"/block || exit +- set -- * +- [ -b /dev/"$1" ] && echo "$1" +- ) +- devname=${devname:-dasda} ++ devname=$(lszdev dasd "$dev" --columns NAMES --no-headings --active) ++ [[ -n $devname ]] || return 1 + + [[ -d /mnt ]] || mkdir -p /mnt + if cmsfs-fuse --to=UTF-8 -a /dev/"$devname" /mnt; then +@@ -125,20 +53,22 @@ function readcmsfile() { # $1=dasdport $2=filename + ret=1 + fi + +- if ! sysecho /sys/bus/ccw/devices/"$dev"/online 0; then +- echo $"DASD $dev could not be set offline again" +- #return 1 +- fi +- udevadm settle ++ chzdev --disable --active --yes --quiet --no-root-update --force dasd "$dev" + + # unbind all dasds to unload the dasd modules for a clean start + ( + cd /sys/bus/ccw/drivers/dasd-eckd || exit +- for i in *.*; do echo "$i" > unbind; done ++ for i in *.*; do echo "$i" > unbind 2> /dev/null; done ++ ) ++ ( ++ cd /sys/bus/ccw/drivers/dasd-fba || exit ++ for i in *.*; do echo "$i" > unbind 2> /dev/null; done + ) + udevadm settle + modprobe -r dasd_eckd_mod + udevadm settle ++ modprobe -r dasd_fba_mod ++ udevadm settle + modprobe -r dasd_diag_mod + udevadm settle + modprobe -r dasd_mod +diff --git a/modules.d/80cms/module-setup.sh b/modules.d/80cms/module-setup.sh +index 2b280e0f3..4872734b1 100755 +--- a/modules.d/80cms/module-setup.sh ++++ b/modules.d/80cms/module-setup.sh +@@ -4,6 +4,7 @@ + check() { + arch=${DRACUT_ARCH:-$(uname -m)} + [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1 ++ require_binaries chzdev lszdev || return 1 + return 255 + } + +@@ -28,7 +29,7 @@ install() { + # shellcheck disable=SC2046 + inst_multiple /etc/cmsfs-fuse/filetypes.conf /etc/udev/rules.d/99-fuse.rules /etc/fuse.conf \ + cmsfs-fuse fusermount bash insmod rmmod cat normalize_dasd_arg sed \ +- $(rpm -ql s390utils-base) awk getopt ++ $(rpm -ql s390utils-base) awk getopt chzdev lszdev + + inst_libdir_file "gconv/*" + #inst /usr/lib/locale/locale-archive + diff --git a/0124.patch b/0124.patch new file mode 100644 index 0000000..643f9ad --- /dev/null +++ b/0124.patch @@ -0,0 +1,83 @@ +From c5997ed914de814eb0a616165a9947affee616a3 Mon Sep 17 00:00:00 2001 +From: Steffen Maier +Date: Wed, 24 May 2023 19:04:48 +0200 +Subject: [PATCH] refactor(cms): use consolidated dasd config with zdev from + s390-tools + +Depends on https://github.com/ibm-s390-linux/s390-tools commit +9b2fb1d4d2e2 ("zdev: add helper to convert from dasd_mod.dasd to zdev +config"). + +This is just internal to initrd, so it's possible to migrate the code to +consolidated dasd device configuration with zdev +https://github.com/ibm-s390-linux/s390-tools/tree/master/zdev/. +The code change is transparent to users after dracut switch root. + +The generated persistent config of chzdev are pure udev rules so it has no +dependency on other dracut modules such as zdev, dasd, or dasd_mod. +Instead now install the corresponding kernel device drivers here directly. + +Signed-off-by: Steffen Maier + +(cherry picked from commit 168c0c667d0fb14a8565e999c367494c85c7262c) + +Resolves: RHEL-151848 +--- + modules.d/80cms/cmssetup.sh | 6 +++--- + modules.d/80cms/module-setup.sh | 6 +++--- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/modules.d/80cms/cmssetup.sh b/modules.d/80cms/cmssetup.sh +index 23e81ca98..b80ce23ab 100755 +--- a/modules.d/80cms/cmssetup.sh ++++ b/modules.d/80cms/cmssetup.sh +@@ -1,6 +1,7 @@ + #!/bin/bash + + type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh ++type zdev_parse_dasd_list > /dev/null 2>&1 || . /lib/s390-tools/zdev-from-dasd_mod.dasd + + function dasd_settle() { + local dasd_status +@@ -112,9 +113,8 @@ processcmsfile() { + fi + + if [[ $DASD ]] && [[ $DASD != "none" ]]; then +- echo "$DASD" | normalize_dasd_arg > /etc/dasd.conf +- echo "options dasd_mod dasd=$DASD" > /etc/modprobe.d/dasd_mod.conf +- dasd_cio_free ++ echo "$DASD" | zdev_parse_dasd_list globals 2>&1 | vinfo ++ echo "$DASD" | zdev_parse_dasd_list ranges 2>&1 | vinfo + fi + + unset _do_zfcp +diff --git a/modules.d/80cms/module-setup.sh b/modules.d/80cms/module-setup.sh +index 4872734b1..622d397e9 100755 +--- a/modules.d/80cms/module-setup.sh ++++ b/modules.d/80cms/module-setup.sh +@@ -12,13 +12,13 @@ check() { + depends() { + arch=${DRACUT_ARCH:-$(uname -m)} + [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1 +- echo znet zfcp dasd dasd_mod bash ++ echo znet zfcp bash + return 0 + } + + # called by dracut + installkernel() { +- instmods zfcp ++ instmods zfcp dasd_mod dasd_eckd_mod dasd_fba_mod dasd_diag_mod + } + + # called by dracut +@@ -28,7 +28,7 @@ install() { + inst_script "$moddir/cmsifup.sh" /sbin/cmsifup + # shellcheck disable=SC2046 + inst_multiple /etc/cmsfs-fuse/filetypes.conf /etc/udev/rules.d/99-fuse.rules /etc/fuse.conf \ +- cmsfs-fuse fusermount bash insmod rmmod cat normalize_dasd_arg sed \ ++ cmsfs-fuse fusermount bash insmod rmmod cat /lib/s390-tools/zdev-from-dasd_mod.dasd sed \ + $(rpm -ql s390utils-base) awk getopt chzdev lszdev + + inst_libdir_file "gconv/*" + diff --git a/0125.patch b/0125.patch new file mode 100644 index 0000000..a87ac84 --- /dev/null +++ b/0125.patch @@ -0,0 +1,26 @@ +From 869e8c5c3673b30d8899311aca273fe370bb2123 Mon Sep 17 00:00:00 2001 +From: Pavel Valena +Date: Wed, 12 Aug 2026 22:55:18 +0200 +Subject: [PATCH] fix(qemu): add missing bochs module explicitly + +As it is needed to display console properly, and doesn't get detected in some cases. + +(cherry picked from commit 6328318f17933798a4a1a4e3b974b27070a470ad) + +Resolves: RHEL-217597 +--- + modules.d/90qemu/module-setup.sh | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/modules.d/90qemu/module-setup.sh b/modules.d/90qemu/module-setup.sh +index 01bc0c3de..a873fca5a 100755 +--- a/modules.d/90qemu/module-setup.sh ++++ b/modules.d/90qemu/module-setup.sh +@@ -19,4 +19,7 @@ installkernel() { + virtio_scsi virtio_console virtio_rng virtio_mem \ + spapr-vscsi \ + qemu_fw_cfg ++ ++ # needed for displaying console properly ++ hostonly='' instmods bochs + } diff --git a/dracut.spec b/dracut.spec index 84b6827..8bb6a63 100644 --- a/dracut.spec +++ b/dracut.spec @@ -5,7 +5,7 @@ # strip the automatically generated dep here and instead co-own the # directory. %global __requires_exclude pkg-config -%define dist_free_release 118.git20260624 +%define dist_free_release 126.git20260813 Name: dracut Version: 057 @@ -142,6 +142,12 @@ Patch114: 0114.patch Patch115: 0115.patch Patch116: 0116.patch Patch117: 0117.patch +Patch120: 0120.patch +Patch121: 0121.patch +Patch122: 0122.patch +Patch123: 0123.patch +Patch124: 0124.patch +Patch125: 0125.patch Source1: https://www.gnu.org/licenses/lgpl-2.1.txt @@ -598,6 +604,14 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/ %{_prefix}/lib/kernel/install.d/51-dracut-rescue.install %changelog +* Thu Aug 13 2026 Pavel Valena - 057-126.git20260813 +- fix(dracut): rework timeout for devices added via --mount and +- fix(base): escape die() message in emergency hook script +- fix(base): replace eval with safe variable indirection in +- refactor(cms): use zdev to simplify handling CMSDASD=... boot +- refactor(cms): use consolidated dasd config with zdev from +- fix(qemu): add missing bochs module explicitly + * Thu Jun 25 2026 Pavel Valena - 057-118.git20260624 - feat(resume): add device used for resume - fix(dracut): remove trailing null characters from SBATs when