diff mbox series

[meta-initramfs] dracut: add 'git' recipe with DEFAULT_PREFERENCE = -1

Message ID 20250704111727.1336471-1-koen.kooi@oss.qualcomm.com
State Under Review
Headers show
Series [meta-initramfs] dracut: add 'git' recipe with DEFAULT_PREFERENCE = -1 | expand

Commit Message

Koen Kooi July 4, 2025, 11:17 a.m. UTC
This updates to a revision that has PR1260, which uses ELF entries to
get dependencies instead of (cross-)ldd. This makes it useable as a tool
to generate initramfses using cross tools, in e.g. do_rootfs.

Since this is not using a tagged release and changes the base logic, add
it as a non-default option using DEFAULT_PREFERENCE = -1.

Extend to native(-sdk) to accomplish just that.

The host-built initramfs (using a custom bbclass) as well as the
on-target built initramfs have been tested on qrb2210-rb1-core-kit and
qcs6490-rb3gen-core-kit machines and work as intented.

Signed-off-by: Koen Kooi <koen.kooi@oss.qualcomm.com>
---
 .../recipes-devtools/dracut/dracut_git.bb     | 106 ++++++++++++++++++
 1 file changed, 106 insertions(+)
 create mode 100644 meta-initramfs/recipes-devtools/dracut/dracut_git.bb
diff mbox series

Patch

diff --git a/meta-initramfs/recipes-devtools/dracut/dracut_git.bb b/meta-initramfs/recipes-devtools/dracut/dracut_git.bb
new file mode 100644
index 0000000000..4a8e7e56aa
--- /dev/null
+++ b/meta-initramfs/recipes-devtools/dracut/dracut_git.bb
@@ -0,0 +1,106 @@ 
+SUMMARY = "Initramfs generator using udev"
+HOMEPAGE = "https://dracut.wiki.kernel.org/index.php/Main_Page"
+DESCRIPTION = "Dracut is an event driven initramfs infrastructure. dracut (the tool) is used to create an initramfs image by copying tools and files from an installed system and combining it with the dracut framework, usually found in /usr/lib/dracut/modules.d."
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+# Since this is not using a release tag *and* features a rewrite of the dependency logic:
+DEFAULT_PREFERENCE = "-1"
+
+PE = "1"
+
+# We want to drag in PR1260 to use ELF .note.dlopen entries instead of (cross-)ldd, but that was applied a week after the 107 tag
+PV = "107+git"
+SRCREV = "79ffbd28294818a36e515a441142125d70e3acbb"
+SRC_URI = "git://github.com/dracut-ng/dracut-ng.git;protocol=http;branch=main \
+           "
+
+DEPENDS += "kmod"
+DEPENDS:append:libc-musl = " fts"
+
+inherit bash-completion pkgconfig
+
+EXTRA_OECONF = "--prefix=${prefix} \
+                --libdir=${nonarch_libdir} \
+                --datadir=${datadir} \
+                --sysconfdir=${sysconfdir} \
+                --sbindir=${sbindir} \
+                --bindir=${bindir} \
+                --includedir=${includedir} \
+                --localstatedir=${localstatedir} \
+                --disable-documentation \
+               "
+
+# RDEPEND on systemd optionally
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,,,systemd"
+
+EXTRA_OEMAKE += 'libdir=${nonarch_libdir} LDLIBS="${LDLIBS}" enable_test=no DRACUT_FULL_VERSION=${PV}'
+
+CFLAGS:append = " -fPIC"
+LDLIBS:append:libc-musl = " -lfts"
+
+do_configure() {
+    ./configure ${EXTRA_OECONF}
+}
+
+do_install() {
+    oe_runmake install DESTDIR=${D}
+    # Its Makefile uses cp -arx to install modules.d, so fix the owner
+    # to root:root
+    chown -R root:root ${D}/${nonarch_libdir}/dracut/modules.d \
+        ${D}/${nonarch_libdir}/dracut/dracut.conf.d
+
+    if ! ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        rm -rf ${D}${nonarch_libdir}/systemd
+    fi
+}
+
+do_install:append:class-target () {
+    # Generate and install a config file listing where the DISTRO puts things, dracut
+    # is not always savvy enough to figure it out by itself
+    # Since this primarily fixes systemd issues, only install it when using systemd.
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        cat << EOF > ${B}/${DISTRO}.conf
+stdloglvl=3
+sysloglvl=5
+sysctlconfdir=${sysconfdir}/sysctl.d
+systemdutildir=${systemd_unitdir}
+systemdutilconfdir=${sysconfdir}/systemd
+systemdcatalog=${systemd_unitdir}catalog
+systemdntpunits=${systemd_unitdir}ntp-units.d
+systemdntpunitsconfdir=${sysconfdir}/systemd/ntp-units.d
+systemdportable=${systemd_unitdir}/portable
+systemdportableconfdir=${sysconfdir}/systemd/portable
+systemdsystemunitdir=${systemd_system_unitdir}
+systemdsystemconfdir=${sysconfdir}/systemd/system
+systemduser=${systemd_user_unitdir}
+systemduserconfdir=${sysconfdir}/systemd/user
+EOF
+        install -m 0644 ${B}/${DISTRO}.conf ${D}${libdir}/dracut/dracut.conf.d/
+    fi
+}
+
+
+FILES:${PN} += "${nonarch_libdir}/kernel \
+                ${nonarch_libdir}/dracut \
+                ${systemd_unitdir} \
+               "
+FILES:${PN}-dbg += "${nonarch_libdir}/dracut/.debug"
+
+CONFFILES:${PN} += "${sysconfdir}/dracut.conf"
+
+# The native variant uses a non-ldd based method of getting library
+# dependencies, so ldd is only needed on the target
+RDEPENDS:${PN} = "findutils cpio util-linux-blkid util-linux-getopt util-linux bash"
+RDEPENDS:${PN}:append:class-target = " ldd"
+
+# This could be optimized a bit, but let's avoid non-booting systems :)
+RRECOMMENDS:${PN}:class-target = "kernel-modules \
+                                  coreutils \
+                                 "
+
+BBCLASSEXTEND = "native nativesdk"
+
+CVE_STATUS[CVE-2010-4176] = "not-applicable-platform: Applies only to Fedora"