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 2G -drive file=$(echo debian-hurd*.img),cache=writeback |
https://cdimage.debian.org/cdimage/ports/latest/hurd-amd64/debian-hurd.img.tar.gz
per l'anteprima a 64-bit)
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.