[RFC PATCH 0/5] Add support for dracut

5 views
Skip to first unread message

Quirin Gylstorff

unread,
Sep 5, 2025, 7:30:19 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

Debian intends to change the default initrd generator from
initramfs-tools to dracut[1],[2].

This is a first draft to support multiple initrd generator in
ISAR. I tested it with bookworm and trixie.

Currently missing is the possiblity to generate custom dracut initrd.
This will be added in a future revision of this patchset.

[1]: https://salsa.debian.org/kernel-team/meetings/-/wikis/20250730
[2]: https://meetbot.debian.net/debian-kernel/2025/debian-kernel.2025-08-06-19.00.log.html

Quirin Gylstorff (5):
enable-fsck: remove dependency to initramfs-tools
add dracut to custom kernel builds
rootfs: Allow to overwrite the initramfs generation cmds
rootfs Add dracut to initramfs generator
initramfs: allow to set the generator command

meta/classes/initramfs.bbclass | 3 ++-
meta/classes/rootfs.bbclass | 22 ++++++++++++++++---
meta/recipes-kernel/linux/linux-custom.inc | 2 +-
.../enable-fsck/enable-fsck_0.2.bb | 2 +-
4 files changed, 23 insertions(+), 6 deletions(-)

--
2.50.1

Quirin Gylstorff

unread,
Sep 5, 2025, 7:30:20 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

The packages doesn't use any artifacts provided by initramfs-tools.

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
meta/recipes-support/enable-fsck/enable-fsck_0.2.bb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb b/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
index 2d0ec950..8a11990f 100644
--- a/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
+++ b/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
@@ -9,7 +9,7 @@ inherit dpkg-raw

DESCRIPTION = "This service enables fsck on first boot"

-DEBIAN_DEPENDS = "systemd, sed, mount, initramfs-tools"
+DEBIAN_DEPENDS = "systemd, sed, mount"

SRC_URI = " \
file://enable-fsck.service \
--
2.50.1

Quirin Gylstorff

unread,
Sep 5, 2025, 7:30:20 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
meta/classes/rootfs.bbclass | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
index d3fb44c9..9e02dbd1 100644
--- a/meta/classes/rootfs.bbclass
+++ b/meta/classes/rootfs.bbclass
@@ -7,9 +7,15 @@ ROOTFS_ARCH ?= "${DISTRO_ARCH}"
ROOTFS_DISTRO ?= "${DISTRO}"

def initramfs_generator_cmd(d):
+ rootfs_packages = d.getVar('ROOTFS_PACKAGES') or ''
+ if 'dracut' in rootfs_packages:
+ return 'rootfs'
return 'update-initramfs'

def initramfs_generator_cmdline(d):
+ initramfs_generator_cmd = d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMD')
+ if 'dracut' in initramfs_generator_cmd:
+ return "dracut --force /initrd.img \"$kernel_version\""
return "update-initramfs -u -v -k \"$kernel_version\""

ROOTFS_PACKAGES ?= ""
--
2.50.1

Quirin Gylstorff

unread,
Sep 5, 2025, 7:30:20 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

This allows to exchange the initramfs generator.

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
meta/classes/initramfs.bbclass | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/meta/classes/initramfs.bbclass b/meta/classes/initramfs.bbclass
index 658ef0ac..f9c919de 100644
--- a/meta/classes/initramfs.bbclass
+++ b/meta/classes/initramfs.bbclass
@@ -10,6 +10,7 @@ INITRAMFS_INSTALL ?= ""
INITRAMFS_PREINSTALL ?= ""
INITRAMFS_ROOTFS ?= "${WORKDIR}/rootfs"
INITRAMFS_IMAGE_NAME = "${INITRAMFS_FULLNAME}.initrd.img"
+INITRAMFS_GENERATOR_PKG ??= "initramfs-tools"
INITRD_DEPLOY_FILE = "${INITRAMFS_IMAGE_NAME}"

