Cette section est facultative. Si l'utilisateur ou l'utilisatrice prévu·e ne programme pas et ne prévoie pas de déboguer les logiciels du système, vous pouvez réduire la taille du système d'environ 2 Go en supprimant les symboles de débogage et les entrées inutiles de la table des symboles de débogage des binaires et des bibliothèques. Cela ne pose aucun problème en dehors du fait de ne plus pouvoir déboguer les logiciels complètement.
La plupart des gens utilisent les commandes mentionnées ci-dessous sans difficulté. Cependant, il est facile de faire une coquille et de rendre le nouveau système inutilisable, donc avant de lancer les commandes strip, il vaut mieux faire une sauvegarde du système LFS dans son état actuel.
La commande strip avec
le paramètre —strip-unneeded
supprime tous les symboles de débogage d'un binaire ou d'une
bibliothèque. Elle supprime aussi toutes les entrées de la table des
symboles qui ne sont pas requises par l'éditeur des liens (pour les
binaires liés dynamiquement et les bibliothèques partagées).
Les symboles de débogage pour les bibliothèques choisies sont placés dans des fichiers séparés. Ces informations de débogage sont requises si vous lancez des tests de régression qui utilisent valgrind ou gdb plus tard dans BLFS.
Remarquez que strip
remplacera le binaire ou la bibliothèque qu'il traite. Cela peut
faire crasher les processus qui utilisent du code ou des données de
ce fichier. Si le processus exécutant strip lui-même est affecté, le
binaire ou la bibliothèque en cours de nettoyage peut être détruit.
Cela peut rendre le système complètement inutilisable. Pour éviter
cela, nous copierons certains bibliothèques et binaires dans
/tmp
, les nettoierons là, et les
installerons de nouveau avec la commande install. Lisez les entrées liées
dans le Section 8.2.1,
« Problèmes de mise à jour » pour les raisons
d'utiliser la commande install ici.
Le nom du chargeur ELF est ld-linux-x86-64.so.2 sur les systèmes 64 bits et ld-linux.so.2 sur les systèmes 32 bits. La construction ci-dessous choisit le bon nom pour l'architecture actuelle, en excluant tout ce qui fini en « g », au cas où les commandes ci-dessous ont déjà été lancées.
save_usrlib="$(cd /usr/lib; ls ld-linux*[^g]) libc.so.6 libthread_db.so.1 libquadmath.so.0.0.0 libstdc++.so.6.0.30 libitm.so.1.0.0 libatomic.so.1.2.0" cd /usr/lib for LIB in $save_usrlib; do objcopy --only-keep-debug $LIB $LIB.dbg cp $LIB /tmp/$LIB strip --strip-unneeded /tmp/$LIB objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB install -vm755 /tmp/$LIB /usr/lib rm /tmp/$LIB done online_usrbin="bash find strip" online_usrlib="libbfd-2.39.so libhistory.so.8.2 libncursesw.so.6.3 libm.so.6 libreadline.so.8.2 libz.so.1.2.13 $(cd /usr/lib; find libnss*.so* -type f)" for BIN in $online_usrbin; do cp /usr/bin/$BIN /tmp/$BIN strip --strip-unneeded /tmp/$BIN install -vm755 /tmp/$BIN /usr/bin rm /tmp/$BIN done for LIB in $online_usrlib; do cp /usr/lib/$LIB /tmp/$LIB strip --strip-unneeded /tmp/$LIB install -vm755 /tmp/$LIB /usr/lib rm /tmp/$LIB done for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \ $(find /usr/lib -type f -name \*.a) \ $(find /usr/{bin,sbin,libexec} -type f); do case "$online_usrbin $online_usrlib $save_usrlib" in *$(basename $i)* ) ;; * ) strip --strip-unneeded $i ;; esac done unset BIN LIB save_usrlib online_usrbin online_usrlib
La commande rapportera un grand nombre de fichiers comme ayant une extension non reconnue. Vous pouvez ignorer ces avertissements sans problème. Cela signifie que ces fichiers sont des scripts et non des binaires.