Installazione debian GNU/Hurd su hd

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca

Dall'articolo e-zine GNU/Hurd


Installazione debian GNU/Hurd su hd

Introduzione

Nell'ultimo numero abbiamo visto come installare debian GNU/Hurd sull'emulatore QEMU. In questo articolo vedremo come è possibile installare questa distribuzione sul proprio hd. Giusto per precisare, GNU/Hurd non è un kernel... qualcuno magari incomincerà ad aggrottare la fronte e domandarsi se sta leggendo un mare d'idiozie, ma intorno a questo termine c'è sempre un po di confusione. Incominciamo facendo, allora, un po' di luce sui vari termini comunemente utilizzati nell'ambito informatico (libero).

Terminologia

Dagli inizi degli anni '90, con l'avvento del kernel Linux, vari nuovi termini sono entrati in circolazione e per la maggior parte per quanto riguarda la stampa, spesso e volentieri si commettono errori utilizzando questi termini in modo incorretto:

«... il sistema operativo Linux...»
«... il kernel GNU/Linux...»
«... la Free Software Foundation, anche chiamata GNU...»
«... un Hacker ha distrutto il sito del comune...»
«... il kernel GNU/Hurd...»
«...»

solo per citare alcuni esempi (N.B.: tutto quanto scritto sopra non è corretto!). Definiamo dunque i seguenti termini:

  • Linux: si tratta di un kernel, non di un sistema operativo. Il kernel è la parte del sistema operativo che comunica con l'hardware per poterlo utilizzare. Facendo un esempio, se una persona è il sistema operativo, il kernel potrebbe rappresentare il cervello: coordina i movimenti, mantiene la temperatura costante (con l'aiuto di altre utility), registra gli eventi, li interpreta e interagisce di conseguenza o comunica ad altre utility gli eventi stessi (ad esempio, il cervello avverte una fiamma sulla pelle, la interpreta come evento dannoso alla struttura stessa della pelle, la comunica ad un altro centro come dolore, da cui verrà stimolato il sistema motorio per allontanarsi dalla fiamma). Come si può indovinare dalla similitudine, come il cervello è solo una piccola parte del corpo umano, il kernel è solo una piccola parte del sistema operativo.
  • GNU/Linux: è un sistema operativo. Il progetto GNU [v. sotto] proponeva un sistema operativo privo però del Kernel; dopo la nascita di Linux (1991), il progetto GNU prese come kernel, il kernel Linux di Linus Torvalds. Il termine GNU/Linux venne introdotto dopo la nascita di debian nel 1993 (v. numero 0, la nascita di debian). Le attuali "versioni" del sistema operativo GNU/Linux vengono comunemente chiamate "distribuzioni". Nonostante tutte abbiano gli stessi strumenti di base (il kernel, il compilatore, il debugger, le librerie [almeno una parte], ...) si differenziano per la gestione del software, i sistemi d'installazione, l'ambiente grafico, i tools di configurazione, l'hardware supportato di base, ... Data la moltitudine di versioni in circolazione (v. distrowatch.com), alcune di esse si basano su altre (fra i tanti esempi, ubuntu si basa su debian).
  • Free Software Foundation: è la società fondata da Richard M. Stallmann nel 1984. Nasce con lo scopo di supportare il progetto GNU. Quest'ultimo, viene lanciato dallo stesso Stallmann nel 1983, con l'intento di sviluppare un sistema operativo completamente libero.
  • Hacker: non potrà certo un sotto-assistente apprendista Hacker come il sottoscritto spiegarvi il significato di questo termine... Con tutto il rispetto richiesto posso dirvi in poche parole che un Hacker è una persona che non si accontenta di utilizzare uno strumento per l'utilizzo per il quale lo strumento è stato previsto. L'Hacker deve studiarne a fondo il funzionamento e lo adatterà poi alle proprie esigenze, mettendo a disposizione di tutta la comunità le sue ricerche. Magari sarà poi lui stesso ad inventare un nuovo strumento per l'utilizzo in questione. L' Hacker ha un'etica tutta sua (si veda Hackers: gli eroi della rivoluzione informatica, Steven Levy, 1984) e non farebbe mai qualcosa a unico scopo vandalico o per mettersi al centro dell'attenzione (sempre senza uno scopo preciso); queste due ultime caratteristiche sono invece tipiche del Cracker. Quest'ultimo non rispetta nessuna etica e spesso gli "attacchi" sferrati sono a puro scopo esibizionistico. La stampa attribuisce quasi sempre il termine Hacker a questa classe di persone.
  • GNU/Hurd: da ultimo, ma non per ultimo mettiamo luce su questo termine che è alla base dell'articolo. Come abbiamo già capito con Linux, non sarà difficile capire che GNU/Hurd è un sistema operativo basato su GNU e il kernel Hurd. Hurd non è però quel bel "blocco" di Kernel monolitico modulare come Linux, ma un sistema di server basato sul mikrokernel mach. Alla fine degli anni '80, quando il progetto GNU stava per implementare l'ultimo pezzo del "Puzzle" del sistema operativo (il kernel appunto), andavano di "moda" i mikrokernel. A differenza di un kernel monolitico, come lo è Linux, il mikrokernel si contraddistingue per implementare solo i servizi di base che fanno da tramite fra hardware e software (il termine micro- non è riferito alla grandezza, ma appunto all'interazione minimale con l'hardware). Tutti gli altri servizi di sistema quali ad esempio i file system, i protocolli di rete, i drivers (compresi nel kernel monolitico), sono svolti nello spazio dell'utente. Nacque così Hurd (acronimo di HIRD of Unix-Replacing Daemons e HIRD a sua volta HURD of Interfaces Representing Depth): un sistema di server, i quali svolgono i compiti antecedentemente citati nello spazio utente interagendo con il mikrokernel mach. All'inizio degli anni '90 Hurd non era ancora in grado di funzionare in modo stabile e non mostrando possibilità di miglioramento a breve termine, il sistema GNU adottò la creazione di Linus Torvalds come kernel.

