source: chapter08/stripping.xml@ 7cf7354

multilib
Last change on this file since 7cf7354 was 6cb86af, checked in by Thomas Trepl <thomas@…>, 17 months ago

Automatic merge of trunk into multilib

  • Property mode set to 100644
File size: 6.3 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-system-stripping">
9 <?dbhtml filename="stripping.html"?>
10
11 <title>Stripping</title>
12
13 <para>This section is optional. If the intended user is not a
14 programmer and does not plan to do
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>
19
20 <para>Most people who use the commands mentioned below do not
21 experience any difficulties. However, it is easy to make a mistake and
22 render the new system unusable. So before running the
23 <command>strip</command> commands, it is a good idea to make a
24 backup of the LFS system in its current state.</para>
25
26 <para>A <command>strip</command> command with the
27 <parameter>--strip-unneeded</parameter> option removes all debug symbols
28 from a binary or library. It also removes all symbol table entries not
29 needed by the linker (for static libraries) or dynamic linker (for
30 dynamically linked binaries and shared libraries).</para>
31
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
35 url='&blfs-book;/general/valgrind.html'>valgrind</ulink> or <ulink
36 url='&blfs-book;/general/gdb.html'>gdb</ulink> later, in BLFS.
37 </para>
38
39 <para>Note that <command>strip</command> will overwrite the binary or library
40 file it is processing. This can crash the processes using code or data from
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
44 and binaries into <filename class="directory">/tmp</filename>, strip them
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>
48
49 <note><para>The ELF loader's name is ld-linux-x86-64.so.2 on 64-bit systems
50 and ld-linux.so.2 on 32-bit systems. The construct below selects the
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>
54
55<!-- also of interest are libgfortan, libgo, libgomp, and libobjc from GCC -->
56
57<!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"-->
58<screen><userinput>save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
59 libc.so.6
60 libthread_db.so.1
61 libquadmath.so.&libquadmath-version;
62 libstdc++.so.&libstdcpp-version;
63 libitm.so.&libitm-version;
64 libatomic.so.&libatomic-version;"
65
66cd /usr/lib
67for LIB in $save_usrlib; do
68 objcopy --only-keep-debug $LIB $LIB.dbg
69 cp $LIB /tmp/$LIB
70 strip --strip-unneeded /tmp/$LIB
71 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
72 install -vm755 /tmp/$LIB /usr/lib
73 rm /tmp/$LIB
74done</userinput>
75<userinput arch="ml_32,ml_all">
76cd /usr/lib32
77for LIB in $save_usrlib; do
78 objcopy --only-keep-debug $LIB $LIB.dbg
79 cp $LIB /tmp/$LIB
80 strip --strip-unneeded /tmp/$LIB
81 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
82 install -vm755 /tmp/$LIB /usr/lib32
83 rm /tmp/$LIB
84done</userinput>
85<userinput arch="ml_x32,ml_all">
86cd /usr/libx32
87for LIB in $save_usrlib; do
88 objcopy --only-keep-debug $LIB $LIB.dbg
89 cp $LIB /tmp/$LIB
90 strip --strip-unneeded /tmp/$LIB
91 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
92 install -vm755 /tmp/$LIB /usr/libx32
93 rm /tmp/$LIB
94done</userinput><userinput>
95
96online_usrbin="bash find strip"
97online_usrlib="libbfd-&binutils-version;.so
98 libsframe.so.0.0.0
99 libhistory.so.&readline-soversion;
100 libncursesw.so.&ncurses-version;
101 libm.so.6
102 libreadline.so.&readline-soversion;
103 libz.so.&zlib-version;
104 $(cd /usr/lib; find libnss*.so* -type f)"
105
106for BIN in $online_usrbin; do
107 cp /usr/bin/$BIN /tmp/$BIN
108 strip --strip-unneeded /tmp/$BIN
109 install -vm755 /tmp/$BIN /usr/bin
110 rm /tmp/$BIN
111done
112
113for LIB in $online_usrlib; do
114 cp /usr/lib/$LIB /tmp/$LIB
115 strip --strip-unneeded /tmp/$LIB
116 install -vm755 /tmp/$LIB /usr/lib
117 rm /tmp/$LIB
118done</userinput><userinput arch="ml_32,ml_all">
119for LIB in $online_usrlib; do
120 cp /usr/lib32/$LIB /tmp/$LIB
121 strip --strip-unneeded /tmp/$LIB
122 install -vm755 /tmp/$LIB /usr/lib32
123 rm /tmp/$LIB
124done</userinput><userinput arch="ml_x32,ml_all">
125for LIB in $online_usrlib; do
126 cp /usr/libx32/$LIB /tmp/$LIB
127 strip --strip-unneeded /tmp/$LIB
128 install -vm755 /tmp/$LIB /usr/libx32
129 rm /tmp/$LIB
130done</userinput><userinput>
131
132for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
133 $(find /usr/lib -type f -name \*.a) \
134 $(find /usr/{bin,sbin,libexec} -type f); do
135 case "$online_usrbin $online_usrlib $save_usrlib" in
136 *$(basename $i)* )
137 ;;
138 * ) strip --strip-unneeded $i
139 ;;
140 esac
141done</userinput><userinput arch="ml_32,ml_all">
142for i in $(find /usr/lib32 -type f -name \*.so* ! -name \*dbg) \
143 $(find /usr/lib32 -type f -name \*.a); do
144 case "$online_usrbin $online_usrlib $save_usrlib" in
145 *$(basename $i)* )
146 ;;
147 * ) strip --strip-unneeded $i
148 ;;
149 esac
150done</userinput><userinput arch="ml_x32,ml_all">
151for i in $(find /usr/libx32 -type f -name \*.so* ! -name \*dbg) \
152 $(find /usr/libx32 -type f -name \*.a); do
153 case "$online_usrbin $online_usrlib $save_usrlib" in
154 *$(basename $i)* )
155 ;;
156 * ) strip --strip-unneeded $i
157 ;;
158 esac
159done</userinput><userinput>
160
161unset BIN LIB save_usrlib online_usrbin online_usrlib
162</userinput></screen>
163
164 <para>A large number of files will be flagged as errors because their file
165 format is not recognized. These warnings can be safely ignored. They
166 indicate that those files are scripts, not binaries.</para>
167
168</sect1>
Note: See TracBrowser for help on using the repository browser.