msgbartop
Ph´nglui mglw´nafh Cthulhu R´lyeh wgah´nagl fhtagn
msgbarbottom

21 abr 07 Monitorización de un SAI en Debian GNU/Linux

Esta mañana he instalado un SAI en mi servidor casero, debido a los continuos cortes de corriente que se vienen sufriendo en mi casa desde un tiempo a esta parte. El modelo elegido ha sido un Yukai PowerMust 600+ Serial/USB.

En líneas generales, un SAI (sistema de alimentación ininterrumpida) es un dispositivo que permite mantener la alimentación de dispositivos electrónicos (en este caso, un PC) cuando hay un corte en la corriente eléctrica, durante un período variable en función de las baterías con las que vaya equipado el SAI, pero que suele rondar el cuarto de hora-media hora, más que suficiente para que vuelva la luz o alguien vuelva a poner los plomos en su sitio. Además el SAI actua como estabilizador de corriente, protegiendo al PC de las variaciones en el suministro (lo que se suele conocer como “la chispa adecuada” -adecuada para achicharrarte el equipo-).

Eso ya de por sí estaría bien, pero puestos a llevar la situación al extremo, podría suceder que el apagón tuviera una duración mayor del tiempo que el SAI es capaz de suministrar energía, o que no hubiera nadie para volver a dar los plomos. El corte indeseado de corriente se produciría igualmente, pero con una cierta demora. Sin embargo, los SAIs vienen equipados con un puerto de comunicación (generalmente serie o USB) que permite al ordenador saber cuándo la batería del SAI está llegando a un nivel crítico, y apagarse de manera automática. Pues bien, Linux extá preparado para llevar a cabo este proceso, en concreto haciendo uso de NUT (Network UPS Tools).

Para configurar la monitorización de un SAI en Debian el procedimiento a seguir sería el siguiente:

Instalación de NUT

En Debian es tan simple como instalar NUT mediante apt-get:

$ apt-get install nut

Los repositorios oficiales de Debian contienen todos los paquetes necesarios para realizar la instalación, por lo que no es necesario realizar ninguna configuración adicional.

Instalación de paquetes auxiliares

Puede ser necesario realizar una instalación de paquetes auxilares. Estos paquetes son los siguientes:

  • nut-usb: Necesario si el SAI sólo tiene conexión USB (el Yukai dispone de puerto serie y USB; yo he elegido utilizar el puerto serie para tener un puerto USB más disponible)
  • nut-snmp: Necesario si se necesita un driver SNMP para monitorizar el SAI en red local
  • nut-cgi: Este paquete ofrece una interfaz web, programada en CGI, para monitorizar el SAI desde un navegador web
  • knutclient: Este paquete proporciona una aplicación cliente de KDE para monitorizar el SAI

Configuración de NUT

Una vez realizado el proceso de instalación mediante apt-get, es preciso realizar la configuración de NUT para que reconozca nuestro SAI. En primer lugar, es preciso editar el archivo /etc/default/nut para hacer que los demonios de NUT se inicien de manera automática. El contenido del archivo debe ser el siguiente:

# start upsd
START_UPSD=yes

# start upsmon
START_UPSMON=yes

Una vez hecho esto, es preciso añadir el usuario nut al grupo dialout, propietario de los puertos serie:

$ adduser nut dialout

A continuación hay que configurar el controlador de nut. Los archivos de configuración del controlador deben encontrarse en el directorio /etc/nut. Sin embargo, la instalación de apt-get crea el directorio, pero no incluye por defecto ningún archivo en el directorio, siendo preciso copiarlos desde el directorio /usr/share/doc/nut/examples/:

$ cp /usr/share/doc/nut/examples/*.conf /etc/nut
$ cp /usr/share/doc/nut/examples/*.users /etc/nut

En primer lugar ha de editarse el archivo /etc/nut/ups.conf. Su contenido ha de ser el siguiente:

[misai]
driver = powermust
port = /dev/ttyS0

La primera línea designa el nombre que vamos a dar a nuestro SAI. La segunda indica a NUT el driver a usar para comunicarse con nuestro SAI, y la tercera indica qué puerto de comunicación a usar (en este caso, el primer puerto serie -COM1-).

En segundo lugar ha de configurarse el archivo /etc/nut/upsd.conf, que indica las máquinas con permisos para acceder al demonio upsd. Un ejemplo de configuración sería el siguiente:

ACL localhost 127.0.0.1/32
ACL local_network 192.168.0.0/24
ACL all 0.0.0.0/0

ACCEPT monitor localhost
ACCEPT local_network
REJECT all all

Con esta configuración se está indicando que se permita el acceso al demonio al equipo local, así como a aquellos equipos que pertenezcan a la red local (siendo las direcciones de la red 192.168.0.xxx), y que rechace al resto de equipos.

En tercer lugar se ha de indicar en el archivo /etc/nut/upsd.users qué usuarios tienen permisos para acceder al sistema de control de NUT, así como los permisos que tiene cada usuario. Un ejemplo de contenido sería el siguiente:

[admin]
password = passwordadmin
allowfrom = localhost local_network
actions = SET
instcmds = ALL

[control]
password = passwordcontrol
allowfrom = localhost
upsmon master

[clientes]
password = passwordclientes
allowfrom = local_network
upsmon slave

El código entre corchetes indica el nombre del usuario creado; la línea password especifica la contraseña del usuario, la línea allowfrom indica desde dónde (definido en el archivo /etc/nut/upsd.conf) se puede conectar ese usuario. La línea actions define las acciones que ese usuario puede realizar, la línea instcmds define los comandos que pueden ser usados por el usuario, por último, la línea upsmon master define que ese usuario será el controlador del servidor, y upsmon slave será el controlador remoto.

Por último, se ha de configurar el archivo /etc/nut/upsmon.conf, que controla el acceso al monitor NUT del SAI. Un ejemplo de archivo sería el siguiente:

MONITOR misai@localhost 1 control passwordcontrol master
RUN_AS_USER nut
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

NOTIFYMSG ONLINE "UPS: Normal state"
NOTIFYMSG ONBATT "UPS: Cable communication error"
NOTIFYMSG LOWBATT "UPS: Battery low"
NOTIFYMSG FSD "UPS: Starting shutdown"
NOTIFYMSG COMMOK "UPS: Communication restored"
NOTIFYMSG COMMBAD "UPS: Communication lose"
NOTIFYMSG SHUTDOWN "UPS: Shutting down"
NOTIFYMSG REPLBATT "UPS: Replace battery"
NOTIFYFLAG ONLINE SYSLOG
NOTIFYFLAG ONBATT SYSLOG+WALL
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG FSD SYSLOG+WALL
NOTIFYFLAG COMMOK SYSLOG
NOTIFYFLAG COMMBAD SYSLOG
NOTIFYFLAG SHUTDOWN SYSLOG
NOTIFYFLAG REPLBATT SYSLOG

RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

Nótese que en en este archivo la línea MONITOR especifica que queremos monitorizar el SAI llamado misai, conectado a la máquina localhost (localmente), que tiene 1 batería, el usuario es control, nuestro password es passwordcontrol y estamos en modo master. Por otro lado, el archivo permite configurar el comando de apagado, los mensajes de aviso del estado del SAI.

Por último, se ha de iniciar el servidor mediante el siguiente comando:

$ /etc/init.d/nut restart

Se puede monitorizar el SAI desde línea de comandos:

$ upsc misai@localhost

Monitorización remota mediante servicio web

Una posibilidad bastante interesante que soporta NUT es la monitorización del SAI mediante servicio web. Para ello provee de un script CGI que permite acceder al estado del SAI haciendo uso de un navegador.

En primer lugar, ha de instalarse el paquete nut-cgi mediante apt-get:

$ apt-get install nut-cgi

Este comando instala el paquete, así como los scripts cgi en el directorio por defecto de instalación de ficheros cgi-bin de nuestro servidor web (con apache, /usr/lib/cgi-bin).

En segundo lugar es preciso crear los archivos de configuración de nut-cgi. Como en el caso anterior, la instalación por defecto no copia estos archivos en el directorio de nut, por lo que es preciso copiarlos desde /usr/share/doc/nut-cgi/examples/:

$ cp /usr/share/doc/nut-cgi/examples/*.* /etc/nut

Una vez hecho esto, se ha de editar el archivo hosts.conf para indicar a qué SAIs se quiere permitir el acceso desde el servicio web. Un ejemplo de contenido sería el siguiente:

MONITOR misai@localhost "Yukai Powermust 600+"

Por último, se ha de editar el archivo /etc/nut/upsset.conf para indicar desde qué equipos puede accederse al script cgi. Un ejemplo de contenido sería el siguiente:

<Files upsset.cgi>
deny from all
allow from 192.168.0.0
</Files>

De esta manera, estamos indicando que sólo puede accederse desde los equipos pertenecientes a la red local.

Para acceder al scritp, hemos de entrar en la siguiente dirección desde nuestro navegador favorito:

http://IP/cgi-bin/nut/upsstats.cgi

Las pantallas de monitorización serían como las siguientes:

Pantalla inicial de nut-cgi
Pantalla inicial de nut-cgi

Monitorización del SAI
Monitorización del SAI

Monitorización mediante knutclient

knutclient es una aplicación cliente de KDE que permite monitorizar el SAI. Su instalación sería de nuevo con apt-get:

$ apt-get install knutclient

Una vez instalado, hay que configurar el programa para acceder al SAI, indicando la dirección del SAI, el nombre, el usuario y la contraseña.

Configuración de KNutClient

Puede apreciarse que se puede escoger qué valores a montrar por la aplicación.

La ventana principal de la aplicación, donde se muestran los valores monitorizados, sería la siguiente:

Interfaz de KNutClient

Documentación de referencia

VN:F [1.9.20_1166]
Rating: 10.0/10 (1 vote cast)
Monitorización de un SAI en Debian GNU/Linux, 10.0 out of 10 based on 1 rating
Comparte este artículo:
  • Twitter
  • Facebook
  • email
  • StumbleUpon
  • Delicious
  • Google Reader
  • LinkedIn
  • BlinkList

Comentarios de los lectores

  1. |

    Buen manual, llevaba tiempo buscando una explicación así. Ahora voy a ver si consigo conectar el SAI por usb.

    Un saludo

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    Responder a este comentario
  2. |

    [...] Fusilado de: http://www.eniac2000.com/?p=608 [...]

    Responder a este comentario
  3. |

    Muchas gracias!
    La verdad es que me he dado una vuelta por la web y he visto las etapas del camino de santiagao y las etapas en bici.
    Me pasaré a leer de vez en cuando. Gracias por lo del SAI en Linux.
    Un saludo amigo!

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    Responder a este comentario

Deje un comentario







5 + = doce