[v4,02/10] rootfs: Allow to overwrite the initramfs generation cmds

Message ID 20251022150737.3639891-3-Quirin.Gylstorff@siemens.com
State Changes Requested
Headers show
Series [v4,01/10] add dracut to custom kernel builds | expand

Commit Message

Quirin Gylstorff Oct. 22, 2025, 3:06 p.m. UTC
From: Quirin Gylstorff <quirin.gylstorff@siemens.com>

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

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

Comments

Jan Kiszka Oct. 22, 2025, 3:44 p.m. UTC | #1
On 22.10.25 17:06, Quirin Gylstorff wrote:
> From: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> 
> This is in preparation to support additional initramfs generators
> like dracut.
> 
> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> ---
>  meta/classes/rootfs.bbclass | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
> index 4d73bfec..b7310e0c 100644
> --- a/meta/classes/rootfs.bbclass
> +++ b/meta/classes/rootfs.bbclass
> @@ -5,7 +5,13 @@ inherit deb-dl-dir
>  
>  ROOTFS_ARCH ?= "${DISTRO_ARCH}"
>  ROOTFS_DISTRO ?= "${DISTRO}"
> +
> +def initramfs_generator_cmdline(d):
> +    return "update-initramfs -u -v -k \"$kernel_version\""
> +
>  ROOTFS_PACKAGES ?= ""
> +ROOTFS_INITRAMFS_GENERATOR_CMD = "${@ d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMDLINE').split()[0]}"
> +ROOTFS_INITRAMFS_GENERATOR_CMDLINE = "${@ initramfs_generator_cmdline(d)}"
>  ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}"
>  
>  # Features of the rootfs creation:
> @@ -254,7 +260,7 @@ rootfs_disable_initrd_generation() {
>      set -e
>  
>      mkdir -p "${ROOTFSDIR}${ROOTFS_STUBS_DIR}"
> -    ln -s /usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/update-initramfs
> +    ln -s /usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/${ROOTFS_INITRAMFS_GENERATOR_CMD}
>  
>      mkdir -p '${ROOTFSDIR}/etc/apt/apt.conf.d'
>      echo 'DPkg::Path ${ROOTFS_STUBS_DIR}:/usr/sbin:/usr/bin:/sbin:/bin;' \
> @@ -577,12 +583,13 @@ rootfs_generate_initramfs() {
>              echo "Total number of modules: $mods_total"
>              echo "Generating initrd for kernel version: $kernel_version"
>              sudo -E chroot "${ROOTFSDIR}" sh -c ' \
> -                update-initramfs -u -v -k "$kernel_version"'
> +                ${ROOTFS_INITRAMFS_GENERATOR_CMDLINE};'
>          done
>          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}

Do we need more sudo? bwrap?

And why do we need this here now?

Jan

>              else
>                  # ubuntu (dracut)
>                  cp ${ROOTFSDIR}/boot/initrd.img ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
Cedric Hombourger Oct. 22, 2025, 3:53 p.m. UTC | #2
On Wed, 2025-10-22 at 17:44 +0200, Jan Kiszka wrote:
> On 22.10.25 17:06, Quirin Gylstorff wrote:
> > From: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> > 
> > This is in preparation to support additional initramfs generators
> > like dracut.
> > 
> > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> > ---
> >  meta/classes/rootfs.bbclass | 13 ++++++++++---
> >  1 file changed, 10 insertions(+), 3 deletions(-)
> > 
> > diff --git a/meta/classes/rootfs.bbclass
> > b/meta/classes/rootfs.bbclass
> > index 4d73bfec..b7310e0c 100644
> > --- a/meta/classes/rootfs.bbclass
> > +++ b/meta/classes/rootfs.bbclass
> > @@ -5,7 +5,13 @@ inherit deb-dl-dir
> >  
> >  ROOTFS_ARCH ?= "${DISTRO_ARCH}"
> >  ROOTFS_DISTRO ?= "${DISTRO}"
> > +
> > +def initramfs_generator_cmdline(d):
> > +    return "update-initramfs -u -v -k \"$kernel_version\""
> > +
> >  ROOTFS_PACKAGES ?= ""
> > +ROOTFS_INITRAMFS_GENERATOR_CMD = "${@
> > d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMDLINE').split()[0]}"
> > +ROOTFS_INITRAMFS_GENERATOR_CMDLINE = "${@
> > initramfs_generator_cmdline(d)}"
> >  ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}"
> >  
> >  # Features of the rootfs creation:
> > @@ -254,7 +260,7 @@ rootfs_disable_initrd_generation() {
> >      set -e
> >  
> >      mkdir -p "${ROOTFSDIR}${ROOTFS_STUBS_DIR}"
> > -    ln -s /usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/update-
> > initramfs
> > +    ln -s /usr/bin/true
> > ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/${ROOTFS_INITRAMFS_GENERATOR_CMD}
> >  
> >      mkdir -p '${ROOTFSDIR}/etc/apt/apt.conf.d'
> >      echo 'DPkg::Path
> > ${ROOTFS_STUBS_DIR}:/usr/sbin:/usr/bin:/sbin:/bin;' \
> > @@ -577,12 +583,13 @@ rootfs_generate_initramfs() {
> >              echo "Total number of modules: $mods_total"
> >              echo "Generating initrd for kernel version:
> > $kernel_version"
> >              sudo -E chroot "${ROOTFSDIR}" sh -c ' \
> > -                update-initramfs -u -v -k "$kernel_version"'
> > +                ${ROOTFS_INITRAMFS_GENERATOR_CMDLINE};'
> >          done
> >          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}
> 
> Do we need more sudo? bwrap?
> 
> And why do we need this here now?

