Ce document vise à fournir un jeu d'instructions facile et relativement peu fastidieux sur la façon d'obtenir et de faire fonctionner 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.
Veuillez noter que quelques points de ce manuel sont peu commodes parce qu'ils prennent beaucoup de temps et peuvent causer des problèmes. Vous préférerez peut-être l'installation à l'aide d'images de CD préparées, particulièrement si vous êtes débutant. Même s'ils sont périmés, normalement, ils fonctionnent. Vous pouvez toujours obtenir des mises à jour depuis les dépôts mis en ligne.
La distribution Debian GNU/Hurd, contrairement à des distributions d'autres systèmes d'exploitation, n'a pas de joli programme d'installation. Un jour il y en aura un, et vous aiderez peut-être à sa conception et à son implantation. Toutefois, en attendant ce jour, installer Debian GNU/Hurd requiert un autre système d'exploitation, plus spécifiquement un autre système de type Unix. Des utilisateurs ont indiqué avoir réussi des installations en utilisant aussi bien différentes versions de GNU/Linux que des BSD. Le minimum requis sur le système d'exploitation d'amorçage est la capacité : de créer des systèmes de fichiers ext2, d'y extraire une archive tar, d'installer GNU Grub.
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.
Si vous n'avez pas de partition disponible ni de disque dur supplémentaire, c'est peut-être l'étape la plus longue. Dans ce cas, vous devrez repartitionner le disque dur. Une solution est d'utiliser l'éditeur de partition de GNU, Parted. Il permet non seulement l'édition basique de partitions, mais aussi le redimensionnement de partitions et leur déplacement. Son manuel est assez complet et inclut plusieurs didacticiels.
Le Hurd prend en charge plusieurs extensions au format du système de fichiers
ext2fs. Les principales d'entre elles sont les traducteurs passifs et une
quatrième série de bits de permissions pour les utilisateurs inconnus
(utilisateurs sans identité et non l'utilisateur autre
des permissions
Unix classiques). Pour utiliser ces extensions, le propriétaire de la
partition doit être hurd. mke2fs, sauf
mention contraire spécifiée en ligne de commande, le noyau lancé sera le
propriétaire de la partition. Comme le Hurd respecte ce paramètre, il faut
faire attention à le configurer de manière appropriée, sinon le Hurd échouera
de manière subtile. Soyez conscient que même si un système de fichiers
appartient à un noyau donné, les autres peuvent quand même l'utiliser ;
ils ne peuvent seulement pas utiliser certaines extensions.
Pour créer un système de fichiers, utilisez mke2fs et passez-lui
les options -b 4096 -I 128 -o hurd afin de désigner le Hurd comme
propriétaire du nouveau système de fichiers. Par exemple, si la partition est
/dev/hda2 :
# mke2fs -b 4096 -I 128 -o hurd /dev/hda2 |
Le chargeur d'amorçage du système GNU est Grub (le GRand Unified Boot loader), et sa tâche principale est de charger le cœur du système GNU (Mach et le Hurd). Tout chargeur d'amorçage qui gère le standard d'amorçage multiple pourra cependant charger Mach et le Hurd. En ce moment (à notre connaissance), GNU Grub est le seul chargeur d'amorçage qui gère ce standard.
Un mot sur Grub. Contrairement aux chargeurs d'amorçage sur x86, comme LILO, Grub est très puissant. Il a une interface en ligne de commande, bootp, la gestion de terminal factice et pléthore d'autres fonctionnalités. De plus, il peut amorcer pratiquement n'importe quel noyau. Si vous avez déjà amorcé une machine alpha ou sparc, vous comprendrez ce que Grub peut faire. Par conséquent, n'ayez pas peur : Grub est mieux. Vous l'aimerez. Vous ne changerez pas d'avis.
Il est probablement mieux d'installer le Grub avant le Hurd, mais vous pourrez toujours l'installer sur votre disque dur plus tard.
L'étape suivante est d'obtenir un système de base. Il existe plusieurs possibilités : si vous utilisez un système Debian, vous pouvez utiliser le paquet crosshurd. Sinon, vous pouvez obtenir une archive de système de base à jour depuis l'un des miroirs listés à http://wiki.debian.org/DebianPorts/Mirrors.
L'archive est configurée pour tout extraire vers le répertoire courant. Une fois le système de fichiers monté, l'archive peut être extraite. En supposant que le système de fichiers est sur /dev/hda2, que le point de montage est /gnu et que l'archive est dans le répertoire personnel de l'utilisateur courant, il est nécessaire de faire comme suit :
# mount -t ext2 /dev/hda2 /gnu # cd /gnu # tar --same-owner -xvjpf ~/gnu.tar.bz2 |
Tout est maintenant prêt pour amorcer GNU/Hurd pour la première fois. Après avoir vérifié que le disque d'amorçage de Grub est dans le lecteur, réamorcez. Si tout se passe bien, soit un menu Grub, soit une ligne de commande sera affiché. Si c'est un menu qui apparaît, veuillez appuyer sur c pour aller sur la ligne de commande.
D'abord, GNU Mach devra être chargé. Il faudra connaître le système de
fichiers et le chemin vers GNU Mach. Grub utilise une nomenclature de
partitions un peu différente de Linux comme du Hurd : IDE et SCSI
sont tous les deux nommés (hdN,M). N est le numéro de
lecteur (commence à zéro) tel qu'énuméré par le BIOS. Cela étant fait,
Grub ne fait aucune distinction entre les disques IDE et SCSI. M
identifie la partition sur le lecteur. Il est aussi indexé à partir de zéro. Si
cela vous semble confus, relaxez-vous : Grub va vous aider.
Pour déterminer le système de fichiers sur lequel un fichier en particulier se
trouve, Grub fournit la commande find. Quand cette commande est
lancée avec un nom de fichier donné, Grub recherche sur chaque système de
fichiers le fichier spécifié et affiche l'endroit où il a été trouvé. Par
exemple, pour chercher le noyau, /boot/gnumach.gz :
grub> find /boot/gnumach.gz (hd0,0) |
Grub indique ici que /boot/gnumach.gz est sur (hd0,0).
Avant d'amorcer le noyau, une option au moins, la partition racine, doit être indiquée sur la ligne de commande. Elle sera utilisée par le Hurd lui-même (c'est-à-dire pas par Grub). Elle doit donc être formulée en termes que le Hurd pourra comprendre.
GNU Mach énumère les disques à partir de zéro. Les lecteurs IDE sont
préfixés par hd, tandis que les disques SCSI sont préfixés par
sd. Comme sur Linux, les lecteurs sont numérotés selon leur
position sur le contrôleur. Par exemple, le maître primaire est
hd0 et l'esclave secondaire est hd3. Les partitions
utilisent la convention de nommage de tranches de BSD et ajoutent un
sM au nom de lecteur afin d'indiquer une partition. Veuillez noter
que M est indexé à partir de un, et non de zéro. Le numéro de
tranche est facile à calculer : il suffit d'incrémenter celui qu'utilise
Grub d'une unité.
Comme le Hurd n'a pas encore été configuré, il doit être lancé en mode
utilisateur unique
. Ajouter -s à la ligne de commande du
noyau est tout ce qu'il y a à faire.
En supposant que le premier lecteur (à savoir (hd0)) est le maître sur le contrôleur secondaire, nous aurions :
grub> kernel (hd0,0)/boot/gnumach.gz root=device:hd2s1 -s [Multiboot-elf, ...] |
Ensuite, le serveur du système de fichiers racine et le serveur
exec doivent être chargés. Cela est fait par le biais des
capacités d'amorçage de module de Grub. Les ${var} sont remplies par
GNU Mach. Les paramètres utilisés par le Hurd indiquent le type
d'information fournie. Comme la ligne de commande ext2fs est très longue, elle
peut être rallongée par des sauts de ligne protégés à la manière d'une ligne de
commande Unix. Veillez à ce qu'il n'y ait pas d'espace après l'antislash en fin
de ligne. Veillez aussi à distinguer { et } de
( et ).
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 le Hurd lancé, le procédé peut être automatisé en ajoutant la ligne de commande appropriée au fichier de configuration /boot/grub/menu.lst de Grub.
GNU/Hurd peut maintenant être amorcé :
grub> boot |
Si GNU/Hurd ne parvient pas à s'amorcer, cela peut être dû à des interruptions partagées : GNU Mach ne se sert pas très bien de celles-ci. Vous pouvez vérifier votre situation en regardant, par exemple, le fichier /proc/interrupts sous GNU/Linux. Aussi, comme GNU Mach ne gère pas les modules chargeables du noyau, de nombreux pilotes sont compilés dans le noyau par défaut. S'il y a d'anciens périphériques, cela peut être un problème : un périphérique pourra répondre incorrectement à une requête faite à un périphérique qui n'a rien à voir et ainsi entraîner un arrêt inopiné. Construire un nouveau noyau seulement avec les pilotes des périphériques requis résoudra normalement ce problème. GNU Mach peut être facilement compilé de manière croisée. Si vous utilisez Debian, installez le paquet mig et votre gcc standard devrait fonctionner.
Si cela ne vous aide pas, veuillez demander sur la liste de diffusion appropriée.
Une fois qu'une invite d'interpréteur de commandes vous est affichée, et quand le Hurd est en mode utilisateur unique, il est nécessaire de déterminer le type de terminal :
# export TERM=mach |
Attention : CONTROL-C et compagnie ne marcheront pas en mode utilisateur unique.
Nous pouvons maintenant lancer le script native-install. Cela
configurera les paquets et installera les traducteurs importants :
# ./native-install |
Avant la fin de l'exécution du script, celui-ci indiquera qu'il a besoin d'être
lancé une deuxième fois. Suivez ses instructions et réamorcez le système en
utilisant la commande reboot. À nouveau, passez en mode
utilisateur unique et lancez ./native-install.
Pour configurer le réseau, le traducteur pfinet doit être configuré. Cela se
fait par la commande settrans qui attache 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 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. Ce dernier 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 d'un 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 nom de domaines à 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.
DHCP ne fonctionne pas encore sous le Hurd. C'est dû à des limitations de pfinet : il est basé sur le code TCP/IP de Linux et est incapable d'écouter sur 0.0.0.0.
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.
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 est le seul éditeur de texte installé par
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 tous les périphériques avec la commande
MAKEDEV :
# cd /dev # ./MAKEDEV hd2s1 hd2s2 hd2s3 |
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 port au-dessus de 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 ceci sur une machine GNU et en supposant que l'adresse IP du serveur nfs est 192.168.1.1 :
# settrans -cgap /mount/point /hurd/nfs 192.168.1.1:/home |
Enfin, réamorcez en mode multiutilisateur, c'est-à-dire de la même manière que pour le mode utilisateur unique, sans l'option -s de chargement du noyau. Pour de plus amples informations, veuillez vous référer à la section 5. Amorçage du GNU/Hurd.
Bon bidouillage !
Charger le noyau manuellement à chaque fois peut se révéler très fastidieux. Veuillez adapter le fichier /boot/grub/menu.lst de manière appropriée ; l'amorçage sera plus rapide et plus facile.
Par défaut, quelques périphériques seulement sont créés dans le répertoire
/dev. Veuillez utiliser le script MAKEDEV pour créer tous
les nœuds de périphériques nécessaires.
Il y a plusieurs manières d'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-get. Veuillez éditer
/etc/apt/sources.list et ajouter l'une des entrées non publiées
à partir de
http://wiki.debian.org/DebianPorts/Mirrors :
deb http://ftp.debian-ports.org/debian unreleased main |
http://ftp.debian-ports.org/ et ses miroirs contiennent des paquets qui ont été modifiés ou des corrections qui n'ont pas encore été intégrées en amont ou dans Debian.
Et la distribution instable à partir de l'un des miroirs de Debian (voir la liste complète http://www.debian.org/mirror/list) contenant cette architecture :
deb http://ftp.fr.debian.org/debian unstable main |
Si GNU/Mach ne reconnaît pas votre carte réseau ou si vous utilisez un modem, le seul moyen de mettre à jour sera de télécharger les paquets, de les transférer ensuite sur le système GNU. Le moyen le plus facile de faire ceci 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.
Outre la console Mach que vous rencontrez pendant l'installation, GNU/Hurd possède une puissante console en espace utilisateur qui fournit des terminaux virtuels. Actuellement, vous devez lancer la console Hurd manuellement avec la commande suivante :
# console -d vga -d pc_mouse --repeat=mouse -d pc_kbd --repeat=kbd -d generic_speaker -c /dev/vcs |
Dans la console Hurd, vous pouvez passer d'un terminal virtuel à un autre via ALT+F1, ALT+F2 et ainsi de suite. ALT+CTRL+BACKSPACE 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 a été porté, et toutes les cartes vidéo qu'il gère sans nécessiter de module noyau devraient fonctionner.
Vous devez être dans la console Hurd et avoir configuré les répétiteurs comme
indiqué dans la section 8.4 ci-dessus. Comme /dev/kbd est
codé en dur en tant que périphérique pour le clavier dans X.Org, vous devez
créer un lien symbolique :
# cd /dev # ln -s cons/kbd kbd # ln -s cons/mouse mouse |
Vous aurez besoin de plusieurs paquets de X. Vous pouvez commencer par
x-window-system-core, rxvt et twm,
fvwm ou wmaker.
Debconf peut être utilisé pour configurer X.Org ; toutefois, il ne gère pas le Hurd correctement et le fichier de configuration nécessitera quelques modifications. Après la configuration, veuillez changer la section pointeur comme suit :
Section "Pointer" Protocol "osmouse" Device "/dev/mouse" EndSection |
Les options Emulate3Buttons et ZAxisMapping doivent toutes deux être désactivées.
Enfin, lancez startx.
Il y a plusieurs choses à savoir. update-menu n'a pas encore été
porté. C'est pourquoi il n'existe pas de jolis menus Debian. Bien qu'une
implantation avec pthreads existe, tous les paquets pthread n'ont
pas été portés : ne vous attendez pas à ce que Gnome et KDE fonctionnent.