Message ID | 20250820141023.767004-1-christoph.steiger@siemens.com |
---|---|
State | Superseded, archived |
Headers | show |
Series | [1/1] rootfs: rework no-generate-initrd rootfs feature | expand |
On 20.08.25 16:10, Christoph Steiger wrote: > Instead of using a negative feature replace it with a positive one: > generate-initrd. It can be confusing for the user why a initrd is > generated even though no additional rootfs features are enabled. > > To keep default behavior the same add generate-initrd to the default > rootfs features, unless INITRD_IMAGE is provided. > > Signed-off-by: Christoph Steiger <christoph.steiger@siemens.com> > --- > RECIPE-API-CHANGELOG.md | 14 ++++++++++++++ > meta/classes/image.bbclass | 2 -- > meta/classes/rootfs.bbclass | 8 ++++---- > .../sbuild-chroot/sbuild-chroot.inc | 2 +- > 4 files changed, 19 insertions(+), 7 deletions(-) > > diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md > index 8468717d..ef18a0ac 100644 > --- a/RECIPE-API-CHANGELOG.md > +++ b/RECIPE-API-CHANGELOG.md > @@ -727,3 +727,17 @@ Changes in next > > This was never documented and never had practical relevance. `oci-archive` is > the useful OCI image format that can be imported, e.g., by podman. > + > +### Rework `no-generate-initrd` rootfs feature > + > +This negative feature is being replaced with a positive one: > +`generate-initrd`. The default behavior remains unchanged, as `generate-initrd` > +is now a default rootfs feature. Disabling initrd creation can be done in the > +following way: > +``` > +ROOTFS_FEATURE:remove = "generate-initrd" > +``` > +instead of > +``` > +ROOTFS_FEATURE += "no-generate-initrd" > +``` > diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass > index bd1b8552..f4b07816 100644 > --- a/meta/classes/image.bbclass > +++ b/meta/classes/image.bbclass > @@ -67,8 +67,6 @@ inherit essential > > ROOTFSDIR = "${IMAGE_ROOTFS}" > ROOTFS_FEATURES += "clean-package-cache clean-pycache generate-manifest export-dpkg-status clean-log-files clean-debconf-cache" > -# when using a custom initrd, do not generate one as part of the image rootfs > -ROOTFS_FEATURES += "${@ '' if d.getVar('INITRD_IMAGE') == '' else 'no-generate-initrd'}" > ROOTFS_PACKAGES += "${IMAGE_PREINSTALL} ${@isar_multiarch_packages('IMAGE_INSTALL', d)}" > ROOTFS_MANIFEST_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}" > ROOTFS_DPKGSTATUS_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}" > diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass > index 7b7859b9..f5513277 100644 > --- a/meta/classes/rootfs.bbclass > +++ b/meta/classes/rootfs.bbclass > @@ -14,8 +14,8 @@ ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}" > # 'generate-manifest' - generate a package manifest of the rootfs into ${ROOTFS_MANIFEST_DEPLOY_DIR} > # 'export-dpkg-status' - exports /var/lib/dpkg/status file to ${ROOTFS_DPKGSTATUS_DEPLOY_DIR} > # 'clean-log-files' - delete log files that are not owned by packages > -# 'no-generate-initrd' - do not generate debian default initrd > -ROOTFS_FEATURES ?= "" > +# 'generate-initrd' - generate debian default initrd > +ROOTFS_FEATURES ?= "${@ 'generate-initrd' if d.getVar('INITRD_IMAGE') == '' else ''}" INITRD_IMAGE is initialized to an empty string in image.bbclass. However, if rootfs.bbclass should be used in some recipe without inhering image as well, getVar will deliver None, and comparing that to a string will cause an ugly error. Probably better to do (d.getVar() or ''). Jan > > ROOTFS_APT_ARGS="install --yes -o Debug::pkgProblemResolver=yes" > > @@ -258,7 +258,7 @@ rootfs_restore_initrd_tooling() { > sudo rm -rf "${ROOTFSDIR}${ROOTFS_STUBS_DIR}" > } > > -ROOTFS_INSTALL_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'no-generate-initrd', 'rootfs_clear_initrd_symlinks', '', d)}" > +ROOTFS_INSTALL_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'generate-initrd', '', 'rootfs_clear_initrd_symlinks', d)}" > rootfs_clear_initrd_symlinks() { > sudo rm -f ${ROOTFSDIR}/initrd.img > sudo rm -f ${ROOTFSDIR}/initrd.img.old > @@ -501,7 +501,7 @@ rootfs_generate_initramfs() { > } > > python() { > - if 'no-generate-initrd' not in d.getVar('ROOTFS_FEATURES', True).split(): > + if 'generate-initrd' in d.getVar('ROOTFS_FEATURES', True).split(): > bb.build.addtask('do_generate_initramfs', 'do_rootfs', 'do_rootfs_postprocess', d) > bb.build.addtask('do_generate_initramfs_setscene', None, None, d) > } > diff --git a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc > index 98e427e5..ce35497f 100644 > --- a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc > +++ b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc > @@ -55,7 +55,7 @@ SBUILD_CHROOT_PREINSTALL_COMMON = " \ > SBUILD_CHROOT_DIR = "${WORKDIR}/rootfs" > ROOTFSDIR = "${SBUILD_CHROOT_DIR}" > ROOTFS_PACKAGES = "${SBUILD_CHROOT_PREINSTALL}" > -ROOTFS_FEATURES += "no-generate-initrd" > +ROOTFS_FEATURES:remove = "generate-initrd" > > ROOTFS_POSTPROCESS_COMMAND:remove = "rootfs_cleanup_isar_apt" >
On 20.08.25 18:25, Jan Kiszka wrote: > On 20.08.25 16:10, Christoph Steiger wrote: >> Instead of using a negative feature replace it with a positive one: >> generate-initrd. It can be confusing for the user why a initrd is >> generated even though no additional rootfs features are enabled. >> >> To keep default behavior the same add generate-initrd to the default >> rootfs features, unless INITRD_IMAGE is provided. >> >> Signed-off-by: Christoph Steiger <christoph.steiger@siemens.com> >> --- >> RECIPE-API-CHANGELOG.md | 14 ++++++++++++++ >> meta/classes/image.bbclass | 2 -- >> meta/classes/rootfs.bbclass | 8 ++++---- >> .../sbuild-chroot/sbuild-chroot.inc | 2 +- >> 4 files changed, 19 insertions(+), 7 deletions(-) >> >> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md >> index 8468717d..ef18a0ac 100644 >> --- a/RECIPE-API-CHANGELOG.md >> +++ b/RECIPE-API-CHANGELOG.md >> @@ -727,3 +727,17 @@ Changes in next >> >> This was never documented and never had practical relevance. `oci-archive` is >> the useful OCI image format that can be imported, e.g., by podman. >> + >> +### Rework `no-generate-initrd` rootfs feature >> + >> +This negative feature is being replaced with a positive one: >> +`generate-initrd`. The default behavior remains unchanged, as `generate-initrd` >> +is now a default rootfs feature. Disabling initrd creation can be done in the >> +following way: >> +``` >> +ROOTFS_FEATURE:remove = "generate-initrd" >> +``` >> +instead of >> +``` >> +ROOTFS_FEATURE += "no-generate-initrd" >> +``` >> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass >> index bd1b8552..f4b07816 100644 >> --- a/meta/classes/image.bbclass >> +++ b/meta/classes/image.bbclass >> @@ -67,8 +67,6 @@ inherit essential >> >> ROOTFSDIR = "${IMAGE_ROOTFS}" >> ROOTFS_FEATURES += "clean-package-cache clean-pycache generate-manifest export-dpkg-status clean-log-files clean-debconf-cache" >> -# when using a custom initrd, do not generate one as part of the image rootfs >> -ROOTFS_FEATURES += "${@ '' if d.getVar('INITRD_IMAGE') == '' else 'no-generate-initrd'}" >> ROOTFS_PACKAGES += "${IMAGE_PREINSTALL} ${@isar_multiarch_packages('IMAGE_INSTALL', d)}" >> ROOTFS_MANIFEST_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}" >> ROOTFS_DPKGSTATUS_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}" >> diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass >> index 7b7859b9..f5513277 100644 >> --- a/meta/classes/rootfs.bbclass >> +++ b/meta/classes/rootfs.bbclass >> @@ -14,8 +14,8 @@ ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}" >> # 'generate-manifest' - generate a package manifest of the rootfs into ${ROOTFS_MANIFEST_DEPLOY_DIR} >> # 'export-dpkg-status' - exports /var/lib/dpkg/status file to ${ROOTFS_DPKGSTATUS_DEPLOY_DIR} >> # 'clean-log-files' - delete log files that are not owned by packages >> -# 'no-generate-initrd' - do not generate debian default initrd >> -ROOTFS_FEATURES ?= "" >> +# 'generate-initrd' - generate debian default initrd >> +ROOTFS_FEATURES ?= "${@ 'generate-initrd' if d.getVar('INITRD_IMAGE') == '' else ''}" > > INITRD_IMAGE is initialized to an empty string in image.bbclass. > However, if rootfs.bbclass should be used in some recipe without > inhering image as well, getVar will deliver None, and comparing that to > a string will cause an ugly error. Probably better to do (d.getVar() or ''). > ...or just move the initialization of INITRD_IMAGE over - I just realized that image inherits rootfs, so that will not break something else. Jan
diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md index 8468717d..ef18a0ac 100644 --- a/RECIPE-API-CHANGELOG.md +++ b/RECIPE-API-CHANGELOG.md @@ -727,3 +727,17 @@ Changes in next This was never documented and never had practical relevance. `oci-archive` is the useful OCI image format that can be imported, e.g., by podman. + +### Rework `no-generate-initrd` rootfs feature + +This negative feature is being replaced with a positive one: +`generate-initrd`. The default behavior remains unchanged, as `generate-initrd` +is now a default rootfs feature. Disabling initrd creation can be done in the +following way: +``` +ROOTFS_FEATURE:remove = "generate-initrd" +``` +instead of +``` +ROOTFS_FEATURE += "no-generate-initrd" +``` diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index bd1b8552..f4b07816 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -67,8 +67,6 @@ inherit essential ROOTFSDIR = "${IMAGE_ROOTFS}" ROOTFS_FEATURES += "clean-package-cache clean-pycache generate-manifest export-dpkg-status clean-log-files clean-debconf-cache" -# when using a custom initrd, do not generate one as part of the image rootfs -ROOTFS_FEATURES += "${@ '' if d.getVar('INITRD_IMAGE') == '' else 'no-generate-initrd'}" ROOTFS_PACKAGES += "${IMAGE_PREINSTALL} ${@isar_multiarch_packages('IMAGE_INSTALL', d)}" ROOTFS_MANIFEST_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}" ROOTFS_DPKGSTATUS_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}" diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass index 7b7859b9..f5513277 100644 --- a/meta/classes/rootfs.bbclass +++ b/meta/classes/rootfs.bbclass @@ -14,8 +14,8 @@ ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}" # 'generate-manifest' - generate a package manifest of the rootfs into ${ROOTFS_MANIFEST_DEPLOY_DIR} # 'export-dpkg-status' - exports /var/lib/dpkg/status file to ${ROOTFS_DPKGSTATUS_DEPLOY_DIR} # 'clean-log-files' - delete log files that are not owned by packages -# 'no-generate-initrd' - do not generate debian default initrd -ROOTFS_FEATURES ?= "" +# 'generate-initrd' - generate debian default initrd +ROOTFS_FEATURES ?= "${@ 'generate-initrd' if d.getVar('INITRD_IMAGE') == '' else ''}" ROOTFS_APT_ARGS="install --yes -o Debug::pkgProblemResolver=yes" @@ -258,7 +258,7 @@ rootfs_restore_initrd_tooling() { sudo rm -rf "${ROOTFSDIR}${ROOTFS_STUBS_DIR}" } -ROOTFS_INSTALL_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'no-generate-initrd', 'rootfs_clear_initrd_symlinks', '', d)}" +ROOTFS_INSTALL_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'generate-initrd', '', 'rootfs_clear_initrd_symlinks', d)}" rootfs_clear_initrd_symlinks() { sudo rm -f ${ROOTFSDIR}/initrd.img sudo rm -f ${ROOTFSDIR}/initrd.img.old @@ -501,7 +501,7 @@ rootfs_generate_initramfs() { } python() { - if 'no-generate-initrd' not in d.getVar('ROOTFS_FEATURES', True).split(): + if 'generate-initrd' in d.getVar('ROOTFS_FEATURES', True).split(): bb.build.addtask('do_generate_initramfs', 'do_rootfs', 'do_rootfs_postprocess', d) bb.build.addtask('do_generate_initramfs_setscene', None, None, d) } diff --git a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc index 98e427e5..ce35497f 100644 --- a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc +++ b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc @@ -55,7 +55,7 @@ SBUILD_CHROOT_PREINSTALL_COMMON = " \ SBUILD_CHROOT_DIR = "${WORKDIR}/rootfs" ROOTFSDIR = "${SBUILD_CHROOT_DIR}" ROOTFS_PACKAGES = "${SBUILD_CHROOT_PREINSTALL}" -ROOTFS_FEATURES += "no-generate-initrd" +ROOTFS_FEATURES:remove = "generate-initrd" ROOTFS_POSTPROCESS_COMMAND:remove = "rootfs_cleanup_isar_apt"
Instead of using a negative feature replace it with a positive one: generate-initrd. It can be confusing for the user why a initrd is generated even though no additional rootfs features are enabled. To keep default behavior the same add generate-initrd to the default rootfs features, unless INITRD_IMAGE is provided. Signed-off-by: Christoph Steiger <christoph.steiger@siemens.com> --- RECIPE-API-CHANGELOG.md | 14 ++++++++++++++ meta/classes/image.bbclass | 2 -- meta/classes/rootfs.bbclass | 8 ++++---- .../sbuild-chroot/sbuild-chroot.inc | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-)