Hi, Thanks for the effort, before test it I have two comments On 01/10/2012 11:19 PM, xiyou.wangcong@xxxxxxxxx wrote: > From: Cong Wang <xiyou.wangcong@xxxxxxxxx> > > 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@xxxxxxxxxx > Signed-off-by: Cong Wang <xiyou.wangcong@xxxxxxxxx> > --- > 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 -- To unsubscribe from this list: send the line "unsubscribe initramfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html