Comme nous l'avons vu sommairement le mois dernier, le Hurd est un système d'exploitation de type Unix, basé sur un micro-noyau GNU Mach (prononcer Mahrrr) autour duquel gravitent les serveurs Hurd chargés de gérer le fonctionnement du système.
Comme tout système Unix, pour accéder à un système de fichiers, il faut y faire référence à travers un répertoire. Le Hurd va plus loin...
Hurd prolonge la logique Unix en permettant à n'importe quel point de l'arborescence d'être activé par un translator. Un translator est un serveur Hurd qui permet de créer un point d'accès vers une ressource pour peu qu'elle se présente sous une forme arborescente. Ceci est valable pour les systèmes de fichiers comme ext2 et iso9660, mais également pour des éléments plus originaux comme les archives (tgz, zip, etc.), les serveurs ftp, nfs ou Web. Ce n'est pas tout, il est possible d'appliquer cette méthode à une base de données et ainsi de faire apparaître le contenu d'une base dans un répertoire du système de fichiers.
Il faut cependant préciser qu'il s'agit là de quelque chose de bien plus puissant qu'une simple simulation d'un système de fichiers. Pour preuve, les translators permettront, à terme, des opérations aussi pratiques que la compilation des sources contenues dans une archive sans décompression. Le translator implémente alors la compression/décompression à la volée, ne laissant apparaître à l'utilisateur que le contenu d'un répertoire classique.
Pour résumer la situation, nous pouvons dire qu'un translator est capable d'associer n'importe quel répertoire de l'arborescence à n'importe quel programme.
Exemple
Le principe des translators est la première chose que vous découvrez en «jouant» avec le Hurd. L'une des premières manipulations consiste, en effet, à créer un point d'accès vers votre partition, utilisée comme racine pour votre système GNU/Linux :
settrans -c /linux \
/hurd/ext2fs \
/dev/hd0s2
Cette commande appelle le serveur /hurd/ext2fs comme translator entre le répertoire /linux de votre système de fichiers GNU/Hurd et la seconde partition du premier disque dur.
Si cet exemple ne vous a pas convaincu qu'un translator est plus qu'un simple interpréteur de système de fichiers, voyez la commande suivante :
settrans -fg /servers/socket/2 \
/hurd/pfinet \
--interface=eth0 \
--adresse=192.168.0.1 \
--gateway=192.168.0.10
--netmask=255.255.225.0
Ici, il n'est plus question d'un système de fichier. Nous utilisons un translator pour fournir les paramètres réseau à notre périphérique eth0.
Notez au passage que les translators sont permanents par défaut. Ainsi, il ne vous sera pas utile de retaper ces commandes à chaque démarrage du Hurd. Lorsque vous accéderez pour la première fois au répertoire où est «traduite» votre partition GNU/Linux, le translator sera automatiquement lancé avec les paramètres déjà utilisés. Si vous désirez mettre en place un translator de manière temporaire (accès à un serveur NFS par exemple), vous devez le spécifier explicitement à la commande settrans.
Un autre point intéressant est la possibilité de changer les paramètres du translator alors qu'il fonctionne déjà. Par exemple, si vous désirez subitement passer votre point d'accès /linux en lecture seule, tapez : fysopts /linux -r.
Dernière précision, l'utilisation des informations inscrites dans /etc/fstab. settrans s'effectue de manière légèrement différente de la commande mount de GNU/Linux. Sous GNU/Linux, vous pouvez utiliser umount /mnt/cdrom et umount /dev/cdrom alors qu'avec GNU/Hurd, vous ne devez utiliser que le point d'accès et non le périphérique. Attention, dans /etc/fstab, une partition ext2 est référencée ext2 et non ext2fs.
Syntaxe et paramètres
Vous l'aurez compris, c'est la commande settrans qui permet d'activer/désactiver un translator. Cette commande s'utilise de la manière suivante :
settrans [OPTION...] NODE [TRANSLATOR ARG...]
où NODE est le noeud à utiliser (dans bien des cas, un répertoire), TRANSLATOR... le translator (habituellement placé dans /hurd), ARG les arguments adéquats pour le translator en question et, enfin, OPTION est la ou les option(s) parmi les suivantes :
-a --active rend le noeud actif
-c --create crée le noeud s'il n'existe pas
-L --dereference si le translator existe, place de nouveau par-dessus
-p --passive rend le noeud passif
-t --timeout=SEC temps limite pour le démarrage du translator (en secondes)
-x --exclusive place le translator uniquement si aucun autre n'est déjà en place
-g --goaway demande au translator de s'arrêter
-k --keep-active laisse fonctionner le translator déjà actif
-f --force force l'arrêt du translator
-R --recursive arrête également les translators dépendants
-? --help affiche un résumé de l'aide
-V --version affiche la version du programme
Voilà, nous espérons que ce court article vous aura aidé à mieux jouer avec le Hurd et vous aura permis de comprendre qu'il s'agit là d'un système véritablement nouveau et puissant...