¿Cómo puedo controlar un UPS a través de Ubuntu?

Durante la década de 1960 era usual que Juan Perón recibiera visitantes y delegaciones en la Quinta 17 de Octubre, en Puerta de Hierro. El Conductor realizaba apreciaciones sobre la situación política de la Argentina y respondía interrogantes de los presentes. Aquejados por una interrupción eléctrico y sobrecarga que afectó un servidor, los enviados interrogan al Conductor del Justicialismo cómo evaluar el estado de una unidad UPS y hacer que un servidor se apague automáticamente cuando se corta el suministro eléctrico desde Ubuntu.


(...)
Bueno, indudablemente la intercomunicación de sistemas informáticos ha dado a la creación de redes, cuya topología puede variar desde la simple y llana "punto-punto" hasta complejísimas estructuras basadas en el modelo "cliente-servidor". Eso lo han dicho todos. Naturalmente que, como a los niños y a los ancianos, un servidor de computación es un valor crítico, al que debemos proteger y primordiar. Y ello no lo han dicho todos, lo ha dicho el Justicialismo.

Los usos de estas máquinas son tan variados que describir el almacenamiento centralizado del trabajo, los respaldos de datos y ejecución de tareas específicas para éstos, así como su uso en comunicaciones, compartir contenidos, creación y control de música y video, su accionar en juegos, etc, sólo pondría de manifiesto una ínfima parte de las mejoras que los servidores traen a la vida del hombre.

Durante diez años dimos todo por los servidores y también por los clientes de dichos equipos. A más de uno se le ocurrió por ello decirnos que manejamos un "clientelismo".
Pero estos logros no sólo han de reivindicarse, han de comprenderse y sobre todo, han de cuidarse. Normalmente un servidor - como cualquier PC - no debe apagarse "a lo vikingo" con su interruptor de alimentación, pues de esta manera se perderá inexorablemente la información de trabajo almacenada en los bancos de memoria (que es de tipo temporal), y en tal caso también existiría un alto riesgo de perder información del sistema y usuario. Sumemos la probabilidad de dañar físicamente los medios de almacenamiento magnéticos, y nos encontraremos ante una noxa que debemos por todos los medios evitar. El procedimiento correcto de apagado consiste entonces en iniciar una secuencia de apagado automatizada, que podremos disparar a través del comando Apagar sistema del sistema operativo que utilicemos. Esta rutina asegurará que el estado de bienestar del equipo resguarda la consabida información en la manera que es adecuada hacerlo.

En el caso del un sistema GNU con Linux, esta rutina de apagado puede hacerse desde el escritorio gráfico por quien posea privilegios de Conductor ("root"), o - más comúnmente - desde una terminal de texto, por medio del comando:

sudo poweroff

Pues bien señores, esto responde a las condiciones operativas convencionales. Pero como en todo en la vida, existen los imponderables.

Un corte de suministro eléctrico es un evento que - por indeseado - no deja de ser corriente. Naturalmente, los cortes y sobrevoltajes interrumpirán la tarea del servidor en el mejor de los casos, y podrían ponerlo en peligro de daños severos en otros, incluso llegando a destruirlo.

En la política, tenemos personajes que pueden saltar, y no son acróbatas. Se llaman ministros. La informática copia de estas sabias estructuras por necesidad. Existen entonces dispositivos acondicionadores de voltaje - estabilizadores - especialmente logrados para el uso con equipos sensibles, incluso sistemas de computación.

Estos aparatos se encargan de atresar los voltios, y cuentan con un fusible capaz de actuar en momentos de sobrecarga crítica. En los modelos más avanzados contarán accesoriamente con filtros para línea telefónica y con cargadorer para dispositivos alimentados por USB. Os recomiendo el uso de estos dispositivos para cada PC a fin de proteger su fuentes conmutadas de tensión. Los estabilizadores de 500w pueden considerarse el menor tenor a utilizar en una computadora y su monitor LCD, y hasta los 2000w para afianzar  equipos de alta performance.

Pues bien. He dicho que en la política existen condiciones superadoras, y en el caso de los acondicionadores eléctricos tendremos de estas ventajas en los UPS (fuente de potencia ininterrumpida). Como su nombre indica, estos aparatos más avanzados consisten en una fuente de alimentación de emergencia a baterías, capaz de proveer temporalmente con su energía almacenada a otro dispositivo en caso de una interrupción o fluctuación del suministro normal.
Normalmente la capacidad de las baterías de un UPS hogareño o de oficina no alcanza para reemplazar ininterrumpidamente el suministro de la red eléctrica, sino que proveen unos imprescindibles minutos de alimentación que vendrán de perillas al permitirle al operador salvaguardar la información de trabajo y apagar/hibernar el sistema como se debe. En situaciones críticas, este período permitiría encender otras fuentes de alimentación de respaldo o emergencia (un grupo electrógeno, por ejemplo), que sí permitirían la operación ininterrumpida del sistema.

