source: chapter08/stripping.xml@ b84eff0

multilib xry111/multilib
Last change on this file since b84eff0 was 5de5f1b, checked in by Thomas Trepl <thomas@…>, 12 months ago

Automatic merge of trunk into multilib

  • Property mode set to 100644
File size: 6.8 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
[9c753b58]32 <para>The debugging symbols from selected libraries are preserved
33 in separate files. That debugging information is needed to run
34 regression tests with <ulink
[d672ab7]35 url='&blfs-book;/general/valgrind.html'>valgrind</ulink> or <ulink
[9c753b58]36 url='&blfs-book;/general/gdb.html'>gdb</ulink> later, in BLFS.
[c32384e]37 </para>
[6c8a79a]38
[11d5dee]39 <para>Note that <command>strip</command> will overwrite the binary or library
[8a269ec]40 file it is processing. This can crash the processes using code or data from
[9c753b58]41 the file. If the process running <command>strip</command> is
42 affected, the binary or library being stripped can be destroyed; this can
43 make the system completely unusable. To avoid this problem we copy some libraries
[11d5dee]44 and binaries into <filename class="directory">/tmp</filename>, strip them
[9c753b58]45 there, then reinstall them with the <command>install</command> command.
46 (The related entry in <xref linkend="pkgmgmt-upgrade-issues"/> gives the
47 rationale for using the <command>install</command> command here.)</para>
[de28837]48
[a3d6232]49 <note><para>The ELF loader's name is ld-linux-x86-64.so.2 on 64-bit systems
[bcb20b4]50 and ld-linux.so.2 on 32-bit systems. The construct below selects the
[8731bd1]51 correct name for the current architecture, excluding anything ending
52 with <quote>g</quote>, in case the commands below have already been
53 run.</para></note>
[4350669]54
[b595526]55 <important>
56 <para>
[04038ad]57 If there is any package whose version is different from the version
[b595526]58 specified by the book (either following a security advisory or
59 satisfying personal preference), it may be necessary to update the
[04038ad]60 library file name in <envar>save_usrlib</envar> or
[b595526]61 <envar>online_usrlib</envar>.
62 <emphasis role='bold'>Failing to do so may render the system
63 completely unusable.</emphasis>
64 </para>
65 </important>
66
[6dfcfecc]67<!-- also of interest are libgfortan, libgo, libgomp, and libobjc from GCC -->
[6c8a79a]68
[00abb8f]69<!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"-->
[8731bd1]70<screen><userinput>save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
[adcaf07e]71 libc.so.6
[6094dae]72 libthread_db.so.1
[d672ab7]73 libquadmath.so.&libquadmath-version;
[6094dae]74 libstdc++.so.&libstdcpp-version;
[d672ab7]75 libitm.so.&libitm-version;
76 libatomic.so.&libatomic-version;"
[c32384e]77
78cd /usr/lib
79for LIB in $save_usrlib; do
80 objcopy --only-keep-debug $LIB $LIB.dbg
[ff96923]81 cp $LIB /tmp/$LIB
82 strip --strip-unneeded /tmp/$LIB
83 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
84 install -vm755 /tmp/$LIB /usr/lib
85 rm /tmp/$LIB
[6dfcfecc]86done</userinput>
87<userinput arch="ml_32,ml_all">
[0ebda11]88cd /usr/lib32
[6dfcfecc]89for LIB in $save_usrlib; do
[3388c22]90 objcopy --only-keep-debug $LIB $LIB.dbg
91 cp $LIB /tmp/$LIB
92 strip --strip-unneeded /tmp/$LIB
93 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
94 install -vm755 /tmp/$LIB /usr/lib32
95 rm /tmp/$LIB
[6dfcfecc]96done</userinput>
97<userinput arch="ml_x32,ml_all">
[0ebda11]98cd /usr/libx32
[6dfcfecc]99for LIB in $save_usrlib; do
[3388c22]100 objcopy --only-keep-debug $LIB $LIB.dbg
101 cp $LIB /tmp/$LIB
102 strip --strip-unneeded /tmp/$LIB
103 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
104 install -vm755 /tmp/$LIB /usr/libx32
105 rm /tmp/$LIB
[6dfcfecc]106done</userinput><userinput>
[b3f1ebb3]107
[de28837]108online_usrbin="bash find strip"
[6094dae]109online_usrlib="libbfd-&binutils-version;.so
[be5b2e0]110 libsframe.so.&libsframe-version;
[b83366b]111 libhistory.so.&readline-soversion;
[6094dae]112 libncursesw.so.&ncurses-version;
113 libm.so.6
[b83366b]114 libreadline.so.&readline-soversion;
[6094dae]115 libz.so.&zlib-version;
[b1b9182]116 libzstd.so.&zstd-version;
[d1592b9]117 $(cd /usr/lib; find libnss*.so* -type f)"
[de28837]118
119for BIN in $online_usrbin; do
120 cp /usr/bin/$BIN /tmp/$BIN
[08f72423]121 strip --strip-unneeded /tmp/$BIN
[de28837]122 install -vm755 /tmp/$BIN /usr/bin
123 rm /tmp/$BIN
124done
[6c8a79a]125
[de28837]126for LIB in $online_usrlib; do
127 cp /usr/lib/$LIB /tmp/$LIB
128 strip --strip-unneeded /tmp/$LIB
129 install -vm755 /tmp/$LIB /usr/lib
130 rm /tmp/$LIB
[85cd74c2]131done</userinput><userinput arch="ml_32,ml_all">
132for LIB in $online_usrlib; do
133 cp /usr/lib32/$LIB /tmp/$LIB
134 strip --strip-unneeded /tmp/$LIB
135 install -vm755 /tmp/$LIB /usr/lib32
136 rm /tmp/$LIB
137done</userinput><userinput arch="ml_x32,ml_all">
138for LIB in $online_usrlib; do
139 cp /usr/libx32/$LIB /tmp/$LIB
140 strip --strip-unneeded /tmp/$LIB
141 install -vm755 /tmp/$LIB /usr/libx32
142 rm /tmp/$LIB
143done</userinput><userinput>
[658dcab]144
[08f72423]145for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
146 $(find /usr/lib -type f -name \*.a) \
147 $(find /usr/{bin,sbin,libexec} -type f); do
148 case "$online_usrbin $online_usrlib $save_usrlib" in
[d672ab7]149 *$(basename $i)* )
[11d5dee]150 ;;
[d672ab7]151 * ) strip --strip-unneeded $i
[11d5dee]152 ;;
[de28837]153 esac
[85cd74c2]154done</userinput><userinput arch="ml_32,ml_all">
[9282602]155for i in $(find /usr/lib32 -type f -name \*.so* ! -name \*dbg) \
156 $(find /usr/lib32 -type f -name \*.a); do
[3330d51]157 case "$online_usrbin $online_usrlib $save_usrlib" in
[b8d5542]158 *$(basename $i)* )
159 ;;
160 * ) strip --strip-unneeded $i
161 ;;
[85cd74c2]162 esac
163done</userinput><userinput arch="ml_x32,ml_all">
[9282602]164for i in $(find /usr/libx32 -type f -name \*.so* ! -name \*dbg) \
165 $(find /usr/libx32 -type f -name \*.a); do
[3330d51]166 case "$online_usrbin $online_usrlib $save_usrlib" in
[b8d5542]167 *$(basename $i)* )
168 ;;
169 * ) strip --strip-unneeded $i
170 ;;
[85cd74c2]171 esac
172done</userinput><userinput>
[de28837]173
174unset BIN LIB save_usrlib online_usrbin online_usrlib
175</userinput></screen>
[3c928f1]176
[9c753b58]177 <para>A large number of files will be flagged as errors because their file
178 format is not recognized. These warnings can be safely ignored. They
179 indicate that those files are scripts, not binaries.</para>
[6c8a79a]180
[3c928f1]181</sect1>
Note: See TracBrowser for help on using the repository browser.