#!/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_statepath() { local cfg="$1" config_get statepath "$cfg" statepath } 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 [ -d "${statepath:-/var/run/nut}" ] || { mkdir -m 0750 -p "${statepath:-/var/run/nut}" chown $runas:$(id -gn $runas) "${statepath:-/var/run/nut}" } 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 ${statepath:-/var/run/nut}/$driver-$cfg ] && /usr/sbin/upsdrvctl stop $cfg } stop_service() { [ -r $PID_F ] && /usr/sbin/upsd -c stop config_load ups config_foreach upsd_statepath upsd config_foreach nut_driver_stop driver } reload_service() { upsd -c reload }