Los UPS modernos cuentan con una interfaz de comunicación y control que permiten al usuario saber en qué condiciones se encuentra el UPS. Antiguamente se utilizaba el veterano protocolo serial Centronics difundido en equipos de gama industrial, pero actualmente esta interfaz está siendo progresivamente reemplazada por el protocolo universal USB. Sobre este particular me han preguntado: ¿cómo evaluar el estado de una unidad UPS y hacer que un servidor se apague automáticamente cuando se corta el suministro eléctrico?.

La realización que debemos llevar a cabo bien puede constituirse en un caso de estudio, pues me han dicho que desean proteger contra interrupciones eléctricas un equipo servidor Lenovo ThinkServer Ts-140 E3-1226 V3.
Conozco que se trata de un servidor montado dentro de un gabinete Tower 4U,  originalmente alimentado a través una fuente conmutada ATX de 350w, y su sistema operativo era un mediocre Micro$oft Window$ $erver 2012 R2 Standard. La performance de dicho sistema nunca respondió a las expectativas de la Masa, que lo necesitaba para su operación en la Confederación General del Trabajo. A pesar de contar con un disco de 2TB SATA y 8GB de RAM, y estar provisto de un procesador de 4 núcleos Intel Xeon E3-1226 v3 de 3,30GHz, el trabajo de compartir documentación, planos, material fotográfico y demás no era lo óptimo que debe esperarse de un equipo de este calibre. Sin duda el culpable era el mediocre sistema operativo de la oligarquía.

Aprovecharemos la desgracia eléctrica que provocó un desperfecto eléctrico y dio por tierra con la fuente genérica de 350w, intervendremos sobre el con mano Justicialista, pues nuestro principio nodal proclama que ha de darse al Trabajador lo que este merece, y al Pueblo lo que es del Pueblo.

Tras comprobar el correcto funcionamiento del resto del equipo, procederemos a reemplazar la fuente por otra unidad de marca Powercooler, y 550 watts. También se remplazan los módulos de memoria y se lleva el total instalado al máximo posible, unos 32 GB DDR3. Asimismo se suman un disco SSD de 120GB y 2 discos HDD de 2TB, para totalizar los 6GB instalados en configuración RAID. Finalmente, se instala Ubuntu Server de 64 bits, en su versión 16.04LTS.

Para tareas de salvaguarda eléctrica utilizaremos un UPS ejemplar, el APC BX1100CI-AR con 640W/1100VA, cuya batería permiten entre 2 y 4 minutos de uso a carga completa bajo la condición del máximo consumo estipulado, y hasta unos 12-15 minutos en condiciones de consumo del servidor.

El gabinete de este UPS está provisto con seis tomas de corriente normalizadas, y filtro para protección de sobrevoltaje en la línea telefónica. Además, cuenta con control de reporte a través de un puerto USB de conector USB B hembra.
Para hacer uso de la revisión de los datos del UPS y de esta manera permitirnos alertas y que el mismo apague el sistema, debemos realizar algunas implementaciones de software en el servidor, las cuales explicaré paso a paso en pos de la Liberación.


En primer lugar instalamos el software de control de los UPS de marca APC en el servidor (el cual también puede servir para otros equipos de diferente marca y lógica similar):

sudo apt-get install apcupsd

Una vez completada la instalación, editaremos el archivo de configuración de acuerdo a nuestras necesidades. Los UPS modernos cuentan con una interfaz de comunicación y control basada en el protocolo universal USB. Esto nos facilita enormemente las cosas.

sudo nano /etc/apcupsd/apcupsd.conf

En el archivo de configuración, debemos asignarle un nombre al UPS, y configurarlo para emplear USB, para ello modificamos o agregamos las líneas:

UPSNAME APC1100CI-AR
UPSCABLE usb
UPSTYPE usb

Si a continuación de la línea UPSTYPE nos aparece la línea "DEVICE /dev/ttyS0" (que denota una conexión serial, para un UPS con dicho tipo de conector). , debemos comentarla agregándole al principio un signo numeral ("#"), de manera que quede así:

#DEVICE /dev/ttys0

Existen tres parámetros principales que debemos modificar en este archivo de configuración para indicarle al sistema cuanto tiempo esperará para apagarse en caso de una interrupción de fluido eléctrico.

