Portages ] [ Debian GNU/Hurd ] [ Actualité ] [ Configuration ] [ CD Hurd ] [ Documentation ] [ Développement ] [ Contact ]

Configuration de Debian GNU/Hurd

Ce document vise à fournir un jeu d'instructions facile et relativement peu fastidieux sur la façon de configurer Debian GNU/Hurd avec un minimum d'efforts.

Il est basé sur le Guide d'installation du Hurd de Neal H. Walfield. Merci beaucoup à Neal pour sa contribution.

Vue d'ensemble

GNU est de nature similaire à n'importe quel système de type Unix : après s'être identifié, un interpréteur de commandes et le système de fichiers virtuel (VFS) Unix familier sont présentés à l'utilisateur. Malgré les tentatives de GNU d'être conforme à POSIX, ce n'est pas Unix (GNU is Not Unix). GNU/Hurd est basé sur plusieurs concepts Unix et les étend soit en ajoutant de nouvelles fonctionnalités, soit en réparant ce qui a été perçu comme des failles dans la conception originelle. La différence la plus remarquable est l'existence des traducteurs, programmes de l'espace utilisateur qui interagissent avec le VFS. Ces systèmes de fichiers n'ont besoin d'accéder qu'au périphérique de stockage et au point de montage. Une autre différence réside dans le fait que les processus, plutôt que d'avoir l'identité d'un utilisateur unique donné au moment de la création, peuvent avoir des identités disjointes du processus, c'est-à-dire qu'ils peuvent être ajoutés avec la permission appropriée par une autorité, ou être détruits.

Être familiarisé avec l'environnement Unix (et en particulier l'espace utilisateur GNU, que l'on trouve dans des variantes populaires telles que GNU/Linux), est un impératif pour se sentir à l'aise avec GNU. Avoir de l'expérience avec les outils Debian sera un atout inestimable pour la configuration et la maintenance d'une machine sous GNU/Hurd.

Ce guide s'efforce de rendre l'installation de GNU/Hurd aussi facile que possible. S'il s'y trouve des erreurs, ce sont probablement des erreurs de l'auteur. Veuillez les lui rapporter, ainsi que d'autres suggestions ou critiques ; toutes seront acceptées avec plaisir.

Installation

Vous pouvez simplement utiliser l'installateur Debian, en utilisant les images de CD préparées. Les étapes suivantes seront ensuite nécessaires pour une configuration correcte.

Vous pouvez vous procurer une image préinstallée et l’exécuter dans qemu :

 
$ 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
(ou https://cdimage.debian.org/cdimage/ports/latest/hurd-amd64/debian-hurd.img.tar.gz pour la pré-publication 64 bits)

Pour permettre d’accéder à la machine à travers ssh, vous pouvez ajouter

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

et ssh vers le port 2222 local TCP.

Vous pouvez aussi la convertir dans le format VDI pour virtualbox :

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

Configuration

Le réseau

La méthode Debian est gérée depuis sysvinit 2.88dsf-48 et hurd 1:0.5.git20140320-1 : /etc/network/interfaces est utilisé comme sur Linux. La seule différence est que les cartes réseaux apparaissent sous /dev, et par conséquent doivent être indiquées comme /dev/eth0, etc.

Si le réseau n'a pas l'air de fonctionner, utilisez ceci pour obtenir des renseignements de débogage du pilote DDE :

 
 # settrans -fga /dev/netdde /hurd/netdde

puis tuez tous les processus devnode et pfinet pour leur permettre de redémarrer avec le netdde plus récent. Si ça ne fonctionne toujours pas, veuillez envoyer au moyen d'un rapport de bogue la sortie complète du settrans netdde précédent, ainsi que la sortie de lspci et lspci -n.

Pour configurer le réseau sans passer par /etc/network/interfaces, le traducteur pfinet doit être configuré. Cela peut se faire en utilisant dhclient du paquet isc-dhcp-client. Vous pouvez aussi exécuter la commande inetutils-ifconfig du paquet inetutils-tools, et ping est disponible dans le paquet inetutils-ping. Enfin, vous pouvez aussi exécuter la commande settrans pour attacher (et enregistrer pour de bon) un traducteur à un nœud de système de fichiers donné. Quand les programmes accéderont au nœud, par exemple en envoyant un RPC, le système d'exploitation lancera de manière transparente le serveur afin de prendre en charge la requête.

 
 # 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

Ici, settrans reçoit plusieurs options. Les deux premières, fg, forcent tous les traducteurs existants à disparaître. Les deux suivantes, ap, créent les traducteurs actifs et passifs. En rendant un traducteur actif, nous verrons immédiatement tous les messages d'erreur sur stderr. La dernière option sauvegarde le traducteur et ses paramètres dans le nœud de façon à pouvoir le relancer plus tard de manière transparente (c'est-à-dire en ayant des paramètres persistants même après un réamorçage). Les options sont suivies du nœud auquel le traducteur sera attaché, puis du programme (c'est-à-dire le traducteur) à lancer et de tous les paramètres à lui passer. L'option -i est l'interface sur laquelle pfinet écoutera, -a est l'adresse IP, -g la passerelle et -m le masque de sous-réseau.

Veillez à ajouter des serveurs de noms de domaine à votre fichier /etc/resolv.conf :

 
  nameserver 192.168.1.1

Pour tester la configuration, veuillez taper ping -c2 gateway. Le -c est important pour limiter le nombre de pings ; rappelez-vous, CONTROL-C ne fonctionne pas en mode utilisateur unique.

Il est possible d'obtenir de l'aide sur settrans en lui passant l'option --help. Il en va de même concernant un traducteur donné en l'invoquant depuis la ligne de commande avec ce même paramètre, par exemple :

 
 # /hurd/pfinet --help

Comme la sortie peut être importante, pensez à la traiter à travers un visionneur de texte tel que less.

Pour configurer aussi la prise en charge d'IPv6, la même configuration doit être enregistrée à la fois sur /servers/socket/2 et /servers/socket/26, se référençant l'un l'autre pour qu'il n'y en ait qu'un seul de vraiment démarré, lié aux deux nœuds :

 
 # 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

Le serveur pfinet active l'autoconfiguration IPv6 par défaut. L'état actuel peut être obtenu avec fsysopts /servers/socket/26. Vous pouvez aussi configurer les adresses vous-même, en utilisant par exemple -A 2001:123:123::42/64 -G 2001:123:123::1.

La configuration de pfinet peut aussi être modifiée à la volée (sans enregistrement sur le disque) en utilisant 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

Un pare-feu peut être configuré en interposant le traducteur eth-filter, par exemple, ceci empêche l’accès au port 22 :

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

L’interface filtrée, /dev/eth0f, peut alors être donnée à pfinet ou dhclient au lieu de /dev/eth0.

Disposition du clavier

La disposition du clavier peut être configurée à l'aide du paquet standard keyboard-configuration. Assurez-vous qu'il est installé, puis exécutez dpkg-reconfigure keyboard-configuration. Seule la disposition est prise en charge, pas (encore) les variantes. L'effet ne sera pas immédiat, car la console doit être redémarrée pour prendre en compte ce paramètre. Un redémarrage devrait suffire par exemple.

Autres systèmes de fichiers

Ensuite, veuillez éditer /etc/fstab en y ajoutant tous les systèmes de fichiers supplémentaires ainsi que l'espace d'échange. Il est très important que l'espace d'échange soit utilisé ; le Hurd sera plus stable. Notez que le Hurd peut partager une partition d'échange de manière transparente avec Linux, mais pourra sans problème paginer sur quelque périphérique que ce soit, y compris une partition brute comme votre partition home. Par défaut, nano et vi sont les seuls éditeurs de texte installés par la distribution de base.

Voici un exemple de fichier /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

Si une entrée de périphérique /dev manque, n'oubliez pas de la créer avec la commande MAKEDEV :

 
 # cd /dev
 # ./MAKEDEV hd0s1 hd0s2 hd0s3

Vous pouvez aussi monter un système de fichiers vous-même avec settrans :

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

L'idée derrière cette commande est que vous configurez le traducteur /hurd/ext2fs /dev/hd0s5 sur le nœud /mnt. /hurd/ext2fs sera exécuté et commencera à lire et écrire sur /dev/hd0s5 et montrer son contenu dans /mnt. De plus amples renseignements sont disponibles dans la documentation sur les traducteurs.

Pour monter un système de fichiers NFS, le traducteur /hurd/nfs est utilisé. Quand il n'est pas lancé par le superutilisateur, le traducteur se connecte au serveur en utilisant un numéro de port supérieur à 1023. Par défaut, GNU/Linux rejettera cela. Pour dire à GNU/Linux d'accepter les connexions provenant d'un port non réservé, veuillez ajouter l'option insecure à la ligne d'export. Voici un exemple de fichier /etc/exports supposant que l'adresse IP du client est 192.168.1.2 :

 
  /home  192.168.1.2(rw,insecure)

Pour monter cela sur une machine GNU et en supposant que l'adresse IP du serveur NFS est 192.168.1.1 :

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

Amusez-vous avec Debian GNU/Hurd

Et maintenant, quelles sont les choses sympathiques à faire avec le Hurd ?

Montage d'images de disque

Accéder au contenu d'une image de CD est un peu fastidieux avec les systèmes de la norme Unix quand on n'est pas superutilisateur. Sur GNU/Hurd, il suffit de :

 
settrans ~/mnt /hurd/iso9660fs CD_image.iso

Et c'est tout à fait sûr : le traducteur iso9660fs est exécuté sous l’identité de l’utilisateur et non du superutilisateur. Vous pouvez même mettre en place votre propre traducteur pour n'importe quel type de système de fichiers. Oui, ça ressemble à FUSE, mais sans le kludge.

FTP transparent

La commande suivante configure un répertoire ftp transparent :

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

Maintenant, cd vers, par exemple, /ftp://ftp.gnu.org/, et exécutez-y ls. Oui, vous pouvez, depuis chez vous, exécuter simplement tar xf ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.6.0/gcc-4.6.0.tar.bz2 !

Sous-Hurd

Un sous-Hurd est un sous-système complet. Ça ressemble beaucoup à un conteneur de virtualisation au premier abord. La différence c'est qu'il n'est pas du tout nécessaire d'être superutilisateur pour en exécuter un.

gdb ext2fs, pfinet, etc.

Oui, vous pouvez exécuter gdb par exemple sur l'implémentation ext2fs, le pfinet, la pile TCP/IP, etc.

Et plein d'autres choses !

Parmi le travail en cours, mboxfs, tarfs, xmlfs, gopherfs, etc., sont au programme.

Derniers mots

Ce qui suit n'est qu'une succession de choses vite faites au moment de l'installation, assurez-vous aussi de lire la documentation pour le système installé : la documentation Debian GNU/Hurd, mais aussi le site web amont.

Installer plus de paquets

Plusieurs manières existent pour ajouter des paquets. Télécharger et utiliser dpkg -i fonctionne mais est très peu pratique. La méthode la plus simple est d'utiliser apt.

Si vous utilisez la publication GNU/Hurd 2023 de Debian, la façon la plus sûre est d’utiliser l’image de cette publication comme sources d’apt : éditez /etc/apt/sources.list et ajoutez les entrées suivantes non publiées.

 
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

Mettez à niveau, installez le paquet debian-ports-archive-keyring et mettez à niveau à nouveau, vous disposez alors de la publication entière GNU/Hurd 2023 de Debian.

Si vous utilisez une image postérieure à la publication de 2023, vous pouvez ajouter les sources suivantes pour obtenir les paquets les plus récents :

 
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

Mettez à niveau, installez le paquet debian-ports-archive-keyring et mettez de nouveau à niveau.

Si lors de la première utilisation d'apt, dpkg se plaint de programmes manquants, devenez superutilisateur dans un interpréteur de connexion (c'est-à-dire su -, pas seulement su).

