Porte Seriali utilizzate come Console

Linux e le porte seriali: utilizzare la seriale come console

problema da risolvere:
ho due server presso un cliente.
questi due server, oltre a essere collegati alla rete locale, sono collegati tra loro attraverso un'interfaccia di rete supplementare.
L'interfaccia di rete e' un servizio di alto livello, pertanto, il sistema deve essere regolarmente in moto prima di poter rendere disponibile la rete e un eventuale servizio attraverso cui accedere.
Le due macchine non sono presidiate, pertanto, si presenta la necessita' di controllarne anche le fasi di boot, quindi, per inciso averne il controllo anche prima che la rete sia operativa e il sistema accessibile da remoto.
Linux, da bravo ragazzo, consente con poca fatica, di ottenere anche questo.

In primo luogo serve un minimo di hardware supplementare:
una porta seriale standard (per standard, intendo quelle con il classico cippotto 8250 nella macchina e non le schedine pci curioso che si vedono in giro adesso). Un cavo cross (gli schemi sono liberamente disponibili in rete). Un modem, eventualmente, se si vogliono connessioni da remoto (in questo caso non serve il cross ma il semplice cavo seriale standard). Una caratteristica del modem e' che possa memorizzare la configurazione in modo permamente in una memoria non volatile.

Indipendentemente dall'hardware, vediamo i passaggi per attivare questo meccanismo (non parlero' del modem, che comunque, dovra' essere configurato attraverso i propri codici in ricezione automatica, in modo da non rendere necessaria eventuale interazione con il sistema, almeno nella fase di connessione iniziale):

Kernel:
nel kernel va abilitata, nella gestione delle porte seriali, l'opzione "console on serial device".

Lilo:
in lilo devono essere inserite due voci:
la prima, riguarda proprio lilo:
serial=0,38400n8
Questa riga informa lilo che deve essere presente anche sulla porta seriale ttyS0 alla velocita' indicata (38400 bauds, 8 bits, no parity).

la seconda riguarda il boot del kernel,
console=ttyS0,38400n8 console=tty0
Questa riga informa invece il kernel che i messaggi di console devono essere inviati tramite la prima porta seriale, e in copia anche sulla console.

inittab:
in inittab c'e' da fare un settaggio veloce (ne esiste anche un secondo che illustrero' dopo).
Abilitare agetty sulle porte seriali.
In Slack questo e' praticamente gia' fatto, basta togliere un cancelletto e verificare se la velocita' e' quella voluta.

# Local serial lines:
#s1:12345:respawn:/sbin/agetty -L ttyS0 9600 vt100
#s2:12345:respawn:/sbin/agetty -L ttyS1 9600 vt100

fatte le modifiche del caso, basta un telinit q e init e' gia' informato della nuova situazione.

Va modificato anche securetty dove devono essere aggiunti i terminali seriali dove vogliamo che ci sia l'accesso da parte di root.
Attenzione, importantissimo:
la modifica di questo file va fatta con attenzione.
la rimozione dei terminali ttyX comportera' che root non potra' piu' accedere direttamente alla console.
Al contrario una gestione troppo allegra e libertina di questo file consentira' l'accesso a root anche da terminali (virtuali o meno) potenzialmente pericolosi.
Potete anche scegliere di creare un utente a basso livello da far accedere dal terminale remoto il quale poi potra scalare con su/sudo.

Ultima nota su inittab:
nonostante i vari howto trovati in rete spiegassero benissimo come attivare la console via seriale, non sono inizialmente riuscito a trovare una soluzione affinche anche i servizi avviati da init (i vari rc.*) venissero inviati via seriale (vedevo solo i risultati positivi, ma mancavano buona parte dei messaggi).
Ho risolto in modo un po' sporco, reindirizzando con 1>2& /dev
/ttySX la riga all'interno di inittab che avvia l'esecuzione dei vari script.

porto ad esempio l'inittab della mia slack indicando le righe modificate e le relative modifiche.

originale: rc:2345:wait:/etc/rc.d/rc.M
modificata: rc:2345:wait:/etc/rc.d/rc.M 1>2&> /dev/ttyS0
Certo, non e' proprio il massimo dell'eleganza, tra l'altro tutti i messaggi che una volta uscivano in console non ci sono piu'.... ma tanto la console non e' presidiata.

attenzione: si:S:sysinit:/etc/rc.d/rc.S
a qualcuno potrebbe venire in mente di modificare anche questa riga aggiungendo le redirezioni. Se lo fate il sistema non parte correttamente in quanto durante l'esecuzione di questo script, avviene il passaggio da filesystem in sola lettura a file system montato e operante. Prima di questa fase la redirezione andrebbe in errore (non puo' scrivere sul device seriale) e tutto l'avvio ne sarebbe compromesso.

Attenzione:
le note indicate sono il frutto delle prove da me effettuate su due stazioni Slackware.
Se trovate delle inesattezze vi prego di farmelo sapere che inseriro' subito le correzioni.
Le note' sono rilasciate a uso e consumo di chiunque ne abbia bisogno. Non rispondo comunque in nessun caso di danni diretti e indiretti causati dall'uso di queste note.