Tutto è pronto al boot per avviare Hurd per la prima colta. Dopo
aver verificato che il boot disk di Grub sia nel drive, riavviamo. Se tutto funziona
bene, apparirà il menu di Grub. Premi c
per la linea di comando di Grub.
Innanzitutto, il root filesystem deve essere impostato. Grub usa una nomenclatura
per le partizioni che è un pò diversa da quella di Linux o di Hurd stesso: sia i
dischi fissi IDE che SCSI sono chiamati (hdN)
. N
è il numero del dispositivo
(partendo da zero) come riportato nel BIOS. Così, Grub non fa
distinzione tra dischi IDE o SCSI. Le partizioni, così come i dischi,
sono anch'esse indicizzate partendo da zero: (hdN,M)
. Se questo non ti piace molto,
rilassati: Grub ti aiuterà.
Per determinare in quale filesystem risiede un particolare file, un metodo
è quello di usare il comando find
. Quando digiti quel comando, Grub
cerca in ogni filesystem quel file specificato e lo stampa quando lo
trova. Ad esempio, qui cerchiamo il kernel, /boot/gnumach.gz
.
grub> find /boot/gnumach.gz (hd0,0)
Come si può vedere, Grub sta indicando che /boot/gnumach.gz
è in
(hd0,0)
. Impostiamo la partizione di root:
grub> root (hd0,0) Filesystem type is ext2fs, partition type 0x83
Ora, GNU Mach deve essere caricato. Per caricarlo deve essere usata almeno un'opzione, per specificare il root filesystem. Questa sarà usata da Hurd stesso.
Le etichette dei dischi in GNU Mach partono da zero. I drives IDE hanno il prefisso
hd
, mentre quelli SCSI iniziano con sd
. Come in Linux,
i drive sono numerati secondo la loro posizione nel controller. Ad esempio,
il disco master primario è hd0
e il secondario slave è hd3
.
Le partizioni usano la stessa convenzione di BSD, e aggiungono sM
al
nome del drive per indicare una data partizione. Nota che M
è indicizzato
a partire da uno, e non zero.
Poichè Hurd non è stato ancora configurato, deve essere eseguito in modalità singolo
utente. Aggiungendo -s
alla linea di comando del kernel si fa questo.
Così, continuando con l'esempio sopra ed assumendo che il drive con il kernel GNU/Mach sia il master sul controller secondario, avremo:
grub> kernel /boot/gnumach.gz -s root=device:hd2s1 [Multiboot-elf, ...]
Quindi, il root filesystem server e l'exec
server devono essere
caricati. Questo si può fare usando le potenzialità modulari di boot di Grub. I
parametri sono la semantica attraverso la quale il kernel passa alcuni importanti
valori ai servers.
grub> module /hurd/ext2fs.static --multiboot-command-line=${kernel-command-line} --host-priv-port=${host-port} --device-master-port=${device-port} --exec-server-task=${exec-task} -T typed ${root} $(task-create) $(task-resume) [Multiboot-module 0x1c4000, 0x2cfe6a bytes] grub> module /lib/ld.so.1 /hurd/exec $(exec-task=task-create) [Multiboot-module 0x494000, 0x27afe bytes]
È importante che ogni stringa module sia separata da una sola riga.
Aggiungiamo questo al file menu.lst
di Grub il prima possibile.
Finalmente, Hurd può essere avviato:
grub> boot
Rilassati e guarda i messaggi scorrere. Questo è molto importante perchè c'è un bug in GNU Mach attraverso il quale premendo un tasto durante il processo di boot si provoca il kernel panic.
Se Hurd fallisce il boot, la causa potrebbe essere dovuto alla condivisione
di IRQs: GNU Mach non funziona molto bene con essi. Puoi verificare questa situazione guardando,
ad esempio, il file /proc/interrupts
sotto GNU/Linux. Inoltre,
poichè GNU Mach non supporta i moduli caricabili per il kernel, la maggior parte
dei drivers sono compilati nel kernel di default. Se possiedi una vecchia
periferica, questo potrebbe costituire un problema: un dispositivo potrebbe rispondere
infatti a dei messaggi diretti ad un' altra periferica. Compilando un nuovo kernel
con solo i drivers per i dispositivi posseduti o usati probabilmente risolverà il problema.
GNU Mach può facilmente essere cross compilato. Se stai usando Debian, prova a dare un'occhiata
al pacchetto gcc-i386-gnu
.
Se questo non ti è di aiuto, esplora la lista delle risorse alla fine di questo documento. Infine, prova a chiedere all'appropriata mailing list.