Rebase to dracut-102, and additional fixes.

From-source-git-commit: 56bf1917de004cd3f9032a68a6cd09d5bd972b04

Additional fixes:

 - support for erofs in squash modules
 - always include the resume module
 - include systemd config files from /usr/lib/systemd
 - only return block devices from get_persistent_dev
 - allow for \ in get_maj_min file path
 - install blk modules using symbol blk_alloc_disk

Resolves: RHEL-32237,RHEL-32506,RHEL-43460,RHEL-47145,RHEL-49744,RHEL-53350
This commit is contained in:
Pavel Valena 2024-07-22 19:47:47 +02:00
parent 7dcc0ffb01
commit 52fb8f6eda
45 changed files with 2009 additions and 1886 deletions

View File

@ -1,7 +1,7 @@
From 0b65ac224d831cc96da940cce510523c7276a5ec Mon Sep 17 00:00:00 2001 From 3bcb0a9f06bac7fa62dc7241860deb8b671f17cd Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com> From: Pavel Valena <pvalena@redhat.com>
Date: Tue, 25 Apr 2023 14:56:59 +0200 Date: Tue, 25 Apr 2023 14:56:59 +0200
Subject: [PATCH 22/23] feat(hwdb): add hwdb module to install hwdb.bin on Subject: [PATCH 01/24] feat(hwdb): add hwdb module to install hwdb.bin on
demand demand
Module to install hwdb.bin. Further extensions might make only selected Module to install hwdb.bin. Further extensions might make only selected

View File

@ -1,7 +1,7 @@
From 9df3cb58a19f38157a615c311356cfd6ae55d2d7 Mon Sep 17 00:00:00 2001 From d14d724620fe4810930d1c2f07d10fa6b8bc9557 Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com> From: Pavel Valena <pvalena@redhat.com>
Date: Sun, 23 Jul 2023 19:44:17 +0200 Date: Sun, 23 Jul 2023 19:44:17 +0200
Subject: [PATCH 23/23] fix(rngd): install system service file Subject: [PATCH 02/24] fix(rngd): install system service file
as there's no reason to keep a copy; there shouldn't be any modifications. as there's no reason to keep a copy; there shouldn't be any modifications.

View File

@ -1,198 +0,0 @@
From 38412977daad049b12273966300d07211674834e 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 03/23] 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>
---
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 68e45632..23e81ca9 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 2b280e0f..4872734b 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
--
2.42.0

View File

