차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
linuxfromscratch:12.1:152-stripping [2024/05/27 12:25] – 만듦 - 바깥 편집 127.0.0.1 | linuxfromscratch:12.1:152-stripping [2024/06/18 04:01] (현재) – [8.82. 스트립] baecy | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ^ Linux From Scratch - Version 12.1-systemd | ||
+ | ^ Chapter 8. Installing Basic System Software | ||
+ | |[[.: | ||
+ | |||
+ | |디버깅 심볼 | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== 8.82. 스트립 ===== | ||
+ | |||
+ | 이 장의 내용은 선택적인 사항입니다. 사용자가 프로그래머가 아니고 시스템 소프트웨어의 디버깅을 수행할 계획이 없는 경우 바이너리와 라이브러리에서 디버깅 심볼과 일부 불필요한 심볼 테이블 항목을 제거하여 시스템 크기를 약 2GB 줄일 수 있습니다. 이는 일반적인 Linux 사용자에게는 큰 불편을 초래하지 않습니다. | ||
+ | |||
+ | 아래에 언급된 명령을 사용하는 대부분의 사람들은 어려움을 겪지 않습니다. 그러나 실수로 인해 새 시스템을 사용할 수 없게 만드는 것은 쉽습니다. 따라서 **strip** 명령을 실행하기 전에 현재 상태의 LFS 시스템을 백업하는 것이 좋습니다. | ||
+ | |||
+ | **strip** 명령은 // | ||
+ | |||
+ | 선택한 라이브러리의 디버깅 심볼은 Zlib로 압축되어 별도의 파일에 보존됩니다. 이 디버깅 정보는 나중에 BLFS에서 [[beyondlinuxfromscratch: | ||
+ | |||
+ | **strip**은 처리 중인 바이너리 또는 라이브러리 파일을 덮어쓴다는 점에 유의하세요. 이로 인해 파일의 코드나 데이터를 사용하는 프로세스가 충돌할 수 있습니다. 스트립을 실행 중인 프로세스가 영향을 받으면 스트립되는 바이너리 또는 라이브러리가 파괴되어 시스템을 완전히 사용할 수 없게 될 수 있습니다. 이 문제를 방지하려면 일부 라이브러리와 바이너리를 /tmp로 복사하여 스트립한 다음 **install** 명령으로 다시 설치합니다. ([[.: | ||
+ | |||
+ | <WRAP info center round 90%> | ||
+ | **참고** \\ | ||
+ | ELF 로더의 이름은 64비트 시스템에서는 ld-linux-x86-64.so.2, | ||
+ | </ | ||
+ | |||
+ | <WRAP important center round 90%> | ||
+ | **중요** \\ | ||
+ | 책에서 지정한 버전과 다른 버전이 있는 패키지가 있는 경우(보안 권고에 따르거나 개인 취향에 따라) '' | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | save_usrlib=" | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | cd /usr/lib | ||
+ | |||
+ | for LIB in $save_usrlib; | ||
+ | objcopy --only-keep-debug --compress-debug-sections=zlib $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=" | ||
+ | online_usrlib=" | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | $(cd /usr/lib; find libnss*.so* -type f)" | ||
+ | |||
+ | for BIN in $online_usrbin; | ||
+ | cp / | ||
+ | strip --strip-unneeded /tmp/$BIN | ||
+ | install -vm755 /tmp/$BIN /usr/bin | ||
+ | rm /tmp/$BIN | ||
+ | done | ||
+ | |||
+ | for LIB in $online_usrlib; | ||
+ | cp / | ||
+ | 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) \ | ||
+ | | ||
+ | | ||
+ | case " | ||
+ | *$(basename $i)* ) | ||
+ | ;; | ||
+ | * ) strip --strip-unneeded $i | ||
+ | ;; | ||
+ | esac | ||
+ | done | ||
+ | |||
+ | unset BIN LIB save_usrlib online_usrbin online_usrlib | ||
+ | </ | ||
+ | |||
+ | 파일 형식이 인식되지 않아 많은 수의 파일이 오류로 표시될 수 있습니다. 이러한 경고는 안전하게 무시해도 됩니다. 해당 파일이 바이너리가 아닌 스크립트임을 나타냅니다. | ||