fs/cpio: accept a list of dracut.conf files

It is not unusual that projects can target multiple boards, and in
such cases, a lot is shared between boards and only the low-level
stuff differ.

Allow users to specify more than one dracut config file to cover
tose cases.

dracut does not accept more than one config file with the -c option,
but it can load more than one from a directory with --confdir. So,
we copy all the config files to a temporary directory and se that as
--confdir. However, we can't drop passing -c, or dracut would read
the system-wide /etc/dracut.conf (not sure if ${prefix} is even used),
which we do not want. So, we use an empty file as -c; /dev/null comes
in handy as an empty file.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Cc: Thierry Bultel <thierry.bultel@linatsea.fr>
Cc: Adam Duskett <aduskett@gmail.com>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
This commit is contained in:
Yann E. MORIN 2022-08-19 19:51:00 +02:00 committed by Arnout Vandecappelle
parent c8a618cff7
commit 4fd5d80e9d
2 changed files with 21 additions and 10 deletions

View File

@ -29,13 +29,15 @@ endchoice
if BR2_TARGET_ROOTFS_CPIO_DRACUT
config BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILE
string "dracut configuration file"
config BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILES
string "dracut configuration files"
default "fs/cpio/dracut.conf"
help
Dracut configuration file. It determines which parts of the
rootfs get included in the cpio image. See dracut.conf(5) or
https://github.com/dracutdevs/dracut/blob/master/man/dracut.conf.5.asc
Space-separated list of Dracut configuration files. They
determine which parts of the rootfs get included in the
cpio image. See:
dracut.conf(5)
https://github.com/dracutdevs/dracut/blob/master/man/dracut.conf.5.asc
The default configuration file is suitable for busybox init.
It doesn't, however, pivot_root into a full rootfs.

View File

@ -50,9 +50,14 @@ else ifeq ($(BR2_TARGET_ROOTFS_CPIO_DRACUT),y)
ROOTFS_CPIO_DEPENDENCIES += host-dracut
ROOTFS_CPIO_DRACUT_CONF_FILE = $(call qstrip,$(BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILE))
ifeq ($(BR_BUILDING):$(ROOTFS_CPIO_DRACUT_CONF_FILE),y:)
$(error No dracut config file name specified, check your BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILE setting)
ROOTFS_CPIO_DRACUT_CONF_FILES = $(call qstrip,$(BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILES))
ifeq ($(BR_BUILDING),y)
ifeq ($(ROOTFS_CPIO_DRACUT_CONF_FILES),)
$(error No dracut config file name specified, check your BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILES setting)
endif
ifneq ($(words $(ROOTFS_CPIO_DRACUT_CONF_FILES)),$(words $(sort $(notdir $(ROOTFS_CPIO_DRACUT_CONF_FILES)))))
$(error No two dracut config files can have the same basename, check your BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILES setting)
endif
endif
ifeq ($(BR2_LINUX_KERNEL),y)
@ -63,10 +68,14 @@ ROOTFS_CPIO_OPTS += --no-kernel
endif
define ROOTFS_CPIO_CMD
mkdir -p $(ROOTFS_CPIO_DIR)/tmp
mkdir -p $(ROOTFS_CPIO_DIR)/tmp $(ROOTFS_CPIO_DIR)/confdir
$(foreach cfg,$(ROOTFS_CPIO_DRACUT_CONF_FILES), \
cp $(cfg) $(ROOTFS_CPIO_DIR)/confdir/$(notdir $(cfg))
)
$(HOST_DIR)/bin/dracut \
$(ROOTFS_CPIO_OPTS) \
-c $(ROOTFS_CPIO_DRACUT_CONF_FILE) \
-c /dev/null \
--confdir $(ROOTFS_CPIO_DIR)/confdir \
--sysroot $(TARGET_DIR) \
--tmpdir $(ROOTFS_CPIO_DIR)/tmp \
-M \