* [RFC PATCH 1/2] support adding module-specific parameters
@ 2012-01-10 15:19 xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w
[not found] ` <1326208786-24344-1-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 13+ messages in thread
From: xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w @ 2012-01-10 15:19 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA; +Cc: harald-H+wXaHxf7aLQT0dZR+AlfA, Cong Wang
From: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
ssh-client module needs a specific parameter, --ssh-key, but
this parameter is totally useless for other modules. So, introduce
a way to let users to pass module-specific parameters, that is,
using colons to separate module name and its parameters, like,
--add ssh-client:sshkey=/root/.ssh/kdump_id_rsa.pub
Cc: harald-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Signed-off-by: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
dracut | 30 ++++++++++++++++++++++++++----
dracut-functions | 14 ++++++++++++--
dracut.8.xml | 22 ++++++++++++++++++----
3 files changed, 56 insertions(+), 10 deletions(-)
diff --git a/dracut b/dracut
index 8fcdffe..f3fa257 100755
--- a/dracut
+++ b/dracut
@@ -199,6 +199,13 @@ push_arg() {
fi
}
+declare -A dracut_module_args
+read_module_args() {
+ local _key="${1%%:*}"
+ local _val="${1#*:}"
+ dracut_module_args["$_key"]="$_val"
+}
+
verbosity_mod_l=0
while (($# > 0)); do
@@ -319,13 +326,23 @@ fi
# these optins add to the stuff in the config file
if (( ${#add_dracutmodules_l[@]} )); then
while pop add_dracutmodules_l val; do
- add_dracutmodules+=" $val "
+ if [[ "$val" =~ ":" ]]; then
+ add_dracutmodules+=" ${val%%:*} "
+ read_module_args "$val"
+ else
+ add_dracutmodules+=" $val "
+ fi
done
fi
if (( ${#force_add_dracutmodules_l[@]} )); then
while pop force_add_dracutmodules_l val; do
- force_add_dracutmodules+=" $val "
+ if [[ "$val" =~ ":" ]]; then
+ force_add_dracutmodules+="${val%%:*} "
+ read_module_args "$val"
+ else
+ force_add_dracutmodules+=" $val "
+ fi
done
fi
@@ -364,7 +381,12 @@ fi
if (( ${#dracutmodules_l[@]} )); then
dracutmodules=''
while pop dracutmodules_l val; do
- dracutmodules+="$val "
+ if [[ "$val" =~ ":" ]]; then
+ dracutmodules+="${val%%:*} "
+ read_module_args "$val"
+ else
+ dracutmodules+="$val "
+ fi
done
fi
@@ -591,7 +613,7 @@ export initdir dracutbasedir dracutmodules drivers \
add_drivers mdadmconf lvmconf filesystems \
use_fstab libdir usrlibdir fscks nofscks cttyhack \
stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \
- debug host_fs_types host_devs sshkey
+ debug host_fs_types host_devs sshkey dracut_module_args
# Create some directory structure first
[[ $prefix ]] && mkdir -m 0755 -p "${initdir}${prefix}"
diff --git a/dracut-functions b/dracut-functions
index 3dd72e9..00f8309 100755
--- a/dracut-functions
+++ b/dracut-functions
@@ -690,14 +690,24 @@ module_check() {
# if we do not have a check script, we are unconditionally included
[[ -x $_moddir/check ]] || return 0
[ $_forced -ne 0 ] && unset hostonly
- $_moddir/check $hostonly
+ if [ -n "${dracut_module_args["$1"]}" ]; then
+ local _l="${dracut_module_args["$1"]}"
+ eval "(${_l/:/;};$_moddir/check $hostonly;)"
+ else
+ $_moddir/check $hostonly
+ fi
_ret=$?
else
unset check depends install installkernel
. $_moddir/module-setup.sh
is_func check || return 0
[ $_forced -ne 0 ] && unset hostonly
- check $hostonly
+ if [ -n "${dracut_module_args["$1"]}" ]; then
+ local _l="${dracut_module_args["$1"]}"
+ eval "(${_l/:/;};check $hostonly;)"
+ else
+ check $hostonly
+ fi
_ret=$?
unset check depends install installkernel
fi
diff --git a/dracut.8.xml b/dracut.8.xml
index 5a5df54..ea24764 100644
--- a/dracut.8.xml
+++ b/dracut.8.xml
@@ -106,13 +106,14 @@ For a complete list of kernel command line options see
<option>-m</option>
</term>
<term>
- <option>--modules <replaceable><list of dracut modules></replaceable></option>
+ <option>--modules <replaceable><module1:para1=val1:para2=val2 module2 ...></replaceable></option>
</term>
<listitem>
<para>specify a space-separated list of dracut modules to call
when building the initramfs.
Modules are located in
-<filename>/usr/lib/dracut/modules.d</filename>. This parameter can be specified multiple times.</para>
+<filename>/usr/lib/dracut/modules.d</filename>. This parameter can be specified multiple times.
+You can also pass module specific parameters here, using colons, for example, -m ssh-client:sshkey=/root/ssh-key.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -131,7 +132,7 @@ Modules are located in
<option>-a</option>
</term>
<term>
- <option>--add <replaceable><list of dracut modules></replaceable></option>
+ <option>--add <replaceable><module1:para1=val1:para2=val2 module2 ...></replaceable></option>
</term>
<listitem>
<para>add a space-separated list of dracut modules to the default set of modules. This parameter can be specified multiple times.</para>
@@ -139,7 +140,7 @@ Modules are located in
</varlistentry>
<varlistentry>
<term>
- <option>--force-add <replaceable><list of dracut modules></replaceable></option>
+ <option>--force-add <replaceable><module1:para1=val1:para2=val2 module2 ...></replaceable></option>
</term>
<listitem>
<para>force to add a space-separated list of dracut modules to the default set of modules, when -H is specified. This parameter can be specified multiple times.</para>
@@ -539,6 +540,19 @@ TARGET directory in the final initramfs. If SOURCE is a file, it will be install
</varlistentry>
</variablelist>
</refsect2>
+ <refsect2>
+ <title>Module Specific Parameters</title>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>ssh-client</option>
+ </term>
+ <listitem>
+ <para>sshkey=/path/to/sshkey (specifies the path to your ssh public key which will be used by ssh-client module)</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
</refsect1>
<refsect1>
<title>Files</title>
--
1.7.7.5
^ permalink raw reply related [flat|nested] 13+ messages in thread[parent not found: <1326208786-24344-1-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* [PATCH 2/2] remove the global --sshkey parameter [not found] ` <1326208786-24344-1-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2012-01-10 15:19 ` xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w [not found] ` <1326208786-24344-2-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2012-01-11 2:30 ` [RFC PATCH 1/2] support adding module-specific parameters Dave Young 2012-01-23 11:14 ` Harald Hoyer 2 siblings, 1 reply; 13+ messages in thread From: xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w @ 2012-01-10 15:19 UTC (permalink / raw) To: initramfs-u79uwXL29TY76Z2rM5mHXA; +Cc: harald-H+wXaHxf7aLQT0dZR+AlfA, Cong Wang From: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Signed-off-by: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> --- dracut | 4 +--- dracut.8.xml | 8 -------- 2 files changed, 1 insertions(+), 11 deletions(-) diff --git a/dracut b/dracut index f3fa257..58c4fde 100755 --- a/dracut +++ b/dracut @@ -118,7 +118,6 @@ Creates initial ramdisk images for preloading modules -M, --show-modules Print included module's name to standard output during build. --keep Keep the temporary initramfs for debugging purposes - --sshkey [SSHKEY] Add ssh key to initramfs (use with ssh-client module) --ctty Add control tty for emergency shells EOF } @@ -242,7 +241,6 @@ while (($# > 0)); do --debug) debug="yes";; --profile) profile="yes";; --ctty) cttyhack="yes";; - --sshkey) read_arg sshkey "$@" || shift;; -v|--verbose) ((verbosity_mod_l++));; -q|--quiet) ((verbosity_mod_l--));; -l|--local) allowlocal="yes" ;; @@ -613,7 +611,7 @@ export initdir dracutbasedir dracutmodules drivers \ add_drivers mdadmconf lvmconf filesystems \ use_fstab libdir usrlibdir fscks nofscks cttyhack \ stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \ - debug host_fs_types host_devs sshkey dracut_module_args + debug host_fs_types host_devs dracut_module_args # Create some directory structure first [[ $prefix ]] && mkdir -m 0755 -p "${initdir}${prefix}" diff --git a/dracut.8.xml b/dracut.8.xml index ea24764..0dc6225 100644 --- a/dracut.8.xml +++ b/dracut.8.xml @@ -371,14 +371,6 @@ Default: </varlistentry> <varlistentry> <term> - <option>--sshkey <replaceable><sshkey file></replaceable></option> - </term> - <listitem> - <para>ssh key file used with ssh-client module.</para> - </listitem> - </varlistentry> - <varlistentry> - <term> <option>-l</option> </term> <term> -- 1.7.7.5 ^ permalink raw reply related [flat|nested] 13+ messages in thread
[parent not found: <1326208786-24344-2-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 2/2] remove the global --sshkey parameter [not found] ` <1326208786-24344-2-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2012-01-11 2:59 ` Dave Young [not found] ` <4F0CFB08.6030800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 13+ messages in thread From: Dave Young @ 2012-01-11 2:59 UTC (permalink / raw) To: xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, harald-H+wXaHxf7aLQT0dZR+AlfA On 01/10/2012 11:19 PM, xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote: > From: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > Signed-off-by: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > --- > dracut | 4 +--- > dracut.8.xml | 8 -------- > 2 files changed, 1 insertions(+), 11 deletions(-) > > diff --git a/dracut b/dracut > index f3fa257..58c4fde 100755 > --- a/dracut > +++ b/dracut > @@ -118,7 +118,6 @@ Creates initial ramdisk images for preloading modules > -M, --show-modules Print included module's name to standard output during > build. > --keep Keep the temporary initramfs for debugging purposes > - --sshkey [SSHKEY] Add ssh key to initramfs (use with ssh-client module) > --ctty Add control tty for emergency shells > EOF > } > @@ -242,7 +241,6 @@ while (($# > 0)); do > --debug) debug="yes";; > --profile) profile="yes";; > --ctty) cttyhack="yes";; > - --sshkey) read_arg sshkey "$@" || shift;; > -v|--verbose) ((verbosity_mod_l++));; > -q|--quiet) ((verbosity_mod_l--));; > -l|--local) allowlocal="yes" ;; > @@ -613,7 +611,7 @@ export initdir dracutbasedir dracutmodules drivers \ > add_drivers mdadmconf lvmconf filesystems \ > use_fstab libdir usrlibdir fscks nofscks cttyhack \ > stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \ > - debug host_fs_types host_devs sshkey dracut_module_args > + debug host_fs_types host_devs dracut_module_args > > # Create some directory structure first > [[ $prefix ]] && mkdir -m 0755 -p "${initdir}${prefix}" > diff --git a/dracut.8.xml b/dracut.8.xml > index ea24764..0dc6225 100644 > --- a/dracut.8.xml > +++ b/dracut.8.xml > @@ -371,14 +371,6 @@ Default: > </varlistentry> > <varlistentry> > <term> > - <option>--sshkey <replaceable><sshkey file></replaceable></option> > - </term> > - <listitem> > - <para>ssh key file used with ssh-client module.</para> > - </listitem> > - </varlistentry> > - <varlistentry> > - <term> > <option>-l</option> > </term> > <term> Hi, After removing --sshkey we need to parse dracut_module_args for module use. Maybe in a general function of dracut-lib will be fine. Also need consider the multi-param case like below: module:a=b,c=d,e=f,... Ie. in ssh-client module we need to parse "sshkey=/root/.ssh/id_rsa" for installing sshkey -- Thanks Dave ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <4F0CFB08.6030800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/2] remove the global --sshkey parameter [not found] ` <4F0CFB08.6030800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2012-01-11 3:40 ` Dave Young 2012-01-11 9:54 ` Cong Wang 1 sibling, 0 replies; 13+ messages in thread From: Dave Young @ 2012-01-11 3:40 UTC (permalink / raw) To: xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, harald-H+wXaHxf7aLQT0dZR+AlfA On 01/11/2012 10:59 AM, Dave Young wrote: > On 01/10/2012 11:19 PM, xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote: > >> From: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >> >> Signed-off-by: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >> --- >> dracut | 4 +--- >> dracut.8.xml | 8 -------- >> 2 files changed, 1 insertions(+), 11 deletions(-) >> >> diff --git a/dracut b/dracut >> index f3fa257..58c4fde 100755 >> --- a/dracut >> +++ b/dracut >> @@ -118,7 +118,6 @@ Creates initial ramdisk images for preloading modules >> -M, --show-modules Print included module's name to standard output during >> build. >> --keep Keep the temporary initramfs for debugging purposes >> - --sshkey [SSHKEY] Add ssh key to initramfs (use with ssh-client module) >> --ctty Add control tty for emergency shells >> EOF >> } >> @@ -242,7 +241,6 @@ while (($# > 0)); do >> --debug) debug="yes";; >> --profile) profile="yes";; >> --ctty) cttyhack="yes";; >> - --sshkey) read_arg sshkey "$@" || shift;; >> -v|--verbose) ((verbosity_mod_l++));; >> -q|--quiet) ((verbosity_mod_l--));; >> -l|--local) allowlocal="yes" ;; >> @@ -613,7 +611,7 @@ export initdir dracutbasedir dracutmodules drivers \ >> add_drivers mdadmconf lvmconf filesystems \ >> use_fstab libdir usrlibdir fscks nofscks cttyhack \ >> stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \ >> - debug host_fs_types host_devs sshkey dracut_module_args >> + debug host_fs_types host_devs dracut_module_args >> >> # Create some directory structure first >> [[ $prefix ]] && mkdir -m 0755 -p "${initdir}${prefix}" >> diff --git a/dracut.8.xml b/dracut.8.xml >> index ea24764..0dc6225 100644 >> --- a/dracut.8.xml >> +++ b/dracut.8.xml >> @@ -371,14 +371,6 @@ Default: >> </varlistentry> >> <varlistentry> >> <term> >> - <option>--sshkey <replaceable><sshkey file></replaceable></option> >> - </term> >> - <listitem> >> - <para>ssh key file used with ssh-client module.</para> >> - </listitem> >> - </varlistentry> >> - <varlistentry> >> - <term> >> <option>-l</option> >> </term> >> <term> > > > Hi, > > After removing --sshkey we need to parse dracut_module_args for module > use. Maybe in a general function of dracut-lib will be fine. > > Also need consider the multi-param case like below: > module:a=b,c=d,e=f,... > > Ie. in ssh-client module we need to parse "sshkey=/root/.ssh/id_rsa" for > installing sshkey > Seems $sshkey is only limited to check() function, so it will be not available in install(), should add something like below: diff --git a/modules.d/95ssh-client/module-setup.sh b/modules.d/95ssh-client/module-setup.sh index ef8effe..352817c 100755 --- a/modules.d/95ssh-client/module-setup.sh +++ b/modules.d/95ssh-client/module-setup.sh @@ -39,7 +39,10 @@ inst_sshenv() fi # Copy over ssh key and knowhosts if needed + ssharg=${dracut_module_args["ssh-client"]} + sshkey=`echo $ssharg|cut --fields=2 -d '='` [[ $sshkey ]] && { + echo "installing sshkey" inst $sshkey [[ -f /root/.ssh/known_hosts ]] && inst /root/.ssh/known_hosts [[ -f /etc/ssh/ssh_known_hosts ]] && inst /etc/ssh/ssh_known_hosts -- Thanks Dave ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] remove the global --sshkey parameter [not found] ` <4F0CFB08.6030800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2012-01-11 3:40 ` Dave Young @ 2012-01-11 9:54 ` Cong Wang [not found] ` <4F0D5C64.1080203-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 1 sibling, 1 reply; 13+ messages in thread From: Cong Wang @ 2012-01-11 9:54 UTC (permalink / raw) To: Dave Young Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, harald-H+wXaHxf7aLQT0dZR+AlfA On 01/11/2012 10:59 AM, Dave Young wrote: > > Hi, Hi, > > After removing --sshkey we need to parse dracut_module_args for module > use. Maybe in a general function of dracut-lib will be fine. > > Also need consider the multi-param case like below: > module:a=b,c=d,e=f,... > > Ie. in ssh-client module we need to parse "sshkey=/root/.ssh/id_rsa" for > installing sshkey > It is already done by the first patch. :) Note that, I designed to use colons to separate parameters, not commas, even if you pass multiple parameters. Thanks. ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <4F0D5C64.1080203-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 2/2] remove the global --sshkey parameter [not found] ` <4F0D5C64.1080203-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2012-01-12 2:15 ` Dave Young [not found] ` <4F0E4247.1010501-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 13+ messages in thread From: Dave Young @ 2012-01-12 2:15 UTC (permalink / raw) To: Cong Wang; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, harald-H+wXaHxf7aLQT0dZR+AlfA On 01/11/2012 05:54 PM, Cong Wang wrote: > On 01/11/2012 10:59 AM, Dave Young wrote: >> >> Hi, > > Hi, > >> >> After removing --sshkey we need to parse dracut_module_args for module >> use. Maybe in a general function of dracut-lib will be fine. >> >> Also need consider the multi-param case like below: >> module:a=b,c=d,e=f,... >> >> Ie. in ssh-client module we need to parse "sshkey=/root/.ssh/id_rsa" for >> installing sshkey >> > > It is already done by the first patch. :) During my test, the $sshkey is only available in check() function, finally the key was not installed to initramfs. Please see my another reply before. > > Note that, I designed to use colons to separate parameters, not commas, > even if you pass multiple parameters. I think A:b,c,d looks better, but I have no strong opinion about this because right half of first colon can be seen as param which can be defined and parsed by specific module. -- Thanks Dave ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <4F0E4247.1010501-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/2] remove the global --sshkey parameter [not found] ` <4F0E4247.1010501-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2012-01-13 9:03 ` Cong Wang 0 siblings, 0 replies; 13+ messages in thread From: Cong Wang @ 2012-01-13 9:03 UTC (permalink / raw) To: Dave Young Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, harald-H+wXaHxf7aLQT0dZR+AlfA On 01/12/2012 10:15 AM, Dave Young wrote: > On 01/11/2012 05:54 PM, Cong Wang wrote: > >> On 01/11/2012 10:59 AM, Dave Young wrote: >>> >>> Hi, >> >> Hi, >> >>> >>> After removing --sshkey we need to parse dracut_module_args for module >>> use. Maybe in a general function of dracut-lib will be fine. >>> >>> Also need consider the multi-param case like below: >>> module:a=b,c=d,e=f,... >>> >>> Ie. in ssh-client module we need to parse "sshkey=/root/.ssh/id_rsa" for >>> installing sshkey >>> >> >> It is already done by the first patch. :) > > > During my test, the $sshkey is only available in check() function, > finally the key was not installed to initramfs. Please see my another reply > before. Hmm, so sshkey= parameter should be passed to both check() and install()... I think I need to redesign the command line interface. > >> >> Note that, I designed to use colons to separate parameters, not commas, >> even if you pass multiple parameters. > > > I think A:b,c,d looks better, but I have no strong opinion about this > because right half of first colon can be seen as param which can be > defined and parsed by specific module. > Makes sense, I will check if this is hard to be done. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFC PATCH 1/2] support adding module-specific parameters [not found] ` <1326208786-24344-1-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2012-01-10 15:19 ` [PATCH 2/2] remove the global --sshkey parameter xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w @ 2012-01-11 2:30 ` Dave Young [not found] ` <4F0CF43E.1020901-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2012-01-23 11:14 ` Harald Hoyer 2 siblings, 1 reply; 13+ messages in thread From: Dave Young @ 2012-01-11 2:30 UTC (permalink / raw) To: xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, harald-H+wXaHxf7aLQT0dZR+AlfA Hi, Thanks for the effort, before test it I have two comments On 01/10/2012 11:19 PM, xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote: > From: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > ssh-client module needs a specific parameter, --ssh-key, but > this parameter is totally useless for other modules. So, introduce > a way to let users to pass module-specific parameters, that is, > using colons to separate module name and its parameters, like, > > --add ssh-client:sshkey=/root/.ssh/kdump_id_rsa.pub Seems no way to add param to modules which is not add explicitly such as simply run ./dracut -l So also need to find way to add params to the implicit-added modules? > > Cc: harald-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org > Signed-off-by: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > --- > dracut | 30 ++++++++++++++++++++++++++---- > dracut-functions | 14 ++++++++++++-- > dracut.8.xml | 22 ++++++++++++++++++---- > 3 files changed, 56 insertions(+), 10 deletions(-) > > diff --git a/dracut b/dracut > index 8fcdffe..f3fa257 100755 > --- a/dracut > +++ b/dracut > @@ -199,6 +199,13 @@ push_arg() { > fi > } > > +declare -A dracut_module_args > +read_module_args() { > + local _key="${1%%:*}" > + local _val="${1#*:}" > + dracut_module_args["$_key"]="$_val" [ -z "$_key" ] above will fail > +} > + > verbosity_mod_l=0 > > while (($# > 0)); do > @@ -319,13 +326,23 @@ fi > # these optins add to the stuff in the config file > if (( ${#add_dracutmodules_l[@]} )); then > while pop add_dracutmodules_l val; do > - add_dracutmodules+=" $val " > + if [[ "$val" =~ ":" ]]; then > + add_dracutmodules+=" ${val%%:*} " > + read_module_args "$val" > + else > + add_dracutmodules+=" $val " > + fi > done > fi > > if (( ${#force_add_dracutmodules_l[@]} )); then > while pop force_add_dracutmodules_l val; do > - force_add_dracutmodules+=" $val " > + if [[ "$val" =~ ":" ]]; then > + force_add_dracutmodules+="${val%%:*} " > + read_module_args "$val" > + else > + force_add_dracutmodules+=" $val " > + fi > done > fi > > @@ -364,7 +381,12 @@ fi > if (( ${#dracutmodules_l[@]} )); then > dracutmodules='' > while pop dracutmodules_l val; do > - dracutmodules+="$val " > + if [[ "$val" =~ ":" ]]; then > + dracutmodules+="${val%%:*} " > + read_module_args "$val" > + else > + dracutmodules+="$val " > + fi > done > fi > > @@ -591,7 +613,7 @@ export initdir dracutbasedir dracutmodules drivers \ > add_drivers mdadmconf lvmconf filesystems \ > use_fstab libdir usrlibdir fscks nofscks cttyhack \ > stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \ > - debug host_fs_types host_devs sshkey > + debug host_fs_types host_devs sshkey dracut_module_args > > # Create some directory structure first > [[ $prefix ]] && mkdir -m 0755 -p "${initdir}${prefix}" > diff --git a/dracut-functions b/dracut-functions > index 3dd72e9..00f8309 100755 > --- a/dracut-functions > +++ b/dracut-functions > @@ -690,14 +690,24 @@ module_check() { > # if we do not have a check script, we are unconditionally included > [[ -x $_moddir/check ]] || return 0 > [ $_forced -ne 0 ] && unset hostonly > - $_moddir/check $hostonly > + if [ -n "${dracut_module_args["$1"]}" ]; then > + local _l="${dracut_module_args["$1"]}" > + eval "(${_l/:/;};$_moddir/check $hostonly;)" > + else > + $_moddir/check $hostonly > + fi > _ret=$? > else > unset check depends install installkernel > . $_moddir/module-setup.sh > is_func check || return 0 > [ $_forced -ne 0 ] && unset hostonly > - check $hostonly > + if [ -n "${dracut_module_args["$1"]}" ]; then > + local _l="${dracut_module_args["$1"]}" > + eval "(${_l/:/;};check $hostonly;)" > + else > + check $hostonly > + fi > _ret=$? > unset check depends install installkernel > fi > diff --git a/dracut.8.xml b/dracut.8.xml > index 5a5df54..ea24764 100644 > --- a/dracut.8.xml > +++ b/dracut.8.xml > @@ -106,13 +106,14 @@ For a complete list of kernel command line options see > <option>-m</option> > </term> > <term> > - <option>--modules <replaceable><list of dracut modules></replaceable></option> > + <option>--modules <replaceable><module1:para1=val1:para2=val2 module2 ...></replaceable></option> > </term> > <listitem> > <para>specify a space-separated list of dracut modules to call > when building the initramfs. > Modules are located in > -<filename>/usr/lib/dracut/modules.d</filename>. This parameter can be specified multiple times.</para> > +<filename>/usr/lib/dracut/modules.d</filename>. This parameter can be specified multiple times. > +You can also pass module specific parameters here, using colons, for example, -m ssh-client:sshkey=/root/ssh-key.</para> > </listitem> > </varlistentry> > <varlistentry> > @@ -131,7 +132,7 @@ Modules are located in > <option>-a</option> > </term> > <term> > - <option>--add <replaceable><list of dracut modules></replaceable></option> > + <option>--add <replaceable><module1:para1=val1:para2=val2 module2 ...></replaceable></option> > </term> > <listitem> > <para>add a space-separated list of dracut modules to the default set of modules. This parameter can be specified multiple times.</para> > @@ -139,7 +140,7 @@ Modules are located in > </varlistentry> > <varlistentry> > <term> > - <option>--force-add <replaceable><list of dracut modules></replaceable></option> > + <option>--force-add <replaceable><module1:para1=val1:para2=val2 module2 ...></replaceable></option> > </term> > <listitem> > <para>force to add a space-separated list of dracut modules to the default set of modules, when -H is specified. This parameter can be specified multiple times.</para> > @@ -539,6 +540,19 @@ TARGET directory in the final initramfs. If SOURCE is a file, it will be install > </varlistentry> > </variablelist> > </refsect2> > + <refsect2> > + <title>Module Specific Parameters</title> > + <variablelist> > + <varlistentry> > + <term> > + <option>ssh-client</option> > + </term> > + <listitem> > + <para>sshkey=/path/to/sshkey (specifies the path to your ssh public key which will be used by ssh-client module)</para> > + </listitem> > + </varlistentry> > + </variablelist> > + </refsect2> > </refsect1> > <refsect1> > <title>Files</title> -- Thanks Dave ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <4F0CF43E.1020901-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [RFC PATCH 1/2] support adding module-specific parameters [not found] ` <4F0CF43E.1020901-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2012-01-11 9:58 ` Cong Wang [not found] ` <4F0D5D57.9000804-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 13+ messages in thread From: Cong Wang @ 2012-01-11 9:58 UTC (permalink / raw) To: Dave Young Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, harald-H+wXaHxf7aLQT0dZR+AlfA On 01/11/2012 10:30 AM, Dave Young wrote: > Hi, > > Thanks for the effort, before test it I have two comments > > On 01/10/2012 11:19 PM, xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote: > >> From: Cong Wang<xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >> >> ssh-client module needs a specific parameter, --ssh-key, but >> this parameter is totally useless for other modules. So, introduce >> a way to let users to pass module-specific parameters, that is, >> using colons to separate module name and its parameters, like, >> >> --add ssh-client:sshkey=/root/.ssh/kdump_id_rsa.pub > > > Seems no way to add param to modules which is not add explicitly > such as simply run > ./dracut -l > > So also need to find way to add params to the implicit-added modules? I think you mean -H? Yeah, for cases like -H which selects modules automatically, I think we need to add an option in dracut.conf to let users specify the module parameters. I will add this... >> >> +declare -A dracut_module_args >> +read_module_args() { >> + local _key="${1%%:*}" >> + local _val="${1#*:}" > >> + dracut_module_args["$_key"]="$_val" > > [ -z "$_key" ] above will fail > Yeah, but only when users forget the module name, right? :) ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <4F0D5D57.9000804-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [RFC PATCH 1/2] support adding module-specific parameters [not found] ` <4F0D5D57.9000804-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2012-01-12 2:19 ` Dave Young [not found] ` <4F0E434F.9080002-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 13+ messages in thread From: Dave Young @ 2012-01-12 2:19 UTC (permalink / raw) To: Cong Wang; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, harald-H+wXaHxf7aLQT0dZR+AlfA On 01/11/2012 05:58 PM, Cong Wang wrote: > On 01/11/2012 10:30 AM, Dave Young wrote: >> Hi, >> >> Thanks for the effort, before test it I have two comments >> >> On 01/10/2012 11:19 PM, xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote: >> >>> From: Cong Wang<xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >>> >>> ssh-client module needs a specific parameter, --ssh-key, but >>> this parameter is totally useless for other modules. So, introduce >>> a way to let users to pass module-specific parameters, that is, >>> using colons to separate module name and its parameters, like, >>> >>> --add ssh-client:sshkey=/root/.ssh/kdump_id_rsa.pub >> >> >> Seems no way to add param to modules which is not add explicitly >> such as simply run >> ./dracut -l >> >> So also need to find way to add params to the implicit-added modules? > > > I think you mean -H? Yeah, for cases like -H which selects modules > automatically, I think we need to add an option in dracut.conf to let > users specify the module parameters. I will add this... I mean not only -H but also run dracut without any arguments > > >>> >>> +declare -A dracut_module_args >>> +read_module_args() { >>> + local _key="${1%%:*}" >>> + local _val="${1#*:}" >> >>> + dracut_module_args["$_key"]="$_val" >> >> [ -z "$_key" ] above will fail >> > > Yeah, but only when users forget the module name, right? :) Yes > > -- > To unsubscribe from this list: send the line "unsubscribe initramfs" in > the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Thanks Dave ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <4F0E434F.9080002-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [RFC PATCH 1/2] support adding module-specific parameters [not found] ` <4F0E434F.9080002-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2012-01-13 9:01 ` Cong Wang 0 siblings, 0 replies; 13+ messages in thread From: Cong Wang @ 2012-01-13 9:01 UTC (permalink / raw) To: Dave Young Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, harald-H+wXaHxf7aLQT0dZR+AlfA On 01/12/2012 10:19 AM, Dave Young wrote: > On 01/11/2012 05:58 PM, Cong Wang wrote: > >> On 01/11/2012 10:30 AM, Dave Young wrote: >>> Hi, >>> >>> Thanks for the effort, before test it I have two comments >>> >>> On 01/10/2012 11:19 PM, xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote: >>> >>>> From: Cong Wang<xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> >>>> >>>> ssh-client module needs a specific parameter, --ssh-key, but >>>> this parameter is totally useless for other modules. So, introduce >>>> a way to let users to pass module-specific parameters, that is, >>>> using colons to separate module name and its parameters, like, >>>> >>>> --add ssh-client:sshkey=/root/.ssh/kdump_id_rsa.pub >>> >>> >>> Seems no way to add param to modules which is not add explicitly >>> such as simply run >>> ./dracut -l >>> >>> So also need to find way to add params to the implicit-added modules? >> >> >> I think you mean -H? Yeah, for cases like -H which selects modules >> automatically, I think we need to add an option in dracut.conf to let >> users specify the module parameters. I will add this... > > > I mean not only -H but also run dracut without any arguments Understand. > >> >> >>>> >>>> +declare -A dracut_module_args >>>> +read_module_args() { >>>> + local _key="${1%%:*}" >>>> + local _val="${1#*:}" >>> >>>> + dracut_module_args["$_key"]="$_val" >>> >>> [ -z "$_key" ] above will fail >>> >> >> Yeah, but only when users forget the module name, right? :) > > > Yes > Then it is invalid input. :-D But yeah, we could handle this in a better way. I will update the patch. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFC PATCH 1/2] support adding module-specific parameters [not found] ` <1326208786-24344-1-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2012-01-10 15:19 ` [PATCH 2/2] remove the global --sshkey parameter xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w 2012-01-11 2:30 ` [RFC PATCH 1/2] support adding module-specific parameters Dave Young @ 2012-01-23 11:14 ` Harald Hoyer [not found] ` <4F1D412B.1060801-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2 siblings, 1 reply; 13+ messages in thread From: Harald Hoyer @ 2012-01-23 11:14 UTC (permalink / raw) To: xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA Am 10.01.2012 16:19, schrieb xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org: > From: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > ssh-client module needs a specific parameter, --ssh-key, but > this parameter is totally useless for other modules. So, introduce > a way to let users to pass module-specific parameters, that is, > using colons to separate module name and its parameters, like, > > --add ssh-client:sshkey=/root/.ssh/kdump_id_rsa.pub > > Cc: harald-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org > Signed-off-by: Cong Wang <xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > --- > dracut | 30 ++++++++++++++++++++++++++---- > dracut-functions | 14 ++++++++++++-- > dracut.8.xml | 22 ++++++++++++++++++---- > 3 files changed, 56 insertions(+), 10 deletions(-) Hmm, I would envision another strategy here. Modules could provide a function for command line parsing. We could source each module-setup.sh and rename the functions prefixed with the module name and store them in an array. Function renaming could be done via: $ theirfunc() { echo "do their thing"; } $ eval "$(echo "orig_theirfunc()"; declare -f theirfunc | tail -n +2)" $ theirfunc() { echo "do my thing"; orig_theirfunc; } $ theirfunc do my thing do their thing What do you think? ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <4F1D412B.1060801-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [RFC PATCH 1/2] support adding module-specific parameters [not found] ` <4F1D412B.1060801-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2012-01-24 15:23 ` Cong Wang 0 siblings, 0 replies; 13+ messages in thread From: Cong Wang @ 2012-01-24 15:23 UTC (permalink / raw) To: Harald Hoyer; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA On 01/23/2012 07:14 PM, Harald Hoyer wrote: > > Hmm, I would envision another strategy here. Modules could provide a function > for command line parsing. > > We could source each module-setup.sh and rename the functions prefixed with the > module name and store them in an array. Sorry, I don't quite understand. For this case, you mean ssh-client module should provide a function like ssh-client_getopt() to parse the command line --add ssh-client:sshkey=/root/.ssh/kdump_id_rsa.pub ? Thanks. ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2012-01-24 15:23 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-10 15:19 [RFC PATCH 1/2] support adding module-specific parameters xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w
[not found] ` <1326208786-24344-1-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-01-10 15:19 ` [PATCH 2/2] remove the global --sshkey parameter xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w
[not found] ` <1326208786-24344-2-git-send-email-xiyou.wangcong-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-01-11 2:59 ` Dave Young
[not found] ` <4F0CFB08.6030800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-11 3:40 ` Dave Young
2012-01-11 9:54 ` Cong Wang
[not found] ` <4F0D5C64.1080203-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-01-12 2:15 ` Dave Young
[not found] ` <4F0E4247.1010501-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-13 9:03 ` Cong Wang
2012-01-11 2:30 ` [RFC PATCH 1/2] support adding module-specific parameters Dave Young
[not found] ` <4F0CF43E.1020901-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-11 9:58 ` Cong Wang
[not found] ` <4F0D5D57.9000804-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-01-12 2:19 ` Dave Young
[not found] ` <4F0E434F.9080002-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-13 9:01 ` Cong Wang
2012-01-23 11:14 ` Harald Hoyer
[not found] ` <4F1D412B.1060801-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-01-24 15:23 ` Cong Wang
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.