20.6 Impostazione della Console Seriale

Contributo di Kazutaka YOKOTA. Basato su un documento di Bill Paul.

20.6.1 Introduzione

FreeBSD ha la capacità di avviare un sistema con soltanto un terminale stupido su porta seriale come console. Una configurazione simile dovrebbe essere utile per due tipi di persone: amministratori di sistema che desiderano installare FreeBSD su macchine che non hanno tastiera o monitor connesso, e sviluppatori che vogliono effettuare il debug del kernel o dei driver.

Come descritto nel Capitolo 12, FreeBSD implementa un avviamento composto da tre stadi. I primi due stadi sono nel blocco di avvio che viene immagazzinato all'inizio della slice di FreeBSD sul disco d'avvio. Il blocco di avvio poi carica ed avvia il loader (/boot/loader) come terzo stadio.

Per poter impostare la console seriale devi configurare il codice del blocco di avvio, il codice del loader ed il kernel.

20.6.2 Configurazione della Console Seriale, Versione Essenziale

Questa sezione presuppone che stai usando una configurazione di default, conosci come connettere le porte seriali e vuoi solamente una veloce panoramica su come abilitare una console seriale. Se incontri difficoltà in questa procedura, consulta una spiegazione più esaustiva di tutte le opzioni e delle configurazioni avanzate nella sezione Sezione 20.6.3.

  1. Connetti la porta seriale. La console seriale sarà sulla COM1.

  2. Esegui echo -h > /boot.config per abilitare la console seriale per il kernel e per il boot loader.

  3. Modifica il file /etc/ttys e cambia off in on per l'entry ttyd0. Questo abilita il prompt di login sulla console seriale, che rispecchia la tipica configurazione delle console video.

  4. shutdown -r now riavvierà il sistema con la console seriale abilitata.

