Skip to content

Commit

Permalink
Add modules-load.d support
Browse files Browse the repository at this point in the history
  • Loading branch information
williamh committed Aug 25, 2016
1 parent 69ac78d commit 556dbff
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 2 deletions.
4 changes: 2 additions & 2 deletions init.d/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
73 changes: 73 additions & 0 deletions init.d/modules-load.in
Original file line number Diff line number Diff line change
@@ -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
}
1 change: 1 addition & 0 deletions init.d/modules.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down

0 comments on commit 556dbff

Please sign in to comment.