package/initscripts: add service to load kernel modules at boot

In cases where no hotplug is available (by choice or by the lack of a
proper hotplug method for a device), this service can be used to load
kernel module drivers by reading the /etc/modules-load.d/*.conf files.
The modules files matches the one used by systemd, which in turn has
a builtin mechanism to load a module at boot, therefore making systemv
init on par with systemd features.

Signed-off-by: Angelo Compagnucci <angelo@amarulasolutions.com>
[Arnout:
 - add exception for missing DAEMON variable;
 - fix shellcheck warnings
]
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
Signed-off-by: Arnout Vandecappelle <arnout@rnout.be>
This commit is contained in:
Angelo Compagnucci
2023-10-07 22:36:33 +02:00
committed by Arnout Vandecappelle
parent 90533b6899
commit 035f496978

View File

@@ -0,0 +1,62 @@
#!/bin/sh
MODULES_DIR="/etc/modules-load.d/"
[ -z "$(ls -A ${MODULES_DIR} 2> /dev/null)" ] && exit 0
load_unload() {
for module_file in "${MODULES_DIR}"/*.conf; do
while read -r module args; do
case "$module" in
""|"#"*) continue ;;
esac
if [ "$1" = "load" ]; then
# shellcheck disable=SC2086 # We need word splitting for args
modprobe -q "${module}" ${args} >/dev/null && \
printf '%s ' "$module" || RET='FAIL'
else
rmmod "${module}" >/dev/null
fi
done < "${module_file}"
done
RET='OK'
}
start() {
printf 'Starting modules: '
load_unload load
echo $RET
}
stop() {
printf 'Stopping modules: '
load_unload unload
echo $RET
}
restart() {
stop
sleep 1
start
}
case "$1" in
start|stop|restart)
"$1";;
reload)
# Restart, since there is no true "reload" feature.
restart;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
# check-package Ignore missing DAEMON Variables