Redirezionare su porta seriale la console di Linux

Una necessità comune che si ha quando si gestiscono server remoti è la possibilità di ottenere l'accesso alla console di Linux senza usufruire di un terminale virtuale disponibile via telnet o ssh.
Questo è utile sia quando ci sono problemi di rete che impediscono l'accesso all'host, sia quando ci sono problemi hardware o di avvio del sistema, che impediscono che Linux faccia avviare i servizi telnet o ssh, sia quando, per errore o svista, si introduce una regola di firewalling che impedisce l'accesso remoto.

Il modo più semplice e comune per farlo è tramite porta seriale facendo in modo che tutti gli output del sistema, oltre che alle console virtuali, accessibili direttamente via tastiera, vengano direzionati alla porta seriale del PC, a cui può essere collegato un terminal server come Amnex o un Cisco 2511 che con il suo octal camble si presta particolarmente bene ad essere riciclato per agire da terminal server.
Abbondante e completa spiegazione su come procedere è presente nel Remote Serial Console HOWTO, fonte principale di questo breve riassunto.
Di seguito utilizzeremo come parametri per la seriale una velocità di 9600 baud, 8 bit per carattere, un bit di stop e nessuna parità (il classico 8N1), senza controllo di flusso. La porta seriale utilizzata è la /dev/ttyS0 corrispondente alla COM1 su Dos.
E' senz'altro possibile aumentare la velocità e il numero della porta seriale, mentre è bene mantenere le altre impostazioni.
I punti su cui intervenire sono diversi, e si riferiscono sostanzialmente alle diverse fasi del processo di boot su un sistema Intel compatibile.

Bios
Il redirezionamento su interfaccia seriale dell'output di Bios e del POST sono una feature che dipende esclusivamente dal proprio hardware: i Bios di macchine destinate all'uso server spesso hanno questa feature, che invece è generalmente assente sulle motherboad usate su sistemi desktop.

Linux Loader
La visualizzazione del prompt del Linux Loader spesso è attivabile direttamente dai Bios che supportano il redirezionamento su seriale. Alternativamente Lilo o Grub (i Linux Loader più comuni) vanno esplicitamente configurati:
Grub: Nel file di configurazione grub.conf inserire:
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console

Rimuovere inoltre la riga con spalshimage visto che l'uso di grafica nell'output via seriale può dare problemi.
Lilo: Nel file lilo.conf inserire:
serial=0,9600n8
timeout=100


Kernel
Per visualizzare i messaggi del kernel all'avvio, basta passare come argomento la stringa console=tty0 console=ttyS0,9600n8 (si mantiene l'output sulla console tty0).
Questo viene fatto nella configurazione di Lilo o Grub, nella parte relativa al path del kernel.
Ad esempio, su grub.conf (modificare device di root e nome e versione del kernel):
kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 console=tty0 console=ttyS0,9600n8
e su lilo.conf, nella label relativa al kernel di cui si vuole redirezionare l'output:
append="console=tty0 console=ttyS0,9600n8".
Notare che il Kernel deve essere compilato con il supporto della console su seriale, dal menu di configurazione attivare: device driver->character device->serial driver->enable serial console.

Init
Nel file di configurazione di init, /etc/inittab, va indicato dove redirezionare la console e presentare un prompt di login tramite un programma getty. Ne esistono diverse versioni con sintassi leggermente diverse, aggiungere a inittab UNA delle seguenti righe, sulla base del getty disponibile sul proprio sistema.
Getty: co:2345:respawn:/sbin/getty ttyS0 CON9600 vt102
Agetty: co:2345:respawn:/sbin/agetty -h -t 60 ttyS0 9600 vt102
Mgetty: co:2345:respawn:/sbin/mgetty ttyS0
In mgetty i parametri della seriale vanno aggiunti nel file di configurazione /etc/mgetty+sendfax/mgetty.config:
port ttyS0
speed 9600
direct yes
data-only yes
toggle-dtr yes
need-dsr yes
port-owner root
port-group root
port-mode 600
login-prompt @ \P login:\040
login-time 60
term vt102

Notare che mingetty, che viene fornito di default su alcune distribuzioni, non ha il supporto per linee seriali, per cui è necessario usare una delle alternative sopra riportate.

Note
- L'accesso diretto con utente root solitamente non è possibile di default su una linea seriale, se lo si vuole permettere (per evitare che l'amministratore debba prima loggarsi con un utente normale e poi fare su) si deve aggiungere la riga /dev/ttyS0 al file /etc/securetty (che appunto indica al sistema quali sono i terminali ritenuti sicuri per un accesso root diretto).
- Su sistemi RedHat Linux è opportuno disabilitare la possibilità da parte di Kudzu di disabilitare i parametri preimpostati sulla porta seriale durante la fase di riconoscimento dell'hardware. In /etc/sysconfig/kudzu impostare: SAFE=yes

Privacy Policy