mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-04-25 13:18:27 +00:00
dracut: Switch to dracut-ng and upgrade to version 102
The previous dracut 056 was hopelessly outdated. When creating an initramfs from a systemd based system with a recent systemd version, booting failed with this error: [ 1.906055] systemd[1]: Failed to open executor binary '/usr/lib/systemd/systemd-executor' [ 1.912230] systemd[1]: Failed to allocate manager object: No such file or directory [!!!!!!] Failed to allocate manager object [ 1.912480] systemd[1]: Freezing execution dracut-ng took over after development in the original dracut repository stopped. Switched to the new source repository. Dropped two patches upstreamed in dracut-ng. Added a new patch that partially reverts a change that broke creating an initramfs on the host using the cross-compiled sysroot. Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
committed by
Khem Raj
parent
da13475f00
commit
ae843182b4
@@ -1,35 +0,0 @@
|
|||||||
From ff5e1a662ba93ba79e2aeaaaec48a2a8ec4b4701 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Yi Zhao <yi.zhao@windriver.com>
|
|
||||||
Date: Thu, 31 Mar 2022 22:22:44 +0800
|
|
||||||
Subject: [PATCH] Guard against __GLIBC_PREREQ for musl libc
|
|
||||||
|
|
||||||
Upstream-Status: Pending
|
|
||||||
|
|
||||||
Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
|
|
||||||
---
|
|
||||||
src/install/util.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/install/util.c b/src/install/util.c
|
|
||||||
index 5721de89..784aec48 100644
|
|
||||||
--- a/src/install/util.c
|
|
||||||
+++ b/src/install/util.c
|
|
||||||
@@ -27,6 +27,7 @@
|
|
||||||
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
+#if defined(__GLIBC__)
|
|
||||||
#if __GLIBC_PREREQ(2, 30) == 0
|
|
||||||
#include <sys/syscall.h>
|
|
||||||
#ifndef SYS_gettid
|
|
||||||
@@ -35,6 +36,7 @@
|
|
||||||
|
|
||||||
#define gettid() ((pid_t) syscall(SYS_gettid))
|
|
||||||
#endif /*__GLIBC_PREREQ */
|
|
||||||
+#endif /*__GLIBC__*/
|
|
||||||
|
|
||||||
size_t page_size(void)
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.25.1
|
|
||||||
|
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
From 38dea7dd671fd621b563377cfbd95e4783568c6e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
|
||||||
|
<zboszor@gmail.com>
|
||||||
|
Date: Fri, 7 Jun 2024 10:32:40 +0200
|
||||||
|
Subject: [PATCH] feat(dracut-install): split ldd command arguments for
|
||||||
|
execvp()
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
This restores a not-so-subtle feature of previously executing ldd
|
||||||
|
via popen(), i.e. the ability to use a cross-compiled sysroot.
|
||||||
|
|
||||||
|
The ldd command may be passed in via the DRACUT_LDD environment
|
||||||
|
variable, and the command may contain command line arguments.
|
||||||
|
The number of such arguments are not known in advance.
|
||||||
|
|
||||||
|
Split the command into executable and arguments and run it
|
||||||
|
via execvp().
|
||||||
|
|
||||||
|
Fixes: d010fa0d7f8ef42ad31729d027d2e4be6dd6e588
|
||||||
|
Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
|
||||||
|
Upstream-Status: Submitted [https://github.com/dracut-ng/dracut-ng/pull/339]
|
||||||
|
---
|
||||||
|
src/install/dracut-install.c | 47 +++++++++++++++++++++++++++++++++++-
|
||||||
|
1 file changed, 46 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/install/dracut-install.c b/src/install/dracut-install.c
|
||||||
|
index e9708c45..724b27b5 100644
|
||||||
|
--- a/src/install/dracut-install.c
|
||||||
|
+++ b/src/install/dracut-install.c
|
||||||
|
@@ -559,10 +559,55 @@ static int resolve_deps(const char *src)
|
||||||
|
log_debug("%s %s", ldd, fullsrcpath);
|
||||||
|
pid_t ldd_pid;
|
||||||
|
if ((ldd_pid = fork()) == 0) {
|
||||||
|
+ char **cmdline = NULL;
|
||||||
|
+ int start, pos, idx = 0;
|
||||||
|
+ /* Account for at least 2 elements plus the terminating NULL in cmdline */
|
||||||
|
+ int args = 3;
|
||||||
|
+
|
||||||
|
+ /* Estimate the number of space-separated elements in the "ldd" string */
|
||||||
|
+ pos = 0;
|
||||||
|
+ while (isspace(ldd[pos]))
|
||||||
|
+ pos++;
|
||||||
|
+ for (; ldd[pos]; pos++) {
|
||||||
|
+ if (isspace(ldd[pos])) {
|
||||||
|
+ if (pos)
|
||||||
|
+ args++;
|
||||||
|
+ while (isspace(ldd[pos]))
|
||||||
|
+ pos++;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ cmdline = malloc(args * sizeof(char *));
|
||||||
|
+ memset(cmdline, 0, args * sizeof(char *));
|
||||||
|
+
|
||||||
|
+ pos = 0;
|
||||||
|
+ while (isspace(ldd[pos]))
|
||||||
|
+ pos++;
|
||||||
|
+ start = pos;
|
||||||
|
+ for (; ldd[pos]; pos++) {
|
||||||
|
+ while (ldd[pos] && !isspace(ldd[pos]))
|
||||||
|
+ pos++;
|
||||||
|
+
|
||||||
|
+ cmdline[idx] = malloc(pos - start + 1);
|
||||||
|
+ memcpy(cmdline[idx], ldd + start, pos - start);
|
||||||
|
+ cmdline[idx][pos - start] = 0;
|
||||||
|
+ idx++;
|
||||||
|
+
|
||||||
|
+ if (!ldd[pos])
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ while (isspace(ldd[pos]))
|
||||||
|
+ pos++;
|
||||||
|
+ start = pos;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ cmdline[idx++] = fullsrcpath;
|
||||||
|
+ cmdline[idx] = NULL;
|
||||||
|
+
|
||||||
|
dup2(fds[1], 1);
|
||||||
|
dup2(fds[1], 2);
|
||||||
|
putenv("LC_ALL=C");
|
||||||
|
- execlp(ldd, ldd, fullsrcpath, (char *)NULL);
|
||||||
|
+ execvp(cmdline[0], cmdline);
|
||||||
|
_exit(errno == ENOENT ? 127 : 126);
|
||||||
|
}
|
||||||
|
close(fds[1]);
|
||||||
|
--
|
||||||
|
2.45.2
|
||||||
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
From 7f8ef553b7c433af153d48c6a16b2943780abf67 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Khem Raj <raj.khem@gmail.com>
|
|
||||||
Date: Sat, 31 Dec 2022 14:41:52 -0800
|
|
||||||
Subject: [PATCH] install: Do not undef _FILE_OFFSET_BITS
|
|
||||||
|
|
||||||
_FILE_OFFSET_BITS is a feature test macro to determine largefile
|
|
||||||
support. Usually its set to 64 on systems supporting LFS. Its also
|
|
||||||
needed to be set to 64 for supporting 64bit time_t on glibc on 32bit
|
|
||||||
systems. If its undefined explicitly, then 64bit time_t can not be
|
|
||||||
enabled.
|
|
||||||
|
|
||||||
Upstream-Status: Submitted [https://github.com/dracutdevs/dracut/pull/2157]
|
|
||||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
||||||
---
|
|
||||||
src/install/dracut-install.c | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/install/dracut-install.c b/src/install/dracut-install.c
|
|
||||||
index dda0caca..05a67a03 100644
|
|
||||||
--- a/src/install/dracut-install.c
|
|
||||||
+++ b/src/install/dracut-install.c
|
|
||||||
@@ -22,7 +22,6 @@
|
|
||||||
#ifndef _GNU_SOURCE
|
|
||||||
#define _GNU_SOURCE
|
|
||||||
#endif
|
|
||||||
-#undef _FILE_OFFSET_BITS
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
--
|
|
||||||
2.39.0
|
|
||||||
|
|
||||||
@@ -7,11 +7,10 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
|
|||||||
|
|
||||||
PE = "1"
|
PE = "1"
|
||||||
|
|
||||||
SRCREV = "631d5f72a223288aa1f48bb8e8d0313e75947400"
|
SRCREV = "1a8ee6e00bbe017717a5ef9e9bcfefb3b88f629e"
|
||||||
SRC_URI = "git://git.kernel.org/pub/scm/boot/dracut/dracut.git;protocol=http;branch=master \
|
SRC_URI = "git://github.com/dracut-ng/dracut-ng.git;protocol=http;branch=main \
|
||||||
file://0001-util.h-include-sys-reg.h-when-libc-glibc.patch \
|
file://0001-util.h-include-sys-reg.h-when-libc-glibc.patch \
|
||||||
file://0001-Guard-against-__GLIBC_PREREQ-for-musl-libc.patch \
|
file://0001-feat-dracut-install-split-ldd-command-arguments-for-.patch \
|
||||||
file://0001-install-Do-not-undef-_FILE_OFFSET_BITS.patch \
|
|
||||||
"
|
"
|
||||||
|
|
||||||
DEPENDS += "kmod"
|
DEPENDS += "kmod"
|
||||||
Reference in New Issue
Block a user