Estos valores coinciden con los valores reportados al demonio apcupsd por parte del UPS. Fundamentalmente se usa el tiempo estimado antes que la batería se descargue completamente, la cual el UPS calcula basado en el porcentaje de carga reportado y en el tiempo restante de carga.

Los tres parámetros a indicar en el archivo apcupsd.conf son:

a) BATTERYLEVEL, el nivel de carga mínimo aceptado de batería (expresado en porcetaje).
b) MINUTES, el tiempo estimado antes de que la batería se agote completamente.
c) TIMEOUT: un valor de tiempo de autoridad total, expresado en segundos, en el cual, si indicamos un valor diferente a cero, apcupsd ignorará los dos parámetros anteriores y hará caso al mismo.

Normalmente podríamos indicar BATTERYLEVEL 30 (por ciento) o minutes 3, pero han de saber que cada uno ha de portar en su mochila el bastón de Mariscal, por lo que la configuración dependerá de las condiciones particulares. Existen varios factores, por ejemplo, cuan frecuentemente se producen cortes de luz de escasa duración. Otro factor que puede afectar la decisión es la edad de la batería. Si tenemos una batería de más de cinco años, naturalmente la carga almacenada por la misma no será la estipulada durante su fabricación. Por lo tanto, decidimos programar un valor TIMEOUT de 130 segundos y un valor ONBATTERYLEVEL de 5 por ciento.

TIMEOUT 130
ONBATTERYLEVEL 5

Guardamos el archivo (Ctrl+o y Ctrl+x).

Esto provoca que dentro de los 5 segundos de un corte de suministro eléctrico, opcupsd comience a generar mensajes en la consola de texto del servidor y a los usuarios logueados, a través de SSH,  notificándoles del hecho que se ha producido un corte de suministro.

Ahora debemos indicarle al sistema que el demonio UPS ha sido configurado y que está listo para funcionar. Ingresamos el comando:

nano /etc/default/apcupsd

...y buscamos y modificamos el parámetro ISCONFIGURED para que quede de la siguiente manera:

ISCONFIGURED=yes

Acto seguido presionamos Ctrl+o y Ctrl+x para guardar los cambios.

Ya podremos dar inicio el servicio de interacción con el UPS, tipeando:

service apcupsd restart

Si estamos logueados al servidor podremos revisar el status del UPS, mendiante el siguiente comando de organización:

sudo apcaccess

La cantidad de información suministrada dependerá del UPS en particular, pero podría indicarnos algo como lo siguiente:

APC      : 001,043,1045
DATE     : Tue May 30 00:02:36 AR 2017
HOSTNAME : site5
VERSION  : 3.14.6 (16 May 2009) debian
UPSNAME  : APC1100CI-AR
CABLE    : USB Cable
MODEL    : Back-UPS AR  1100
UPSMODE  : Stand Alone
STARTTIME: Mon Mat 28 23:43:37 AR 2017
STATUS   : ONLINE
LINEV    : 240.0 Volts
LOADPCT  :  40.0 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT :  11 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
OUTPUTV  : 232.0 Volts
SENSE    : Medium
DWAKE    : 000 Seconds
DSHUTD   : 000 Seconds
LOTRANS  : 194.0 Volts
HITRANS  : 264.0 Volts
RETPCT   : 000.0 Percent
ITEMP    : 29.2 C Internal
ALARMDEL : Always
BATTV    : 27.4 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Low line voltage
NUMXFERS : 0
TONBATT  : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : YES
STATFLAG : 0x07000008 Status Flag
SERIALNO : xxxxxxxxxxxx 
BATTDATE : 2014-09-25
NOMOUTV  : 230 Volts
NOMINV   : 230 Volts
NOMBATTV :  24.0 Volts
NOMPOWER : 640 Watts
FIRMWARE : 9.o5 .I USB FW:o5
APCMODEL : Back-UPS AR  1100
END APC  : Tue May 30 00:02:41 AR 2017


Naturalmente que podremos hacer una "prueba de corte", rodadura que siempre conviene realizar simulando trabajo en el servidor sin que el mismo esté en una acción crítica.

Al desconectar directamente el UPS de la toma eléctrica, comprobaremos que los usuarios reciban la alerta que les indica almacenar su trabajo durante 90 segundos. Y luego el sistema se apagará automáticamente. La rutina de apagado del servidor lleva como máximo 1 minuto 30 segundos, y el de hibernado del mismo en partición SWAP unos 3:40 minutos (el cual debemos sumar al tiempo de actividad normal del sistema, y el cual la batería debe estar capacitada para responder). En este caso el UPS provisto es totalmente capaz de salvar el trabajo de los usuarios, y ofrece una carga redundante útil.