8.3. Avant d'entrer dans l'environnement chroot

8.3.1. Déterminer s'il y a besoin d'étapes supplémentaires

Avant de pouvoir entrer dans le chroot, nous devons nous assurer que le système est dans un état acceptable. À partir de maintenant, la variable d'environnement ${CLFS_TARGET} n'existera plus, donc elle n'aura aucune influence sur le reste du livre — la plupart des paquets s’appuieront sur config.guess, fournit par Section 10.38, « Automake-1.15 ». Les paquets qui n'utilisent pas autotools soit se fichent de la triplette cible, soit ont leur propre moyen de déterminer sa valeur.

Dans les deux cas, l'information sur le cpu hôte utilisée pour déterminer la triplette cible est récupérée à partir du même endroit, uname -m. L'exécution de cette commande en dehors de l'environnement chroot et à l'intérieur a exactement la même sortie.

Si vous n'êtes pas sûr que votre hôte et votre cible ont la même triplette cible, vous pouvez utiliser ce test pour déterminer la triplette cible de l'hôte et si vous aurez besoin d'une étape supplémentaire pour s'assurer que vous ne construisez pas pour la mauvaise architecture. Extrayez l'archive Section 10.38, « Automake-1.15 » et déplacez-vous dans le répertoire créé. Ensuite, exécutez ce qui suit pour voir la triplette cible détectée par config.guess :

lib/config.guess

Si la sortie de cette commande n'est pas égale à ce qui se trouve dans ${CLFS_TARGET} vous devez continuer à lire. Sinon, vous pouvez continuer sereinement à partir de Section 8.4, « Entrer dans l'environnement Chroot ».

8.3.2. Utiliser Setarch

Si votre hôte a un outil appelé setarch,, cela peut régler le problème, au moins si vous construisez sur i686. Sur une architecture comme x86_64, utiliser setarch linux32 uname -m ne donnera jamais que i686. il n'est pas possible d'avoir une autre sortie comme i486 ou i586.

Pour tester si setarch fait tout ce dont vous avez besoin, exécutez la commande suivante dans le répertoire d'Section 10.38, « Automake-1.15 » :

setarch linux32 lib/config.guess

Si la sortie de la commande est égale à ce qui se trouve dans ${CLFS_TARGET} alors vous avez une solution viable. Vous pouvez enrober la commande chroot de la page suivante avec setarch linux32. Ce qui ressemblera à ceci :

setarch linux32 chroot "${CLFS}" /tools/bin/env -i \
    HOME=/root TERM="${TERM}" PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
    /tools/bin/bash --login +h

Si setarch fonctionne pour vous alors vous pouvez sereinement continuer par Section 8.4, « Entrer dans l'environnement Chroot ». Sinon, il y a encore une option présentée par ce livre.

8.3.3. Utiliser un hack pour uname

Le hack uname est un module du noyau qui modifie la sortie de uname -m en changeant directement la valeur du type de machine détecté. Le module du noyau enregistrera la valeur initiale et la restaurera lorsque le module sera déchargé.

Hack Uname (20080713) - 4 Ko:

Téléchargement : http://clfs.org/files/extras/uname_hack-20080713.tar.bz2

Somme de contrôle MD5 : dd7694f28ccc6e6bfb326b1790adb5e9

Extrayez l'archive et déplacez-vous dans le répertoire créé. Pour construire le hack uname vous devrez avoir les sources du noyau en cours d'exécution à disposition. Construisez le hack uname avec la commande suivante, ou similaire :

make uname_hack_fake_machine=i486

Voici la signification des option de make et d'installation :

uname_hack_fake_machine=i486

Ce paramètre initialise la valeur en laquelle sera changé le type de machine uts. Autrement, cette valeur peut être i586 ou i686.

Dans le répertoire de plus haut niveau du paquet Uname Hack, vous devriez voir un fichier nommé uname_hack.ko. Dès que ce module est chargé dans le noyau en cours d'exécution la sortie de uname -m devrait être affectée immédiatement sur tout le système. Chargez le module du noyau avec la commande suivante :

insmod uname_hack.ko

Pour tester si le hack uname fonctionne correctement, exécutez la commande suivante depuis l'intérieur du répertoir d'Section 10.38, « Automake-1.15 » :

lib/config.guess

La sortie de la commande devrait être la même que la variable d'environnement ${CLFS_TARGET}. Si ce n'est pas le cas, vous pouvez essayer d'obtenir de l'aide sur la liste de diffusion de support de CLFS ou sur le canal IRC. Voyez Section 1.6, « Help » pour plus d'informations.