<HTML> <HEAD> <TITLE>software</TITLE> </HEAD> <BODY> <A NAME="do-it-yourself"></A> <H1>5. <A NAME="s5"></A>softwareFaites-le vous-même</H1> <P> <A HREF="UPS-HOWTO.html#toc5">Contenu de cette section</A></P> <P>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 <EM>powerd</EM>) de surveilance communique avec l'onduleur.</P> <P>Avant de faire quoi que ce soit, je suggère l'algorithme suivant :</P> <P> <UL> <LI>parcourir ce document ;</LI> <LI>télécharger et étudier tous les paquetages qui semblent adaptés spécifiquement à son onduleur ;</LI> <LI>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 ;</LI> <LI>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...</LI> </UL> </P> <P></P> <A NAME="needed"></A> <H2>5.1 <A NAME="ss5.1"></A> Que faut-il faire (sommairement) ?</H2> <P> <UL> <LI>brancher l'ordinateur sur l'onduleur ;</LI> <LI>connecter le port série de l'ordinateur à l'onduleur avec un câble spécial ;</LI> <LI>lancer <EM>powerd</EM> (ou un de ses équivalents) sur l'ordinateur ;</LI> <LI>configurer <EM>init</EM> pour réaliser quelque chose de raisonnable sur les événements <EM>powerfail</EM> et <EM>powerok</EM> (comme lancer un <EM>shutdown</EM> et tuer tout <EM>shutdown</EM> en cours respectivement, par exemple).</LI> </UL> </P> <P></P> <A NAME="working"></A> <H2>5.2 <A NAME="ss5.2"></A> Comment est-ce supposé fonctionner ?</H2> <P> <DL> <DT><B>Travail de l'onduleur</B><DD><P>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.</P> <P></P> <DT><B>Travail du câble</B><DD><P>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 <EM>DCD</EM>, détection de porteuse)</P> <P></P> <DT><B>Travail de powerd</B><DD><P>Le daemon <EM>powerd</EM> 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 <EM>DTR</EM>, Terminal de Données Prêt, doit rester levé, et touts les signaux qui coupent l'onduleur doivent être maintenus baissés). Lorsque <EM>powerd</EM> voit le signal de contrôle de l'onduleur monter, il écrit <CODE>FAIL</CODE> dans <CODE>/etc/powerstatus</CODE> et envoie un signal <CODE>SIGPWR</CODE> au process <EM>init</EM> (les anciennes versions de <EM>powerd</EM> et <EM>init</EM> écrivent dans <CODE>/etc/powerfail</CODE>). Lorsque le signal de contrôle redescend, il écrit <CODE>OK</CODE> dans <CODE>/etc/powerstatus</CODE> et envoie un signal <CODE>SIGPWR</CODE> à <EM>init</EM>.</P> <P></P> <DT><B>Travail de init (en plus de tout ce qu'il fait par ailleurs)</B><DD><P>Lorsqu'il reçoit un signal <CODE>SIGPWR</CODE>, il regarde dans <CODE>/etc/powerstatus</CODE>. Si celui-ci contient <CODE>FAIL</CODE>, il exécute l'entrée <CODE>powerfail</CODE> du fichier <CODE>/etc/inittab</CODE>. S'il contient <CODE>OK</CODE>, il exécute l'entrée <CODE>powerokwait</CODE> de <CODE>inittab</CODE>.</P> <P></P> </DL> </P> <P></P> <A NAME="configure"></A> <H2>5.3 <A NAME="ss5.3"></A> Comment configurer tout ça ?</H2> <P>Ce qui suit présuppose que vous disposez d'un câble qui fonctionne correctement avec <EM>powerd</EM>. Si vous n'en êtes pas sûr, voyez la section : <A HREF="UPS-HOWTO-6.html#hacking">Analyse de câbles et modification de powerd.c</A> pour toute information sur les câbles mal décrits et la reconfiguration de <EM>powerd</EM>. Les sections <A HREF="UPS-HOWTO-6.html#serial-port">Assignement des broches du port série</A> et <A HREF="UPS-HOWTO-6.html#ioctl">Correspondance entre ioctl et RS232</A> seront aussi utiles.</P> <P>Si vous devez fabriquer un câble, voyez la section : <A HREF="UPS-HOWTO-6.html#make-cable">Comment réaliser un câble ?</A> pour les détails généraux, et la sous-section de : <A HREF="UPS-HOWTO-8.html#ups-specific">Informations sur un certain nombre d'onduleurs</A> 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 <A HREF="UPS-HOWTO-8.html#ups-specific">Informations sur un certain nombre d'onduleurs</A> car chaque section contient quelques détails supplémentaires généralement utiles.</P> <P> <UL> <LI>Editez <CODE>/etc/inittab</CODE>. Placez-y quelque chose de ce genre : <BLOCKQUOTE><CODE> <PRE> # 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 </PRE> </CODE></BLOCKQUOTE> </LI> <LI>Ecrivez les scripts <CODE>/etc/powerfailscript</CODE> et <CODE>/etc/powerokscript</CODE> 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 <EM>bash</EM>, quelque chose du genre : <BLOCKQUOTE><CODE> <PRE> kill `ps -aux | grep "shutdown" | grep -v grep | awk '{print $2}'` </PRE> </CODE></BLOCKQUOTE> 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). </LI> <LI>Dites à <EM>init</EM> de relire le fichier <CODE>inittab</CODE> avec : <BLOCKQUOTE><CODE> <PRE> telinit q </PRE> </CODE></BLOCKQUOTE> </LI> <LI>Editez rc.local pour lancer <EM>powerd</EM> lors du lancement. Syntaxe : <BLOCKQUOTE><CODE> <PRE> powerd <ligne> </PRE> </CODE></BLOCKQUOTE> Remplacez <CODE><ligne></CODE> par le port série modem sur lequel sera connecté l'onduleur, comme dans : <CODE>/dev/cua1</CODE>. </LI> <LI>Connectez le port série du PC à celui de l'onduleur. NE BRANCHEZ PAS ENCORE LE PC SUR L'ONDULEUR. </LI> <LI>Branchez une lampe sur l'onduleur. </LI> <LI>Allumez l'onduleur et la lampe. </LI> <LI>Lancez <EM>powerd</EM>. </LI> <LI>Testez la configuration : <UL> <LI>Débranchez l'onduleur. <UL> <LI>Contrôlez que la lampe reste allumée,</LI> <LI>Contrôlez que <CODE>/etc/powerfailscript</CODE> est lancé,</LI> <LI>Contrôlez que le shutdown est lancé.</LI> </UL> </LI> <LI>Rebranchez l'onduleur. <UL> <LI>Contrôlez que la lampe reste allumée,</LI> <LI>Contrôlez que <CODE>/etc/powerokscript</CODE> est lancé,</LI> <LI>Contrôlez que <CODE>/etc/powerfailscript</CODE> n'est pas lancé,</LI> <LI>Contrôlez que le shutdown est bien arrêté.</LI> </UL> </LI> <LI>Redébranchez l'onduleur. Laissez-le débranché et vérifiez que le PC s'arrête proprement dans un délai correct. </LI> <LI><B>La Partie Délicate.</B> 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.</LI> </UL> </LI> </UL> </P> <P>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 !</P> <P></P> <P></P> <A NAME="user-enh"></A> <H2>5.4 <A NAME="ss5.4"></A> Améliorations Utilisateur</H2> <P></P> <P> <UL> <LI>Bidouillez <CODE>powerd.c</CODE> pour surveiller la ligne indiquant un faible niveau de batterie. Dans ce cas, exécutez un shutdown <B>immediate</B> ;</LI> <LI>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.</LI> </UL> </P> <P></P> <HR> <P> Chapitre <A HREF="UPS-HOWTO-6.html">suivant</A>, Chapitre <A HREF="UPS-HOWTO-4.html">Précédent</A> <P> Table des matières de <A HREF="UPS-HOWTO.html#toc5">ce chapitre</A>, <A HREF="UPS-HOWTO.html#toc">Table des matières</A> générale</P> <P> <A HREF="UPS-HOWTO.html">Début</A> du document, <A HREF="#0"> Début de ce chapitre</A></P> </BODY> </HTML>