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)
puis .bash_profile
. La commande
exec env -i.../bin/bash
dans le fichier .bash_profile
remplace
le shell en cours par un nouveau shell ayant un environnement
complètement vide en dehors des 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 permet d'obtenir 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 le PATH
lorsqu'un programme doit être exécuté.
Ainsi, le shell trouvera les nouveaux outils compilés dans
$LFS/tools/bin
dès qu'ils sont
disponibles et sans se rappeler la version précédente du même
programme fourni par la distribution hôte, dans /usr/bin
ou /bin
.
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 finiront avec les droits 644 et
les répertoires avec les droits 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.
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.16 » 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