From: "'Felix Moessbauer' via isar-users" <isar-users@googlegroups.com>
To: isar-users@googlegroups.com
Cc: quirin.gylstorff@siemens.com, jan.kiszka@siemens.com,
Felix Moessbauer <felix.moessbauer@siemens.com>
Subject: [PATCH 3/8] initramfs: move dracut logic to initrd-dracut class
Date: Tue, 15 Sep 2026 12:01:20 +0200 [thread overview]
Message-ID: <20260915100125.1991311-4-felix.moessbauer@siemens.com> (raw)
In-Reply-To: <20260915100125.1991311-1-felix.moessbauer@siemens.com>
As a preparation to extend the dracut logic for cross, we move it to the
initrd-dracut class. This also gives a cleaner interface for initrd
generation, as both mkinitramfs and dracut can now be generated by
inheriting the initramfs.bbclass.
Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
---
.../recipes-initramfs/images/isar-dracut.bb | 4 ++-
meta/classes-recipe/initramfs.bbclass | 2 ++
meta/classes-recipe/initrd-dracut.bbclass | 7 ++++-
meta/classes-recipe/rootfs.bbclass | 28 ++++++++++++-------
4 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/meta-isar/recipes-initramfs/images/isar-dracut.bb b/meta-isar/recipes-initramfs/images/isar-dracut.bb
index c75b69e3..efd6d1ec 100644
--- a/meta-isar/recipes-initramfs/images/isar-dracut.bb
+++ b/meta-isar/recipes-initramfs/images/isar-dracut.bb
@@ -4,7 +4,9 @@
#
# This software is a part of Isar.
-inherit initrd-dracut
+INITRAMFS_USE_DRACUT = "1"
+
+inherit initramfs
# Debian packages that should be installed into the system for building the
# initramfs. E.g. the cryptsetup package which contains initramfs scripts for
diff --git a/meta/classes-recipe/initramfs.bbclass b/meta/classes-recipe/initramfs.bbclass
index 45626319..41828487 100644
--- a/meta/classes-recipe/initramfs.bbclass
+++ b/meta/classes-recipe/initramfs.bbclass
@@ -10,6 +10,7 @@ INITRAMFS_PREINSTALL ?= ""
INITRAMFS_ROOTFS ?= "${WORKDIR}/rootfs"
INITRAMFS_IMAGE_NAME = "${INITRAMFS_FULLNAME}-initrd.img"
INITRAMFS_GENERATOR_PKG ??= "initramfs-tools"
+INITRAMFS_USE_DRACUT ??= "0"
INITRD_DEPLOY_FILE = "${INITRAMFS_IMAGE_NAME}"
# Install proper kernel
@@ -28,6 +29,7 @@ DEPENDS += "${INITRAMFS_INSTALL}"
ROOTFSDIR = "${INITRAMFS_ROOTFS}"
ROOTFS_FEATURES += "generate-manifest generate-sbom generate-initrd"
ROOTFS_PACKAGES = "${INITRAMFS_GENERATOR_PKG} ${INITRAMFS_PREINSTALL} ${INITRAMFS_INSTALL}"
+ROOTFS_USE_DRACUT ?= "${INITRAMFS_USE_DRACUT}"
# validate whether there are incompatible packages in the installation list
python do_validate_rootfs_packages () {
diff --git a/meta/classes-recipe/initrd-dracut.bbclass b/meta/classes-recipe/initrd-dracut.bbclass
index 542b1fbe..c2018f03 100644
--- a/meta/classes-recipe/initrd-dracut.bbclass
+++ b/meta/classes-recipe/initrd-dracut.bbclass
@@ -53,6 +53,11 @@ def extend_dracut_cmdline(d):
cmdline.append(f'--add "{extra_modules}"')
return ' '.join(cmdline)
+ROOTFS_INITRAMFS_GENERATOR_CMDLINE = "dracut --force --kver $kernel_version"
ROOTFS_INITRAMFS_GENERATOR_CMDLINE:append = " ${@ extend_dracut_cmdline(d)}"
-inherit initramfs
+run_initrd_generator() {
+ mods_total="$(find ${ROOTFSDIR}/usr/lib/modules/$kernel_version -type f -name '*.ko*' | wc -l)"
+ echo "Total number of modules: $mods_total (dracut)"
+ run_in_chroot "${ROOTFSDIR}" sh -c "${ROOTFS_INITRAMFS_GENERATOR_CMDLINE}"
+}
diff --git a/meta/classes-recipe/rootfs.bbclass b/meta/classes-recipe/rootfs.bbclass
index d3b0d471..1de27d7b 100644
--- a/meta/classes-recipe/rootfs.bbclass
+++ b/meta/classes-recipe/rootfs.bbclass
@@ -13,18 +13,20 @@ DEPLOYDIR = "${WORKDIR}/deploy"
# This variable is intended to be set if dracut is
# the default initramfs generator and it is not
# possible to derive the value in another way
-ROOTFS_USE_DRACUT ??= ""
+ROOTFS_USE_DRACUT ??= "${@ '1' if 'dracut' in (d.getVar('ROOTFS_PACKAGES') or '').split() else '0' }"
-def initramfs_generator_cmdline(d):
- rootfs_packages = d.getVar('ROOTFS_PACKAGES') or ''
- if 'dracut' in rootfs_packages or bb.utils.to_boolean(d.getVar('ROOTFS_USE_DRACUT')):
- return "dracut --force --kver \"$kernel_version\""
- return "update-initramfs -u -v -k \"$kernel_version\""
+# In case no initrd is generated, force dracut off to not let bitbake hashes
+# depend on the dracut config which anyways is not used.
+python () {
+ rootfs_features = d.getVar('ROOTFS_FEATURES') or ''
+ if 'generate-initrd' not in rootfs_features.split():
+ d.setVar('ROOTFS_USE_DRACUT', '0')
+}
ROOTFS_PACKAGES ?= ""
ROOTFS_VARDEPS ?= ""
ROOTFS_INITRAMFS_GENERATOR_CMD = "${@ d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMDLINE').split()[0]}"
-ROOTFS_INITRAMFS_GENERATOR_CMDLINE = "${@ initramfs_generator_cmdline(d)}"
+ROOTFS_INITRAMFS_GENERATOR_CMDLINE = "update-initramfs -u -v -k $kernel_version"
ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}"
# Features of the rootfs creation:
@@ -650,6 +652,14 @@ rootfs_set_timestamps() {
-exec touch '{}' -h -d@${SOURCE_DATE_EPOCH} ';'
}
+run_initrd_generator() {
+ mods_total="$(find ${ROOTFSDIR}/usr/lib/modules/$kernel_version -type f -name '*.ko*' | wc -l)"
+ echo "Total number of modules: $mods_total (mkinitramfs)"
+ run_in_chroot "${ROOTFSDIR}" sh -ec '${ROOTFS_INITRAMFS_GENERATOR_CMDLINE}'
+}
+
+inherit_defer ${@'initrd-dracut' if bb.utils.to_boolean(d.getVar('ROOTFS_USE_DRACUT')) else ''}
+
ROOTFS_INSTALL_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'generate-initrd', 'rootfs_generate_initramfs', '', d)}"
rootfs_generate_initramfs[weight] = "1000"
rootfs_generate_initramfs[progress] = "custom:rootfs_progress.InitrdProgressHandler"
@@ -657,10 +667,8 @@ rootfs_generate_initramfs() {
if [ -n "$(find '${ROOTFSDIR}/boot' -type f -name 'vmlinu[xz]*')" ]; then
for kernel in ${ROOTFSDIR}/boot/vmlinu[xz]-*; do
export kernel_version=$(basename $kernel | cut -d'-' -f2-)
- mods_total="$(find ${ROOTFSDIR}/usr/lib/modules/$kernel_version -type f -name '*.ko*' | wc -l)"
- echo "Total number of modules: $mods_total"
echo "Generating initrd for kernel version: $kernel_version"
- run_in_chroot "${ROOTFSDIR}" sh -ec '${ROOTFS_INITRAMFS_GENERATOR_CMDLINE}'
+ run_initrd_generator
# on dracut, the initrd is not world-readable
run_privileged find ${ROOTFSDIR}/boot -name "initrd.img-$kernel_version*" -exec cat {} \; \
> ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
--
2.55.0
--
You received this message because you are subscribed to the Google Groups "isar-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/isar-users/20260915100125.1991311-4-felix.moessbauer%40siemens.com.
next prev parent reply other threads:[~2026-09-15 10:01 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-15 10:01 [PATCH 0/8] Add support to cross-compile a dracut initramfs 'Felix Moessbauer' via isar-users
2026-09-15 10:01 ` [PATCH 1/8] rootfs: generalize deployment of rootfs artifact 'Felix Moessbauer' via isar-users
2026-09-15 10:01 ` [PATCH 2/8] dracut-module: make module-setup compatible with sysroot 'Felix Moessbauer' via isar-users
2026-09-15 10:01 ` 'Felix Moessbauer' via isar-users [this message]
2026-09-15 10:01 ` [PATCH 4/8] dracut: use fixed log level on generation for progress reporting 'Felix Moessbauer' via isar-users
2026-09-15 10:01 ` [PATCH 5/8] dracut: enforce build of reproducible initrd 'Felix Moessbauer' via isar-users
2026-09-15 10:01 ` [PATCH 6/8] add host-tooling chroot for generic host tooling 'Felix Moessbauer' via isar-users
2026-09-15 10:01 ` [PATCH 7/8] dracut: add support for cross initrd generation 'Felix Moessbauer' via isar-users
2026-09-15 10:01 ` [PATCH 8/8] rootfs: stub both dracut and update-initramfs on dracut 'Felix Moessbauer' via isar-users
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260915100125.1991311-4-felix.moessbauer@siemens.com \
--to=isar-users@googlegroups.com \
--cc=felix.moessbauer@siemens.com \
--cc=jan.kiszka@siemens.com \
--cc=quirin.gylstorff@siemens.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox