commit:     b888f1a8e21008f45105ad2fdc84a5d579892eb5
Author:     William Hubbs <w.d.hubbs <AT> gmail <DOT> com>
AuthorDate: Tue Aug 23 22:48:39 2016 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Thu Aug 25 21:58:46 2016 +0000
URL:        https://gitweb.gentoo.org/proj/openrc.git/commit/?id=b888f1a8

Add modules-load.d support

 init.d/Makefile        |  4 +--
 init.d/modules-load.in | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++
 init.d/modules.in      |  1 +
 3 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/init.d/Makefile b/init.d/Makefile
index f256095..ad90f95 100644
--- a/init.d/Makefile
+++ b/init.d/Makefile
@@ -19,10 +19,10 @@ SRCS-FreeBSD=       hostid.in moused.in newsyslog.in pf.in 
rarpd.in rc-enabled.in \
                rpcbind.in savecore.in syslogd.in
 # These are FreeBSD specific
 SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
-               mixer.in nscd.in powerd.in syscons.in
+               modules.in modules-load.in mixer.in nscd.in powerd.in syscons.in
 
 SRCS-Linux=    binfmt.in devfs.in dmesg.in hwclock.in consolefont.in 
keymaps.in \
-               killprocs.in modules.in mount-ro.in mtab.in numlock.in \
+               killprocs.in modules.in modules-load.in mount-ro.in mtab.in 
numlock.in \
                procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in
 
 # Generic BSD scripts

diff --git a/init.d/modules-load.in b/init.d/modules-load.in
new file mode 100644
index 0000000..8c19a36
--- /dev/null
+++ b/init.d/modules-load.in
@@ -0,0 +1,73 @@
+#!@SBINDIR@/openrc-run
+# Copyright (c) 2016 The OpenRC Authors.
+# See the Authors file at the top-level directory of this distribution and
+# https://github.com/OpenRC/openrc/blob/master/AUTHORS
+#
+# This file is part of OpenRC. It is subject to the license terms in
+# the LICENSE file found in the top-level directory of this
+# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
+# This file may not be copied, modified, propagated, or distributed
+# except according to the terms contained in the LICENSE file.
+
+description="Loads a list of modules from systemd-compatible locations."
+
+depend()
+{
+       keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
+}
+
+modules_dirs="/usr/lib/modules-load.d /run/modules-load.d /etc/modules-load.d"
+
+find_modfiles()
+{
+       local basenames files x y
+       for x in $modules_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 $modules_dirs; do
+                       [ -r $y/$x ] &&
+                               path=$y/$x
+               done
+               files="$files $path"
+       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 -q "$x"; rc=$? ;;
+                       *) ;;
+               esac
+               eend $rc "Failed to load $x"
+       done
+}
+
+start()
+{
+       local x
+       files=$(find_modfiles)
+       for x in $files; do
+               load_modules $x
+       done
+       return 0
+}

diff --git a/init.d/modules.in b/init.d/modules.in
index ff1dee4..ddb8c9b 100644
--- a/init.d/modules.in
+++ b/init.d/modules.in
@@ -14,6 +14,7 @@ description="Loads a user defined list of kernel modules."
 depend()
 {
        use isapnp
+       want modules-load
        keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 }
 

Reply via email to