[RFC,v2,3/5] rootfs: Allow to overwrite the initramfs generation cmds

Message ID 20250905142913.3336245-4-Quirin.Gylstorff@siemens.com
State New
Headers show
Series Add support for dracut | expand

Commit Message

Quirin Gylstorff Sept. 5, 2025, 2:28 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 | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

Comments

Jan Kiszka Sept. 5, 2025, 3:10 p.m. UTC | #1
On 05.09.25 16:28, 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 | 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

> +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}

Patch

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}