Installazione

Per installare debian GNU/Hurd abbiamo in principio due possibilità: utilizzare crosshurd a partire da debian GNU/Linux o utilizzare i CD d'installazione reperibili dal sito: http://ftp.debian-ports.org/debian-cd/hurd-i386/ che abbiamo già utilizzato nel numero 0 per l'installazione di debian GNU/Hurd su QEMU. Per l'installazione ci servirà il primo CD (prelevandolo dall'ultima versione disponibile Ki, dove i = no. versione [attualmente i = 16]).

Warning.png ATTENZIONE
GNU/Hurd, o meglio il microkernel mach, funziona solo su dischi IDE e in una partizione situata nei primi 128 Gb del disco (v. sotto)!


Per poterlo utilizzare con dischi SATA è necessario attivare nel BIOS la modalità di compatibilità che farà funzionare il SATA più o meno come un IDE. Inoltre, il microkernel mach ha difficoltà a leggere i blocchi del disco dopo ca. 128 Gb (con grandezza dei blocchi a 4096 byte); questo vuol dire che in un disco più grande di 128 Gb dovremo installare debian GNU/Hurd in una partizione che si situa prima del limite citato (poco importa invece se in una partizione primaria o logica). Ciò è dovuto al LAB28 (Logical block addressing): un sistema per indicizzare i vari settori del disco e dunque poterlo leggere.

Installazione con crosshurd

Crosshurd è un software (disponibile nei repository ufficiali) che utilizza la rete per scaricare i pacchetti necessari per l'installazione di debian GNU/Hurd in una partizione di nostra scelta. Per installare il pacchetto utilizzeremo il nostro gestore preferito (nell'esempio aptitude):

# aptitude install crosshurd

Creazione partizione e file system

Se non lo abbiamo ancora fatto dovremo poi creare una partizione per installare il sistema. Per fare ciò utilizzeremo il nostro tool preferito, come ad esempio gparted, cfdisk, ... Oltre a ricordarci di creare la partizione prima dei fatidici 128 Gb (v. sopra) sceglieremo come ID 83 (partizione Linux) e sceglieremo di lasciarla non-formattata (in quanto per installare il sistema ci servirà un file system ext2 con la grandezza dei blocchi di 4096 e quella dei nodi di 128 byte). Mi sembra inutile dire che prima di qualsiasi operazione riguardante la creazione/modifica/rimozione di qualsiasi partizione, un back up è praticamente d'obbligo.

