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" community
151 get_write_driver_config
"$cfg" desc
152 get_write_driver_config
"$cfg" driver
"usbhid-ups"
153 get_write_driver_config
"$cfg" ignorelb
0 1
154 get_write_driver_config
"$cfg" interruptonly
0 1
155 get_write_driver_config
"$cfg" interruptsize
156 get_write_driver_config
"$cfg" maxreport
157 get_write_driver_config
"$cfg" maxstartdelay
158 get_write_driver_config
"$cfg" mfr
159 get_write_driver_config
"$cfg" model
160 get_write_driver_config
"$cfg" nolock
0 1
161 get_write_driver_config
"$cfg" notransferoids
0 1
162 get_write_driver_config
"$cfg" offdelay
163 get_write_driver_config
"$cfg" ondelay
164 get_write_driver_config
"$cfg" pollfreq
165 get_write_driver_config
"$cfg" port
"auto"
166 get_write_driver_config
"$cfg" product
167 get_write_driver_config
"$cfg" productid
168 get_write_driver_config
"$cfg" retrydelay
169 get_write_driver_config
"$cfg" sdorder
170 get_write_driver_config
"$cfg" sdtime
171 get_write_driver_config
"$cfg" serial
172 get_write_driver_config
"$cfg" snmp_version
173 get_write_driver_config
"$cfg" snmp_retries
174 get_write_driver_config
"$cfg" snmp_timeout
175 get_write_driver_config
"$cfg" synchronous
176 get_write_driver_config
"$cfg" vendor
177 get_write_driver_config
"$cfg" vendorid
182 local overtype
="$(echo "$overvar" | tr '.' '_')"
185 config_get overval
"${defover}_${overtype}" value
186 [ -n "$overval" ] && echo "${defover}.${overvar} = $overval" >>"$UPS_C"
189 config_list_foreach
"$cfg" override defoverride override
190 config_list_foreach
"$cfg" default defoverride default
194 local othervarflag
="$2"
197 if [ "$othervarflag" = "otherflag" ]; then
198 config_get_bool otherval
"${othervarflag}_${othervar}" value
199 [ "$otherval" = "1" ] && echo "${othervar}" >>"$UPS_C"
201 config_get otherval
"${othervarflag}_${othervar}" value
202 [ -n "$otherval" ] && echo "${othervar} = $otherval" >>"$UPS_C"
206 config_list_foreach
"$cfg" other other other
207 config_list_foreach
"$cfg" otherflag other otherflag
212 build_global_driver_config
() {
215 # Global driver config
216 get_write_driver_config
"$cfg" chroot
217 get_write_driver_config
"$cfg" driverpath
218 get_write_driver_config
"$cfg" maxstartdelay
219 get_write_driver_config
"$cfg" maxretry
220 get_write_driver_config
"$cfg" retrydelay
221 get_write_driver_config
"$cfg" pollinterval
222 get_write_driver_config
"$cfg" synchronous
223 config_get runas
"$cfg" user nut
230 local STATEPATH
=/var
/run
/nut
232 mkdir
-p "$(dirname "$UPS_C")"
234 echo "# Config file automatically generated from UCI config" > "$UPS_C"
237 config_load nut_server
240 config_foreach build_global_driver_config driver_global
241 config_foreach build_driver_config driver
244 [ -n "$RUNAS" ] && chgrp
"$(id -gn "$RUNAS")" "$UPS_C"
247 start_driver_instance
() {
251 local STATEPATH
=/var
/run
/nut
254 [ "$havedriver" != 1 ] && return
256 # If wanting a specific instance, only start it
257 if [ "$requested" != "$cfg" ] && [ "$request" != "" ]; then
261 mkdir
-p "$(dirname "$UPS_C")"
267 # Avoid hotplug inadvertenly restarting driver during
269 [ -f /var
/run
/killpower
] && return 0
270 if [ -d /var
/run
/nut
] && [ -f /var
/run
/nut
/disable-hotplug
]; then
274 if [ -n "$RUNAS" ]; then
275 chown
"$RUNAS":"$(id -gn "$RUNAS")" "${STATEPATH}"
276 chgrp
"$(id -gn "$RUNAS")" "$UPS_C"
279 config_get driver
"$cfg" driver
"usbhid-ups"
280 procd_open_instance
"$cfg"
281 procd_set_param respawn
282 procd_set_param stderr
0
283 procd_set_param stdout
1
284 procd_set_param
command /lib
/nut
/"${driver}" -D -a "$cfg" ${RUNAS:+-u "$RUNAS"}
288 interface_triggers
() {
290 local triggerlist trigger
292 config_get triggerlist upsd triggerlist
294 .
/lib
/functions
/network.sh
296 if [ -n "$triggerlist" ]; then
297 for trigger
in $triggerlist; do
298 if [ "$action" = "add_trigger" ]; then
299 procd_add_interface_trigger
"interface.*" "$trigger" /etc
/init.d
/nut-server reload
301 network_is_up
"$trigger" && return 0
305 if [ "$action" = "add_trigger" ]; then
306 procd_add_raw_trigger
"interface.*.up" 2000 /etc
/init.d
/nut-server reload
308 ubus call network.device status |
grep -q '"up": true' && return 0
311 [ "$action" = "add_trigger" ] ||
return 1
314 start_server_instance
() {
317 [ "$haveserver" != 1 ] && return
318 interface_triggers
"check_interface_up" ||
return
320 procd_open_instance
"$cfg"
321 procd_set_param respawn
322 procd_set_param stderr
0
323 procd_set_param stdout
1
324 procd_set_param
command /usr
/sbin
/upsd
-D ${RUNAS:+-u "$RUNAS"}
329 local STATEPATH
=/var
/run
/nut
331 # Avoid hotplug inadvertenly restarting driver during
333 [ -f /var
/run
/killpower
] && return 0
335 config_load nut_server
340 config_foreach start_driver_instance driver
"$@"
341 start_server_instance upsd
344 start_server_instance upsd
347 config_foreach start_driver_instance driver
"$@"
359 config_load nut_server
361 interface_triggers
"add_trigger"
362 procd_add_reload_trigger
"nut_server"