Appunti su Gentoo Linux.
UPS Riello

Interfacciamento tra l'UPS e Linux

L'UPS (Uninterruptible Power Supply o in italiano Gruppo di continuità) è un componente fondamentale per ogni computer che fa da server o che viene usato per scopi lavorativi. Un sistema senza una corretta gestione dell'alimentazione è un sistema inaffidabile.

L'interfacciamento tra l'UPS e il sistema che alimenta oppure con un sistema esterno di solo controllo non è obbligatorio ma è a dir poco fondamentale. In caso di mancanza di alimentazione, il sistema deve essere in grado di effettuare lo shutdown poco prima che l'UPS termini la sua autonomia.

Io sono sempre stato un felice acquirente degli UPS della Riello. In questa pagina parlerò di come interfacciare l'UPS Riello (nel mio caso particolare un modello Win Dialog) con il mio sistema Gentoo.

In ambiente Linux esistono dei software liberi per gestire l'interfacciamento, ma non funzionano con gli UPS della Riello che invece necessitano dei software proprietari della Riello. L'unico software gratuito che viene fornito dalla Riello è PowerShield (versione gratuita). La versione gratuita permette di controllare un singolo UPS ed è quindi adatta per un sistema "casalingo".

Installazione di PowerShield

La prima coda da fare è annotarvi da qualche parte il codice PRTK, il P/N e il S/N riportati sulla targa sul retro del vostro UPS. Dopodiché collegate l'UPS al PC tramite cavo USB o seriale (nel mio caso USB).

Il mio Win Dialog non ha una vera e propria interfaccia USB. Internamente funziona ancora tramite porta seriale RS232 ma quelli della Riello per ammodernarlo, hanno messo un convertitore RS232 - USB, in particolare il dispositivo in questione è riportato dal comando lsusb come "Cypress Semiconductor Corp. HID->COM RS232 Adapter". Pertanto il passo successivo da fare è quello di far sì che il kernel di Linux riconosca tale dispositivo.

Bisogna abilitare nel kernel il supporto per i convertitori "USB Serial":

Device Drivers --->
    USB support --->
        <*>   USB Serial Converter support  --->
            <*>   USB Cypress M8 USB Serial Driver

All'interno del menù "USB Serial Converter support" non abilitate niente altro. Ricompilate il kernel con questa nuova configurazione e osservate se ora esiste il dispositivo /dev/ttyUSB0.

Ora veniamo alla parte software. Scaricate PowerShield per Gentoo, cercate gentoo nel sito della riello ups, sono circa 10 MB. Scaricate il manuale di PowerShield nel caso vi serva. Decomprimete l'archivio. Comparirà una cartella chiamata upsmon-pkg. L'installazione consiste nel copiare la cartella upsmon-pkg da qualche parte. Di solito dentro /opt:

mv upsmon-pkg /opt/.
cd /opt
mv upsmon-pkg upsmon

I tre programmi principali di questo pacchetto sono upsetup, upsagent e upsview. Upsagent è il server che comunica con l'UPS. Upsetup è un programma che aiuta nella creazione del file di configurazione di upsagent e infine upsview è un client per poter interrogare e mostrare le informazioni tratte da upsagent. Di questi programmi esistono le versioni eseguibili e anche le versioni Java. Le versioni eseguibili sono solo testuali mentre le versioni Java hanno l'interfaccia grafica. Usate quelli che di volta in volta più vi piacciono. Io preferisco l'interfaccia testuale.

Configurazione di upsagent con upsetup

La configurazione di upsagent si trova nel file upsmon.ini e, come già detto, può essere sia generato a mano, sia automaticamente tramite il programma upsetup. Io parlerò solo dell'uso di upsetup.

Lanciare upsetup da root da riga di comando (pag. 38 del manuale) e inserire il PRTK. Questo è cosa compare a schermo: ogni voce corrisponde a una categoria di configurazione.

1 - General parameters
2 - UPS configuration
3 - Messages configuration
4 - Schedule
5 - Jobs configuration

