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.

È anche possibile scaricare e usare delle immagini per qemu pre-installate:

 
$ wget https://cdimage.debian.org/cdimage/ports/stable/hurd-i386/debian-hurd.img.tar.gz
$ tar xzf debian-hurd.img.tar.gz
$ kvm -m 1G -drive file=$(echo debian-hurd*.img),cache=writeback

Per permettere l'accesso alla macchina tramite ssh, aggiungere

 
-net nic -net user,hostfwd=tcp:127.0.0.1:2222-:22

e ssh sarà sulla porta TCP 2222.

È anche possibile convertire le immagini in formato VDI per virtualbox:

 
$ VBoxManage convertfromraw debian-hurd-*.img debian-hurd.vdi --format vdi

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 informazioni di debug:

 
 # settrans -fga /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 la segnalazione di un bug con l'output completo 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 traduttore 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 è importante 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 -p /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 -cga /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.

Per chi usa il rilascio Debian GNU/Hurd 2023, il modo più semplice è usare lo snapshot di questo rilascio come sorgente di apt: modificare /etc/apt/apt.sources aggiungendo:

 
deb [check-valid-until=no trusted=yes] https://snapshot.debian.org/archive/debian-ports/20230606T000000Z/ sid main
deb [check-valid-until=no trusted=yes] https://snapshot.debian.org/archive/debian-ports/20230606T000000Z/ unreleased main
deb-src [check-valid-until=no trusted=yes] https://snapshot.debian.org/archive/debian/20230606T000000Z/ sid main

Aggiornare, installare il pacchetto debian-ports-archive-keyring e aggiornare di nuovo, fatte queste operazioni l'intero rilascio Debian GNU/Hurd 2023 sarà disponibile.

Chi usa uno snapshot successivo al rilascio 2023, può aggiungere queste fonti per avere a disposizione i pacchetti più recenti:

 
deb http://deb.debian.org/debian-ports unstable main
deb-src http://deb.debian.org/debian unstable main
deb http://deb.debian.org/debian-ports unreleased main

Aggiornare, installare il pacchetto debian-ports-archive-keyring e aggiornare di nuovo.

Se dpkg si lamenta riguardo a dei programmi mancanti durante la prima esecuzione di apt, 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 xserver-xorg-legacy 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

Per un motivo qualsiasi potrebbe accadere che Xorg imposti una risoluzione 16/9 ma un desktop 4/3. Il colpevole è Xorg, non Hurd :) Per evitare questo problema, aggiungere a /etc/X11/xorg.conf :

 
Section "Screen"
   Identifier "myScreen"
   SubSection "Display"
      Virtual 1024 768
   EndSubSection
EndSection

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

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

Infine, eseguire startx /usr/bin/il_wm_preferito.

Se non funziona, come riporta il messaggio d'errore, controllare in /var/log/Xorg.0.log (oppure inviate il messaggio alla lista in modo che altre persone possano vederlo).

Aggiornamento del sistema

Quando si usa un rilascio di Debian basato su snapshot, non ci saranno mai aggiornamenti da installare poiché la distribuzione rilasciata è congelata alla data del rilascio. Questo vuol dire che non riceverete gli aggiornamenti sulla sicurezza! Si può piuttosto voler attivare la distribuzione unstable come descritto nella sezione Installazione di altri pacchetti.

Una volta attivata la distribuzione unstable, poiché è unstable, potrebbe soffrire di problemini con la transizione delle librerie e quindi non ci si deve sorprendere se qualche volta non è possibile aggiornare qualche pacchetto. In generale, è possibile usare la procedura di aggiornamento raccomandata da Debian: prima usare

 
# apt upgrade --without-new-pkgs

per aggiornare tutto ciò che può essere aggiornato senza modificare la lista dei pacchetti e poi usare

 
# apt full-upgrade

per aggiornare tutto il resto.

Nota: se l'aggiornamento viene fatto raramente, potrebbero verificarsi dei problemi. Assicurarsi di fare l'aggiornamento all'ultimo snapshot rilasciato (Hurd 2023, vedi la sezione Installazione di altri pacchetti) prima di aggiornare alla distribuzione unstable.

Ultime parole

Per arrestare il sistema usare semplicemente halt, poweroff oppure reboot. Può accadere che qualche demone non si chiuda correttamente, in questo caso è possibile usare halt-hurd, poweroff-hurd, reboot-hurd, non per terminare i demoni bensì per forzare la sincronizzazione dei dati sul disco.