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, La Procedura di Avvio di FreeBSD, 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, «Configurazione della Console Seriale».
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, «Cavi e Porte» 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ò.
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.
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:
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. 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.
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.
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, «Cambiamento della Console dal Loader».
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, «Utilizzo di una Porta Seriale Differente da
sio0
per la Console» 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, Lo Stato dell'Arte)
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.
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, «Utilizzo di una Porta Seriale Differente da
sio0
per la Console».
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>.