packages/net/nut/files/nut-server.init
Daniel Dickinson a23c4e85c5 net/nut: Build optional separate packages and ucify
With a LuCI app (of which I have one written) ucification makes
sense (and is in fact needed), so ucify the initscripts.

Also, rather than making selection of things to include an image
a matter of selecting compile-time config options, make optional
things into seperate packages that are built in default builds,
and leave selection of what to include or not up to the user
(e.g. using ImageBuilder, or adding packages via opkg).

Signed-off-by: Daniel Dickinson <lede@cshore.thecshore.com>
2017-01-11 18:53:58 -05:00

148 lines
3.1 KiB
Bash
Executable file

#!/bin/sh /etc/rc.common
# Copyright © 2012 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
START=50
RUN_D=/var/run
PID_F=$RUN_D/upsd.pid
UPS_C=/var/etc/nut/ups.conf
USERS_C=/var/etc/nut/upsd.users
UPSD_C=/var/etc/nut/upsd.conf
USE_PROCD=1
listen_address() {
local cfg="$1"
config_get address "$cfg" address "::1"
config_get port "$cfg" port
echo "LISTEN $address $port" >>$UPSD_C
}
upsd_config() {
local cfg="$1"
local maxage maxconn certfile
# Note runas support requires you make sure USB device file is readable by
# the runas user
config_get runas "$cfg" runas
config_get maxage "$cfg" maxage
[ -n "$maxage" ] && echo "MAXAGE $maxage" >>$UPSD_C
config_get statepath "$cfg" statepath
[ -n "$statepath" ] && echo "STATEPATH $statepath" >>$UPSD_C
config_get maxconn "$cfg" maxconn
[ -n "$maxconn" ] && echo "MAXCONN $maxconn" >>$UPSD_C
#NOTE: certs only apply to SSL-enabled version
config_get certfile "$cfg" certfile
[ -n "$certfile" ] && echo "CERTFILE $certfile" >>$UPSD_C
}
nut_user_add() {
local cfg="$1"
local a
local val
config_get val "$cfg" username "$1"
echo "[$val]" >> $USERS_C
config_get val "$cfg" password
echo " password = $val" >> $USERS_C
config_get val "$cfg" actions
for a in $val; do
echo " actions = $a" >> $USERS_C
done
instcmd() {
local val="$1"
echo " instcmds = $val" >> $USERS_C
}
config_list_foreach "$cfg" instcmd instcmd
config_get val "$cfg" upsmon
if [ -n "$val" ]; then
echo " upsmon $val" >> $USERS_C
fi
}
start_service() {
local runas statepath
mkdir -p /var/etc/nut
chmod -R 750 /var/etc/nut
rm -f $UPSD_C
rm -f $USERS_C
rm -f $UPSD_C
rm -f /var/etc/nut/nut.conf
echo "# Config file automatically generated from UCI config" > $UPS_C
echo "# Config file automatically generated from UCI config" > $USERS_C
echo "# Config file automatically generated from UCI config" > $UPSD_C
local in_driver have_drivers
config_cb() {
if [ "$1" != "driver" ]; then
in_driver=
else
echo "[$2]" >> $UPS_C
in_driver=true
have_drivers=true
fi
}
option_cb() {
if [ "$in_driver" = "true" ]; then
echo " $1 = $2" >> $UPS_C
fi
}
config_load nut_server
config_foreach nut_user_add user
config_foreach upsd_config upsd
config_foreach listen_address listen_address
echo "MODE=netserver" >>/var/etc/nut/nut.conf
chmod 0640 $USERS_C
chmod 0640 $UPS_C
chmod 0640 $UPSD_C
chmod 0640 /var/etc/nut/nut.conf
if [ -n "$runas" ]; then
chown -R $runas:$(id -gn $runas) /var/etc/nut
fi
if [ "$have_drivers" = "true" ]; then
$DEBUG /usr/sbin/upsd ${runas:+-u $runas} $OPTIONS
$DEBUG /usr/sbin/upsdrvctl ${runas:+-u $runas} start
fi
}
nut_driver_stop() {
local cfg="$1"
local driver
config_get driver "$cfg" driver
[ -r /var/run/$driver-$cfg ] && /usr/sbin/upsdrvctl stop $cfg
}
stop_service() {
[ -r $PID_F ] && /usr/sbin/upsd -c stop
config_load ups
config_foreach nut_driver_stop driver
}
reload_service() {
upsd -c reload
}