diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2016-08-10 16:57:23 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2016-08-10 16:58:01 +0200 |
commit | 4c9c24b11fa49edd270288882fbb81380c5dd3ac (patch) | |
tree | f8709573d29a4c5f1caf7196804b646db72c4d8f /main/openrc/sysfsconf.initd | |
parent | 763aae0d1827616dae68317ab10bc6dd73001773 (diff) | |
download | aports-4c9c24b11fa49edd270288882fbb81380c5dd3ac.tar.bz2 aports-4c9c24b11fa49edd270288882fbb81380c5dd3ac.tar.xz |
main/openrc: add sysfsconf script
so we can edit sysfs variables during boot
Diffstat (limited to 'main/openrc/sysfsconf.initd')
-rw-r--r-- | main/openrc/sysfsconf.initd | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/main/openrc/sysfsconf.initd b/main/openrc/sysfsconf.initd new file mode 100644 index 0000000000..cefc3595dd --- /dev/null +++ b/main/openrc/sysfsconf.initd @@ -0,0 +1,66 @@ +#!/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 $conffile $confdir/*.conf; do + [ -r "$file" ] || continue + load_conffile "$file" || return 1 + done + eend 0 + +} + |