Nut se encuentra disponible en los repositorios de paquetes de Ubuntu. Para instalarlo ejecutamos el siguiente comando
sudo apt-get install nut
Luego, debemos comprobar que se ha creado el usuario y grupo nut
sudo id nut
uid=108(nut) gid=119(nut) groups=119(nut)
Modificar el fichero /etc/nut/ups.conf, que define el driver para conectarse a la UPS y la directivas de seguridad a aplicar.
Nut ofrece en su página oficial un listado con los drivers que se deben utilizar para la mayoría de las UPSs aquí. En el caso de que nuestro modelo no se encontrase en la lista probar con el driver de un modelo similar.
Nut ofrece en su página oficial un listado con los drivers que se deben utilizar para la mayoría de las UPSs aquí. En el caso de que nuestro modelo no se encontrase en la lista probar con el driver de un modelo similar.
sudo nano /etc/nut/nut.conf
En mi caso, que la UPS es una Liebert PowerSure Proactive 1000, añado las siguientes lineas al archivo
[liebert]
driver = usbhid-ups
port = auto
desc = "UPS en Servidor X"
driver = usbhid-ups
port = auto
desc = "UPS en Servidor X"
Recargar la configuración de acceso a los dispositivos USB
sudo udevadm control --reload-rules
sudo udevadm trigger
Ahora si ejecutamos
tendremos que ver algo como
Network UPS Tools - UPS driver controller 2.6.4
Network UPS Tools - Generic HID driver 0.37 (2.6.4)
USB communication driver 0.32
Using subdriver: Belkin HID 0.15
El siguiente paso es configurar los servicios upsd y upsmon. El primero se comunica con upsdrvctl y actúa como servidor, mientras que el segundo se comunica con upsd y se encarga de monitorizar el estado de la UPS y apagar la máquina cuando se recibe un evento de perdida de luz.
Nuestra UPS sólo puede notificar la pérdida de luz a una única máquina (master) pero en cambio varias máquinas pueden estar conectadas a la UPS (slaves). Por tanto tiene que haber alguna forma de que las máquinas esclavas tengan conocimiento de la pérdida de luz.
En /etc/nut/upsd.conf indicamos sobre que interfaz y puerto esta escuchando el servicio. Por defecto, upsd, esta escuchando en el puerto 3493 del interfaz local. Como en nuestro caso no tenemos que dar un servicio remoto a otras máquinas no tocaremos nada de este fichero.
A parte del puerto de escucha también hay que configurar los usuarios y permisos para acceder a él (/etc/nut/upsd.user).
sudo nano /etc/nut/upsd.users
[root]
password=t3st
actions = SET
instcmds = ALL
[upsmon]
password=pass
upsmon master
upsmon slave
En este caso hemos creado un usuario root con todos los permisos de acceso y un usuario upsmon que será utilizado por el servicio upsmon para acceder como master o slave.
A continuación nos toca configurar upsmon (/etc/nut/upsmon.conf). De todas las opciones posibles sólo vamos a destacar las tres más importantes:
sudo nano /etc/nut/upsd.users
[root]
password=t3st
actions = SET
instcmds = ALL
[upsmon]
password=pass
upsmon master
upsmon slave
En este caso hemos creado un usuario root con todos los permisos de acceso y un usuario upsmon que será utilizado por el servicio upsmon para acceder como master o slave.
A continuación nos toca configurar upsmon (/etc/nut/upsmon.conf). De todas las opciones posibles sólo vamos a destacar las tres más importantes:
sudo nano /etc/nut/upsmon.conf
agregar la siguiente configuración
MONITOR liebert@localhost 1 upsmon pass 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
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
Configurar los servicios para que inicien cuando arranque la máquina. Creamos un fichero /etc/default/nut
sudo nano /etc/default/nut
START_UPSD=yes
START_UPSMON=yes
y editamos /etc/nut/nut.conf
START_UPSMON=yes
y editamos /etc/nut/nut.conf
sudo nano /etc/nut/nut.conf
MODE=standalone
En este caso estamos configurando Nut para que upsd sólo acepte conexiones locales. Si estuviéramos en un entorno con máquinas esclavas (upsmon slave) este modo no serviría y el correcto sería netserver.
En este caso estamos configurando Nut para que upsd sólo acepte conexiones locales. Si estuviéramos en un entorno con máquinas esclavas (upsmon slave) este modo no serviría y el correcto sería netserver.
Modificar el archivo upssched.conf
sudo nano /etc/nut/upssched.conf
y agregar lo siguiente
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
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
Hay un archivo 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.
sudo nano /bin/upssched-cmd
#!/bin/sh
case "${NOTIFYTYPE}" in
ONLINE)
_notifymessage="UPS ${UPSNAME} - Equipo funcionando con la luz electrica";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
ONBATT)
_notifymessage="UPS ${UPSNAME} - Corte en el suministro electrico, el sistema funciona con bateria. CUIDADO";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
LOWBATT)
_notifymessage="UPS ${UPSNAME} - Bateria baja";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
FSD)
_notifymessage="UPS ${UPSNAME}: - Forzando el apagado del equipo";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
COMMOK)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha establecido correctamente";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
COMMBAD)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha PERDIDO, ERROR.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;
upsdrvctl start salicru;;
SHUTDOWN)
_notifymessage="Finalizando sesion y apagando el equipo.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
REPLBATT)
_notifymessage="UPS ${UPSNAME} - The battery needs to be replaced!";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
NOCOMM)
_notifymessage="UPS ${UPSNAME} - El UPS no esta disponible";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;
upsdrvctl start salicru;;
NOPARENT)
_notifymessage="No se puede apagar automaticamente el servidor, se necesita
intervencion del administrador.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
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}"
case "${NOTIFYTYPE}" in
ONLINE)
_notifymessage="UPS ${UPSNAME} - Equipo funcionando con la luz electrica";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
ONBATT)
_notifymessage="UPS ${UPSNAME} - Corte en el suministro electrico, el sistema funciona con bateria. CUIDADO";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
LOWBATT)
_notifymessage="UPS ${UPSNAME} - Bateria baja";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
FSD)
_notifymessage="UPS ${UPSNAME}: - Forzando el apagado del equipo";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
COMMOK)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha establecido correctamente";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
COMMBAD)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha PERDIDO, ERROR.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;
upsdrvctl start salicru;;
SHUTDOWN)
_notifymessage="Finalizando sesion y apagando el equipo.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
REPLBATT)
_notifymessage="UPS ${UPSNAME} - The battery needs to be replaced!";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
NOCOMM)
_notifymessage="UPS ${UPSNAME} - El UPS no esta disponible";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;
upsdrvctl start salicru;;
NOPARENT)
_notifymessage="No se puede apagar automaticamente el servidor, se necesita
intervencion del administrador.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
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}"
Correr los siguientes comandos para recargar la configuracion
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo upsdrvctl stop
sudo upsdrvctl start
sudo /etc/init.d/ups-monitor start
Reiniciar el equipo
sudo reboot
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:
sudo tail /var/log/syslog
Hay un archivo 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.ivo 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:
- See more at: http://www.redeszone.net/raspberry-pi/como-configurar-nut-network-ups-tools-en-raspbian-para-controlar-un-sai/#sthash.i8qh08Kz.dpuf
- See more at: http://www.redeszone.net/raspberry-pi/como-configurar-nut-network-ups-tools-en-raspbian-para-controlar-un-sai/#sthash.i8qh08Kz.dpuf
Muy buen tutorial, sencillo, conciso y completo, aunque como norma de cortesía es bueno dar reconocimiento a quien nos ayudó a obtener la información que transmitimos, en este caso aquí hay unos enlaces cuyo contenido se asemeja a este:
ResponderBorrarhttps://www.adictosaltrabajo.com/tutoriales/nut/ y
https://www.adictosaltrabajo.com/tutoriales/nut-events/
por cierto ambos escritos en 2011. Saludos.