dracut creates the initrd.img with 0600 perms so bwrap wouldn't help
here :(

we may need to check if we can convince dracut to use 0644

> 
> Jan
> 
> >              else
> >                  # ubuntu (dracut)
> >                  cp ${ROOTFSDIR}/boot/initrd.img
> > ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
>
Jan Kiszka Oct. 22, 2025, 3:56 p.m. UTC | #3
On 22.10.25 17:53, Hombourger, Cedric (FT FDS CES LX) wrote:
> On Wed, 2025-10-22 at 17:44 +0200, Jan Kiszka wrote:
>> On 22.10.25 17:06, Quirin Gylstorff wrote:
>>> From: Quirin Gylstorff <quirin.gylstorff@siemens.com>
>>>
>>> This is in preparation to support additional initramfs generators
>>> like dracut.
>>>
>>> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
>>> ---
>>>  meta/classes/rootfs.bbclass | 13 ++++++++++---
>>>  1 file changed, 10 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/meta/classes/rootfs.bbclass
>>> b/meta/classes/rootfs.bbclass
>>> index 4d73bfec..b7310e0c 100644
>>> --- a/meta/classes/rootfs.bbclass
>>> +++ b/meta/classes/rootfs.bbclass
>>> @@ -5,7 +5,13 @@ inherit deb-dl-dir
>>>  
>>>  ROOTFS_ARCH ?= "${DISTRO_ARCH}"
>>>  ROOTFS_DISTRO ?= "${DISTRO}"
>>> +
>>> +def initramfs_generator_cmdline(d):
>>> +    return "update-initramfs -u -v -k \"$kernel_version\""
>>> +
>>>  ROOTFS_PACKAGES ?= ""
>>> +ROOTFS_INITRAMFS_GENERATOR_CMD = "${@
>>> d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMDLINE').split()[0]}"
>>> +ROOTFS_INITRAMFS_GENERATOR_CMDLINE = "${@
>>> initramfs_generator_cmdline(d)}"
>>>  ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}"
>>>  
>>>  # Features of the rootfs creation:
>>> @@ -254,7 +260,7 @@ rootfs_disable_initrd_generation() {
>>>      set -e
>>>  
>>>      mkdir -p "${ROOTFSDIR}${ROOTFS_STUBS_DIR}"
>>> -    ln -s /usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/update-
>>> initramfs
>>> +    ln -s /usr/bin/true
>>> ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/${ROOTFS_INITRAMFS_GENERATOR_CMD}
>>>  
>>>      mkdir -p '${ROOTFSDIR}/etc/apt/apt.conf.d'
>>>      echo 'DPkg::Path
>>> ${ROOTFS_STUBS_DIR}:/usr/sbin:/usr/bin:/sbin:/bin;' \
>>> @@ -577,12 +583,13 @@ rootfs_generate_initramfs() {
>>>              echo "Total number of modules: $mods_total"
>>>              echo "Generating initrd for kernel version:
>>> $kernel_version"
>>>              sudo -E chroot "${ROOTFSDIR}" sh -c ' \
>>> -                update-initramfs -u -v -k "$kernel_version"'
>>> +                ${ROOTFS_INITRAMFS_GENERATOR_CMDLINE};'
>>>          done
>>>          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}
>>
>> Do we need more sudo? bwrap?
>>
>> And why do we need this here now?
> 
> dracut creates the initrd.img with 0600 perms so bwrap wouldn't help
> here :(
> 
> we may need to check if we can convince dracut to use 0644
> 

I was suspecting something like that but not reading it anywhere.

Besides micro-optimizations (chown first, then there is no need for sudo
cp), this should probably be done in dracut context, not for all
initramfs generators.

And, yes, checking with dracut if they consider this a feature or rather
a bug would be good as well.

Jan

>>
>> Jan
>>
>>>              else
>>>                  # ubuntu (dracut)
>>>                  cp ${ROOTFSDIR}/boot/initrd.img
>>> ${DEPLOYDIR}/${INITRD_DEPLOY_FILE}
>>
>
Quirin Gylstorff Oct. 23, 2025, 8 a.m. UTC | #4
On 10/22/25 17:56, Jan Kiszka wrote:
> On 22.10.25 17:53, Hombourger, Cedric (FT FDS CES LX) wrote:
>> On Wed, 2025-10-22 at 17:44 +0200, Jan Kiszka wrote:
>>> On 22.10.25 17:06, Quirin Gylstorff wrote:
>>>> From: Quirin Gylstorff <quirin.gylstorff@siemens.com>
>>>>
>>>> This is in preparation to support additional initramfs generators
>>>> like dracut.
>>>>
>>>> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
>>>> ---
>>>>   meta/classes/rootfs.bbclass | 13 ++++++++++---
>>>>   1 file changed, 10 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/meta/classes/rootfs.bbclass
>>>> b/meta/classes/rootfs.bbclass
>>>> index 4d73bfec..b7310e0c 100644
>>>> --- a/meta/classes/rootfs.bbclass
>>>> +++ b/meta/classes/rootfs.bbclass
>>>> @@ -5,7 +5,13 @@ inherit deb-dl-dir
>>>>   
>>>>   ROOTFS_ARCH ?= "${DISTRO_ARCH}"
>>>>   ROOTFS_DISTRO ?= "${DISTRO}"
>>>> +
>>>> +def initramfs_generator_cmdline(d):
>>>> +    return "update-initramfs -u -v -k \"$kernel_version\""
>>>> +
>>>>   ROOTFS_PACKAGES ?= ""
>>>> +ROOTFS_INITRAMFS_GENERATOR_CMD = "${@
>>>> d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMDLINE').split()[0]}"
>>>> +ROOTFS_INITRAMFS_GENERATOR_CMDLINE = "${@
>>>> initramfs_generator_cmdline(d)}"
>>>>   ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}"
>>>>   
>>>>   # Features of the rootfs creation:
>>>> @@ -254,7 +260,7 @@ rootfs_disable_initrd_generation() {
>>>>       set -e
>>>>   
>>>>       mkdir -p "${ROOTFSDIR}${ROOTFS_STUBS_DIR}"
>>>> -    ln -s /usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/update-
>>>> initramfs
>>>> +    ln -s /usr/bin/true
>>>> ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/${ROOTFS_INITRAMFS_GENERATOR_CMD}
>>>>   
>>>>       mkdir -p '${ROOTFSDIR}/etc/apt/apt.conf.d'
>>>>       echo 'DPkg::Path
>>>> ${ROOTFS_STUBS_DIR}:/usr/sbin:/usr/bin:/sbin:/bin;' \
>>>> @@ -577,12 +583,13 @@ rootfs_generate_initramfs() {
>>>>               echo "Total number of modules: $mods_total"
>>>>               echo "Generating initrd for kernel version:
>>>> $kernel_version"
>>>>               sudo -E chroot "${ROOTFSDIR}" sh -c ' \
>>>> -                update-initramfs -u -v -k "$kernel_version"'
>>>> +                ${ROOTFS_INITRAMFS_GENERATOR_CMDLINE};'
>>>>           done
>>>>           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}
>>>
>>> Do we need more sudo? bwrap?
>>>
>>> And why do we need this here now?
>>
>> dracut creates the initrd.img with 0600 perms so bwrap wouldn't help
>> here :(
>>
>> we may need to check if we can convince dracut to use 0644
>>
> 
> I was suspecting something like that but not reading it anywhere.
> 
> Besides micro-optimizations (chown first, then there is no need for sudo
> cp), this should probably be done in dracut context, not for all
> initramfs generators.
> 
> And, yes, checking with dracut if they consider this a feature or rather
> a bug would be good as well.

I will look into it.

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

Patch

diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
index 4d73bfec..b7310e0c 100644
--- a/meta/classes/rootfs.bbclass
+++ b/meta/classes/rootfs.bbclass
@@ -5,7 +5,13 @@  inherit deb-dl-dir
 
 ROOTFS_ARCH ?= "${DISTRO_ARCH}"
 ROOTFS_DISTRO ?= "${DISTRO}"
+
+def initramfs_generator_cmdline(d):
+    return "update-initramfs -u -v -k \"$kernel_version\""
+
 ROOTFS_PACKAGES ?= ""
+ROOTFS_INITRAMFS_GENERATOR_CMD = "${@ d.getVar('ROOTFS_INITRAMFS_GENERATOR_CMDLINE').split()[0]}"
+ROOTFS_INITRAMFS_GENERATOR_CMDLINE = "${@ initramfs_generator_cmdline(d)}"
 ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}"
 
 # Features of the rootfs creation:
@@ -254,7 +260,7 @@  rootfs_disable_initrd_generation() {
     set -e
 
     mkdir -p "${ROOTFSDIR}${ROOTFS_STUBS_DIR}"
-    ln -s /usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/update-initramfs
+    ln -s /usr/bin/true ${ROOTFSDIR}${ROOTFS_STUBS_DIR}/${ROOTFS_INITRAMFS_GENERATOR_CMD}
 
     mkdir -p '${ROOTFSDIR}/etc/apt/apt.conf.d'
     echo 'DPkg::Path ${ROOTFS_STUBS_DIR}:/usr/sbin:/usr/bin:/sbin:/bin;' \
@@ -577,12 +583,13 @@  rootfs_generate_initramfs() {
             echo "Total number of modules: $mods_total"
             echo "Generating initrd for kernel version: $kernel_version"
             sudo -E chroot "${ROOTFSDIR}" sh -c ' \
-                update-initramfs -u -v -k "$kernel_version"'
+                ${ROOTFS_INITRAMFS_GENERATOR_CMDLINE};'
         done
         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}