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>
148 lines
3.1 KiB
Bash
Executable file
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
|
|
}
|