# Install proper kernel
@@ -26,6 +27,6 @@ DEPENDS += "${INITRAMFS_INSTALL}"

ROOTFSDIR = "${INITRAMFS_ROOTFS}"
ROOTFS_FEATURES = "generate-manifest"
-ROOTFS_PACKAGES = "initramfs-tools ${INITRAMFS_PREINSTALL} ${INITRAMFS_INSTALL}"
+ROOTFS_PACKAGES = "${INITRAMFS_GENERATOR_PKG} ${INITRAMFS_PREINSTALL} ${INITRAMFS_INSTALL}"

inherit rootfs
--
2.50.1

Quirin Gylstorff

unread,
Sep 5, 2025, 7:30:20 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
meta/recipes-kernel/linux/linux-custom.inc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
index 01e9bff7..3415db35 100644
--- a/meta/recipes-kernel/linux/linux-custom.inc
+++ b/meta/recipes-kernel/linux/linux-custom.inc
@@ -31,7 +31,7 @@ KBUILD_DEPENDS ?= "build-essential:native, \
linux-image-${KERNEL_NAME_PROVIDED}:${DISTRO_ARCH} <kbuild !kernel>, \
rsync,"

-KERNEL_DEBIAN_DEPENDS ?= "initramfs-tools | linux-initramfs-tool, \
+KERNEL_DEBIAN_DEPENDS ?= "initramfs-tools | linux-initramfs-tool | dracut, \
kmod, \
linux-base (>= 4.3~),"

--
2.50.1

Quirin Gylstorff

unread,
Sep 5, 2025, 7:30:20 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

This is in preparation to support additional initramfs generators
like dracut.

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
meta/classes/rootfs.bbclass | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
index 7b7859b9..d3fb44c9 100644
--- a/meta/classes/rootfs.bbclass
+++ b/meta/classes/rootfs.bbclass
@@ -5,7 +5,16 @@ inherit deb-dl-dir

ROOTFS_ARCH ?= "${DISTRO_ARCH}"
ROOTFS_DISTRO ?= "${DISTRO}"
+
+def initramfs_generator_cmd(d):
+ return 'update-initramfs'
+
+def initramfs_generator_cmdline(d):
+ return "update-initramfs -u -v -k \"$kernel_version\""
+
ROOTFS_PACKAGES ?= ""
+ROOTFS_INITRAMFS_GENERATOR_CMD ?= "${@ initramfs_generator_cmd(d)}"
+ROOTFS_INITRAMFS_GENERATOR_CMDLINE ?= "${@ initramfs_generator_cmdline(d)}"
ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}"

# Features of the rootfs creation:
@@ -183,7 +192,7 @@ rootfs_disable_initrd_generation[weight] = "1"
rootfs_disable_initrd_generation() {
# fully disable initrd generation
sudo mkdir -p "${ROOTFSDIR}${ROOTFS_STUBS_DIR}"
- sudo cp -a ${ROOTFSDIR}/usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/update-initramfs
+ sudo cp -a ${ROOTFSDIR}/usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/${ROOTFS_INITRAMFS_GENERATOR_CMD}
}

