LFS – Partie 1

Linux From Scratch signifie Linux à partir de rien. Créé par Gerard Beeskamp, un informaticien néerlandais, ce projet pédagogique détaille le process de compilation et d’installation de tous les paquets nécessaires à la construction d’un système Linux compact, léger, sécurisé et très personnalisé.

J’ai décidé de me lancer dans l’aventure et de publier plusieurs articles pour vous narrer mes péripéties. Je suis en plein chantier. Cela avance plutôt bien puisque je me trouve dans l’environnement chroot, mais ce n’est pas terminé. J’ai essuyé plusieurs échecs. J’aime même été obligé de réinstaller ma distribution Linux Mint suite à une manipulation hasardeuse.

Linux From Scratch est un projet exigeant. Pour en venir à bout, il est nécessaire de maîtriser la ligne de commande. cd, ls, mount, mkdir sont des termes qui doivent déjà vous parler. Si ce n’est pas le cas, il est préférable de s’arrêter là. En outre, il est impératif d’avoir de bonnes connaissances dans le domaine des distributions Linux. Si vous êtes capables d’installer Ubuntu, c’est très bien, mais je doute que cela soit suffisant. Il faut au moins maîtriser l’installation d’Archlinux. Vous l’aurez compris, ce projet n’est pas fait pour les débutants.

Sur quelle base construire un système LFS

La dénomination Linux à partir de rien est quelque peu mensongère. Pour construire votre LFS, vous allez vous appuyer sur une autre distribution Linux surnommée le système hôte. Vous en aurez besoin au tout début pour partitionner le disque dur et télécharger les sources. Ce peut être une Debian, une Ubuntu, une Fedora… Peu importe. Personnellement, je vais essayer avec Linux Mint. Nous allons, d’une certaine manière, parasiter le système hôte pour nous en détacher en cours de route et bâtir une distribution indépendante. Parasiter n’est peut-être pas le bon terme. Disons que le système hôte va tenir le rôle d’incubateur ou d’utérux, si je puis me permettre d’utiliser ce néologisme! Pour ce faire, il est nécessaire que certains paquets soient déjà installés sur votre distribution. Voici un script que vous pouvez exécuter dans un terminal et qui vous confirmera que c’est bien le cas.

Toute la difficulté réside dans le fait que le processus est long et qu’une boulette est vite arrivée. Nous basculons de l’utilisateur hôte vers l’utilisateur root ou vers l’utilisateur lfs créé pour la circonstance. Nous déclarons et manipulons des variables d’environnement qui, et là je parle en connaissance de cause, peuvent endommager voire détruire votre système hôte si elles sont mal définies. C’est la raison pour laquelle, contrairement à la documentation officielle, je me refuse à créer la variable suivante:

LFS=/mnt/lfs

Il faut également appréhender, même de manière abstraite, des principes telles que la compilation croisée ou le chroot. Le point de montage de la partition qui hébèrge Linux From Scratch est /mnt/lfs. Lorsque nous allons chrooter dans le nouveau système, /mnt/lfs deviendra la racine de ce dernier, c’est-à-dire /. La construction des outils de compilation demande une grande vigilance. C’est la partie la plus délicate et la moindre erreur empêchera votre système de fonctionner.

Le partitionnement

Avant toute chose, connectez-vous en root. Pour construire le système LFS, il faut créer une partition de 35GB qui lui sera dédiée. Ma partition est /dev/sda4. Je l’ai créée avec Gparted. et je l’ai formatée en ext4.

mkfs.ext4 /dev/sda4

Mon répertoire personnel se trouve sur une partition qui existe déjà : /dev/sda3. Voici le partitionnement de mon disque dur avec les différents points de montage:

Ensuite, il faut créer le répertoire /mnt/lfs pour y monter la partition /dev/sda4.

mkdir -vp /mnt/lfs
mount /dev/sda4 /mnt/lfs

Puis, nous créons le répertoire qui va accueillir toutes les archives des paquets à télécharger. Nous lui donnons les droits d’écriture et sticky. Ce dernier terme signifie que même si de nombreux utilisateurs peuvent écrire dans un fichier, seul le propriétaire du répertoire peut supprimer ce fichier.

mkdir -vp /mnt/lfs/sources
chmod -v a+wt $LFS/sources

Ensuite, nous téléchargeons les sources. Pour ce faire, copiez le contenu de cette page et collez-le dans un fichier nommé wget-list.

wget --input-file=wget-list\
--continue\
--directory-prefix=/mnt/lfs/sources

C’est le moment de vérifier si les archives ont été correctement téléchargées. Pour effectuer cette opération, nous créons le fichier md5sums dans lequel nous rajoutons ces instructions. Puis, nous exécutons les lignes ci-dessous. Le fichier md5sums doit être au préalable déplacé dans le répertoire /mnt/lfs/sources.

mv md5sums /mnt/lfs/sources
pushd /mnt/lfs/sources
md5sum -c md5sums
popd

À ce stade, nous créons différents répertoires nécessaires à la construction de notre système LFS. Pour la version 32-bits, supprimez lib64. Le compilateur croisé sera installé dans le répertoire /mnt/lfs/tools car il doit impérativement être séparé des autres programmes.

mkdir -pv /mnt/lfs/{etc,var,lib64,tools} /mnt/lfs/usr/{bin,lib,sbin}
for i in bin lib sbin
do
  ln -sv usr/$i $LFS/$i
done

Création de l’utilisateur lfs qui devient propriétaire récursif de tout le répertoire /mnt/lfs. Pour la version 32-bits, supprimer lib64.

groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs /mnt/lfs/{usr{,/*},lib,var,etc,bin,sbin,tools,lib64,sources}

Fichier renommé et rendu inactif pour éviter de fâcheuses interactions avec l’environnement hôte.

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

Ouverture d’un shell de connexion pour l’utilisateur lfs.

su - lfs

Voilà pour cette première partie.