4.4. Configurer l'environnement

Configurez un bon environnement de travail en créant deux nouveaux fichiers de démarrage pour le shell bash. En étant connecté en tant qu'utilisateur lfs, lancez la commande suivante pour créer un nouveau .bash_profile :

cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

Lorsque vous êtes connecté en tant que lfs, le shell initial est habituellement un shell de login qui lit le fichier /etc/profile de l'hôte (contenant probablement quelques configurations et variables d'environnement) et puis .bash_profile. La commande exec env -i.../bin/bash dans le fichier .bash_profile remplace le shell en cours avec un nouveau ayant un environnement complètement vide sauf pour les variables HOME, TERM, et PS1. Ceci nous assure qu'aucune variable d'environnement non souhaitée et potentiellement dangereuse, provenant du système hôte, ne parvienne dans l'environnement de construction. La technique utilisée ici s'assure de créer un environnement propre.

La nouvelle instance du shell est un shell non-login, qui ne lit donc pas, et n'exécute pas, les fichiers /etc/profile ou .bash_profile, mais plutôt le fichier .bashrc. Créez maintenant le fichier .bashrc :

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/config.site
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
EOF

Voici la signification des paramètres dans .bashrc

set +h

La commande set +h désactive la fonction de hachage de bash. D'habitude, le hachage est une fonctionnalité utile—bash utilise une table de hachage pour se rappeler le chemin complet des fichiers exécutables pour éviter d'avoir à chercher dans PATH à chaque fois qu'il doit trouver le même exécutable. Néanmoins, les nouveaux outils devraient être utilisés dès leur installation. En désactivant la fonction de hachage, le shell cherchera en permanence dans PATH lorsqu'un programme doit être exécuté. Ainsi, le shell trouvera les nouveaux outils compilés dans $LFS/tools dès qu'ils sont disponibles et sans se rappeler la version précédente du même programme mais dans un autre emplacement.

umask 022

Configurer le masque de création de fichier (umask) à 022 nous assure que les nouveaux fichiers et répertoires créés sont modifiables uniquement par leurs propriétaires mais lisibles et exécutables par tout le monde (en supposant que l'appel système open(2) utilise les modes par défaut, les nouveaux fichiers auront les droits 644 et les répertoires 755).

LFS=/mnt/lfs

La variable LFS devrait être configurée avec le point de montage choisi.

LC_ALL=POSIX

La variable LC_ALL contrôle les paramètres linguistiques de certains programmes, faisant que leurs messages suivent les conventions d'un pays spécifié. Définir LC_ALL à « POSIX » ou « C » (les deux étant équivalents) garantit que tout fonctionnera comme prévu dans l'environnement chroot.

LFS_TGT=(uname -m)-lfs-linux-gnu

La variable LFS_TGT initialise une description de la machine personnalisée mais compatible lors de la construction de notre compilateur, de notre éditeur de liens croisés et lors de la compilation de notre chaîne d'outils temporaires. Vous trouverez plus d'informations dans les Notes techniques sur la chaîne d'outils.

PATH=/usr/bin

De nombreuses distributions modernes ont fusionné /bin et /usr/bin. Lorsque c'est le cas, la variable PATH standard n'a besoin que d'indiquer /usr/bin pour l'environnement ue Chapitre 6. Lorsque ce n'est pas le cas, la ligne suivante ajoute /bin au chemin de recherche.

if [ ! -L /bin ]; then PATH=/bin:$PATH; fi

Si /bin n'est pas un lien symbolique, il doit être ajouté à la variable PATH.

PATH=$LFS/tools/bin:$PATH

En plaçant $LFS/tools/bin au début du PATH standard, le compilateur croisé installé au début du Chapitre 5 est repéré par le shell immédiatement après son installation. Ceci, combiné à la désactivation du hachage, limite le risque que le compilateur de l'hôte ne soit utilisé à la place du compilateur croisé.

CONFIG_SITE=$LFS/usr/share/config.site

Dans le Chapitre 5 et le Chapitre 6, si cette variable n'est pas initialisée, les scripts configure peuvent essayer de charger des bouts de configuration de certaines distributions dans /usr/share/config.site sur le système hôte. Changer ce chemin permet d'éviter une contamination potentielle par l'hôte.

export ...

Bien que les commandes précédentes aient configurées certaines variables, pour les rendre visibles à des sous-shell, nous les exportons.

[Important]

Important

Plusieurs distributions commerciales ajoutent une instance non documentée de /etc/bash.bashrc à l'initialisation de bash. Ce fichier peut modifier l'environnement de l'utilisateur lfs d'une manière qui peut affecter la construction des paquets critiques de LFS. Pour vous assurer que l'environnement de l'utilisateur lfs est propre, vérifiez la présence de /etc/bash.bashrc et, s'il est présent, déplacez-le ailleurs. En tant qu'utilisateur root, lancez :

[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE

Après avoir fini d'utiliser l'utilisateur lfs à la fin du Chapitre 7, vous pouvez restaurer /etc/bash.bashrc (si vous le souhaitez).

Remarquez que le paquet Bash de LFS que nous construisons dans la Section 8.34, « Bash-5.1 » n'est pas configuré pour charger ou exécuter /etc/bash.bashrc, donc ce fichier est inutile sur un système LFS.

Enfin, pour avoir un environnement complètement préparé pour la construction des outils temporaires, chargez le profil de l'utilisateur tout juste créé :

source ~/.bash_profile