Si GNU/Mach ne reconnaît pas la carte réseau ou si vous utilisez un modem, le seul moyen de mettre à niveau sera de télécharger les paquets, de les transférer ensuite sur le système GNU. Le moyen le plus facile de faire cela est d'utiliser apt en mode déconnecté. Veuillez vous référer à /usr/share/doc/apt-doc/offline.text.gz pour des instructions détaillées.

La console Hurd

Outre la console Mach rencontrée pendant l'installation, GNU/Hurd possède une puissante console en espace utilisateur qui fournit des terminaux virtuels. Si vous avez installé en mode pseudographique, elle devrait être automatiquement démarrée à l'amorçage, sinon vous pouvez le faire vous-même avec la commande suivante :

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

Si le fonctionnement est confirmé, le démarrage automatique de la console peut être activé au démarrage à partir de /etc/default/hurd-console : remplacez ENABLE="false" par ENABLE="true".

Dans la console Hurd, vous pouvez passer d'un terminal virtuel à un autre avec Alt + F1, Alt + F2 et ainsi de suite. Ctrl + Alt + Retour arrière détache la console Hurd et vous ramène à la console Mach, depuis laquelle vous pouvez vous rattacher à nouveau avec la commande ci-dessus.

X.Org

X.Org a été porté. Toutes les cartes vidéo qu'il gère sans nécessiter de module ou de drm du noyau devraient fonctionner.

