Network UPS Tools (NUT) es un completo programa para sistemas operativos basados en Unix y Linux para administrar y gestionar correctamente un Sistema de Alimentación Ininterrumpido (SAI).
La mayoría de fabricantes incorporan un software capaz de monitorizar el estado del SAI y enviar avisos por email, también permite ejecutar el sistema como “maestro” de tal forma que otros ordenadores se conecten a él como “esclavos” para leer el estado del SAI.
Tanto los equipos maestros como los esclavos, al leer el estado del SAI se pueden configurar para que se apaguen de forma automática si hay un corte de luz. En este manual se pretende configurar desde cero el programa NUT en una Raspberry Pi con sistema operativo Raspbian.
El punto fuerte de utilizar este sistema en lugar de un ordenador es el bajo consumo de energía y permite una gran configurabilidad como por ejemplo avisos por email. NUT también permite que ordenadores “esclavos” se conecten para leer el estado del mismo.
Instalación
Lo primero que tenemos que hacer es instalar el programa:
sudo apt-get install nut
Editar archivos de configuración
Una vez que se ha instalado, nos tenemos que ir al directorio /etc/nut/ donde se encuentran todos los archivos .conf para proceder con su configuración.
Nosotros hemos probado esta configuración con un SAI Salicru SPS SOHO+ 1400VA. A continuación os vamos a poner el contenido de nuestros archivos para que la Raspberry actúe como maestro y envíe notificaciones por email en caso de problemas. Tan sólo debemos editarlos en modo superusuario (root) con nuestro editor de archivos favorito (vi, vim, nano o cualquier otro).
Archivo nut.conf
sudo nano nut.conf
Añadimos:
MODE=standalone
Archivo ups.conf
sudo nano ups.conf
Añadimos:
[salicru]
driver = blazer_usb
port = auto
desc = "SAI Salicru"
Archivo upsd.conf
sudo nano upsd.conf
Añadimos:
MAXAGE 15
MAXCONN 1024
LISTEN 127.0.0.1 3493
STEN ::1 3493
Archivo upsmon.conf
sudo nano upsmon.conf
Añadimos:
MONITOR salicru@localhost 1 nonmaster contraseña master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /bin/upssched-cmd
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
Archivo upsd.users
sudo nano upsd.users
Añadimos:
[nonmaster]
password = contraseña
actions = set
instcmds = ALL
upsmon master
Archivo upssched.conf
sudo nano upssched.conf
Añadimos:
CMDSCRIPT /bin/upssched-cmd
PIPEFN /var/run/nut/upssched/upssched.pipe
LOCKFN /var/run/nut/upssched/upssched.lock
AT COMMOK * EXECUTE notify
AT COMMBAD * EXECUTE notify
AT REPLBATT * EXECUTE notify
AT NOCOMM * EXECUTE notify
AT FSD * EXECUTE forced-shutdown
AT NOPARENT * EXECUTE notify
AT SHUTDOWN * EXECUTE notify
AT ONLINE * CANCEL-TIMER shutdown
AT ONLINE * EXECUTE resume
AT ONBATT * START-TIMER shutdown 60000
AT ONBATT * EXECUTE shutdown-warning
AT LOWBATT * START-TIMER shutdown
AT LOWBATT * EXECUTE shutdown-warning
Hasta aquí llegaría la configuración de los archivos fundamentales para que el sistema operativo reconozca el SAI correctamente y comience a funcionar. Sin embargo, hay un archivo extra ubicado llamado upssched-cmd ubicado en /bin/ que se encarga de realizar las acciones configuradas en los anteriores archivos, como por ejemplo ejecutar el apagado del servidor en caso de que estemos bajos de batería o notificar en el syslog los diferentes eventos que están ocurriendo en el SAI. La ruta de este archivo (que es fundamental para una buena configuración) está en /bin/upssched-cmd, procedemos a editarlo con nuestro editor de archivos favorito con el siguiente contenido:
Archivo upssched-cmd
sudo nano upssched-cmd
Añadimos:
#!/bin/sh
case "${NOTIFYTYPE}" in
ONLINE)
_notifymessage="UPS ${UPSNAME} - Equipo funcionando con la luz electrica";
echo ${_notifymessage} | mail -s "SAI"
ONBATT)
_notifymessage="UPS ${UPSNAME} - Corte en el suministro electrico, el sistema funciona con bateria. CUIDADO";
echo ${_notifymessage} | mail -s "SAI"
LOWBATT)
_notifymessage="UPS ${UPSNAME} - Bateria baja";
echo ${_notifymessage} | mail -s "SAI"
FSD)
_notifymessage="UPS ${UPSNAME}: - Forzando el apagado del equipo";
echo ${_notifymessage} | mail -s "SAI"
COMMOK)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha establecido correctamente";
echo ${_notifymessage} | mail -s "SAI"
COMMBAD)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha PERDIDO, ERROR.";
echo ${_notifymessage} | mail -s "SAI"
upsdrvctl start salicru;;
SHUTDOWN)
_notifymessage="Finalizando sesion y apagando el equipo.";
echo ${_notifymessage} | mail -s "SAI"
REPLBATT)
_notifymessage="UPS ${UPSNAME} - The battery needs to be replaced!";
echo ${_notifymessage} | mail -s "SAI"
NOCOMM)
_notifymessage="UPS ${UPSNAME} - El UPS no esta disponible";
echo ${_notifymessage} | mail -s "SAI"
upsdrvctl start salicru;;
NOPARENT)
_notifymessage="No se puede apagar automaticamente el servidor, se necesita
intervencion del administrador.";
echo ${_notifymessage} | mail -s "SAI"
esac
case "${1}" in
shutdown-warning)
_message="${_notifymessage}.
Apagado inminente en ${_shutdowntimer} segundos.";;
shutdown)
_message="${_notifymessage}.
Se inicia el apagado del equipo.";
shutdown -p now ${_message};;
resume)
_message="${_notifymessage}.
Apagado cancelado.";;
forced-shutdown)
_message="${_notifymessage}.
Apagado forzado inminente en 100 minutos.";
shutdown -h 100;;
notify)
_message="${_notifymessage}";;
*)
_message="Unknown command: ${1}";
esac
# Write message to syslo
logger -t upssched-cmd "${_message}"
Comprobar funcionamiento y mirar logs Después de realizar estas acciones, es recomendable reiniciar el sistema operativo para comprobar que todo funciona correctamente. Hay un comando muy útil para comprobar si los drivers y el sistema en Raspbian funcionan correctamente:
Añadimos:
upsdrvctl start salicru
Todos los logs se guardan en syslog, por tanto podemos hacer un simple tail para obtener las últimas líneas de información del sistema para detectar problemas en el arranque u otros avisos:
tail /var/log/syslog
Como habéis podido observar en este último archivo de configuración, hemos utilizado el servidor SMTP que hemos instalado en Raspbian para enviar los avisos por email.
Para ver como se configura, picha aquí...
Si usamos clientes de NUT en los ordenadores esclavos como por ejemplo WinNUT, podremos leer el estado del SAI y apagar los diferentes ordenadores. Esta configuración que os proponemos, la hemos probado y funciona correctamente, no obstante, es posible que tengáis algún tipo de problema por los drivers u otros motivos, os invitamos a ponernos un comentario si tenéis problemas e intentaremos echaros una mano.