diff options
Diffstat (limited to 'init.d/modules.in')
-rw-r--r-- | init.d/modules.in | 62 |
1 files changed, 60 insertions, 2 deletions
diff --git a/init.d/modules.in b/init.d/modules.in index 2eab77f0..d6dd7a29 100644 --- a/init.d/modules.in +++ b/init.d/modules.in @@ -14,10 +14,65 @@ description="Loads a user defined list of kernel modules." depend() { use isapnp - want modules-load + provide modules-load keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver } +find_modfiles() +{ + local dirs="/usr/lib/modules-load.d /run/modules-load.d /etc/modules-load.d" + local basenames files fn x y + for x in $dirs; do + [ ! -d $x ] && continue + for y in $x/*.conf; do + [ -f $y ] && basenames="${basenames}\n${y##*/}" + done + done + basenames=$(printf "$basenames" | sort -u) + for x in $basenames; do + for y in $dirs; do + [ -r $y/$x ] && + fn=$y/$x + done + files="$files $fn" + done + echo $files +} + +load_modules() +{ + local file m modules rc x + file=$1 + [ -z "$file" ] && return 0 + while read m x; do + case $m in + \;*) continue ;; + \#*) continue ;; + *) modules="$modules $m" + ;; + esac + done < $file + for x in $modules; do + ebegin "Loading module $x" + case "$RC_UNAME" in + FreeBSD) kldload "$x"; rc=$? ;; + Linux) modprobe --use-blacklist -q "$x"; rc=$? ;; + *) ;; + esac + eend $rc "Failed to load $x" + done +} + +modules_load_d() +{ + local x + files=$(find_modfiles) + for x in $files; do + load_modules $x + done + return 0 +} + FreeBSD_modules() { local cnt=0 x @@ -82,7 +137,10 @@ Linux_modules() start() { case "$RC_UNAME" in - FreeBSD|Linux) ${RC_UNAME}_modules ;; + FreeBSD|Linux) + modules_load_d + ${RC_UNAME}_modules + ;; *) ;; esac return 0 |