#!/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_statepath() {
|
|
local cfg="$1"
|
|
config_get statepath "$cfg" statepath
|
|
}
|
|
|
|
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
|
|
[ -d "${statepath:-/var/run/nut}" ] || {
|
|
mkdir -m 0750 -p "${statepath:-/var/run/nut}"
|
|
chown $runas:$(id -gn $runas) "${statepath:-/var/run/nut}"
|
|
}
|
|
|
|
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 ${statepath:-/var/run/nut}/$driver-$cfg ] && /usr/sbin/upsdrvctl stop $cfg
|
|
}
|
|
|
|
stop_service() {
|
|
[ -r $PID_F ] && /usr/sbin/upsd -c stop
|
|
config_load ups
|
|
config_foreach upsd_statepath upsd
|
|
config_foreach nut_driver_stop driver
|
|
}
|
|
|
|
reload_service() {
|
|
upsd -c reload
|
|
}
|