Per creare il file system necessario possiamo utilizzare mke2fs. Digiteremo allora:

# mke2fs -o hurd /dev/hdxy

dove x rappresenta la lettera corrispondente al disco che vogliamo utilizzare e y il numero della partizione (ad es. hda4).

Lanciamo crosshurd

Prima di quest'operazione dovremo montare la partizione appena creata in una directory. Comunemente si utilizza la directory gnu nella directory di root:

# mkdir /gnu

A questo punto possiamo montare la partizione antecedentemente creata:

# mount /dev/hdxy /gnu

x e y hanno il significato come sopra (es. hda4).

Prima di lanciare crosshurd è bene andare a modificare i mirror che utilizzerà questo programma per scaricare i pacchetti di debian GNU/Hurd. Questi sono presenti nel file /etc/crosshurd/sources.list/gnu. Con il nostro editor di testo preferito potremo modificare i mirror, andando a sceglierne uno nelle nostre vicinanze (ad es. it).
Ci sposteremo ora nella directory appena creata e lanceremo crosshurd:

cd /gnu; crosshurd

Lanciato il programma verranno scaricati i pacchetti per l'installazione di debian GNU/Hurd in /gnu. Durante l'installazione ci verranno poste quattro opzioni:

  1. What is the target direcotry? -> risponderemo con: /gnu
  2. Target Debian System? -> selezioneremo: gnu GNU/Hurd
  3. Target CPU? -> risponderemo con: i486
  4. Create a /usr symlink? -> risponderemo con: yes

Infine, dopo l'estrazione di tutti i pacchetti nella cache, verranno ancora copiati i file di configurazione /etc/hostname, /etc/hosts e /etc/resolv.conf. A causa di un attuale bug dovremo ancora modificare il file native-install' nel modo seguente; editeremo il file con un editor di testo qualsiasi e portandoci nella seguente parte (ho riportato il numero delle righe):