20.6.3 Configurazione della Console Seriale

  1. Preparazione di un cavo seriale.

    Avrai bisogno di un cavo null-modem o di un cavo seriale standard ed un adattatore null-modem. Guarda Sezione 20.2.2 per una discussione sui cavi seriali.

  2. Scollegamento della tastiera.

    La maggior parte dei sistemi PC verifica la presenza di una tastiera durante il Power-On Self-Test (POST) e dà un errore se la tastiera non viene rilevata. Alcune macchine si lamentano parecchio per la mancanza della tastiera e non proseguono l'avvio finché non viene collegata.

    Se il tuo computer si lamenta per questo errore, ma si avvia lo stesso, allora non devi fare nulla di speciale. (Alcune macchine con BIOS Phoenix semplicemente dicono “Keyboard failed” e continuano ad avviarsi normalmente).

    Se il tuo computer rifiuta di avviarsi senza la tastiera allora dovrai configurare il BIOS affinché ignori questo errore (se possibile). Consulta il manuale della tua scheda madre per maggiori dettagli su come fare ciò.

    Suggerimento: Impostare la tastiera su “Non installata” nel setup del BIOS non significa che non potrai usare la tastiera. Tutto quel che fa è dire al BIOS di non verificare la presenza di una tastiera all'accensione, in modo che non segnali che la tastiera non è collegata. Puoi lasciare la tastiera collegata anche con questa opzione impostata a “Non installata” e la tastiera funzionerà lo stesso.

    Nota: Se il tuo sistema ha un mouse PS/2®, le possibilità di dover scollegare il mouse allo stesso modo della tastiera sono alte. Questo perché i mouse PS/2 condividono dell'hardware con la tastiera e lasciando il mouse collegato potresti ingannare la verifica della tastiera facendogli credere che sia ancora presente. Si dice che il sistema Gateway 2000 Pentium 90 MHz con BIOS AMI funzioni così. In generale, questo non è un problema perché il mouse non è comunque particolarmente utile senza la tastiera.

  3. Collegamento di un terminale stupido alla COM1 (sio0).

    Se non possiedi un terminale stupido, puoi usare un vecchio PC/XT con un programma per modem, o la porta seriale di un altra macchina UNIX®. Se non hai una COM1 (sio0), trovane una. Attualmente, non c'è altro modo di scegliere una porta diversa dalla COM1 per i blocco di avvio senza doverlo ricompilare. Se stai già usando la COM1 per un altro dispositivo, dovrai rimuoverlo temporaneamente ed installare un nuovo blocco di avvio ed un nuovo kernel una volta che FreeBSD sia funzionante. (Si assume che la COM1 sia sempre disponibile su un server di file/calcolo/terminali; se davvero hai bisogno della COM1 per qualcos'altro (e non puoi passare quel qualcosa alla COM2 (sio1)), allora probabilmente non dovresti nemmeno avere a che fare con tutto questo in primo luogo).

  4. Assicurati che il file di configurazione del tuo kernel abbia i parametri appropriati impostati per la COM1 (sio0).

    I parametri rilevanti sono:

    0x10

    Abilita il supporto alla console per questa unità. Gli altri parametri di console sono ignorati se non è fissato questo. Attualmente, al massimo un'unità può avere il supporto alla console; verrà preferita la prima (secondo l'ordine nel file di configurazione) con questo parametro. Questa opzione non renderà la porta seriale la console. Imposta il parametro seguente o usa l'opzione -h descritta più in basso, insieme a questa impostazione.

    0x20

    Forza questa unità ad essere la console (a meno che sia presente un'altra console con priorità più alta), trascurando l'opzione -h discussa precedentemente. Questo parametro rimpiazza l'opzione COMCONSOLE in FreeBSD versione 2.X. Il parametro 0x20 deve essere usato insieme al 0x10.

    0x40

    Riserva questa unità (insieme a 0x10) e rende l'unità indisponibile per l'accesso normale. Non dovresti impostare questo parametro sull'unità della porta seriale che desideri usare come console seriale. L'unico uso di questo parametro è per designare l'unità per il debug remoto del kernel. Guarda il Developer's Handbook per maggiori informazioni sul debugging remoto.

    Nota: In FreeBSD 4.0 o successivo, la semantica del parametro 0x40 è leggermente differente e c'è un altro parametro per specificare una porta seriale per il debug remoto.

    Esempio:

    device sio0 at isa? port IO_COM1 flags 0x10 irq 4
    

    Guarda la pagina man sio(4) per maggiori dettagli.

    Se i parametri non sono stati impostati, sarà necessario eseguire UserConfig (su una console differente) o ricompilare il kernel.

  5. Creazione di boot.config nella directory radice della partizione a nel disco di avvio.

    Questo file istruirà il codice del blocco di avvio su come vuoi avviare il sistema. Per poter attivare la console seriale, avrai bisogno di una o più delle seguenti opzioni--se vuoi opzioni multiple, includile tutte sulla stessa linea:

    -h

    Passa dalla console interna a quella seriale. Puoi usarla per cambiare i dispositivi console. Ad esempio, se avvii dalla console interna (video), puoi usare -h per dirigere il loader ed il kernel in modo che usino la porta seriale come dispositivo per la console. Alternativamente, se avvii da porta seriale, puoi usare l'opzione -h per dire al loader ed al kernel di usare lo schermo come console.

    -D

    Passa da una configurazione singola a una duplice. Nella configurazione singola la console sarà o quella interna (il display video) o la porta seriale, a seconda dello stato dell'opzione -h già descritta. Nella configurazione duplice, sia il display video che la porta seriale diventeranno la console allo stesso momento, senza curarsi dello stato dell'opzione -h. Ad ogni modo, nota che questa configurazione duplice ha effetto solo durante l'esecuzione del blocco di avvio. Una volta che il loader ha assunto il controllo, la console specificata da -h diventa l'unica.

    -P

    Fa sì che il blocco di avvio verifichi la presenza della tastiera. Se non ne viene rilevata nessuna, le opzioni -D e -h vengono impostate automaticamente.

    Nota: A causa delle costrizioni relative allo spazio nelle versioni attuali del blocco di avvio, l'opzione -P è in grado di riconoscere solo le tastiere estese. Le tastiere con meno di 101 tasti (e senza i tasti F11 e F12) potrebbero non essere rilevate. Le tastiere su alcuni computer portatili potrebbero non essere rilevate a causa di questa limitazione. Se questo è il caso del tuo sistema, devi abbandonare l'opzione -P. Sfortunatamente non c'è nessun metodo per aggirare questo problema.

    Usa l'opzione -P per selezionare la console automaticamente, o l'opzione -h per attivare la console seriale.

    Puoi includere altre opzioni come descritte in boot(8).

    Le opzioni, eccetto -P, verranno passate al loader (/boot/loader). Il loader determinerà quale tra il video interno o la console seriale debba diventare la console esaminando lo stato dell'opzione -h. Ciò significa che se specifichi l'opzione -D ma non la -h in /boot.config, puoi usare la porta seriale come console soltanto durante l'esecuzione del blocco di avvio; il loader userà il video interno come console.

  6. Avviamento della macchina.

    Quando avvii la tua macchina FreeBSD, il blocco di avvio scriverà il contenuto di /boot.config sulla console. Ad esempio:

    /boot.config: -P
    Keyboard: no
    

    La seconda linea appare solo se metti l'opzione -P in /boot.config ed indichi la presenza/assenza della tastiera. Questo messaggio va alla console seriale o a quella interna, o a entrambe, a seconda dell'opzione in /boot.config.

    Opzioni I messaggi vanno a
    nessuna console interna
    -h console seriale
    -D console seriale ed interna
    -Dh console seriale ed interna
    -P, tastiera presente console interna
    -P, tastiera assente console seriale

    Dopo i messaggi precedenti, ci sarà una piccola pausa prima che il blocco di avvio continui nel caricamento del loader e prima che ulteriori messaggi vengano scritti sulla console. In circostanze normali, non hai necessità di interrompere il blocco di avvio, ma potresti volerlo fare per verificare che tutto sia impostato correttamente.

    Premi un tasto qualsiasi, differente da Invio, alla console per interrompere il processo di avvio. Il blocco di avvio aspetterà ulteriori azioni. Dovresti vedere qualcosa del genere:

    >> FreeBSD/i386 BOOT
    Default: 0:ad(0,a)/boot/loader
    boot:
    

    Verifica se il messaggio precedente appare sulla console seriale o su quella interna o su entrambe, secondo le opzioni poste in /boot.config. Se il messaggio appare nella console corretta, premi Invio per continuare il processo di avvio.

    Se vuoi la console seriale ma non riesci a vedere il prompt sul terminale seriale, qualcosa è sbagliato nelle tue impostazioni. Nel frattempo, scrivi -h e premi Invio (se possibile) per dire al blocco di avvio (e al loader e al kernel) di scegliere la porta seriale per la console. Una volta che il sistema è attivo, torna indietro e verifica cosa è andato storto.

Dopo che il loader è stato caricato e ti trovi nel terzo stadio del processo di avvio puoi ancora passare dalla console interna alla console seriale impostando le variabili d'ambiente appropriate nel loader. Guarda la Sezione 20.6.6.

20.6.4 Sommario

Qui c'è il sommario delle varie impostazioni discusse in questa sezione e la console eventualmente selezionata.

20.6.4.1 Caso 1: Imposti il Flag 0x10 per sio0

device sio0 at isa? port IO_COM1 flags 0x10 irq 4
Opzioni in /boot.config Console durante i blocco di avvio Console durante il loader Console nel kernel
niente interna interna interna
-h seriale seriale seriale
-D seriale ed interna interna interna
-Dh seriale ed interna seriale seriale
-P, tastiera presente interna interna interna
-P, tastiera assente seriale ed interna seriale seriale

20.6.4.2 Caso 2: Imposti il Flag 0x30 per sio0

device sio0 at isa? port IO_COM1 flags 0x30 irq 4
Opzioni in /boot.config Console durante i blocco di avvio Console durante il loader Console nel kernel
niente interna interna seriale
-h seriale seriale seriale
-D seriale ed interna interna seriale
-Dh seriale ed interna seriale seriale
-P, tastiera presente interna interna seriale
-P, tastiera assente seriale ed interna seriale seriale

20.6.5 Consigli per una Console Seriale

20.6.5.1 Impostazione di una Velocità Maggiore della Porta Seriale

Di default, le impostazioni della porta seriale sono: 9600 baud, 8 bit, nessuna parità, ed 1 bit di stop. Se desideri cambiare la velocità, avrai bisogno di ricompilare almeno il blocco di avvio. Aggiungi la linea seguente a /etc/make.conf e compila il nuovo blocco di avvio:

BOOT_COMCONSOLE_SPEED=19200

Guarda Sezione 20.6.5.2 per istruzioni dettagliate su come costruire e installare nuovi blocchi di avvio.

Se la console seriale è configurata in qualche altra maniera invece di essere selezionata all'avvio con -h, o se la console seriale usata dal kernel è differente da quella usata dal blocco di avvio, allora dovrai aggiungere anche le opzioni seguenti al file di configurazione del kernel e compilare un nuovo kernel:

options CONSPEED=19200

20.6.5.2 Utilizzo di una Porta Seriale Differente da sio0 per la Console

Usare una porta seriale differente da sio0 come console richiede un po' di ricompilazione. Se vuoi usare un'altra porta seriale per qualche motivo, ricompila il blocco di avvio, il loader ed il kernel come segue.

  1. Ottieni i sorgenti del kernel. (Guarda il Capitolo 19)

  2. Modifica /etc/make.conf e imposta BOOT_COMCONSOLE_PORT all'indirizzo della porta che vuoi usare (0x3F8, 0x2F8, 0x3E8 o 0x2E8). Solo i dispositivi da sio0 a sio3 (COM1 a COM4) possono essere usati; le schede seriali multiporta non funzioneranno. Non sono necessarie impostazioni per gli interrupt.

  3. Crea un file di configurazione del kernel personalizzato e aggiungi i flag appropriati per la porta seriale che intendi usare. Ad esempio, se vuoi fare di sio1 (COM2) la console:

    device sio1 at isa? port IO_COM2 flags 0x10 irq 3
    

    o

    device sio1 at isa? port IO_COM2 flags 0x30 irq 3
    

    I flag di console per le altre porte seriali non dovrebbero essere impostati.

  4. Ricompila ed installa il blocco di avvio ed il loader:

    # cd /sys/boot
    # make
    # make install
    
  5. Ricompila ed installa il kernel.

  6. Scrivi il blocco di avvio sul disco di avvio con disklabel(8) ed avvia con il nuovo kernel.

20.6.5.3 Accesso al Debugger DDB dalla Linea Seriale

Se desideri entrare nel debugger del kernel dalla console seriale (utile per diagnostiche remote, ma anche molto pericoloso se generi un BREAK spurio sulla porta seriale!) allora dovrai compilare il tuo kernel con le opzioni seguenti:

options BREAK_TO_DEBUGGER
options DDB

20.6.5.4 Come Ottenere un Prompt di Login sulla Console Seriale

Anche se questo non è necessario, potresti desiderare un prompt di login sulla linea seriale, ora che puoi vedere i messaggi di avvio e puoi accedere a sessioni di debug del kernel attraverso la console seriale. Qui è spiegato come fare.

Apri il file /etc/ttys con un editor e trova queste linee:

ttyd0 "/usr/libexec/getty std.9600" unknown off secure
ttyd1 "/usr/libexec/getty std.9600" unknown off secure
ttyd2 "/usr/libexec/getty std.9600" unknown off secure
ttyd3 "/usr/libexec/getty std.9600" unknown off secure

I dispositivi da ttyd0 a ttyd3 corrispondono a COM1 fino a COM4. Cambia off a on per la porta desiderata. Se hai cambiato la velocità della porta seriale, dovrai cambiare std.9600 affinché corrisponda all'impostazione corrente, ad es. std.19200.

Potresti anche desiderare cambiare il tipo di terminale da unknown al tipo effettivo del tuo terminale seriale.

Dopo avere modificato il file, devi dare un kill -HUP 1 affinché i cambiamenti abbiano effetto.

20.6.6 Cambiamento della Console dal Loader

Le sezioni precedenti hanno descritto come impostare la console seriale lavorando sul blocco di avvio. Questa sezione mostra come specificare a console inserendo alcuni comandi ed alcune variabili di ambiente nel loader. Quando il loader verrà invocato al terzo stadio del processo di avvio, dopo il blocco di avvio, le impostazioni nel loader prenderanno il posto di quelle nel blocco di avvio.

20.6.6.1 Impostazione della Console Seriale

Puoi facilmente specificare al loader ed al kernel di usare la console seriale scrivendo una sola riga in /boot/loader.rc:

set console=comconsole

Ciò sarà efficace in ogni caso, qualunque siano le impostazioni nel blocco di avvio discusse nella sezione precedente.

Sarebbe meglio mettere la linea precedente come prima linea di /boot/loader.rc in modo da vedere i messaggi sulla console seriale il prima possibile.

Altrimenti, puoi specificare la console interna come:

set console=vidconsole

Se non imposti la variabile di ambiente console del loader, quest'ultimo, e conseguentemente anche il kernel, useranno una console qualunque indicata dall'opzione -h nel blocco di avvio.

Nelle versioni 3.2 o successive, è possibile specificare la console in /boot/loader.conf.local o /boot/loader.conf, piuttosto che in /boot/loader.rc. Con questo metodo il tuo /boot/loader.rc dovrebbe apparire così:

include /boot/loader.4th
start

Poi, crea /boot/loader.conf.local ed aggiungi lì la linea seguente.

console=comconsole

o

console=vidconsole

Guarda loader.conf(5) per maggiori informazioni.

Nota: Al momento il loader non ha un'opzione equivalente alla -P del blocco di avvio, e non c'è possibilità di scegliere automaticamente la console interna e la console seriale basandosi sulla presenza di una tastiera.

20.6.6.2 Utilizzo di una Porta Seriale Diversa da sio0 per la Console

Sarà necessario ricompilare il loader per usare una porta seriale differente da sio0 per la console seriale. Segui la procedura descritta nella Sezione 20.6.5.2.

20.6.7 Avvertimento

L'idea di tutto questo è di permettere alla gente di mettere su server dedicati che non abbiano bisogno di hardware grafico o di tastiere. Sfortunatamente, mentre la maggior parte dei sistemi ti permetteranno di avviare senza tastiera, ce ne sono alcuni che non ti permetteranno di partire senza un adattatore grafico. Le macchine con BIOS AMI possono essere configurate per partire senza adattatori grafici cambiando semplicemente il valore di “graphics adapter” nella configurazione CMOS a “Not installed”.

Ad ogni modo, molte macchine non supportano questa opzione e si rifiuteranno di avviarsi se non si ha hardware grafico nel sistema. Con queste macchine, avrai bisogno di lasciare un qualche tipo di scheda grafica attaccata, (anche una scheda monocromatica di recupero) sebbene non avrai necessità di collegare un monitor. Potresti anche tentare di installare un BIOS AMI.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.