dracut-057-126.git20260813

- fix(dracut): rework timeout for devices added via --mount and --add-device
    - fix(base): escape die() message in emergency hook script
    - fix(base): replace eval with safe variable indirection in splitsep and export_n
    - refactor(cms): use zdev to simplify handling CMSDASD=... boot option
    - refactor(cms): use consolidated dasd config with zdev from s390-tools
    - fix(qemu): add missing bochs module explicitly

Resolves: RHEL-151848,RHEL-210940,RHEL-212601,RHEL-217597
This commit is contained in:
Pavel Valena 2026-08-13 16:31:39 +02:00
parent 3b2f885638
commit f085d0a35f
7 changed files with 595 additions and 1 deletions

168
0120.patch Normal file
View File

@ -0,0 +1,168 @@
From d9ea05a69bc4b1aa5396e3205338ccc6200a506c Mon Sep 17 00:00:00 2001
From: Antonio Alvarez Feijoo <antonio.feijoo@suse.com>
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: <key>+=" <values> ": <values> 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

43
0121.patch Normal file
View File

@ -0,0 +1,43 @@
From 804569a4bb90a440d777c045c5f4cc4aa844b193 Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
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 <noreply@anthropic.com>
(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

60
0122.patch Normal file
View File

@ -0,0 +1,60 @@
From 1a00697dfa5d58bc298fe77e48f2b586c0a0659e Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
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
}

200
0123.patch Normal file
View File

@ -0,0 +1,200 @@
From 1b9026ddbbfafa006bc3cef01fc99047b4002282 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
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 <maier@linux.ibm.com>
(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

83
0124.patch Normal file
View File

@ -0,0 +1,83 @@
From c5997ed914de814eb0a616165a9947affee616a3 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
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 <maier@linux.ibm.com>
(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/*"

26
0125.patch Normal file
View File

@ -0,0 +1,26 @@
From 869e8c5c3673b30d8899311aca273fe370bb2123 Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
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
}

View File

@ -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 <pvalena@redhat.com> - 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 <pvalena@redhat.com> - 057-118.git20260624
- feat(resume): add device used for resume
- fix(dracut): remove trailing null characters from SBATs when