158    # install base packages
159    for i in /var/cache/apt/archives/*.deb ; do
160	    dpkg --force-auto-select --force-overwrite --force-confold \
161	    --skip-same-version --unpack $i
162    done
163    dpkg  --force-confold --skip-same-version  --configure -a
164    mv $ssd{.real,}

togliendo alla riga 160 l'opzione --force-auto-select ottenendo:

158    # install base packages
159    for i in /var/cache/apt/archives/*.deb ; do
160	    dpkg --force-overwrite --force-confold \
161	    --skip-same-version --unpack $i
162    done
163    dpkg  --force-confold --skip-same-version  --configure -a
164    mv $ssd{.real,}

Vi ricordo che l'attuale articolo si basa su crosshurd 1.7.33; nelle versioni future è possibile che venga cambiato qualcosa. Una controllata al native-install è comunque d'obbligo.

Ancora GRUB e si parte

Prima di poter infine lanciare il nostro nuovo sistema operativo per la sua installazione dovremo aggiungerlo al menu di GRUB per poterlo avviare. Per fare ciò editeremo il file /boot/grub/menu.lst aggiungendo le seguenti linee in fondo a quanto già scritto (attenzione alla partizione d'avvio, v. sotto):

title 		Debian GNU/Hurd
root 		(hd0,3)
kernel 		/boot/gnumach.gz root=device:hd0s4
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)
module 		/lib/ld.so.1 /hurd/exec $(exec-task=task-create)

title 		Debian GNU/Hurd     (single-user mode)
root 		(hd0,3)
kernel 		/boot/gnumach.gz root=device:hd0s4 -s
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)
module 		/lib/ld.so.1 /hurd/exec $(exec-task=task-create)

prestando attenzione a scrivere i moduli su una riga sola. K16 è l'attuale versione di debian GNU/Hurd, se la versione dovesse cambiare dovrete correggere questo valore, anche se si tratta solo del nome che apparirà nel menu di GRUB. Per quanto riguarda la partizione d'avviare, root è definito in GRUB come per una partizione con GNU/Linux. Nell'esempio riportato qui sopra, la partizione d'avviare sarà hda4: per GRUB sarà hd(0,3)(del primo disco [0], la quarta partizione [3, si incomincia a contare da 0 in tutti e due i casi [disco e partizione]), per mach (Hurd) sarà hd0s4 (del primo disco [0], la quarta partizione [s4, si incomincia a contare in questo caso da 1, come per GNU/Linux aggiungendo però una "s" davanti al numero della partizione]).

Potremo riavviare ora la nostra macchina? Quasi, o meglio, sì se avete 768 Mb di RAM o meno ancora. Se avrete invece della RAM superiore a questo limite bisognerà ricompilare gnumach aggiungendo della memoria virtuale per poter avviare il mikrokernel. Per fare ciò si passi al prossimo capitolo dopo l'"installazione di debian GNU/Hurd".

Installazione debian GNU/Hurd

Se abbiamo svolto tutte le antecedenti operazioni in modo corretto, all'avvio della macchina, al menu di GRUB sceglieremo di avviare debian GNU/Hurd in modalità single-user mode. Se tutto è andato bene ci ritroveremo come root in un terminale. Lanceremo allora il comando:

# ./native-install

la relativa difficoltà sarà nell'utilizzare il layout della tastiera americana. Ci servirà sapere che lo slash "/" si trova al posto del trattino "-", mentre il trattino si trova al posto dell'apice "'" (e punto interrogativo "?"). Almeno con il mio Pentium 4 a 1.7 GHz sarà ora opportuno gustarsi una birra ghiacciata. L'installazione necessita un po' di tempo. Alla fine (quando riappare il cursore dopo l'installazione di una miriade di pacchetti e aver selezionato la propria regione e il proprio fuso orario) potremo riavviare la macchina e bootare questa volta il sistema in modalità multi-utente (la prima opzione di GRUB con debian GNU/hurd) trovando il prompt con la console di mach. Per la configurazione del sistema vi rimando al capitolo relativo.

Aumentare la memoria virtuale in gnumach

Se la vostra macchina ha più di 768 Mb di RAM sarà necessario aumentare la memoria virtuale di mach per poter avviare il sistema. Se siete sotto o in parità di questa soglia potrete dimeticarvi questo capitolo. In caso contrario dovremo ricompilarci gnumach.
La compilazione è abbastanza semplice. Per essere precisi effettueremo una cross-compilazione: compileremo dunque comodamente dalla nostra debian GNU/Linux il mikrokernel gnumach (cross-compilare significa compilare un sorgente con un'architettura diversa da quella del binario ottenuto; in questo caso compileremo con GNU/Linux un binario per GNU/Hurd). Tutto ciò che ci servirà saranno i sorgenti di gnumach e un pacchetto specifico, mig (GNU Mach Interface Generator). Se non già installati, ci serviranno anche i build-essential e fakeroot. Per ottenere i sorgenti dovremo dapprima assicurarci di avere i repository deb-src di sid (abbiamo bisogno dell'ultima versione) nel nostro /etc/apt/source.list:

deb-src http://ftp.ch.debian.org/debian/ unstable main

Potremmo infine aggiornare la lista dei pacchetti e scaricare ciò che abbiamo bisogno. Onde evitare di "sparpagliare" directories e files in giro, dal momento che i sorgenti vengono scaricati nella directory dalla quale si lancia il comando, vi consiglierei di creare una directory nella nostra home (ad es. gnumach) dalla quale lanciare poi i seguenti comandi:

# aptitude update
# aptitude install fakeroot build-essential mig
# apt-get source -t unstable gnumach

Per ultimo ci procureremo le eventuali dipendenze di gnumach:

# apt-get build-dep gnumach

All'interno dell'appena creata gnumach troveremo ora:

gnumach-1.3.99.dfsg.cvs20090220
gnumach_1.3.99.dfsg.cvs20090220-1.diff.gz
gnumach_1.3.99.dfsg.cvs20090220-1.dsc
gnumach_1.3.99.dfsg.cvs20090220.orig.tar.gz

A questo punto dovremo cambiare la memoria virtuale di mach. Per fare ciò, Samuel Thibault ci offre questa patch:

Index: b/i386/i386at/model_dep.c
===================================================================
--- a/i386/i386at/model_dep.c	10 Nov 2008 15:18:47 -0000	1.9.2.19
+++ b/i386/i386at/model_dep.c	11 Jun 2009 00:32:30 -0000
@@ -231,10 +232,10 @@ mem_size_init(void)
 	printf("AT386 boot: physical memory from 0x%x to 0x%x\n",
 	       phys_first_addr, phys_last_addr);
 
-	/* Reserve 1/16 of the memory address space for virtual mappings.
+	/* Reserve 1/8 of the memory address space for virtual mappings.
 	 * Yes, this loses memory.  Blame i386.  */