@ -0,0 +1,238 @@
From 6fa596ca039300e5f4bb3cca14768976efe95eac Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
Date: Wed, 12 Jun 2024 06:30:42 +0200
Subject: [PATCH 03/24] revert: "fix(install.d): correctly install pre-genned
image and die if no args"
revert: "fix(install.d): simplify and use what kernel-install gives us"
This reverts commits:
d40155385d060f8d8608fa8a4931e2e42ddc3a8f
8388ad149c698c951089606352fdb0cdcaaf40c9
https://github.com/dracut-ng/dracut-ng/issues/334
This is temporary, until the `20-grub.install` will be able to handle initrd
from kernel staging area.
---
install.d/50-dracut.install | 152 ++++++++++++++++++-----------
install.d/51-dracut-rescue.install | 22 +----
2 files changed, 97 insertions(+), 77 deletions(-)
diff --git a/install.d/50-dracut.install b/install.d/50-dracut.install
index 14f87721..441414ac 100755
--- a/install.d/50-dracut.install
+++ b/install.d/50-dracut.install
@@ -1,13 +1,13 @@
#!/bin/bash
-COMMAND="${1:?}"
-KERNEL_VERSION="${2:?}"
-#shellcheck disable=SC2034
+COMMAND="$1"
+KERNEL_VERSION="$2"
BOOT_DIR_ABS="$3"
KERNEL_IMAGE="$4"
-# If the initrd was provided on the kernel command line, we shouldn't generate our own.
-if [[ "$COMMAND" != "add" || "$#" -gt 4 ]]; then
+# If KERNEL_INSTALL_MACHINE_ID is defined but empty, BOOT_DIR_ABS is a fake directory.
+# So, let's skip to create initrd.
+if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then
exit 0
fi
@@ -16,64 +16,102 @@ if [[ "$KERNEL_INSTALL_IMAGE_TYPE" = "uki" ]]; then
exit 0
fi
-if [[ "${KERNEL_INSTALL_INITRD_GENERATOR:-dracut}" = "dracut" ]]; then
- # We are the initrd generator
- IMAGE="initrd"
- UEFI_OPTS="--no-uefi"
+# Mismatching the install layout and the --uefi/--no-uefi opts just creates a mess.
+if [[ $KERNEL_INSTALL_LAYOUT == "uki" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
+ BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
+ if [[ -z $KERNEL_INSTALL_UKI_GENERATOR || $KERNEL_INSTALL_UKI_GENERATOR == "dracut" ]]; then
+ # No uki generator preference set or we have been chosen
+ IMAGE="uki.efi"
+ UEFI_OPTS="--uefi"
+ elif [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then
+ # We aren't the uki generator, but we have been requested to make the initrd
+ IMAGE="initrd"
+ UEFI_OPTS="--no-uefi"
+ else
+ exit 0
+ fi
+elif [[ $KERNEL_INSTALL_LAYOUT == "bls" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
+ BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
+ if [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then
+ IMAGE="initrd"
+ UEFI_OPTS="--no-uefi"
+ else
+ exit 0
+ fi
else
- exit 0
+ # No layout information, use users --uefi/--no-uefi preference
+ UEFI_OPTS=""
+ if [[ -d $BOOT_DIR_ABS ]]; then
+ IMAGE="initrd"
+ else
+ BOOT_DIR_ABS="/boot"
+ IMAGE="initramfs-${KERNEL_VERSION}.img"
+ fi
fi
-if [[ "$KERNEL_INSTALL_UKI_GENERATOR" = "dracut" ]]; then
- # We are chosen to generate the UKI as well as initrd
- IMAGE="uki.efi"
- UEFI_OPTS="--uefi"
-fi
+ret=0
-if [[ -f ${KERNEL_IMAGE%/*}/$IMAGE ]]; then
- # we found an initrd or uki.efi at the same place as the kernel
- # use this and don't generate a new one
- [[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo \
- "There is an $IMAGE image at the same place as the kernel, skipping generating a new one"
- cp --reflink=auto "${KERNEL_IMAGE%/*}/$IMAGE" "$KERNEL_INSTALL_STAGING_AREA/$IMAGE" \
- && chown root:root "$KERNEL_INSTALL_STAGING_AREA/$IMAGE" \
- && chmod 0600 "$KERNEL_INSTALL_STAGING_AREA/$IMAGE" \
- && exit 0
-fi
+case "$COMMAND" in
+ add)
+ if [[ $IMAGE == "uki.efi" ]]; then
+ IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/uki.efi
+ else
+ IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/initrd
+ fi
+ if [[ -f ${IMAGE_PREGENERATED} ]]; then
+ # we found an initrd or uki.efi at the same place as the kernel
+ # use this and don't generate a new one
+ [[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo \
+ "There is an ${IMAGE} image at the same place as the kernel, skipping generating a new one"
+ cp --reflink=auto "$IMAGE_PREGENERATED" "$BOOT_DIR_ABS/$IMAGE" \
+ && chown root:root "$BOOT_DIR_ABS/$IMAGE" \
+ && chmod 0600 "$BOOT_DIR_ABS/$IMAGE" \
+ && exit 0
+ fi
-if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
- if [ -f "$KERNEL_INSTALL_CONF_ROOT/cmdline" ]; then
- read -r -d '' -a BOOT_OPTIONS < "$KERNEL_INSTALL_CONF_ROOT/cmdline"
- fi
-elif [[ -f /etc/kernel/cmdline ]]; then
- read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
-elif [[ -f /usr/lib/kernel/cmdline ]]; then
- read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
-else
- declare -a BOOT_OPTIONS
+ if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
+ if [ -f "$KERNEL_INSTALL_CONF_ROOT/cmdline" ]; then
+ read -r -d '' -a BOOT_OPTIONS < "$KERNEL_INSTALL_CONF_ROOT/cmdline"
+ fi
+ elif [[ -f /etc/kernel/cmdline ]]; then
+ read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
+ elif [[ -f /usr/lib/kernel/cmdline ]]; then
+ read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
+ else
+ declare -a BOOT_OPTIONS
- read -r -d '' -a line < /proc/cmdline
- for i in "${line[@]}"; do
- [[ ${i#initrd=*} != "$i" ]] && continue
- BOOT_OPTIONS+=("$i")
- done
-fi
+ read -r -d '' -a line < /proc/cmdline
+ for i in "${line[@]}"; do
+ [[ ${i#initrd=*} != "$i" ]] && continue
+ BOOT_OPTIONS+=("$i")
+ done
+ fi
-unset noimageifnotneeded
+ unset noimageifnotneeded
-for ((i = 0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
- # shellcheck disable=SC1001
- if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
- noimageifnotneeded="yes"
- break
- fi
-done
+ for ((i = 0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
+ # shellcheck disable=SC1001
+ if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
+ noimageifnotneeded="yes"
+ break
+ fi
+ done
+
+ # shellcheck disable=SC2046
+ dracut -f \
+ ${noimageifnotneeded:+--noimageifnotneeded} \
+ $([[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo --verbose) \
+ $([[ -n $KERNEL_IMAGE ]] && echo --kernel-image "$KERNEL_IMAGE") \
+ "$UEFI_OPTS" \
+ --kver "$KERNEL_VERSION" \
+ "$BOOT_DIR_ABS/$IMAGE"
+ ret=$?
+ ;;
+
+ remove)
+ rm -f -- "$BOOT_DIR_ABS/$IMAGE"
+ ret=$?
+ ;;
+esac
-# shellcheck disable=SC2046
-dracut -f \
- ${noimageifnotneeded:+--noimageifnotneeded} \
- $([[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo --verbose) \
- $([[ -n $KERNEL_IMAGE ]] && echo --kernel-image "$KERNEL_IMAGE") \
- "$UEFI_OPTS" \
- --kver "$KERNEL_VERSION" \
- "$KERNEL_INSTALL_STAGING_AREA/$IMAGE" || exit 1
+exit $ret
diff --git a/install.d/51-dracut-rescue.install b/install.d/51-dracut-rescue.install
index 25f75557..aa0ccdc5 100755
--- a/install.d/51-dracut-rescue.install
+++ b/install.d/51-dracut-rescue.install
@@ -2,29 +2,11 @@
export LANG=C
-COMMAND="${1:?}"
-KERNEL_VERSION="${2:?}"
+COMMAND="$1"
+KERNEL_VERSION="$2"
BOOT_DIR_ABS="${3%/*}/0-rescue"
KERNEL_IMAGE="$4"
-# If the initrd was provided on the kernel command line, we shouldn't generate our own.
-if [[ "$COMMAND" = "add" && "$#" -gt 4 ]]; then
- exit 0
-fi
-
-# Do not attempt to create initramfs if the supplied image is already a UKI
-if [[ "$KERNEL_INSTALL_IMAGE_TYPE" = "uki" ]]; then
- exit 0
-fi
-
-if [[ "$KERNEL_INSTALL_UKI_GENERATOR" = "dracut" ]]; then
- # Rescue images currently not compatible with UKIs
- exit 0
-elif [[ "${KERNEL_INSTALL_INITRD_GENERATOR:-dracut}" != "dracut" ]]; then
- # We are not the initrd generator
- exit 0
-fi
-
dropindirs_sort() {
suffix=$1
shift
--
2.42.0

View File

@ -1,7 +1,7 @@
From f86d5ff72868e9df7d255e3c5e938a9e339f09fa Mon Sep 17 00:00:00 2001 From c6d18c3c71597e78572378fc4dde391f1845b8bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Tue, 18 Jan 2022 18:08:42 +0100 Date: Tue, 18 Jan 2022 18:08:42 +0100
Subject: [PATCH 01/10] feat(kernel-install): do nothing when Subject: [PATCH 04/24] feat(kernel-install): do nothing when
$KERNEL_INSTALL_INITRD_GENERATOR says so $KERNEL_INSTALL_INITRD_GENERATOR says so
dracut may be installed without being actually used. This is very common in dracut may be installed without being actually used. This is very common in

View File

@ -1,77 +0,0 @@
From 3a9b9a5cf507a868f8b3ec33cf686b3a552286c2 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Sat, 28 Jan 2023 01:58:29 +0100
Subject: [PATCH 04/23] refactor(cms): use consolidated zfcp config with zdev
from s390-tools
This is just internal to initrd, so we can already migrate the code to
consolidated zfcp 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, or zfcp.
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/80cms/cmssetup.sh | 21 ++++++++++++++++-----
modules.d/80cms/module-setup.sh | 2 +-
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/modules.d/80cms/cmssetup.sh b/modules.d/80cms/cmssetup.sh
index 23e81ca9..da42ec0f 100755
--- a/modules.d/80cms/cmssetup.sh
+++ b/modules.d/80cms/cmssetup.sh
@@ -117,7 +117,6 @@ processcmsfile() {
dasd_cio_free
fi
- unset _do_zfcp
for i in ${!FCP_*}; do
echo "${!i}" | while read -r port rest || [ -n "$port" ]; do
case $port in
@@ -130,12 +129,24 @@ processcmsfile() {
port="0.0.$port"
;;
esac
- echo "$port" "$rest" >> /etc/zfcp.conf
+ # shellcheck disable=SC2086
+ set -- $rest
+ SAVED_IFS="$IFS"
+ IFS=":"
+ # Intentionally do not dynamically activate now, but only generate udev
+ # rules, which activate the device later during udev coldplug.
+ if [[ -z $rest ]]; then
+ chzdev --enable --persistent \
+ --no-settle --yes --quiet --no-root-update --force \
+ zfcp-host "$port" 2>&1 | vinfo
+ else
+ chzdev --enable --persistent \
+ --no-settle --yes --quiet --no-root-update --force \
+ zfcp-lun "$port:$*" 2>&1 | vinfo
+ fi
+ IFS="$SAVED_IFS"
done
- _do_zfcp=1
done
- [[ $_do_zfcp ]] && zfcp_cio_free
- unset _do_zfcp
}
[[ $CMSDASD ]] || CMSDASD=$(getarg "CMSDASD=")
diff --git a/modules.d/80cms/module-setup.sh b/modules.d/80cms/module-setup.sh
index 4872734b..0dd86b80 100755
--- a/modules.d/80cms/module-setup.sh
+++ b/modules.d/80cms/module-setup.sh
@@ -12,7 +12,7 @@ check() {
depends() {
arch=${DRACUT_ARCH:-$(uname -m)}
[ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
- echo znet zfcp dasd dasd_mod bash
+ echo znet dasd dasd_mod bash
return 0
}
--
2.42.0

View File

@ -1,7 +1,7 @@
From 9f979fc9486af3c7c924d3f9f837f06616c61829 Mon Sep 17 00:00:00 2001 From 1bd81956dc050db071c5885cfbcde393370468ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Tue, 18 Jan 2022 18:58:58 +0100 Date: Tue, 18 Jan 2022 18:58:58 +0100
Subject: [PATCH 02/23] fix(kernel-install): do not generate an initrd when one Subject: [PATCH 05/24] fix(kernel-install): do not generate an initrd when one
was specified was specified
According to the synopsis, kernel-install can be called with an According to the synopsis, kernel-install can be called with an

View File

@ -1,81 +0,0 @@
From 74edb9758da26ef063e4686a595f1d34f07f86f7 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 05/23] 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>
---
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 da42ec0f..01cfd303 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
for i in ${!FCP_*}; do
diff --git a/modules.d/80cms/module-setup.sh b/modules.d/80cms/module-setup.sh
index 0dd86b80..05b049da 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 dasd dasd_mod bash
+ echo znet 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/*"
--
2.42.0

View File

@ -0,0 +1,25 @@
From 6cb58e86ae65cf9922023b12e889446323a89080 Mon Sep 17 00:00:00 2001
From: Laszlo Gombos <laszlo.gombos@gmail.com>
Date: Sat, 15 Jun 2024 15:21:44 -0400
Subject: [PATCH 06/24] fix(crypt): decryption when rd.luks.name is set
---
modules.d/90crypt/parse-crypt.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules.d/90crypt/parse-crypt.sh b/modules.d/90crypt/parse-crypt.sh
index 39fc6d21..9567a4a9 100755
--- a/modules.d/90crypt/parse-crypt.sh
+++ b/modules.d/90crypt/parse-crypt.sh
@@ -174,7 +174,7 @@ else
} >> "$hookdir/emergency/90-crypt.sh"
fi
done
- elif getargbool 1 rd.auto; then
+ elif getargbool 1 rd.auto && [ -z "$(getargs rd.luks.name)" ]; then
if [ -z "$DRACUT_SYSTEMD" ]; then
{
printf -- 'ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="%s ' "$(command -v initqueue)"
--
2.42.0

View File

@ -1,109 +0,0 @@
From cc14fe218861f2855ca88ad03220ecb78d4aa31a Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Wed, 26 Jul 2023 13:50:03 +0200
Subject: [PATCH 06/23] refactor(cms): use consolidated network config with
zdev from s390-tools
This is just internal to initrd, so we can already migrate the code to
consolidated network 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 the zdev dracut module.
Keep the dependency on dracut module znet to at least pull in the required
kernel device drivers.
Since consolidated s390 network device configuration with zdev is used,
it takes care of all s390-specific settings.
None of the s390-specific ifcfg variables should be used anymore.
NETTYPE, OPTIONS, PORTNAME, and CTCPROT can be removed entirely.
SUBCHANNELS is kept because there are some dependency chains
(probably around the key identifiying an interface which is not HWADDR):
modules.d/35network-legacy/module-setup.sh
parses (sources) each of /etc/sysconfig/network-scripts/ifcfg-*
and if that contains SUBCHANNELS, create a symlink from the ifcfg file to
/etc/sysconfig/network-scripts/ccw-${SUBCHANNELS}.conf
modules.d/35network-legacy/ifup.sh installed as /sbin/ifup
checks during team setup if a slave interface is an s390 channel-attached
network interface and then parses (sources)
/etc/sysconfig/network-scripts/ccw-${SUBCHANNELS}.conf
from above, if that file exists
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/80cms/cms-write-ifcfg.sh | 13 -------------
modules.d/80cms/cmssetup.sh | 21 +++++++++++++--------
2 files changed, 13 insertions(+), 21 deletions(-)
diff --git a/modules.d/80cms/cms-write-ifcfg.sh b/modules.d/80cms/cms-write-ifcfg.sh
index ecfd53ef..91263092 100755
--- a/modules.d/80cms/cms-write-ifcfg.sh
+++ b/modules.d/80cms/cms-write-ifcfg.sh
@@ -81,21 +81,8 @@ EOF
fi
# colons in SEARCHDNS already replaced with spaces above for /etc/resolv.conf
[[ $SEARCHDNS ]] && echo "DOMAIN=\"$SEARCHDNS\"" >> "$IFCFGFILE"
- [[ $NETTYPE ]] && echo "NETTYPE=$NETTYPE" >> "$IFCFGFILE"
[[ $PEERID ]] && echo "PEERID=$PEERID" >> "$IFCFGFILE"
- [[ $PORTNAME ]] && echo "PORTNAME=$PORTNAME" >> "$IFCFGFILE"
- [[ $CTCPROT ]] && echo "CTCPROT=$CTCPROT" >> "$IFCFGFILE"
[[ $MACADDR ]] && echo "MACADDR=$MACADDR" >> "$IFCFGFILE"
- optstr=""
- for option in LAYER2 PORTNO; do
- [ -z "${!option}" ] && continue
- [ -n "$optstr" ] && optstr=${optstr}" "
- optstr=${optstr}$(echo ${option} | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/')"="${!option}
- done
- # write single quotes since network.py removes double quotes but we need quotes
- echo "OPTIONS='$optstr'" >> "$IFCFGFILE"
- unset option
- unset optstr
unset DNS1
unset DNS2
echo "files /etc/sysconfig/network-scripts" >> /run/initramfs/rwtab
diff --git a/modules.d/80cms/cmssetup.sh b/modules.d/80cms/cmssetup.sh
index 01cfd303..5e5b9267 100755
--- a/modules.d/80cms/cmssetup.sh
+++ b/modules.d/80cms/cmssetup.sh
@@ -82,13 +82,19 @@ processcmsfile() {
SUBCHANNELS="$(echo "$SUBCHANNELS" | sed 'y/ABCDEF/abcdef/')"
if [[ $NETTYPE ]]; then
- (
- echo -n "$NETTYPE","$SUBCHANNELS"
- [[ $PORTNAME ]] && echo -n ",portname=$PORTNAME"
- [[ $LAYER2 ]] && echo -n ",layer2=$LAYER2"
- [[ $NETTYPE == "ctc" ]] && [[ $CTCPROT ]] && echo -n ",protocol=$CTCPROT"
- echo
- ) >> /etc/ccw.conf
+ _cms_attrs=""
+ if [[ $PORTNAME ]]; then
+ if [[ $NETTYPE == lcs ]]; then
+ _cms_attrs="$_cms_attrs portno=$PORTNAME"
+ else
+ _cms_attrs="$_cms_attrs portname=$PORTNAME"
+ fi
+ fi
+ [[ $LAYER2 ]] && _cms_attrs="$_cms_attrs layer2=$LAYER2"
+ [[ $CTCPROT ]] && _cms_attrs="$_cms_attrs protocol=$CTCPROT"
+ # shellcheck disable=SC2086
+ chzdev --enable --persistent --yes --no-root-update --force \
+ "$NETTYPE" "$SUBCHANNELS" $_cms_attrs 2>&1 | vinfo
OLDIFS=$IFS
IFS=,
@@ -109,7 +115,6 @@ processcmsfile() {
[[ -f /etc/udev/rules.d/90-net.rules ]] \
|| printf 'SUBSYSTEM=="net", ACTION=="online", RUN+="/sbin/initqueue --onetime --env netif=$name source_hook initqueue/online"\n' >> /etc/udev/rules.d/99-cms.rules
udevadm control --reload
- znet_cio_free
fi
if [[ $DASD ]] && [[ $DASD != "none" ]]; then
--
2.42.0

View File

@ -0,0 +1,75 @@
From 30e7870504d09183bb9d99ed04f148c7dfb0c645 Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
Date: Thu, 11 Jul 2024 07:33:05 +0200
Subject: [PATCH 07/24] fix: incorrectly applied patch in commit
c6d18c3c71597e78572378fc4dde391f1845b8
named: "feat(kernel-install): do nothing when $KERNEL_INSTALL_INITRD_GENERATOR says so"
Resolves: rhbz#2276271
---
install.d/50-dracut.install | 30 ++++++++++++++++++++++++++++--
install.d/51-dracut-rescue.install | 6 +++---
2 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/install.d/50-dracut.install b/install.d/50-dracut.install
index 3907e303..076b4f5e 100755
--- a/install.d/50-dracut.install
+++ b/install.d/50-dracut.install
@@ -18,8 +18,34 @@ if [ "${KERNEL_INSTALL_INITRD_GENERATOR:-dracut}" != "dracut" ]; then
exit 0
fi
-if [[ -d "$BOOT_DIR_ABS" ]]; then
- INITRD="initrd"
+# Do not attempt to create initramfs if the supplied image is already a UKI
+if [[ "$KERNEL_INSTALL_IMAGE_TYPE" = "uki" ]]; then
+ exit 0
+fi
+
+# Mismatching the install layout and the --uefi/--no-uefi opts just creates a mess.
+if [[ $KERNEL_INSTALL_LAYOUT == "uki" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
+ BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
+ if [[ -z $KERNEL_INSTALL_UKI_GENERATOR || $KERNEL_INSTALL_UKI_GENERATOR == "dracut" ]]; then
+ # No uki generator preference set or we have been chosen
+ IMAGE="uki.efi"
+ UEFI_OPTS="--uefi"
+ elif [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then
+ # We aren't the uki generator, but we have been requested to make the initrd
+ IMAGE="initrd"
+ UEFI_OPTS="--no-uefi"
+ else
+ exit 0
+ fi
+elif [[ $KERNEL_INSTALL_LAYOUT == "bls" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
+ BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
+ if [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then
+ IMAGE="initrd"
+ UEFI_OPTS="--no-uefi"
+ else
+ exit 0
+ fi
+
else
# No layout information, use users --uefi/--no-uefi preference
UEFI_OPTS=""
diff --git a/install.d/51-dracut-rescue.install b/install.d/51-dracut-rescue.install
index be4172b5..5310229e 100755
--- a/install.d/51-dracut-rescue.install
+++ b/install.d/51-dracut-rescue.install
@@ -13,9 +13,9 @@ if [ "${KERNEL_INSTALL_INITRD_GENERATOR:-dracut}" != "dracut" ]; then
exit 0
fi
-dropindirs_sort()
-{
- suffix=$1; shift
+dropindirs_sort() {
+ suffix=$1
+ shift
args=("$@")
files=$(
while (($# > 0)); do
--
2.42.0

View File

@ -1,27 +0,0 @@
From a2c1fc530d8bcbdeaf1806f4a22019052715fc98 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Thu, 8 Feb 2024 18:38:48 +0100
Subject: [PATCH 07/23] refactor(cms): remove now unnecessary inclusion of full
s390utils-base
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/80cms/module-setup.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules.d/80cms/module-setup.sh b/modules.d/80cms/module-setup.sh
index 05b049da..5b33cd18 100755
--- a/modules.d/80cms/module-setup.sh
+++ b/modules.d/80cms/module-setup.sh
@@ -29,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 /lib/s390-tools/zdev-from-dasd_mod.dasd sed \
- $(rpm -ql s390utils-base) awk getopt chzdev lszdev
+ awk getopt chzdev lszdev
inst_libdir_file "gconv/*"
#inst /usr/lib/locale/locale-archive
--
2.42.0

View File

@ -1,222 +0,0 @@
From 71876ea8c73090741bdf26abb89c28fb260ed575 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Fri, 20 Jan 2023 18:22:19 +0100
Subject: [PATCH 08/23] feat(zfcp_rules): remove zfcp handling consolidated in
s390-tools
These are handled by s390-tools zdev dracut module 95zdev as of
https://github.com/ibm-s390-linux/s390-tools/commit/06a30ae529a5d6ad2369ed81da056bf3a6147bb6
("zdev/dracut: add rd.zfcp cmdline option handling").
Even though this removes one implementation of parsing rd.zfcp in dracut,
above s390-tools change introduces another implementation of parsing the
exact same rd.zfcp syntax. Therefore, it would be good to keep the
documentation in man/dracut.cmdline.7 of dracut as one central place
describing all s390 device types that dracut handles.
This also fixes problems such as RHBZ 1552619/1745470. It was due to a
duplicate configuration because the SUSE-specific module 95zfcp_rules does
not have any distro-specific dependency and thus also ran in Red Hat
distros.
That also caused a kind of competition with 95zfcp regarding the same hook
registration:
inst_hook cmdline 30 "$moddir/parse-zfcp.sh"
"luckily" 95zfcp wins since it runs lexicographically first
and the first one registering the hook via inst_simple wins.
Because commit c8aa1d949aec ("95zfcp_rules: simplified rd.zfcp commandline
for NPIV") extended the emitted rd.zfcp syntax for hostonly-cmdline in
95zfcp_rules, kdump initrds built with hostonly-cmdline parsed such rd.zfcp
with 95zfcp, which did not understand the extended syntax yet and aborted
early boot with a syntax error.
It also seems that parse-zfcp.sh on its own is without effect because
create_udev_rule() [similar to what zfcp_disk_configure had generated] does
not handle the pre-requisite of setting an FCP device (vHBA) online first.
So the rport match does not trigger unless something else happens to set an
FCP device online [such as rules generated by zfcp_host_configure]. Related
to commit d40c49a8dfe2 ("fix(zfcp_rules): remove collect based udev rule
creators").
module-setup.sh having copied all udev rules from the root-fs into the
initrd conflicted with s390-tools dracut module zdev-kdump, which
intentionally only activates the dependencies of the kdump target.
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/95zfcp_rules/module-setup.sh | 80 --------------------------
modules.d/95zfcp_rules/parse-zfcp.sh | 74 ------------------------
2 files changed, 154 deletions(-)
delete mode 100755 modules.d/95zfcp_rules/module-setup.sh
delete mode 100755 modules.d/95zfcp_rules/parse-zfcp.sh
diff --git a/modules.d/95zfcp_rules/module-setup.sh b/modules.d/95zfcp_rules/module-setup.sh
deleted file mode 100755
index dfa79514..00000000
--- a/modules.d/95zfcp_rules/module-setup.sh
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/bash
-
-# called by dracut
-cmdline() {
- is_zfcp() {
- local _dev=$1
- local _devpath
- _devpath=$(
- cd -P /sys/dev/block/"$_dev" || exit
- echo "$PWD"
- )
- local _sdev _scsiid _hostno _lun _wwpn _ccw _port_type
- local _allow_lun_scan _is_npiv
-
- read -r _allow_lun_scan < /sys/module/zfcp/parameters/allow_lun_scan
- [ "${_devpath#*/sd}" == "$_devpath" ] && return 1
- _sdev="${_devpath%%/block/*}"
- [ -e "${_sdev}"/fcp_lun ] || return 1
- _scsiid="${_sdev##*/}"
- _hostno="${_scsiid%%:*}"
- [ -d /sys/class/fc_host/host"${_hostno}" ] || return 1
- read -r _port_type < /sys/class/fc_host/host"${_hostno}"/port_type
- case "$_port_type" in
- NPIV*)
- _is_npiv=1
- ;;
- esac
- read -r _ccw < "${_sdev}"/hba_id
- if [ "$_is_npiv" ] && [ "$_allow_lun_scan" = "Y" ]; then
- echo "rd.zfcp=${_ccw}"
- else
- read -r _lun < "${_sdev}"/fcp_lun
- read -r _wwpn < "${_sdev}"/wwpn
- echo "rd.zfcp=${_ccw},${_wwpn},${_lun}"
- fi
- return 0
- }
- [[ $hostonly ]] || [[ $mount_needs ]] && {
- for_each_host_dev_and_slaves_all is_zfcp
- } | sort | uniq
-}
-
-# called by dracut
-check() {
- local _arch=${DRACUT_ARCH:-$(uname -m)}
- local _ccw
- [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
-
- [[ $hostonly ]] || [[ $mount_needs ]] && {
- found=0
- for _ccw in /sys/bus/ccw/devices/*/host*; do
- [ -d "$_ccw" ] || continue
- found=$((found + 1))
- done
- [ $found -eq 0 ] && return 255
- }
- return 0
-}
-
-# called by dracut
-depends() {
- echo bash
- return 0
-}
-
-# called by dracut
-install() {
- inst_hook cmdline 30 "$moddir/parse-zfcp.sh"
- if [[ $hostonly_cmdline == "yes" ]]; then
- local _zfcp
-
- for _zfcp in $(cmdline); do
- printf "%s\n" "$_zfcp" >> "${initdir}/etc/cmdline.d/94zfcp.conf"
- done
- fi
- if [[ $hostonly ]]; then
- inst_rules_wildcard "51-zfcp-*.rules"
- inst_rules_wildcard "41-zfcp-*.rules"
- fi
-}
diff --git a/modules.d/95zfcp_rules/parse-zfcp.sh b/modules.d/95zfcp_rules/parse-zfcp.sh
deleted file mode 100755
index a474b81b..00000000
--- a/modules.d/95zfcp_rules/parse-zfcp.sh
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/bash
-
-create_udev_rule() {
- local ccw=$1
- local wwpn=$2
- local lun=$3
- local _rule=/etc/udev/rules.d/51-zfcp-${ccw}.rules
- local _cu_type _dev_type
-
- if [ -x /sbin/cio_ignore ] && cio_ignore -i "$ccw" > /dev/null; then
- cio_ignore -r "$ccw"
- fi
-
- if [ -e /sys/bus/ccw/devices/"${ccw}" ]; then
- read -r _cu_type < /sys/bus/ccw/devices/"${ccw}"/cutype
- read -r _dev_type < /sys/bus/ccw/devices/"${ccw}"/devtype
- fi
- if [ "$_cu_type" != "1731/03" ]; then
- return 0
- fi
- if [ "$_dev_type" != "1732/03" ] && [ "$_dev_type" != "1732/04" ]; then
- return 0
- fi
-
- [ -z "$wwpn" ] || [ -z "$lun" ] && return
- m=$(sed -n "/.*${wwpn}.*${lun}.*/p" "$_rule")
- if [ -z "$m" ]; then
- cat >> "$_rule" << EOF
-ACTION=="add", KERNEL=="rport-*", ATTR{port_name}=="$wwpn", SUBSYSTEMS=="ccw", KERNELS=="$ccw", ATTR{[ccw/$ccw]$wwpn/unit_add}="$lun"
-EOF
- fi
-}
-
-if [[ -f /sys/firmware/ipl/ipl_type ]] \
- && [[ $(< /sys/firmware/ipl/ipl_type) == "fcp" ]]; then
- (
- read -r _wwpn < /sys/firmware/ipl/wwpn
- read -r _lun < /sys/firmware/ipl/lun
- read -r _ccw < /sys/firmware/ipl/device
-
- create_udev_rule "$_ccw" "$_wwpn" "$_lun"
- )
-fi
-
-for zfcp_arg in $(getargs rd.zfcp); do
- (
- OLDIFS="$IFS"
- IFS=","
- # shellcheck disable=SC2086
- set $zfcp_arg
- IFS="$OLDIFS"
- create_udev_rule "$1" "$2" "$3"
- )
-done
-
-for zfcp_arg in $(getargs root=) $(getargs resume=); do
- (
- case $zfcp_arg in
- /dev/disk/by-path/ccw-*)
- ccw_arg=${zfcp_arg##*/}
- ;;
- esac
- if [ -n "$ccw_arg" ]; then
- OLDIFS="$IFS"
- IFS="-"
- # shellcheck disable=SC2086
- set -- $ccw_arg
- IFS="$OLDIFS"
- _wwpn=${4%:*}
- _lun=${4#*:}
- create_udev_rule "$2" "$wwpn" "$lun"
- fi
- )
-done
--
2.42.0

View File

@ -0,0 +1,29 @@
From 93937d805f8166d9f708f9163fc93839fc1437d3 Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
Date: Thu, 11 Jul 2024 16:24:14 +0200
Subject: [PATCH 08/24] revert: "fix(crypt): unlock encrypted devices by
default during boot"
This reverts commit 2339acfaeee60d6bb26a1103db2e53bc8f9cb2d1.
Resolves: rhbz#2295215
---
modules.d/90crypt/parse-crypt.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules.d/90crypt/parse-crypt.sh b/modules.d/90crypt/parse-crypt.sh
index 9567a4a9..e46e347a 100755
--- a/modules.d/90crypt/parse-crypt.sh
+++ b/modules.d/90crypt/parse-crypt.sh
@@ -174,7 +174,7 @@ else
} >> "$hookdir/emergency/90-crypt.sh"
fi
done
- elif getargbool 1 rd.auto && [ -z "$(getargs rd.luks.name)" ]; then
+ elif getargbool 0 rd.auto; then
if [ -z "$DRACUT_SYSTEMD" ]; then
{
printf -- 'ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="%s ' "$(command -v initqueue)"
--
2.42.0

View File

@ -1,104 +0,0 @@
From 8d6098969aa9dc34edfd1bc96e6aa0384ae2fb99 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Tue, 31 Jan 2023 09:14:40 +0100
Subject: [PATCH 09/23] feat(zfcp): minimize zfcp handling consolidated in
s390-tools
Parsing of rd.zfcp is handled by s390-tools zdev dracut module 95zdev as of
https://github.com/ibm-s390-linux/s390-tools/commit/06a30ae529a5d6ad2369ed81da056bf3a6147bb6
("zdev/dracut: add rd.zfcp cmdline option handling").
Even though this removes the last implementation of parsing rd.zfcp in
dracut, above s390-tools change introduces another implementation of
parsing the exact same rd.zfcp syntax. Therefore, it would be good to keep
the documentation in man/dracut.cmdline.7 of dracut as one central place
describing all s390 device types that dracut handles.
For the time being, keep copying /etc/zfcp.conf.
Retain the call of zfcp_cio_free so /etc/zfcp.conf gets processed even
with the typical cio_ignore kernel boot parameter ignoring most devices.
Also keep handling rd.zfcp.conf=0 so users can, at boot time, ignore
/etc/zfcp.conf already copied into initrd.
Preparation for consolidating persistent configuration with zdev.
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
man/dracut.cmdline.7.asc | 12 +++++++++++-
modules.d/95zfcp/module-setup.sh | 4 ++--
modules.d/95zfcp/parse-zfcp.sh | 11 -----------
3 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/man/dracut.cmdline.7.asc b/man/dracut.cmdline.7.asc
index 858991fa..01bdf10f 100644
--- a/man/dracut.cmdline.7.asc
+++ b/man/dracut.cmdline.7.asc
@@ -980,12 +980,22 @@ ZFCP
**rd.zfcp=**__<zfcp adaptor device bus ID>__,__<WWPN>__,__<FCPLUN>__::
rd.zfcp can be specified multiple times on the kernel command
line.
++
+NOTE:
+ This parameter is no longer handled by dracut itself but with the exact
+ same syntax by
+ https://github.com/ibm-s390-linux/s390-tools/tree/master/zdev/dracut/95zdev.
**rd.zfcp=**__<zfcp adaptor device bus ID>__::
If NPIV is enabled and the 'allow_lun_scan' parameter to the zfcp
- module is set to 'Y' then the zfcp adaptor will be initiating a
+ module is set to 'Y' then the zfcp driver will be initiating a
scan internally and the <WWPN> and <FCPLUN> parameters can be omitted.
+
+NOTE:
+ This parameter is no longer handled by dracut itself but with the exact
+ same syntax by
+ https://github.com/ibm-s390-linux/s390-tools/tree/master/zdev/dracut/95zdev.
++
[listing]
.Example
--
diff --git a/modules.d/95zfcp/module-setup.sh b/modules.d/95zfcp/module-setup.sh
index e1f3aa35..b547f9bc 100755
--- a/modules.d/95zfcp/module-setup.sh
+++ b/modules.d/95zfcp/module-setup.sh
@@ -5,7 +5,7 @@ check() {
arch=${DRACUT_ARCH:-$(uname -m)}
[ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
- require_binaries zfcp_cio_free grep sed seq || return 1
+ require_binaries zfcp_cio_free sed || return 1
return 0
}
@@ -23,7 +23,7 @@ installkernel() {
# called by dracut
install() {
inst_hook cmdline 30 "$moddir/parse-zfcp.sh"
- inst_multiple zfcp_cio_free grep sed seq
+ inst_multiple zfcp_cio_free sed
inst_script /sbin/zfcpconf.sh
inst_rules 56-zfcp.rules
diff --git a/modules.d/95zfcp/parse-zfcp.sh b/modules.d/95zfcp/parse-zfcp.sh
index 495aa67f..41216dd9 100755
--- a/modules.d/95zfcp/parse-zfcp.sh
+++ b/modules.d/95zfcp/parse-zfcp.sh
@@ -2,15 +2,4 @@
getargbool 1 rd.zfcp.conf -d -n rd_NO_ZFCPCONF || rm /etc/zfcp.conf
-for zfcp_arg in $(getargs rd.zfcp -d 'rd_ZFCP='); do
- echo "$zfcp_arg" | grep '^0\.[0-9a-fA-F]\.[0-9a-fA-F]\{4\}\(,0x[0-9a-fA-F]\{16\},0x[0-9a-fA-F]\{16\}\)\?$' > /dev/null
- test $? -ne 0 && die "For argument 'rd.zfcp=$zfcp_arg'\nSorry, invalid format."
- (
- IFS=","
- # shellcheck disable=SC2086
- set $zfcp_arg
- echo "$@" >> /etc/zfcp.conf
- )
-done
-
zfcp_cio_free
--
2.42.0

View File

@ -0,0 +1,33 @@
From e02ef9afa1ede698623f25d5694949e9b4fedb4e Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
Date: Tue, 6 Dec 2022 21:46:01 +0100
Subject: [PATCH 09/24] fix(90kernel-modules): install blk modules using symbol
blk_alloc_disk
Corresponding kernel symbol blk_cleanup_disk is no longer used in the nvdimm
driver and calls are made directly instead.
blk_alloc_disk is used:
https://elixir.bootlin.com/linux/v6.1-rc8/source/drivers/nvdimm/pmem.c#L522
Resolves: RHEL-32237
---
modules.d/90kernel-modules/module-setup.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh
index ec60f393..89f33231 100755
--- a/modules.d/90kernel-modules/module-setup.sh
+++ b/modules.d/90kernel-modules/module-setup.sh
@@ -2,7 +2,7 @@
# called by dracut
installkernel() {
- local _blockfuncs='ahci_platform_get_resources|ata_scsi_ioctl|scsi_add_host|blk_cleanup_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device|usb_stor_disconnect|mmc_add_host|sdhci_add_host|scsi_add_host_with_dma|blk_mq_alloc_disk|blk_mq_alloc_request|blk_mq_destroy_queue|blk_cleanup_disk'
+ local _blockfuncs='ahci_platform_get_resources|ata_scsi_ioctl|scsi_add_host|blk_cleanup_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device|usb_stor_disconnect|mmc_add_host|sdhci_add_host|scsi_add_host_with_dma|blk_alloc_disk|blk_mq_alloc_disk|blk_mq_alloc_request|blk_mq_destroy_queue|blk_cleanup_disk'
local -A _hostonly_drvs
record_block_dev_drv() {
--
2.42.0

View File

@ -1,151 +0,0 @@
From 7294e45b5204e47bb8ee2108e2c38c5843e64fac Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Thu, 23 Mar 2023 18:06:23 +0100
Subject: [PATCH 10/23] feat(dasd_rules): remove dasd handling consolidated in
s390-tools
These are handled by s390-tools zdev dracut module 95zdev as of
https://github.com/ibm-s390-linux/s390-tools/commit/99270236805972544932feab9692ee7122a343b8
("zdev/dracut: add rd.dasd cmdline option handling").
Even though this removes one implementation of parsing rd.dasd in dracut,
above s390-tools change introduces another implementation of parsing the
exact same rd.dasd syntax. Therefore, it would be good to keep the
documentation in man/dracut.cmdline.7 of dracut as one central place
describing all s390 device types that dracut handles.
module-setup.sh having copied all udev rules from the root-fs into the
initrd conflicted with s390-tools dracut module zdev-kdump, which
intentionally only activates the dependencies of the kdump target.
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/95dasd_rules/module-setup.sh | 65 --------------------------
modules.d/95dasd_rules/parse-dasd.sh | 43 -----------------
2 files changed, 108 deletions(-)
delete mode 100755 modules.d/95dasd_rules/module-setup.sh
delete mode 100755 modules.d/95dasd_rules/parse-dasd.sh
diff --git a/modules.d/95dasd_rules/module-setup.sh b/modules.d/95dasd_rules/module-setup.sh
deleted file mode 100755
index 06c57a48..00000000
--- a/modules.d/95dasd_rules/module-setup.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-
-# called by dracut
-cmdline() {
- is_dasd() {
- local _dev=$1
- local _devpath
- _devpath=$(
- cd -P /sys/dev/block/"$_dev" || exit
- echo "$PWD"
- )
-
- [ "${_devpath#*/dasd}" == "$_devpath" ] && return 1
- _ccw="${_devpath%%/block/*}"
- echo "rd.dasd=${_ccw##*/}"
- return 0
- }
- [[ $hostonly ]] || [[ $mount_needs ]] && {
- for_each_host_dev_and_slaves_all is_dasd || return 255
- } | sort | uniq
-}
-
-# called by dracut
-check() {
- local _arch=${DRACUT_ARCH:-$(uname -m)}
- local found=0
- local bdev
- [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
-
- [[ $hostonly ]] || [[ $mount_needs ]] && {
- for bdev in /sys/block/*; do
- case "${bdev##*/}" in
- dasd*)
- found=$((found + 1))
- break
- ;;
- esac
- done
- [ $found -eq 0 ] && return 255
- }
- return 0
-}
-
-# called by dracut
-depends() {
- echo 'dasd_mod' bash
- return 0
-}
-
-# called by dracut
-install() {
- inst_hook cmdline 30 "$moddir/parse-dasd.sh"
- if [[ $hostonly_cmdline == "yes" ]]; then
- local _dasd
- _dasd=$(cmdline)
- [[ $_dasd ]] && printf "%s\n" "$_dasd" >> "${initdir}/etc/cmdline.d/95dasd.conf"
- fi
- if [[ $hostonly ]]; then
- inst_rules_wildcard "51-dasd-*.rules"
- inst_rules_wildcard "41-dasd-*.rules"
- mark_hostonly /etc/udev/rules.d/51-dasd-*.rules
- mark_hostonly /etc/udev/rules.d/41-dasd-*.rules
- fi
- inst_rules 59-dasd.rules
-}
diff --git a/modules.d/95dasd_rules/parse-dasd.sh b/modules.d/95dasd_rules/parse-dasd.sh
deleted file mode 100755
index 4454aec3..00000000
--- a/modules.d/95dasd_rules/parse-dasd.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/bash
-
-allow_device() {
- local ccw=$1
-
- if [ -x /sbin/cio_ignore ] && cio_ignore -i "$ccw" > /dev/null; then
- cio_ignore -r "$ccw"
- fi
-}
-
-if [[ -f /sys/firmware/ipl/ipl_type ]] && [[ $(< /sys/firmware/ipl/ipl_type) == "ccw" ]]; then
- allow_device "$(< /sys/firmware/ipl/device)"
-fi
-
-for dasd_arg in $(getargs root=) $(getargs resume=); do
- [[ $dasd_arg =~ /dev/disk/by-path/ccw-* ]] || continue
-
- ccw_dev="${dasd_arg##*/ccw-}"
- allow_device "${ccw_dev%%-*}"
-done
-
-for dasd_arg in $(getargs rd.dasd=); do
- IFS=',' read -r -a devs <<< "$dasd_arg"
- declare -p devs
- for dev in "${devs[@]}"; do
- case "$dev" in
- autodetect | probeonly) ;;
-
- *-*)
- IFS="-" read -r start end _ <<< "${dev%(ro)}"
- prefix=${start%.*}
- start=${start##*.}
- for rdev in $(seq $((16#$start)) $((16#$end))); do
- allow_device "$(printf "%s.%04x" "$prefix" "$rdev")"
- done
- ;;
- *)
- IFS="." read -r sid ssid chan _ <<< "${dev%(ro)}"
- allow_device "$(printf "%01x.%01x.%04x" $((16#$sid)) $((16#$ssid)) $((16#$chan)))"
- ;;
- esac
- done
-done
--
2.42.0

View File

@ -0,0 +1,30 @@
From aded658821983ba7d92def26793813c1b3a83475 Mon Sep 17 00:00:00 2001
From: Laszlo Gombos <laszlo.gombos@gmail.com>
Date: Sat, 20 Jul 2024 18:49:38 -0400
Subject: [PATCH 10/24] test: do not force include dash, let sh module make a
selection
This is important for alpine, so that it does not install both
dash and busybox dracut modules that are potentially conflicting.
(cherry picked from commit 6e3c2bf9d01ad0f93176ee121bb70404f24de4e7)
---
modules.d/80test-makeroot/module-setup.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules.d/80test-makeroot/module-setup.sh b/modules.d/80test-makeroot/module-setup.sh
index f311e4a0..fc105d7e 100755
--- a/modules.d/80test-makeroot/module-setup.sh
+++ b/modules.d/80test-makeroot/module-setup.sh
@@ -6,7 +6,7 @@ check() {
}
depends() {
- echo "dash rootfs-block kernel-modules qemu"
+ echo "rootfs-block kernel-modules qemu"
}
installkernel() {
--
2.42.0

View File

@ -1,73 +0,0 @@
From a82045ef34bc8c913502eba37b6b9c60709d6997 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Thu, 23 Mar 2023 18:22:56 +0100
Subject: [PATCH 11/23] feat(dasd_mod): minimize dasd handling consolidated in
s390-tools
Parsing of rd.dasd is handled by s390-tools zdev dracut module 95zdev as of
https://github.com/ibm-s390-linux/s390-tools/commit/99270236805972544932feab9692ee7122a343b8
("zdev/dracut: add rd.dasd cmdline option handling").
Even though this removes one implementation of parsing rd.dasd in dracut,
above s390-tools change introduces another implementation of parsing the
exact same rd.dasd syntax. Therefore, it would be good to keep the
documentation in man/dracut.cmdline.7 of dracut as one central place
describing all s390 device types that dracut handles.
95dasd/modules-setup.sh copies /etc/dasd.conf from root-fs into initrd.
Retain the call of dasd_cio_free here so /etc/dasd.conf gets processed even
with the typical cio_ignore kernel boot parameter ignoring most devices.
Preparation for consolidating persistent configuration with zdev.
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/95dasd_mod/module-setup.sh | 2 --
modules.d/95dasd_mod/parse-dasd-mod.sh | 14 --------------
2 files changed, 16 deletions(-)
diff --git a/modules.d/95dasd_mod/module-setup.sh b/modules.d/95dasd_mod/module-setup.sh
index c59dd3ac..155eaacc 100755
--- a/modules.d/95dasd_mod/module-setup.sh
+++ b/modules.d/95dasd_mod/module-setup.sh
@@ -4,7 +4,6 @@
check() {
local _arch=${DRACUT_ARCH:-$(uname -m)}
[ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
- require_binaries grep sed seq
return 0
}
@@ -22,6 +21,5 @@ installkernel() {
# called by dracut
install() {
inst_hook cmdline 31 "$moddir/parse-dasd-mod.sh"
- inst_multiple grep sed seq
inst_multiple -o dasd_cio_free
}
diff --git a/modules.d/95dasd_mod/parse-dasd-mod.sh b/modules.d/95dasd_mod/parse-dasd-mod.sh
index 2b86d454..b635ecf9 100755
--- a/modules.d/95dasd_mod/parse-dasd-mod.sh
+++ b/modules.d/95dasd_mod/parse-dasd-mod.sh
@@ -1,18 +1,4 @@
#!/bin/sh
-mod_args=""
-
-for dasd_arg in $(getargs rd.dasd= -d rd_DASD= DASD=); do
- mod_args="$mod_args,$dasd_arg"
-done
-
-mod_args="${mod_args#*,}"
-
-if [ -x /sbin/dasd_cio_free -a -n "$mod_args" ]; then
- [ -d /etc/modprobe.d ] || mkdir -m 0755 -p /etc/modprobe.d
- echo "options dasd_mod dasd=$mod_args" >> /etc/modprobe.d/dasd_mod.conf
-fi
-
-unset dasd_arg
if [ -x /sbin/dasd_cio_free ]; then
dasd_cio_free
fi
--
2.42.0

View File

@ -0,0 +1,31 @@
From a891ae527aaf3c015d3b4b0290655b89fdf8f03d Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
Date: Thu, 8 Aug 2024 01:30:50 +0200
Subject: [PATCH 11/24] fix(dracut-functions): allow for \ in get_maj_min file
path
as the path might be f.e. /dev/disk/by-partlabel/EFI\x20System\x20Partition
which would produce Warning 'grep: warning: stray \ before x' in get_maj_min
Resolves: RHEL-47145
---
dracut-functions.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dracut-functions.sh b/dracut-functions.sh
index f9e5d3bc..c8cb2e15 100755
--- a/dracut-functions.sh
+++ b/dracut-functions.sh
@@ -243,7 +243,7 @@ get_maj_min() {
local _out
if [[ $get_maj_min_cache_file ]]; then
- _out="$(grep -m1 -oE "^$1 \S+$" "$get_maj_min_cache_file" | awk '{print $NF}')"
+ _out="$(grep -m1 -oE "^${1//\\/\\\\} \S+$" "$get_maj_min_cache_file" | awk '{print $NF}')"
fi
if ! [[ "$_out" ]]; then
--
2.42.0

View File

@ -1,100 +0,0 @@
From 1ff6be8aef787513b8143df444a1dd2d696b0944 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Thu, 23 Mar 2023 19:33:52 +0100
Subject: [PATCH 12/23] feat(dasd): minimize dasd handling consolidated in
s390-tools
Parsing of rd.dasd is handled by s390-tools zdev dracut module 95zdev as of
https://github.com/ibm-s390-linux/s390-tools/commit/99270236805972544932feab9692ee7122a343b8
("zdev/dracut: add rd.dasd cmdline option handling").
Even though this removes the last implementation of parsing rd.dasd in
dracut, above s390-tools change introduces another implementation of
parsing the exact same rd.dasd syntax. Therefore, it would be good to keep
the documentation in man/dracut.cmdline.7 of dracut as one central place
describing all s390 device types that dracut handles.
For the time being, keep copying /etc/dasd.conf.
The corresponding call to dasd_cio_free is in 95dasd_mod/parse-dasd-mod.sh
and indirectly triggers processing of /etc/dasd.conf even with the typical
cio_ignore kernel boot parameter ignoring most devices.
Preparation for consolidating persistent configuration with zdev.
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
man/dracut.cmdline.7.asc | 11 ++++++++++-
modules.d/95dasd/module-setup.sh | 6 ++----
modules.d/95dasd/parse-dasd.sh | 11 -----------
3 files changed, 12 insertions(+), 16 deletions(-)
delete mode 100755 modules.d/95dasd/parse-dasd.sh
diff --git a/man/dracut.cmdline.7.asc b/man/dracut.cmdline.7.asc
index 01bdf10f..c31dbfc6 100644
--- a/man/dracut.cmdline.7.asc
+++ b/man/dracut.cmdline.7.asc
@@ -973,7 +973,16 @@ root=virtiofs:host rw
DASD
~~~~
**rd.dasd=**....::
- same syntax as the kernel module parameter (s390 only)
+ same syntax as the kernel module parameter (s390 only).
+ For more details on the syntax see the IBM book
+ "Linux on IBM Z and IBM LinuxONE - Device Drivers, Features, and Commands"
+ https://www.ibm.com/docs/en/linux-on-systems?topic=overview-device-drivers-features-commands.
+ This parameter can be specified multiple times.
++
+NOTE:
+ This parameter is no longer handled by dracut itself but with the exact
+ same syntax by
+ https://github.com/ibm-s390-linux/s390-tools/tree/master/zdev/dracut/95zdev.
ZFCP
~~~~
diff --git a/modules.d/95dasd/module-setup.sh b/modules.d/95dasd/module-setup.sh
index 180da140..825f95d8 100755
--- a/modules.d/95dasd/module-setup.sh
+++ b/modules.d/95dasd/module-setup.sh
@@ -4,20 +4,18 @@
check() {
local _arch=${DRACUT_ARCH:-$(uname -m)}
[ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
- require_binaries normalize_dasd_arg || return 1
+ require_binaries dasdconf.sh || return 1
return 0
}
# called by dracut
depends() {
- echo "dasd_mod"
return 0
}
# called by dracut
install() {
- inst_hook cmdline 30 "$moddir/parse-dasd.sh"
- inst_multiple dasdinfo dasdconf.sh normalize_dasd_arg
+ inst_multiple dasdconf.sh
conf=/etc/dasd.conf
if [[ $hostonly && -f $conf ]]; then
inst -H $conf
diff --git a/modules.d/95dasd/parse-dasd.sh b/modules.d/95dasd/parse-dasd.sh
deleted file mode 100755
index cda3970c..00000000
--- a/modules.d/95dasd/parse-dasd.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-for dasd_arg in $(getargs rd.dasd= -d rd_DASD= DASD=); do
- (
- local OLDIFS="$IFS"
- IFS=","
- # shellcheck disable=SC2086
- set -- $dasd_arg
- IFS="$OLDIFS"
- echo "$@" | normalize_dasd_arg >> /etc/dasd.conf
- )
-done
--
2.42.0

View File

@ -0,0 +1,42 @@
From 821ffb39cd0c3003b2711d30302b713ab9b5da9b Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fvogt@suse.de>
Date: Mon, 5 Aug 2024 11:28:32 +0200
Subject: [PATCH 12/24] fix(dracut-functions.sh): only return block devices
from get_persistent_dev
With udev 256, there are now directories such as
/dev/disk/by-path/pci-0000:02:00.0-nvme-1-part/ which match here.
In case a nonexisting file/device was passed to get_persistent_dev, it
returned the first directory it looked at because both have maj:min 0:0.
This accidental conversion from garbage to a sensible looking path leads
to weird behaviour later.
Instead of filtering out directories explicitly switch the check to only
return block devices, which also takes care of the character special
/dev/mapper/control.
(cherry picked from commit 55d2fb5b459f356fdbde60ddefb97be942a0c141)
Resolves: RHEL-49744
---
dracut-functions.sh | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/dracut-functions.sh b/dracut-functions.sh
index c8cb2e15..43d905e3 100755
--- a/dracut-functions.sh
+++ b/dracut-functions.sh
@@ -294,8 +294,7 @@ get_persistent_dev() {
/dev/disk/by-partlabel/* \
/dev/disk/by-id/* \
/dev/disk/by-path/*; do
- [[ -e $i ]] || continue
- [[ $i == /dev/mapper/control ]] && continue
+ [[ -b $i ]] || continue
[[ $i == /dev/mapper/mpath* ]] && continue
_tmp=$(get_maj_min "$i")
if [ "$_tmp" = "$_dev" ]; then
--
2.42.0

View File

@ -0,0 +1,112 @@
From 3e4a22f2b72d0723fd43ca917b8aa9003c6c7f8f Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
Date: Wed, 12 Jun 2024 06:06:32 +0200
Subject: [PATCH 13/24] feat(systemd*): include systemd config files from
/usr/lib/systemd
and also use proper variables for the paths, and fixup invalid paths.
--
The new systemd reads from both /etc and /usr/, so to accomodate this,
I've added new paths to install configs from (I probably haven't covered
all). This changes only hostonly behaviour; uses global variables:
systemdutilconfdir: "/etc/systemd"
systemdutildir: "/lib/systemd:/lib/systemd/systemd-udevd" "/usr/lib/systemd:/usr/lib/systemd/systemd-udevd"
(cherry picked from commit ea4905e944a2acd75ba3a48a5dfeaba417f724e8)
Resolves: RHEL-32506
---
modules.d/00systemd/module-setup.sh | 6 ++++--
modules.d/01systemd-coredump/module-setup.sh | 3 ++-
modules.d/01systemd-pstore/module-setup.sh | 2 ++
modules.d/01systemd-resolved/module-setup.sh | 1 +
modules.d/01systemd-timesyncd/module-setup.sh | 1 +
5 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/modules.d/00systemd/module-setup.sh b/modules.d/00systemd/module-setup.sh
index d173c99f..0f151289 100755
--- a/modules.d/00systemd/module-setup.sh
+++ b/modules.d/00systemd/module-setup.sh
@@ -42,6 +42,8 @@ install() {
"$systemdutildir"/system-generators/systemd-debug-generator \
"$systemdutildir"/system-generators/systemd-fstab-generator \
"$systemdutildir"/system-generators/systemd-gpt-auto-generator \
+ "$systemdutildir"/system.conf \
+ "$systemdutildir"/system.conf.d/*.conf \
"$systemdsystemunitdir"/debug-shell.service \
"$systemdsystemunitdir"/cryptsetup.target \
"$systemdsystemunitdir"/cryptsetup-pre.target \
@@ -94,8 +96,8 @@ install() {
if [[ $hostonly ]]; then
inst_multiple -H -o \
- /etc/systemd/system.conf \
- /etc/systemd/system.conf.d/*.conf \
+ "$systemdutilconfdir"/system.conf \
+ "$systemdutilconfdir"/system.conf.d/*.conf \
/etc/hosts \
/etc/hostname \
/etc/nsswitch.conf \
diff --git a/modules.d/01systemd-coredump/module-setup.sh b/modules.d/01systemd-coredump/module-setup.sh
index 47666b6c..17deb088 100755
--- a/modules.d/01systemd-coredump/module-setup.sh
+++ b/modules.d/01systemd-coredump/module-setup.sh
@@ -33,6 +33,7 @@ install() {
inst_multiple -o \
"$sysctld"/50-coredump.conf \
"$systemdutildir"/coredump.conf \
+ "$systemdutildir/coredump.conf.d/*.conf" \
"$systemdutildir"/systemd-coredump \
"$systemdsystemunitdir"/systemd-coredump.socket \
"$systemdsystemunitdir"/systemd-coredump@.service \
@@ -51,7 +52,7 @@ install() {
if [[ $hostonly ]]; then
inst_multiple -H -o \
"$systemdutilconfdir"/coredump.conf \
- "$systemdsystemconfdir/coredump.conf.d/*.conf" \
+ "$systemdutilconfdir/coredump.conf.d/*.conf" \
"$systemdsystemconfdir"/systemd-coredump.socket \
"$systemdsystemconfdir/systemd-coredump.socket.d/*.conf" \
"$systemdsystemconfdir"/systemd-coredump@.service \
diff --git a/modules.d/01systemd-pstore/module-setup.sh b/modules.d/01systemd-pstore/module-setup.sh
index 67034bbf..5de5db4b 100755
--- a/modules.d/01systemd-pstore/module-setup.sh
+++ b/modules.d/01systemd-pstore/module-setup.sh
@@ -34,6 +34,8 @@ install() {
inst_dir /var/lib/systemd/pstore
inst_multiple -o \
"$tmpfilesdir/systemd-pstore.conf" \
+ "$systemdutildir"/pstore.conf \
+ "$systemdutildir/pstore.conf.d/*.conf" \
"$systemdutildir"/systemd-pstore \
"$systemdsystemunitdir"/systemd-pstore.service \
"$systemdsystemunitdir/systemd-pstore.service.d/*.conf"
diff --git a/modules.d/01systemd-resolved/module-setup.sh b/modules.d/01systemd-resolved/module-setup.sh
index 0c2e8c28..7b4b26e8 100755
--- a/modules.d/01systemd-resolved/module-setup.sh
+++ b/modules.d/01systemd-resolved/module-setup.sh
@@ -49,6 +49,7 @@ install() {
# Install the hosts local user configurations if enabled.
if [[ $hostonly ]]; then
inst_multiple -H -o \
+ "$systemdutilconfdir"/resolv.conf \
"$systemdutilconfdir"/resolved.conf \
"$systemdutilconfdir/resolved.conf.d/*.conf" \
"$systemdsystemconfdir"/systemd-resolved.service \
diff --git a/modules.d/01systemd-timesyncd/module-setup.sh b/modules.d/01systemd-timesyncd/module-setup.sh
index a2c67540..77f7b113 100755
--- a/modules.d/01systemd-timesyncd/module-setup.sh
+++ b/modules.d/01systemd-timesyncd/module-setup.sh
@@ -38,6 +38,7 @@ install() {
"$systemdntpunits/*.list" \
"$systemdutildir"/systemd-timesyncd \
"$systemdutildir"/systemd-time-wait-sync \
+ "$systemdutildir"/timesyncd.conf \
"$systemdutildir/timesyncd.conf.d/*.conf" \
"$systemdsystemunitdir"/systemd-timesyncd.service \
"$systemdsystemunitdir/systemd-timesyncd.service.d/*.conf" \
--
2.42.0

View File

@ -1,149 +0,0 @@
From 86b6e2979999cf5ecce8c76c6230d1f085b3a333 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Tue, 25 Jul 2023 19:43:05 +0200
Subject: [PATCH 13/23] feat(znet): use zdev for consolidated device
configuration
Remove any distribution-specifics from s390 channel-attached network device
configuration.
Similar to 95qeth_rules, copy the existing persistent network configuration
into the initrd. This needs to go via chzdev import so chzdev updates (adds
to) the cio_ignore persistent config inside the initrd, because other
dracut modules such as zdev from s390-tools also import
persistent (non-network) config into initrd and the set union of devices
needs to end up in the cio_ignore persistent config inside the initrd.
Additional debugging output can be generated with e.g. dracut option
"--stdlog 5" (or short -L5). It shows the chzdev export result, the output
of chzdev imports, and an overview of the resulting persistent config
within the initrd. Typically combined with "--debug" to get a shell trace
from building an initrd (Note: --debug does not increase the log levels).
Note that nm-initrd-generator also parses rd.znet and rd.znet_ifname
to fill in s390 options of a NetworkManager connection definition.
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/95znet/module-setup.sh | 37 +++++++++++++++++++++++--
modules.d/95znet/parse-ccw.sh | 47 ++++++++++++++++++++++++++++++--
2 files changed, 78 insertions(+), 6 deletions(-)
diff --git a/modules.d/95znet/module-setup.sh b/modules.d/95znet/module-setup.sh
index df37c660..95164bba 100755
--- a/modules.d/95znet/module-setup.sh
+++ b/modules.d/95znet/module-setup.sh
@@ -5,7 +5,7 @@ check() {
arch=${DRACUT_ARCH:-$(uname -m)}
[ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
- require_binaries znet_cio_free grep sed seq readlink || return 1
+ require_binaries grep sed seq readlink chzdev || return 1
return 0
}
@@ -24,6 +24,37 @@ installkernel() {
# called by dracut
install() {
inst_hook cmdline 30 "$moddir/parse-ccw.sh"
- inst_rules 81-ccw.rules
- inst_multiple znet_cio_free grep sed seq readlink /lib/udev/ccw_init
+ inst_multiple grep sed seq readlink chzdev
+ if [[ $hostonly ]]; then
+ local _tempfile
+ _tempfile=$(mktemp --tmpdir="${DRACUT_TMPDIR}" dracut-zdev.XXXXXX)
+ {
+ chzdev qeth --export - --configured --persistent --quiet --type
+ chzdev lcs --export - --configured --persistent --quiet --type
+ chzdev ctc --export - --configured --persistent --quiet --type
+ } 2> /dev/null > "$_tempfile"
+ ddebug < "$_tempfile"
+ chzdev --import "$_tempfile" --persistent --base "/etc=$initdir/etc" \
+ --yes --no-root-update --force 2>&1 | ddebug
+ lszdev --configured --persistent --info \
+ --base "/etc=$initdir/etc" 2>&1 | ddebug
+ rm -f "$_tempfile"
+ # these are purely generated udev rules so we have to glob expand
+ # within $initdir and strip the $initdir prefix for mark_hostonly
+ local -a _array
+ # shellcheck disable=SC2155
+ local _nullglob=$(shopt -p nullglob)
+ shopt -u nullglob
+ # shellcheck disable=SC2086
+ readarray -t _array < <(
+ ls -1 $initdir/etc/udev/rules.d/41-*.rules 2> /dev/null
+ )
+ [[ ${#_array[@]} -gt 0 ]] && mark_hostonly "${_array[@]#$initdir}"
+ # shellcheck disable=SC2086
+ readarray -t _array < <(
+ ls -1 $initdir/etc/modprobe.d/s390x-*.conf 2> /dev/null
+ )
+ [[ ${#_array[@]} -gt 0 ]] && mark_hostonly "${_array[@]#$initdir}"
+ $_nullglob
+ fi
}
diff --git a/modules.d/95znet/parse-ccw.sh b/modules.d/95znet/parse-ccw.sh
index d8953605..aacc988e 100755
--- a/modules.d/95znet/parse-ccw.sh
+++ b/modules.d/95znet/parse-ccw.sh
@@ -1,7 +1,50 @@
#!/bin/bash
+znet_base_args="--no-settle --yes --no-root-update --force"
+
+# at this point in time dracut's vinfo() only logs to journal which is hard for
+# s390 users to find and access on a line mode console such as 3215 mode
+# so use a vinfo alternative that still prints to the console via kmsg
+znet_vinfo() {
+ while read -r _znet_vinfo_line || [ -n "$_znet_vinfo_line" ]; do
+ # Prefix "<30>" represents facility LOG_DAEMON 3 and loglevel INFO 6:
+ # (facility << 3) | level.
+ echo "<30>dracut: $_znet_vinfo_line" > /dev/kmsg
+ done
+}
+
for ccw_arg in $(getargs rd.ccw -d 'rd_CCW=') $(getargs rd.znet -d 'rd_ZNET='); do
- echo "$ccw_arg" >> /etc/ccw.conf
+ (
+ SAVED_IFS="$IFS"
+ IFS=","
+ # shellcheck disable=SC2086
+ set -- $ccw_arg
+ IFS="$SAVED_IFS"
+ type="$1"
+ subchannel1="$2"
+ subchannel2="$3"
+ subchannel3="$4"
+ echo "rd.znet ${ccw_arg} :" | znet_vinfo
+ if [ "$#" -lt 3 ]; then
+ echo "rd.znet needs at least 3 list items: type,subchannel1,subchannel2" | znet_vinfo
+ fi
+ if [ "$1" = "qeth" ]; then
+ if [ "$#" -lt 4 ]; then
+ echo "rd.znet for type qeth needs at least 4 list items: qeth,subchannel1,subchannel2,subchannel3" | znet_vinfo
+ fi
+ subchannels="$subchannel1:$subchannel2:$subchannel3"
+ shift 4
+ # shellcheck disable=SC2086
+ chzdev --enable --persistent $znet_base_args \
+ "$type" "$subchannels" "$@" 2>&1 | znet_vinfo
+ else
+ subchannels="$subchannel1:$subchannel2"
+ shift 3
+ # shellcheck disable=SC2086
+ chzdev --enable --persistent $znet_base_args \
+ "$type" "$subchannels" "$@" 2>&1 | znet_vinfo
+ fi
+ )
done
for ifname in $(getargs rd.znet_ifname); do
@@ -21,5 +64,3 @@ for ifname in $(getargs rd.znet_ifname); do
} > /etc/udev/rules.d/81-ccw-ifname.rules
fi
done
-
-znet_cio_free
--
2.42.0

View File

@ -1,36 +0,0 @@
From addb383b375fd0db07eacf8a9f5d9b4e23343855 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Fri, 26 May 2023 19:25:41 +0200
Subject: [PATCH 14/23] docs(dracut.cmdline): generalize description of rd.znet
As of the preceding commit ("feat(znet): use zdev for consolidated device
configuration"), rd.znet is no longer specific to RHEL/Fedora.
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
man/dracut.cmdline.7.asc | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/man/dracut.cmdline.7.asc b/man/dracut.cmdline.7.asc
index c31dbfc6..e6b8d988 100644
--- a/man/dracut.cmdline.7.asc
+++ b/man/dracut.cmdline.7.asc
@@ -1018,9 +1018,12 @@ rd.zfcp=0.0.4000
ZNET
~~~~
**rd.znet=**__<nettype>__,__<subchannels>__,__<options>__::
- The whole parameter is appended to /etc/ccw.conf, which is used on
- RHEL/Fedora with ccw_init, which is called from udev for certain
- devices on z-series.
+ Activates a channel-attached network interface on s390 architecture.
+ <nettype> is one of: qeth, lcs, ctc.
+ <subchannels> is a comma-separated list of ccw device bus-IDs.
+ The list consists of 3 entries with nettype qeth, and 2 for other nettype.
+ <options> is a comma-separated list of <name>=<value> pairs,
+ where <name> refers to a device sysfs attribute to which <value> gets written.
rd.znet can be specified multiple times on the kernel command line.
**rd.znet_ifname=**__<ifname>__:__<subchannels>__::
--
2.42.0

View File

@ -0,0 +1,34 @@
From 53d78f4eb236500465279c424c296ff576421c7c Mon Sep 17 00:00:00 2001
From: Pavel Valena <pvalena@redhat.com>
Date: Thu, 8 Aug 2024 00:21:12 +0200
Subject: [PATCH 14/24] fix(resume): always include the resume module
as we can't determine with certainity that it won't be needed.
rhel-only
Resolves: RHEL-53350
---
modules.d/95resume/module-setup.sh | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/modules.d/95resume/module-setup.sh b/modules.d/95resume/module-setup.sh
index d419566e..c0f04a6c 100755
--- a/modules.d/95resume/module-setup.sh
+++ b/modules.d/95resume/module-setup.sh
@@ -1,7 +1,12 @@
#!/bin/bash
# called by dracut
+# shellcheck disable=SC2317
check() {
+
+ # Always include resume module
+ return 0
+
swap_on_netdevice() {
local _dev
for _dev in "${swap_devs[@]}"; do
--
2.42.0

View File

@ -0,0 +1,197 @@
From b8b7e0245bb3c645b45d4a31847ed227a8431ec8 Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Mon, 22 Jul 2024 16:46:47 +0200
Subject: [PATCH 15/24] feat(dracut-init.sh): allow changing the destination
directory for inst et al
When using 99squash dracut actually builds two separate initrds. The
"normal" one, that gets squashed into a squashfs image, and a
"minimalistic" one, whose only task is to mount and switch_root to the
squashfs image.
This is currently done the following way:
1. Skipp install() for 99squash during the "normal" installation phase.
2. Trigger a special postinstall hook in 99squash that moves the content
of $initdir to $squashdir and installs the "minimalistic" initrd to
$initdir.
3. Strip the binaries in $initdir (of which $squashdir is a sub
directory of).
4. Squash the content of $squashdir into the squashfs image and remove
$squashdir.
The problem with this approach is that the steps 2 and 4 specific to
99squash but need to be done in dracut.sh. Thus a lot of special
handling for 99squash is needed in dracut.sh. This will get even more
complex once support for different filesystem images, e.g. erofs, are
implemented.
In order to be able to move most of the functionality into 99squash
itself a new approach will be chosen, i.e.
1. During the installation phase install the "normal" initrd into
$initdir and the "minimalistic" initrd into $squashdir.
2. Strip the binaries in $initdir.
3. Trigger a special postinstall hook in 99squash that squashes the
content of $initdir (excluding $squashdir) into the squashfs image,
removes the content of $intidir (excluding $suqashdir) and, moves the
content of $squashdir into $initdir.
With that the only special handling remaining in dracut.sh is triggering
the postinstall hook.
However, in inst et al. the destination directory is hard coded to
$initdir. Thus allow setting a different destination directory in inst
et al. to get the new approach to work. For the time being only do that
for the functions required by 99squash.
Signed-off-by: Philipp Rudo <prudo@redhat.com>
(cherry picked from commit 5ab4470cf136c2d9983564b84b49fd700d4b8514)
Related: RHEL-43460
---
dracut-init.sh | 40 +++++++++++++++++++++++++---------------
1 file changed, 25 insertions(+), 15 deletions(-)
diff --git a/dracut-init.sh b/dracut-init.sh
index 863df0cb..58e657b5 100755
--- a/dracut-init.sh
+++ b/dracut-init.sh
@@ -240,34 +240,36 @@ inst_dir() {
}
inst() {
+ local dstdir="${dstdir:-"$initdir"}"
local _ret _hostonly_install
if [[ $1 == "-H" ]]; then
_hostonly_install="-H"
shift
fi
- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
- if $DRACUT_INSTALL ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${initdir:+-D "$initdir"} ${loginstall:+-L "$loginstall"} ${DRACUT_RESOLVE_DEPS:+-l} ${DRACUT_FIPS_MODE:+-f} ${_hostonly_install:+-H} "$@"; then
+ [[ -e ${dstdir}/"${2:-$1}" ]] && return 0 # already there
+ if $DRACUT_INSTALL ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${dstdir:+-D "$dstdir"} ${loginstall:+-L "$loginstall"} ${DRACUT_RESOLVE_DEPS:+-l} ${DRACUT_FIPS_MODE:+-f} ${_hostonly_install:+-H} "$@"; then
return 0
else
_ret=$?
- derror FAILED: "$DRACUT_INSTALL" ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${initdir:+-D "$initdir"} ${loginstall:+-L "$loginstall"} ${DRACUT_RESOLVE_DEPS:+-l} ${DRACUT_FIPS_MODE:+-f} ${_hostonly_install:+-H} "$@"
+ derror FAILED: "$DRACUT_INSTALL" ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${dstdir:+-D "$dstdir"} ${loginstall:+-L "$loginstall"} ${DRACUT_RESOLVE_DEPS:+-l} ${DRACUT_FIPS_MODE:+-f} ${_hostonly_install:+-H} "$@"
return $_ret
fi
}
inst_simple() {
+ local dstdir="${dstdir:-"$initdir"}"
local _ret _hostonly_install
if [[ $1 == "-H" ]]; then
_hostonly_install="-H"
shift
fi
- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
- [[ -e $1 ]] || return 1 # no source
- if $DRACUT_INSTALL ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${initdir:+-D "$initdir"} ${loginstall:+-L "$loginstall"} ${_hostonly_install:+-H} "$@"; then
+ [[ -e ${dstdir}/"${2:-$1}" ]] && return 0 # already there
+ [[ -e $1 ]] || return 1 # no source
+ if $DRACUT_INSTALL ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${dstdir:+-D "$dstdir"} ${loginstall:+-L "$loginstall"} ${_hostonly_install:+-H} "$@"; then
return 0
else
_ret=$?
- derror FAILED: "$DRACUT_INSTALL" ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${initdir:+-D "$initdir"} ${loginstall:+-L "$loginstall"} ${_hostonly_install:+-H} "$@"
+ derror FAILED: "$DRACUT_INSTALL" ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${dstdir:+-D "$dstdir"} ${loginstall:+-L "$loginstall"} ${_hostonly_install:+-H} "$@"
return $_ret
fi
}
@@ -290,16 +292,17 @@ inst_symlink() {
}
inst_multiple() {
+ local dstdir="${dstdir:-"$initdir"}"
local _ret _hostonly_install
if [[ $1 == "-H" ]]; then
_hostonly_install="-H"
shift
fi
- if $DRACUT_INSTALL ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${initdir:+-D "$initdir"} -a ${loginstall:+-L "$loginstall"} ${DRACUT_RESOLVE_DEPS:+-l} ${DRACUT_FIPS_MODE:+-f} ${_hostonly_install:+-H} "$@"; then
+ if $DRACUT_INSTALL ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${dstdir:+-D "$dstdir"} -a ${loginstall:+-L "$loginstall"} ${DRACUT_RESOLVE_DEPS:+-l} ${DRACUT_FIPS_MODE:+-f} ${_hostonly_install:+-H} "$@"; then
return 0
else
_ret=$?
- derror FAILED: "$DRACUT_INSTALL" ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${initdir:+-D "$initdir"} -a ${loginstall:+-L "$loginstall"} ${DRACUT_RESOLVE_DEPS:+-l} ${DRACUT_FIPS_MODE:+-f} ${_hostonly_install:+-H} "$@"
+ derror FAILED: "$DRACUT_INSTALL" ${dracutsysrootdir:+-r "$dracutsysrootdir"} ${dstdir:+-D "$dstdir"} -a ${loginstall:+-L "$loginstall"} ${DRACUT_RESOLVE_DEPS:+-l} ${DRACUT_FIPS_MODE:+-f} ${_hostonly_install:+-H} "$@"
return $_ret
fi
}
@@ -566,6 +569,8 @@ inst_rules_wildcard() {
# make sure that library links are correct and up to date
build_ld_cache() {
+ local dstdir="${dstdir:-"$initdir"}"
+
for f in "$dracutsysrootdir"/etc/ld.so.conf "$dracutsysrootdir"/etc/ld.so.conf.d/*; do
[[ -f $f ]] && inst_simple "${f#"$dracutsysrootdir"}"
done
@@ -1047,13 +1052,15 @@ for_each_module_dir() {
}
dracut_kernel_post() {
+ local dstdir="${dstdir:-"$initdir"}"
+
for _f in modules.builtin modules.builtin.alias modules.builtin.modinfo modules.order; do
[[ -e $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f"
done
# generate module dependencies for the initrd
- if [[ -d $initdir/lib/modules/$kernel ]] \
- && ! depmod -a -b "$initdir" "$kernel"; then
+ if [[ -d $dstdir/lib/modules/$kernel ]] \
+ && ! depmod -a -b "$dstdir" "$kernel"; then
dfatal "\"depmod -a $kernel\" failed."
exit 1
fi
@@ -1067,6 +1074,7 @@ instmods() {
# <kernel subsystem> can be e.g. "=block" or "=drivers/usb/storage"
# -c check
# -s silent
+ local dstdir="${dstdir:-"$initdir"}"
local _optional="-o"
local _silent
local _ret
@@ -1092,7 +1100,7 @@ instmods() {
fi
$DRACUT_INSTALL \
- ${initdir:+-D "$initdir"} \
+ ${dstdir:+-D "$dstdir"} \
${dracutsysrootdir:+-r "$dracutsysrootdir"} \
${loginstall:+-L "$loginstall"} \
${hostonly:+-H} \
@@ -1106,7 +1114,7 @@ instmods() {
if ((_ret != 0)) && [[ -z $_silent ]]; then
derror "FAILED: " \
"$DRACUT_INSTALL" \
- ${initdir:+-D "$initdir"} \
+ ${dstdir:+-D "$dstdir"} \
${dracutsysrootdir:+-r "$dracutsysrootdir"} \
${loginstall:+-L "$loginstall"} \
${hostonly:+-H} \
@@ -1123,14 +1131,16 @@ instmods() {
if [[ "$(ln --help)" == *--relative* ]]; then
ln_r() {
- ln -sfnr "${initdir}/$1" "${initdir}/$2"
+ local dstdir="${dstdir:-"$initdir"}"
+ ln -sfnr "${dstdir}/$1" "${dstdir}/$2"
}
else
ln_r() {
+ local dstdir="${dstdir:-"$initdir"}"
local _source=$1
local _dest=$2
[[ -d ${_dest%/*} ]] && _dest=$(readlink -f "${_dest%/*}")/${_dest##*/}
- ln -sfn -- "$(convert_abs_rel "${_dest}" "${_source}")" "${initdir}/${_dest}"
+ ln -sfn -- "$(convert_abs_rel "${_dest}" "${_source}")" "${dstdir}/${_dest}"
}
fi
--
2.42.0

View File

@ -1,90 +0,0 @@
From 7ad6fef8fe110093939c422b5c3b381ebe47e4e9 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Fri, 26 May 2023 19:51:09 +0200
Subject: [PATCH 15/23] feat(qeth_rules): remove qeth handling consolidated in
95znet
Dracut module 95znet handles a superset of qeth_rules as of the preceding
commit ("feat(znet): use zdev for consolidated device configuration").
The instmods list in installkernel() seemed to have been incomplete because
qeth needs one or both of qeth_l2 and qeth_l3 but qeth intentionally does
not depend on them so depmod cannot resolve that.
In contrast to the old dracut module 95znet, 95qeth_rules also did not seem
to have parsing for the upstream dracut cmdline options "rd.znet=" and
"rd.znet_ifname=".
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/95qeth_rules/module-setup.sh | 58 --------------------------
1 file changed, 58 deletions(-)
delete mode 100755 modules.d/95qeth_rules/module-setup.sh
diff --git a/modules.d/95qeth_rules/module-setup.sh b/modules.d/95qeth_rules/module-setup.sh
deleted file mode 100755
index a84ac151..00000000
--- a/modules.d/95qeth_rules/module-setup.sh
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/bash
-
-# called by dracut
-check() {
- local _arch=${DRACUT_ARCH:-$(uname -m)}
- local _online=0
- [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
- dracut_module_included network || return 1
-
- [[ $hostonly ]] && {
- for i in /sys/devices/qeth/*/online; do
- [ ! -f "$i" ] && continue
- read -r _online < "$i"
- [ "$_online" -eq 1 ] && return 0
- done
- }
- return 255
-}
-
-# called by dracut
-installkernel() {
- instmods qeth
-}
-
-# called by dracut
-install() {
- ccwid() {
- qeth_path=$(readlink -e -q "$1"/device)
- basename "$qeth_path"
- }
-
- inst_rules_qeth() {
- for rule in /etc/udev/rules.d/{4,5}1-qeth-${1}.rules; do
- # prefer chzdev generated 41- rules
- if [ -f "$rule" ]; then
- inst_rules "$rule"
- break
- fi
- done
- }
-
- has_carrier() {
- carrier=0
- # not readable in qeth interfaces
- # that have just been assembled, ignore
- # read error and assume no carrier
- read -r carrier 2> /dev/null < "$1/carrier"
- [ "$carrier" -eq 1 ] && return 0
- return 1
- }
-
- for dev in /sys/class/net/*; do
- has_carrier "$dev" || continue
- id=$(ccwid "$dev")
- [ -n "$id" ] && inst_rules_qeth "$id"
- done
-
-}
--
2.42.0

View File

@ -0,0 +1,82 @@
From c81d6422d71b02ed9158a67c00fa0a5eec232f37 Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Thu, 25 Jul 2024 12:47:00 +0200
Subject: [PATCH 16/24] fix(dracut-init.sh): add module to mods_to_load before
checking dependencies
When implementing erofs support for 99squash we end up with three
modules 99squash, 95squash-squashfs and 95squash-erofs. Where 99squash
contains the common code for filesystem images and
95squash-{squashfs,erofs} the special handing depending on the
filesystem used. This leads to a dependency cycle as we want to allow
users both to choose 99squash, when the exact filesystem doesn't matter,
as well as 95squash-{squashfs,erofs} when a specific filesystem is
required.
But when 99squash is added as a dependency calling
dracut_module_included fails in its depends() function. This lead to
cases where both handlers, 95squash-squashfs and 95squash-erofs, were
added to the initrd.
Reason for the failure is that a module only is marked to be loaded
after all it's dependencies have been checked as well. Thus a child
module cannot detect which parent module wants it to be included. Fix
this by marking modules to be loaded before checking its dependencies in
check_module. Do the same change in check_mount for consistency.
Signed-off-by: Philipp Rudo <prudo@redhat.com>
(cherry picked from commit 634b4a5c6fbe595eb240cd529d669d21eadd510c)
Related: RHEL-43460
---
dracut-init.sh | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/dracut-init.sh b/dracut-init.sh
index 58e657b5..840c6167 100755
--- a/dracut-init.sh
+++ b/dracut-init.sh
@@ -915,6 +915,9 @@ check_mount() {
fi
fi
+ [[ " $mods_to_load " == *\ $_mod\ * ]] \
+ || mods_to_load+=" $_mod "
+
for _moddep in $(module_depends "$_mod" "$_moddir"); do
# handle deps as if they were manually added
[[ " $dracutmodules " == *\ $_mod\ * ]] \
@@ -933,9 +936,6 @@ check_mount() {
fi
done
- [[ " $mods_to_load " == *\ $_mod\ * ]] \
- || mods_to_load+=" $_mod "
-
return 0
}
@@ -990,6 +990,9 @@ check_module() {
fi
fi
+ [[ " $mods_to_load " == *\ $_mod\ * ]] \
+ || mods_to_load+=" $_mod "
+
for _moddep in $(module_depends "$_mod" "$_moddir"); do
# handle deps as if they were manually added
[[ " $dracutmodules " == *\ $_mod\ * ]] \
@@ -1008,9 +1011,6 @@ check_module() {
fi
done
- [[ " $mods_to_load " == *\ $_mod\ * ]] \
- || mods_to_load+=" $_mod "
-
return 0
}
--
2.42.0

View File

@ -1,44 +0,0 @@
From cbc5eece88b8f6d0e69fdfbb8f34eabb45425c86 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Fri, 26 May 2023 19:47:35 +0200
Subject: [PATCH 16/23] fix(znet): append to udev rules so each rd.znet_ifname
is effective
Otherwise the last rd.znet_ifname statement overwrites the persistent
network interface settings of previous such statements.
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/95znet/parse-ccw.sh | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/modules.d/95znet/parse-ccw.sh b/modules.d/95znet/parse-ccw.sh
index aacc988e..ccf05bc6 100755
--- a/modules.d/95znet/parse-ccw.sh
+++ b/modules.d/95znet/parse-ccw.sh
@@ -53,14 +53,16 @@ for ifname in $(getargs rd.znet_ifname); do
warn "Invalid arguments for rd.znet_ifname="
else
{
- ifname_subchannels=${ifname_subchannels//,/|}
+ ifname_subchannels="${ifname_subchannels//,/|}"
+ # sanitize for use in udev label: replace non-word characters by _
+ ifname_if_label="${ifname_if//[^[:word:]]/_}"
- echo 'ACTION!="add|change", GOTO="ccw_ifname_end"'
- echo 'ATTR{type}!="1", GOTO="ccw_ifname_end"'
- echo 'SUBSYSTEM!="net", GOTO="ccw_ifname_end"'
+ echo "ACTION!=\"add|change\", GOTO=\"ccw_ifname_${ifname_if_label}_end\""
+ echo "ATTR{type}!=\"1\", GOTO=\"ccw_ifname_${ifname_if_label}_end\""
+ echo "SUBSYSTEM!=\"net\", GOTO=\"ccw_ifname_${ifname_if_label}_end\""
echo "SUBSYSTEMS==\"ccwgroup\", KERNELS==\"$ifname_subchannels\", DRIVERS==\"?*\" NAME=\"$ifname_if\""
- echo 'LABEL="ccw_ifname_end"'
+ echo "LABEL=\"ccw_ifname_${ifname_if_label}_end\""
- } > /etc/udev/rules.d/81-ccw-ifname.rules
+ } >> /etc/udev/rules.d/81-ccw-ifname.rules
fi
done
--
2.42.0

View File

@ -0,0 +1,192 @@
From bbb64f449a4f3cd76ea63d73ebc1043a3dd14118 Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Mon, 22 Jul 2024 16:30:50 +0200
Subject: [PATCH 17/24] feat(squash): move mksquashfs to 99squash/modules-setup
When using 99squash dracut actually builds two separat initrds. The
"normal" one, that gets squashed into a squashfs image, and a
"minimalistic" one, whose only task is to mount and switch_root to the
squashfs image.
For that 99squash currently requires a lot of special handling in
dracut.sh. Move most of this special handling into 99squash itself. This
requires a new approach when building the "minimalistic" initrd. The new
approach works the following way
1. During the installation phase install the "normal" initrd into
$initdir and the "minimalistic" initrd into $squashdir.
2. Strip the binaries in $initdir.
3. Trigger a special postinstall hook in 99squash that squashes the
content of $initdir (excluding $squashdir) into the squashfs image,
removes the content of $intidir (excluding $suqashdir) and, moves the
content of $squashdir into $initdir.
Signed-off-by: Philipp Rudo <prudo@redhat.com>
(cherry picked from commit 7a4dd89ca732329893628b886fe8e78337d896e8)
Related: RHEL-43460
---
dracut.sh | 35 ++++--------------
modules.d/99squash/module-setup.sh | 58 +++++++++++++++++++++---------
2 files changed, 49 insertions(+), 44 deletions(-)
diff --git a/dracut.sh b/dracut.sh
index cc6d6f28..68bdf33b 100755
--- a/dracut.sh
+++ b/dracut.sh
@@ -1277,6 +1277,7 @@ trap '
trap 'exit 1;' SIGINT
readonly initdir="${DRACUT_TMPDIR}/initramfs"
+readonly squashdir="$initdir/squash_root"
mkdir -p "$initdir"
if [[ $early_microcode == yes ]] || { [[ $acpi_override == yes ]] && [[ -d $acpi_table_dir ]]; }; then
@@ -1804,7 +1805,8 @@ export initdir dracutbasedir \
host_fs_types host_devs swap_devs sshkey add_fstab \
DRACUT_VERSION \
prefix filesystems drivers \
- hostonly_cmdline loginstall
+ hostonly_cmdline loginstall \
+ squashdir squash_compress
mods_to_load=""
# check all our modules to see if they should be sourced.
@@ -1909,6 +1911,8 @@ if [[ $kernel_only != yes ]]; then
fi
fi
+dracut_module_included "squash" && mkdir -p "$squashdir"
+
_isize=0 #initramfs size
modules_loaded=" "
# source our modules.
@@ -2255,14 +2259,6 @@ if [[ $kernel_only != yes ]]; then
build_ld_cache
fi
-if dracut_module_included "squash"; then
- readonly squash_dir="$initdir/squash/root"
- readonly squash_img="$initdir/squash-root.img"
- mkdir -p "$squash_dir"
- dinfo "*** Install squash loader ***"
- DRACUT_SQUASH_POST_INST=1 module_install "squash"
-fi
-
if [[ $do_strip == yes ]] && ! [[ $DRACUT_FIPS_MODE ]]; then
# stripping files negates (dedup) benefits of using reflink
[[ -n $enhanced_cpio ]] && ddebug "strip is enabled alongside cpio reflink"
@@ -2282,25 +2278,8 @@ fi
if dracut_module_included "squash"; then
dinfo "*** Squashing the files inside the initramfs ***"
- declare squash_compress_arg
- # shellcheck disable=SC2086
- if [[ $squash_compress ]]; then
- if ! mksquashfs /dev/null "$DRACUT_TMPDIR"/.squash-test.img -no-progress -comp $squash_compress &> /dev/null; then
- dwarn "mksquashfs doesn't support compressor '$squash_compress', failing back to default compressor."
- else
- squash_compress_arg="$squash_compress"
- fi
- fi
-
- # shellcheck disable=SC2086
- if ! mksquashfs "$squash_dir" "$squash_img" \
- -no-xattrs -no-exports -noappend -no-recovery -always-use-fragments \
- -no-progress ${squash_compress_arg:+-comp $squash_compress_arg} 1> /dev/null; then
- dfatal "Failed making squash image"
- exit 1
- fi
-
- rm -rf "$squash_dir"
+ DRACUT_SQUASH_POST_INST=1 module_install "squash"
+ rm -rf "$squashdir"
dinfo "*** Squashing the files inside the initramfs done ***"
# Skip initramfs compress
diff --git a/modules.d/99squash/module-setup.sh b/modules.d/99squash/module-setup.sh
index dc2e0a20..96d097af 100755
--- a/modules.d/99squash/module-setup.sh
+++ b/modules.d/99squash/module-setup.sh
@@ -12,26 +12,13 @@ depends() {
return 0
}
-installpost() {
+squash_install() {
local _busybox
_busybox=$(find_binary busybox)
- # Move everything under $initdir except $squash_dir
- # itself into squash image
- for i in "$initdir"/*; do
- [[ $squash_dir == "$i"/* ]] || mv "$i" "$squash_dir"/
- done
-
# Create mount points for squash loader
mkdir -p "$initdir"/squash/
- mkdir -p "$squash_dir"/squash/
-
- # Copy dracut spec files out side of the squash image
- # so dracut rebuild and lsinitrd can work
- for file in "$squash_dir"/usr/lib/dracut/*; do
- [[ -f $file ]] || continue
- DRACUT_RESOLVE_DEPS=1 dracutsysrootdir="$squash_dir" inst "${file#"$squash_dir"}"
- done
+ mkdir -p "$squashdir"/squash/
# Install required modules and binaries for the squash image init script.
if [[ $_busybox ]]; then
@@ -61,8 +48,47 @@ installpost() {
build_ld_cache
}
+squash_installpost() {
+ local _img="$squashdir"/squash-root.img
+ local _comp _file
+
+ # shellcheck disable=SC2086
+ if [[ $squash_compress ]]; then
+ if ! mksquashfs /dev/null "$DRACUT_TMPDIR"/.squash-test.img -no-progress -comp $squash_compress &> /dev/null; then
+ dwarn "mksquashfs doesn't support compressor '$squash_compress', failing back to default compressor."
+ else
+ _comp="$squash_compress"
+ fi
+ fi
+
+ # shellcheck disable=SC2086
+ if ! mksquashfs "$initdir" "$_img" \
+ -no-xattrs -no-exports -noappend -no-recovery -always-use-fragments \
+ -no-progress ${_comp:+-comp $_comp} \
+ -e "$squashdir" 1> /dev/null; then
+ dfatal "Failed making squash image"
+ exit 1
+ fi
+
+ # Rescue the dracut spec files so dracut rebuild and lsinitrd can work
+ for _file in "$initdir"/usr/lib/dracut/*; do
+ [[ -f $_file ]] || continue
+ DRACUT_RESOLVE_DEPS=1 dstdir=$squashdir inst "$_file" "${_file#"$initdir"}"
+ done
+
+ # Remove everything that got squashed into the image
+ for _file in "$initdir"/*; do
+ [[ $_file == "$squashdir" ]] && continue
+ rm -rf "$_file"
+ done
+ mv "$squashdir"/* "$initdir"
+}
+
install() {
+
if [[ $DRACUT_SQUASH_POST_INST ]]; then
- installpost
+ squash_installpost
+ else
+ dstdir="$squashdir" squash_install
fi
}
--
2.42.0

View File

@ -1,40 +0,0 @@
From b6913f66b6c9e9ea81fd0832405c170876bc993a Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Wed, 26 Jul 2023 12:42:03 +0200
Subject: [PATCH 17/23] refactor(ifcfg): delete code duplication using
iface_get_subchannels()
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/45ifcfg/write-ifcfg.sh | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh
index 5550cce3..4ca96e98 100755
--- a/modules.d/45ifcfg/write-ifcfg.sh
+++ b/modules.d/45ifcfg/write-ifcfg.sh
@@ -31,19 +31,13 @@ print_s390() {
local NETTYPE
local CONFIG_LINE
local i
- local channel
local OLD_IFS
_netif="$1"
# if we find ccw channel, then use those, instead of
# of the MAC
- SUBCHANNELS=$({
- for i in /sys/class/net/"$_netif"/device/cdev[0-9]*; do
- [ -e "$i" ] || continue
- channel=$(readlink -f "$i")
- printf '%s' "${channel##*/},"
- done
- })
+ # [iface_get_subchannels() from /lib/net-lib.sh sourced at top of this file]
+ SUBCHANNELS=$(iface_get_subchannels "$_netif")
[ -n "$SUBCHANNELS" ] || return 1
SUBCHANNELS=${SUBCHANNELS%,}
--
2.42.0

View File

@ -1,95 +0,0 @@
From 110fec3e41faf47277447f1c56635c5a876c1f96 Mon Sep 17 00:00:00 2001
From: Steffen Maier <maier@linux.ibm.com>
Date: Wed, 26 Jul 2023 12:59:19 +0200
Subject: [PATCH 18/23] feat(ifcfg): minimize s390-specific network
configuration aspects
Since consolidated s390 network device configuration with zdev is used,
it takes care of all s390-specific settings.
None of the s390-specific ifcfg variables should be used anymore.
NETTYPE and OPTIONS can be removed entirely.
SUBCHANNELS is kept because there are some dependency chains
(probably around the interface identifiying key, which is not HWADDR):
modules.d/35network-legacy/module-setup.sh
parses (sources) each of /etc/sysconfig/network-scripts/ifcfg-*
and if that contains SUBCHANNELS, creates a symlink from the ifcfg file to
/etc/sysconfig/network-scripts/ccw-${SUBCHANNELS}.conf
modules.d/35network-legacy/ifup.sh installed as /sbin/ifup
checks during team setup if a slave interface is an s390 channel-attached
network interface and then parses (sources)
/etc/sysconfig/network-scripts/ccw-${SUBCHANNELS}.conf
from above, if that file exists
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
---
modules.d/45ifcfg/write-ifcfg.sh | 41 --------------------------------
1 file changed, 41 deletions(-)
diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh
index 4ca96e98..a7804b50 100755
--- a/modules.d/45ifcfg/write-ifcfg.sh
+++ b/modules.d/45ifcfg/write-ifcfg.sh
@@ -10,28 +10,10 @@ mkdir -m 0755 -p /tmp/ifcfg/
# shellcheck disable=SC2174
mkdir -m 0755 -p /tmp/ifcfg-leases/
-get_config_line_by_subchannel() {
- local CHANNELS
- local line
-
- CHANNELS="$1"
- while read -r line || [ -n "$line" ]; do
- if strstr "$line" "$CHANNELS"; then
- echo "$line"
- return 0
- fi
- done < /etc/ccw.conf
- return 1
-}
-
print_s390() {
local _netif
local SUBCHANNELS
- local OPTIONS
- local NETTYPE
- local CONFIG_LINE
local i
- local OLD_IFS
_netif="$1"
# if we find ccw channel, then use those, instead of
@@ -43,29 +25,6 @@ print_s390() {
SUBCHANNELS=${SUBCHANNELS%,}
echo "SUBCHANNELS=\"${SUBCHANNELS}\""
- CONFIG_LINE=$(get_config_line_by_subchannel "$SUBCHANNELS")
- # shellcheck disable=SC2181
- [ $? -ne 0 -o -z "$CONFIG_LINE" ] && return 0
-
- OLD_IFS=$IFS
- IFS=","
- # shellcheck disable=SC2086
- set -- $CONFIG_LINE
- IFS=$OLD_IFS
- NETTYPE=$1
- shift
- SUBCHANNELS="$1"
- OPTIONS=""
- shift
- while [ $# -gt 0 ]; do
- case $1 in
- *=*) OPTIONS="$OPTIONS $1" ;;
- esac
- shift
- done
- OPTIONS=${OPTIONS## }
- echo "NETTYPE=\"${NETTYPE}\""
- echo "OPTIONS=\"${OPTIONS}\""
return 0
}
--
2.42.0

View File

@ -0,0 +1,183 @@
From 1ef53f9d5ea7f74730b27b8016304c58b2d31871 Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Tue, 23 Jul 2024 16:39:13 +0200
Subject: [PATCH 18/24] feat(squash): split 95squash-squashfs from 99squash
99squash only allows squashing the files using squashfs. In order to
make the implementation for different filesystems easier split out the
squashfs specific parts into 95squash-squashfs.
While at it rename the root image contained in the initrd to
squashfs-root.img. This allows tools like lsinitrd to detect the
filesystem used later on.
Signed-off-by: Philipp Rudo <prudo@redhat.com>
(cherry picked from commit f281606f110be1549cd6b1cd34828653879a5f50)
Related: RHEL-43460
---
modules.d/95squash-squashfs/module-setup.sh | 48 ++++++++++++++++++
modules.d/99squash/init-squash.sh | 2 +-
modules.d/99squash/module-setup.sh | 54 ++++++++++++---------
3 files changed, 80 insertions(+), 24 deletions(-)
create mode 100755 modules.d/95squash-squashfs/module-setup.sh
diff --git a/modules.d/95squash-squashfs/module-setup.sh b/modules.d/95squash-squashfs/module-setup.sh
new file mode 100755
index 00000000..83973700
--- /dev/null
+++ b/modules.d/95squash-squashfs/module-setup.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+check() {
+ require_binaries mksquashfs unsquashfs || return 1
+ require_kernel_modules squashfs || return 1
+
+ return 255
+}
+
+depends() {
+ echo "squash"
+ return 0
+}
+
+squashfs_install() {
+ hostonly="" instmods "squashfs"
+}
+
+squashfs_installpost() {
+ local _img="$squashdir/squashfs-root.img"
+ local _comp
+
+ # shellcheck disable=SC2086
+ if [[ $squash_compress ]]; then
+ if ! mksquashfs /dev/null "$DRACUT_TMPDIR"/.squash-test.img -no-progress -comp $squash_compress &> /dev/null; then
+ dwarn "mksquashfs doesn't support compressor '$squash_compress', failing back to default compressor."
+ else
+ _comp="$squash_compress"
+ fi
+ fi
+
+ # shellcheck disable=SC2086
+ if ! mksquashfs "$initdir" "$_img" \
+ -no-xattrs -no-exports -noappend -no-recovery -always-use-fragments \
+ -no-progress ${_comp:+-comp $_comp} \
+ -e "$squashdir" 1> /dev/null; then
+ dfatal "Failed making squash image"
+ exit 1
+ fi
+}
+
+install() {
+ if [[ $DRACUT_SQUASH_POST_INST ]]; then
+ squashfs_installpost
+ else
+ dstdir="$squashdir" squashfs_install
+ fi
+}
diff --git a/modules.d/99squash/init-squash.sh b/modules.d/99squash/init-squash.sh
index 59769f62..42a9a86f 100755
--- a/modules.d/99squash/init-squash.sh
+++ b/modules.d/99squash/init-squash.sh
@@ -21,7 +21,7 @@ modprobe overlay
# Mount the squash image
mount -t ramfs ramfs /squash
mkdir -p /squash/root /squash/overlay/upper /squash/overlay/work
-mount -t squashfs -o ro,loop /squash-root.img /squash/root
+mount -t squashfs -o ro,loop /squashfs-root.img /squash/root
# Setup new root overlay
mkdir /newroot
diff --git a/modules.d/99squash/module-setup.sh b/modules.d/99squash/module-setup.sh
index 96d097af..015944c2 100755
--- a/modules.d/99squash/module-setup.sh
+++ b/modules.d/99squash/module-setup.sh
@@ -1,17 +1,42 @@
#!/bin/bash
check() {
- require_binaries mksquashfs unsquashfs || return 1
- require_kernel_modules squashfs loop overlay || return 1
+ require_kernel_modules loop overlay || return 1
return 255
}
depends() {
- echo "systemd-initrd"
+ local _handler
+
+ _handler=$(squash_get_handler) || return 1
+
+ echo "systemd-initrd $_handler"
return 0
}
+squash_get_handler() {
+ local _module _handler
+
+ for _module in squash-squashfs; do
+ if dracut_module_included "$_module"; then
+ _handler="$_module"
+ break
+ fi
+ done
+
+ if [ -z "$_handler" ]; then
+ if check_module "squash-squashfs"; then
+ _handler="squash-squashfs"
+ else
+ dfatal "No valid handler for found"
+ return 1
+ fi
+ fi
+
+ echo "$_handler"
+}
+
squash_install() {
local _busybox
_busybox=$(find_binary busybox)
@@ -36,7 +61,7 @@ squash_install() {
[[ $DRACUT_FIPS_MODE ]] && inst_libdir_file -o "libssl.so*"
fi
- hostonly="" instmods "loop" "squashfs" "overlay"
+ hostonly="" instmods "loop" "overlay"
dracut_kernel_post
# Install squash image init script.
@@ -49,26 +74,9 @@ squash_install() {
}
squash_installpost() {
- local _img="$squashdir"/squash-root.img
- local _comp _file
-
- # shellcheck disable=SC2086
- if [[ $squash_compress ]]; then
- if ! mksquashfs /dev/null "$DRACUT_TMPDIR"/.squash-test.img -no-progress -comp $squash_compress &> /dev/null; then
- dwarn "mksquashfs doesn't support compressor '$squash_compress', failing back to default compressor."
- else
- _comp="$squash_compress"
- fi
- fi
+ local _file
- # shellcheck disable=SC2086
- if ! mksquashfs "$initdir" "$_img" \
- -no-xattrs -no-exports -noappend -no-recovery -always-use-fragments \
- -no-progress ${_comp:+-comp $_comp} \
- -e "$squashdir" 1> /dev/null; then
- dfatal "Failed making squash image"
- exit 1
- fi
+ DRACUT_SQUASH_POST_INST=1 module_install "$(squash_get_handler)"
# Rescue the dracut spec files so dracut rebuild and lsinitrd can work
for _file in "$initdir"/usr/lib/dracut/*; do
--
2.42.0

View File

@ -0,0 +1,128 @@
From 4e8ea763cb10ab4f3b65e865d2ad03c8a5393e04 Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Tue, 23 Jul 2024 17:42:33 +0200
Subject: [PATCH 19/24] feat(squash): add module 95squash-erofs
Allow squashing the image in 99squash using erofs. Keep squashfs as
default to not change existing systems. I.e. only use erofs if the user
explicitly include 95squash-erofs or when the prereqs for squashfs are
missing.
Signed-off-by: Philipp Rudo <prudo@redhat.com>
(cherry picked from commit e185d6ae1cc38af90f741d3d6c677458d69a345f)
Resolves: RHEL-43460
---
modules.d/95squash-erofs/module-setup.sh | 45 ++++++++++++++++++++++++
modules.d/99squash/init-squash.sh | 12 +++++--
modules.d/99squash/module-setup.sh | 4 ++-
3 files changed, 58 insertions(+), 3 deletions(-)
create mode 100755 modules.d/95squash-erofs/module-setup.sh
diff --git a/modules.d/95squash-erofs/module-setup.sh b/modules.d/95squash-erofs/module-setup.sh
new file mode 100755
index 00000000..71c2b672
--- /dev/null
+++ b/modules.d/95squash-erofs/module-setup.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+check() {
+ require_binaries mkfs.erofs || return 1
+ require_kernel_modules erofs || return 1
+
+ return 255
+}
+
+depends() {
+ echo "squash"
+ return 0
+}
+
+erofs_install() {
+ hostonly="" instmods "erofs"
+}
+
+erofs_installpost() {
+ local _img="$squashdir/erofs-root.img"
+ local -a _erofs_args
+
+ _erofs_args+=("--exclude-path=$squashdir")
+ _erofs_args+=("-E" "fragments")
+
+ if [[ -n $squash_compress ]]; then
+ if mkfs.erofs "${_erofs_args[@]}" -z "$squash_compress" "$_img" "$initdir" &> /dev/null; then
+ return
+ fi
+ dwarn "mkfs.erofs doesn't support compressor '$squash_compress', failing back to default compressor."
+ fi
+
+ if ! mkfs.erofs "${_erofs_args[@]}" "$_img" "$initdir" &> /dev/null; then
+ dfatal "Failed making squash image"
+ exit 1
+ fi
+}
+
+install() {
+ if [[ $DRACUT_SQUASH_POST_INST ]]; then
+ erofs_installpost
+ else
+ dstdir="$squashdir" erofs_install
+ fi
+}
diff --git a/modules.d/99squash/init-squash.sh b/modules.d/99squash/init-squash.sh
index 42a9a86f..31a39cfd 100755
--- a/modules.d/99squash/init-squash.sh
+++ b/modules.d/99squash/init-squash.sh
@@ -13,15 +13,23 @@ grep -q '^devtmpfs /dev devtmpfs' /proc/self/mounts \
grep -q '^tmpfs /run tmpfs' /proc/self/mounts \
|| (mkdir -p /run && mount -t tmpfs -o mode=755,noexec,nosuid,strictatime tmpfs /run)
+if [ -e /erofs-root.img ]; then
+ _fs=erofs
+ _img=erofs-root.img
+else
+ _fs=squashfs
+ _img=squashfs-root.img
+fi
+
# Load required modules
modprobe loop
-modprobe squashfs
+modprobe "$_fs"
modprobe overlay
# Mount the squash image
mount -t ramfs ramfs /squash
mkdir -p /squash/root /squash/overlay/upper /squash/overlay/work
-mount -t squashfs -o ro,loop /squashfs-root.img /squash/root
+mount -t "$_fs" -o ro,loop /"$_img" /squash/root
# Setup new root overlay
mkdir /newroot
diff --git a/modules.d/99squash/module-setup.sh b/modules.d/99squash/module-setup.sh
index 015944c2..5cbbec63 100755
--- a/modules.d/99squash/module-setup.sh
+++ b/modules.d/99squash/module-setup.sh
@@ -18,7 +18,7 @@ depends() {
squash_get_handler() {
local _module _handler
- for _module in squash-squashfs; do
+ for _module in squash-squashfs squash-erofs; do
if dracut_module_included "$_module"; then
_handler="$_module"
break
@@ -28,6 +28,8 @@ squash_get_handler() {
if [ -z "$_handler" ]; then
if check_module "squash-squashfs"; then
_handler="squash-squashfs"
+ elif check_module "squash-erofs"; then
+ _handler="squash-erofs"
else
dfatal "No valid handler for found"
return 1
--
2.42.0

View File

@ -1,87 +0,0 @@
From 55a56c546bde71fb42c99aadd96e98fca2199823 Mon Sep 17 00:00:00 2001
From: Laszlo Gombos <laszlo.gombos@gmail.com>
Date: Fri, 5 Apr 2024 15:50:20 +0200
Subject: [PATCH 19/23] fix(dracut): move hooks directory from /usr/lib to
/var/lib
Since https://github.com/systemd/systemd/commit/ffc1ec73, /usr is mounted as
read-only in the initramfs by default.
Fixes #2588
Co-authored-by: Antonio Alvarez Feijoo <antonio.feijoo@suse.com>
---
dracut-init.sh | 2 +-
dracut.sh | 6 +++++-
modules.d/99base/module-setup.sh | 5 ++++-
modules.d/99shutdown/module-setup.sh | 8 +++++---
4 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/dracut-init.sh b/dracut-init.sh
index c37038e3..1c7ca58a 100755
--- a/dracut-init.sh
+++ b/dracut-init.sh
@@ -630,7 +630,7 @@ inst_hook() {
dfatal "No such hook type $1. Aborting initrd creation."
exit 1
fi
- hook="/lib/dracut/hooks/${1}/${2}-${3##*/}"
+ hook="/var/lib/dracut/hooks/${1}/${2}-${3##*/}"
inst_simple "$3" "$hook"
chmod u+x "$initdir/$hook"
}
diff --git a/dracut.sh b/dracut.sh
index a0af3dd2..5d43f44c 100755
--- a/dracut.sh
+++ b/dracut.sh
@@ -1883,7 +1883,11 @@ mkdir -p "${initdir}"/lib/dracut
if [[ $kernel_only != yes ]]; then
mkdir -p "${initdir}/etc/cmdline.d"
- mkdir -m 0755 "${initdir}"/lib/dracut/hooks
+ mkdir -m 0755 -p "${initdir}"/var/lib/dracut/hooks
+
+ # symlink to old hooks location for compatibility
+ ln_r /var/lib/dracut/hooks /lib/dracut/hooks
+
for _d in $hookdirs; do
# shellcheck disable=SC2174
mkdir -m 0755 -p "${initdir}/lib/dracut/hooks/$_d"
diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh
index 54b0deb9..bfdc51d4 100755
--- a/modules.d/99base/module-setup.sh
+++ b/modules.d/99base/module-setup.sh
@@ -45,7 +45,10 @@ install() {
[ -e "${initdir}/lib" ] || mkdir -m 0755 -p "${initdir}"/lib
mkdir -m 0755 -p "${initdir}"/lib/dracut
- mkdir -m 0755 -p "${initdir}"/lib/dracut/hooks
+ mkdir -m 0755 -p "${initdir}"/var/lib/dracut/hooks
+
+ # symlink to old hooks location for compatibility
+ ln_r /var/lib/dracut/hooks /lib/dracut/hooks
mkdir -p "${initdir}"/tmp
diff --git a/modules.d/99shutdown/module-setup.sh b/modules.d/99shutdown/module-setup.sh
index 2b999024..f53017ff 100755
--- a/modules.d/99shutdown/module-setup.sh
+++ b/modules.d/99shutdown/module-setup.sh
@@ -17,9 +17,11 @@ install() {
inst_multiple umount poweroff reboot halt losetup stat sleep timeout
inst_multiple -o kexec
inst "$moddir/shutdown.sh" "$prefix/shutdown"
- [ -e "${initdir}/lib" ] || mkdir -m 0755 -p "${initdir}"/lib
- mkdir -m 0755 -p "${initdir}"/lib/dracut
- mkdir -m 0755 -p "${initdir}"/lib/dracut/hooks
+ mkdir -m 0755 -p "${initdir}"/var/lib/dracut/hooks
+
+ # symlink to old hooks location for compatibility
+ ln_r /var/lib/dracut/hooks /lib/dracut/hooks
+
for _d in $hookdirs shutdown shutdown-emergency; do
mkdir -m 0755 -p "${initdir}"/lib/dracut/hooks/"$_d"
done
--
2.42.0

View File

@ -0,0 +1,240 @@
From 327adc7782fd43f4cf9848f1c24f196c496b6b53 Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Tue, 23 Jul 2024 18:33:37 +0200
Subject: [PATCH 20/24] feat(lsinitrd): add support for erofs images
Add support to handle erofs images in lsinitrd. Unfortunately the erofs
tooling is missing some functionality of unsquashfs, esp. the ability to
extract single files and list the content of the image. Work around this
deficiency by always extracting the full image and emulate the missing
functionality as close as possible.
While at it also handle the rename of the squashfs image to
squashfs-root.img.
Signed-off-by: Philipp Rudo <prudo@redhat.com>
(cherry picked from commit 009b4ccc94fe3fcf129dddc5aca4f25b1e1b1862)
Resolves: RHEL-43460
---
lsinitrd.sh | 167 +++++++++++++++++++++++++++++++++++-----------------
1 file changed, 113 insertions(+), 54 deletions(-)
diff --git a/lsinitrd.sh b/lsinitrd.sh
index 1329ab70..952dbc9f 100755
--- a/lsinitrd.sh
+++ b/lsinitrd.sh
@@ -172,10 +172,47 @@ dracutlibdirs() {
done
}
+SQUASH_TMPFILE=""
+SQUASH_EXTRACT="$TMPDIR/squash-extract"
+
+extract_squash_img() {
+ local _img _tmp
+
+ [[ $SQUASH_TMPDIR == none ]] && return 1
+ [[ -s $SQUASH_TMPFILE ]] && return 0
+
+ # Before dracut 104 the image was named squash-root.img. Keep the old name
+ # so newer versions of lsinitrd can inspect initrds build with older dracut
+ # versions.
+ for _img in squash-root.img squashfs-root.img erofs-root.img; do
+ _tmp="$TMPDIR/$_img"
+ $CAT "$image" 2> /dev/null | cpio --extract --verbose --quiet --to-stdout -- \
+ $_img > "$_tmp" 2> /dev/null
+ [[ -s $_tmp ]] || continue
+
+ SQUASH_TMPFILE="$_tmp"
+
+ # fsck.erofs doesn't allow extracting single files or listing the
+ # content of the image. So always extract the full image.
+ if [[ $_img == erofs-root.img ]]; then
+ mkdir -p "$SQUASH_EXTRACT"
+ fsck.erofs --extract="$SQUASH_EXTRACT/erofs-root" --overwrite "$SQUASH_TMPFILE" 2> /dev/null
+ ((ret += $?))
+ fi
+
+ break
+ done
+
+ if [[ -z $SQUASH_TMPFILE ]]; then
+ SQUASH_TMPFILE=none
+ return 1
+ fi
+
+ return 0
+}
+
extract_files() {
- SQUASH_IMG="squash-root.img"
- SQUASH_TMPFILE="$TMPDIR/initrd.root.sqsh"
- SQUASH_EXTRACT="$TMPDIR/squash-extract"
+ local nofileinfo
((${#filenames[@]} == 1)) && nofileinfo=1
for f in "${!filenames[@]}"; do
@@ -183,18 +220,24 @@ extract_files() {
[[ $nofileinfo ]] || echo "========================================================================"
# shellcheck disable=SC2001
[[ $f == *"\\x"* ]] && f=$(echo "$f" | sed 's/\\x.\{2\}/????/g')
- $CAT "$image" 2> /dev/null | cpio --extract --verbose --quiet --to-stdout "$f" 2> /dev/null
- ((ret += $?))
- if [[ -z ${f/#squashfs-root*/} ]]; then
- if [[ ! -s $SQUASH_TMPFILE ]]; then
- $CAT "$image" 2> /dev/null | cpio --extract --verbose --quiet --to-stdout -- \
- $SQUASH_IMG > "$SQUASH_TMPFILE" 2> /dev/null
- fi
- unsquashfs -force -d "$SQUASH_EXTRACT" -no-progress "$SQUASH_TMPFILE" "${f#squashfs-root/}" > /dev/null 2>&1
- ((ret += $?))
- cat "$SQUASH_EXTRACT/${f#squashfs-root/}" 2> /dev/null
- rm "$SQUASH_EXTRACT/${f#squashfs-root/}" 2> /dev/null
- fi
+
+ case $f in
+ squashfs-root/*)
+ extract_squash_img
+ unsquashfs -force -d "$SQUASH_EXTRACT" -no-progress "$SQUASH_TMPFILE" "${f#squashfs-root/}" &> /dev/null
+ ((ret += $?))
+ cat "$SQUASH_EXTRACT/${f#squashfs-root/}" 2> /dev/null
+ ;;
+ erofs-root/*)
+ extract_squash_img
+ cat "$SQUASH_EXTRACT/$f" 2> /dev/null
+ ;;
+ *)
+ $CAT "$image" 2> /dev/null | cpio --extract --verbose --quiet --to-stdout "$f" 2> /dev/null
+ ((ret += $?))
+ ;;
+ esac
+
[[ $nofileinfo ]] || echo "========================================================================"
[[ $nofileinfo ]] || echo
done
@@ -220,66 +263,82 @@ list_files() {
}
list_squash_content() {
- SQUASH_IMG="squash-root.img"
- SQUASH_TMPFILE="$TMPDIR/initrd.root.sqsh"
+ extract_squash_img || return 0
- $CAT "$image" 2> /dev/null | cpio --extract --verbose --quiet --to-stdout -- \
- $SQUASH_IMG > "$SQUASH_TMPFILE" 2> /dev/null
- if [[ -s $SQUASH_TMPFILE ]]; then
- echo "Squashed content ($SQUASH_IMG):"
- echo "========================================================================"
- unsquashfs -d "squashfs-root" -ll "$SQUASH_TMPFILE" | tail -n +4
- echo "========================================================================"
- fi
+ echo "Squashed content (${SQUASH_TMPFILE##*/}):"
+ echo "========================================================================"
+ case $SQUASH_TMPFILE in
+ */squash-root.img | */squashfs-root.img)
+ unsquashfs -ll "$SQUASH_TMPFILE" | tail -n +4
+ ;;
+ */erofs-root.img)
+ (
+ cd "$SQUASH_EXTRACT" || return 1
+ find erofs-root/ -ls
+ )
+ ;;
+ esac
+ echo "========================================================================"
}
list_cmdline() {
- # depends on list_squash_content() having run before
- SQUASH_IMG="squash-root.img"
- SQUASH_TMPFILE="$TMPDIR/initrd.root.sqsh"
- SQUASH_EXTRACT="$TMPDIR/squash-extract"
echo "dracut cmdline:"
# shellcheck disable=SC2046
$CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- \
etc/cmdline.d/\*.conf 2> /dev/null
((ret += $?))
- if [[ -s $SQUASH_TMPFILE ]]; then
- unsquashfs -force -d "$SQUASH_EXTRACT" -no-progress "$SQUASH_TMPFILE" etc/cmdline.d/\*.conf > /dev/null 2>&1
- ((ret += $?))
- cat "$SQUASH_EXTRACT"/etc/cmdline.d/*.conf 2> /dev/null
- rm "$SQUASH_EXTRACT"/etc/cmdline.d/*.conf 2> /dev/null
- fi
+
+ extract_squash_img || return 0
+ case $SQUASH_TMPFILE in
+ */squash-root.img | */squashfs-root.img)
+ unsquashfs -force -d "$SQUASH_EXTRACT" -no-progress "$SQUASH_TMPFILE" etc/cmdline.d/\*.conf &> /dev/null
+ ((ret += $?))
+ cat "$SQUASH_EXTRACT"/etc/cmdline.d/*.conf 2> /dev/null
+ ;;
+ */erofs-root.img)
+ cat "$SQUASH_EXTRACT"/erofs-root/etc/cmdline.d/*.conf 2> /dev/null
+ ;;
+ esac
+
}
unpack_files() {
- SQUASH_IMG="squash-root.img"
- SQUASH_TMPFILE="$TMPDIR/initrd.root.sqsh"
-
if ((${#filenames[@]} > 0)); then
for f in "${!filenames[@]}"; do
# shellcheck disable=SC2001
[[ $f == *"\\x"* ]] && f=$(echo "$f" | sed 's/\\x.\{2\}/????/g')
- $CAT "$image" 2> /dev/null | cpio -id --quiet $verbose "$f"
- ((ret += $?))
- if [[ -z ${f/#squashfs-root*/} ]]; then
- if [[ ! -s $SQUASH_TMPFILE ]]; then
- $CAT "$image" 2> /dev/null | cpio --extract --verbose --quiet --to-stdout -- \
- $SQUASH_IMG > "$SQUASH_TMPFILE" 2> /dev/null
- fi
- unsquashfs -force -d "squashfs-root" -no-progress "$SQUASH_TMPFILE" "${f#squashfs-root/}" > /dev/null
- ((ret += $?))
- fi
+ case $f in
+ squashfs-root/*)
+ extract_squash_img || continue
+ unsquashfs -force -d "squashfs-root" -no-progress "$SQUASH_TMPFILE" "${f#squashfs-root/}" > /dev/null
+ ((ret += $?))
+ ;;
+ erofs-root/*)
+ extract_squash_img || continue
+ mkdir -p "${f%/*}"
+ cp -rf "$SQUASH_EXTRACT/$f" "$f"
+ ;;
+ *)
+ $CAT "$image" 2> /dev/null | cpio -id --quiet $verbose "$f"
+ ((ret += $?))
+ ;;
+ esac
done
else
$CAT "$image" 2> /dev/null | cpio -id --quiet $verbose
((ret += $?))
- $CAT "$image" 2> /dev/null | cpio --extract --verbose --quiet --to-stdout -- \
- $SQUASH_IMG > "$SQUASH_TMPFILE" 2> /dev/null
- if [[ -s $SQUASH_TMPFILE ]]; then
- unsquashfs -d "squashfs-root" -no-progress "$SQUASH_TMPFILE" > /dev/null
- ((ret += $?))
- fi
+
+ extract_squash_img || return 0
+ case $SQUASH_TMPFILE in
+ */squash-root.img | */squashfs-root.img)
+ unsquashfs -d "squashfs-root" -no-progress "$SQUASH_TMPFILE" > /dev/null
+ ((ret += $?))
+ ;;
+ */erofs-root.img)
+ cp -rf "$SQUASH_EXTRACT/erofs-root" .
+ ;;
+ esac
fi
}
--
2.42.0

View File

@ -1,72 +0,0 @@
From bad2bc80cdcfac8915374497cc47ce9d5670d015 Mon Sep 17 00:00:00 2001
From: Antonio Alvarez Feijoo <antonio.feijoo@suse.com>
Date: Thu, 4 Apr 2024 13:49:26 +0200
Subject: [PATCH 20/23] fix(systemd): explicitly install some libs that will
not be statically included
Some required libraries that used to be statically included are in the process
to be opened via `dlopen()`.
References:
- https://github.com/systemd/systemd/pull/31131
- https://github.com/systemd/systemd/pull/31550
- https://github.com/systemd/systemd/pull/32019
Closes #2642
---
modules.d/00systemd/module-setup.sh | 2 ++
modules.d/01systemd-coredump/module-setup.sh | 7 +++++++
modules.d/01systemd-journald/module-setup.sh | 5 +++--
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/modules.d/00systemd/module-setup.sh b/modules.d/00systemd/module-setup.sh
index 66e08ea6..72341746 100755
--- a/modules.d/00systemd/module-setup.sh
+++ b/modules.d/00systemd/module-setup.sh
@@ -260,6 +260,8 @@ EOF
# Install library file(s)
_arch=${DRACUT_ARCH:-$(uname -m)}
inst_libdir_file \
+ {"tls/$_arch/",tls/,"$_arch/",}"libgcrypt.so*" \
+ {"tls/$_arch/",tls/,"$_arch/",}"libkmod.so*" \
{"tls/$_arch/",tls/,"$_arch/",}"libnss_*"
}
diff --git a/modules.d/01systemd-coredump/module-setup.sh b/modules.d/01systemd-coredump/module-setup.sh
index 69ec9668..47666b6c 100755
--- a/modules.d/01systemd-coredump/module-setup.sh
+++ b/modules.d/01systemd-coredump/module-setup.sh
@@ -40,6 +40,13 @@ install() {
"$sysusers"/systemd-coredump.conf \
coredumpctl
+ # Install library file(s)
+ _arch=${DRACUT_ARCH:-$(uname -m)}
+ inst_libdir_file \
+ {"tls/$_arch/",tls/,"$_arch/",}"liblz4.so.*" \
+ {"tls/$_arch/",tls/,"$_arch/",}"liblzma.so.*" \
+ {"tls/$_arch/",tls/,"$_arch/",}"libzstd.so.*"
+
# Install the hosts local user configurations if enabled.
if [[ $hostonly ]]; then
inst_multiple -H -o \
diff --git a/modules.d/01systemd-journald/module-setup.sh b/modules.d/01systemd-journald/module-setup.sh
index 3cf2a1a1..276e7528 100755
--- a/modules.d/01systemd-journald/module-setup.sh
+++ b/modules.d/01systemd-journald/module-setup.sh
@@ -53,9 +53,10 @@ install() {
# Install library file(s)
_arch=${DRACUT_ARCH:-$(uname -m)}
inst_libdir_file \
+ {"tls/$_arch/",tls/,"$_arch/",}"libgcrypt.so*" \
{"tls/$_arch/",tls/,"$_arch/",}"liblz4.so.*" \
- {"tls/$_arch/",tls/,"$_arch/",}"libzstd.so.*" \
- {"tls/$_arch/",tls/,"$_arch/",}"liblzma.so.*"
+ {"tls/$_arch/",tls/,"$_arch/",}"liblzma.so.*" \
+ {"tls/$_arch/",tls/,"$_arch/",}"libzstd.so.*"
# Install the hosts local user configurations if enabled.
if [[ $hostonly ]]; then
--
2.42.0

View File

@ -0,0 +1,59 @@
From 0d90ae671e130b631383fb481a1f38a175167eff Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Tue, 30 Jul 2024 17:24:28 +0200
Subject: [PATCH 21/24] feat(dracut-initramfs-restore): unpack erofs images
Follow the example for squashfs images and also unpack erofs images in
dracut-initramfs-restore.
Signed-off-by: Philipp Rudo <prudo@redhat.com>
(cherry picked from commit b390e194911835e6bd24eeeb0946e374852b8ddc)
Resolves: RHEL-43460
---
dracut-initramfs-restore.sh | 10 ++++++++--
modules.d/95squash-erofs/module-setup.sh | 2 +-
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/dracut-initramfs-restore.sh b/dracut-initramfs-restore.sh
index cc561b22..015160b7 100755
--- a/dracut-initramfs-restore.sh
+++ b/dracut-initramfs-restore.sh
@@ -74,12 +74,18 @@ else
exit 1
fi
-if [[ -d squash ]]; then
- if ! unsquashfs -no-xattrs -f -d . squash-root.img > /dev/null; then
+if [[ -f squashfs-root.img ]]; then
+ if ! unsquashfs -no-xattrs -f -d . squashfs-root.img > /dev/null; then
echo "Squash module is enabled for this initramfs but failed to unpack squash-root.img" >&2
rm -f -- /run/initramfs/shutdown
exit 1
fi
+elif [[ -f erofs-root.img ]]; then
+ if ! fsck.erofs --extract=. --overwrite erofs-root.img > /dev/null; then
+ echo "Squash module is enabled for this initramfs but failed to unpack erofs-root.img" >&2
+ rm -f -- /run/initramfs/shutdown
+ exit 1
+ fi
fi
if grep -q -w selinux /sys/kernel/security/lsm 2> /dev/null \
diff --git a/modules.d/95squash-erofs/module-setup.sh b/modules.d/95squash-erofs/module-setup.sh
index 71c2b672..d763a902 100755
--- a/modules.d/95squash-erofs/module-setup.sh
+++ b/modules.d/95squash-erofs/module-setup.sh
@@ -1,7 +1,7 @@
#!/bin/bash
check() {
- require_binaries mkfs.erofs || return 1
+ require_binaries mkfs.erofs fsck.erofs || return 1
require_kernel_modules erofs || return 1
return 255
--
2.42.0

View File

@ -1,54 +0,0 @@
From 10b86edba3ffe0ce13c5f43ff0193cdf04661358 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Thu, 21 Sep 2023 14:31:07 +0200
Subject: [PATCH 21/23] fix(nvmf): move /etc/nvme/host{nqn,id} requirement to
hostonly
When creating initramfs for universal boot image such as an installer,
we can't include any machine-specific IDs. Let's move the check
for /etc/nvme/hostnqn and /etc/nvme/hostid files presence to
the hostonly section to avoid unsatisfied requirements.
Signed-off-by: Tomas Bzatek <tbzatek@redhat.com>
Resolves: #2266331
---
modules.d/95nvmf/module-setup.sh | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/modules.d/95nvmf/module-setup.sh b/modules.d/95nvmf/module-setup.sh
index a8f30341..6a1e3f5b 100755
--- a/modules.d/95nvmf/module-setup.sh
+++ b/modules.d/95nvmf/module-setup.sh
@@ -3,8 +3,6 @@
# called by dracut
check() {
require_binaries nvme jq || return 1
- [ -f /etc/nvme/hostnqn ] || return 255
- [ -f /etc/nvme/hostid ] || return 255
is_nvmf() {
local _dev=$1
@@ -36,6 +34,8 @@ check() {
}
[[ $hostonly ]] || [[ $mount_needs ]] && {
+ [ -f /etc/nvme/hostnqn ] || return 255
+ [ -f /etc/nvme/hostid ] || return 255
pushd . > /dev/null
for_each_host_dev_and_slaves is_nvmf
local _is_nvmf=$?
@@ -130,8 +130,8 @@ install() {
_nvmf_args=$(cmdline)
[[ "$_nvmf_args" ]] && printf "%s" "$_nvmf_args" >> "${initdir}/etc/cmdline.d/95nvmf-args.conf"
fi
- inst_simple "/etc/nvme/hostnqn"
- inst_simple "/etc/nvme/hostid"
+ inst_simple -H "/etc/nvme/hostnqn"
+ inst_simple -H "/etc/nvme/hostid"
inst_multiple ip sed
--
2.42.0

View File

@ -0,0 +1,55 @@
From a3ca60929c50f1a1d41cf4567e3a4a8231a92642 Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Tue, 30 Jul 2024 13:35:17 +0200
Subject: [PATCH 22/24] fix(squash): explicitly create required directories
At the moment 99squash relies on dracut-install to create the required
directories it later links to. This approach is error prone and will
cause problems when switching to use 99busybox later on, which tries to
add a link to /usr/sbin that hasn't been created. Thus explicitly
create the expected directories before installing the minimal initrd.
Signed-off-by: Philipp Rudo <prudo@redhat.com>
(cherry picked from commit dde95b10ff6b28330370fd697350f8bc5da422da)
Related: RHEL-43460
---
modules.d/99squash/module-setup.sh | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/modules.d/99squash/module-setup.sh b/modules.d/99squash/module-setup.sh
index 5cbbec63..6aa649b7 100755
--- a/modules.d/99squash/module-setup.sh
+++ b/modules.d/99squash/module-setup.sh
@@ -40,12 +40,15 @@ squash_get_handler() {
}
squash_install() {
- local _busybox
+ local _busybox _dir
_busybox=$(find_binary busybox)
- # Create mount points for squash loader
- mkdir -p "$initdir"/squash/
- mkdir -p "$squashdir"/squash/
+ # Create mount points for squash loader and basic directories
+ mkdir -p "$initdir"/squash
+ for _dir in squash usr/bin usr/sbin usr/lib; do
+ mkdir -p "$squashdir/$_dir"
+ [[ $_dir == usr/* ]] && ln_r "/$_dir" "${_dir#usr}"
+ done
# Install required modules and binaries for the squash image init script.
if [[ $_busybox ]]; then
@@ -67,8 +70,6 @@ squash_install() {
dracut_kernel_post
# Install squash image init script.
- ln_r /usr/bin /bin
- ln_r /usr/sbin /sbin
inst_simple "$moddir"/init-squash.sh /init
# make sure that library links are correct and up to date for squash loader
--
2.42.0

View File

@ -0,0 +1,64 @@
From a6e8e41cd1d67bb4ee64b2bf107e98c18bf8afdf Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Tue, 30 Jul 2024 13:44:32 +0200
Subject: [PATCH 23/24] fix(squash): use 99busybox instead of installing it
manually
Make use of 99busybox in 99squash rather than installing it manually.
This not only removes duplicate code but allows mixing of busybox with
tools from coreutils. This requires a small change in 99busybox to
remove the hard coded use of $initdir.
Suggested-by: Laszlo Gombos <laszlo.gombos@gmail.com>
Signed-off-by: Philipp Rudo <prudo@redhat.com>
(cherry picked from commit 395366278f473038badba239f76cac391428b149)
Related: RHEL-43460
---
modules.d/05busybox/module-setup.sh | 5 +++++
modules.d/99squash/module-setup.sh | 5 +----
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/modules.d/05busybox/module-setup.sh b/modules.d/05busybox/module-setup.sh
index 86b3761a..857145c9 100755
--- a/modules.d/05busybox/module-setup.sh
+++ b/modules.d/05busybox/module-setup.sh
@@ -15,6 +15,7 @@ depends() {
# called by dracut
install() {
local _i _path _busybox
+ local _dstdir="${dstdir:-"$initdir"}"
local _progs=()
_busybox=$(find_binary busybox)
inst "$_busybox" /usr/bin/busybox
@@ -26,6 +27,10 @@ install() {
for _i in "${_progs[@]}"; do
_path=$(find_binary "$_i")
[ -z "$_path" ] && continue
+
+ # do not remove existing destination files
+ [ -e "${_dstdir}/$_path" ] && continue
+
ln_r /usr/bin/busybox "$_path"
done
}
diff --git a/modules.d/99squash/module-setup.sh b/modules.d/99squash/module-setup.sh
index 6aa649b7..56f70774 100755
--- a/modules.d/99squash/module-setup.sh
+++ b/modules.d/99squash/module-setup.sh
@@ -52,10 +52,7 @@ squash_install() {
# Install required modules and binaries for the squash image init script.
if [[ $_busybox ]]; then
- inst "$_busybox" /usr/bin/busybox
- for _i in sh echo mount modprobe mkdir switch_root grep umount; do
- ln_r /usr/bin/busybox /usr/bin/$_i
- done
+ module_install "busybox"
else
DRACUT_RESOLVE_DEPS=1 inst_multiple sh mount modprobe mkdir switch_root grep umount
--
2.42.0

View File

@ -0,0 +1,69 @@
From 3b4fe88a4259ec576a41d98b6aaee324a6b48b0f Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com>
Date: Wed, 10 Jul 2024 16:30:09 -0700
Subject: [PATCH 24/24] feat(dmdquash-live): add support for using erofs
This adds support for rootfs compressed with erofs. Either as a plain
erofs image or a LiveOS/rootfs.img ext4 filesystem compressed with
erofs.
This patch does not make any attempt to change the squashfs directory
naming (or variable names) in order to make these changes as small as
possible and easy to review. It also does not make any attempt to
support the multitude of available options other than what is needed by
anaconda-dracut calling this script to setup the boot.iso root
filesystem.
(which isn't to say it doesn't work, it just hasn't been tested and is
outside the scope of this change).
(cherry picked commit ca5ae5d3466eec40d118fc96d450478aa6faebb6)
Resolves: RHEL-43460
---
modules.d/90dmsquash-live/dmsquash-live-root.sh | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh
index 4518852b..a376185e 100755
--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh
+++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh
@@ -97,7 +97,6 @@ det_img_fs() {
blkid -s TYPE -u noraid -o value "$1"
}
-load_fstype squashfs
CMDLINE=$(getcmdline)
for arg in $CMDLINE; do
case $arg in
@@ -112,14 +111,15 @@ if [ -f "$livedev" ]; then
# check filesystem type and handle accordingly
fstype=$(det_img_fs "$livedev")
case $fstype in
- squashfs) SQUASHED=$livedev ;;
- auto) die "cannot mount live image (unknown filesystem type)" ;;
+ squashfs | erofs) SQUASHED=$livedev ;;
+ auto) die "cannot mount live image (unknown filesystem type $fstype)" ;;
*) FSIMG=$livedev ;;
esac
load_fstype "$fstype"
else
livedev_fstype=$(det_fs "$livedev")
- if [ "$livedev_fstype" = "squashfs" ]; then
+ load_fstype "$livedev_fstype"
+ if [ "$livedev_fstype" = "squashfs" ] || [ "$livedev_fstype" = "erofs" ]; then
# no mount needed - we've already got the LiveOS image in $livedev
SQUASHED=$livedev
elif [ "$livedev_fstype" != "ntfs" ]; then
@@ -336,7 +336,7 @@ if [ -e "$SQUASHED" ]; then
SQUASHED_LOOPDEV=$(losetup -f)
losetup -r "$SQUASHED_LOOPDEV" $SQUASHED
mkdir -m 0755 -p /run/initramfs/squashfs
- mount -n -t squashfs -o ro "$SQUASHED_LOOPDEV" /run/initramfs/squashfs
+ mount -n -o ro "$SQUASHED_LOOPDEV" /run/initramfs/squashfs
if [ -d /run/initramfs/squashfs/LiveOS ]; then
if [ -f /run/initramfs/squashfs/LiveOS/rootfs.img ]; then
--
2.42.0

View File

@ -7,8 +7,8 @@
%global __requires_exclude pkg-config %global __requires_exclude pkg-config
Name: dracut Name: dracut
Version: 101 Version: 102
Release: 2%{?dist} Release: 1%{?dist}
Summary: Initramfs generator using udev Summary: Initramfs generator using udev
@ -22,79 +22,82 @@ URL: https://github.com/dracut-ng/dracut-ng/wiki/
Source0: https://github.com/dracut-ng/dracut-ng/archive/refs/tags/%{version}.tar.gz Source0: https://github.com/dracut-ng/dracut-ng/archive/refs/tags/%{version}.tar.gz
Source1: https://www.gnu.org/licenses/lgpl-2.1.txt Source1: https://www.gnu.org/licenses/lgpl-2.1.txt
# feat(kernel-install): do nothing when $KERNEL_INSTALL_INITRD_GENERATOR says so
# Author: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Patch1: 0001-feat-kernel-install-do-nothing-when-KERNEL_INSTALL_I.patch
# fix(kernel-install): do not generate an initrd when one was specified
# Author: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Patch2: 0002-fix-kernel-install-do-not-generate-an-initrd-when-on.patch
# refactor(cms): use zdev to simplify handling CMSDASD=... boot option
# Author: Steffen Maier <maier@linux.ibm.com>
Patch3: 0003-refactor-cms-use-zdev-to-simplify-handling-CMSDASD-..patch
# refactor(cms): use consolidated zfcp config with zdev from s390-tools
# Author: Steffen Maier <maier@linux.ibm.com>
Patch4: 0004-refactor-cms-use-consolidated-zfcp-config-with-zdev-.patch
# refactor(cms): use consolidated dasd config with zdev from s390-tools
# Author: Steffen Maier <maier@linux.ibm.com>
Patch5: 0005-refactor-cms-use-consolidated-dasd-config-with-zdev-.patch
# refactor(cms): use consolidated network config with zdev from s390-tools
# Author: Steffen Maier <maier@linux.ibm.com>
Patch6: 0006-refactor-cms-use-consolidated-network-config-with-zd.patch
# refactor(cms): remove now unnecessary inclusion of full s390utils-base
# Author: Steffen Maier <maier@linux.ibm.com>
Patch7: 0007-refactor-cms-remove-now-unnecessary-inclusion-of-ful.patch
# feat(zfcp_rules): remove zfcp handling consolidated in s390-tools
# Author: Steffen Maier <maier@linux.ibm.com>
Patch8: 0008-feat-zfcp_rules-remove-zfcp-handling-consolidated-in.patch
# feat(zfcp): minimize zfcp handling consolidated in s390-tools
# Author: Steffen Maier <maier@linux.ibm.com>
Patch9: 0009-feat-zfcp-minimize-zfcp-handling-consolidated-in-s39.patch
# feat(dasd_rules): remove dasd handling consolidated in s390-tools
# Author: Steffen Maier <maier@linux.ibm.com>
Patch10: 0010-feat-dasd_rules-remove-dasd-handling-consolidated-in.patch
# feat(dasd_mod): minimize dasd handling consolidated in s390-tools
# Author: Steffen Maier <maier@linux.ibm.com>
Patch11: 0011-feat-dasd_mod-minimize-dasd-handling-consolidated-in.patch
# feat(dasd): minimize dasd handling consolidated in s390-tools
# Author: Steffen Maier <maier@linux.ibm.com>
Patch12: 0012-feat-dasd-minimize-dasd-handling-consolidated-in-s39.patch
# feat(znet): use zdev for consolidated device configuration
# Author: Steffen Maier <maier@linux.ibm.com>
Patch13: 0013-feat-znet-use-zdev-for-consolidated-device-configura.patch
# docs(dracut.cmdline): generalize description of rd.znet
# Author: Steffen Maier <maier@linux.ibm.com>
Patch14: 0014-docs-dracut.cmdline-generalize-description-of-rd.zne.patch
# feat(qeth_rules): remove qeth handling consolidated in 95znet
# Author: Steffen Maier <maier@linux.ibm.com>
Patch15: 0015-feat-qeth_rules-remove-qeth-handling-consolidated-in.patch
# fix(znet): append to udev rules so each rd.znet_ifname is effective
# Author: Steffen Maier <maier@linux.ibm.com>
Patch16: 0016-fix-znet-append-to-udev-rules-so-each-rd.znet_ifname.patch
# refactor(ifcfg): delete code duplication using iface_get_subchannels()
# Author: Steffen Maier <maier@linux.ibm.com>
Patch17: 0017-refactor-ifcfg-delete-code-duplication-using-iface_g.patch
# feat(ifcfg): minimize s390-specific network configuration aspects
# Author: Steffen Maier <maier@linux.ibm.com>
Patch18: 0018-feat-ifcfg-minimize-s390-specific-network-configurat.patch
# fix(dracut): move hooks directory from /usr/lib to /var/lib
# Author: Laszlo Gombos <laszlo.gombos@gmail.com>
Patch19: 0019-fix-dracut-move-hooks-directory-from-usr-lib-to-var-.patch
# fix(systemd): explicitly install some libs that will not be statically included
# Author: Antonio Alvarez Feijoo <antonio.feijoo@suse.com>
Patch20: 0020-fix-systemd-explicitly-install-some-libs-that-will-n.patch
# fix(nvmf): move /etc/nvme/host{nqn,id} requirement to hostonly
# Author: Tomas Bzatek <tbzatek@redhat.com>
Patch21: 0021-fix-nvmf-move-etc-nvme-host-nqn-id-requirement-to-ho.patch
# feat(hwdb): add hwdb module to install hwdb.bin on demand # feat(hwdb): add hwdb module to install hwdb.bin on demand
# Author: Pavel Valena <pvalena@redhat.com> # Author: Pavel Valena <pvalena@redhat.com>
Patch22: 0022-feat-hwdb-add-hwdb-module-to-install-hwdb.bin-on-dem.patch Patch0001: 0001-feat-hwdb-add-hwdb-module-to-install-hwdb.bin-on-dem.patch
# fix(rngd): install system service file # fix(rngd): install system service file
# Author: Pavel Valena <pvalena@redhat.com> # Author: Pavel Valena <pvalena@redhat.com>
Patch23: 0023-fix-rngd-install-system-service-file.patch Patch0002: 0002-fix-rngd-install-system-service-file.patch
# revert: "fix(install.d): correctly install pre-genned image and die if no args"
# Author: Pavel Valena <pvalena@redhat.com>
Patch0003: 0003-revert-fix-install.d-correctly-install-pre-genned-im.patch
# feat(kernel-install): do nothing when $KERNEL_INSTALL_INITRD_GENERATOR says so
# Author: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Patch0004: 0004-feat-kernel-install-do-nothing-when-KERNEL_INSTALL_I.patch
# fix(kernel-install): do not generate an initrd when one was specified
# Author: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Patch0005: 0005-fix-kernel-install-do-not-generate-an-initrd-when-on.patch
# fix(crypt): decryption when rd.luks.name is set
# Author: Laszlo Gombos <laszlo.gombos@gmail.com>
Patch0006: 0006-fix-crypt-decryption-when-rd.luks.name-is-set.patch
# fix: incorrectly applied patch in commit c6d18c3c71597e78572378fc4dde391f1845b8
# Author: Pavel Valena <pvalena@redhat.com>
Patch0007: 0007-fix-incorrectly-applied-patch-in-commit-c6d18c3c7159.patch
# revert: "fix(crypt): unlock encrypted devices by default during boot"
# Author: Pavel Valena <pvalena@redhat.com>
Patch0008: 0008-revert-fix-crypt-unlock-encrypted-devices-by-default.patch
# fix(90kernel-modules): install blk modules using symbol blk_alloc_disk
# Author: Pavel Valena <pvalena@redhat.com>
Patch0009: 0009-fix-90kernel-modules-install-blk-modules-using-symbo.patch
# test: do not force include dash, let sh module make a selection
# Author: Laszlo Gombos <laszlo.gombos@gmail.com>
Patch0010: 0010-test-do-not-force-include-dash-let-sh-module-make-a-.patch
# fix(dracut-functions): allow for \ in get_maj_min file path
# Author: Pavel Valena <pvalena@redhat.com>
Patch0011: 0011-fix-dracut-functions-allow-for-in-get_maj_min-file-p.patch
# fix(dracut-functions.sh): only return block devices from get_persistent_dev
# Author: Fabian Vogt <fvogt@suse.de>
Patch0012: 0012-fix-dracut-functions.sh-only-return-block-devices-fr.patch
# feat(systemd*): include systemd config files from /usr/lib/systemd
# Author: Pavel Valena <pvalena@redhat.com>
Patch0013: 0013-feat-systemd-include-systemd-config-files-from-usr-l.patch
# fix(resume): always include the resume module
# Author: Pavel Valena <pvalena@redhat.com>
Patch0014: 0014-fix-resume-always-include-the-resume-module.patch
# feat(dracut-init.sh): allow changing the destination directory for inst et al
# Author: Philipp Rudo <prudo@redhat.com>
Patch0015: 0015-feat-dracut-init.sh-allow-changing-the-destination-d.patch
# fix(dracut-init.sh): add module to mods_to_load before checking dependencies
# Author: Philipp Rudo <prudo@redhat.com>
Patch0016: 0016-fix-dracut-init.sh-add-module-to-mods_to_load-before.patch
# feat(squash): move mksquashfs to 99squash/modules-setup
# Author: Philipp Rudo <prudo@redhat.com>
Patch0017: 0017-feat-squash-move-mksquashfs-to-99squash-modules-setu.patch
# feat(squash): split 95squash-squashfs from 99squash
# Author: Philipp Rudo <prudo@redhat.com>
Patch0018: 0018-feat-squash-split-95squash-squashfs-from-99squash.patch
# feat(squash): add module 95squash-erofs
# Author: Philipp Rudo <prudo@redhat.com>
Patch0019: 0019-feat-squash-add-module-95squash-erofs.patch
# feat(lsinitrd): add support for erofs images
# Author: Philipp Rudo <prudo@redhat.com>
Patch0020: 0020-feat-lsinitrd-add-support-for-erofs-images.patch
# feat(dracut-initramfs-restore): unpack erofs images
# Author: Philipp Rudo <prudo@redhat.com>
Patch0021: 0021-feat-dracut-initramfs-restore-unpack-erofs-images.patch
# fix(squash): explicitly create required directories
# Author: Philipp Rudo <prudo@redhat.com>
Patch0022: 0022-fix-squash-explicitly-create-required-directories.patch
# fix(squash): use 99busybox instead of installing it manually
# Author: Philipp Rudo <prudo@redhat.com>
Patch0023: 0023-fix-squash-use-99busybox-instead-of-installing-it-ma.patch
# feat(dmdquash-live): add support for using erofs
# Author: Brian C. Lane <bcl@redhat.com>
Patch0024: 0024-feat-dmdquash-live-add-support-for-using-erofs.patch
# Please use source-git to work with this spec file: # Please use source-git to work with this spec file:
# HowTo: https://packit.dev/source-git/work-with-source-git # HowTo: https://packit.dev/source-git/work-with-source-git
# Source-git repository: https://github.com/redhat-plumbers/dracut-rhel10 # Source-git repository: https://github.com/redhat-plumbers/dracut-rhel10/
BuildRequires: bash BuildRequires: bash
BuildRequires: git-core BuildRequires: git-core
@ -213,6 +216,7 @@ This package contains tools to assemble the local initrd and host configuration.
Summary: dracut module to build an initramfs with most files in a squashfs image Summary: dracut module to build an initramfs with most files in a squashfs image
Requires: %{name} = %{version}-%{release} Requires: %{name} = %{version}-%{release}
Requires: squashfs-tools Requires: squashfs-tools
Suggests: erofs-utils
%description squash %description squash
This package provides a dracut module to build an initramfs, but store most files This package provides a dracut module to build an initramfs, but store most files
@ -322,6 +326,7 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
%{dracutlibdir}/modules.d/01fips %{dracutlibdir}/modules.d/01fips
%{dracutlibdir}/modules.d/01systemd-ac-power %{dracutlibdir}/modules.d/01systemd-ac-power
%{dracutlibdir}/modules.d/01systemd-ask-password %{dracutlibdir}/modules.d/01systemd-ask-password
%{dracutlibdir}/modules.d/01systemd-bsod
%{dracutlibdir}/modules.d/01systemd-coredump %{dracutlibdir}/modules.d/01systemd-coredump
%{dracutlibdir}/modules.d/01systemd-creds %{dracutlibdir}/modules.d/01systemd-creds
%{dracutlibdir}/modules.d/01systemd-hostnamed %{dracutlibdir}/modules.d/01systemd-hostnamed
@ -374,9 +379,12 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
%{dracutlibdir}/modules.d/90mdraid %{dracutlibdir}/modules.d/90mdraid
%{dracutlibdir}/modules.d/90multipath %{dracutlibdir}/modules.d/90multipath
%{dracutlibdir}/modules.d/90nvdimm %{dracutlibdir}/modules.d/90nvdimm
%{dracutlibdir}/modules.d/90numlock
%{dracutlibdir}/modules.d/90overlayfs %{dracutlibdir}/modules.d/90overlayfs
%{dracutlibdir}/modules.d/90ppcmac %{dracutlibdir}/modules.d/90ppcmac
%{dracutlibdir}/modules.d/90pcmcia
%{dracutlibdir}/modules.d/90qemu %{dracutlibdir}/modules.d/90qemu
%{dracutlibdir}/modules.d/90systemd-cryptsetup
%{dracutlibdir}/modules.d/91crypt-gpg %{dracutlibdir}/modules.d/91crypt-gpg
%{dracutlibdir}/modules.d/91crypt-loop %{dracutlibdir}/modules.d/91crypt-loop
%{dracutlibdir}/modules.d/91fido2 %{dracutlibdir}/modules.d/91fido2
@ -482,6 +490,8 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
%files squash %files squash
%{dracutlibdir}/modules.d/99squash %{dracutlibdir}/modules.d/99squash
%{dracutlibdir}/modules.d/95squash-erofs
%{dracutlibdir}/modules.d/95squash-squashfs
%files config-generic %files config-generic
%{dracutlibdir}/dracut.conf.d/02-generic-image.conf %{dracutlibdir}/dracut.conf.d/02-generic-image.conf
@ -491,6 +501,10 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
%{_prefix}/lib/kernel/install.d/51-dracut-rescue.install %{_prefix}/lib/kernel/install.d/51-dracut-rescue.install
%changelog %changelog
* Tue Jun 04 2024 Pavel Valena <pvalena@redhat.com> - 102-1
- Update to dracut 102.
Resolves: RHEL-43460,RHEL-32237,RHEL-32506,RHEL-43460,RHEL-47145,RHEL-49744,RHEL-53350
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 101-2 * Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 101-2
- Bump release for June 2024 mass rebuild - Bump release for June 2024 mass rebuild

View File

@ -1 +1 @@
SHA512 (101.tar.gz) = 827f073b749a374b703f317ba249479312043ed54af82609ce45332c27349870a68a1d9883118e0a3ecd1cbb33d64aca8bcf6aac56eb75f721fd3380bd12005b SHA512 (102.tar.gz) = 463ad75f0508392431d58796763a41accf5a1dc17fe27d36e37d588153ca9c5b32b453faa9149524ea2dc2906805126d1e023feecb6554206595a972508f6a32