From 31f1c02ddaf01ba31286c53f2787b805ffd0af26 Mon Sep 17 00:00:00 2001 From: Amerigo Wang Date: Mon, 1 Aug 2011 10:01:23 +0800 Subject: [PATCH] dracut: add --force-add option This patch adds a new option --force-add, which can force dracut to load some module when -H is specified. Signed-off-by: Amerigo Wang --- dracut | 8 ++++++++ dracut-functions | 24 ++++++++++++++++++------ dracut.8.xml | 9 +++++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/dracut b/dracut index aa8cb58b..c9fb6d53 100755 --- a/dracut +++ b/dracut @@ -195,6 +195,7 @@ verbosity_mod_l=0 while (($# > 0)); do case ${1%%=*} in -a|--add) push_arg add_dracutmodules_l "$@" || shift;; + --force-add) push_arg force_add_dracutmodules_l "$@" || shift;; --add-drivers) push_arg add_drivers_l "$@" || shift;; -m|--modules) push_arg dracutmodules_l "$@" || shift;; -o|--omit) push_arg omit_dracutmodules_l "$@" || shift;; @@ -301,6 +302,13 @@ if (( ${#add_dracutmodules_l[@]} )); then done fi +if (( ${#force_add_dracutmodules_l[@]} )); then + while pop force_add_dracutmodules_l val; do + force_add_dracutmodules+=" $val " + done +fi + + if (( ${#add_drivers_l[@]} )); then while pop add_drivers_l val; do add_drivers+=" $val " diff --git a/dracut-functions b/dracut-functions index 5779a184..991e0ebc 100755 --- a/dracut-functions +++ b/dracut-functions @@ -606,21 +606,27 @@ inst_opt_decompress() { module_check() { local _moddir=$(echo ${dracutbasedir}/modules.d/??${1}) local _ret + local _forced=0 + local _hostonly=$hostonly + [ $# -eq 2 ] && _forced=$2 [[ -d $_moddir ]] || return 1 if [[ ! -f $_moddir/module-setup.sh ]]; then # 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 - return $? + _ret=$? else unset check depends install installkernel . $_moddir/module-setup.sh is_func check || return 0 - check + [ $_forced -ne 0 ] && unset hostonly + check $hostonly _ret=$? unset check depends install installkernel - return $_ret fi + hostonly=$_hostonly + return $_ret } module_depends() { @@ -695,8 +701,12 @@ check_module() { strstr " $omit_dracutmodules " " $_mod " && return 1 - if strstr " $dracutmodules $add_dracutmodules " " $_mod "; then - module_check $_mod; ret=$? + if strstr " $dracutmodules $add_dracutmodules $force_add_dracutmodules" " $_mod "; then + if strstr " $force_add_dracutmodules" " $_mod"; then + module_check $_mod 1; ret=$? + else + module_check $_mod 0; ret=$? + fi # explicit module, so also accept ret=255 [[ $ret = 0 || $ret = 255 ]] || return 1 else @@ -714,6 +724,8 @@ check_module() { # handle deps as if they were manually added strstr " $add_dracutmodules " " $_moddep " || \ add_dracutmodules+=" $_moddep " + strstr " $force_add_dracutmodules " " $_moddep " || \ + force_add_dracutmodules+=" $_moddep " # if a module we depend on fail, fail also check_module $_moddep || return 1 done @@ -735,7 +747,7 @@ check_module_dir() { done # Report any missing dracut modules, the user has specified - _modcheck=$add_dracutmodules + _modcheck="$add_dracutmodules $force_add_dracutmodules" [[ $dracutmodules != all ]] && _modcheck="$m $dracutmodules" for _mod in $_modcheck; do strstr "$mods_to_load" "$_mod" && continue diff --git a/dracut.8.xml b/dracut.8.xml index 4cdfe4b5..11ea8c3e 100644 --- a/dracut.8.xml +++ b/dracut.8.xml @@ -136,6 +136,15 @@ Modules are located in add a space-separated list of dracut modules to the default set of modules. This parameter can be specified multiple times. + + + + + + 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. + + +