2.2. Prérequis du système hôte

2.2.1. Matériel

Les éditeurs de LFS recommandent d'avoir un CPU avec au moins 4 cœurs et un système avec au moins 8 Go de mémoire. Les systèmes plus vieux qui n'atteignent pas ces prérequis fonctionneront quand même mais le temps de construction des paquets sera bien plus long que ce qui est documenté.

2.2.2. Logiciel

Votre système hôte doit contenir les logiciels suivants dans la version minimum indiquée. Cela ne devrait pas être un problème pour la plupart des distributions modernes de Linux. Notez également que certaines distributions placeront les en-têtes des logiciels dans des paquets distincts, ayant souvent la forme suivante : <nom-du-paquet>-devel ou <nom-du-paquet>-dev. Assurez-vous de les installer si votre distribution les fournit.

Il se peut que les versions antérieures des paquets logiciels listés fonctionnent, mais elles n'ont pas été testées.

  • Bash-3.2 (/bin/sh doit être un lien symbolique ou matériel vers bash)

  • Binutils-2.13.1 (les versions ultérieures à 2.42 ne sont pas recommandées car elles n'ont pas été testées)

  • Bison-2.7 (/usr/bin/yacc doit être un lien vers bison ou un petit script qui exécute bison)

  • Coreutils-8.1

  • Diffutils-2.8.1

  • Findutils-4.2.31

  • Gawk-4.0.1 (/usr/bin/awk doit être un lien vers gawk)

  • GCC-5.2, y compris le compilateur C++, g++ (les versions ultérieures à 13.2.0 ne sont pas recommandées, car elles n'ont pas été testées). Les bibliothèques standards C et C++ (avec les headers) doivent également être présentes pour que le compilateur C++ puisse construire les programmes hébergés

  • Grep-2.5.1a

  • Gzip-1.3.12

  • Noyau Linux-4.19

    La raison pour laquelle cette version du noyau est requise est que nous spécifions cette version lors de la construction de glibc dans Chapitre 5 et Chapitre 8, pour que les contournements pour les anciens noyaux ne soient pas activés et que la glibc compilée soit un peu plus rapide et plus petite. En février 2024, 4.19 est la plus vieille version du noyau prise en charge par les développeurs du noyau. Certaines versions du noyau plus vieilles que 4.19 peuvent toujours être prises en charge par des équipes tierces, mais elles ne sont pas considérées comme des versions officielles en amont. Consultez https://kernel.org/category/releases.html pour plus de détails.

    Si le noyau hôte est plus ancien que le 4.19, vous devez le remplacer avec une version plus récente. Il existe deux méthodes de remplacement. Dans un premier temps, vérifiez si votre distribution Linux fournit un paquet pour le noyau 4.19 ou pour un noyau plus récent. Si c'est le cas, vous pouvez l'installer. Si votre distribution ne propose pas de paquet correspondant pour le noyau, ou si vous préférez ne pas l'installer, vous pouvez compiler le noyau vous-même. Les instructions pour la compilation du noyau et la configuration du chargeur d’amorçage (en supposant que le système hôte utilise GRUB) sont disponibles au Chapitre 10.

    Nous avons besoin que le noyau hôte prenne en charge les pseudo-terminaux UNIX 98 (PTY). Cela devrait être activé sur toutes les distributions de bureau et de serveur qui utilisent Linux 4.19 ou supérieur. Si vous construisez sur un noyau hôte personnalisé, assurez-vous que l'option CONFIG_UNIX98_PTYS est indiquée à y dans la configuration du noyau.

  • M4-1.4.10

  • Make-4.0

  • Patch-2.5.4

  • Perl-5.8.8

  • Python-3.4

  • Sed-4.1.5

  • Tar-1.22

  • Texinfo-5.0

  • Xz-5.0.0

[Important]

Important

Remarque : les liens symboliques mentionnés ci-dessus sont nécessaires pour construire un système LFS en utilisant les instructions contenues dans ce livre. Les liens symboliques qui renvoient vers d'autres logiciels (comme dash, mawk, etc.) peuvent fonctionner, mais ils n'ont pas été testés, ou bien ne sont pas pris en charge par l'équipe de développement LFS. Il est possible que ces liens nécessitent soit de vous écarter des instructions du livre, soit d’apporter des correctifs supplémentaires à certains paquets.

Pour vérifier que votre système hôte possède toutes les versions nécessaires et peut compiler des programmes, exécutez la commande suivante :

cat > version-check.sh << "EOF"
#!/bin/bash
# Un script qui liste les numéro de version des outils de développement critiques

# Si vous avez des outils installés dans d'autres répertoires, ajustez PATH ici ET
# dans ~lfs/.bashrc (section 4.4) également.

LC_ALL=C 
PATH=/usr/bin:/bin

bail() { echo "FATAL : $1"; exit 1; }
grep --version > /dev/null 2> /dev/null || bail "grep ne fonctionne pas"
sed '' /dev/null || bail "sed ne fonctionne pas"
sort   /dev/null || bail "sort ne fonctionne pas"

ver_check()
{
   if ! type -p $2 &>/dev/null
   then 
     echo "ERREUR : $2 ($1) introuvable"; return 1; 
   fi
   v=$($2 --version 2>&1 | grep -E -o '[0-9]+\.[0-9\.]+[a-z]*' | head -n1)
   if printf '%s\n' $3 $v | sort --version-sort --check &>/dev/null
   then 
     printf "OK :     %-9s %-6s >= $3\n" "$1" "$v"; return 0;
   else 
     printf "ERREUR : %-9s est TROP VIEUX (version $3 ou supérieure requise)\n" "$1"; 
     return 1; 
   fi
}

ver_kernel()
{
   kver=$(uname -r | grep -E -o '^[0-9\.]+')
   if printf '%s\n' $1 $kver | sort --version-sort --check &>/dev/null
   then 
     printf "OK :     noyau Linux $kver >= $1\n"; return 0;
   else 
     printf "ERREUR : noyau Linux ($kver) est TROP VIEUX (version $1 ou supérieure requise)\n" "$kver"; 
     return 1; 
   fi
}

# Coreutils en premier car --version-sort a besoin de Coreutils >= 7.0
ver_check Coreutils      sort     8.1 || bail "Coreutils trop vieux, arrêt"
ver_check Bash           bash     3.2
ver_check Binutils       ld       2.13.1
ver_check Bison          bison    2.7
ver_check Diffutils      diff     2.8.1
ver_check Findutils      find     4.2.31
ver_check Gawk           gawk     4.0.1
ver_check GCC            gcc      5.2
ver_check "GCC (C++)"    g++      5.2
ver_check Grep           grep     2.5.1a
ver_check Gzip           gzip     1.3.12
ver_check M4             m4       1.4.10
ver_check Make           make     4.0
ver_check Patch          patch    2.5.4
ver_check Perl           perl     5.8.8
ver_check Python         python3  3.4
ver_check Sed            sed      4.1.5
ver_check Tar            tar      1.22
ver_check Texinfo        texi2any 5.0
ver_check Xz             xz       5.0.0
ver_kernel 4.19

if mount | grep -q 'devpts on /dev/pts' && [ -e /dev/ptmx ]
then echo "OK :     le noyau Linux prend en charge les PTY UNIX 98";
else echo "ERREUR : le noyau Linux ne prend PAS en charge les PTY UNIX 98"; fi

alias_check() {
   if $1 --version 2>&1 | grep -qi $2
   then printf "OK :     %-4s est $2\n" "$1";
   else printf "ERREUR : %-4s n'est PAS $2\n" "$1"; fi
}
echo "Alias :"
alias_check awk GNU
alias_check yacc Bison
alias_check sh Bash

echo "Vérification du compilateur :"
if printf "int main(){}" | g++ -x c++ -
then echo "OK :     g++ fonctionne";
else echo "ERREUR : g++ ne fonctionne PAS"; fi
rm -f a.out

if [ "$(nproc)" = "" ]; then
   echo "ERREUR : nproc n'est pas disponible ou a produit une sortie vide"
else
   echo "OK : nproc rapporte $(nproc) cœurs logiques disponibles"
fi
EOF

bash version-check.sh