Source Mage GNU/Linux
Benoît Papillault, 16/09/2004
Mise à jour: 06/02/2005
Quelques explications
Source Mage GNU/Linux est une distribution GNU/Linux basée sur les
sources. Cela signifie que l'installation de n'importe quel logiciel
au sein de cette distribution sera faite en téléchargeant les sources
et en les compilant avec les optimisations spécifiques que vous aurez
choisie. Le site principal de la distribution est http://www.sourcemage.org/. De
nombreuses informations sur l'installation et l'utilisation sont
disponibles dans le Wiki : http://wiki.sourcemage.org/.
Ayant trouvé ce projet intéressant, je participe depuis Juin 2003 à la
création des CD-ROM d'installation et depuis peu au portage sur
l'architecture 64 bits des processeurs AMD (x86_64).
Création des images ISO
Images ISO version 0.9.4-test2 x86, ppc et x86_64 (pour tests)
Les images sont disponibles ici!
Images ISO version 0.9.3 x86 and ppc (stable)
Revue de l'image ISO version 0.9.2 ppc
Cette image est disponible sur http://download.sourcemage.org/iso/. Les
test réalisés sur un ibook g4 ont donnés les résultats suivants.
Documentation sur l'ISO
Portage sur une architecture 64 bits
L'architecture 64 bits des processeurs AMD permet à la fois (dans
certaines conditions) d'exécuter du code 32 bits et 64 bits. Pour
cette raison, on appelle ce type de plateform
bi-arch. Cependant, même si le processeur peut exécuter
simultanément des processus 32 bits et des processus 64 bits, chaque
programme 32 bits ne peut utiliser que des bibliothèques 32 bits et
chaque programme 64 bits ne peut utiliser que des bibliothèques 64
bits. Pour cette raison, certaines bibliothèques ont besoin d'exister
à la fois en version 32 bits et en version 64 bits. Nous avons choisi
de conserver la version 32 bits dans /lib32 (ou
/usr/lib32) et la version 64 bits dans /lib (ou
/usr/lib). Ce choix permet de simplifier le portage des
applications existantes qui ont l'habitude de s'installer dans /lib.
- Définition : On appelle plateforme bi-arch une
plateforme capable d'exécuter du code de deux architectures
différentes simultanément.
- Définition : On appelle entête noyau multi-arch,
les entêtes du noyau Linux conçues pour être utilisées sur
plusieurs architectures simultanément. Ceci est un prérequis pour
compiler glibc sur une plateforme bi-arch.
- Définition : On appelle spell bi-arch un spell
devant être compilé pour deux architectures. Exemple: glibc.
- Définition : On appelle compilateur multilib, un
compilateur capable de gérer (et générer) des bibliothèques pour
des architectures différentes. Le prérequis est de disposer d'une
glibc bi-arch.
- Définition : On appelle sorcery bi-arch, une
version de sorcery capable de compiler des spells bi-arch. Rappel:
sorcery est l'outil permet d'installer à partir des sources.
Afin d'ajouter tout ces fonctionnalités à Source Mage, différentes
modifications ont été faites. Ces modifications ont été testées sur
un processeur Athlon 64 bits. Malgré tous ces efforts, seul un système
fonctionnant dans un chroot d'une distribution Mandrake a pu être
obtenu.
Sorcery
sorcery est l'outil de gestion des paquets dans SourceMage GNU/Linux.
Patch sorcery concernant l'utilisation de /lib/ld-linux.so.2
sorcery est l'outil de gestion des packages, ou
spell. L'installation se fait en utilisation la séquence
classique (présentée ici de maniére simplifiée) :
./configure --prefix=/usr
make
make install
Les fichiers installés sont ensuite trouvés grâce à l'utilisation de
l'outil installwatch. La séquence présentée plus haut comporte
une étape supplémentaire:
./configure --prefix=/usr
make
ici, tout les fichiers déjà installés par le spell sont supprimés
make install
Ainsi dans le cas du spell glibc, ce sont les deux fichiers
/lib/ld-2.3.2.so et /lib/ld-linux.so.2 qui sont
supprimés. Ce dernier étant un lien symbolique vers le premier
construit par la commande ldconfig .
Le fichier /lib/ld-linux.so.2 est pourtant un fichier vital
au système. En effet, il s'agit du chargeur. Chaque exécutable
dynamique contient une référence à ce fichier, comme nous le montre la
commande suivante:
$ LANG= readelf -l /bin/sh | grep interpreter
[Requesting program interpreter: /lib/ld-linux.so.2]
Afin de prévenir l'effacement de ce fichier, le fichier spécial
/var/lib/sorcery/excluded contient le nom des fichiers qui
ne sont pas effacés. Cependant, le problème est que chaque
architecture utilise un nom différent. Ainsi, la commande plus haut
produira les résultats suivants sur les architectures ppc ou x86_64
respectivement:
$LANG= readelf -l /bin/sh | grep interpreter
[Requesting program interpreter: /lib/ld.so.1]
$LANG= readelf -l /bin/sh | grep interpreter
[Requesting program interpreter: /lib/ld-linux-x86-64.so.2]
Le patch suivant permet donc de s'affranchir de cette limite :
sorcery-ld.diff
Le spell glibc-2.3.2 a été compilé deux fois afin de vérifier
le bon fonctionnement du patch.
Utiliser sorcery pour la compilation croisée
Voici un petit document de conception sur comment cela pourrait être
implémenté : sorcery
BUILD_ROOT. Vous pouvez également lire quelques liens officiels:
Bugs dans installwatch
Liens
|