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.
Questa sezione presuppone che stai usando una configurazione di default e vuoi solamente una veloce panoramica su come abilitare una console seriale.
Connetti il cavo seriale alla COM1 e al terminale.
Per vedere tutti i messaggi di boot sulla console seriale, dai il comando seguente mentre sei loggato come superuser:
# echo 'console="comconsole"' >> /boot/loader.conf
Modifica il file /etc/ttys e cambia off in on e dialup in vt100 per l'entry ttyd0. Altrimenti non verrà chiesta la password per connettersi via console seriale, con il risultato di creare un potenziale buco di sicurezza.
Riavvia il sistema per vedere se i cambiamenti funzionano.
Se si necessita di una diversa configurazione, esiste una spiegazione maggiormente dettagliata nella sezione Sezione 24.6.3.
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 24.2.2 per una discussione sui cavi seriali.
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: Imposta la tastiera su “Non installata” nel setup del BIOS. Sarai ancora in grado di usare la tastiera. Tutto quel che fa è dire al BIOS di non verificare la presenza di una tastiera all'accensione. Il tuo BIOS non dovrebbe segnalare 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.
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).
Assicurati che il file di configurazione del tuo kernel abbia i parametri appropriati impostati per la COM1 (sio0).
I parametri rilevanti sono:
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.
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. Il parametro 0x20 deve essere usato insieme al
0x10
.
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.
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.
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 24.6.6.
Qui c'è il sommario delle varie impostazioni discusse in questa sezione e la console eventualmente selezionata.
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 |
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 |
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 24.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
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.
Ottieni i sorgenti del kernel. (Guarda il Capitolo 23)
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.
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.
Ricompila ed installa il blocco di avvio ed il loader:
# cd /sys/boot # make clean # make # make install
Ricompila ed installa il kernel.
Scrivi il blocco di avvio sul disco di avvio con disklabel(8) ed avvia con il nuovo kernel.
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
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.
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.
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.
Sarà necessario ricompilare il loader per usare una porta seriale differente da sio0 per la console seriale. Segui la procedura descritta nella Sezione 24.6.5.2.
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>.