Copyright © 2003 Yves Mettier
L'article original se trouve sur http://ymettier.free.fr/articles_lmag/.
Article publié dans le numéro 54 (octobre 2003) de GNU/Linux France Magazine
Table des matières
Nous avons vu comment monter un environnement chrooté dans l'article précédent. Voici un cas pratique qui, sous forme d'idée, n'est rien d'autre qu'un énorme troll, mais qui une fois mis en place, se révèle très intéressant. Installer une mandrake sur une Debian ne présente pas un grand intérêt au premier abord, mais voici tout de même quelques raisons de le faire.
Déjà, rien que pour le sport, cela mérite de le faire;
et puis, parlez-en à vos amis pour tester leurs capacités de trolleurs;
si vous disposez d'un nombre limité de machines, vous pouvez ainsi avoir deux distributions qui tournent en même temps, contrairement au double démarrage Debian/mandrake proposé par lilo;
vous comprendrez ainsi un peu mieux comment fonctionne le système de paquets RPM;
vous pouvez aussi avoir un système propre pour développer dessus ;
la sauvegarde et la restauration du système est extrèmement facile ;
vous verrez les bases d'une Mandrake.
Vous disposez d'une machine avec une distribution installée et fonctionnelle. Cet article se base sur une Debian Woody. Mais je ne vois aucun inconvénient à le faire sur une redhat, une autre mandrake, une slackware, ou d'autres distributions encore!
Vous savez aussi faire un chroot quoi que cela est assez simple à réaliser pour un système basique.
Vous disposez d'un miroir local des paquets de la distribution mandrake (vous pouvez exporter le CD via NFS si cela vous chante)
La première étape est de monter l'environnement chrooté, avec un shell et rpm fonctionnels. Pour rpm, vous pouvez prendre celui de Debian avec apt-get install rpm, ou vous le procurer par n'importe quel autre moyen, y compris le recompiler à partir de ses sources. Le répertoire racine de l'environnement chrooté sera ${CHROOT_ENV} dans tout le reste du document. Pour tester que tout fonctionne:
# chroot ${CHROOT_ENV} /bin/bash # rpm --version RPM version 4.0.3
Tout ce qui suit se fait dans l'environnement chrooté, sauf précision de ma part. Il faut initialiser la base rpm avec ceci:
# mkdir -p /var/lib/rpm # rpm --initdb
Ensuite, faites le nécessaire pour disposer des paquets rpm dans l'environnement chrooté. L'ancienne méthode, avant les noyaux 2.4.x, était, par exemple, d'exporter via NFS le répertoire contenant ces paquets, puis en le montant:
# cat /etc/exports /mnt/mirrors/Mandrake localhost(ro)
Dans l'environnement chrooté:
# mkdir -p /mnt/mdk # mount -t nfs localhost:/mnt/mirrors/Mandrake/9.1/i586/Mandrake /mnt/mdk
Depuis que le noyau 2.4.0 est sorti, nous avons l'option bind de mount qui nous évite de passer par le réseau et le NFS. Cette option permet de monter un répertoire dans un autre répertoire. Sur une mandrake 9.1, cette fonctionnalité est documentée dans la page de manuel anglaise, mais n'a pas été traduite pour l'instant. La manipulation est à faire dans la distribution de base Debian et non pas dans l'environnement chrooté:
# mkdir -p ${CHROOT_ENV}/mnt/mdk # mount -o bind /mnt/mirrors/Mandrake/9.1/i586/Mandrake ${CHROOT_ENV}/mnt/mdk
Je vous conseille de préférer cette méthode, non seulement parce qu'on évite de passer par le réseau, mais parce que d'une part on a un système de fichiers dans son format original et non pas vu à travers la couche du système de fichiers NFS, et d'autre part parce que tout ce qui est monté se fait depuis la distribution de base Debian et est ainsi transparent dans la distribution Mandrake. Essayez la première methode, puis regardez le contenu du fichier /etc/mtab dans la distribution Mandrake et vous verrez ce que je veux dire.
Cette étape est l'étape la plus délicate, mais si vous faites des erreurs ici, vous ne perdrez pas trop de temps à vous corriger.
Le but est d'installer le paquet basesystem et ses dépendances. urpmi basesystem marcherait à merveille pour ceux qui connaissent mandrake. Mais urpmi n'est pas installé, et on va s'en passer tant que la base n'est pas installée.
L'idée est donc de taper une longue ligne de commande du style rpm -Uvh basesystem-9.0-3mdk.i586.rpm filesystem-2.1.3-8mdk.noarch.rpm console-tools-0.2.3-42mdk.i586.rpm [...] grep-2.5-7mdk.i586.rpm. Démarrez cette ligne de commande, validez. Rpm vous affichera les dépendances manquantes. Ajoutez les paquets au fur et à mesure, validez au fur et à mesure, et à force, vous devrez faire augmenter puis diminuer le nombre de dépendances manquantes, jusqu'à arriver à ce que rpm fonctionne. Lors de l'installation de ma Mandrake-9.1, j'ai compté 103 paquets (en espérant ne pas m'être trompé en comptant). Cette installation peut générer des erreurs, ce n'est pas trop grave, tant que les fichiers sont installés. Il s'agit ici d'installer les fichiers. Nous n'avons que faire de la base des dépendances pour l'instant. Gardez la liste de ces paquets bien au chaud: elle servira encore.
Suivant la distribution qui vous sert de base, ou plutôt la version de rpm que vous avez utilisée jusqu'ici, il est fort probable qu'il y ait une différence de versions, rendant le rpm que l'on a utilisé incompatible avec celui de la Mandrake que l'on installe. Sur une Debian, il y a effectivement incompatibilité. Rien de grave à cela. Vérifiez juste que vous utilisez maintenant le bon rpm de la Mandrake, celui que vous venez juste d'installer (pour une Mandrake-9.1):
# rpm --version RPM version 4.0.4
Le numéro de version a changé donc tout va bien. Vous pouvez d'ailleurs supprimer le binaire rpm qui vous a servi s'il n'a pas été écrasé. Sur une Debian, on l'avait dans /usr/bin, et sur la Mandrake il est dans /bin, donc on peut supprimer celui de /usr/bin.
Le changement de version peut poser problème avec la base de données rpm, donc on va la convertir. Le plus simple, le plus facile et peut-être bien le plus propre est de repartir à zéro:
# cd /var/lib # rm -rf rpm # mkdir rpm # rpm --initdb
Cela nous oblige à insérer dans la base les rpms qui sont déjà installés. Pour chaque RPM, voici ce que vous pouvez faire:
# rpm -Uvh --force --replacefiles --nodeps basesystem-9.0-3mdk.i586.rpm # rpm -Uvh --force --replacefiles --nodeps filesystem-2.1.3-8mdk.noarch.rpm
... et ainsi de suite pour tous les paquets qui ont déjà été installés. Mais surtout pas d'autres. Lorsque c'est fait, rpm -qa vous permet de valider que cela a bien marché. A la moindre erreur, n'hésitez pas à refaire ce que vous venez de faire. Il n'y a à priori aucun mal à cela jusqu'ici.
Bravo! Vous avez installé la base de votre Mandrake. Maintenant, il s'agit d'installer les logiciels que vous désirez utiliser. Cependant, pour cela, rien de tel qu'urpmi. Pour installer urpmi, faites comme pour n'importe quel autre logiciel, comme au bon vieux temps où Debian affichait sa supériorité avec son apt-get qui n'existait pas ailleurs (amis de Debian: la force de Debian ne se trouve pas limitée à son apt-get): rpm -Uvh urpmi-4.2-34.1mdk.i586.rpm. Ici encore, des dépendances devraient manquer. Installez-les une par une, avec rpm et surtout, sans les options --force, --replacefiles ni --nodeps. Il y en a une dizaine, un peu moins, même.
Lorsqu'urpmi est installé, il n'est pas encore utilisable. Il faut lui ajouter des sources. La syntaxe est la suivante:
# urpmi.addmedia <nom de la source> <lieu> with <position relative de hdlist>
Dans notre cas, voici ce que cela donne:
# urpmi.addmedia main file:///mnt/mdk/RPMS with ../base/hdlist.cz
Si vous avez l'intention d'utiliser un miroir sur le web, je ne saurais trop vous suggérer d'utiliser l'excellente page http://plf.zarb.org/~nanardon/ d'Olivier Thauvin. Cette page vous permet, en quelques clics, de gérérer la ligne de commande à taper pour ajouter un médium. Validez, puis copiez/collez la ligne de commande générée dans votre shell, et voilà. Notez au passage que c'est urpmi.setup qui tourne derrière cette page, et que vous pouvez l'installer par la suite sur votre Mandrake, et utiliser son interface en GTK+.
Si vous êtez arrivés jusqu'ici, vous avez gagné: vous avez une distribution mandrake installée sur votre distribution. Félicitations! Il ne vous reste plus qu'à utiliser urpmi pour installer le reste, en particulier rpmdrake si vous préférez la méthode clic clic pour installer vos paquets.
La première chose à faire quand vous finissez d'installer une distribution est de créer un utilisateur. Sur votre Mandkrake, /etc/passwd n'a rien à voir avec le /etc/passwd de la distribution Debian. Vous avez donc un fichier /etc/passwd aussi vierge qu'il l'est si vous installez une Mandrake par la méthode normale. Ajoutez donc un utilisateur avec adduser ou userdrake suivant ce qui vous chante. Personnellement, j'ai homogénéisé les uid et gid des utilisateurs sur chacune des distributions. Cela facilite les échanges par la suite.
Pour rendre votre double système convivial, et ne plus avoir besoin de passer par un chroot et par le compte root, installez un serveur sshd. Ainsi, vous n'aurez plus qu'à vous connecter en tant qu'utilisateur autorisé, et vous serez sur votre mandrake.
Etape 1: installez sshd. urpmi sshd le fait pour vous très bien. Evitez de le lancer par la méthode classique: il entrerait en conflit avec un serveur sshd éventuellement déjà lancé sur l'autre distribution!
Etape 2: Vérifiez le fichier /etc/ssh/sshd_config, mais il n'y a rien d'inhabituel à modifier.
Etape 3: Lancez sshd avec la ligne de commande suivante: /usr/sbin/sshd -p 2222. On suppose que vous lancez ssh sur le port 2222 avec une telle ligne de commande! Choisissez tout de même un port libre.
Il ne vous reste plus qu'à vous loguer sur la mandrake. Allez sur une autre machine, ou revenez sur la distribution de base, et essayez: ssh localhost -p 2222. Si tout marche bien, vous êtes utilisateur sur la Mandrake, sans avoir besoin de passer par root!
Il existe une différence majeure entre une distribution installée comme ici sur une autre, et une distribution installée à côté d'une autreet qu'on choisit avec lilo ou grub. Cette différence est que si les logiciels diffèrent, si les bibliothèques n'ont pas le même numéro de version et que les binaires sont liés aux bonnes bibliothèques, il y a toutefois un point commun: le noyau.
Avez-vous remarqué que je n'ai parlé nulle part de partitions, de périphériques, de réseau ? Pourtant, cela marche dès le début! En effet, sur la Mandrake, vous utilisez la configuration du noyau de la Debian, et le noyau Mandrake installé sur la Mandrake ne sert à rien.
La conséquence directe est que toute modification sur la configuration du système de base, comme la coupure du réseau par exemple, modifie de la même manière la configuration du système Mandrake. Autre conséquence directe: le système de fichiers que l'on trouve dans /proc est le même pour les deux systèmes. Ainsi, l'utilisateur root peut tout à fait tuer un processus Debian depuis la mandrake.
Par ailleurs, si installer une telle distribution sur une autre dans un environnement chrooté permet de faire pas mal de choses au niveau de la sécurité, il vous faut quand même vous rappeler les failles de sécurité de chroot, à commencer par la plus grosse: root est capable de sortir de l'environnement chrooté (en effectuant un nouveau chroot évidemment).
Vous avez installé une mandrake sur une autre distribution, peut-être Debian comme moi. Et vous avez utilisé la méthode 'from scratch' de cet article. Il en existe pourtant une autre, que je trouve plus facile mais pas pour autant plus intéressante. Vous pouvez installer les deux distributions l'une à côté de l'autre, et aller de l'une à l'autre en rebootant, grâce à lilo ou grub. Avec un chroot bien placé, vous pouvez aussi faire tourner les deux en même temps comme ici. L'avantage est double: vous faites une installation normale, et vous pouvez aussi booter normalement sur chacune des distributions. Mais l'inconvénient est de devoir disposer d'une partition par distribution. La méthode présentée ici ne nécessite pas de partition spéciale. Autre avantage de la méthode présentée ici: vous n'avez qu'un noyau à maintenir puisque jamais vous ne booterez sur l'autre distribution. Enfin, l'intérêt majeur de cette méthode est pédagogique: vous avez un apercu d'un linux from scratch avec une gestion de paquets rpm, sans avoir à recompiler tous les logiciels.
Alimentons le troll: vous pouvez aussi installer une slackware dans un environnement chrooté. La méthode est la même: comprendre le système de paquets, installer la base, la réinstaller proprement, puis l'administrer de manière normale. Je l'ai fait: vous pouvez le faire!
chroot: man chroot
rpm: http://www.rpm.org
Debian: http://www.Debian.org
Mandrake: http://www.mandrakelinux.com
easy urpmi: http://plf.zarb.org/~nanardon/
© 2003 Yves Mettier