Entrate in "General parameters". Scegliete il System name, il System location e il System contact. Scegliete la lingua. Scegliete se loggare gli eventi (verranno salvati nel file event.log). Scegliete se salvare i dati di rete e con che frequenza (verranno salvati nel file data_00.log). La tipica riga del file di dati è:

Data        Ora       UPS  Vin  ?  ?  Vba  %ba  tb  %W  ?  ?
23.10.2011  13:30:17  UPS  235  0  0   13    0   0  10  0  0


Vin: tensione d'ingresso
Vba: tensione batteria
%ba: capacità residua in % della batteria
 tb: tempo in minuti di autonomia residua
 %W: potenza erogata dall'UPS in percentuale rispetto al
     carico nominale massimo (800 VA nel mio caso)

Infine scegliere se attivare i servizi di rete per controllare l'UPS da remoto. Con "Server" si intende la possibilità di connettersi all'upsagent con un upsview installato in un altro pc della rete, tramite la porta UDP specificata. "Ignore Remote UPS commands" permette di ignorare i comandi provenienti da upsview remoti. "HTTP enabled" produce invece dei report sotto forma di pagine HTML. Queste pagine possono essere poi semplicemente aperte da remoto o servite tramite un server HTTP se presente sullo stesso pc dove è installato upsagent. "HTTP path" è il percorso dove salvare questi report HTML, è utile se appunto volete salvarle in un posto comodo per poterle servire come sito web con un server HTTP. Infine potete specificare un password per le connessioni remote. L'update frequency è invece la frequenza con cui creare le pagine HTML.

Ora passate alla "UPS configuration". Usando la versione gratuita di PowerShield potete configurare solo un UPS. Scegliete il nome dell'UPS, immettete il codice PRTK e il S/N. Come tipo di connessione scegliete "locale" e nel campo "Connection serial port" al posto di COM1 scrivete il dispositivo che rappresenta il vostro UPS, solitamente /dev/ttyUSB0. In "address" lasciate 00. Regolate poi il "System shutdown", cioè lo spegnimento del pc collegato all'UPS. Si può scegliere un tempo massimo senza rete dopo il quale spegnere il sistema oppure si può scegliere di spegnerlo quando l'autonomia dell'UPS scende sotto una certa soglia. Un criterio non esclude ovviamente l'altro. L'"UPS shutdown" invece va tenuto solitamente disabilitato perché è utile solo nel caso in cui l'upsagent controlli in maniera remota un UPS. A questo punto può scegliere di spegnere il sistema remoto e successivamente l'UPS. Se l'upsagent gira sullo stesso sistema alimentato dall'UPS, non ha senso spegnere l'UPS.

Passiamo a "Message configuration". Qui non c'è nulla da fare. Lasciate tutto disabilitato a meno che il vostro sistema non abbia la possibilità di inviare messaggi tramite rete GSM, ecc...

La sezione "Schedule" è costituta da operazioni pianificate di test degli UPS. Come spegnimento, test delle batterie ecc... Solitamente inutile per un sistema casalingo. Lasciare tutto disabilitato.

Infine la sezione "Jobs configuration". In questa sezione potrete specificare cosa dovrà fare upsagent per ogni evento. Per esempio nel caso di mancanza di alimentazione deve essere inviata una mail a un certo indirizzo con un certo testo e poi deve essere registrato nel log l'evento. Oppure nel caso di shutdown imminente del sistema si potrebbe voler eseguire dei comandi per fermare dei servizi che stanno girando sul sistema che deve essere spento, ecc...

Vediamo come configurare upsagent per l'invio di email. Mentre su Windows le cose sono molto facili, su Linux le varie azioni sono controllate da alcuni script, con estensione .src. Lo script ups_eml.scr serve per mandare le mail. L'invio dei messaggi funziona così: prima di tutto dovete configurare con upsetup quali azioni comportano l'invio di email. Dopodiché upsagent, nel momento che accadrà qualcosa per cui deve mandare una mail, scriverà il messaggio da inviare nel file ups.msg e poi lancerà lo script ups_eml.scr dando come primo e unico argomento il file ups.msg.

