Port ] [ Debian GNU/Hurd ] [ Notizie ] [ Installazione ] [ CD di Hurd ] [ Documentazione ] [ Sviluppo ] [ Contatti ]

Installazione di Debian GNU/Hurd

Questo documento vuole fornire un insieme di istruzioni semplici e relativamente indolori su come installare e far funzionare Debian GNU/Hurd con il minimo sforzo.

È basato su The Hurd Installation Guide di Neal H. Walfield. Grazie a Neal per il suo contributo.

Notare che alcuni punti di questo manuale sono un po' fastidiosi perché richiedono molto tempo e potrebbero essere causa di problemi. Potrebbe essere preferibile, in particolare se si è agli inizi, l'installazione tramite le immagini dei CD già pronte. Anche se sono vecchie di solito funzionano e in seguito si possono prelevare gli aggiornamenti dai repository online.

1. Introduzione

La distribuzione Debian GNU/Hurd, diversamente dalle distribuzioni di altri sistemi operativi, non ha un bel sistema di installazione. Prima o poi verrà realizzato e forse voi contribuirete al suo progetto o alla sua implementazione, comunque, fino ad allora l'installazione di Debian GNU/Hurd richiede un altro sistema operativo e in particolare un altro sistema Unix-like. Molti utenti hanno riportato installazioni concluse con successo usando varie versioni di GNU/Linux e addirittura con BSD. I requisiti minimi del sistema di avvio sono la capacità di: creare un filesystem ext2, estrarre un archivio tar e installare GNU Grub.

La natura di GNU è simile a qualsiasi altro sistema Unix-like: dopo il login all'utente viene presentata una shell e il familiare VFS (filesystem virtuale) di Unix. Nonostante GNU tenti di essere conforme a POSIX, è "Non Unix". GNU/Hurd è basato su molti dei concetti di Unix e li estende sia aggiungendo nuove funzionalità che correggendo le cose che sono percepite come imperfette nel progetto originale. La differenza più grande sono i traduttori, dei programmi in spazio utente che interagiscono con il VFS. Questi filesystem non risiedono nel kernel e nemmeno necessitano di essere eseguiti come root; l'unica cosa che richiedono è l'accesso al supporto sottostante e un mount point. Un'altra differenza è che i processi anziché avere l'identità di un singolo utente fissata al momento della creazione hanno le informazioni sull'identità separate dal processo, quindi, con i giusti permessi, si possono aggiungere o rimuovere identità.

Essendo parente stretto dell'ambiente Unix (e in particolar modo dello spazio utente GNU che si trova in varianti anche molto popolari come GNU/Linux) è imperativo sentirsi a proprio agio con GNU. L'esperienza con gli strumenti Debian si rivela preziosa anche per la configurazione e la manutenzione di una macchina con GNU/Hurd.

