Denne delen er valgfri. Hvis den tiltenkte brukeren ikke er en programmerer og ikke planlegger å gjøre noen feilsøking på systemprogramvaren, kan systemstørrelsen reduseres med omtrent 2 GB ved å fjerne feilsøkingssymbolene, og noen unødvendige symboltabelloppføringer fra binærfiler og biblioteker. Dette medfører ingen ulemper for en typisk Linuxbruker.
De fleste som bruker kommandoene nevnt nedenfor, opplever ikke noen vanskeligheter. Det er imidlertid lett å gjøre en skrivefeil og gjør det nye systemet ubrukelig, så før du kjører strip kommandoer, er det en god ide å lage en sikkerhetskopiering av LFS systemet i gjeldende tilstand.
En strip kommando med
--strip-unneeded
alternativet
fjerner alle feilsøkingssymboler fra en binær eller et bibliotek. Og
det fjerner alle symboltabelloppføringer som ikke er nødvendig for
linkeren (for statiske biblioteker) eller dynamisk linker (for
dynamisk koblede binære filer og delte biblioteker).
Feilsøkingssymbolene fra utvalgte biblioteker komprimeres med Zlib og lagres i separate filer. Denne feilsøkingsinformasjon er nødvendig for å kjøre regresjonstester med valgrind eller gdb senere i BLFS.
Merk at strip vil
overskrive binær eller bibliotek filen den behandler. Dette kan
krasje prosessene som bruker kode eller data fra filen. Hvis
prosessen som kjører strip selv er påvirket, kan
binærfilen eller biblioteket som blir strippet bli ødelagt og kan
gjøre systemet helt ubrukelig. For å unngå det, kopierer vi noen
biblioteker og binærfiler til /tmp
,
stripper dem der, og installer dem tilbake med install kommandoen. (Den relaterte
oppføringen i Section 8.2.1,
“Oppgraderingsproblemer” gir begrunnelsen for å bruke
install kommandoen
her.)
ELF lasterens navn er ld-linux-x86-64.so.2 på 64-bits systemer og
ld-linux.so.2 på 32-bits systemer. Konstruksjonen nedenfor velger
riktig navn for gjeldende arkitektur, unntatt noe som slutter med
g
, i tilfelle kommandoene nedenfor
allerede har vært kjørt.
Hvis det er en en pakke som versjonen er forskjellig fra versjonen
spesifisert av boken (enten etter et sikkerhetsråd eller som
tilfredsstiller personlige preferanser), kan det være nødvendig å
oppdatere bibliotekets filnavn i save_usrlib
eller online_usrlib
. Unnlatelse
av å gjøre det kan gjøre systemet helt ubrukelig.
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.32 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.42.so libsframe.so.1.0.0 libhistory.so.8.2 libncursesw.so.6.4-20230520 libm.so.6 libreadline.so.8.2 libz.so.1.3.1 libzstd.so.1.5.5 $(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
Et stort antall filer vil bli rapportert som at filformatet ikke er gjenkjent. Disse advarslene kan trygt ignoreres. De indikerer at disse filene er skript i stedet for binære filer.