a4f5ed5a7c
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>
50 lines
2.0 KiB
Makefile
50 lines
2.0 KiB
Makefile
################################################################################
|
|
#
|
|
# dracut
|
|
#
|
|
################################################################################
|
|
|
|
DRACUT_VERSION = 057
|
|
DRACUT_SITE = $(call github,dracutdevs,dracut,$(DRACUT_VERSION))
|
|
DRACUT_LICENSE = GPL-2.0
|
|
DRACUT_LICENSE_FILES = COPYING
|
|
|
|
HOST_DRACUT_DEPENDENCIES = host-pkgconf host-kmod host-prelink-cross
|
|
|
|
define HOST_DRACUT_POST_INSTALL_WRAPPER_SCRIPT
|
|
mv $(HOST_DIR)/bin/dracut $(HOST_DIR)/bin/dracut.real
|
|
install -D -m 0755 $(HOST_DRACUT_PKGDIR)/dracut_wrapper \
|
|
$(HOST_DIR)/bin/dracut
|
|
endef
|
|
HOST_DRACUT_POST_INSTALL_HOOKS += HOST_DRACUT_POST_INSTALL_WRAPPER_SCRIPT
|
|
|
|
# When using uClibc or musl, there must be "ld-uClibc.so.1" or
|
|
# "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
|
|
HOST_DRACUT_POST_INSTALL_HOOKS += HOST_DRACUT_POST_INSTALL_LIBC_LINKS_MODULE
|
|
|
|
ifeq ($(BR2_INIT_BUSYBOX),y)
|
|
# Dracut does not support busybox init (systemd init is assumed to work
|
|
# out of the box, though). It provides a busybox module, that does not
|
|
# use the same paths as buildroot, and is not meant to be used as an init
|
|
# system.
|
|
# So it is simpler for users to disable the standard 'busybox' module in
|
|
# the configuration file, and enable the "busybox-init' module instead.
|
|
# Note that setting the script as executable (0755) is not mandatory,
|
|
# but this is what dracut does on all its modules, so lets just conform
|
|
# to it.
|
|
define HOST_DRACUT_POST_INSTALL_BUSYBOX_INIT_MODULE
|
|
$(INSTALL) -D -m 0755 package/dracut/busybox-init-module-setup.sh \
|
|
$(HOST_DIR)/lib/dracut/modules.d/05busybox-init/module-setup.sh
|
|
endef
|
|
HOST_DRACUT_POST_INSTALL_HOOKS += HOST_DRACUT_POST_INSTALL_BUSYBOX_INIT_MODULE
|
|
endif
|
|
|
|
$(eval $(host-autotools-package))
|