Browse Source

Merge branch 'optimization' of https://github.com/ryncsn/dracut into ryncsn-optimization

master
Harald Hoyer 6 years ago
parent
commit
86f4dd0273
No known key found for this signature in database
GPG Key ID: 340F12141EA0994D
  1. 63
      dracut-init.sh
  2. 8
      dracut.sh

63
dracut-init.sh

@ -154,6 +154,10 @@ dracut_no_switch_root() { @@ -154,6 +154,10 @@ dracut_no_switch_root() {
>"$initdir/lib/dracut/no-switch-root"
}

dracut_module_path() {
echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }
}

if ! [[ $DRACUT_INSTALL ]]; then
DRACUT_INSTALL=$(find_binary dracut-install)
fi
@ -571,15 +575,16 @@ inst_opt_decompress() { @@ -571,15 +575,16 @@ inst_opt_decompress() {
done
}

# module_check <dracut module>
# module_check <dracut module> [<forced>] [<module path>]
# execute the check() function of module-setup.sh of <dracut module>
# or the "check" script, if module-setup.sh is not found
# "check $hostonly" is called
module_check() {
local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; })
local _moddir=$3
local _ret
local _forced=0
local _hostonly=$hostonly
[[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
[ $# -eq 2 ] && _forced=$2
[[ -d $_moddir ]] || return 1
if [[ ! -f $_moddir/module-setup.sh ]]; then
@ -602,14 +607,15 @@ module_check() { @@ -602,14 +607,15 @@ module_check() {
return $_ret
}

# module_check_mount <dracut module>
# module_check_mount <dracut module> [<module path>]
# execute the check() function of module-setup.sh of <dracut module>
# or the "check" script, if module-setup.sh is not found
# "mount_needs=1 check 0" is called
module_check_mount() {
local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; })
local _moddir=$2
local _ret
mount_needs=1
[[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
[[ -d $_moddir ]] || return 1
if [[ ! -f $_moddir/module-setup.sh ]]; then
# if we do not have a check script, we are unconditionally included
@ -628,12 +634,13 @@ module_check_mount() { @@ -628,12 +634,13 @@ module_check_mount() {
return $_ret
}

# module_depends <dracut module>
# module_depends <dracut module> [<module path>]
# execute the depends() function of module-setup.sh of <dracut module>
# or the "depends" script, if module-setup.sh is not found
module_depends() {
local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; })
local _moddir=$2
local _ret
[[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
[[ -d $_moddir ]] || return 1
if [[ ! -f $_moddir/module-setup.sh ]]; then
# if we do not have a check script, we have no deps
@ -651,12 +658,13 @@ module_depends() { @@ -651,12 +658,13 @@ module_depends() {
fi
}

# module_cmdline <dracut module>
# module_cmdline <dracut module> [<module path>]
# execute the cmdline() function of module-setup.sh of <dracut module>
# or the "cmdline" script, if module-setup.sh is not found
module_cmdline() {
local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; })
local _moddir=$2
local _ret
[[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
[[ -d $_moddir ]] || return 1
if [[ ! -f $_moddir/module-setup.sh ]]; then
[[ -x $_moddir/cmdline ]] && . "$_moddir/cmdline"
@ -672,12 +680,13 @@ module_cmdline() { @@ -672,12 +680,13 @@ module_cmdline() {
fi
}

# module_install <dracut module>
# module_install <dracut module> [<module path>]
# execute the install() function of module-setup.sh of <dracut module>
# or the "install" script, if module-setup.sh is not found
module_install() {
local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; })
local _moddir=$2
local _ret
[[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
[[ -d $_moddir ]] || return 1
if [[ ! -f $_moddir/module-setup.sh ]]; then
[[ -x $_moddir/install ]] && . "$_moddir/install"
@ -693,12 +702,13 @@ module_install() { @@ -693,12 +702,13 @@ module_install() {
fi
}

# module_installkernel <dracut module>
# module_installkernel <dracut module> [<module path>]
# execute the installkernel() function of module-setup.sh of <dracut module>
# or the "installkernel" script, if module-setup.sh is not found
module_installkernel() {
local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; })
local _moddir=$2
local _ret
[[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
[[ -d $_moddir ]] || return 1
if [[ ! -f $_moddir/module-setup.sh ]]; then
[[ -x $_moddir/installkernel ]] && . "$_moddir/installkernel"
@ -714,15 +724,16 @@ module_installkernel() { @@ -714,15 +724,16 @@ module_installkernel() {
fi
}

# check_mount <dracut module>
# check_mount <dracut module> [<use_as_dep>] [<module path>]
# check_mount checks, if a dracut module is needed for the given
# device and filesystem types in "${host_fs_types[@]}"
check_mount() {
local _mod=$1
local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; })
local _moddir=$3
local _ret
local _moddep

[[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
[ "${#host_fs_types[@]}" -le 0 ] && return 1

# If we are already scheduled to be loaded, no need to check again.
@ -739,7 +750,7 @@ check_mount() { @@ -739,7 +750,7 @@ check_mount() {
fi

if [[ " $dracutmodules $add_dracutmodules $force_add_dracutmodules" == *\ $_mod\ * ]]; then
module_check_mount $_mod; ret=$?
module_check_mount $_mod $_moddir; ret=$?

# explicit module, so also accept ret=255
[[ $ret = 0 || $ret = 255 ]] || return 1
@ -747,14 +758,14 @@ check_mount() { @@ -747,14 +758,14 @@ check_mount() {
# module not in our list
if [[ $dracutmodules = all ]]; then
# check, if we can and should install this module
module_check_mount $_mod || return 1
module_check_mount $_mod $_moddir || return 1
else
# skip this module
return 1
fi
fi

for _moddep in $(module_depends $_mod); do
for _moddep in $(module_depends $_mod $_moddir); do
# handle deps as if they were manually added
[[ " $dracutmodules " == *\ $_mod\ * ]] \
&& [[ " $dracutmodules " != *\ $_moddep\ * ]] \
@ -778,15 +789,17 @@ check_mount() { @@ -778,15 +789,17 @@ check_mount() {
return 0
}

# check_module <dracut module> [<use_as_dep>]
# check_module <dracut module> [<use_as_dep>] [<module path>]
# check if a dracut module is to be used in the initramfs process
# if <use_as_dep> is set, then the process also keeps track
# that the modules were checked for the dependency tracking process
check_module() {
local _mod=$1
local _moddir=$(echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; })
local _moddir=$3
local _ret
local _moddep

[[ -z $_moddir ]] && _moddir=$(dracut_module_path "$1")
# If we are already scheduled to be loaded, no need to check again.
[[ " $mods_to_load " == *\ $_mod\ * ]] && return 0
[[ " $mods_checked_as_dep " == *\ $_mod\ * ]] && return 1
@ -803,9 +816,9 @@ check_module() { @@ -803,9 +816,9 @@ check_module() {

if [[ " $dracutmodules $add_dracutmodules $force_add_dracutmodules" == *\ $_mod\ * ]]; then
if [[ " $dracutmodules $force_add_dracutmodules " == *\ $_mod\ * ]]; then
module_check $_mod 1; ret=$?
module_check $_mod 1 $_moddir; ret=$?
else
module_check $_mod 0; ret=$?
module_check $_mod 0 $_moddir; ret=$?
fi
# explicit module, so also accept ret=255
[[ $ret = 0 || $ret = 255 ]] || return 1
@ -813,7 +826,7 @@ check_module() { @@ -813,7 +826,7 @@ check_module() {
# module not in our list
if [[ $dracutmodules = all ]]; then
# check, if we can and should install this module
module_check $_mod; ret=$?
module_check $_mod 0 $_moddir; ret=$?
if [[ $ret != 0 ]]; then
[[ $2 ]] && return 1
[[ $ret != 255 ]] && return 1
@ -824,7 +837,7 @@ check_module() { @@ -824,7 +837,7 @@ check_module() {
fi
fi

for _moddep in $(module_depends $_mod); do
for _moddep in $(module_depends $_mod $_moddir); do
# handle deps as if they were manually added
[[ " $dracutmodules " == *\ $_mod\ * ]] \
&& [[ " $dracutmodules " != *\ $_moddep\ * ]] \
@ -849,7 +862,7 @@ check_module() { @@ -849,7 +862,7 @@ check_module() {
}

# for_each_module_dir <func>
# execute "<func> <dracut module> 1"
# execute "<func> <dracut module> 1 <module path>"
for_each_module_dir() {
local _modcheck
local _mod
@ -861,7 +874,7 @@ for_each_module_dir() { @@ -861,7 +874,7 @@ for_each_module_dir() {
[[ -e $_moddir/install || -e $_moddir/installkernel || \
-e $_moddir/module-setup.sh ]] || continue
_mod=${_moddir##*/}; _mod=${_mod#[0-9][0-9]}
$_func $_mod 1
$_func $_mod 1 $_moddir
done

# Report any missing dracut modules, the user has specified

8
dracut.sh

@ -1373,7 +1373,7 @@ do_print_cmdline() @@ -1373,7 +1373,7 @@ do_print_cmdline()
for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
_d_mod=${moddir##*/}; _d_mod=${_d_mod#[0-9][0-9]}
[[ ${_mods_to_print[$_d_mod]} ]] || continue
module_cmdline "$_d_mod"
module_cmdline "$_d_mod" "$moddir"
done
unset moddir
}
@ -1454,14 +1454,14 @@ for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do @@ -1454,14 +1454,14 @@ for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
dinfo "*** Including module: $_d_mod ***"
fi
if [[ $kernel_only == yes ]]; then
module_installkernel "$_d_mod" || {
module_installkernel "$_d_mod" "$moddir" || {
dfatal "installkernel failed in module $_d_mod"
exit 1
}
else
module_install "$_d_mod"
module_install "$_d_mod" "$moddir"
if [[ $no_kernel != yes ]]; then
module_installkernel "$_d_mod" || {
module_installkernel "$_d_mod" "$moddir" || {
dfatal "installkernel failed in module $_d_mod"
exit 1
}

Loading…
Cancel
Save