6.80. 한 번 더 스트리핑하기

이 절은 선택 사항이다. 사용자가 프로그래머가 아니고 시스템 소프트웨어에서 디버깅을 할 계획이 없다면, 바이너리와 라이브러리에서 디버깅 심볼을 제거해서 시스템 크기를 약 90 MB 줄일 수 있다. 이는 소프트웨어를 더 이상 온전히 디버깅할 수 없다는 점 외에는 다른 불편을 일으키지 않는다.

아래에 언급된 명령어를 사용하는 대부분의 사람들은 어떠한 어려움도 겪지 않는다. 그러나, 오타를 쳐서 새 시스템이 사용할 수 없게 돼버리기 쉬우므로, strip 명령을 실행하기 전에 현재 상태에서 LFS 시스템을 백업하는 것이 좋다.

먼저 선택한 라이브러리의 디버깅 심볼을 별도의 파일에 배치한다. 이 디버깅 정보는 나중에 BLFS에서 valgrindgdb를 사용하는 회귀 테스트를 실행할 때 필요하다.

save_lib="ld-2.31.so libc-2.31.so libpthread-2.31.so libthread_db-1.0.so"

cd /lib

for LIB in $save_lib; do
    objcopy --only-keep-debug $LIB $LIB.dbg 
    strip --strip-unneeded $LIB
    objcopy --add-gnu-debuglink=$LIB.dbg $LIB 
done    

save_usrlib="libquadmath.so.0.0.0 libstdc++.so.6.0.27
             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
    strip --strip-unneeded $LIB
    objcopy --add-gnu-debuglink=$LIB.dbg $LIB
done

unset LIB save_lib save_usrlib

스트리핑을 수행하기 전에, 스트리핑하려는 바이너리가 실행되지 않도록 각별히 주의하라:

exec /tools/bin/bash

이제 바이너리와 라이브러리는 안전하게 스트리핑될 수 있다:

/tools/bin/find /usr/lib -type f -name \*.a \
   -exec /tools/bin/strip --strip-debug {} ';'

/tools/bin/find /lib /usr/lib -type f \( -name \*.so* -a ! -name \*dbg \) \
   -exec /tools/bin/strip --strip-unneeded {} ';'

/tools/bin/find /{bin,sbin} /usr/{bin,sbin,libexec} -type f \
    -exec /tools/bin/strip --strip-all {} ';'

많은 파일로부터 파일 형식을 인식하지 못했다고 보고받을 것이다. 이러한 경고는 무시해도 무방하다. 이는 해당 파일이 바이너리 파일이 아닌 스크립트라는 것을 의미한다.