diff mbox series

[3/4] fs/cpio: accept a list of dracut.conf files

Message ID 417c53083693347f5c22298c49c8ff9df1f35d0f.1660931225.git.yann.morin.1998@free.fr
State Accepted
Headers show
Series dracut: extend support and tests (branch yem/dracut) | expand

Commit Message

Yann E. MORIN Aug. 19, 2022, 5:51 p.m. UTC
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>
---
 fs/cpio/Config.in | 12 +++++++-----
 fs/cpio/cpio.mk   | 19 ++++++++++++++-----
 2 files changed, 21 insertions(+), 10 deletions(-)

Comments

Arnout Vandecappelle Sept. 17, 2022, 8:17 p.m. UTC | #1
On 19/08/2022 19:51, Yann E. MORIN wrote:
> 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>

  Applied to master, thanks.

  Regards,
  Arnout

> ---
>   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 \
Yann E. MORIN Sept. 17, 2022, 9:10 p.m. UTC | #2
Arnout, All,

On 2022-09-17 22:17 +0200, Arnout Vandecappelle spake thusly:
> On 19/08/2022 19:51, Yann E. MORIN wrote:
> >Allow users to specify more than one dracut config file to cover
> >tose cases.
[--SNIP--]
>  Applied to master, thanks.
[--SNIP--]
> >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

When that patch was written, we did not have a release yet with support
for dracut, so I did not add a legacy for _CPIO_DRACUT_CONF_FILE when I
made it a plural. But 2022.08 does have dracut, so we now need to handle
the legacy for BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILE (or not make it a
plural).

Regards,
Yann E. MORIN.

> >+	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 \
Arnout Vandecappelle Sept. 18, 2022, 8:41 a.m. UTC | #3
On 17/09/2022 23:10, Yann E. MORIN wrote:
> Arnout, All,
> 
> On 2022-09-17 22:17 +0200, Arnout Vandecappelle spake thusly:
>> On 19/08/2022 19:51, Yann E. MORIN wrote:
>>> Allow users to specify more than one dracut config file to cover
>>> tose cases.
> [--SNIP--]
>>   Applied to master, thanks.
> [--SNIP--]
>>> 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
> 
> When that patch was written, we did not have a release yet with support
> for dracut, so I did not add a legacy for _CPIO_DRACUT_CONF_FILE when I
> made it a plural. But 2022.08 does have dracut, so we now need to handle
> the legacy for BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILE (or not make it a
> plural).

  I know that, that's why I first checked if dracut was merged in 2022.08. It 
was merged during the stabilisation period but to next, not to master. So, no 
worries.

  Regards,
  Arnout

> 
> Regards,
> Yann E. MORIN.
> 
>>> +	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 \
>
Yann E. MORIN Sept. 18, 2022, 8:46 a.m. UTC | #4
Arnout, All,

On 2022-09-18 10:41 +0200, Arnout Vandecappelle spake thusly:
> On 17/09/2022 23:10, Yann E. MORIN wrote:
> >When that patch was written, we did not have a release yet with support
> >for dracut, so I did not add a legacy for _CPIO_DRACUT_CONF_FILE when I
> >made it a plural. But 2022.08 does have dracut, so we now need to handle
> >the legacy for BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILE (or not make it a
> >plural).
>  I know that, that's why I first checked if dracut was merged in 2022.08. It
> was merged during the stabilisation period but to next, not to master. So,
> no worries.

Arg... Of coutrse, stupid me... :-/

I'll mark my morning patch as rejected, then.

Thanks for being more acute than I was! :-)

Regards,
Yann E. MORIN.
diff mbox series

Patch

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 \