diff options
author | William Hubbs <w.d.hubbs@gmail.com> | 2016-08-23 17:48:39 -0500 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2016-08-25 12:08:44 -0500 |
commit | 556dbff99d53cdcc00e6b1ec67e1679f72b6f284 (patch) | |
tree | da8b9ed7fa2025a93f8c7ac203b955873a1c0206 /init.d/modules-load.in | |
parent | 69ac78d76a31d843c004717eb6aa6a77bb4c9a8e (diff) |
Add modules-load.d support
Diffstat (limited to 'init.d/modules-load.in')
-rw-r--r-- | init.d/modules-load.in | 73 |
1 files changed, 73 insertions, 0 deletions
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 +} |