* [Buildroot] [PATCH] package/dracut: workaround breakage on non-merged-usr hosts
@ 2022-11-12 13:37 Yann E. MORIN
2022-11-13 21:11 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 2+ messages in thread
From: Yann E. MORIN @ 2022-11-12 13:37 UTC (permalink / raw)
To: buildroot; +Cc: Adam Duskett, Yann E. MORIN, Thierry Bultel
dracut is not really ready to be installed with a non-/ prefix, and it
has a lot of hard-coded assumptions that it is going to run on the host
for which it is goign to generate an initramfs; for example, it
hard-codes calls to /lib/dracut/some-file in some of its modules. It
also uses the host system layout to decide whether it needs a
merged-usr or not.
Furthermore, dracut populates the temporary directory which content will
be used to generate the cpio, with a bunch of files, even before calling
any of the dracut modules.
The name for that temporary directory is not predictable (looks like the
output of 'mktemp -d dracut.XXXXXX', with names like dracut.1Vfn9F seen
while debugging).
As a consequence, we can't prepare the temporary directory with the
proper symlinks beforehand.
So, we provide a very-early module of our own, that will (hopefully) run
before any other module, to fixup the messed-up layout prepared by
dracut. This module moves the content of /lib, /bin, and /sbin, out and
into their counterparts in /usr, and creates the usual symlinks.
When we do not require a merged-usr, then we have nothing to do, so the
module checks for /lib being a symlink, as the hint that we want a
merged-usr or not.
Note: currently, we've seen nothing that dracut installed in /bin or
/sbin, but for trying to be future-proof, we also handle them; this
causes a spurious warning:
mv: cannot stat '..../build/buildroot-fs/cpio/tmp/dracut.YQnzNP/initramfs/bin/*': No such file or directory
Since there are already quite a bunch of similar failures in the
official modules bundled in dracut, an extra such issue or two should
not be too scary...
Fixes:
https://gitlab.com/buildroot.org/buildroot/-/jobs/3282261241
https://gitlab.com/buildroot.org/buildroot/-/jobs/3282261239
https://gitlab.com/buildroot.org/buildroot/-/jobs/3282261236
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Thierry Bultel <thierry.bultel@linatsea.fr>
Cc: Adam Duskett <aduskett@gmail.com>
---
package/dracut/dracut.mk | 2 ++
package/dracut/merged-usr-module-setup.sh | 26 +++++++++++++++++++++++
2 files changed, 28 insertions(+)
create mode 100644 package/dracut/merged-usr-module-setup.sh
diff --git a/package/dracut/dracut.mk b/package/dracut/dracut.mk
index 742a073a36..597492bc5e 100644
--- a/package/dracut/dracut.mk
+++ b/package/dracut/dracut.mk
@@ -22,6 +22,8 @@ HOST_DRACUT_POST_INSTALL_HOOKS += HOST_DRACUT_POST_INSTALL_WRAPPER_SCRIPT
# "ld-musl-x.so" symlinks, respectively - else the init process cannot
# start
define HOST_DRACUT_POST_INSTALL_LIBC_LINKS_MODULE
+ $(INSTALL) -D -m 0755 package/dracut/merged-usr-module-setup.sh \
+ $(HOST_DIR)/lib/dracut/modules.d/0000-merged-usr/module-setup.sh
$(INSTALL) -D -m 0755 package/dracut/libc-links-module-setup.sh \
$(HOST_DIR)/lib/dracut/modules.d/05libc-links/module-setup.sh
endef
diff --git a/package/dracut/merged-usr-module-setup.sh b/package/dracut/merged-usr-module-setup.sh
new file mode 100644
index 0000000000..6dc0e7ca7b
--- /dev/null
+++ b/package/dracut/merged-usr-module-setup.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+check() {
+ [ -L "${dracutsysrootdir?}/lib" ]
+}
+
+depends() {
+ return 0
+}
+
+install() {
+ # dracut pre-installs a set of files before calling any of
+ # the modules, and dracut also messes up host vs. target
+ # system, so on a non-merged-usr host, it will prepare a
+ # non-merged-usr initramfs, even though the current config
+ # is for a merged-usr system.
+ # So undo its borkage.
+ for dir in lib bin sbin; do
+ mkdir -p "${initdir?}/usr/${dir}"
+ if [ -d "${initdir?}/${dir}" ]; then
+ mv "${initdir?}/${dir}/"* "${initdir?}/usr/${dir}"
+ rm -rf "${initdir?}/${dir}"
+ ln -s "usr/${dir}" "${initdir?}/${dir}"
+ fi
+ done
+}
--
2.25.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Buildroot] [PATCH] package/dracut: workaround breakage on non-merged-usr hosts
2022-11-12 13:37 [Buildroot] [PATCH] package/dracut: workaround breakage on non-merged-usr hosts Yann E. MORIN
@ 2022-11-13 21:11 ` Thomas Petazzoni via buildroot
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Petazzoni via buildroot @ 2022-11-13 21:11 UTC (permalink / raw)
To: Yann E. MORIN; +Cc: Thierry Bultel, Adam Duskett, buildroot
On Sat, 12 Nov 2022 14:37:07 +0100
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> dracut is not really ready to be installed with a non-/ prefix, and it
> has a lot of hard-coded assumptions that it is going to run on the host
> for which it is goign to generate an initramfs; for example, it
> hard-codes calls to /lib/dracut/some-file in some of its modules. It
> also uses the host system layout to decide whether it needs a
> merged-usr or not.
>
> Furthermore, dracut populates the temporary directory which content will
> be used to generate the cpio, with a bunch of files, even before calling
> any of the dracut modules.
>
> The name for that temporary directory is not predictable (looks like the
> output of 'mktemp -d dracut.XXXXXX', with names like dracut.1Vfn9F seen
> while debugging).
>
> As a consequence, we can't prepare the temporary directory with the
> proper symlinks beforehand.
>
> So, we provide a very-early module of our own, that will (hopefully) run
> before any other module, to fixup the messed-up layout prepared by
> dracut. This module moves the content of /lib, /bin, and /sbin, out and
> into their counterparts in /usr, and creates the usual symlinks.
>
> When we do not require a merged-usr, then we have nothing to do, so the
> module checks for /lib being a symlink, as the hint that we want a
> merged-usr or not.
>
> Note: currently, we've seen nothing that dracut installed in /bin or
> /sbin, but for trying to be future-proof, we also handle them; this
> causes a spurious warning:
> mv: cannot stat '..../build/buildroot-fs/cpio/tmp/dracut.YQnzNP/initramfs/bin/*': No such file or directory
>
> Since there are already quite a bunch of similar failures in the
> official modules bundled in dracut, an extra such issue or two should
> not be too scary...
>
> Fixes:
> https://gitlab.com/buildroot.org/buildroot/-/jobs/3282261241
> https://gitlab.com/buildroot.org/buildroot/-/jobs/3282261239
> https://gitlab.com/buildroot.org/buildroot/-/jobs/3282261236
>
> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
> Cc: Thierry Bultel <thierry.bultel@linatsea.fr>
> Cc: Adam Duskett <aduskett@gmail.com>
> ---
> package/dracut/dracut.mk | 2 ++
> package/dracut/merged-usr-module-setup.sh | 26 +++++++++++++++++++++++
> 2 files changed, 28 insertions(+)
> create mode 100644 package/dracut/merged-usr-module-setup.sh
Applied to master, thanks.
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-11-13 21:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-11-12 13:37 [Buildroot] [PATCH] package/dracut: workaround breakage on non-merged-usr hosts Yann E. MORIN
2022-11-13 21:11 ` Thomas Petazzoni via buildroot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.