Tout d'abord, notre configuration :

  • un serveur Debian Lenny
  • un onduleur de marque APC
  • un câble série
  • un chouilla de patience

Préparation

Relier l'onduleur APC à votre serveur via le câble série. Sur mon serveur (et dans le reste de ce billet), le port série est ttyS0.

Mise en place

Premièrement, il faut installer le logiciel nut sur le serveur, qui comprend divers binaires et drivers pour les divers types d'onduleur qu'il existe sur le marché.

root@> aptitude install nut

Une fois fait, un utilisateur et groupe nut ont été créés. Rajoutez nut au groupe dialout ;

root@> gpasswd -a nut dialout

Ensuite, on édite le fichier /etc/default/nut pour en modifiant les deux lignes suivantes :

[...]
START_UPSD=yes
[...]
START_UPSMON=yes
[...]

Configuration de nut

Le fichier /etc/nut/ups.conf contient la liste des onduleurs connectés à votre poste. Voici le mien :

[mon_onduleur]
  driver = apcsmart
  port = /dev/ttyS0

Vous noterez que mon onduleur est nommé mon_onduleur. Ce nom sera réutilisé plus tard

Le fichier /etc/nut/upsd.conf gère les droits d'utilisation de l'onduleur au travers des binaires de nut. Voici ce que j'ai :

[...]
ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
[...]
ACCEPT localhost
REJECT all
[...]

Le fichier /etc/nut/upsd.users contient la liste des utilisateurs qui auront le droit de consulter l'onduleur. Cet utilisateur est spécifique à nut et n'a aucun rapport avec l'onduleur. Voici un exemple :

[admin]
        password = UN_MOT_DE_PASSE
        allowfrom = localhost
        actions = SET FSD
        inscmds = ALL
        upsmon master

Enfin, le fichier /etc/nut/upsmon.conf qui gère les paramètres du moniteur de l'onduleur, gérant ainsi les commandes à lancer en cas de batterie faile, etc... Voici les informations importantes :

MONITOR mon_onduleur@localhost 2 admin UN_MOT_DE_PASSE master

MINSUPPLIES 1

SHUTDOWNCMD "/sbin/shutdown -h +0"

POLLFREQ 5

POLLFREQALERT 5

HOSTSYNC 15

DEADTIME 15

POWERDOWNFLAG /etc/killpower

RBWARNTIME 43200

NOCOMMWARNTIME 300

FINALDELAY 0

Voilà, vous en avez fini de la configuration.

Tester le bon fonctionnement

Tout d'abord, nous allons vérifier que la connexion s'établit bien entre le serveur et l'onduleur.

On commencera par redémarrer nut:

root@> /etc/init.d/nut restart

Puis on teste l'accès à l'onduleur :

root@> upsc mon_onduleur

Si le message retourné est un message du type Connection refused alors vous avez un souci de configuration, soit au niveau du port utilisé, soit de mot de passe admin, soit au niveau du driver utilisé.

Dans la logique, vous devriez avoir quelque chose ressemblant à ceci :

root@> upsc mon_onduleur
battery.alarm.threshold: 0
battery.charge: 023.0
battery.charge.restart: 00
battery.date: 03/09/10
battery.packs: 000
battery.runtime: 1740
battery.runtime.low: 120
battery.voltage: 50.49
battery.voltage.nominal: 048
driver.name: apcsmart
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttyS0
driver.version: 2.2.2
driver.version.internal: 1.99.8
input.frequency: 50.00
input.quality: FF
input.sensitivity: H
input.transfer.high: 253
input.transfer.low: 208
input.transfer.reason: O
input.voltage: 234.7
input.voltage.maximum: 234.7
input.voltage.minimum: 234.7
output.voltage: 234.7
output.voltage.nominal: 230
ups.delay.shutdown: 090
ups.delay.start: 000
ups.firmware: 665.6.I
ups.id: UPS_IDEN
ups.load: 005.8
ups.mfr: APC
ups.mfr.date: 03/09/10
ups.model: Smart-UPS 2200 RM
ups.serial: JS1011011418
ups.status: OL
ups.temperature: 023.4
ups.test.interval: 1209600
ups.test.result: NO

Une fois que la connexion est correcte, on tente de faire une simulation de charge faible :

root@> upsmon -c fsd

Le système s'arrête, et l'onduleur va faire un reset électrique, qui vous permettra de voir si votre machine repartirait bien si une vraie coupure intervenait.

Si elle ne repart pas, la config se fait dans votre bios.

Enfin, et ce pour être sur que l'onduleur se coupe bien quand il détecte son temps de fonctionnement restant, il faut calibrer l'onduleur :

root@> upscmd -u admin -p UN_MOT_DE_PASSE mon_onduleur calibrate.start

Voilà, bonne utilisation !

Configuration de l'APC

On peut également envisager de modifier le seuil critique, exprimé en secondes jusqu'à extinction.

Pour connaître la valeur actuelle :

root@> upsrw mon_onduleur| grep -A6 battery.runtime.low

Vous aurez un retour du genre :

root@> upsrw mon_onduleur| grep -A6 battery.runtime.low
 [battery.runtime.low]
Remaining battery runtime when UPS switches to LB
Type: ENUM
Option: "120" SELECTED
Option: "300"
Option: "420"
Option: "600"

Pour modifier la valeur, utilisez la commande :

root@> upsrw -u admin -p UN_MOT_DE_PASSE-s battery.runtime.low mon_onduleur
Enter new value for battery.runtime.low: 600 (par exemple)