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;;
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 "
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() {
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
# 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
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