mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-09-25 11:30:37 -09:00
package/dracut: workaround breakage on non-merged-usr hosts
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>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
committed by
Thomas Petazzoni
parent
9cd084b54e
commit
a4f5ed5a7c
@@ -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
|
||||
|
||||
26
package/dracut/merged-usr-module-setup.sh
Normal file
26
package/dracut/merged-usr-module-setup.sh
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user