-	if (phys_last_addr > (VM_MAX_KERNEL_ADDRESS / 16) * 15)
-		phys_last_addr = (VM_MAX_KERNEL_ADDRESS / 16) * 15;
+	if (phys_last_addr > (VM_MAX_KERNEL_ADDRESS / 8) * 7)
+		phys_last_addr = (VM_MAX_KERNEL_ADDRESS / 8) * 7;
 
 	phys_first_addr = round_page(phys_first_addr);
 	phys_last_addr = trunc_page(phys_last_addr);

Dopo aver copiato la patch in un file di testo che chiameremo ad esempio bigmem.patch dovremo appunto "patcharla" al mikrokernel. Per fare ciò ci sposteremo nella directory decompressa con i sorgenti (è la prima della lista soprastante, gnumach-1.3.99.dfsg.cvs20090220) e daremo il comando:

# patch -p1 < /locationpatch/bigmem.patch

locationpatch è appunto la locazione dove risiede la patch. Facendo un esempio, se la nostra directory gnumach (quella in cui abbiamo scaricato i sorgenti) è sul desktop, così come bigmem.patch, daremo il comando (sempre da gnumach-1.3.99.dfsg.cvs20090220):

# patch -p1 < ../../bigmem.patch

se tutto sarà funzionato otterremo la scritta:

patching file i386/i386at/model_dep.c

senza nessun seguente errore. A questo punto, sempre dalla directory con i sorgenti (dunque quella nella quale ci troviamo) incominceremo la compilazione dando il comando:

$ dpkg-buildpackage -us -uc -b -rfakeroot

