Configuración de monitorización con NUT para el SAI Yukai/Mustek PowerMust 400/600/800VA


Table of Contents
1. Copyleft 2003 debianitas.net
2. Introducción
3. Preparación inicial
3.1. Descarga de las fuentes de NUT
3.2. Descarga del parche para el driver del SAI Mustek PowerMust
4. Configuración de las Network UPS Tools (herramientas de red para SAI)
4.1. Preparación para la compilación
4.2. Compilación e instalación
4.3. Configuración de los demonios
4.3.1. Script de inicio de demonios
4.3.2. Ficheros de configuración del driver y los demonios de control
5. Inicio del sistema de control del SAI
6. Referencias adicionales

1. Copyleft 2003 debianitas.net

Juan Manuel Victoria Martínez aka "ErGoN"

Se puede copiar, modificar o distribuir este manual bajo las condiciones de la licencia GNU General Public License ( GNU GPL )

Si se desea hacer una copia total o parcial del documento se deberá adjuntar debidamente la identidad del autor así como la dirección www.debianitas.net en las partes superior e inferior del manual.

El autor no se hace responsable de los daños producidos por la libre aplicación de la información contenida en este documento.

www.debianitas.net Copyleft 2003 ErGoN ergon@debianitas.net


2. Introducción

En este manual trataré de exponer el método de configuración de la monitorización del SAI (sistema de alimentación ininterrumpida) de la marca Yukai (antiguamente Mustek), modelo PowerMust mediante las Network UPS Tools (NUT) a través del cable serie (RS-232) correctamente conectado entre el SAI y el puerto serie de un equipo con linux que hará de controlador.

En el momento de la realización de este manual, la versión estable de NUT es la 1.4.0 y los parches necesarios que aplicaremos posteriormente para la generación del driver para el SAI de Mustek deben tener en cuenta la versión, por lo que usaremos el parche para la versión 1.4.0.


3. Preparación inicial


3.1. Descarga de las fuentes de NUT

Podemos descargar el paquete necesario desde la URL: http://penguin.harrison.k12.co.us/mirrors/nut/release/1.4/nut-1.4.0.tar.gz

Descomprimimos el contenido del paquete descargado y lo dejamos preparado para compilar más adelante:

# wget -t 0 -c http://penguin.harrison.k12.co.us/mirrors/nut/release/1.4/nut-1.4.0.tar.gz
# cd /usr/src
# tar xzvf /donde/hemos/descargado/nut-1.4.0.tar.gz


3.2. Descarga del parche para el driver del SAI Mustek PowerMust

Podemos descargar el paquete necesario desde la URL: http://students.fct.unl.pt/~cer09566/nut/index.html

En nuestro caso el link directo para la descarga será http://students.fct.unl.pt/~cer09566/nut/files/nut-1.4.0-powermust0.2.patch

# wget -t -0 -c http://students.fct.unl.pt/~cer09566/nut/files/nut-1.4.0-powermust0.2.patch
# cd /usr/src/nut-1.4.0
# patch -p 1 < /donde/hemos/descargado/nut-1.4.0-powermust0.2.patch

Con esto ya tenemos el paquete NUT preparado para configurar y compilar.


4. Configuración de las Network UPS Tools (herramientas de red para SAI)


4.1. Preparación para la compilación

Usaremos la herramienta configure distribuida con las fuentes de NUT para establecer las opciones necesarias para la compilación:

# cd /usr/src/nut-1.4.0
# ./configure --with-user=nut --prefix=/opt

En nuestro caso realizaremos la instalación de las herramientas generadas bajo /opt.

El parámetro --with-user es necesario para seleccionar el usuario de sistema que ejecutará tanto el demonio de red (upsd) como el demonio de monitorización (upsmon) y el demonio de comunicación con el SAI a través del puerto serie (powermust).

Recomiendo seleccionar el usuario nut, ya que por defecto será éste el que se cree en el proceso de instalación de las herramientas tras la compilación.


4.2. Compilación e instalación

Realizaremos los siguientes pasos:

# cd /usr/src/nut-1.4.0
# make
# make install