Vous devez déjà être en train d'exécuter la console Hurd et avoir configuré les répétiteurs comme indiqué dans la section précédente. Par exemple, vérifiez que echo $TERM affiche hurd et vérifiez que /dev/cons/kbd et /dev/cons/mouse existent.

Vous devez exécuter dpkg-reconfigure x11-common xserver-xorg-legacy pour permettre aux utilisateurs de démarrer Xorg, parce que l'enveloppe (wrapper) de X ne connait rien des consoles Hurd et Mach.

Vous devrez aussi créer un fichier /etc/X11/xorg.conf pour activer le raccourci Ctrl + Alt + Retour arrière :

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

Il est possible que, pour une étrange raison, Xorg choisisse une résolution 16/9 mais un bureau au format 4/3. Blâmez Xorg, pas le Hurd :). Pour éviter ce problème, ajoutez ceci à /etc/X11/xorg.conf :

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

Vous aurez besoin de plusieurs paquets de X. Vous pouvez commencer par xorg, rxvt et un gestionnaire de fenêtres : twm, icewm, openbox, etc., sont un bon début. Si vous voulez que X se lance au démarrage, vous devez installer un gestionnaire de sessions. lightdm et gdm ne fonctionnent pas encore très bien, mais xdm le fait.

Enfin, exécutez startx /usr/bin/votre_gestionnaire_de_fenêtres.

Si cela ne fonctionne pas, comme indiqué par le message d’erreur, regardez dans /var/log/Xorg.0.log (ou envoyez le message sur la liste pour qu’il puisse être examiné).

Mise à niveau de votre système

Si vous utilisez une image de publication Debian, vous n’obtiendrez aucune mise à niveau de disponible puisque la distribution publiée est gelée à la date de publication. Cela signifie que vous n’obtiendrez aucune mise à jour de sécurité ! Vous pouvez plutôt vouloir activer la distribution non stable comme décrit dans la section Installer plus de paquets.

Une fois la distribution activée, remarquez que puisque c’est la distribution instable, cela est affecté par les soubresauts de transition de bibliothèque, aussi ne soyez pas surpris si parfois quelques paquets ne peuvent être mis à niveau. Généralement, vous pouvez utiliser la procédure de mise à niveau recommandée de Debian : utilisez en premier

 
# apt upgrade --without-new-pkgs

pour mettre à niveau sans modifier la liste des paquets puis utilisez

 
# apt full-upgrade

pour mettre à niveau le reste.

Remarque : si vous mettez rarement à niveau votre système, vous pouvez vous heurter à des problèmes de mise à niveau. Assurez-vous de commencer par mettre à niveau vers la dernière image (Hurd 2023, consultez la section Installer plus de paquets) avant de mettre à niveau vers la distribution non stable.

Le mot de la fin

Pour éteindre votre système, utilisez simplement halt, poweroff ou reboot. Si cela conduit parfois à un gel parce qu’un démon ne s’arrête pas correctement, vous pouvez utiliser à la place halt-hurd, poweroff-hurd ou reboot-hurd, qui n’arrêtent pas réellement le démon, mais qui synchronisent proprement les données sur le disque.