Questa guida si sforza di rendere il processo di installazione di GNU/Hurd il più semplice possibile. Se si riscontrano degli errori (che sono certamente dovuti all'autore) si prega di segnalarli insieme a qualsiasi suggerimento o critica si voglia fare all'autore stesso; viene accettato tutto con immenso piacere.

2. Casa di proprietà o cercarne una

Se non si dispone di una partizione disponibile o di un hard disk aggiuntivo questo può essere il passo più lungo, infatti in questo caso è necessario ripartizionare l'hard disk. Una possibilità è usare l'editor di partizioni di GNU, Parted. Non solo permette la modifica di base delle partizioni ma permette anche il ridimensionamento e lo spostamento delle partizioni. Il manuale è abbastanza completo e include svariati tutorial.

Hurd supporta diverse estensioni al formato del filesystem ext2fs. Le cose più importanti fra queste sono i traduttori passivi e un quarto gruppo di bit con i permessi per gli utenti sconosciuti (gli utenti senza identità, non gli utenti "other"). Per usare queste estensioni il proprietario della partizione deve essere impostato a hurd. mke2fs, a meno che non sia specificato diversamente sulla riga di comando, imposta come proprietario qualsiasi kernel sia in esecuzione. Dal momento che Hurd rispetta diligentemente questa impostazione si deve prestare molta attenzione dando il valore appropriato altrimenti Hurd si comporterà in modo impredicibile. Attenzione, anche se un filesystem è in possesso di un particolare kernel, altri kernel possono continuare a usarlo ma potrebbero non essere capaci di usare certe estensioni.

Per creare un filesystem usare mke2fs e passare -b 4096 -I 128 -o hurd per indicare l'Hurd come proprietario del nuovo filesystem. Per esempio, supponendo che la partizione sia /dev/hda2:

 
# mke2fs -b 4096 -I 128 -o hurd /dev/hda2

3. Boot loader

Il boot loader del sistema GNU è GRUB (GRand Unified Boot loader) e il suo scopo principale è avviare il cuore del sistema GNU (Mach e l'Hurd). Qualsiasi bootloader che supporti lo standard multiboot può essere usato per caricare Mach e l'Hurd. Al momento (noi sappiamo che) GNU GRUB è l'unico boot loader che supporta questo standard.

Una parola su Grub, diversamente dai boot loader tradizionali per x86, come LILO, Grub è veramente molto potente. Ha una interfaccia a riga di comando, bootp, il supporto per terminali virtuali e una grande quantità di altre funzionalità. Inoltre è in grado di avviare quasi tutti i kernel, se non avete mai avviato una alpha o una sparc allora non potete capire cosa può fare Grub. Quindi, non vi preoccupate: Grub è il migliore. Vi piacerà. Non tornerete indietro.

Probabilmente è consigliabile installare Grub prima di installare Hurd, comunque è possibile eseguire l'installazione di Grub sul disco fisso anche in seguito.

4. Cross-installazione

Il passo successivo è scaricare il sistema di base. Ci sono diverse possibilità, se è in esecuzione un sistema Debian si può usare il pacchetto crosshurd altrimenti si può recuperare il tarball del sistema di base da un qualsiasi mirror indicato in http://wiki.debian.org/DebianPorts/Mirrors.

Il tarball è impostato per estrarre tutto il suo contenuto nella directory attuale. L'archivio può essere estratto solo dopo aver montato un filesystem. Supponendo che il filesystem sia su /dev/hda2, che il mount point sia /gnu e che l'archivio sia nella directory home dell'utente allora è necessario:

 
# mount -t ext2 /dev/hda2 /gnu
# cd /gnu
# tar --same-owner -xvjpf ~/gnu.tar.bz2

5. Avvio di GNU/Hurd

Adesso tutto è pronto per avviare GNU/Hurd per la prima volta. Dopo aver verificato che il dischetto di avvio con Grub sia inserito nel drive riavviare il sistema. Se tutto va bene verrà mostrato il menu o la riga di comando di Grub. Se si presenta il menu premere c per passare alla riga di comando.

Per prima cosa si deve caricare GNU Mach, questo richiede la conoscenza del filesystem e del percorso di GNU Mach. Grub usa una nomenclatura leggermente diversa sia da Linux che da Hurd: i dischi IDE e SCSI sono entrambi nominati (hdN,M). N è il numero del dispositivo (partendo da zero) fornito dal BIOS, quindi Grub non fa distinzione fra dischi SCSI e IDE. M identifica la partizione sul disco (anche questo partendo da zero). Se questo confonde non c'è da preoccuparsi: Grub fornisce molti aiuti.

Per determinare su quale filesystem risiede un particolare file Grub fornisce il comando find. Quando questo comando viene dato insieme al nome di un file, Grub cerca su ogni filesystem il file specificato e mostra dove è stato trovato. Per esempio per cercare il kernel /boot/gnumach.gz:

 
grub> find /boot/gnumach.gz
   (hd0,0)

In questo esempio Grub indica che /boot/gnumach.gz è su (hd0,0).

Prima di caricare il kernel deve essere specificata sulla riga di comando almeno un'altra opzione, la partizione di root. Questa verrà usata da Hurd (cioè non da Grub) e quindi dovrà essere in un formato che Hurd possa capire.

GNU Mach numera i dischi partendo da zero. I dispositivi IDE hanno il prefisso hd mentre i dischi SCSI hanno il prefisso sd. Come avviene con Linux i dischi sono numerati in base alla loro posizione sul controller. Per esempio il master su canale primario è hd0 e lo slave su canale secondario è hd3. Le partizioni seguono la nomenclatura delle partizioni BSD, si aggiunge sM al nome del disco per indicare una certa partizione. Notare che M inizia a contare da uno e non da zero. Il numero della partizione è semplice da calcolare: basta incrementare il valore usato da Grub di uno.

Dal momento che Hurd non è stato ancora configurato è necessario avviare il sistema in modalità singolo-utente, è sufficiente aggiungere -s alla riga di comando del kernel.

Supponendo che il primo disco (cioè (hd0)) sia il master sul controller secondario, si userà:

 
grub> kernel (hd0,0)/boot/gnumach.gz root=device:hd2s1 -s
   [Multiboot-elf, ...]

Successivamente devono essere caricati il servente per il filesystem di root e il servente exec. Questo si può fare grazie alla capacità di Grub di avviare i moduli. Le ${var} sono inserite da GNU Mach. Gli argomenti sono usati da Hurd per indicare quale tipo di informazione sarà fornita. Dato che la riga di comando di ext2fs è molto lunga la si può spezzare usando la sequenza di escape del carattere a capo nello stesso modo usato normalmente in Unix. Assicurarsi di non lasciare spazi dopo il contro-slash finale di ogni riga inoltre assicurarsi di distinguere { e } da ( e ).

 
grub> module (hd0,0)/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 (hd0,0)/lib/ld.so.1 /hurd/exec $(exec-task=task-create)
    [Multiboot-module  0x494000, 0x27afe bytes]

Una volta che Hurd è in esecuzione, il procedimento può essere automatizzato inserendo gli appropriati comandi nel file di configurzione di Grub /boot/grub/menu.lst.

Adesso GNU/Hurd può essere avviato con:

 
grub> boot

Se GNU/Hurd non si avvia potrebbe essere colpa di IRQ condivisi: GNU Mach non li gestisce molto bene. Si può verificare questa situazione guardando, per esempio, il file /proc/interrupts sotto GNU/Linux. Inoltre, dato che GNU Mach non supporta i moduli del kernel molti dei driver sono compilati nel kernel, se nel sistema sono presenti delle vecchie periferiche queste potrebbero creare dei problemi infatti un dispositivo potrebbe rispondere in modo non corretto a un segnale rivolto a un dispositivo completamente indipendente e quindi causare un crash. Di solito compilare un nuovo kernel con solo i driver dei dispositivi necessari risolve questo genere di problemi, GNU Mach è facilmente cross-compilabile. Se si usa Debian si installi il pacchetto mig e il compilatore gcc.

Se questo non è di aiuto si chieda sull'appropriata lista di messaggi.

6. Installazione nativa

Una volta che si dispone del prompt della shell e ogni volta che Hurd è in modalità singolo-utente è necessario impostare il tipo di terminale:

 
# export TERM=mach

Avviso: CONTROL-C e famiglia non funzionano nella modalità singolo-utente.

Adesso è possibile eseguire lo script native-install. Questo configurerà i pacchetti e imposterà molti importanti traduttori:

 
# ./native-install

La fine prematura dello script indica che è necessario eseguirlo una seconda volta. Seguite le sue istruzioni e riavviate usando il comando reboot. Si entri nuovamente in modalità singolo-utente e si esegua di nuovo ./native-install.

7. Configurazione

7.1 La rete

Per configurare la rete è necessario configurare prima il traduttore pfinet. Questo lo si fa con il comando settrans che collega un tradutore a un certo nodo del filesystem e quando i programmi accedono al nodo, per esempio inviando un RPC, il sistema operativo avvia in modo trasparente il servente per gestire la richiesta.

 
# settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a a.b.c.d -g e.f.g.h -m i.j.k.l

In questo esempio a settrans sono state passate diverse opzioni. Le prime due fg forzano tutti i traduttori esistenti a disattivarsi. Le due successive ap creano un traduttore sia attivo che passivo, rendendo attivo un traduttore si possono immediatamente vedere i messaggi di errore su stderr. Le opzioni seguenti salvano il traduttore e gli argomenti nel nodo e quindi può essere riavviato in modo trasparente in seguito (cioè rendono le impostazioni persistenti ai riavvii del sistema). Le opzioni sono seguite dal nodo a cui deve essere collegato il traduttore, infine c'è il programma (cioè il traduttore) da eseguire e tutti gli argomenti da passargli. L'opzione -i è l'interfaccia su cui pfinet si metterà in ascolto, -a è l'indirizzo IP, -g è il gateway e -m è la maschera di rete.

Assicurarsi di aggiungere i name server nel file /etc/resolv.conf:

 
nameserver 192.168.1.1

Testare la configurazione con ping -c2 gateway, l'opzione -c è importantre per limitare il numero di ping, infatti CONTROL-C non funziona in modalità singolo-utente.

DHCP ancora non funziona con Hurd. Questo è dovuto alle limitazioni di pfinet: è basato sul codice TCP/IP di Linux ed è incapace di ascoltare su 0.0.0.0.

Aiuto su settrans può essere ottenuto passando l'opzione --help. L'aiuto su uno specifico traduttore può essere ottenuto invocandolo dalla riga di comando con lo stesso argomento, per esempio:

 
# /hurd/pfinet --help

Come in questo caso può essere generato molto output, si tenga in considerazione l'uso di una pipe con un impaginatore come less.

7.2 Ulteriori filesystem

Il passo successivo è modificare /etc/fstab per aggiungere altri filesystem e lo spazio di swap. È molto importante usare lo spazio di swap, l'Hurd risulterà di un ordine di grandezza più stabile. Notare che l'Hurd può condividere in modo trasparente una partizione di swap con Linux ma sarà anche lieto di condividere qualsiasi altro dispositivo comprese partizioni grezze come la partizione con la home. Normalmente nano è l'unico editor installato con la distribuzione di base.

Questo è un esempio del file /etc/fstab:

 
# <file system> <mount point>   <type>  <options>  <dump>  <pass>
/dev/hd2s1      /               ext2    rw         0       1
/dev/hd2s2      /home           ext2    rw         0       2
/dev/hd2s3      none            swap    sw         0       0

Ricordarsi di creare tutti i device con il comando MAKEDEV:

 
# cd /dev
# ./MAKEDEV hd2s1 hd2s2 hd2s3

Per montare un filesystem nfs viene usato il traduttore /hurd/nfs. Quando è eseguito da un utente non privilegiato il traduttore si connette al server utilizzando una porta superiore alla 1023. Normalmente GNU/Linux non permette questo comportamento, per far accettare a GNU/Linux le connessioni da porte non riservate si deve aggiungere l'opzione insicure nella riga export. Segue un esempio di /etc/exports in cui si suppone che l'indirizzo IP del client sia 192.168.1.2:

 
/home  192.168.1.2(rw,insecure)

Per montarlo sul sistema GNU supponendo che l'indirizzo IP del server nfs sia 192.168.1.1 usare:

 
# settrans -cgap /mount/point /hurd/nfs 192.168.1.1:/home

7.3 Riavvio

Infine riavviare in modalità multiutente, cioè nello stesso modo usato per la modalità singolo-utente ma tralasciando l'opzione -s quando si carica il kernel. Per i dettagli vedere la sezione 5. Avvio di GNU/Hurd.

Buon divertimento!

8. Ritocchi finali

8.1 Il menu di Grub

Dover caricare il kernel a mano può essere molto tedioso. Modificare /boot/grub/menu.lst e adattarlo alle proprie esigenze, l'avvio del sistema diventerà molto più veloce e molto più semplice.

8.2 Aggiunta di device

Normalmente solo pochi device sono creati nella directory /dev. Usare lo script MAKEDEV per creare i device node di cui si necessita.

8.3 Installazione di altri pacchetti

Esistono diversi modi per aggiungere dei pacchetti, scaricarli e usare dpkg -i funziona ma è molto scomodo. Il modo più semplice è usare apt-get. Aggiungere una delle prossime righe da http://wiki.debian.org/DebianPorts/Mirrors di unreleased a /etc/apt/sources.list:

 
deb http://ftp.debian-ports.org/debian unreleased main

http://ftp.debian-ports.org/ e i suoi mirror contengono dei pacchetti modificati o delle patch che ancora non sono stati integrati nella versione originale o in Debian.

E da unstable su uno dei mirror Debian (si veda http://www.debian.org/mirror/list per l'elenco completo) che contiene l'architettura hurd:

 
deb http://ftp.de.debian.org/debian unstable main

http://ftp.debian-ports.org/ e i mirror contengono dei pacchetti modificati o delle patch che ancora non sono stati integrati nella verisone originale o in debian. Per usare un mirror locale Debian vedere http://www.debian.org/distrib/ftplist.

Se GNU Mach non riconosce la scheda di rete o si usa un modem, l'unico modo per aggiornare i pacchetti è scaricarli e poi trasferirli nel sistema GNU. Il modo più semplice per fare queste operazioni è usare apt fuori-linea. Vedere /usr/share/doc/apt-doc/offline.text.gz per le istruzioni dettagliate.

8.4 La console Hurd

Oltre alla console Mach già vista durante l'installazione, GNU/Hurd ha una potente console in spazio-utente che fornisce terminali virtuali. Attualmente è necessario avviare manualmente la console Hurd con il seguente comando:

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

Nella console Hurd si può passare da iun terminale virtuale a un altro con ALT+F1, ALT+F2 e così via. ALT+CTRL+BACKSPACE chiude la console Hurd causando il ripristino della console Mach da dove si può riaprire la console Hurd con il comando precedente.

8.5 X.Org

È stato fatto il port di X.Org, tutte le schede video supportate che non richiedono un modulo del kernel dovrebbero funzionare.

È necessario essere nella console Hurd e ripetere l'installazione come indicato nella Sezione 8.4. Poiché X.Org ha /dev/kbd come device per la tastiera cablato nel codice è necessario creare un link simbolico:

 
# cd /dev
# ln -s cons/kbd kbd
# ln -s cons/mouse mouse

Sono necessari parecchi pacchetti per X. x-window-core, rxvt e twm, fvwm o wmaker sono un buon inizio.

Si può usare debconf per configurare X.Org, comunque non è pronto per Hurd e il file di configurazione deve essere ritoccato. Dopo la configurazione, modificare la sezione pointer che deve diventare:

 
Section "Pointer"
  Protocol "osmouse"
  Device "/dev/mouse"
EndSection

Emulate3Buttons e ZAxisMapping devono essere entrambi disattivati.

Infine, eseguire startx.

Ci sono diverse cose da tenere in mente. Ancora non è stato fatto il port di update-menu quindi mancano i menu Debian. Sebbene esista l'implementazione di pthreads non è stato fatto il port di tutti i pacchetti pthread: non pensate che GNOME o KDE funzionino senza.