LFS – Partie 2

<– Partie 1

2. Le partitionnement

Pour installer Linux From Scratch, il faut commencer par créer des partitions sur un disque dur. Ce dernier peut être vierge ou bien déjà partitionné. S’il reste suffisamment d’espace libre pour pouvoir accueillir notre petite distribution moulée à la louche, ça fera l’affaire. Personnellement, j’ai choisi le deuxième disque dur de mon ordinateur, d’une capacité de 80 GB, ce qui est largement suffisant pour:

  • créer une partition de 30 GB destinée à accueillir les fichiers de configuration et qui sera montée à la racine du système,
  • créer une partition de 8 GB destinée à accueillir la SWAP, c’est-à-dire la partition d’échange.

Quant à mon répertoire personnel, il est déjà monté sur /home et il se trouve sur le premier disque dur de mon ordinateur.

Pour partitionner, vous pouvez utiliser cfdisk (en ligne de commande), gnome-disks ou bien gparted. Pour ma part, j’ai utilisé gnome-disks mais là, je vais vous montrer en ligne de commande avec l’utilitaire cfdisk. Tout d’abord, nous passons en root:

[miamondo@volgor ~]$ su
Mot de passe :
[root@volgor miamondo]#

Commençons par identifier le disque dur. Il ne s’agit pas de formater le mauvais support! Vous pouvez utiliser fdisk -l ou bien lsblk, laquelle nous retourne ces informations:

[root@volgor miamondo]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
fd0      2:0    1     4K  0 disk 
sda      8:0    0 931,5G  0 disk 
├─sda1   8:1    0    35G  0 part /
├─sda2   8:2    0     8G  0 part [SWAP]
└─sda3   8:3    0 888,5G  0 part /home
sdb      8:16   0  74,5G  0 disk 

Le disque à partitionner est /dev/sdb. Sachant cela, entrons maintenant la commande suivante:

[root@volgor miamondo]# cfdisk /dev/sdb

Voici ce qui s’affiche:

L’image ci-dessous montre le résultat que nous devons obtenir.

Pour ce faire, il faut d’abord cliquer sur Nouvelle puis renseigner la taille de la partition sdb1 (30G). Normalement, le type par défaut est ext4. Laissez-le tel quel, et cliquer sur Écrire. Vous allez voir apparaitre une magnifique erreur de traduction présente depuis la nuit des temps: La table de partitions a été altérée. Oh la! Ça pique les yeux! Alors, la traduction française du verbe anglais to alter est modifier, et la traduction anglaise du verbe français altérer est to corrupt. Donc, si on vous dit que votre table de partitions a été corrompue, c’est que tout va bien!

Il y a maintenant deux lignes : /dev/sdb1 et Espace libre. Mettons Espace libre en surbrillance et renouvelons l’opération pour créer la partition d’échange (SWAP). Donc, Nouvelle puis 8G (ou 4G, tout dépend de la capacité de votre RAM). Puis cliquez sur Type et sélectionnez Partition d’échange Linux. Enfin, confirmez en cliquant sur Écrire.

Il reste de l’espace libre. Vous pouvez fort bien créer une troisième partition pour votre répertoire personnel. Son système de fichiers sera ext4 et elle sera montée sur /home. Moi, je laisse comme ça, car j’utiliserai mon répertoire personnel qui se trouve sur le disque dur principal de mon ordinateur. Les esprits perspicaces auront remarqué qu’aucune partition n’est amorçable. Nous allons nous en occuper plus tard.

Pour une meilleure compréhension mutuelle, la première partition doit être étiquetée LFS. Vous pouvez faire cette opération en ligne de commande:

[root@volgor miamondo]# e2label /dev/sdb1 LFS

Maintenant, il faut initialiser le système de fichiers de chaque partition.

[root@volgor miamondo]# mkfs.ext4 /dev/sdb1
[root@volgor miamondo]# mkswap /dev/sdb2

Si vous avez d’ores et déjà créé une troisième partition dont le point de montage sera /home, entrez cette commande.

[root@volgor miamondo]# mkfs.ext4 /dev/sdb3

3. Définir la variable $LFS

Toujours en root, nous allons définir une variable d’environnement qui va correspondre au point de montage /mnt/lfs. Ce sera en quelque sorte, la porte entre le système hôte et le système LFS. Cette variable d’environnement va s’appeler LFS.

export LFS=/mnt/lfs

Il vous est loisible de choisir un autre nom que /mnt/lfs, par exemple /mnt/mickey ou bien /mnt/truc_de_ouf. Ça fonctionnera quand-même. Moi, je vais m’en tenir au sobre mais explicite /mnt/lfs.

