source: chapter08/stripping.xml@ 0959b7b

multilib
Last change on this file since 0959b7b was ea6fdf5, checked in by Thomas Trepl <thomas@…>, 10 months ago

Automatic merge of trunk into multilib

  • Property mode set to 100644
File size: 7.1 KB
RevLine 
[3c928f1]1<?xml version="1.0" encoding="ISO-8859-1"?>
[b06ca36]2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
[81fd230]4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
[ddd5542]7
[8a269ec]8<sect1 id="ch-system-stripping">
9 <?dbhtml filename="stripping.html"?>
[ddd5542]10
[8a269ec]11 <title>Stripping</title>
[ddd5542]12
[d672ab7]13 <para>This section is optional. If the intended user is not a
[c32384e]14 programmer and does not plan to do
[9c753b58]15 any debugging of the system software, the system's size can be decreased
16 by some 2 GB by removing the debugging symbols, and some unnecessary symbol table
17 entries, from binaries and libraries. This causes no real inconvenience for
18 a typical Linux user.</para>
[ddd5542]19
[826bbcc]20 <para>Most people who use the commands mentioned below do not
[9c753b58]21 experience any difficulties. However, it is easy to make a mistake and
22 render the new system unusable. So before running the
[826bbcc]23 <command>strip</command> commands, it is a good idea to make a
[ddd5542]24 backup of the LFS system in its current state.</para>
25
[9c753b58]26 <para>A <command>strip</command> command with the
[942e81de]27 <parameter>--strip-unneeded</parameter> option removes all debug symbols
[9c753b58]28 from a binary or library. It also removes all symbol table entries not
[942e81de]29 needed by the linker (for static libraries) or dynamic linker (for
[9c753b58]30 dynamically linked binaries and shared libraries).</para>
[942e81de]31
[80da60f]32 <!-- TODO: Zstd is better than Zlib for both speed and size.
33 Unfortunately Valgrind does not support Zstd-compressed debug
34 info yet: https://bugs.kde.org/show_bug.cgi?id=469782 -->
35 <para>The debugging symbols from selected libraries are compressed with
36 <application>Zlib</application> and preserved in separate files. That
37 debugging information is needed to run regression tests with <ulink
[d672ab7]38 url='&blfs-book;/general/valgrind.html'>valgrind</ulink> or <ulink
[9c753b58]39 url='&blfs-book;/general/gdb.html'>gdb</ulink> later, in BLFS.
[c32384e]40 </para>
[6c8a79a]41
[11d5dee]42 <para>Note that <command>strip</command> will overwrite the binary or library
[8a269ec]43 file it is processing. This can crash the processes using code or data from
[9c753b58]44 the file. If the process running <command>strip</command> is
45 affected, the binary or library being stripped can be destroyed; this can
46 make the system completely unusable. To avoid this problem we copy some libraries
[11d5dee]47 and binaries into <filename class="directory">/tmp</filename>, strip them
[9c753b58]48 there, then reinstall them with the <command>install</command> command.
49 (The related entry in <xref linkend="pkgmgmt-upgrade-issues"/> gives the
50 rationale for using the <command>install</command> command here.)</para>
[de28837]51
[a3d6232]52 <note><para>The ELF loader's name is ld-linux-x86-64.so.2 on 64-bit systems
[bcb20b4]53 and ld-linux.so.2 on 32-bit systems. The construct below selects the
[8731bd1]54 correct name for the current architecture, excluding anything ending
55 with <quote>g</quote>, in case the commands below have already been
56 run.</para></note>
[4350669]57
[b595526]58 <important>
59 <para>
[04038ad]60 If there is any package whose version is different from the version
[b595526]61 specified by the book (either following a security advisory or
62 satisfying personal preference), it may be necessary to update the
[04038ad]63 library file name in <envar>save_usrlib</envar> or
[b595526]64 <envar>online_usrlib</envar>.
65 <emphasis role='bold'>Failing to do so may render the system
66 completely unusable.</emphasis>
67 </para>
68 </important>
69
[6dfcfecc]70<!-- also of interest are libgfortan, libgo, libgomp, and libobjc from GCC -->
[6c8a79a]71
[00abb8f]72<!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"-->
[8731bd1]73<screen><userinput>save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
[adcaf07e]74 libc.so.6
[6094dae]75 libthread_db.so.1
[d672ab7]76 libquadmath.so.&libquadmath-version;
[6094dae]77 libstdc++.so.&libstdcpp-version;
[d672ab7]78 libitm.so.&libitm-version;
79 libatomic.so.&libatomic-version;"
[c32384e]80
81cd /usr/lib
82for LIB in $save_usrlib; do
[80da60f]83 objcopy --only-keep-debug --compress-debug-sections=zlib $LIB $LIB.dbg
[ff96923]84 cp $LIB /tmp/$LIB
85 strip --strip-unneeded /tmp/$LIB
86 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
87 install -vm755 /tmp/$LIB /usr/lib
88 rm /tmp/$LIB
[6dfcfecc]89done</userinput>
90<userinput arch="ml_32,ml_all">
[0ebda11]91cd /usr/lib32
[6dfcfecc]92for LIB in $save_usrlib; do
[3388c22]93 objcopy --only-keep-debug $LIB $LIB.dbg
94 cp $LIB /tmp/$LIB
95 strip --strip-unneeded /tmp/$LIB
96 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
97 install -vm755 /tmp/$LIB /usr/lib32
98 rm /tmp/$LIB
[6dfcfecc]99done</userinput>
100<userinput arch="ml_x32,ml_all">
[0ebda11]101cd /usr/libx32
[6dfcfecc]102for LIB in $save_usrlib; do
[3388c22]103 objcopy --only-keep-debug $LIB $LIB.dbg
104 cp $LIB /tmp/$LIB
105 strip --strip-unneeded /tmp/$LIB
106 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
107 install -vm755 /tmp/$LIB /usr/libx32
108 rm /tmp/$LIB
[6dfcfecc]109done</userinput><userinput>
[b3f1ebb3]110
[de28837]111online_usrbin="bash find strip"
[6094dae]112online_usrlib="libbfd-&binutils-version;.so
[be5b2e0]113 libsframe.so.&libsframe-version;
[b83366b]114 libhistory.so.&readline-soversion;
[6094dae]115 libncursesw.so.&ncurses-version;
116 libm.so.6
[b83366b]117 libreadline.so.&readline-soversion;
[6094dae]118 libz.so.&zlib-version;
[b1b9182]119 libzstd.so.&zstd-version;
[d1592b9]120 $(cd /usr/lib; find libnss*.so* -type f)"
[de28837]121
122for BIN in $online_usrbin; do
123 cp /usr/bin/$BIN /tmp/$BIN
[08f72423]124 strip --strip-unneeded /tmp/$BIN
[de28837]125 install -vm755 /tmp/$BIN /usr/bin
126 rm /tmp/$BIN
127done
[6c8a79a]128
[de28837]129for LIB in $online_usrlib; do
130 cp /usr/lib/$LIB /tmp/$LIB
131 strip --strip-unneeded /tmp/$LIB
132 install -vm755 /tmp/$LIB /usr/lib
133 rm /tmp/$LIB
[85cd74c2]134done</userinput><userinput arch="ml_32,ml_all">
135for LIB in $online_usrlib; do
136 cp /usr/lib32/$LIB /tmp/$LIB
137 strip --strip-unneeded /tmp/$LIB
138 install -vm755 /tmp/$LIB /usr/lib32
139 rm /tmp/$LIB
140done</userinput><userinput arch="ml_x32,ml_all">
141for LIB in $online_usrlib; do
142 cp /usr/libx32/$LIB /tmp/$LIB
143 strip --strip-unneeded /tmp/$LIB
144 install -vm755 /tmp/$LIB /usr/libx32
145 rm /tmp/$LIB
146done</userinput><userinput>
[658dcab]147
[08f72423]148for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
149 $(find /usr/lib -type f -name \*.a) \
150 $(find /usr/{bin,sbin,libexec} -type f); do
151 case "$online_usrbin $online_usrlib $save_usrlib" in
[d672ab7]152 *$(basename $i)* )
[11d5dee]153 ;;
[d672ab7]154 * ) strip --strip-unneeded $i
[11d5dee]155 ;;
[de28837]156 esac
[85cd74c2]157done</userinput><userinput arch="ml_32,ml_all">
[9282602]158for i in $(find /usr/lib32 -type f -name \*.so* ! -name \*dbg) \
159 $(find /usr/lib32 -type f -name \*.a); do
[3330d51]160 case "$online_usrbin $online_usrlib $save_usrlib" in
[b8d5542]161 *$(basename $i)* )
162 ;;
163 * ) strip --strip-unneeded $i
164 ;;
[85cd74c2]165 esac
166done</userinput><userinput arch="ml_x32,ml_all">
[9282602]167for i in $(find /usr/libx32 -type f -name \*.so* ! -name \*dbg) \
168 $(find /usr/libx32 -type f -name \*.a); do
[3330d51]169 case "$online_usrbin $online_usrlib $save_usrlib" in
[b8d5542]170 *$(basename $i)* )
171 ;;
172 * ) strip --strip-unneeded $i
173 ;;
[85cd74c2]174 esac
175done</userinput><userinput>
[de28837]176
177unset BIN LIB save_usrlib online_usrbin online_usrlib
178</userinput></screen>
[3c928f1]179
[9c753b58]180 <para>A large number of files will be flagged as errors because their file
181 format is not recognized. These warnings can be safely ignored. They
182 indicate that those files are scripts, not binaries.</para>
[6c8a79a]183
[3c928f1]184</sect1>
Note: See TracBrowser for help on using the repository browser.