Ce document veut pouvoir fournir une méthode relativement simple et abordable pour réussir à faire fonctionner le Hurd avec aussi peu d'efforts que possible.

Copyright © 2000, 2001, 2002, 2003 Neal H. Walfield <neal@cs.uml.edu>

Copyright pour la traduction © 2003 Hurdfr par Olivier Péningault

Il est permis de redistribuer des copies de ce manuel tant que la notification du copyright et cette note de permission sont conservées.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the sections entitled ``Copying'' and ``GNU General Public License'' are included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.

Installer le Hurd
*****************

Ce document veut pouvoir fournir une méthode relativement simple et abordable pour réussir à faire fonctionner le Hurd avec aussi peu d'efforts que possible.

Petit survol
************

La distribution Debian GNU/Hurd, contrairement aux autres systèmes d'exploitation, ne dispose pas d'un joli programme d'installation. Un jour ce sera le cas, et peut-être contribuerez-vous à le créer. D'ici là, installer le GNU Hurd nécessite la présence d'un autre système d'exploitation, spécifiquement un simili-Unix (Philip Charles a créé un ensemble de CDs (disponibles sur : http://www.debian.org/ports/hurd/hurd-cd) qui contient un système Debian GNU/Linux, qui répond à cette nécessité, cependant cela reste fonctionnellement équivalent à ce qui est présenté ici.). Les utilisateurs ont signalé l'avoir installé avec succès depuis diverses saveurs d'Unix, telles GNU/Linux ou les BSDs. Les fonctionnalités minimales nécessaires du système de bootstrap sont en fait: créer un système de fichiers en ext2; extraire une archive tar dessus; installer GNU Grub.

Le GNU Hurd a une nature qui est assez semblable aux autres systèmes simili-Unix: après s'être connecté, l'utilisateur se retrouve avec un shell, et le VFS familier des Unix. Mais même si GNU tente d'être compatible POSIX, il n'est pas un Unix. Le Hurd est construit sur de nombreux concepts d'Unix, mais il les étend soit avec de nouvelles fonctionnalités, soit en changeant ce qui a été perçu comme des erreurs dans la conception originelle. La différence la plus perceptible, ce sont les translateurs, des programmes utilisateur qui interagissent avec le VFS. Ces systèmes de fichiers ne sont pas localisés dans le noyau, pas plus qu'ils ne doivent être exécutés par root; ils ont juste besoin d'un accès aux données statiques, et au point de montage. Une autre différence est que les processus, au lieu d'avoir une seule identité fixée lors de leur création, ont des jetons d'identification disjoints du processus, i.e. ils peuvent voir leurs droits étendus ou supprimés par une autorité appropriée.

Une grande familiarité avec l'environnement Unix est une nécessité pour se sentir à l'aise avec GNU. Avoir une certaine maîtrise des outils Debian pourra aussi se révéler indispensable pour configurer et maintenir un système GNU/Hurd.

Ce guide tente de rendre l'installation du Hurd aussi simple que possible. Si il y a des erreurs, elles sont probablement dûes à l'auteur (NDT: ou au traducteur !). Merci de les lui signaler, de même pour toute suggestion ou critique; elles sont toujours bienvenues.

Les choses sérieuses ou trouver une maison.
*******************************************

Si vous n'avez pas de partition libre ou de disque supplémentaire, ceci peut être l'étape la plus longue. Dans ce cas, vous devrez repartitionner votre disque dur. Une solution est d'utiliser l'éditeur de partitions GNU, Parted. Il n'implémente pas seulement l'édition basique des partitions, mais il permet aussi de retailler ou de déplacer des partitions. Il peut se télécharger sur :http://www.gnu.org/software/parted. Le manuel est assez complet, et comporte des tutoriels.

Le Hurd ne supporte qu'une taille de partition de l'ordre de deux gigaoctets; rien de plus grand ne fonctionnera. Cette limitation est consécutive à un choix d'implémentation fait il y a de nombreuses années, dans lequel le serveur de système de fichiers devait mapper la totalité du système de fichiers en mémoire. Comme la taille de la mémoire virtuelle disponible sur les architectures ia32 est de seulement quatre gigaoctets pour les applications, et qu'une grande partie de celle-ci est réservée pour le code, la pile et le tas, au final, la plus grande taille de mémoire virtuelle contigüe est généralement de l'ordre de deux gigaoctets.Cette limitation devrait disparaitre bientot.

Ceci dit, un unique système de fichiers de deux gigaoctets est largement suffisant pour un système utilisable. Beaucoup, cependant, préfèrent deux systèmes de fichiers, un pour la racine, et un pour /home. Cet autre schéma est très adapté pour les développeurs : compiler le Hurd peut nécessiter beaucoup d'espace.

Le Hurd supporte de nombreuses extensions par rapport au format ext2 classique. En gros, ce sont les translateurs passifs, et un quatrième ensemble de bits de permission pour les utilisateurs inconnus (utilisateurs sans identité et non les autres utilisateurs). Pour utiliser ces extensions, le propriétaire de cette partition doit être hurd. mke2fs, à part s'il n'est pas contraint sur la ligne de commande, va affecter le propriétaire au nom du système en cours d'exécution. Comme Hurd va diligemment respecter ceci, il faut être attentif à l'initialiser correctement, sinon le Hurd va planter de manière subtile. Prenez bien garde à ce que même si un système de fichiers appartient à un système donné, d'autres systèmes peuvent y accéder; ils seront juste incapables d'utiliser certaines extensions.

Pour créer un système de fichiers, utilisez mke2fs et passez-lui l'option -o hurd pour lui signifier que c'est à Hurd qu'appartient ce nouveau système de fichiers. Par exemple, disons que la partition est /dev/hda2

      # mke2fs -o hurd /dev/hda2

Le chargeur
***********

Contrairement à GNU/Linux et aux BSDs, le Hurd n'a pas d'auto amorceur; n'importe quel amorceur qui fournit le standard multiboot peut être utilisé pour charger le Hurd. Pour le moment, il y a un seul projet qui satisfait ces conditions: Grub, le GRand Unified Boot loader.

Un mot sur Grub. Contrairement aux amorceurs traditionnels sur x86, comme LILO, Grub est très puissant. Il dispose d'une interface en ligne de commande, de boopt, d'un support de terminal simple et d'une pléthore d'autres fonctionnalités. En plus, il peut charger la plupart des systèmes. Si vous avez déjà booté un alpha ou une sparc, vous comprenez ce que Grub peut faire. Cependant, ne soyez pas craintif, Grub est mieux. Vous l'adorerez. Vous ne reviendrez pas en arrière.

Pour télécharger Grub, allez sur http://www.gnu.org/software/grub. Là, vous pourrez télécharger un tarball, et une image de disquette. Si vous choisissez de télécharger le tarball, c'est un configure, make, make install. En prime, vous avez un magnifique manuel sur le fonctionnement de Grub. Sinon, si vous téléchargez l'image de la disquette, il suffit de la recopier sur une disquette pour avoir un Grub fonctionnel, par exemple:

      # dd if=grub-boot-image of=/dev/fd0

Vous pourrez toujours installer Grub sur votre disque plus tard.

Installation croisée
********************

La prochaine étape est de télécharger le système de base sur: ftp://alpha.gnu.org/gnu/hurd/contrib/marcus/gnu-latest.tar.gz.

Le tarball est configuré pour tout extraire dans le répertoire courant. Une fois que le système de fichiers est monté, l'archive peut être extraite. Si l'on considère que le système de fichiers est /dev/hda2, et le point de montage /gnu, alors il vous faut procéder ainsi :

      # mount -t ext2 /dev/hda2 /gnu
      # cd /gnu
      # tar --same-owner -xvzpf ~/gnu-latest.tar.gz

Booter the Hurd
***************

Tout est maintenant en place pour booter le Hurd pour la première fois. Après avoir vérifié que le disque de boot de Grub est dans le lecteur, rebootez. Si tout va bien, soit un menu de boot, soit une ligne de commande doivent apparaître. Si c'est le menu qui apparaît, tapez c pour avoir la ligne de commande.

Tout d'abord, c'est GNU mach qui doit être chargé. Ceci demande de connaître le type de système de fichiers, ainsi que la localisation de GNU mach. Grub utilise une nomenclature de partition qui est un peu différente de Linux et de Hurd : aussi bien les disques SCSI que IDE sont appelés (hdN,M. N est le numéro de disque (en partant de zéro) tel que décompté par le bios. Ceci étant, Grub ne fait aucune distinction entre les disques IDE et SCSI. M identifie la partition sur le disque. Il faut là aussi partir de zéro. Si cela vous semble quelque peu confus, soyez tranquille : Grub fournit aussi des aides.

Pour déterminer sur quel système de fichiers se trouve un fichier donné, Grub dispose d'une commande find. Lorsque cette commande est exécutée sans que soit précisé de système de fichiers particulier, Grub recherche ce fichier dans chaque système de fichiers et indique où il l'a trouvé. Par exemple, pour rechercher le noyau /boot/gnumach.gz:

       grub> find /boot/gnumach.gz
        (hd0,0)

Ici, Grub indique que /boot/gnumach.gz est sur (hd0,0).

Avant de charger le noyau, une option au moins, la partition racine, doit être entrée sur la ligne de commande. Ceci va être utilisé par Hurd lui-même (i.e.: non par Grub). Du coup, ceci doit être spécifié d'une façon telle que Hurd va la comprendre.

GNU Mach comptabilise les disques en partant de zéro. Les disques IDE sont préfixés par hd, tandis que les disques SCSI le sont par sd. Comme pour linux, les disques sont numérotés en fonction de leur position sur le contrôleur. Ainsi, le premier maître est hd0 et le deuxième esclave est hd3. Les partitions utilisent la même convention que les BSD pour le numérotage des partitions et ajoutent sM au nom de disque pour spécifier le nom complet. Notez bien que la base d'indexation des partitions est 1, et non 0. Le numéro de partition est simple à calculer: ajoutez 1 à ce qui a été trouvé par Grub.

Tant que le Hurd n'a pas été configuré, il doit être lancé en mode mono-utilisateur. Pour cela, il suffit d'ajouter l'option -s à la ligne de commande du noyau.

Si l'on considère que le premier disque (i.e.: hd0) est le maître sur le contrôleur secondaire, alors nous avons:

       grub> kernel (hd0,0)/boot/gnumach.gz root=device:hd2s1 -s
        [Multiboot-elf, ...]

Ensuite, le serveur du système de fichiers maître et le serveur exec doivent être chargés. Ceci est fait en utilisant les facilités de Grub pour charger les modules. Les paramètres sont la syntaxe par laquelle le noyau fournit des valeurs importantes aux serveurs.

       grub> module (hd0,0)/hurd/ext2fs.static \
        --multiboot-command-line=${kernel-command-line} \
        --host-priv-port=${host-port} \
        --device-master-port=${device-port} \
        --exec-server-task=${exec-task} -T typed ${root} \
        $(task-create) $(task-resume)
         [Multiboot-module  0x1c4000, 0x2cfe6a bytes]
       grub> module (hd0,0)/lib/ld.so.1 /hurd/exec $(exec-task=task-create)
         [Multiboot-module  0x494000, 0x27afe bytes]

Une fois que le GNU Hurd est lancé, ce processus peut être automatisé en ajoutant la ligne appropriée au fichier de configuration de /boot/grub/menu.list de Grub.

Il est maintenant possible de booter GNU:

     grub> boot

Restez tranquille, et regardez défiler les messages. C'est beaucoup plus important que ne le croient bien des gens: il y a un bug dans GNU mach qui fait que presser une touche pendant le processus de boot provoque une panique du noyau.

Si le Hurd n'arrive pas à booter, cela peut être dû aux interruptions partagées: GNU mach n'aime pas trop jouer avec elles. Vous pouvez rechercher leur présence avec /proc/interrupts sous GNU/Linux. De même, comme GNU mach ne supporte pas le chargement dynamique de modules dans le noyau, beaucoup de drivers sont compilés par défaut dans le noyau. Si vous avez de vieux périphériques, cela peut poser un problème car alors ceux-ci peuvent répondre de manière inopinée à une recherche d'un périphérique tout autre, et par la suite causer un crash. Compiler un nouveau noyau peut alors résoudre ce problème. GNU mach peut facilement être cross-compilé. Si vous utilisez Debian, tentez d'installer le paquet gcc-i386-gnu sous GNU/Linux.

Si cela ne vous est d'aucune utilité, voyez les liens à la fin de ce document. Sinon, finalement, demandez de l'aide sur une liste de diffusion appropriée.

Installation native
*******************

Dès que vous aurez une invite de shell, et à chaque fois que vous booterez en mode mono-utilisateur, vous devrez préciser le type de terminal:

      # export TERM=mach

Soyez avertis que CONTROL-C et autres ne fonctionnent pas en mode mono-utilisateur.

Maintenant, nous pouvons exécuter le script native-install. Ceci va configurer des paquets et démarrer des translateurs importants:

      # ./native-install

Avant que le script ne se termine, il va vous indiquer qu'il devra être exécuté une seconde fois. Suivez les instructions et rebootez en utilisant la commande reboot. A nouveau, bootez en mode mono-utilisateur, et exécutez la commande ./native-install.

Configuration
*************

Le réseau
=========

Pour configurer le réseau, le translateur pfinet doit être configuré. Ceci est fait en utilisant la commande settrans qui permet d'attacher un translateur à un noeud donné du système de fichiers. Quand les programmes accèdent à ce noeud, par exemple par un appel RPC, le système d'exploitation va automatiquement lancer le serveur pour répondre à la demande.

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

Ici, plusieurs arguments sont passés à settrans. Les deux premiers, fg, obligent tout translateur existant précédemment à s'arrèter. Les deux suivants, ap, rendent ce translateur à la fois actif et passif. En rendant le translateur actif, nous pourrons apercevoir immédiatement toute erreur sur stderr. La dernière sauvegarde les arguments dans le noeud, si bien qu'il sera redémarré de manière transparente plus tard (i.e.: cela est rendu permanent, même après les reboots). Les options sont suivies du nom du noeud auquel est attaché le translateur, puis le nom du programme (i.e. le translateur) à exécuter et les arguments à lui passer. L'option -i est l'interface sur laquelle pfinet va écouter, -a est l'adresse IP, -g est la passerelle à utiliser et -m est le masque de réseau.

Assurez-vous d'avoir ajouté des adresses de serveurs de noms dans votre fichier /etc/resolv.conf:

       nameserver 192.168.1.1

Pour tester la configuration, ping -c2 gateway. L'option -c est importante pour limiter le nombre de pings; pour mémoire, CONTROL-C ne marche pas en mode mono-utilisateur.

DHCP ne marche pas encore sous le Hurd. Ceci est dû aux limites de pfinet : il est basé sur le code de la pile TCP/IP de Linux, et ne peut écouter sur 0.0.0.0.

De l'aide sur settrans peut être obtenue en mettant l'option --help. De l'aide sur un translateur spécifique peut être obtenue en l'appelant depuis la ligne de commande avec le même argument:

      # /hurd/pfinet --help

Comme il peut y avoir beaucoup de sortie, il est préférable de rediriger ceci vers un paginateur comme less.

Autres systèmes de fichiers
===========================

Ensuite, éditez /etc/fstab pour y ajouter d'autres systèmes de fichiers tels que le swap. C'est très important d'utiliser du swap; le Hurd va être plus stable d'un ordre de grandeur. Pour information, le Hurd peut partager une partition de swap de manière transparente avec Linux, mais saura aussi joyeusement paginer sur n'importe quel périphérique, y compris une partition utile, genre celle contenant votre répertoire personnel. Par défaut, nano est le seul éditeur installé dans la distribution de base.

Voici un exemple de fichier /etc/fstab:

     # <file system> <mount point>   <type>  <options>  <dump>  <pass>
     /dev/hd2s1      /               ext2    rw         0       1
     /dev/hd2s2      /home           ext2    rw         0       2
     /dev/hd2s3      none            swap    sw         0       0

N'oubliez pas de créer les bons périphériques en utilisant la commande MAKEDEV:

      # cd /dev
      # ./MAKEDEV hd2s1 hd2s2 hd2s3

Pour monter un système de fichier NFS, on utilise le translateur /hurd/nfs. Quand on le lance en tant qu'utilisateur, cette commande utilisera un port au dessus de 1024. Par défaut, GNU/Linux rejettera ceci. Pour dire à GNU/Linux d'accepter les connexions issues d'un port non privilégié, il faut ajouter l'option insecure à la ligne d'export. Voici un exemple de fichier /etc/export en considérant que l'adresse IP du client est 192.168.1.2 :

       /home  192.168.1.2(rw,insecure)

Pour monter ceci depuis une machine sous GNU, et en considérant que l'IP du serveur est 192.168.1.1 :

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

Rebooter
========

En fin de compte, redémarrez en mode multi-utilisateur, i.e. comme pour le mode mono-utilisateur, mais en ôtant l'option -s lorsque l'on charge le noyau. Pour plus de détails, voyez see Booter le Hurd.

Joyeux hacking!

Derniers mots
*************

Documentation
=============

Pour comprendre le Hurd, commencez avec la page principale du site de Debian : http://www.debian.org/ports/hurd/ et sur le site de GNU : http://hurd.gnu.org.

Envisagez aussi de lire le code et d'écrire de la documentation.

Le menu de Grub
===============

Devoir charger le noyau à la main à chaque fois peut être vraiment fastidieux. Editez le fichier /boot/grub/menu.lst et modifiez-le comme il faut; booter deviendra plus rapide et plus facile.

Ajouter des périphériques.
==========================

Par défaut, seuls très peu de périphériques sont présents dans le répertoire /dev. Il faut lancer le script MAKEDEV pour créer tous les noeuds de périphériques nécessaires.

Installer plus de paquets
=========================

Il y a de nombreuses façons d'installer des paquets. Télécharger et utiliser la dpkg -i fonctionne, mais présente beaucoup d'inconvénients. Le moyen le plus simple est d'utiliser la commande apt-get. Éditez le fichier /etc/apt/sources.list et ajoutez les deux entrées suivantes :

     deb ftp://alpha.gnu.org/gnu/hurd/debian unstable main
     deb ftp://ftp.debian.org/debian unstable main

ftp://alpha.gnu.org contient des paquets qui ont été hacké ou dont les patches n'ont pas encore été intégrés.  Pour utiliser un mirroir debian local, voyez http://www.debian.org/distrib/ftplist.

Si GNU Mach ne reconnait pas votre carte réseau, ou si vous utilisez un modem, le seul moyen de mettre à jour sera de télécharger les paquets puis de les copier sur votre système GNU. Le moyen le plus simple est alors d'utiliser apt off-line. Voyez /usr/share/doc/apt/offline pour plus d'informations.

XFree86
=======

XFree86 a été porté, et toutes les cartes qu'il est capable de faire marcher sans support noyau devraient fonctionner.

D'abord, mettez en place le translateur du clavier :

      # cd /dev
      # ./MAKEDEV kbd

Ensuite, le translateur de la souris. Pour une souris sur port série, remplacez com0 par le port de communication approprié:

      # settrans /dev/mouse /hurd/mouse --device=com0 --protocol=microsoft

Vérifiez bien que /dev/com0 existe. Si ce n'est le cas, créez-le en utilisant MAKEDEV comme d'habitude.

PS/2 ne requiert pas de noeud de périphérique. Il suffit de faire :

      # settrans /dev/mouse /hurd/mouse --protocol=ps/2

D'autres souris peuvent être utilisées ; exécutez /hurd/mouse avec l'option --help pour plus de détails.

Vous aurez besoin de plusieurs paquets relatifs à X. x-window-system-core, rxvt et twm ou fvwm sont un bon début.

Debconf peut être utilisé pour configurer XFree86, cependant, il n'est pas compatible avec le Hurd et le fichier de configuration devra être modifié. Il faut changer la section pointeur en:

     Section "Pointer"
       Protocol "osmouse"
       Device "/dev/mouse"
     EndSection

Emulate3Buttons peut être ajouté de façon optionnelle. Rien d'autre ne marchera.

GNU n'utilise pas ld.so.conf. Aussi, comme /X11R6/lib n'est pas dans le chemin de recherche des librairies par défaut, il faut ajouter soit dans /etc/profile soit dans le fichier .profile de chaque utilisateur:

     export LD_LIBRARY_PATH=/X11R6/lib:$LD_LIBRARY_PATH

Finalement, exécutez startx.

Il y a plusieurs choses au sujet desquelles il faut être averti. xterm ne fonctionne pas correctement car il SETGID (et en plus, il ne prend pas en compte LD_LIBRARY_PATH et échoue en tentant de charger la librairie partagée appropriée) ; essayez rxvt. update-menu n'a pas encore été porté. Du coup, vous n'aurez pas de sympatiques menus Debian. Cependant, une implémentation des pthreads existe, et tous les paquets qui en dépendent n'ont pas encore été portés : n'espérez pas que Gnome ou KDE fonctionnent.

Terminaux virtuels
==================

Le Hurd n'a pas de terminaux virtuels, mais c'est en développement. Utilisez le paquet screen en attendant.

Listes de diffusion
===================

 1. debian-hurd@debian.org  Discutions sur le Hurd tant qu'elles concernent Debian.

      1. Archive: http://lists.debian.org/#debian-hurd

 2. web-hurd@gnu.org  Développement des pages web du Hurd sur http://hurd.gnu.org.

      1. Archive: http://mail.gnu.org/pipermail/web-hurd/

 3. help-hurd@gnu.org  Aide sur le Hurd en général.

      1. Archive: http://mail.gnu.org/pipermail/help-hurd/

 4. bug-hurd@gnu.org Signalements de bugs et développement en général. Envoyez vos patches ici.

      1. Archive: http://mail.gnu.org/pipermail/bug-hurd/

Autres sources
==============

Le Wiki Hurd, http://hurd.gnufans.org/bin/view/Hurd/WebHome, répond aux problèmes courants auxquels les nouveaux utilisateurs sont confrontés.

Travaux référencés
******************

``The Easy Guide to Installing Hurd on a Linux Box'' Copyright © 1999 Matthew Vernon matthew@debian.org. http://www.pick.ucam.org/~mcv21/hurd.html