Linux From Scratch (partie 2)

Dans la partie 1, nous avons installé les bases de notre futur système LFS. Nous avons:

  • créé une partition dédiée,
  • téléchargé les archives dans le répertoire /mnt/lfs/sources,
  • créé quelques répertoires nécessaires à la construction,
  • ajouté un nouvel utilisateur (lfs)
  • ouvert un shell de connexion pour l’utilisateur lfs.

Nous en sommes à ce stade. À présent, nous sommes connectés en tant qu’utilisateur lfs, et dans cette partie, nous allons commencer par configurer un environnement de travail sain. Nous allons remplacer le shell en cours par un nouveau shell bien plus propre. Nous n’aurons pas à craindre qu’une variable provenant du système hôte interfère avec notre système « cible » et l’endommage. C’est la commande exec env -i qui se charge de l’opération.

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

Dans cette optique de sécurité, nous créons également un nouveau fichier .bashrc. Il est important de séparer le système cible du système hôte le plus tôt possible.

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

Enfin, nous chargeons le nouveau profil de l’utilisateur lfs.

source ~/.bash_profile

Entrons à présent dans le vif du sujet. Nous allons déballer les archives et construire une chaîne de compilation croisée. C’est assez difficile à comprendre, mais il faut faire un effort parce que ce concept est important. Tout d’abord, qu’est-ce qu’un compilateur? Eh bien, il s’agit d’un outil de programmation informatique qui transforme un code source écrit par un être humain dans un langage de haut niveau, en un code binaire exécutable par une machine. En ce qui concerne la chaîne de compilation croisée, le chapitre du manuel censé fournir des explications claires et précises sur ce concept est, je suis désolé de le dire, absolument incompréhensible! J’ai donc préféré consulter Wikipédia. L’encyclopédie en ligne nous explique qu’une chaîne de compilation croisée est construite pour fonctionner sur une machine hôte, mais les programmes qu’elle va compiler seront installés sur un autre ordinateur qualifié de machine-cible.

Voici les éléments qui constituent une chaîne de compilation. Je cite Wikipédia:

binutils : Une collection d’utilitaires utilisés pour le traitement des fichiers binaires. Ce paquetage contient notamment l’assembleur qui transforme le pseudo-code généré par la compilation en instructions comprises par le processeur cible, et l’éditeur des liens pour lier les bibliothèques utilisées par un programme.

gcc : les compilateurs C et C++ de la collection.

glibc : La bibliothèque C du système utilisée pour les appels au noyau et le traitement des processus de bas-niveau.

Avant de débuter la compilation, nous allons déclarer la variable d’environnement suivante.

export MAKEFLAGS=-j`nproc --all`

Elle retourne le nombre de processeurs présents sur l’ordinateur et réduit le temps de compilation en effectuant un make parallèle.

Construisons notre chaîne de compilation croisée. Pour ce faire, déplaçons-nous tout d’abord dans le répertoire /mnt/lfs/sources.

cd /mnt/lfs/sources

Le processus de compilation es toujours le même. Nous commençons par décompresser l’archive tar.xz ou tar.gz et nous nous déplaçons dans le répertoire nouvellement créé.

tar -xf binutils-2.37.tar.xz
cd binutils-2.37

Ce n’est pas toujours le cas mais pour ce paquet, nous devons créer un répertoire build et nous déplacer à l’intérieur.

mkdir -v build
cd build

Nous préparons la compilation.

../configure --prefix=/mnt/lfs/tools \
    --with-sysroot=/mnt/lfs          \
    --target=$LFS_TGT                \
    --disable-nls                    \
    --disable-werror

Nous compilons et nous installons le paquet selon les instructions du manuel.

make $MAKEFLAGS
make install -j1

Ensuite, nous revenons dans le répertoire /mnt/lfs/sources. Comme nous étions dans /mnt/lfs/sources/binutils-2.37/build, nous devons entrer cette commande.

cd ../..

Enfin, après nous être connectés en root, nous supprimons le répertoire binutils-2.37 (pas l’archive binutils-2.37.tar.xz!) et nous nous connectons de nouveau en tant qu’utilisateur lfs.

su
rm -r binutils-2.37
exit

Nous enchaînons sur les paquets suivants en utilisant le même process. Nous effectuons cette opération pour :

La suite des festivités dans un prochain article!

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s