Configurez un bon environnement de travail en créant deux nouveaux
fichiers de démarrage pour le shell bash. En tant qu'utilisateur
lfs
, exécutez 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 qu’utilisateur lfs
ou transféré vers l'utilisateur lfs
en utilisant une commande su avec l’option « -
», le shell
initial est un shell de connexion 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
.
Cela garantit qu'aucune variable d'environnement non souhaitée et
potentiellement dangereuse provenant du système hôte ne fuit dans
l'environnement de construction. La technique utilisée ici permet
d'obtenir un environnement propre.
La nouvelle instance du shell est un shell sans connexion, 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 du fichier
.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 et éviter d'avoir à chercher dans PATH
à chaque fois qu'il doit trouver le même
exécutable. Néanmoins, les nouveaux outils doivent être
utilisés dès leur installation. En désactivant la fonction de
hachage, le shell cherchera en permanence dans la variable
PATH
dès qu'un programme est
exécuté. Ainsi, le shell trouvera les nouveaux outils compilés
dans $LFS/tools/bin
dès qu'ils
seront 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 garantit que les nouveaux fichiers et répertoires créés sont modifiables uniquement par leurs propriétaires, mais qu’ils restent 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
doit ê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 pour que leurs
messages suivent les conventions du pays spécifié. Définir
LC_ALL
à « POSIX »
ou « C » (les deux étant équivalents)
garantit que tout fonctionnera comme prévu dans l'environnement
de compilation croisée.
LFS_TGT=$(uname
-m)-lfs-linux-gnu
La variable LFS_TGT
initialise une
description de machine personnalisée mais compatible lors de la
construction de notre compilateur croisé, de notre éditeur de
liens et lors de la compilation croisée de notre chaîne de
compilation temporaire. Vous trouverez plus d'informations dans
la Remarques
techniques sur la chaîne de compilation.
PATH=/usr/bin
De nombreuses distributions récentes de Linux fusionnent
/bin
et /usr/bin
. Lorsque c'est le cas, il vaut mieux
paramétrer la variable PATH
standard
sur /usr/bin
pour l'environnement
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é certaines variables, pour les rendre visibles dans les sous-shells 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 de 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
, exécutez la commande :
[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE
Lorsque l'utilisateur lfs
n'est
plus nécessaire (au début du
Chapitre 7), vous pouvez restaurer /etc/bash.bashrc
(si vous le souhaitez).
Notez que le paquet Bash de LFS que nous construisons dans la
Section 8.36,
« Bash-5.2.32 » n'est pas configuré pour charger ou
exécuter /etc/bash.bashrc
, rendant ce
fichier sur un système LFS complet.
Pour de nombreux systèmes modernes avec plusieurs processeurs (ou
cœurs) le temps de compilation pour un paquet peut être réduit en
effectuant un « make parallèle » en disant au programme
make combien de processeurs sont disponibles via une option de la
ligne de commande ou une variable d'environnement. Par exemple, un
processeur Intel Core i9-13900K a 8 cœurs P (performance) et 16 cœurs
E (efficacité) et un cœur P peut faire tourner simultanément deux
fils d'exécution donc chaque cœur P est modélisé par deux cœurs
logiques pour la noyau Linux. Il y a donc 32 cœurs logiques au total.
Une manière simple d'utiliser tous ces cœurs logiques est de
permettre à make de
démarrer 32 tâches de construction. Vous pouvez le faire en passant
l'option -j32
à make :
make -j32
Ou en indiquant la variable d'environnement MAKEFLAGS
dont le contenu sera automatiquement utilisé
par make comme s'il
s'agissait d'options de la ligne de commande :
export MAKEFLAGS=-j32
Ne passez jamais l'option -j
sans un nombre à make et n'indiquez pas cette
option dans MAKEFLAGS
. Cela premettra à
make de démarrer un
nombre de tâche infini et causera des problèmes de stabilité sur le
système.
Pour utiliser tous les cœurs logiques disponibles pour construire les
paquets dans
Chapitre 5 et Chapitre 6,
configurez maintenant MAKEFLAGS
dans
.bashrc
:
cat >> ~/.bashrc << "EOF"
export MAKEFLAGS=-j$(nproc)
EOF
Remplacez $(nproc)
par le
nombre de cœurs logiques que vous voulez utiliser si vous ne voulez
pas utiliser tous les cœurs logiques.
Enfin, pour avoir un environnement complètement préparé pour la construction des outils temporaires, forcez le shell bash à lire le profil de l'utilisateur tout juste créé :
source ~/.bash_profile