Les recettes de cuisine sur GNU/Hurd

Préambule 1: ce qui va suivre suppose parfois qu'en plus de GNU/Hurd, on a une distribution Linux correctement installée. L'essentiel des manipulations sous Linux sont à faire sous root.

Préambule 2: l'idée de cette page a doucement dérivé en fourre-tout. Il s'agit plus d'un ensemble de chose que j'ai constaté et qui je pense pourront resservir.

Lire les documents existants

Un premier pas

Cette recommandation est certes très générale, mais tellement réelle. Sur les CD de la distribution Debian GNU/Hurd il y le répertoire hurd-doc qui contient déjà quelques documents très interressant.

Sur le net

Il y a bien sur des sites ouèbes. Je les découpes en deux catégories : les sites plus spécialement consacrés au coeur du systèmes, comme ce site, alors que d'autre sont plus consacré à la distribution Debian GNU/Hurd. Pour ma part je trouve plus interressant de parcourir la deuxième catégorie, même si la séparation coeur du système/utilisation du système est encore très flou car GNU/Hurd est un système encore en plein développement.

Enfin dans les sites ouèbes je soulignerais l'existance du site récent mais offrant de la documentation en français : hurdfr.org.

Je profite de l'occasion pour faire un peu d'autopromotion, j'essaye ces derniers temps de rassembler le maximum de lien au sujet de GNU/Hurd sur le site mylinea.com à cette adresse http://www.mylinea.com/magnux/informatique/os/hurd.