Dopo la compilazione avremo dei binari con il mikrokernel nella directory gnumach (quella creata all'inizio). In ogni caso, non ci interessano. Il mikrokernel compilato per il boot lo troviamo in gnumach/gnumach-1.3.99.dfsg.cvs20090220/debian/gnumach/boot/gnumach.gz. A questo punto potremo montare la partizione nella quale abbiamo installato i pacchetti di debian gnu/hurd con crosshurd e copiare il file citato nella directory di boot. Ad esempio, con la mia partizione (hda4) dove ho lanciato crosshurd e ammettendo che mi trovo nella directory gnumach dell'inizio:

# mount /dev/hda4 /gnu
# cp gnumach-1.3.99.dfsg.cvs20090220/debian/gnumach/boot/gnumach.gz /gnu/boot/gnumach.gz

Avremo così integrato il mikrokernel patchato nel nostro sistema operativo. Potremo ora riavviare la macchina e lanciare il native-install' come nel capitolo precedente "Installazione debian GNU/Hurd".

Se volessimo cambiare la configurazione del mikrokernel (ad esempio solo compilando i drivers necessari al nostro hardware) potrete modificare il file "configure" all'interno di gnumach-1.3.99.dfsg.cvs20090220 basandoci su http://www.gnu.org/software/hurd/gnumach-doc/Configuration.html e rilanciare la compilazione come sopra.

Installazione da CD (Installer)

Prima di tutto occorrerà procurarci il CD d'installazione di debian GNU/Hurd (v. capitolo "Installazione") ed è lo stesso che abbiamo utilizzato nel numero 0 per installare debian GNU/Hurd su QEMU. Una volta scaricata l'immagine disco sarà necessario copiarla su un CD. Fatto anche questo potremo inserire il CD appena scritto nel lettore e riavviare il computer; il tutto dopo le seguenti annotazioni:

  • Il CD d'installazione risale al dicembre del 2007 (attuale versione del CD: K16)
  • L'installer utilizza cfdisk (2.11n) (attuale 2.13) e mke2fs (1.27) (attuale 1.41) per creare, rispettivamente formattare la partizione per GNU/Hurd. Nonostante non abbia avuto problemi con questi tools, il mio consiglio è quello di preparare la partizione con il proprio sistema operativo (v. Creazione partizione e file system) e poi selezionarla dall'installer.

Boot

Riavviato il sistema dal CD (a seconda del BIOS, bisogna avviare il sistema dal CD in modo manuale [premendo tab o F12 o chi per esso], come quando si avvia una live) sceglieremo il boot senza opzioni (basta premere invio). Ci ritroveremo dunque nel menu principale dell'installer, in elegante veste grafica ncurses:

(immagine del boot)

Per chi avesse letto il numero 0, riconoscerà sicuramente il menu. Per procedere nell'installazione effettueremo i seguenti punti:

  1. Configurazione tastiera: scegliendo semplicemente la mappatura voluta (come abbiamo però avuto modo di vedere con l'installazione su QEMU, anche in questo caso quest'operazione non basta per il layout della tastiera [v. "Configurazione"])
  2. Partizionamento Hard Disk: come descritto all'inizio del capitolo, selezionando questo punto avvieremo cfdisk (2.11n) e potremo creare una partizione per il nuovo sistema. Se avete già creato una partizione atta allo scopo potrete ignorare questo punto
  3. Inizializzare e attivare una partizione di swap: abbiamo la possibilità di inizializzare una partizione per la swap o attivare una partizione già inizializzata. In ogni caso, anche selezionando una partizione di swap già formattata, l'installer ci avvisa che i dati della partizione saranno cancellati (inaspettatamente). Essendo la swap, tutto ciò poco ci importa e potremo scegliere l'opzione che vogliamo (questo non "intaccherà" altri sistemi che utilizzano questa partizione di swap, essendo la stessa)
  4. Inizializzare una partizione GNU/Hurd: se non lo abbiamo già fatto possiamo formattare una partizione per Hurd (come già detto, l'installer utilizzerà mke2fs. Altrimenti sceglieremo con l'Alt sotto il punto 5, la nostra partizione antecedentemente formattata.
  5. Inizializzare una partizione GNU/Linux: a meno che dobbiamo installare altre distribuzioni... altrimenti chiaramente ignorato il punto.
  6. Installare il sistema di base: come con l'installazione su QEMU, anche in modo nativo non sono riuscito a trovare un server atto all'installazione dal network. Sceglieremo dunque l'installazione da cdrom, selezionando dapprima da una lista i binary di woody (in modo automatico, dobbiamo solo selezionare list) e definiamo la directory /insmnt/install come archivio per l'installazione di base.
  7. Riavvia: a questo punto dobbiamo riavviare il sistema. Per lanciare la nostra debian GNU/Hurd dobbiamo procedere come dal capitolo "Ancora GRUB e si parte" per inserire i parametri del boot in GRUB.

A differenza dell'installazione con crosshurd, dopo il primo ./native-install (vi ricordo ancora di avviare il sistema in single-user mode e lanciare l'installazione come sopra) il sistema ci chiederà di riavviare la macchina (sempre in single-user mode) e di rilanciare ancora una volta ./native-install per completare l'installazione. Alla fine della seconda "tornata", ci sarà consigliato di riavviare il sistema (questa volta in multi-user mode, il boot "standard"), dare una password a root con passwd (di default viene creato un utente root senza password) e aggiungere la partizione di swap a etc/fstab (vi ricordo che in GNU/Hurd le partizioni si chiamano in un altro modo rispetto a GNU/Linux [v. sopra]).

Se dovessimo ora paragonare questo metodo con crosshurd troveremo vantaggi e svantaggi; se crosshurd è sicuramente il metodo per installare il sistema nel modo più aggiornato, è sicuramente anche il modo più instabile: è basato su sid e dunque in continuo cambiamento, come abbiamo visto con l'attuale bug riguardante il native-install. Con il CD avremo un sistema più vecchiotto, ma essendo sempre uguale non è condizionato da bug. Visto che siamo in "esperimenti", non posso che consigliarvi di provare entrambi i metodi e a voi di scoprire tutte le varianti possibili.

Configurazione

Come abbiamo già visto nel lanciare il native-install il primo ostacolo è il layout della tastiera. In ogni caso, prima di qualsiasi operazione dovremo aver accesso alla rete. Cercheremo dunque di "arrangiarci" imparando la locazione dei tasti nel layout americano (in fondo abbiamo bisogno di pochi caratteri al di fuori delle normali lettere).

N.B.: Hurd non supporta al momento i dispositivi USB. La tastiera e il mouse vengono però "simulati" dal BIOS come PS2 e possono essere dunque utilizzati. In ogni caso, nella mia situazione i tasti "shift" (maiuscolo), "ctrl", "alt", "alt gr" e le frecce mandano in freeze il sistema. Probabilmente dipende dalla tastiera e dal BIOS. Se vi trovaste in questa situazione, per cambiare i vari files di configurazione si può risolvere con un workaround utilizzando ad esempio debian GNU/Linux per montare la partizione di GNU/Hurd e cambiare i vari files con un qualsiasi editor di testo.

Rete

La prima operazione necessaria sarà verificare se il sistema riconosce la nostra scheda di rete. GNU/Hurd denomina tutte queste schede con l'abbreviazione ethX, dove X rappresenta un numero intero partendo da 0. Calcolando che la prima scheda "disponibile" sarà denominata eth0 lanceremo il comando:

devprobe eth0

se la risposta sarà eth0 stampato a video, allora la nostra scheda è riconosciuta. In caso contrario, le cose si complicano e vi consiglio di consultare la pagina relativa del progetto GNU/Hurd (a grandi linee, si tratta di vedere se la scheda è supportata dal mikrokernel, se viene in qualche modo letta e se supportata con qualche driver che si potrà poi compilare in gnumach). Ammettendo che siamo a posto bisognerà ora configurare la rete.

ATTENZIONE: una risposta affermativa a devprobe (ossia, eth0 stampato a video) non presuppone il funzionamento della scheda. Dopo essermi spaccato la testa con una VIA Rhine (02:0a.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 43)), che effettivamente veniva apparentemente riconosciuta dal sistema, ho rifatto i test con una 3com (02:0a.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 74)) riuscendo a configurare la rete senza problemi. Una lista dell'hardware supportato la troviamo qui: http://www.nongnu.org/thug/gnumach_hardware.html#NetworkInterfaceCards, anche se in rete potremmo trovare pareri contrastanti.

