mirror of
https://github.com/novatiq/packages.git
synced 2026-07-30 23:33:06 +01:00
Since the new hotplug script in master was not backport (new feature), for 18.06 branch revert the old behavior of running NUT daemons and drivers as root by default to avoid permisions problems, but backport fix the support for running as another user for those who can set the appropriate permissions on the USB (or other) device. Closes: #7742 Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
193 lines
5.3 KiB
Bash
Executable File
193 lines
5.3 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
|
|
START=51
|
|
USE_PROCD=1
|
|
UPSMON_C=/var/etc/nut/upsmon.conf
|
|
|
|
nut_upsmon_conf() {
|
|
local cfg="$1"
|
|
|
|
echo "# Config file automatically generated from UCI config" > "$UPSMON_C"
|
|
|
|
config_get runas "$cfg" runas
|
|
[ -n "$runas" ] && echo "RUN_AS_USER $runas" >> $UPSMON_C
|
|
|
|
config_get val "$cfg" minsupplies 1
|
|
echo "MINSUPPLIES $val" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" shutdowncmd "/usr/sbin/nutshutdown"
|
|
echo "SHUTDOWNCMD \"$val\"" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" notifycmd
|
|
[ -n "$val" ] && echo "NOTIFYCMD \"$val\"" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" pollfreq 5
|
|
echo "POLLFREQ $val" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" pollfreqalert 5
|
|
echo "POLLFREQALERT $val" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" hostsync 15
|
|
echo "HOSTSYNC $val" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" deadtime 15
|
|
echo "DEADTIME $val" >> "$UPSMON_C"
|
|
|
|
echo "POWERDOWNFLAG /var/run/killpower" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" onlinemsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG ONLINE \"$val\"" >> "$UPSMON_C"
|
|
config_get val "$cfg" onbattmsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG ONBATT \"$val\"" >> "$UPSMON_C"
|
|
config_get val "$cfg" lowbattmsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG LOWBATT \"$val\"" >> "$UPSMON_C"
|
|
config_get val "$cfg" fsdmsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG FSD \"$val\"" >> "$UPSMON_C"
|
|
config_get val "$cfg" commokmsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG COMMOK \"$val\"" >> "$UPSMON_C"
|
|
config_get val "$cfg" commbadmsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG COMMBAD \"$val\"" >> "$UPSMON_C"
|
|
config_get val "$cfg" shutdownmsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG SHUTDOWN \"$val\"" >> "$UPSMON_C"
|
|
config_get val "$cfg" replbattmsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG REPLBATT \"$val\"" >> "$UPSMON_C"
|
|
config_get val "$cfg" nocommmsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG NOCOMM \"$val\"" >> "$UPSMON_C"
|
|
config_get val "$cfg" noparentmsg
|
|
[ -n "$val" ] && echo "NOTIFYMSG NOPARENT \"$val\"" >> "$UPSMON_C"
|
|
|
|
notifylist() {
|
|
local value="$1"
|
|
append optval "$value" "+"
|
|
}
|
|
|
|
setnotify() {
|
|
local cfg="$1"
|
|
local optname="$2"
|
|
local optval
|
|
config_list_foreach "$cfg" "$optname" notifylist
|
|
if [ -z "$optval" ]; then
|
|
# If no list fallback to trying option, fallback to default
|
|
config_get optval "$cfg" "$optname" "$default"
|
|
if [ -n "$optval" ]; then
|
|
echo "$optval"
|
|
else
|
|
# No default, so do the NUT default
|
|
echo "SYSLOG"
|
|
fi
|
|
else
|
|
echo "$optval"
|
|
fi
|
|
}
|
|
|
|
local default optval
|
|
val=""
|
|
config_list_foreach "$cfg" defaultnotify notifylist
|
|
default="$optval"
|
|
echo "NOTIFYFLAG ONLINE $(setnotify "$cfg" onlinenotify)" >> "$UPSMON_C"
|
|
echo "NOTIFYFLAG ONBATT $(setnotify "$cfg" onbattnotify)" >> "$UPSMON_C"
|
|
echo "NOTIFYFLAG LOWBATT $(setnotify "$cfg" lowbatnotify)" >> "$UPSMON_C"
|
|
echo "NOTIFYFLAG FSD $(setnotify "$cfg" fsdnotify)" >> "$UPSMON_C"
|
|
echo "NOTIFYFLAG COMMOK $(setnotify "$cfg" commoknotify)" >> "$UPSMON_C"
|
|
echo "NOTIFYFLAG COMMBAD $(setnotify "$cfg" commbadnotify)" >> "$UPSMON_C"
|
|
echo "NOTIFYFLAG SHUTDOWN $(setnotify "$cfg" shutdownnotify)" >> "$UPSMON_C"
|
|
echo "NOTIFYFLAG REPLBATT $(setnotify "$cfg" repolbattnotify)" >> "$UPSMON_C"
|
|
echo "NOTIFYFLAG NOCOMM $(setnotify "$cfg" nocommnotify)" >> "$UPSMON_C"
|
|
echo "NOTIFYFLAG NOPARENT $(setnotify "$cfg" noparentnotify)" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" rbwarntime 43200
|
|
echo "RBWARNTIME $val" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" nocommwarntime 300
|
|
echo "NOCOMMWARNTIME $val" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" finaldelay 5
|
|
echo "FINALDELAY $val" >> "$UPSMON_C"
|
|
|
|
config_get val "$cfg" certpath
|
|
if [ -n "$val" ]; then echo "CERTPATH $val" >> "$UPSMON_C"; fi
|
|
|
|
config_get_bool val "$cfg" certverify 0
|
|
if [ -n "$val" ]; then echo "CERTVERIFY $val" >> "$UPSMON_C"; fi
|
|
|
|
config_get_bool val "$cfg" forcessl 0
|
|
if [ -n "$val" ]; then echo "FORCESSL $val" >> "$UPSMON_C"; fi
|
|
|
|
havemon=1
|
|
}
|
|
|
|
nut_upsmon_add() {
|
|
local cfg="$1"
|
|
local type="$2"
|
|
local upsname
|
|
local hostname
|
|
local port
|
|
local powervalue
|
|
local username
|
|
local password
|
|
local system
|
|
|
|
config_get upsname "$cfg" upsname
|
|
config_get hostname "$cfg" hostname localhost
|
|
config_get port "$cfg" port
|
|
config_get powervalue "$cfg" powervalue 1
|
|
config_get username "$cfg" username
|
|
config_get password "$cfg" password
|
|
system="$upsname@$hostname"
|
|
if [ -n "$port" ]; then
|
|
system="$system:$port";
|
|
fi
|
|
echo "MONITOR $system $powervalue $username $password $type" >> "$UPSMON_C"
|
|
|
|
havems=1
|
|
}
|
|
|
|
build_config() {
|
|
local runas
|
|
mkdir -m 0750 -p "$(dirname "$UPSMON_C")"
|
|
|
|
config_load nut_monitor
|
|
config_foreach nut_upsmon_conf upsmon
|
|
config_foreach nut_upsmon_add master master
|
|
config_foreach nut_upsmon_add slave slave
|
|
|
|
[ ! -s "$(cat /var/etc/nut/nut.conf)" ] && {
|
|
echo "MODE=netclient" >>/var/etc/nut/nut.conf
|
|
chmod 640 /var/etc/nut/nut.conf
|
|
chgrp $(id -gn ${runas:-root}) /var/etc/nut/nut.conf
|
|
}
|
|
|
|
[ -s "$UPSMON_C" ] && chmod 640 "$UPSMON_C"
|
|
[ -s "$UPSMON_C" ] && chgrp $(id -gn ${runas:-root}) "$UPSMON_C"
|
|
}
|
|
|
|
start_service() {
|
|
local havemon havems
|
|
build_config
|
|
|
|
[ "$havemon" != 1 ] && return
|
|
[ "$havems" != 1 ] && return
|
|
|
|
procd_open_instance "upsmon"
|
|
procd_set_param respawn
|
|
procd_set_param stderr 0
|
|
procd_set_param stdout 1
|
|
procd_set_param command /usr/sbin/upsmon -D
|
|
procd_close_instance
|
|
}
|
|
|
|
reload_service() {
|
|
if pgrep upsmon >/dev/null 2>/dev/null; then
|
|
build_config
|
|
/usr/sbin/upsmon -c reload
|
|
else
|
|
stop
|
|
sleep 2
|
|
start_service
|
|
fi
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger "nut_monitor"
|
|
}
|