1 #!/bin/sh /etc/rc.common
2 # Copyright © 2012 OpenWrt.org
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
10 USERS_C
=/var
/etc
/nut
/upsd.users
11 UPSD_C
=/var
/etc
/nut
/upsd.conf
12 UPS_C
=/var
/etc
/nut
/ups.conf
16 get_write_driver_config
() {
24 config_get val
"$cfg" "$var" "$def"
25 [ -n "$val" ] && [ "$val" != "0" ] && echo "$var = $val" >>"$UPS_C"
29 config_get_bool val
"$cfg" "$var" "$def"
30 [ "$val" = 1 ] && echo "$var" >>"$UPS_C"
37 config_get statepath upsd statepath
/var
/run
/nut
38 STATEPATH
="$statepath"
44 [ -n "$RUNAS" ] && return 0
46 config_get runas upsd runas nut
53 config_get address
"$cfg" address
"::1"
54 config_get port
"$cfg" port
55 echo "LISTEN $address $port" >>"$UPSD_C"
60 local maxage maxconn certfile runas statepath
62 # Note runas support requires you make sure USB device file is readable by
64 config_get runas
"$cfg" runas nut
67 config_get statepath
"$cfg" statepath
/var
/run
/nut
68 STATEPATH
="$statepath"
70 config_get maxage
"$cfg" maxage
71 [ -n "$maxage" ] && echo "MAXAGE $maxage" >>"$UPSD_C"
73 [ -n "$statepath" ] && echo "STATEPATH $statepath" >>"$UPSD_C"
75 config_get maxconn
"$cfg" maxconn
76 [ -n "$maxconn" ] && echo "MAXCONN $maxconn" >>"$UPSD_C"
78 #NOTE: certs only apply to SSL-enabled version
79 config_get certfile
"$cfg" certfile
80 [ -n "$certfile" ] && echo "CERTFILE $certfile" >>"$UPSD_C"
88 config_get val
"$cfg" username
"$1"
89 echo "[$val]" >> "$USERS_C"
91 config_get val
"$cfg" password
92 echo " password = $val" >> "$USERS_C"
94 config_get val
"$cfg" actions
96 echo " actions = $a" >> "$USERS_C"
101 echo " instcmds = $val" >> "$USERS_C"
104 config_list_foreach
"$cfg" instcmd instcmd
106 config_get val
"$cfg" upsmon
107 if [ -n "$val" ]; then
108 echo " upsmon $val" >> "$USERS_C"
112 build_server_config
() {
113 mkdir
-p "$(dirname "$UPSD_C")"
117 rm -f /var
/etc
/nut
/nut.conf
119 echo "# Config file automatically generated from UCI config" > "$USERS_C"
120 echo "# Config file automatically generated from UCI config" > "$UPSD_C"
122 config_foreach nut_user_add user
123 config_foreach listen_address listen_address
124 config_foreach upsd_config upsd
125 echo "MODE=netserver" >>/var
/etc
/nut
/nut.conf
127 chmod 0640 "$USERS_C"
129 chmod 0644 /var
/etc
/nut
/nut.conf
131 [ -d "${STATEPATH}" ] ||
{
132 mkdir
-p "${STATEPATH}"
133 chmod 0750 "${STATEPATH}"
136 if [ -n "$RUNAS" ]; then
137 chown
"$RUNAS":"$(id -gn "$RUNAS")" "${STATEPATH}"
138 chgrp
"$(id -gn "$RUNAS")" "$USERS_C"
139 chgrp
"$(id -gn "$RUNAS")" "$UPSD_C"
144 build_driver_config
() {
147 echo "[$cfg]" >>"$UPS_C"
149 get_write_driver_config
"$cfg" bus
150 get_write_driver_config
"$cfg" cable
151 get_write_driver_config
"$cfg" community
152 get_write_driver_config
"$cfg" desc
153 get_write_driver_config
"$cfg" driver
"usbhid-ups"
154 get_write_driver_config
"$cfg" ignorelb
0 1
155 get_write_driver_config
"$cfg" interruptonly
0 1
156 get_write_driver_config
"$cfg" interruptsize
157 get_write_driver_config
"$cfg" maxreport
158 get_write_driver_config
"$cfg" maxstartdelay
159 get_write_driver_config
"$cfg" mfr
160 get_write_driver_config
"$cfg" model
161 get_write_driver_config
"$cfg" nolock
0 1
162 get_write_driver_config
"$cfg" notransferoids
0 1
163 get_write_driver_config
"$cfg" offdelay
164 get_write_driver_config
"$cfg" ondelay
165 get_write_driver_config
"$cfg" pollfreq
166 get_write_driver_config
"$cfg" port
"auto"
167 get_write_driver_config
"$cfg" product
168 get_write_driver_config
"$cfg" productid
169 get_write_driver_config
"$cfg" retrydelay
170 get_write_driver_config
"$cfg" sdorder
171 get_write_driver_config
"$cfg" sdtime
172 get_write_driver_config
"$cfg" serial
173 get_write_driver_config
"$cfg" snmp_version
174 get_write_driver_config
"$cfg" snmp_retries
175 get_write_driver_config
"$cfg" snmp_timeout
176 get_write_driver_config
"$cfg" synchronous
177 get_write_driver_config
"$cfg" vendor
178 get_write_driver_config
"$cfg" vendorid
180 # Params specific to NetXML driver
181 get_write_driver_config
"$cfg" login
182 get_write_driver_config
"$cfg" password
183 get_write_driver_config
"$cfg" subscribe
0 1
188 local overtype
="$(echo "$overvar" | tr '_' '.')"
191 config_get overval
"${defover}_${overvar}" value
192 [ -n "$overval" ] && echo "${defover}.${overtype} = $overval" >>"$UPS_C"
195 config_list_foreach
"$cfg" override defoverride override
196 config_list_foreach
"$cfg" default defoverride default
200 local othervarflag
="$2"
203 if [ "$othervarflag" = "otherflag" ]; then
204 config_get_bool otherval
"${othervarflag}_${othervar}" value
205 [ "$otherval" = "1" ] && echo "${othervar}" >>"$UPS_C"
207 config_get otherval
"${othervarflag}_${othervar}" value
208 [ -n "$otherval" ] && echo "${othervar} = $otherval" >>"$UPS_C"
212 config_list_foreach
"$cfg" other other other
213 config_list_foreach
"$cfg" otherflag other otherflag
218 build_global_driver_config
() {
221 # Global driver config
222 get_write_driver_config
"$cfg" chroot
223 get_write_driver_config
"$cfg" driverpath
224 get_write_driver_config
"$cfg" maxstartdelay
225 get_write_driver_config
"$cfg" maxretry
226 get_write_driver_config
"$cfg" retrydelay
227 get_write_driver_config
"$cfg" pollinterval
228 get_write_driver_config
"$cfg" synchronous
229 config_get runas
"$cfg" user nut
236 local STATEPATH
=/var
/run
/nut
238 mkdir
-p "$(dirname "$UPS_C")"
240 echo "# Config file automatically generated from UCI config" > "$UPS_C"
243 config_load nut_server
246 config_foreach build_global_driver_config driver_global
247 config_foreach build_driver_config driver
250 [ -n "$RUNAS" ] && chgrp
"$(id -gn "$RUNAS")" "$UPS_C"
253 start_driver_instance
() {
257 local STATEPATH
=/var
/run
/nut
260 [ "$havedriver" != 1 ] && return
262 # If wanting a specific instance, only start it
263 if [ "$requested" != "$cfg" ] && [ "$request" != "" ]; then
267 mkdir
-p "$(dirname "$UPS_C")"
273 # Avoid hotplug inadvertenly restarting driver during
275 [ -f /var
/run
/killpower
] && return 0
276 if [ -d /var
/run
/nut
] && [ -f /var
/run
/nut
/disable-hotplug
]; then
280 if [ -n "$RUNAS" ]; then
281 chown
"$RUNAS":"$(id -gn "$RUNAS")" "${STATEPATH}"
282 chgrp
"$(id -gn "$RUNAS")" "$UPS_C"
285 config_get driver
"$cfg" driver
"usbhid-ups"
286 procd_open_instance
"$cfg"
287 procd_set_param respawn
288 procd_set_param stderr
0
289 procd_set_param stdout
1
290 procd_set_param
command /lib
/nut
/"${driver}" -D -a "$cfg" ${RUNAS:+-u "$RUNAS"}
294 interface_triggers
() {
296 local triggerlist trigger
298 config_get triggerlist upsd triggerlist
300 .
/lib
/functions
/network.sh
302 if [ -n "$triggerlist" ]; then
303 for trigger
in $triggerlist; do
304 if [ "$action" = "add_trigger" ]; then
305 procd_add_interface_trigger
"interface.*" "$trigger" /etc
/init.d
/nut-server reload
307 network_is_up
"$trigger" && return 0
311 if [ "$action" = "add_trigger" ]; then
312 procd_add_raw_trigger
"interface.*.up" 2000 /etc
/init.d
/nut-server reload
314 ubus call network.device status |
grep -q '"up": true' && return 0
317 [ "$action" = "add_trigger" ] ||
return 1
320 start_server_instance
() {
323 [ "$haveserver" != 1 ] && return
324 interface_triggers
"check_interface_up" ||
return
326 procd_open_instance
"$cfg"
327 procd_set_param respawn
328 procd_set_param stderr
0
329 procd_set_param stdout
1
330 procd_set_param
command /usr
/sbin
/upsd
-D ${RUNAS:+-u "$RUNAS"}
335 local STATEPATH
=/var
/run
/nut
337 # Avoid hotplug inadvertenly restarting driver during
339 [ -f /var
/run
/killpower
] && return 0
341 config_load nut_server
346 config_foreach start_driver_instance driver
"$@"
347 start_server_instance upsd
350 start_server_instance upsd
353 config_foreach start_driver_instance driver
"$@"
365 config_load nut_server
367 interface_triggers
"add_trigger"
368 procd_add_reload_trigger
"nut_server"