DHCP

Fino a poco tempo fa, come avevamo visto con l'installazione del sistema su QEMU, era solo possibile utilizzare un indirizzo statico per accedere alla rete. Attualmente si può però già tentare qualche tentativo utilizzando il dhcp tramite il pacchetto dhcp-client. Crosshurd lo installa di default, se invece avete preferito l'installazione da CD lo dovrete installare "a manina". Fatto ciò daremo il comando, come in GNU/Linux:

dhclient eth0

Al momento purtroppo non ho avuto un esito positivo a causa di un errore (option '--dhcp' not supported...); in ogni caso, vista l'evoluzione costante del sistema un tentativo va provato. Se non funziona, configureremo la rete con un IP statico.

IP statico

In questo modo è possibile configurare la scheda di rete con IP statico tramite pfinet. Per farlo utilizzeremo il comando:

settrans -fgap /server/socket/2 /hurd/pfinet -i eth0 -a <ip_macchina> -g <ip_gateway> -m <subnetmask>

ad esempio

settrans -fgap /server/socket/2 /hurd/pfinet -i eth0 -a 129.168.1.8 -g 192.168.1.1 -m 255.255.255.0

dove l'opzione -fg sta per forzare la rimozione di qualsiasi cosa "attaccata" a /server/socket/2 o /hurd/pfinet, mentre -ap sta per farli funzionare sia in modo attivo che passivo. Il modo passivo manterrà la configurazione valida anche dopo il riavvio della macchina.

Infine dovremo ancora ricordarci, se non già a posto, di configurare correttamente i DNS nel file /etc/resolv.conf. A questo punto potremo finalmente aggiornare il nostro sistema con:

# apt-get update && apt-get dist-upgrade

Swap e CD-ROM

Accessoriati con la rete dovremo ancora attivare la partizione di swap e correggere il nostro /etc/fstab per montare un evetuale CD-ROM. Come prima cosa dovremo creare i device in /dev per la swap e per il CD-ROM. Per quanto riguarda la partizione di swap è possibile utilizzare quella che abbiamo con GNU/Linux. Ammettendo sia hda6 dovremo aggiungere il device hd0s6:

# cd /dev; ./MAKEDEV hd0s6 hd2

A questo punto attiveremo la swap con:

# swapon -a

