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
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.
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
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.
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.
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
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.
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*
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.
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
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).
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.
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
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:
Gkrellm Belkin UPS monitor plugin: http://www.starforge.co.uk/gkrellm/gkrellmbups.shtml
Gkrellm plugins (ver plugins para monitorización de SAI a través de NUT): http://web.wt.net/~billw/gkrellm/Plugins.html
Network UPS Tools: http://www.exploits.org/nut/
Mustek PowerMust UPS driver for NUT: http://students.fct.unl.pt/~cer09566/nut/index.html