ROOTFS_INSTALL_COMMAND += "rootfs_install_pkgs_update"
@@ -485,11 +494,12 @@ rootfs_generate_initramfs() {
export kernel_version=$(basename /boot/vmlinu[xz]-* | cut -d'-' -f2-); \
echo "Total number of modules: $mods_total"; \
echo "Generating initrd for kernel version: $kernel_version"; \
- update-initramfs -u -v -k "$kernel_version";'
+ ${ROOTFS_INITRAMFS_GENERATOR_CMDLINE};'
if [ -n "${INITRD_DEPLOY_FILE}" ]; then
if [ -f "${ROOTFSDIR}/initrd.img" ]; then
# debian (mkinitramfs)
- cp ${ROOTFSDIR}/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
+ sudo cp ${ROOTFSDIR}/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
+ sudo chown $(id -u):$(id -g) ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
else
# ubuntu (dracut)
cp ${ROOTFSDIR}/boot/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
--
2.50.1

Jan Kiszka

unread,
Sep 5, 2025, 8:25:40 AM (3 days ago) Sep 5
to Quirin Gylstorff, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
On 05.09.25 13:27, Quirin Gylstorff wrote:
> From: Quirin Gylstorff <quirin.g...@siemens.com>
>
> The packages doesn't use any artifacts provided by initramfs-tools.
>
> Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
> ---
> meta/recipes-support/enable-fsck/enable-fsck_0.2.bb | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb b/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
> index 2d0ec950..8a11990f 100644
> --- a/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
> +++ b/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb

Recipe revision bump?

> @@ -9,7 +9,7 @@ inherit dpkg-raw
>
> DESCRIPTION = "This service enables fsck on first boot"
>
> -DEBIAN_DEPENDS = "systemd, sed, mount, initramfs-tools"
> +DEBIAN_DEPENDS = "systemd, sed, mount"

I have no idea anymore why I once added that dependency... Makes no
sense, indeed.

>
> SRC_URI = " \
> file://enable-fsck.service \

Jan

--
Siemens AG, Foundational Technologies
Linux Expert Center

Jan Kiszka

unread,
Sep 5, 2025, 8:29:40 AM (3 days ago) Sep 5
to Quirin Gylstorff, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
On 05.09.25 13:27, Quirin Gylstorff wrote:
> From: Quirin Gylstorff <quirin.g...@siemens.com>
>
> This is in preparation to support additional initramfs generators
> like dracut.
>
> Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
> ---
> meta/classes/rootfs.bbclass | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
> index 7b7859b9..d3fb44c9 100644
> --- a/meta/classes/rootfs.bbclass
> +++ b/meta/classes/rootfs.bbclass
> @@ -5,7 +5,16 @@ inherit deb-dl-dir
>
> ROOTFS_ARCH ?= "${DISTRO_ARCH}"
> ROOTFS_DISTRO ?= "${DISTRO}"
> +
> +def initramfs_generator_cmd(d):
> + return 'update-initramfs'
> +
> +def initramfs_generator_cmdline(d):
> + return "update-initramfs -u -v -k \"$kernel_version\""

Why functions, why not strings?

> +
> ROOTFS_PACKAGES ?= ""
> +ROOTFS_INITRAMFS_GENERATOR_CMD ?= "${@ initramfs_generator_cmd(d)}"

How about deriving the initramfs_generator_cmd string from
initramfs_generator_cmdline? It should be the first word of the latter.

> +ROOTFS_INITRAMFS_GENERATOR_CMDLINE ?= "${@ initramfs_generator_cmdline(d)}"
> ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}"
>
> # Features of the rootfs creation:
> @@ -183,7 +192,7 @@ rootfs_disable_initrd_generation[weight] = "1"
> rootfs_disable_initrd_generation() {
> # fully disable initrd generation
> sudo mkdir -p "${ROOTFSDIR}${ROOTFS_STUBS_DIR}"
> - sudo cp -a ${ROOTFSDIR}/usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/update-initramfs
> + sudo cp -a ${ROOTFSDIR}/usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/${ROOTFS_INITRAMFS_GENERATOR_CMD}
> }
>
> ROOTFS_INSTALL_COMMAND += "rootfs_install_pkgs_update"
> @@ -485,11 +494,12 @@ rootfs_generate_initramfs() {
> export kernel_version=$(basename /boot/vmlinu[xz]-* | cut -d'-' -f2-); \
> echo "Total number of modules: $mods_total"; \
> echo "Generating initrd for kernel version: $kernel_version"; \
> - update-initramfs -u -v -k "$kernel_version";'
> + ${ROOTFS_INITRAMFS_GENERATOR_CMDLINE};'
> if [ -n "${INITRD_DEPLOY_FILE}" ]; then
> if [ -f "${ROOTFSDIR}/initrd.img" ]; then
> # debian (mkinitramfs)
> - cp ${ROOTFSDIR}/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
> + sudo cp ${ROOTFSDIR}/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
> + sudo chown $(id -u):$(id -g) ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}

This huck is also new - reason?

> else
> # ubuntu (dracut)
> cp ${ROOTFSDIR}/boot/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}

Jan Kiszka

unread,
Sep 5, 2025, 8:30:48 AM (3 days ago) Sep 5
to Quirin Gylstorff, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
On 05.09.25 13:27, Quirin Gylstorff wrote:
OK, now I see why you defined functions. But initramfs_generator_cmd can
still be simplified by taking the first word of initramfs_generator_cmdline.

Jan Kiszka

unread,
Sep 5, 2025, 8:32:47 AM (3 days ago) Sep 5
to Quirin Gylstorff, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
On 05.09.25 13:27, Quirin Gylstorff wrote:
Do we need extra safety belts for the case that users create custom
initramfs hooks and set the wrong INITRAMFS_GENERATOR_PKG?

Jan Kiszka

unread,
Sep 5, 2025, 8:38:31 AM (3 days ago) Sep 5
to Quirin Gylstorff, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com, Uladzimir Bely
On 05.09.25 14:25, 'Jan Kiszka' via isar-users wrote:
> On 05.09.25 13:27, Quirin Gylstorff wrote:
>> From: Quirin Gylstorff <quirin.g...@siemens.com>
>>
>> The packages doesn't use any artifacts provided by initramfs-tools.
>>
>> Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
>> ---
>> meta/recipes-support/enable-fsck/enable-fsck_0.2.bb | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb b/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
>> index 2d0ec950..8a11990f 100644
>> --- a/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
>> +++ b/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
>
> Recipe revision bump?
>
>> @@ -9,7 +9,7 @@ inherit dpkg-raw
>>
>> DESCRIPTION = "This service enables fsck on first boot"
>>
>> -DEBIAN_DEPENDS = "systemd, sed, mount, initramfs-tools"
>> +DEBIAN_DEPENDS = "systemd, sed, mount"
>
> I have no idea anymore why I once added that dependency... Makes no
> sense, indeed.
>

Now I have: 2377b73d8f060bb03bed970853fc47a7197b7789 broke enable-fsck.
The current form does indeed no longer need the tools - but also has no
meaning anymore.

Quirin Gylstorff

unread,
Sep 5, 2025, 8:41:33 AM (3 days ago) Sep 5
to Jan Kiszka, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
I am not sure if this will survive the next iteration. Reusing the
initramfs class for dracut initrd leads to major pains if using in
layers where the INITRAMFS_(PRE)INSTALL is set by *.conf.

My current plan is to split it up and create a base class.

Quirn
>
> Jan
>

Quirin Gylstorff

unread,
Sep 5, 2025, 8:42:58 AM (3 days ago) Sep 5
to Jan Kiszka, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
ok i will change it in a v2.

Quirin
>
> Jan
>

Quirin Gylstorff

unread,
Sep 5, 2025, 8:44:40 AM (3 days ago) Sep 5
to isar-...@googlegroups.com


On 9/5/25 13:27, 'Quirin Gylstorff' via isar-users wrote:
> From: Quirin Gylstorff <quirin.g...@siemens.com>
>
> Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
> ---
> meta/classes/rootfs.bbclass | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
> index d3fb44c9..9e02dbd1 100644
> --- a/meta/classes/rootfs.bbclass
> +++ b/meta/classes/rootfs.bbclass
> @@ -7,9 +7,15 @@ ROOTFS_ARCH ?= "${DISTRO_ARCH}"
> ROOTFS_DISTRO ?= "${DISTRO}"
>
> def initramfs_generator_cmd(d):
> + rootfs_packages = d.getVar('ROOTFS_PACKAGES') or ''
> + if 'dracut' in rootfs_packages:
> + return 'rootfs'
This should be `dracut`. I will fix it in v2.

Quirin

Jan Kiszka

unread,
Sep 5, 2025, 8:52:17 AM (3 days ago) Sep 5
to Quirin Gylstorff, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
No, it's really about flagging / preventing unsupported combos. We will
continue to support initramfs-hooks for a longer while, backward
compatibility. But now user should not try to generate custom initramfs
with those hooks while having switched to a different generator.

>
> My current plan is to split it up and create a base class.

We will probably need completely different helpers to create custom
dracut modules, no?

Quirin Gylstorff

unread,
Sep 5, 2025, 9:03:58 AM (3 days ago) Sep 5
to Jan Kiszka, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
Currently it breaks on the package installation level if the dependency
are correct. As initramfs-tools are incompatible with dracut. We need to
check the dependencies of the package before installing it to avoid
this. For now i can check if there are recipes with a specific name in
ROOTFS_PACKAGE but there is always the possibility to that it will break
on installation.

>
>>
>> My current plan is to split it up and create a base class.
>
> We will probably need completely different helpers to create custom
> dracut modules, no?

Yes we need a new set of helpers. I will look into it after the basic
infrastructure is in place.


> > Jan
>
Quirin

Quirin Gylstorff

unread,
Sep 5, 2025, 10:29:18 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
meta/classes/rootfs.bbclass | 3 +++
1 file changed, 3 insertions(+)

diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
index 70758cce..62b470f5 100644
--- a/meta/classes/rootfs.bbclass
+++ b/meta/classes/rootfs.bbclass
@@ -14,6 +14,9 @@ def initramfs_generator_cmd(d):
return ''

def initramfs_generator_cmdline(d):
+ rootfs_packages = d.getVar('ROOTFS_PACKAGES') or ''
+ if 'dracut' in rootfs_packages:
+ return "dracut --force /initrd.img \"$kernel_version\""
return "update-initramfs -u -v -k \"$kernel_version\""

ROOTFS_PACKAGES ?= ""
--
2.50.1

Quirin Gylstorff

unread,
Sep 5, 2025, 10:29:18 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

The packages doesn't use any artifacts provided by initramfs-tools.

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
.../enable-fsck/{enable-fsck_0.2.bb => enable-fsck_0.3.bb} | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
rename meta/recipes-support/enable-fsck/{enable-fsck_0.2.bb => enable-fsck_0.3.bb} (89%)

diff --git a/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb b/meta/recipes-support/enable-fsck/enable-fsck_0.3.bb
similarity index 89%
rename from meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
rename to meta/recipes-support/enable-fsck/enable-fsck_0.3.bb
index 2d0ec950..8a11990f 100644
--- a/meta/recipes-support/enable-fsck/enable-fsck_0.2.bb
+++ b/meta/recipes-support/enable-fsck/enable-fsck_0.3.bb
@@ -9,7 +9,7 @@ inherit dpkg-raw

DESCRIPTION = "This service enables fsck on first boot"

-DEBIAN_DEPENDS = "systemd, sed, mount, initramfs-tools"
+DEBIAN_DEPENDS = "systemd, sed, mount"

Quirin Gylstorff

unread,
Sep 5, 2025, 10:29:18 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

Debian intends to change the default initrd generator from
initramfs-tools to dracut[1],[2].

This is a first draft to support multiple initrd generator in
ISAR. I tested it with bookworm and trixie.

Currently missing is the possibility to generate custom dracut initrd.
Changes v2:
- extract the initramfs-cmd from the cmdline
- increase version of enable-fsck
- add function to print an error in case a invalid package is installed

Quirin Gylstorff (5):
enable-fsck: remove dependency to initramfs-tools
add dracut to custom kernel builds
rootfs: Allow to overwrite the initramfs generation cmds
rootfs Add dracut to initramfs generator
initramfs: allow to set the generator command

meta/classes/initramfs.bbclass | 19 +++++++++++++--
meta/classes/rootfs.bbclass | 23 ++++++++++++++++---
meta/recipes-kernel/linux/linux-custom.inc | 2 +-
...{enable-fsck_0.2.bb => enable-fsck_0.3.bb} | 2 +-
4 files changed, 39 insertions(+), 7 deletions(-)
rename meta/recipes-support/enable-fsck/{enable-fsck_0.2.bb => enable-fsck_0.3.bb} (89%)

--
2.50.1

Quirin Gylstorff

unread,
Sep 5, 2025, 10:29:18 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

This allows to exchange the initramfs generator.

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
meta/classes/initramfs.bbclass | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/meta/classes/initramfs.bbclass b/meta/classes/initramfs.bbclass
index 658ef0ac..862bd873 100644
--- a/meta/classes/initramfs.bbclass
+++ b/meta/classes/initramfs.bbclass
@@ -10,6 +10,7 @@ INITRAMFS_INSTALL ?= ""
INITRAMFS_PREINSTALL ?= ""
INITRAMFS_ROOTFS ?= "${WORKDIR}/rootfs"
INITRAMFS_IMAGE_NAME = "${INITRAMFS_FULLNAME}.initrd.img"
+INITRAMFS_GENERATOR_PKG ??= "initramfs-tools"
INITRD_DEPLOY_FILE = "${INITRAMFS_IMAGE_NAME}"

# Install proper kernel
@@ -26,6 +27,20 @@ DEPENDS += "${INITRAMFS_INSTALL}"

ROOTFSDIR = "${INITRAMFS_ROOTFS}"
ROOTFS_FEATURES = "generate-manifest"
-ROOTFS_PACKAGES = "initramfs-tools ${INITRAMFS_PREINSTALL} ${INITRAMFS_INSTALL}"
-
+ROOTFS_PACKAGES = "${INITRAMFS_GENERATOR_PKG} ${INITRAMFS_PREINSTALL} ${INITRAMFS_INSTALL}"
+
+# validate if have incompatible packages in the installation list
+python do_validate_rootfs_packages () {
+ # in Debian initramfs-tools specific packages should end or star
+ # with initramfs
+ # dracut specific packages end with dracut
+ incompatible_initrd_packages = { 'initramfs-tools':['dracut'],
+ 'dracut':['initramfs']}
+ initrd_generator = d.getVar("INITRAMFS_GENERATOR_PKG")
+ for invalid_generator_idenitifier in incompatible_initrd_packages.get(initrd_generator):
+ for pkg in d.getVar('ROOTFS_PACKAGES').split():
+ if invalid_generator_idenitifier in pkg:
+ bb.error(f"{pkg} is incompatible with the selected generator '{initrd_generator}'")
+}
+addtask do_validate_rootfs_packages before do_rootfs_install
inherit rootfs
--
2.50.1

Quirin Gylstorff

unread,
Sep 5, 2025, 10:29:19 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

This is in preparation to support additional initramfs generators
like dracut.

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
meta/classes/rootfs.bbclass | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
index 7b7859b9..70758cce 100644
--- a/meta/classes/rootfs.bbclass
+++ b/meta/classes/rootfs.bbclass
@@ -5,7 +5,20 @@ inherit deb-dl-dir

ROOTFS_ARCH ?= "${DISTRO_ARCH}"
ROOTFS_DISTRO ?= "${DISTRO}"
+
+def initramfs_generator_cmd(d):
+ cmdline = d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMDLINE') or ''
+ cmd = cmdline.split()
+ if len(cmd):
+ return cmd[0]
+ return ''
+
+def initramfs_generator_cmdline(d):
+ return "update-initramfs -u -v -k \"$kernel_version\""
+
ROOTFS_PACKAGES ?= ""
+ROOTFS_INITRAMFS_GENERATOR_CMD ?= "${@ initramfs_generator_cmd(d)}"
+ROOTFS_INITRAMFS_GENERATOR_CMDLINE ?= "${@ initramfs_generator_cmdline(d)}"
ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}"