Donc, vous allez ouvrir et rajouter cette variable d’environnement dans quatre fichiers différents. Si un de ces fichiers n’existe pas, créez-le.

  • /home/user/.bashrc (remplacer user par le nom de votre répertoire personnel)
  • /root/.bashrc
  • /home/user/.bash_profile (remplacer user par le nom de votre répertoire personnel)
  • /root/.bash_profile

Attention! Dans les fichiers .bashrc, la variable d’environnement que nous avons définie doit être rajoutée avant les lignes suivantes, et pas à la fin des fichiers. Ne me demandez pas pourquoi, c’est au-delà de mes compétences mais vous trouverez une explication détaillée dans le manuel, au chapitre 2.6.

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

Au final, les fichiers modifiés .bashrc doivent ressembler à ceci:

# ~/.bashrc

export LFS=/mnt/lfs

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '

BROWSER=falkon
TERM=xterm
EDITOR=pycharm

Voilà… Nous avons rajouté notre variable d’environnement dans quatre fichiers différents, ce qui nous assure qu’elle sera toujours définie. Pas de surprise à attendre. On est ceinture-bretelles! Pensez à recharger le profil avec la commande source, pour activer la variable et faites un essai dans le terminal (en root). Appelez-la:

[root@volgor miamondo]# source /home/miamondo/.bash_profile
[root@volgor miamondo]# source /root/.bash_profile
[root@volgor miamondo]# echo $LFS
/mnt/lfs

Vérifiez maintenant que le shell indiqué dans le fichier /etc/passwd est bien bash. C’est important. Nous allons à présent monter la partition au point de montage $LFS puis activer la partition d’échange SWAP. Mais d’abord, il faut créer le répertoire $LFS. Il n’existe pas encore. /mnt est vide.

[root@volgor miamondo]# mkdir -p $LFS
[root@volgor miamondo]# ls /mnt  # petite vérif...
lfs    # Le répertoire a été créé
[root@volgor miamondo]# mount /dev/sdb1 $LFS   
[root@volgor miamondo]# swapon /dev/sdb2 

4. Téléchargement des paquets et des correctifs

Notre partition est montée. Cela signifie que nous avons entamé les premiers travaux de construction de notre système. Si on compare avec une maison d’habitation, nous avons effectué le terrassement. Nous arrivons maintenant à un point du livre que je n’ai pas trouvé très clair, en l’occurrence le téléchargement des archives *.tar, lesquelles vont nous permettre de continuer notre belle mission de bâtisseur.

Pour ce faire, nous allons d’abord créer un répertoire sources. Il accueillera toutes les archives et aussi les quelques correctifs (patch). Comme les archives *.tar vont être stockés sur la partition LFS, elles seront toujours à portée de clavier. En fait, c’est comme si nous étions en train de faire livrer tous les matériaux sur le chantier.

Tout d’abord, créons le répertoire sources.

[root@volgor miamondo]# mkdir $LFS/sources

Ensuite, on active le droit d’écriture et le droit sticky sur ce répertoire. « Sticky » signifie que même si de nombreux utilisateurs peuvent écrire sur un répertoire, seul le propriétaire du fichier peut supprimer ce fichier à l’intérieur du répertoire sticky.

[root@volgor miamondo]# chmod -v a+wt $LFS/sources

Ensuite, c’est là que le livre devient obscur… Nous allons passer au téléchargement des archives *.tar. Peut-être y-a-t-il un problème de traduction. Je ne sais pas trop… La version anglaise me semble plus claire. Finalement, j’ai réussi à trouver la liste des archives de la version 10.10 téléchargeable à partir d’un miroir situé en Allemagne, mon lieu de résidence. L’instruction est sur une seule ligne. Vous n’avez pas à vous occuper du retour chariot.

[root@volgor miamondo]# wget --input-file="http://ftp.wrz.de/pub/LFS/lfs-packages/10.0/" --continue --directory-prefix=/mnt/lfs/sources

Et là, on peut dire que c’est la fête des couleurs. Un feu d’artifice illumine l’écran! Quel magnifique spectacle que ces archives aux couleurs de l’arc-en-ciel effaçant l’obscurité pour s’offrir à notre regard d’enfants ébahis. Mon Dieu, les larmes me montent aux yeux. Pardonnez-moi…

C’est d’autant plus beau que même les correctifs ont été téléchargés. Ce sont les fichiers de couleur blanche. Nous allons maintenant vérifier que tout s’est bien passé grâce à ces instructions:

