From 4fd5d80e9dc0d9f2c281d2d955e4d6c1220440cf Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN" Date: Fri, 19 Aug 2022 19:51:00 +0200 Subject: [PATCH] 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 Cc: Arnout Vandecappelle (Essensium/Mind) Cc: Thierry Bultel Cc: Adam Duskett Signed-off-by: Arnout Vandecappelle --- fs/cpio/Config.in | 12 +++++++----- fs/cpio/cpio.mk | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/fs/cpio/Config.in b/fs/cpio/Config.in index 861e9a929e..94a826f9e4 100644 --- a/fs/cpio/Config.in +++ b/fs/cpio/Config.in @@ -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. diff --git a/fs/cpio/cpio.mk b/fs/cpio/cpio.mk index fa66b1c710..d671c337df 100644 --- a/fs/cpio/cpio.mk +++ b/fs/cpio/cpio.mk @@ -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 \