aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.d/Makefile4
-rw-r--r--init.d/modules-load.in73
-rw-r--r--init.d/modules.in1
3 files changed, 76 insertions, 2 deletions
diff --git a/init.d/Makefile b/init.d/Makefile
index a1d2ec7e..8eb62e48 100644
--- a/init.d/Makefile
+++ b/init.d/Makefile
@@ -20,10 +20,10 @@ SRCS-FreeBSD= hostid.in modules.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 00000000..8c19a36c
--- /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 5bfae6d9..2568f732 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
}