[root@volgor miamondo]# pushd $LFS/sources
[root@volgor miamondo]# md5sum -c md5sums
[root@volgor miamondo]# popd

À présent, nous allons faire une longue pause. Il est l’heure d’aller dormir. Nous allons démonter la partition /dev/sdb1 avant d’éteindre l’ordinateur et nous continuerons demain…

[root@volgor miamondo]# umount /dev/sdb

Tiens! On est déjà demain? Mon Dieu, que le temps passe vite! Hop! Debout les morts! Il est sept heures. Une nouvelle journée commence. Avant de boire une bière, Première opération, on ouvre un terminal, on passe en root et on remonte la partition /dev/sdb1.

[miamondo@volgor ~]$ su
Mot de passe : 
[root@volgor miamondo]# mount /dev/sdb1 $LFS

Ensuite, nous allons créer plusieurs répertoires qui vont nous être nécessaires par la suite.

[root@volgor miamondo]# mkdir -p $LFS/{bin,etc,lib,sbin,usr,var,tools}
[root@volgor miamondo]# if [ "`uname -m`" = "x86_64" ]
>then
>   mkdir -p $LFS/lib64    # Architecture 64-bit
>fi

Vérifions si tout s’est déroulé comme prévu. Nous constatons que notre distribution embryonnaire s’étoffe! Vous noterez que nous avons créé un répertoire tools. Je ne peux pas vous en dire plus pour le moment puisque je découvre avec vous. Sachez simplement qu’un compilateur croisé sera installé dans ce répertoire car il doit être isolé des autres programmes.

[root@volgor miamondo]# ls $LFS
bin  etc  lib  lib64  lost+found  sbin  sources  tools usr  var

5. Ajouter un utilisateur

Pour la suite des festivités, nous n’allons pas continuer en root. C’est beaucoup trop dangereux. Nous allons donc créer un utilisateur que le manuel préconise de nommer lfs. Personnellement, comme je trouve qu’il y a beaucoup de lfs et que ça va finir par être source de confusion, j’ai choisi d’appeler cet utilisateur benoit. C’est mon prénom.

[root@volgor miamondo]# groupadd benoit
useradd -s /bin/bash -g benoit -m -k /dev/null benoit

Ensuite, je m’attribue un mot de passe:

[root@volgor miamondo]# passwd benoit
Nouveau mot de passe : 
Retapez le nouveau mot de passe : 
passwd: password updated successfully

Ensuite, je donne à benoit un accès complet aux répertoires de $LFS en indiquant que benoit est le propriétaire du répertoire :

[root@volgor miamondo]# chown -R benoit $LFS/{bin,etc,lib,sbin,usr,var,tools}
[root@volgor miamondo]# if [ "`uname -m`" = "x86_64" ]
>then
>   chown -R benoit $LFS/lib64    # Architecture 64-bit
>fi

N’oublions pas également le répertoire sources. Dans la foulée, on va vérifier que le changement de propriétaire s’est bien passé. Puis, on va se connecter en tant que benoit, delphonse, amandale ou patriste. Cela dépend de votre prénom.

[root@volgor miamondo]# chown benoit $LFS/sources
[root@volgor miamondo]# ls -l $LFS
[root@volgor miamondo]# su - benoit
[benoit@volgor ~]$       # invite de commande modifiée

6. Configuration de l’environnement

La commande ci-dessous, ou plutôt le script, 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. Celui-ci doit être propre.

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

Ensuite, nous créons le fichier caché .bashrc. Je vous invite à consulter la page 32 du manuel pour avoir une explication détaillée des différentes commandes de ce fichier. Mon but n’est pas de recopier le manuel mais de décrire les étapes du processus.

[benoit@volgor ~]$ 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
export LFS LC_ALL LFS_TGT PATH
EOF

Ensuite, nous chargeons le profil du nouvel utilisateur.

[benoit@volgor ~]$ source ~/.bash_profile

Dernière opération très importante. Après avoir basculé en root, il faut neutraliser le fichier /etc/bash.bashrc en le renommant provisoirement, pour éviter qu’il n’affecte gravement la construction des paquets critiques. Vous trouverez plus d’explications au chapitre 4.4. du manuel officiel.

[root@volgor miamondo]# [ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE

Ouf! Terminé pour cette deuxième partie. Dans le prochain chapitre, cela va se corser un peu car nous allons construire un compilateur croisé et commencer à vraiment bâtir le système. Ce troisième chapitre demandera beaucoup d’attention et de calme. Lisez attentivement les instructions et consultez le manuel officiel en français. Ça ne sert à rien de foncer. On a le temps.

–> Partie 3