# Features of the rootfs creation:
@@ -183,7 +196,7 @@ rootfs_disable_initrd_generation[weight] = "1"
rootfs_disable_initrd_generation() {
# fully disable initrd generation
sudo mkdir -p "${ROOTFSDIR}${ROOTFS_STUBS_DIR}"
- sudo cp -a ${ROOTFSDIR}/usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/update-initramfs
+ sudo cp -a ${ROOTFSDIR}/usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/${ROOTFS_INITRAMFS_GENERATOR_CMD}
}

ROOTFS_INSTALL_COMMAND += "rootfs_install_pkgs_update"
@@ -485,11 +498,12 @@ rootfs_generate_initramfs() {
export kernel_version=$(basename /boot/vmlinu[xz]-* | cut -d'-' -f2-); \
echo "Total number of modules: $mods_total"; \
echo "Generating initrd for kernel version: $kernel_version"; \
- update-initramfs -u -v -k "$kernel_version";'
+ ${ROOTFS_INITRAMFS_GENERATOR_CMDLINE};'
if [ -n "${INITRD_DEPLOY_FILE}" ]; then
if [ -f "${ROOTFSDIR}/initrd.img" ]; then
# debian (mkinitramfs)
- cp ${ROOTFSDIR}/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
+ sudo cp ${ROOTFSDIR}/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
+ sudo chown $(id -u):$(id -g) ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
else
# ubuntu (dracut)
cp ${ROOTFSDIR}/boot/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
--
2.50.1

Quirin Gylstorff

unread,
Sep 5, 2025, 10:29:19 AM (3 days ago) Sep 5
to isar-...@googlegroups.com, jan.k...@siemens.com, felix.mo...@siemens.com, cedric.h...@siemens.com
From: Quirin Gylstorff <quirin.g...@siemens.com>

Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
---
meta/recipes-kernel/linux/linux-custom.inc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

Jan Kiszka

unread,
Sep 5, 2025, 10:53:02 AM (2 days ago) Sep 5
to Quirin Gylstorff, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
NACK. We need to fix this recipe first, and then you need to re-create
the initramfs, thus have a dependency on initramfs-tools | dracut.

Jan Kiszka

unread,
Sep 5, 2025, 11:10:44 AM (2 days ago) Sep 5
to Quirin Gylstorff, isar-...@googlegroups.com, felix.mo...@siemens.com, cedric.h...@siemens.com
On 05.09.25 16:28, Quirin Gylstorff wrote:
> From: Quirin Gylstorff <quirin.g...@siemens.com>
>
> This is in preparation to support additional initramfs generators
> like dracut.
>
> Signed-off-by: Quirin Gylstorff <quirin.g...@siemens.com>
> ---
> meta/classes/rootfs.bbclass | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
> index 7b7859b9..70758cce 100644
> --- a/meta/classes/rootfs.bbclass
> +++ b/meta/classes/rootfs.bbclass
> @@ -5,7 +5,20 @@ inherit deb-dl-dir
>
> ROOTFS_ARCH ?= "${DISTRO_ARCH}"
> ROOTFS_DISTRO ?= "${DISTRO}"
> +
> +def initramfs_generator_cmd(d):
> + cmdline = d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMDLINE') or ''
> + cmd = cmdline.split()
> + if len(cmd):
> + return cmd[0]
> + return ''

Not needed, see below.

> +
> +def initramfs_generator_cmdline(d):
> + return "update-initramfs -u -v -k \"$kernel_version\""
> +
> ROOTFS_PACKAGES ?= ""
> +ROOTFS_INITRAMFS_GENERATOR_CMD ?= "${@ initramfs_generator_cmd(d)}"

"${@ d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMDLINE').split()[0]]" that
variable is always defined and always contains at least one word.

Jan
Reply all
Reply to author
Forward
0 new messages