Per attivarla ora sempre all'avvio, così come per montare un CD-ROM cambieremo infine il nostro fstab come segue (notare che con l'installazione di crosshurd, avremo già una pre-iscrizione per la swap):

# /etc/fstab: static file system information
#
# <file system>	<mount point>	<type>	        <options>	<dump>	<pass>
/dev/hd0s4	/		ext2	        rw		1	1
/dev/hd0s6	none		swap	        sw		0	0
/dev/hd2  	/cdrom  	iso9660fs  	ro,noauto  	1  	1

Layout tastiera

Per utilizzare un layout al di fuori di quello americano, configurato per default, dovremo utilizzare qualche workaround per utilizzare altre mappature. Differenzieremo la console di mach, da quella di hurd.

console mach

In questo caso utilizzeremo la stessa tecnica che avevamo utilizzato con QEMU: il pacchetto clavier. Avendo già spiegato come si installa nel numero 0, vi riassumerò brevemente i passaggi più importanti.

Installare wget: # apt-get install wget Scaricare il pacchetto clavier: # wget http://packages.hurdfr.org/experimental/binary-hurd-i386/clavier_0.2_hurd-i386.deb Installare il pacchetto: # dpkg -i clavier_0.2_hurd-i386.deb Scegliere la mappatura in: /etc/default/keymap Avviare lo script: # /etc/init.d/clavier start Per l'avvio automatico ad ogni boot: # update-rc.d clavier defaults

Per dettagli, ad esempio per adattare la mappatura in caso vi fossero caratteri mal interpretati, vi rimando all'articolo del numero 0: http://e-zine.debianizzati.org/numero_0/?page=52.

console hurd

Essendo la console di mach molto limitata, la console di hurd ci da qualche funzionalità in più, come ad esempio le tty, scambiabili con alt+Fx (ce ne sono 6 come su GNU/Linux). Per avviarla daremo il comando:

# console -d vga -d pc_mouse --repeat=mouse -d pc_kbd --repeat=kbd -d generic_speaker -c /dev/vcs

Per avviarla in modo automatico all'avvio andremo a modificare il file etc/default/hurd-console, cambiando la riga:

# Set this to 'true' to run the Hurd console on bootup.
ENABLE='false'

da false a true. Per il layout è necessario installare il pacchetto console-driver-xkb e sempre nel file sopracitato, disabilitare il driver kbd e abilitare il driver xkb con il --keymap ricercato (sotto ho riportato solo le righe relative).

#KBD='-d pc_kbd'
KBD='-d xkb --keymap it'

In ogni caso, il driver xkb si basa su X11 e al momento dei test non ho avuto riscontri positivi. Come sempre in un sistema esperimentale, un tentativo si può comunque fare.

Installazione server grafico

Il server grafico va lanciato dalla console di hurd. Un buon inizio potrebbe essere quello di installare il metapacchetto xorg con apt-get. Questa operazione è comunque abbastanza delicata e vedremo nel prossimo numero come analizzarla in dettaglio. In ogni caso, l'operazione è possibile e non sarò certo io a fermarvi se vorrete incominciare ;-).

Conclusioni

In questo articolo abbiamo visto le basi per installare debian GNU/Hurd sul nostro hard disk. In particolare abbiamo anche visto come ricompilare gnumach e come procedere per passi per arrivare ad un'installazione attuale e funzionante di questo sistema. Come già anticipato, nel prossimo numero vedremo di installare qualche pacchetto in particolare, così come il server grafico. Al momento divertitevi con il vostro nuovo sistema operativo e per qualsiasi commento non esitate ad iscrivervi sul forum della comunità.

Happy Hacking!

Links

http://www.debian.org/ports/hurd/hurd-install
http://www.debian.org/ports/hurd/hurd-cd
http://uwhug.org.uk/index.pl?Hurd_Installation_Guide
http://www.gnu.org/software/hurd/users-guide/using_gnuhurd.html
http://www.gnu.org/software/hurd/gnumach-doc/Configuration.html
http://www.gnu.org/software/hurd/hurd/running/debian/after_install.html

Special Thanks

Michael Banck, mbanck@debian.org
Samuel Thibault, samuel.thibault@debian.org
Thomas Schwinke, tschwinge@gnu.org
Olaf Buddenhagen, olafBuddenhagen@gmx.net

on the debian-hurd mailinglist