Browse Source

Merge pull request #6897 from cshoredaniel/pr-nut-fixes

nut: A number of fixes and enhancements
lilik-openwrt-22.03
Hannu Nyman 6 years ago
committed by GitHub
parent
commit
59acb420e4
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 413 additions and 161 deletions
  1. +38
    -14
      net/nut/Makefile
  2. +51
    -0
      net/nut/files/30-libhid-ups.head
  3. +5
    -0
      net/nut/files/30-libhid-ups.tail
  4. +32
    -5
      net/nut/files/nut-cgi.init
  5. +70
    -66
      net/nut/files/nut-monitor.init
  6. +171
    -72
      net/nut/files/nut-server.init
  7. +2
    -0
      net/nut/files/nut_cgi
  8. +2
    -4
      net/nut/files/nut_monitor
  9. +1
    -0
      net/nut/files/nut_server
  10. +41
    -0
      net/nut/files/nutshutdown

+ 38
- 14
net/nut/Makefile View File

@ -9,14 +9,14 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=nut PKG_NAME:=nut
PKG_VERSION:=2.7.4 PKG_VERSION:=2.7.4
PKG_RELEASE:=7
PKG_RELEASE:=8
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.networkupstools.org/source/2.7/ PKG_SOURCE_URL:=http://www.networkupstools.org/source/2.7/
PKG_HASH:=980e82918c52d364605c0703a5dcf01f74ad2ef06e3d365949e43b7d406d25a7 PKG_HASH:=980e82918c52d364605c0703a5dcf01f74ad2ef06e3d365949e43b7d406d25a7
PKG_MAINTAINER:=Daniel Dickinson <cshored@thecshore.com> PKG_MAINTAINER:=Daniel Dickinson <cshored@thecshore.com>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=LICENSE-GPL2
PKG_LICENSE:=GPL-2.0+ GPL-3.0+ GPL-1.0+ Artistic-1.0-Perl
PKG_LICENSE_FILES:=LICENSE-GPL2 LICENSE-GPL3 COPYING
PKG_FIXUP:=autoreconf PKG_FIXUP:=autoreconf
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
@ -63,22 +63,32 @@ define Package/nut/install
endef endef
define Package/nut-server/install define Package/nut-server/install
# Server portion
$(INSTALL_DIR) $(1)/etc/nut $(INSTALL_DIR) $(1)/etc/nut
$(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/usr/share/nut $(INSTALL_DIR) $(1)/usr/share/nut
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/nut-server.init $(1)/etc/init.d/nut-server $(INSTALL_BIN) ./files/nut-server.init $(1)/etc/init.d/nut-server
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsd $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsd $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsdrvctl $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/cmdvartab $(1)/usr/share/nut/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/cmdvartab $(1)/usr/share/nut/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/driver.list $(1)/usr/share/nut/
$(INSTALL_DIR) $(1)/etc/config $(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/nut_server $(1)/etc/config/nut_server $(INSTALL_CONF) ./files/nut_server $(1)/etc/config/nut_server
ln -sf /var/etc/nut/nut.conf $(1)/etc/nut/nut.conf
ln -sf /var/etc/nut/ups.conf $(1)/etc/nut/ups.conf
ln -sf /var/etc/nut/upsd.users $(1)/etc/nut/upsd.users ln -sf /var/etc/nut/upsd.users $(1)/etc/nut/upsd.users
ln -sf /var/etc/nut/upsd.conf $(1)/etc/nut/upsd.conf ln -sf /var/etc/nut/upsd.conf $(1)/etc/nut/upsd.conf
# Driver common portion
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsdrvctl $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/driver.list $(1)/usr/share/nut/
ln -sf /var/etc/nut/ups.conf $(1)/etc/nut/ups.conf
# Mangle libhid.usermap into a format (hotplug shell script) useful for OpenWrt
$(INSTALL_DIR) $(1)/etc/hotplug.d/usb
$(INSTALL_BIN) ./files/30-libhid-ups.head $(1)/etc/hotplug.d/usb/30-libhid-ups
$(CP) $(PKG_INSTALL_DIR)/etc/hotplug/usb/libhid.usermap $(PKG_BUILD_DIR)/30-libhid-ups.middle
$(SED) '/^$$$$/d' \
-e '/^#/d' \
-E -e 's:^[^ ][^ ]* *0x0003 *0x0{0,3}([^ ][^ ]*) *0x{0,3}*([^ ][^ ]*).*:\1/\2/* | \\:' \
$(PKG_BUILD_DIR)/30-libhid-ups.middle
tail -n+2 $(PKG_BUILD_DIR)/30-libhid-ups.middle >>$(1)/etc/hotplug.d/usb/30-libhid-ups
cat ./files/30-libhid-ups.tail >>$(1)/etc/hotplug.d/usb/30-libhid-ups
endef endef
define Package/nut-common define Package/nut-common
@ -87,8 +97,7 @@ define Package/nut-common
DEPENDS:= nut \ DEPENDS:= nut \
+NUT_DRIVER_SNMP:libnetsnmp \ +NUT_DRIVER_SNMP:libnetsnmp \
+NUT_DRIVER_USB:libusb-compat \ +NUT_DRIVER_USB:libusb-compat \
+NUT_SSL:libopenssl \
+PACKAGE_libwrap:libwrap
+NUT_SSL:libopenssl
endef endef
define Package/nut-common/description define Package/nut-common/description
@ -96,6 +105,10 @@ $(call Package/nut/description/Default)
This package contains the common files. This package contains the common files.
endef endef
define Package/nut-common/conffiles
/etc/nut/nut.conf
endef
define Package/nut-common/install define Package/nut-common/install
$(INSTALL_DIR) $(1)/etc/nut $(INSTALL_DIR) $(1)/etc/nut
$(INSTALL_DIR) $(1)/usr/lib $(INSTALL_DIR) $(1)/usr/lib
@ -107,6 +120,7 @@ define Package/nut-server
$(call Package/nut/Default) $(call Package/nut/Default)
TITLE+= (server) TITLE+= (server)
DEPENDS:=nut +nut-common DEPENDS:=nut +nut-common
USERID:=nut=113:nut=113
endef endef
define Package/nut-server/description define Package/nut-server/description
@ -120,13 +134,16 @@ endef
define Package/nut-server/conffiles define Package/nut-server/conffiles
/etc/config/nut_server /etc/config/nut_server
/etc/nut/upsd.conf
/etc/nut/upsd.users
/etc/nut/ups.conf
endef endef
define Package/nut-upsmon define Package/nut-upsmon
$(call Package/nut/Default) $(call Package/nut/Default)
TITLE+= (monitor) TITLE+= (monitor)
DEPENDS:=nut +nut-common DEPENDS:=nut +nut-common
USERID:=nut=113:nut=113
USERID:=nutmon=114:nutmon=114
endef endef
define Package/nut-upsmon/description define Package/nut-upsmon/description
@ -141,6 +158,7 @@ endef
define Package/nut-upsmon/conffiles define Package/nut-upsmon/conffiles
/etc/config/nut_monitor /etc/config/nut_monitor
/etc/nut/upsmon.conf
endef endef
define Package/nut-upsmon/install define Package/nut-upsmon/install
@ -149,6 +167,7 @@ define Package/nut-upsmon/install
$(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/nut-monitor.init $(1)/etc/init.d/nut-monitor $(INSTALL_BIN) ./files/nut-monitor.init $(1)/etc/init.d/nut-monitor
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsmon $(1)/usr/sbin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsmon $(1)/usr/sbin/
$(INSTALL_BIN) ./files/nutshutdown $(1)/usr/sbin/nutshutdown
$(INSTALL_DIR) $(1)/etc/config $(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/nut_monitor $(1)/etc/config/nut_monitor $(INSTALL_CONF) ./files/nut_monitor $(1)/etc/config/nut_monitor
ln -sf /var/etc/nut/upsmon.conf $(1)/etc/nut/upsmon.conf ln -sf /var/etc/nut/upsmon.conf $(1)/etc/nut/upsmon.conf
@ -182,7 +201,7 @@ define Package/nut-upsc/description
$(call Package/nut/description/Default) $(call Package/nut/description/Default)
upsc is provided as a quick way to poll the status of a UPS server. It upsc is provided as a quick way to poll the status of a UPS server. It
can be used inside shell scripts and other programs that need UPS data can be used inside shell scripts and other programs that need UPS data
but don not want to include the full interface.
but do not want to include the full interface.
endef endef
define Package/nut-upsc/install define Package/nut-upsc/install
@ -308,12 +327,15 @@ define Package/nut-web-cgi/install
$(INSTALL_CONF) ./files/add_nut_httpd_conf $(1)/etc/uci-defaults/add_nut_httpd_conf $(INSTALL_CONF) ./files/add_nut_httpd_conf $(1)/etc/uci-defaults/add_nut_httpd_conf
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsstats.html.sample $(1)/etc/nut/upsstats.html $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsstats.html.sample $(1)/etc/nut/upsstats.html
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsstats-single.html.sample $(1)/etc/nut/upsstats-single.html $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsstats-single.html.sample $(1)/etc/nut/upsstats-single.html
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsset.conf.sample $(1)/etc/nut/upsset.conf
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsset.conf.sample $(1)/etc/nut/upsset.conf.disable
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsset.conf.sample $(1)/etc/nut/upsset.conf.enable
$(SED) 's/### \?//' $(1)/etc/nut/upsset.conf.enable
$(INSTALL_DIR) $(1)/etc/config $(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/nut_cgi $(1)/etc/config/nut_cgi $(INSTALL_CONF) ./files/nut_cgi $(1)/etc/config/nut_cgi
$(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/nut-cgi.init $(1)/etc/init.d/nut-cgi $(INSTALL_BIN) ./files/nut-cgi.init $(1)/etc/init.d/nut-cgi
ln -sf /var/etc/nut/hosts.conf $(1)/etc/nut/hosts.conf ln -sf /var/etc/nut/hosts.conf $(1)/etc/nut/hosts.conf
ln -sf /var/etc/nut/upsset.conf $(1)/etc/nut/upsset.conf
endef endef
define Package/nut-avahi-service define Package/nut-avahi-service
@ -342,7 +364,7 @@ define DriverPackage
define Package/nut-driver-$(2) define Package/nut-driver-$(2)
$(call Package/nut/Default) $(call Package/nut/Default)
TITLE:=$(2) (NUT $(1) driver) TITLE:=$(2) (NUT $(1) driver)
DEPENDS:=nut +nut-common
DEPENDS:=nut +nut-server
$(if $(filter $(1),snmp),DEPENDS+= @NUT_DRIVER_SNMP) $(if $(filter $(1),snmp),DEPENDS+= @NUT_DRIVER_SNMP)
$(if $(filter $(1),usb),DEPENDS+= @NUT_DRIVER_USB) $(if $(filter $(1),usb),DEPENDS+= @NUT_DRIVER_USB)
$(if $(filter $(1),serial),DEPENDS+= @NUT_DRIVER_SERIAL) $(if $(filter $(1),serial),DEPENDS+= @NUT_DRIVER_SERIAL)
@ -502,9 +524,11 @@ CONFIGURE_ARGS += \
--without-avahi \ --without-avahi \
--$(if $(CONFIG_NUT_DRIVER_SNMP),with,without)-snmp \ --$(if $(CONFIG_NUT_DRIVER_SNMP),with,without)-snmp \
--$(if $(CONFIG_NUT_DRIVER_SERIAL),with,without)-serial \ --$(if $(CONFIG_NUT_DRIVER_SERIAL),with,without)-serial \
--without-doc \
--without-neon \ --without-neon \
--without-powerman \ --without-powerman \
--without-wrap \ --without-wrap \
--with-hotplug-dir=/etc/hotplug \
--with-cgi \ --with-cgi \
--without-ipmi \ --without-ipmi \
--without-freeipmi \ --without-freeipmi \


+ 51
- 0
net/nut/files/30-libhid-ups.head View File

@ -0,0 +1,51 @@
#!/bin/sh
. /lib/functions.sh
nut_driver_config() {
local cfg="$1"
local nomatch="$2"
config_get runas "$cfg" runas "nut"
config_get vendorid "$cfg" vendorid
config_get productid "$cfg" productid
[ "$ACTION" = "add" ] &&[ -n "$DEVNAME" ] && {
chmod 0660 /dev/"$DEVNAME"
chown ${runas:-root}:$(id -gn "${runas:-root}") /dev/"$DEVNAME"
}
if [ "$(printf "%04x" 0x"$pvendid")" = "$vendorid" ] && \
[ "$(printf "%04x" 0x"$pprodid")" = "$productid" ]; then
[ "$ACTION" = "add" ] && {
/etc/init.d/nut-server start "$cfg"
}
[ "$ACTION" = "remove" ] && {
/etc/init.d/nut-server stop "$cfg"
}
found=1
elif [ "$nomatch" = "1" ]; then
[ "$ACTION" = "add" ] && {
/etc/init.d/nut-server start "$cfg"
}
[ "$ACTION" = "remove" ] && {
/etc/init.d/nut-server stop "$cfg"
}
fi
}
perform_libhid_action() {
local vendorid productid runas
local pvendid pprodid found
pvendid=${PRODUCT%/*}
pvendid=${pvendid%/*}
pprodid=${PRODUCT%/*}
pprodid=${pprodid##*/}
config_load nut_server
config_foreach nut_driver_config driver 0
[ "$found" != "1" ] && config_foreach nut_driver_config driver 1
}
[ -n "$PRODUCT" ] && case "$PRODUCT" in

+ 5
- 0
net/nut/files/30-libhid-ups.tail View File

@ -0,0 +1,5 @@
"")
[ -d /var/run/nut ] && [ ! -f /var/run/nut/disable-hotplug ] && \
/etc/init.d/nut-server enabled && perform_libhid_action
;;
esac

+ 32
- 5
net/nut/files/nut-cgi.init View File

@ -5,9 +5,24 @@
# See /LICENSE for more information. # See /LICENSE for more information.
# #
START=51 START=51
USE_PROCD=1
DEFAULT=/etc/default/nut DEFAULT=/etc/default/nut
UPSCGI_C=/var/etc/nut/hosts.conf UPSCGI_C=/var/etc/nut/hosts.conf
UPSCGI_S=/var/etc/nut/upsset.conf
nut_upscgi_upsset() {
local cfg="$1"
local enable
config_get_bool enable "$cfg" enable 0
[ $enable -eq 1 ] && {
ln -sf /etc/nut/upsset.conf.enable "$UPSCGI_S"
} || {
ln -sf /etc/nut/upsset.conf.disable "$UPSCGI_S"
}
}
nut_upscgi_add() { nut_upscgi_add() {
local cfg="$1" local cfg="$1"
@ -25,20 +40,32 @@ nut_upscgi_add() {
system="$system:$port"; system="$system:$port";
fi fi
config_get displayname "$cfg" displayname config_get displayname "$cfg" displayname
echo "MONITOR $system \"$displayname\"" >> $UPSCGI_C
echo "MONITOR $system \"$displayname\"" >> "$UPSCGI_C"
} }
start() {
rm -f $UPSCGI_C
service_reload() {
mkdir -m 0755 -p "$(dirname "$UPSCGI_C")"
rm -f "$UPSCGI_C"
rm -f "$UPSCGI_S"
config_load nut_cgi config_load nut_cgi
config_foreach nut_upscgi_add host config_foreach nut_upscgi_add host
config_foreach nut_upscgi_upsset upsset
chmod 640 /var/etc/nut/hosts.conf chmod 640 /var/etc/nut/hosts.conf
} }
stop() {
rm -f $UPSCGI_C
start_service() {
service_reload
}
stop_service() {
rm -f "$UPSCGI_C"
rm -f "$UPSCGI_S"
ln -sf /etc/nut/upsset.conf.disable "$UPSCGI_S"
} }
service_triggers() {
procd_add_reload_trigger "nut_cgi"
}

+ 70
- 66
net/nut/files/nut-monitor.init View File

@ -6,56 +6,57 @@ UPSMON_C=/var/etc/nut/upsmon.conf
nut_upsmon_conf() { nut_upsmon_conf() {
local cfg="$1" local cfg="$1"
local RUNAS val optval
echo "# Config file automatically generated from UCI config" > $UPSMON_C
echo "# Config file automatically generated from UCI config" > "$UPSMON_C"
config_get runas "$cfg" runas "nut"
[ -n "$runas" ] && echo "RUN_AS_USER $runas" >> $UPSMON_C
config_get RUNAS "$cfg" runas "nutmon"
[ -n "$RUNAS" ] && echo "RUN_AS_USER $RUNAS" >> "$UPSMON_C"
runas=$RUNAS
config_get val "$cfg" minsupplies 1 config_get val "$cfg" minsupplies 1
echo "MINSUPPLIES $val" >> $UPSMON_C
echo "MINSUPPLIES $val" >> "$UPSMON_C"
config_get val "$cfg" shutdowncmd "/sbin/halt"
echo "SHUTDOWNCMD \"$val\"" >> $UPSMON_C
config_get val "$cfg" shutdowncmd "/usr/sbin/nutshutdown"
echo "SHUTDOWNCMD \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" notifycmd config_get val "$cfg" notifycmd
[ -n "$val" ] && echo "NOTIFYCMD \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYCMD \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" pollfreq 5 config_get val "$cfg" pollfreq 5
echo "POLLFREQ $val" >> $UPSMON_C
echo "POLLFREQ $val" >> "$UPSMON_C"
config_get val "$cfg" pollfreqalert 5 config_get val "$cfg" pollfreqalert 5
echo "POLLFREQALERT $val" >> $UPSMON_C
echo "POLLFREQALERT $val" >> "$UPSMON_C"
config_get val "$cfg" hostsync 15 config_get val "$cfg" hostsync 15
echo "HOSTSYNC $val" >> $UPSMON_C
echo "HOSTSYNC $val" >> "$UPSMON_C"
config_get val "$cfg" deadtime 15 config_get val "$cfg" deadtime 15
echo "DEADTIME $val" >> $UPSMON_C
echo "DEADTIME $val" >> "$UPSMON_C"
config_get val "$cfg" powerdownflag /var/run/killpower
echo "POWERDOWNFLAG $val" >> $UPSMON_C
echo "POWERDOWNFLAG /var/run/killpower" >> "$UPSMON_C"
config_get val "$cfg" onlinemsg config_get val "$cfg" onlinemsg
[ -n "$val" ] && echo "NOTIFYMSG ONLINE \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG ONLINE \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" onbattmsg config_get val "$cfg" onbattmsg
[ -n "$val" ] && echo "NOTIFYMSG ONBATT \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG ONBATT \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" lowbattmsg config_get val "$cfg" lowbattmsg
[ -n "$val" ] && echo "NOTIFYMSG LOWBATT \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG LOWBATT \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" fsdmsg config_get val "$cfg" fsdmsg
[ -n "$val" ] && echo "NOTIFYMSG FSD \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG FSD \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" commokmsg config_get val "$cfg" commokmsg
[ -n "$val" ] && echo "NOTIFYMSG COMMOK \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG COMMOK \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" commbadmsg config_get val "$cfg" commbadmsg
[ -n "$val" ] && echo "NOTIFYMSG COMMBAD \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG COMMBAD \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" shutdownmsg config_get val "$cfg" shutdownmsg
[ -n "$val" ] && echo "NOTIFYMSG SHUTDOWN \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG SHUTDOWN \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" replbattmsg config_get val "$cfg" replbattmsg
[ -n "$val" ] && echo "NOTIFYMSG REPLBATT \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG REPLBATT \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" nocommmsg config_get val "$cfg" nocommmsg
[ -n "$val" ] && echo "NOTIFYMSG NOCOMM \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG NOCOMM \"$val\"" >> "$UPSMON_C"
config_get val "$cfg" noparentmsg config_get val "$cfg" noparentmsg
[ -n "$val" ] && echo "NOTIFYMSG NOPARENT \"$val\"" >> $UPSMON_C
[ -n "$val" ] && echo "NOTIFYMSG NOPARENT \"$val\"" >> "$UPSMON_C"
notifylist() { notifylist() {
local value="$1" local value="$1"
@ -85,34 +86,34 @@ nut_upsmon_conf() {
val="" val=""
config_list_foreach "$cfg" defaultnotify notifylist config_list_foreach "$cfg" defaultnotify notifylist
default="$optval" 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
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 config_get val "$cfg" rbwarntime 43200
echo "RBWARNTIME $val" >> $UPSMON_C
echo "RBWARNTIME $val" >> "$UPSMON_C"
config_get val "$cfg" nocommwarntime 300 config_get val "$cfg" nocommwarntime 300
echo "NOCOMMWARNTIME $val" >> $UPSMON_C
echo "NOCOMMWARNTIME $val" >> "$UPSMON_C"
config_get val "$cfg" finaldelay 5 config_get val "$cfg" finaldelay 5
echo "FINALDELAY $val" >> $UPSMON_C
echo "FINALDELAY $val" >> "$UPSMON_C"
config_get val "$cfg" certpath config_get val "$cfg" certpath
if [ -n "$val" ]; then echo "CERTPATH $val" >> $UPSMON_C; fi
if [ -n "$val" ]; then echo "CERTPATH $val" >> "$UPSMON_C"; fi
config_get_bool val "$cfg" certverify 0 config_get_bool val "$cfg" certverify 0
if [ -n "$val" ]; then echo "CERTVERIFY $val" >> $UPSMON_C; fi
if [ -n "$val" ]; then echo "CERTVERIFY $val" >> "$UPSMON_C"; fi
config_get_bool val "$cfg" forcessl 0 config_get_bool val "$cfg" forcessl 0
if [ -n "$val" ]; then echo "FORCESSL $val" >> $UPSMON_C; fi
if [ -n "$val" ]; then echo "FORCESSL $val" >> "$UPSMON_C"; fi
} }
nut_upsmon_add() { nut_upsmon_add() {
@ -126,12 +127,6 @@ nut_upsmon_add() {
local password local password
local system local system
# if UPSMON_C is a symlink we're only doing generated config
[ -L $UPSMON_C ] && {
rm -f $UPSMON_C
nut_upsmon_conf ""
}
config_get upsname "$cfg" upsname config_get upsname "$cfg" upsname
config_get hostname "$cfg" hostname localhost config_get hostname "$cfg" hostname localhost
config_get port "$cfg" port config_get port "$cfg" port
@ -142,40 +137,49 @@ nut_upsmon_add() {
if [ -n "$port" ]; then if [ -n "$port" ]; then
system="$system:$port"; system="$system:$port";
fi fi
echo "MONITOR $system $powervalue $username $password $type" >> $UPSMON_C
echo "MONITOR $system $powervalue $username $password $type" >> "$UPSMON_C"
} }
start_service() {
mkdir -p "$(dirname "$UPSMON_C")"
chmod 750 "$(dirname "$UPSMON_C")"
build_config() {
local runas
mkdir -m 0750 -p "$(dirname "$UPSMON_C")"
config_load nut_monitor config_load nut_monitor
config_foreach nut_upsmon_conf upsmon config_foreach nut_upsmon_conf upsmon
config_foreach nut_upsmon_add master master config_foreach nut_upsmon_add master master
config_foreach nut_upsmon_add slave slave config_foreach nut_upsmon_add slave slave
[ -z "$(cat /var/etc/nut/nut.conf)" ] && echo "MODE=netclient" >>/var/etc/nut/nut.conf
chmod 640 $UPSMON_C
chmod 640 /var/etc/nut/nut.conf
chown ${runas:-root}:$(id -gn ${runas:-root}) /var/etc/nut
chown ${runas:-root}:$(id -gn ${runas:-root}) /var/etc/nut/nut.conf
chown ${runas:-root}:$(id -gn ${runas:-root}) $UPSMON_C
[ -d /var/run/nut ] || {
mkdir -m 0750 -p /var/run/nut
chown ${runas:-root}:$(id -gn ${runas:-root}) /var/run/nut
[ -z "$(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
} }
exec $DEBUG /usr/sbin/upsmon $UPSMON_OPTIONS
chmod 640 "$UPSMON_C"
chgrp $(id -gn ${runas:-root}) "$UPSMON_C"
} }
stop_service() {
exec /usr/sbin/upsmon -c stop
start_service() {
build_config
procd_open_instance
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() { reload_service() {
exec /usr/sbin/upsmon -c reload
if pgrep upsmon >/dev/null 2>/dev/null; then
build_config
upsmon -c reload
else
stop
sleep 1
start
fi
}
service_triggers() {
procd_add_reload_trigger nut_monitor
} }

+ 171
- 72
net/nut/files/nut-server.init View File

@ -6,47 +6,70 @@
# #
START=50 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 USERS_C=/var/etc/nut/upsd.users
UPSD_C=/var/etc/nut/upsd.conf UPSD_C=/var/etc/nut/upsd.conf
UPS_C=/var/etc/nut/ups.conf
USE_PROCD=1 USE_PROCD=1
listen_address() {
local cfg="$1"
get_write_driver_config() {
local cfg="$1"
local var="$2"
local def="$3"
local flag="$4"
local val
config_get address "$cfg" address "::1"
config_get port "$cfg" port
echo "LISTEN $address $port" >>$UPSD_C
[ -z "$flag" ] && {
config_get val "$cfg" "$var" "$def"
[ -n "$val" ] && [ "$val" != "0" ] && echo "$var = $val" >>"$UPS_C"
}
[ -n "$flag" ] && {
config_get_bool val "$cfg" "$var" "$def"
[ "$val" = 1 ] && echo "$var" >>"$UPS_C"
}
} }
upsd_statepath() { upsd_statepath() {
local cfg="$1"
local statepath
config_get statepath "$cfg" statepath "/var/run/nut"
STATEPATH="$statepath"
}
listen_address() {
local cfg="$1" local cfg="$1"
config_get statepath "$cfg" statepath
config_get address "$cfg" address "::1"
config_get port "$cfg" port
echo "LISTEN $address $port" >>"$UPSD_C"
} }
upsd_config() { upsd_config() {
local cfg="$1" local cfg="$1"
local maxage maxconn certfile
local maxage maxconn certfile runas statepath
# Note runas support requires you make sure USB device file is readable by # Note runas support requires you make sure USB device file is readable by
# the runas user # the runas user
config_get runas "$cfg" runas
config_get runas "$cfg" runas "nut"
RUNAS="$runas"
config_get statepath "$cfg" statepath "/var/run/nut"
STATEPATH="$statepath"
config_get maxage "$cfg" maxage config_get maxage "$cfg" maxage
[ -n "$maxage" ] && echo "MAXAGE $maxage" >>$UPSD_C
[ -n "$maxage" ] && echo "MAXAGE $maxage" >>"$UPSD_C"
config_get statepath "$cfg" statepath config_get statepath "$cfg" statepath
[ -n "$statepath" ] && echo "STATEPATH $statepath" >>$UPSD_C
[ -n "$statepath" ] && echo "STATEPATH $statepath" >>"$UPSD_C"
config_get maxconn "$cfg" maxconn config_get maxconn "$cfg" maxconn
[ -n "$maxconn" ] && echo "MAXCONN $maxconn" >>$UPSD_C
[ -n "$maxconn" ] && echo "MAXCONN $maxconn" >>"$UPSD_C"
#NOTE: certs only apply to SSL-enabled version #NOTE: certs only apply to SSL-enabled version
config_get certfile "$cfg" certfile config_get certfile "$cfg" certfile
[ -n "$certfile" ] && echo "CERTFILE $certfile" >>$UPSD_C
[ -n "$certfile" ] && echo "CERTFILE $certfile" >>"$UPSD_C"
} }
nut_user_add() { nut_user_add() {
@ -55,104 +78,180 @@ nut_user_add() {
local val local val
config_get val "$cfg" username "$1" config_get val "$cfg" username "$1"
echo "[$val]" >> $USERS_C
echo "[$val]" >> "$USERS_C"
config_get val "$cfg" password config_get val "$cfg" password
echo " password = $val" >> $USERS_C
echo " password = $val" >> "$USERS_C"
config_get val "$cfg" actions config_get val "$cfg" actions
for a in $val; do for a in $val; do
echo " actions = $a" >> $USERS_C
echo " actions = $a" >> "$USERS_C"
done done
instcmd() { instcmd() {
local val="$1" local val="$1"
echo " instcmds = $val" >> $USERS_C
echo " instcmds = $val" >> "$USERS_C"
} }
config_list_foreach "$cfg" instcmd instcmd config_list_foreach "$cfg" instcmd instcmd
config_get val "$cfg" upsmon config_get val "$cfg" upsmon
if [ -n "$val" ]; then if [ -n "$val" ]; then
echo " upsmon $val" >> $USERS_C
echo " upsmon $val" >> "$USERS_C"
fi 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
build_server_config() {
mkdir -m 0755 -p "$(dirname "$UPSD_C")"
rm -f "$USERS_C"
rm -f "$UPSD_C"
rm -f /var/etc/nut/nut.conf 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
echo "# Config file automatically generated from UCI config" > "$USERS_C"
echo "# Config file automatically generated from UCI config" > "$UPSD_C"
config_foreach nut_user_add user config_foreach nut_user_add user
config_foreach upsd_config upsd
config_foreach listen_address listen_address config_foreach listen_address listen_address
config_foreach upsd_config upsd
echo "MODE=netserver" >>/var/etc/nut/nut.conf echo "MODE=netserver" >>/var/etc/nut/nut.conf
chmod 0640 $USERS_C
chmod 0640 $UPS_C
chmod 0640 $UPSD_C
chmod 0640 "$USERS_C"
chmod 0640 "$UPSD_C"
chmod 0640 /var/etc/nut/nut.conf 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}"
[ -d "${STATEPATH}" ] || {
mkdir -m 0750 -p "${STATEPATH}"
} }
if [ -n "$runas" ]; then
chown -R $runas:$(id -gn $runas) /var/etc/nut
if [ -n "$RUNAS" ]; then
chown $RUNAS:$(id -gn $RUNAS) "${STATEPATH}"
chgrp $(id -gn $RUNAS) "$USERS_C"
chgrp $(id -gn $RUNAS) "$UPSD_C"
fi fi
}
if [ "$have_drivers" = "true" ]; then
$DEBUG /usr/sbin/upsd ${runas:+-u $runas} $OPTIONS
$DEBUG /usr/sbin/upsdrvctl ${runas:+-u $runas} start
fi
build_driver_config() {
local cfg="$1"
local runas
echo "[$cfg]" >>"$UPS_C"
config_get runas "$cfg" runas "nut"
RUNAS="$runas"
get_write_driver_config "$cfg" driver "usbhid-ups"
get_write_driver_config "$cfg" port "auto"
get_write_driver_config "$cfg" mfr
get_write_driver_config "$cfg" model
get_write_driver_config "$cfg" serial
get_write_driver_config "$cfg" sdtime
get_write_driver_config "$cfg" offdelay 20
get_write_driver_config "$cfg" ondelay 30
get_write_driver_config "$cfg" pollfreq 30
get_write_driver_config "$cfg" vendor
get_write_driver_config "$cfg" product
get_write_driver_config "$cfg" bus
get_write_driver_config "$cfg" interruptonly 0 1
get_write_driver_config "$cfg" interruptsize 0
get_write_driver_config "$cfg" maxreport
get_write_driver_config "$cfg" vendorid
get_write_driver_config "$cfg" productid
get_write_driver_config "$cfg" community
get_write_driver_config "$cfg" snmp_version
get_write_driver_config "$cfg" snmp_retries 0
get_write_driver_config "$cfg" snmp_timeout 0
get_write_driver_config "$cfg" notransferoids 0 1
get_write_driver_config "$cfg" other
echo "" >>$UPS_C
} }
build_config() {
mkdir -m 0755 -p "$(dirname "$UPS_C")"
rm -f "$UPS_C"
echo "# Config file automatically generated from UCI config" > "$UPS_C"
chmod 0640 "$UPS_C"
config_load nut_server
config_foreach build_driver_config driver
[ -n "$RUNAS" ] && chgrp $(id -gn $RUNAS) "$UPS_C"
nut_driver_stop() {
build_server_config
}
start_driver_instance() {
local cfg="$1" local cfg="$1"
local requested="$2"
local RUNAS=nut
local driver local driver
config_get driver "$cfg" driver
# If wanting a specific instance, only start it
[ "$requested" != "$cfg" ] && [ x"$requested" != x"" ] && return 0
mkdir -m 0755 -p "$(dirname "$UPS_C")"
[ ! -s "$UPS_C" ] && build_config
[ -r ${statepath:-/var/run/nut}/$driver-$cfg ] && /usr/sbin/upsdrvctl stop $cfg
# Avoid hotplug inadvertenly restarting driver during
# forced shutdown
[ -f /var/run/killpower ] && return 0
[ -d /var/run/nut ] && [ -f /var/run/nut/disable-hotplug ] && return 0
if [ -n "$RUNAS" ]; then
chown $RUNAS:$(id -gn $RUNAS) "${STATEPATH}"
chown $RUNAS:$(id -gn $RUNAS) "$(dirname "$UPS_C")"
fi
config_get driver "$cfg" driver "usbhid-ups"
procd_open_instance "$cfg"
procd_set_param respawn
procd_set_param stderr 0
procd_set_param stdout 1
procd_set_param command /lib/nut/${driver} -D -a "$cfg" ${RUNAS:+-u $RUNAS}
procd_close_instance
}
start_server_instance() {
local RUNAS STATEPATH
build_config
procd_open_instance "upsd"
procd_set_param respawn
procd_set_param stderr 0
procd_set_param stdout 1
procd_set_param command /usr/sbin/upsd -D ${RUNAS:+-u $RUNAS}
procd_close_instance
} }
stop_service() {
[ -r $PID_F ] && /usr/sbin/upsd -c stop
config_load ups
start_service() {
local STATEPATH=/var/run/nut
# Avoid hotplug inadvertenly restarting driver during
# forced shutdown
[ -f /var/run/killpower ] && return 0
[ -d /var/run/nut ] && [ -f /var/run/nut/disable-hotplug ] && return 0
config_load nut_server
config_foreach upsd_statepath upsd config_foreach upsd_statepath upsd
config_foreach nut_driver_stop driver
[ -d "${STATEPATH}" ] || {
mkdir -m 0750 -p "${STATEPATH}"
}
build_config
config_foreach start_driver_instance driver "$@"
[ "$1" != "upsd" ] && [ x"$1" != x"" ] && return 0
start_server_instance "upsd"
} }
reload_service() { reload_service() {
upsd -c reload
stop
sleep 2
start
}
service_triggers() {
procd_add_reload_trigger "nut_server"
} }

+ 2
- 0
net/nut/files/nut_cgi View File

@ -4,3 +4,5 @@
# option port # optional port number # option port # optional port number
# option displayname "Display Name" # option displayname "Display Name"
config upsset
option enable 0

+ 2
- 4
net/nut/files/nut_monitor View File

@ -1,14 +1,13 @@
#config upsmon 'upsmon' #config upsmon 'upsmon'
# option runas run-as-user
# option runas nutmon
# option minsupplies 1 # option minsupplies 1
# option shutdowncmd /sbin/halt
# option shutdowncmd '/usr/sbin/nutshutdown'
# option notifycmd /path/to/cmd # option notifycmd /path/to/cmd
# list defaultnotify SYSLOG # list defaultnotify SYSLOG
# option pollfreq 5 # option pollfreq 5
# option pollfreqalert 5 # option pollfreqalert 5
# option hostsync 15 # option hostsync 15
# option deadtime 15 # option deadtime 15
# option powerdownflags /var/run/killpower
# option onlinemsg "online message" # option onlinemsg "online message"
# option onbattmsg "on battery message" # option onbattmsg "on battery message"
# option lowbattmsg "low battery message" # option lowbattmsg "low battery message"
@ -51,4 +50,3 @@
# option powervalue 1 # option powervalue 1
# option username upsuser # option username upsuser
# option password upspassword # option password upspassword

+ 1
- 0
net/nut/files/nut_server View File

@ -19,5 +19,6 @@
# option maxage 15 # option maxage 15
# option statepath /var/run/nut # option statepath /var/run/nut
# option maxconn 1024 # option maxconn 1024
# option runas nut
# NB: certificates only apply to SSL-enabled version # NB: certificates only apply to SSL-enabled version
# option certfile /usr/local/etc/upsd.pem # option certfile /usr/local/etc/upsd.pem

+ 41
- 0
net/nut/files/nutshutdown View File

@ -0,0 +1,41 @@
#!/bin/sh
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
. /lib/functions.sh
mount -o remount,ro /overlay /overlay
mount -o remount,ro / /
stop_instance() {
/etc/init.d/nut-server stop "$1"
}
shutdown_instance() {
local cfg="$1"
config_get driver "$cfg" driver "usbhid-ups"
/lib/nut/${driver} -a "$cfg" -k
}
[ -f /var/run/killpower ] && {
[ -f /etc/config/nut_server ] && {
config_load nut_server
# Can't FSD unless drivers are stopped
config_foreach stop_instance driver
# Driver will wait 'offdelay' before shutting down
config_foreach shutdown_instance driver
# So this can happen
poweroff
# And just in case
sleep 120
# Uh-oh failed to poweroff UPS
reboot -f
} || {
poweroff
}
} || {
poweroff
}

Loading…
Cancel
Save