Abbiamo quindi bisogno che lo script ups_eml.scr faccia quello che deve. Lo script di default non va bene. Modifichiamolo così:

mail -r destinatario@email.com -s 'UPS communication' -f $1

Il comando mail è uno script molto semplice fatto da me e basato sul comando msmtp. Trovate tutto quanto spiegato nella sezione apposita: Inviare mail con msmtp.

Quando avete finito, uscite da upsetup. Vi verrà chiesto se salvare il file di configurazione. Scegliete di sì.Il file così generato, upsmon.ini, verrà poi usato da upsagent (se upsagent già è in funzione dovete farlo ripartire se volete che carichi le nuovi impostazioni).

Eseguire upsagent

Upsagent è l'eseguibile del server, cioè del programma che si occupa di parlare con l'UPS, riportandone le risposte. Va ovviamente lanciato come servizio di sistema, cioè deve essere sempre in funzione. Non esistono opzioni come stop e start che invece ci sono su Windows. Per avviare ogni volta all'avvio upsagent va usato il gestore dei servizi di sistema. Lo script da richiamare con il gestore dei servizi esiste già e si chiama upsmon ma purtroppo per una serie di motivi non funziona su Gentoo.

-------------------------------------------------------
DA CANCELLARE
upsmon start fa partire il server upsagent upsmon stop ferma il server upsagent Per funzionare ha bisogno di un sitema Linux Standard Base (LSB) compliant. Purtroppo Gentoo non rispetta lo standard LSB :( e infatti non ha lo script necessario /etc/rc.status che viene richiesto da upsmon. Potete scaricarlo da questo sito: http://trac.turbogears.org/ticket/172 Attenti a come lo scaricate. Controllate gli a capo alla Windows o alla Linux. Mettetelo in /etc/rc.status. Non basta però! Servono anche dei comandi per far partire i demoni, startproc, killproc e così via. In Gentoo non ci sono perché non è LSB compliant. Vanno installati:

emerge -pDv killproc

Infine tanto per gradire c'è anche un errore in quello script! Quando viene chiamato killproc viene chiamato con l'opzione -p per il pid anziché l'opzione -f. O gli autori hanno usato una versione differente di killproc oppure hanno confuso -f con -p pensando al fatto che la p significasse pid. Cambiate quindi -p in -f quando viene chiamato killproc. Purtroppo anche così c'è qualcosa che non va. Il comando startproc dovrebbe generare in automatico il file .pid e invece non lo fa! Così quando stoppiamo con upsmon stop, lui ci dà errore perché non trova /var/run/upsagent.pid. Possiamo forzare a mano il pid mettendolo davanti a startproc: startproc ... -f /var/run/upsagent.pid. Purtroppo anche così non va!!!!!!!! Porc....! Certo la cosa migliore sarebbe uno script serio per Gentoo! Penso che scriverò alla Riello-UPS in proposito.
-------------------------------------------------------

La cosa migliore è usare il servizio local. Create il file 10_upsagent.start e 10_upsagent.stop nella directory /etc/local.d e rendeteli entrambi eseguibili. Nel primo mettere /opt/upsmon/upsagent e nel secondo mettere killall upsagent. Ricordarsi anche di mettere alla fine di entrambi i file la parola true. Questo serve a far sì che se anche qualche comando va in errore, comunque lo script local può partire e fermarsi. Basta pensare a quanto vogliamo fermare il servizio local ma upsagent è già stato killato per qualche altro motivo. killall dirà che non c'è nessun servizio upsagent e darà errore e così lo script local non si fermerà!

Comunicare con l'UPS: upsview

Per controllare lo stato dell'UPS, sia remoto che locale, bisogna interrogare il server upsagent collegato a quell'UPS. A questo pensa upsview. Lanciarlo e farlo funzionare è banale. Quando si esce da upsview ovviamente upsagent continua a funzionare.