diff options
Diffstat (limited to 'init.d.Linux/modules')
-rwxr-xr-x | init.d.Linux/modules | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/init.d.Linux/modules b/init.d.Linux/modules new file mode 100755 index 00000000..ff6faf6a --- /dev/null +++ b/init.d.Linux/modules @@ -0,0 +1,104 @@ +#!/sbin/runscript +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + need checkroot + use isapnp +} + +load_modules() { + local modules="" + local config="$1" + + [ -z "${config}" -o ! -r "${config}" ] && return 0 + + modules=$(sed -e 's:#.*::' -e '/^[[:space:]]*$/d' "${config}") + [ -z "${modules}" ] && return 0 + + einfo "Using ${config} as config:" + eindent + + local x= cnt=0 OIFS=${IFS} SIFS=${IFS-y} + IFS=\n + for x in ${modules} ; do + set -- ${x} + ebegin "Loading module $1" + modprobe -q "$@" >& /dev/null + eend $? "Failed to load $1" && cnt=$((${cnt} + 1)) + done + if [ "${SIFS}" = "y" ] ; then + IFS=${save_IFS} + else + unset IFS + fi + + einfo "Autoloaded ${cnt} module(s)" + + return 0 +} + +start() { + # Should not fail if kernel do not have module + # support compiled in ... + [ ! -f /proc/modules -o "${RC_SYS}" = "VPS" ] && return 0 + + local KV=$(uname -r) + local KV_MAJOR=${KV%%.*} + local x=${KV#*.} + local KV_MINOR=${x%%.*} + x=${KV#*.*.} + local KV_MICRO=${x%%-*} + + # Make sure depmod from modutils do not whine, but do not bother if + # we are on a 2.6 kernel without modprobe.old + if [ -z "${CDBOOT}" -a ! -e /etc/modules.conf ] && \ + [ $(KV_to_int "${KV}") -lt $(KV_to_int '2.5.48') -o -x /sbin/modprobe.old ] + then + echo '### This file is automatically generated by modules-update' \ + > /etc/modules.conf 2>/dev/null + [ ! -f /etc/modules.conf ] && \ + ewarn "Cannot update /etc/modules.conf!" + fi + + # Only do this if we have modules.conf or a 2.6 kernel + if [ -z "${CDBOOT}" ] && \ + [ -f /etc/modules.conf -o $(KV_to_int "${KV}") -ge $(KV_to_int '2.5.48') ] + then + /sbin/modules-update + fi + + local auto="" + if [ -f /etc/modules.autoload -a ! -L /etc/modules.autoload ]; then + auto=/etc/modules.autoload + else + local x= f="/etc/modules.autoload.d/kernel" + for x in "${KV}" ${KV_MAJOR}.${KV_MINOR}.${KV_MICRO} ${KV_MAJOR}.${KV_MINOR} ; do + if [ -f "${f}-${x}.${RC_SOFTLEVEL}" ] ; then + auto="${f}-${x}.${RC_SOFTLEVEL}" + break + fi + if [ "${RC_SOFTLEVEL}" = "${RC_BOOTLEVEL}" -a -f "${f}-${x}.${RC_DEFAULTLEVEL}" ] ; then + auto="${f}-${x}.${RC_DEFAULTLEVEL}" + break + fi + if [ -f "${f}-${x}" ] ; then + auto="${f}-${x}" + break + fi + done + fi + [ -n "${auto}" ] && load_modules "${auto}" + + # + # Just in case a sysadmin prefers generic symbolic links in + # /lib/modules/boot for boot time modules we will load these modules + # + [ -n "$(modprobe -l -t boot)" ] && modprobe -a -t boot \* 2>/dev/null + + # Above test clobbers the return + return 0 +} + + +# vim:ts=4 |