aports/main/openrc/sysfsconf.initd
Natanael Copa d2a35a6f18 main/openrc: fix sysfsconf load order
the directory is so packages can ship config. User may want override
those in the config file so we let the config file win.

This is also consistent with sysctl.
2016-08-12 16:30:29 +02:00

67 lines
1.2 KiB
Plaintext

#!/sbin/openrc-run
description="Set sysfs variables from /etc/sysfs.conf and /etc/sysfs.d/*.conf"
conffile=/etc/sysfs.conf
confdir=/etc/sysfs.d
depend() {
need sysfs
}
setval() {
local value="$1" attrib="$2"
# Some fields need a terminating newline, others
# need the terminating newline to be absent :-(
echo -n "$value" > "$attrib" 2>/dev/null \
|| echo "$value" > "$attrib"
}
load_conffile() {
local file="$1"
while read line; do
local line=${line%%#*}
local cmd= attrib= value=
set -- $line
if [ $# -eq 0 ]; then
continue
fi
case "$1$3" in
mode=) cmd=chmod
attrib="$2"
value="$4"
;;
owner=) cmd=chown
attrib="$2"
value="$4"
;;
*) if [ "$2" = "=" ]; then
cmd=setval
attrib="$1"
value="$3"
fi
;;
esac
if ! [ -e "/sys/$attrib" ]; then
eerror "$attrib: unknown attribute"
continue
fi
if [ -z "$attrib" ] || [ -z "$value" ]; then
eerror "syntax error in $file: '$line'"
continue
fi
$cmd "$value" "/sys/$attrib"
done < "$file"
}
start() {
[ -r "$conffile" -o -d "$confdir" ] || return 0
ebegin "Setting sysfs variables"
for file in $confdir/*.conf $conffile; do
[ -r "$file" ] || continue
load_conffile "$file" || return 1
done
eend 0
}