Ne pas oublier les mailing-list qui restent essentielles. Les developpeurs rédigent beaucoup de documentation à la demande suite à une question précise. Mais ces docs ne sont pas diffuser au délà des mailing list. Donc il faut aller y jetter un oeil. [trouver adresses d'archive]

Quelques points à surveiller

Malgré ses presque dix ans d'existance, GNU/Hurd reste un système attirant plus les curieux qu'un système réellement utilisé. La conséquence est que beaucoup de gens l'essayent quelques temps, rédigent des docs et l'abandonnent. Comme c'est aussi un système en pleine évolution, ces docs deviennent rapidement obsolètes. Donc avant de lire une doc trouvée au hasard sur le net, toujours chercher à dater cette doc. Il faut être d'autant plus sceptique que la doc est ancienne.

Ajouter une nouvelle partition à Hurd depuis Linux

Hurd ne supporte pas encore à la perfection tous les types de partition ext2. Ainsi si vous créez des partitions ext2 à partir de DiskDrake, vous n'arriverez pas à y accéder depuis Hurd.

Personnelement, je partitionne mes disques avec un outil graphique (DiskDrake). Attention, pour l'instant il est déconseillé de faire des partitions de plus de 1Go pour Hurd. Ensuite je reformatte les partitions à la ligne de commande comme cela :

mke2fs -o hurd /dev/hdXN
l'option -o hurd est très importante. (/dev/hdXN -> device de la partition à formatter)

Ensuite il ne me reste plus qu'a monter cette partition sous GNU/hurd.

Il ne faut pas oublier non plus de créer le device sous GNU/Hurd pour cela :
cd /dev
./MAKEDEV /dev/hdXsN

Rappel sous Hurd, il faut d'une part editer le fichier /etc/fstab, puis monter la partition avec la commande :

settrans -cgap /point_de_montage /hurd/ext2fs /dev/hdXsN
/p>

Configurer le clavier français

Il y a deux choses bien distinct : configurer le clavier en mode texte, et configurer le clavier sous X. Comme cette deuxième chose est infiniment plus simple, je vous recommande de d'abord vous concentrer sur celle-ci.

Installer X

Deux documents à lire avant de se lancer dans l'installation de X :

Et voici mes instructions, largement inspirées des documents cités ci-dessus.

  1. Créer le device du clavier :
    cd /dev
    ./MAKEDEV kbd
    
  2. Créer le device de la souris, toujours dans le répertoire /dev :
    cd /dev
    settrans -c /dev/mouse /hurd/mouse --device=com0 --protocol=microsoft
    
    Le protocol peut aussi être ps/2.
    cd /dev
    settrans -c /dev/mouse /hurd/mouse --protocol=ps/2
    
    Ne pas hesiter à faire
    /hurd/mouse --help
    
    pour avoir plus d'info. Il me semble sur mon installation j'ai du créer manuellement le device com0 comme cela:
    ./MAKEDEV com0
    
    mais c'est sous réserve, et je vais pas recommancer mon installe à 0 pour vérifier cela :( .
  3. Installer les packages se raportant à X, c'est à dir eà peu près tous les packages se trouvant dans pool/main/x/xfree86. Il a noter que le package xdm configure tout ce qu'il faut pour que X soit lancer automatiquement au boot.
  4. Configuration du fichier /etc/X11/XF86Config-4. En choisir un qui marche sous Linux. Le recopier sur la partition Hurd. Changer les lignes suivantes :
       Section "InputDevice"
        Driver "mouse"
        Option "Protocol" "osmouse"
        Option "Device"   "/dev/mouse"
    
    Sur certaine distribution linux la gestion des fontes diffères, donc vérifier la présence de cette ligne :
        FontPath   "/usr/X11R6/lib/X11/fonts"
    
  5. Ajouter dans le fichier /etc/profile les lignes suivantes :
    LD_LIBRARY_PATH=/X11R6/lib:$LD_LIBRARY_PATH
    
    export LD_LIBRARY_PATH
    
    (à voir, d'après certain message, il serait plus correct d'utiliser la variable RPATH)
Et il ne reste plus qu'a faire un test avec startx. Si cela marche, faite un reboot pour voir si tout marche correctement.

Basculer en mode texte

Une fois le package xdm installé, X se lance tout seul. Si vous renasculer manuellement, le plus pratique que j'ai trouvé c'est de tuer X quelques fois avec par exemple la combinaison de touches ctrl-alt-backspace.

PATHMAX

Si vous essayez de compiler des applications du monde UNIX sous GNU/Hurd, vous allez très vite être confronté au problème suivant : la constante PATHMAX n'existe pas sous GNU/Hurd.

Sans être sur de tout les détails, voici quelques explications.

PATHMAX est une constante qui défini la longueur maximale du chemin et du nom d'un fichier sous un système. Sous GNU/Hurd, comme les développeurs ont travaillés proprement, cette longueur est aussi longue que nécessaire, donc il n'est pas besoin de la définir.

Cependant dans la norme POSIX, la constante PATHMAX est définie, certes comme optionnelle, mais elle est définie. Donc beaucoup de développeur l'utilisent.

Pour résoudre ce problème quand j'y suis confronté, j'ajoute dans le source ces trois lignes :

#ifndef PATHMAX
#define PATHMAX 2048
#endif
Si vous avez une meilleur solution, je suis prenneur.

xterm

J'ai rencontré un problème avec xterm. Xterm, marchait impécable sous root et ne marchait pas sous une user quelconque.

Ceci vient du faite que xterm était installé avec un le bit s positionné. Il faut le supprimer sous root :

chmod -s /X11R6/bin/xterm
Et après ceci, xterm devrait marcher.

Séquence de démarrage

Au démarrage de la machine, c'est GRUB qui lancé. GRUB est chargé de lancer un système d'exploitation. Dans notre cas, on va supposer qu'il s'agit de GNU/Hurd.

Grub lance le programme /boot/gnumach.gz. C'est le système de micronoyaux Mach.

Une fois cette "infrastructure" lancée, c'est le programme /boot/serverboot.gz qui est lancé. C'est le système d'initialisation de GNU/Hurd.

Le programme serverboot commence par lancer les serveur Hurd. (Penser à determiner le role du fichier /boot/servers.boot) Une fois les serveurs lancés, il execute le script /libexec/rc.

Le programme serverboot est distribué dans le package GNU/Hurd, mais une lecture des entetes montre qu'il s'agit de programme developpé par l'équipe de GNUmach.

Pour verifier cela, un exercice consiste à ajouter des traces. J'ai suis arrivé très facilement pour le script rc, il suffit de rajouter l'affichage de message avec la commande echo, comme par exemple :

echo "ceci est la première ligne de /libexec/rc"
Pour GNUmach et serverboot j'ai pas encore réussi à tracer de près l'execution à l'aide de message. Je sais bien que c'est une technique de debuggage archa¨ique, mais c'est la plus simple à mettre en oeuvre :)

Recompilation de GNU/Hurd

Vu que ça m'a toujours amusé de tout recompiler, j'ai pas pu résister à recompiler GNU/Hurd. J'ai procédé en quatre étape : chargement des sources récents, sauvegarde de l'état actuel, compilation et installation.

Chargement des sources

Bon, sur tout bon mirroir du GNU, on trouve un fichier hurd-0.2.tgz datant de 1997, mais cette version est complêtement obsolète. Il faut aller sur ftp://alpha.gnu.org/gnu/cvs/hurd.tgz pour avoir la dernière version à jour. (ici pour avoir les instructions pour charger depuis cvs).

Sauvegarde

Recompiler son système d'exploitation est toujours risqué, surtout si celui-ci est en plein développement. Donc il faut s'attendre à tout perdre lors d'une telle opération. Néanmoins, il y a un risque plus probable que de tout perdre qui est d'avoir recompiler des serveurs Hurd qui ne marche pas, et donc un système qui ne démarre pas. C'est là qu'il est intéressant d'avoir une distribution linux qui marche et qui accède à la partition Hurd pour pouvoir faire le retour arrière.

Pour ma part, j'ai fait cette sauvergarde sous Hurd avec le compte root :

tar zcvf save-hurd-AAAAMMJJHH.tgz /lib /include /hurd /libexec /sbin /bin /boot

Pour restituer cette sauvegarde (ce que j'ai du faire plusieurs fois avant de réussir à compiler GNU/Hurd) j'ai du faire ceci sous Linux en root:

cd /le/chemin/jusqu/a/la/partition/racine/de/hurd
tar zxvf /le/chemin/jusqu/au/fichier/save-hurd-AAAAMMJJHH.tgz

Compilation

Prérequis

La compilation peut se faire sous n'importe quel compte.

Je n'ai pas réussie à compiler avec le compilateur gcc-2.95 fournie avec la distribution Debian GNU/Hurd version G1. J'ai installer moi-même la version 3.0.4, et j'ai eu quelques soucis, détaillé plus loin.

Il faut verifier que le programme autoconf est installé. Pour ma part je suis tombé sur une référence croissée des packages, donc j'ai suis arrivé en faisant :

cd /cdrom/pool/main/a/autoconf2.13
dpkg - i autoconf2.13_2.13-38_all.deb ../autoconf/autoconf_2.52-2_all.deb

Il faut vérifier que le programme mig est installé. Le package se trouve sous /cdrom/pool/main/m/mig/, il s'installe sasn problème.

Enfin prévoir 300Mo de disponible.

Mode opératoire

Il faut commencer par décompresser le package :

tar zxvf hurd.tgz
Ensuite il faut construire le fichier de configuration dans l'arbre des fichier source :
cd hurd
autoconf
cd ..
Il faut compiler dans une arborescence différente de celle du source, d'ou la création d'un répertoire :
mkdir hurd-obj
cd hurd-obj
et c'est dans ce répertoire que l'on lance la configuration et la compilation :
../hurd/configuration
make

L'installation

Une fois la compilation terminer, l'installation se fait sous root en lancant make install :

su -
make install
Arrivé ici, vous pouvez faire une premier test pour voir si l'installation s'est bien passée, c'est executer les quelques commandes réinstaller comme la commande ps. Si elle s'execute correctement, vous pouvez passer à l'étape suivante qui est le reboot. Si la commande échoue, vous pouvez restaurer votre sauvegarde et réfléchir à ce qui a pu aller de travers.

Après il ne vous reste plus qu'a rebooter votre machine :

reboot

Quelques surprises...

Si tout marche du premier coup, c'est que vous êtes un chanceux. Moi je n'ai pas eu cette chance. Ceci m'a pemis de tester que ma sauvegarde marchait bien.

Je vous passe toutes les étapes qui m'ont permis de comprendre ce qui se passait, mais j'avais un problème avec mon compilateur installé par mes propres soins. En effet quand j'installe gcc, je l'installe en général sous /opt/gnu/gcc. Et visiblement dans ce cas, il ne réussissait pas à trouver la librairie dynamique libgcc_s.so.1 . Donc j'ai du copier cette librairie à un endrot plus accésible (/lib) pour que les servers puissent la trouver :

cp /opt/gnu/gcc/lib/libgcc_s.so.1 /lib

Compilation de GNU/Mach

Après avoir recompilé GNU/Hurd, il ne faut pas s'arreter en si bon chemin, continuons avec GNU/Mach.

Présentation rapide

GNU/Mach s'occupe de toutes les opérations bas niveaux: gestion de la mémoire, gestion des messages interprocessus etc. Il y a aussi les drivers dans gnumach, mais plus pour très longtemps, puisque les développeurs parlent de prendre les drivers d'OSkit. Mais pour l'instant c'est bien dans gnumach qu'il y a les drivers et qu'ils faut les configurer.

Quelques précautions

Ce genre de manipulations est toujours délicate, et il faut mieux penser avant à la réparation des dégats, c'est à dire prévoir un "retour arrière". Ceci se gère essentiellement grace à des sauvegardes.

L'outil par exellence pour la sauvegarde c'est tar, et mes expériences ont montrées qu'il faut sauvegarder /boot et /include pour etre parfait, soit:

cd /un/repertoire/de/sauvegarde
tar zcvf gnumach-save.tgz /boot /include
Si vous voulez restituer le tout, voici la manipulation:
cd /
tar zxvf /un/repertoire/de/sauvegarde/gnumach-save.tgz

Chargement des sources

Un peu comme tout le système GNU Hurd, cet outil est encore considéré comme étant en plein développement, alors il faut mieux chercher à toujours prendre la dernière version.

Pour avoir une version très récente, il y a deux technique : un site ftp, et un server CVS. Le site ftp est préféré pour sa simplicité d'utilisation. Le serveur CVS est apprécié pour son efficacité à avoir les changements en temps réelle.

Chargement sur le site ftp

Le chargement se fait sur le site ftp suivant : ftp://alpha.gnu.org/gnu/cvs ou se trouve des snapshots de la plupart des projets en développement actif. Dans notre cas nous nous intéressons au fichier gnumach.tgz.

Un fois le fichier archive rappatrié, il faut penser à le décompresser :

tar zxf gnumach.tgz

Chargement sur le serveur CVS

Le chargement sur le serveur CVS se fait en deux lignes de commande, un mot de passe est demandé, se contenter d'appuyer sur la touche entrée :

cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/hurd login
cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/hurd co gnumach

L'enorme avantage de la méthode CVS sur la méthode ftp est que si le produit évolue un peu, vous retappez les deux lignes précedente, et seul le différentiel est mis à jour, alors qu'avec la méthode ftp, vous devez tout recharger.

Prérequis

J'ai noté deux choses importantes :

Compilation

La compilation en elle-même n'est pas difficile, cependant l'étape de configuration n'est pas triviale. En effet c'est à ce moment que l'on configure les drivers à utiliser.

Il es préférable de ne pas compiler dans le même répertoire que celui ayant les sources.

Pour connaître la liste des drivers disponibles, il faut se référer au fichier gnumach/i386/README-drivers. Ces drivers sont saisis lors de l'execution du fichier ./configure.

Par exemple dans mon cas ceci a ressemblé à cela :

Ready ll
drwx------   20 manu     users        4096 mar 16 19:59 gnumach/
Ready mkdir gnumach-obj
Ready cd gnumach-obj
Ready ../gnumach/configure --enable-floppy --enable-ide

Une fois l'étape de configuration passée, on lance tout simplement la compilation :

make
La compilation est relativement rapide.

Installation

L'istallation des fichiers ne présente aucun problème particulier, elle se fait tout simplement :

make install

Seulement, c'est pour tenir compte de la nouvelle configuration, qu'il faut faire un peu plus attention. Si vous avez installé une distribution Debian GNU/Hurd, les fichiers lancés par défaults se trouvent compressés. En effet si vous allez dans le répertoire /boot, vous voyez ceci :

Ready ll /boot
total 3220
-rwxr-xr-x    1 root     root       291309 mar 21 21:19 gnumach.gz*
-rwxr-xr-x    1 root     root       298922 mar 21 21:19 serverboot.gz*
-rw-r--r--    1 root     root         1146 nov  8 22:15 servers.boot
Ready
Après installation, on a ceci :
Ready ll /boot
total 3220
-rwxr-xr-x    1 root     1000       655364 mar 18 13:18 gnumach*
-rwxr-xr-x    1 root     root       291309 mar 21 21:19 gnumach.gz*
-rwxr-xr-x    1 root     root       298922 mar 21 21:19 serverboot.gz*
-rw-r--r--    1 root     root         1146 nov  8 22:15 servers.boot
Ready

Arrivé à ce stade, il faut modifier la configuration de Grub. Cette configuration se trouve dans le fichier /boot/grub/menu.lst.

Pour en savoir plus sur la configuration de Grub, vous pouvez toujours consulter mes recettes de cuisine pour grub.

Quelques astuces pour plus de sécurité

Le fichier executable de GNU/Mach lancé par Grub se trouve dans le répertoire /boot qui ressembel normalement à ceci après l'installation d'un distribution Debian GNU/hurd :

Ready ll /boot
total 3220
-rwxr-xr-x    1 root     root       291309 mar 21 21:19 gnumach.gz*
-rwxr-xr-x    1 root     root       298922 mar 21 21:19 serverboot.gz*
-rw-r--r--    1 root     root         1146 nov  8 22:15 servers.boot
Ready

Compilation de MIG

Présentation rapide

La communication interprocessus à l'aide de message sous Mach est compliquer à mettre en oeuvre dans les programmes. Pour facilter cela, un outil spécifique a été développé: MIG [trouver un page ouèbe qui décrive cela]. Cette outil est indispensable pour compiler les composante de base du système GNU Hurd.

Sont développement est actuellement détenu par la FSF.

Chargement des sources

Un peu comme tout le système GNU Hurd, cet outil est encore considéré comme étant en plein développement, alors il faut mieux chercher à toujours prendre la dernière version.

Pour avoir une version très récente, il y a deux technique : un site ftp, et un server CVS. Le site ftp est préféré pour sa simplicité d'utilisation. Le serveur CVS est apprécié pour son efficacité à avoir les changements en temps réelle.

Chargement sur le site ftp

Le chargement se fait sur le site ftp suivant : ftp://alpha.gnu.org/gnu/cvs ou se trouve des snapshots de la plupart des projets en développement actif. Dans notre cas nous nous intéressons au fichier mig.tgz.

Un fois le fichier archive rappatrié, il faut penser à le décompresser :

tar zxf mig.tgz

Chargement sur le serveur CVS

Le chargement sur le serveur CVS se fait en deux lignes de commande, un mot de passe est demandé, se contenter d'appuyer sur la touche entrée :

cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/hurd login
cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/hurd co mig

L'enorme avantage de la méthode CVS sur la méthode ftp est que si le produit évolue un peu, vous retappez les deux lignes précedente, et seul le différentiel est mis à jour, alors qu'avec la méthode ftp, vous devez tout recharger.

Prérequis

La compilation de MIG nécessite d'avoir flex installé ce qui n'est pas toujours le cas. Flex se trouve dans un packge portant sont nom.

Bien sur ceci suppose aussi d'avoir un compilateur bien installé. Pour ma part j'y suis arrivé avec un gcc-3.0.4 installé à partir du source (je ne sais pas si il y a un package Debian GNU/Hurd).

La compilation se fait sans problème sous un compte utilisateur, seul l'installation

La compilation

J'ai choisi de compiler MIG dans un répertoire différent de celui du source. Ceci s'est très passé.

On suppose que le source se trouve suivant ce chemin :

/le/chemin/du/source/mig
Et on suppose que cherche à le compiler dans le chemin suivant :
/le/chemin/de/compilation/mig-obj
La première précaution consiste à bien vérifier que l'on se trouve dans le répertoire ou l'on souhaite compiler :
cd  /le/chemin/de/compilation/mig-obj
Ensuite on lance la configuration de compilation. A noter que sous GNU/hurd, on choisi comme prefix tout simplement la racine, la notion de /usr et /usr/local a plus ou moins disparu. Donc la configuration donne :
/le/chemin/du/source/mig/configuration --prefix=/
Et ensuite on lance la compilation avec la commande make :
make
La compilation est assez rapide, ensuite on peut lancer l'installation, sous root :
su
make install
Et c'est terminé.

retour


Emmanuel DUMAS, emmanuel point dumas arobase free point france
Last modified: Wed Mar 27 21:17:11 CET 2002