Si todo ha ido bien, podremos localizar los demonios instalados bajo /opt/sbin, así como los drivers para los distintos SAI que las NUT soportan más el driver necesario para el SAI PowerMust bajo el directorio /opt/bin.

Los demonios de NUT, usarán por defecto el directorio de configuración /opt/etc.

Comprobamos si disponemos del usuario y grupo de sistema nut, en caso contrario procedemos a crearlos:

# adduser --shell /bin/false --no-create-home --disabled-password nut

Para la comunicación entre el demonio de red y el demonio de acceso al SAI se usará el directorio /var/state/ups. Por lo que procederemos a crearlo y asignarle dueño y permisos necesarios (comprobamos previamente que el usuario y el grupo nut han sido creados):

# make -p /var/state/ups
# chown nut:nut /var/state/ups
# chmod 700 /var/state/ups

Así mismo, necesitaremos que el usuario nut tenga acceso al puerto serie, para ello bastará con añadirle al grupo dialout.

# adduser nut dialout

4.3. Configuración de los demonios


4.3.1. Script de inicio de demonios

Este script sera necesario para lanzar los demonios al inicio del sistema en el orden adecuado, o pararlos/reiniciarlos en caso de que sea necesario.

El contenido del fichero /etc/init.d/nut sería el siguiente:

#! /bin/sh
#
# nut - Script to start and stop Network UPS Tools daemons

PATH=/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin
NAME=nut
DESC="Network UPS Tools"
DEFAULT=/etc/default/nut

[ -f $DEFAULT ] || exit 0
. $DEFAULT

upsmon_pid=/var/state/ups/upsmon.pid
upsmon=/opt/sbin/upsmon
upsd_pid=/var/state/ups/upsd.pid
upsd=/opt/sbin/upsd
log=">/dev/null 2>/dev/null"

start_stop_server () {
  case "$START_UPSD" in
    y|Y|yes|YES|Yes)
      case "$1" in
        start)
          /opt/bin/upsdrvctl start >/dev/null 2>&1
          start-stop-daemon -S -q -p $upsd_pid -x $upsd >/dev/null 2>&1
          ;;
        stop)
          start-stop-daemon -K -o -q -p $upsd_pid -n upsd >/dev/null 2>&1
          /opt/bin/upsdrvctl stop >/dev/null 2>&1
          ;;
      esac
      ;;
    n|N|no|NO|No|*)
      return 1
      ;;
  esac
}

start_stop_client () {
  case "$START_UPSMON" in
    y|Y|yes|YES|Yes)
      case "$1" in
        start)
          start-stop-daemon -S -q -p $upsmon_pid -x $upsmon >/dev/null 2>&1
          ;;
        stop)
          start-stop-daemon -K -o -q -p $upsmon_pid -n upsmon >/dev/null 2>&1
          ;;
      esac
      ;;
    n|N|no|NO|No|*)
      return 1
      ;;
  esac
}

case "$1" in

  start)
    echo -n "Starting $DESC:"
    start_stop_server start && echo -n " upsd"
    start_stop_client start && echo -n " upsmon"
    echo "."
    ;;

  stop)
    echo -n "Stopping $DESC:"
    start_stop_server stop && echo -n " upsd"
    start_stop_client stop && echo -n " upsmon"
    echo "."
    ;;

  reload)
    $upsd   -c reload >/dev/null 2>&1
    $upsmon -c reload >/dev/null 2>&1
    ;;

  restart|force-reload)
    echo -n "Restarting $DESC:"
    start_stop_client stop
    start_stop_server stop
    sleep 5
    start_stop_server start && echo -n " upsd"
    start_stop_client start && echo -n " upsmon"
    echo "."
    ;;

  poweroff)
    flag=`sed -ne 's#^ *POWERDOWNFLAG *\(.*\)$#\1#p' /etc/nut/upsmon.conf`
    [ -f $flag ] && echo "Shutting down the UPS ..."
    sleep 5
    [ -f $flag ] && /opt/bin/upsdrvctl shutdown
    ;;

  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|reload|restart|force-reload|poweroff}" >&2
    exit 1
    ;;

esac

exit 0

Si deseamos que el sistema de monitorización del SAI se ejecute al iniciar el sistema bastará con ejecutar:

# update.rc-d nut defaults

Finalmente, solo nos queda preparar los ficheros de configuración necesarios para el correcto funcionamiento de los demonios de gestión del SAI.


4.3.2. Ficheros de configuración del driver y los demonios de control

Para el inicio de los servicios, será necesario configurar previamente:

  • /opt/etc/ups.conf : Configuración del driver

  • /opt/etc/upsd.conf : Configuración del demonio de red

  • /opt/etc/upsd.users : Configuración del acceso al demonio de red

  • /opt/etc/upsmon.conf : Configuración del demonio de monitorización y avisos

Una vez creados los fichero deberemos asignarles los permisos necesarios para que el usuario nut pueda acceder a ellos:

# chown nut:nut /opt/etc/ups*
# chmod 600 /opt/etc/ups*

4.3.2.1. ups.conf

El contenido del fichero será el siguiente, en caso de que nuestro SAI este conectado por el puerto serie COM1:

[powermust]
        driver = powermust
        port = /dev/ttyS0
        desc = "Power Mustek SAI"

NT: El COM2 sería ttyS1 y así sucesivamente. Si no sabemos en que puerto serie hemos conectado nuestro SAI hemos de consultar la documentación de nuestra placa madre, donde vendrá claramente indicado.


4.3.2.2. upsd.conf

Debemos definir las IP's de nuestra red (o externas) desde las que permitiremos el acceso al demonio upsd para la consulta del estado del SAI.

En este caso permitiremos el acceso desde la IP de loopback (localhost) y cualquier equipo de nuestra red interna (denominada "lab").

La configuración quedaría de la siguiente manera:

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

ACCESS grant monitor localhost
ACCESS grant monitor lab
ACCESS deny all all


4.3.2.3. upsd.users

El usuario y password que usaremos en el demonio de monitorización para el acceso al estado del SAI lo definiremos en este fichero.

En este ejemplo definiremos el acceso para el usuario "poweradmin" con password "secreto":

[poweradmin]
    password    = secreto
    allowfrom   = localhost lab
    actions     = SET
    instcmds    = ALL
    upsmon master

En este caso hemos dado acceso total para el control de SAI al usuario poweradmin. Para ver la lista de opciones disponibles y el uso de cada una de ellas puedes consultar el fichero de configuración de ejemplo que instalamos por defecto /opt/etc/upsd.users.sample así como la documentación adicional disponible bajo el directorio de las fuentes de NUT (/usr/src/nut-1.4.0).


4.3.2.4. upsmon.conf

Finalmente configuramos el demonio de monitorización para el control del SAI y las respuestas automáticas:

MONITOR powermust@localhost 1 poweradmin secreto 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

Como podrás observar, en la línea principal del fichero definimos el acceso al SAI que definimos en el punto 4.3.2.1 especificando la maquina en la que se encuentra lanzado (en este caso el control es local, por lo tanto la maquina podrá ser localhost o bien el nombre de la máquina), seguido del numero de SAI's conectados al sistema, el nombre del usuario, el password y el tipo de monitorización.

Es posible personalizar el tipo de avisos, los mensajes de avisos y el resto de parámetros a gusto del administrador. Para ello recomiendo que se eche un vistazo al fichero de ejemplo /opt/etc/upsmon.conf.sample instalado por defecto tras compilar.


5. Inicio del sistema de control del SAI

Una vez en este punto, ya tenemos correctamente instalado y configurado todo lo necesario para gestionar automáticamente los avisos que el SAI puede transmitir vía conexión serie a nuestra máquina. Procederemos a iniciar los servicios:

# /etc/init.d/nut start

Podemos comprobar si todo ha iniciado correctamente visualizando el contenido del log de sistema, donde también quedarán reflejados los diferentes sucesos que configuramos previamente en el punto 4.3.2.4 (opciones de NOTIFYFLAG con SYSLOG).

# less /var/log/syslog

6. Referencias adicionales

Si quieres información adicional sobre el proceso de configuración de NUT, proceso de configuración de plugins para monitorización remota, y otras herramientas consulta alguna de las siguientes direcciones: