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

Configurazione di Debian GNU/Hurd

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

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

Introduzione

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.

Installazione

È possibile usare l'Installatore Debian, si veda le immagini dei CD. Poi seguire i passi proposti per eseguire un'installazione corretta.

Configurazione

La rete

A partire da sysvinit 2.88dsf-48 e hurd 1:0.5.git20140320-1 è supportato il modo-Debian: /etc/network/interfaces è usato come avviene con Linux. L'unica differenza è che le schede appaiono in /dev e quindi le interfacce devono essere specificate con /dev/eth0, ecc.

Se la rete non funziona, usare il seguente comando per recuperare dal driver DDE delle informzioni di debug:

 
 # settrans -fgap /dev/netdde /hurd/netdde

e poi chiudere (con kill) qualsiasi devnode e il processo pfinet in modo da riavviarli con il nuovo netdde. Se continua a non funzionare, inviare l'output del precedente comando settrans oltre che all'output di lspci e lspci -n.

Per configurare la rete, senza usare /etc/network/interfaces, è necessario configurare prima il traduttore pfinet. Questo si può fare usando dhclient dal pacchetto isc-dhcp-client, oppure manualmente con inetutils-ifconfig dal pacchetto inetutils-tools e ping disponibile nel pacchetto inetutils-ping. Oppure, infine, manualmente usando il comando settrans per collegare 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 /dev/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.

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.

Anche per configurare il supporto IPv6 è necessario fare la configurazione su /servers/socket/2 e /servers/socket/26 facendo riferimento l'uno all'altro in modo che ne sia avviato uno solo, collegare entrambi i nodi:

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

Il server pfinet attiva la configurazione automatica di IPv6. È possibile ottenere lo stato attuale con fsysopts /servers/socket/26. Gli indirizzi possono essere anche impostati manualmente usando, per esempio, -A 2001:123:123::42/64 -G 2001:123:123::1.

La configurazione di pfinet può essere cambiata anche in diretta (cioè senza scrivere sul disco) usando fsysopts:

 
 # fsysopts /servers/socket/2
 /hurd/pfinet --interface=/dev/eth0 --address=10.3.0.1 --netmask=255.255.0.0 --gateway=10.3.0.128
 # fsysopts /server/socket/2 -a 10.3.0.2 -m 255.255.0.0 -g 10.3.0.128

È possibile creare un firewall interponendo il traduttore eth-filter, per esempio, questo impedisce l'accesso alla porta 22:

 
 # settrans -c /dev/eth0f /hurd/eth-filter -i /dev/eth0 -r "not port 22"

Il device filtrato, /dev/eth0f, può essere passato a pfinet oppure a dhclient al posto di /dev/eth0.

Configurazione della tastiera

La mappa di tastiera può essere configurata usando il pacchetto standard keyboard-configuration, sono supportate solo le mappe di tastiera, le varianti non sono (ancora) supportate. Verificare che sia installato ed eseguire dpkg-reconfigure keyboard-configuration. Gli effetti non saranno immediati poiché per applicare la nuova configurazione è necessario riavviare la console.

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 e vi sono gli unici editor installati con la distribuzione di base.

Questo è un esempio del file /etc/fstab:

 
# <file system> <mount point>   <type>  <options>  <dump>  <pass>
/dev/hd0s1      /               ext2    rw         0       1
/dev/hd0s2      /home           ext2    rw         0       2
/dev/hd0s3      none            swap    sw         0       0

Qualora manchi un qualsiasi device in /dev, ricordarsi di crearlo con il comando MAKEDEV:

 
# cd /dev
# ./MAKEDEV hd0s1 hd0s2 hd0s3

È anche possibile montare manualmente un filesystem usando settrans:

 
# settrans /mnt /hurd/ext2fs /dev/hd0s5

L'idea dietro a questo comando è impostare sul nodo /mnt il traduttore /hurd/ext2fs /dev/hd0s5. Verrà avviato /hurd/ext2fs che inizierà a leggere/scrivere /dev/hd0s5 e a mostrarne il contenuto su /mnt. Ulteriori informazioni possono essere trovate nella documentazione sui traduttori.

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

Buon divertimento con Debian GNU/Hurd

Cosa si può fare con Hurd?

Montare immagini di dischi

Le operazioni per accedere al contenuto di un'immagine di CD con un utente diverso da root su un sistema Unix standard sono un po' noiose. Su GNU/Hurd è sufficiente:

 
settrans ~/mnt /hurd/iso9660fs CD_image.iso

Ciò è anche estremamente sicuro: il traduttore iso9660fs è eseguito con l'identità dell'utente, non di root. È possibile anche scrivere in proprio un traduttore per qualsiasi tipo si file system. Esatto, è come FUSE ma senza tutte le schifezze.

FTP transparente

Quseto comando imposta un ftp trasparente su una directory:

 
settrans -c /ftp: /hurd/hostmux /hurd/ftpfs /

Adesso, è possibile fare cd su, per esempio, /ftp://ftp.gnu.org/ ed eseguire ls. Quindi è possible eseguire dalla propria home tar xf ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.6.0/gcc-4.6.0.tar.bz2 !

Sub-Hurd

Un sub-Hurd è un sottosistema completo; a prima vista è molto simile a un contenitore per la virtualizzazione, con l'eccezione che non è assolutamente necessario essere root per attivarlo.

gdb ext2fs, pfinet, ...

Sì, è possibile eseguire gdb su, per esempio, l'implementazione di ext2fs, lo stack TCP/IP pfinet, ecc.

E molto altro!

Tra le cose su cui si sta lavorando ci sono mboxfs, tarfs, xmlfs, gopherfs, ...

Ritocchi finali

Seguono dei suggerimenti veloci utili durante l'installazione, si raccomanda di leggere anche la documentazione: la documentazione su Debian GNU/Hurd e anche il sito web di Hurd.

Installazione di altri pacchetti

Esistono diversi modi per aggiungere altri pacchetti, è possibile scaricarli e installarli con dpkg -i ma è molto scomodo. Il modo più semplice è usare apt-get. Aggiungere in /etc/apt/sources.list una delle seguenti voci per unreleased da uno dei http://www.debian-ports.org/mirrors e installare il pacchetto debian-ports-archive-keyring:

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

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

E unstable da uno dei mirror Debian (per l'elenco completo dei mirror vedere https://www.debian.org/mirror/list) che dispone dell'architettura hurd (se apt segnala "bad archive mirror", provare con un altro mirror):

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

Se dpkg si lamenta riguardo a dei programmi mancanti durante la prima esecuzione di apt-get, avviarlo da una shell come amministratore (cioè su -, non è sufficiente su).

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.

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. Se l'installazione è avvenuta in modalità grafica, questa console dovrebbe partire automaticamente all'avvio, è comunque possibile avviarla manualmente con il seguente comando:

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

Se l'avvio manuale della console funziona allora è possibile farla partire automaticamente all'avvio modificando /etc/default/hurd-console, in particolare occorre cambiare ENABLE="false" in ENABLE="true".

Nella console Hurd si può passare da un 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.

X.Org

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

È necessario essere nella console Hurd e ripetere l'installazione come indicato nella sezione precedente. Per esempio, controllare che echo $TERM stampi hurd e verificare che /dev/cons/kbd e /dev/cons/mouse esistano.

È necessario eseguire dpkg-reconfigure x11-common per consentire a tutti gli utenti di avviare Xorg perché il wrapper X non sa nulla di Hurd né delle console Mach.

Può anche essere necessario creare un /etc/X11/xorg.conf per attivare lo shortcut control-alt-backspace:

 
Section "InputDevice"
   Identifier "Generic Keyboard"
   Driver "kbd"
   Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection

Sono necessari parecchi pacchetti per X: xorg, rxvt e un window manager (twm, wmaker, icewm, openbox, ...) sono un buon inizio. Per far partire X all'avvio del sistema è necessario installare un display manager. xdm funziona benissimo.

X.Org funziona senza alcun file di configurazione. In alcuni casi potrebbe essere necessario usa il driver vesa.

Infine, eseguire startx /usr/bin/il_wm_preferito.

Ultime parole

Prima di sysvinit 2.88dsf-48 e hurd 1:0.5.git20140320-1, il sistema SysV rc non era il sistema predefinito. Per spengere il sistema usare halt o reboot.

Per usare il sistema SysV standard, aggiornare sysvinit alla versione 2.88dsf-48 o successiva, poi eseguire update-alternatives --config runsystem e selezionare runsystem.sysv infine riavviare una volta con reboot-hurd per completare il passaggio a sysv.