Page suivante - Page précédente - Table des matières

5. Faites-le vous-même

Ce chapitre est spécifiquement destiné au contrôle des onduleurs bêtes. Néammoins, une grande partie du processus est à peu près identique pour les onduleurs intelligents. La principale différence réside dans la manière dont le daemon (typiquement powerd) de surveilance communique avec l'onduleur.

Avant de faire quoi que ce soit, je suggère l'algorithme suivant :

  • parcourir ce document ;
  • télécharger et étudier tous les paquetages qui semblent adaptés spécifiquement à son onduleur ;
  • télécharger et étudier les paquetages plus génériques. Notes que certains d'entre eux sont en fait plus puissants, mieux documentés et plus faciles d'emploi que leurs équivalents spécifiques ;
  • si les choses ne se passent pas bien ou si certains points restent obscurs, lire le présent document avec attention et bidouiller avec ardeur et précaution...

5.1 Que faut-il faire (sommairement) ?

  • brancher l'ordinateur sur l'onduleur ;
  • connecter le port série de l'ordinateur à l'onduleur avec un câble spécial ;
  • lancer powerd (ou un de ses équivalents) sur l'ordinateur ;
  • configurer init pour réaliser quelque chose de raisonnable sur les événements powerfail et powerok (comme lancer un shutdown et tuer tout shutdown en cours respectivement, par exemple).

5.2 Comment est-ce supposé fonctionner ?

Travail de l'onduleur

Lorsque le courant s'arrête, l'onduleur continue d'alimenter le PC et signale l'arrêt du courant par bascule d'un relais ou d'un optocoupleur sur son port de contrôle.

Travail du câble

Le câble est conçu de telle manière que lorsque l'onduleur bascule ledit relais, cela monte un signal de contrôle particulier de la ligne série (typiquement DCD, détection de porteuse)

Travail de powerd

Le daemon powerd contrôle le port série. Il maintient levés/baissés les signaux de contrôle du port série dont l'onduleur a besoin (typiquement DTR, Terminal de Données Prêt, doit rester levé, et touts les signaux qui coupent l'onduleur doivent être maintenus baissés). Lorsque powerd voit le signal de contrôle de l'onduleur monter, il écrit FAIL dans /etc/powerstatus et envoie un signal SIGPWR au process init (les anciennes versions de powerd et init écrivent dans /etc/powerfail). Lorsque le signal de contrôle redescend, il écrit OK dans /etc/powerstatus et envoie un signal SIGPWR à init.

Travail de init (en plus de tout ce qu'il fait par ailleurs)

Lorsqu'il reçoit un signal SIGPWR, il regarde dans /etc/powerstatus. Si celui-ci contient FAIL, il exécute l'entrée powerfail du fichier /etc/inittab. S'il contient OK, il exécute l'entrée powerokwait de inittab.

5.3 Comment configurer tout ça ?

Ce qui suit présuppose que vous disposez d'un câble qui fonctionne correctement avec powerd. Si vous n'en êtes pas sûr, voyez la section : Analyse de câbles et modification de powerd.c pour toute information sur les câbles mal décrits et la reconfiguration de powerd. Les sections Assignement des broches du port série et Correspondance entre ioctl et RS232 seront aussi utiles.

Si vous devez fabriquer un câble, voyez la section : Comment réaliser un câble ? pour les détails généraux, et la sous-section de : Informations sur un certain nombre d'onduleurs qui se rapporte à votre onduleur. Cette dernière peut aussi contenir des informations sur les câbles fournis par le constructeur. Vous voudrez probablement parcourir toute la section Informations sur un certain nombre d'onduleurs car chaque section contient quelques détails supplémentaires généralement utiles.

  • Editez /etc/inittab. Placez-y quelque chose de ce genre :
    # Que faire si le courant s'arrete
    # (arreter le systeme et vider la batterie :) :
    pf::powerfail:/etc/powerfailscript +5
    # Si le courant revient avant la fin du shutdown, arreter celui-ci
    pg:0123456:powerokwait:/etc/powerokscript
    
  • Ecrivez les scripts /etc/powerfailscript et /etc/powerokscript pour arrêter le système après cinq minutes, ou mener toute action appropriée, et tuer le shutdown en cours, respectivement. En fonction de votre version de shutdown, cela sera, soit si trivial que vous n'aurez même pas à écrire de script, soit un script d'une ligne bash, quelque chose du genre :
    kill `ps -aux | grep "shutdown" | grep -v grep | awk '{print $2}'`
    
    et vous conserverez les scripts (au cas où cela ne vous arriverait pas dans un parfait état, la première apostrophe sur la ligne ci-dessus est une quote inversée, la seconde et la troisième sont des apostrophes, et la dernière est aussi une quote inversée).
  • Dites à init de relire le fichier inittab avec :
    telinit q
    
  • Editez rc.local pour lancer powerd lors du lancement. Syntaxe :
    powerd <ligne>
    Remplacez <ligne> par le port série modem sur lequel sera connecté l'onduleur, comme dans : /dev/cua1.
  • Connectez le port série du PC à celui de l'onduleur. NE BRANCHEZ PAS ENCORE LE PC SUR L'ONDULEUR.
  • Branchez une lampe sur l'onduleur.
  • Allumez l'onduleur et la lampe.
  • Lancez powerd.
  • Testez la configuration :
    • Débranchez l'onduleur.
      • Contrôlez que la lampe reste allumée,
      • Contrôlez que /etc/powerfailscript est lancé,
      • Contrôlez que le shutdown est lancé.
    • Rebranchez l'onduleur.
      • Contrôlez que la lampe reste allumée,
      • Contrôlez que /etc/powerokscript est lancé,
      • Contrôlez que /etc/powerfailscript n'est pas lancé,
      • Contrôlez que le shutdown est bien arrêté.
    • Redébranchez l'onduleur. Laissez-le débranché et vérifiez que le PC s'arrête proprement dans un délai correct.
    • La Partie Délicate. Une fois que tout semble correct, arrêtez le PC et branchez-le sur l'onduleur. Lancez un script qui synchronise le disque dur toutes les secondes ou à peu près (sync). Simultanément, lancez un second script qui exécute un find sur votre disque entier. Le premier sert à rendre l'opération plus sûre, et le second, à consommer le maximum de puissance. Maintenant, tirez sur la prise de l'onduleur, vérifiez une fois de plus que le PC est lancé, et attendez. Assurez-vous que le PC s'arrête correctement avant que la batterie soit vide. C'est dangereux, car si la batterie n'assure pas le délai d'arrêt du PC, vous pouvez vous retrouver avec un système de fichiers corrompu, et peut-être même la perte de tous vos fichiers. Vous devriez probablement réaliser une sauvegarde complète avant ce test, et positionner un délai de shutdown très court pour commencer.

Félicitations ! Vous avez maintenant un PC sous Linux protégé par onduleur qui va s'arrêter proprement lors d'une coupure de courant !

5.4 Améliorations Utilisateur

  • Bidouillez powerd.c pour surveiller la ligne indiquant un faible niveau de batterie. Dans ce cas, exécutez un shutdown immediate ;
  • Modifiez la procédure de shutdown, afin que lorsqu'elle s'exécute dans des conditions de coupure de courant, elle éteigne l'onduleur après avoir effectué tout le nécessaire.


Page suivante - Page précédente - Table des matières