Minor updates.
[linux_from_scratch.git] / chapter07 / stripping.xml
bloba31faadc3c3bfa30efaf5854a15f8272135db69d
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 ]>
8 <sect1 id="ch-tools-stripping">
9   <?dbhtml filename="stripping.html"?>
11   <title>Finishing Temporary Tools</title>
12   
13   <para>
14     The steps in this section are optional. Skip this section entirely
15     if you are not really short on disk space and do not want to create
16     a backup of the temporary tools.
17   </para>
19   <para>
20     The following steps are performed from outside the chroot
21     environment. That means, you have to leave the chroot environment
22     first before continuing. The reason for that is to:
23     <itemizedlist>
24       <listitem>
25         <para>
26           make sure that objects are not in use while they are 
27           manipulated.
28         </para>
29       </listitem>
30       <listitem>
31         <para>
32           get access to file system locations outside of the chroot
33           environment to store/read the backup archive which should
34           not be placed within the
35           <filename class="directory">$LFS</filename> hierarchy for
36           safety reasons.
37         </para>
38       </listitem>
39     </itemizedlist>
40   </para>
42   <para>
43     Leave the chroot environment and unmount the kernel virtual file
44     systems:
45   </para>
47   <note>
48     <para>All of the following instructions are executed by
49       <systemitem class="username">root</systemitem>. Take extra
50       care about the commands you're going to run as mistakes
51       here can modify your host system. Be aware that the
52       environment variable <envar>LFS</envar> is set for user 
53       <systemitem class="username">lfs</systemitem> by default 
54       but it might <emphasis>not</emphasis> be set for 
55       <systemitem class="username">root</systemitem>. Whenever 
56       commands are to be executed by <systemitem class="username">root</systemitem>, 
57       make sure you have set <envar>LFS</envar> accordingly.
58       This has been discussed in <xref linkend='ch-partitioning-aboutlfs'/>.
59     </para>
60   </note>
62 <screen role="nodump"><userinput>exit
63 umount $LFS/dev{/pts,}
64 umount $LFS/{sys,proc,run}</userinput></screen>
66   <sect2>
67     <title>Stripping</title>
69     <para>If the LFS partition is rather small, it is good to
70     know that unnecessary items can be removed. The executables and
71     libraries built so far contain a little over 90 MB of unneeded debugging
72     symbols.</para>
74     <para>Strip off debugging symbols from binaries:</para>
75 <screen role="nodump"><userinput>strip --strip-debug $LFS/usr/lib/*
76 strip --strip-unneeded $LFS/usr/{,s}bin/*
77 strip --strip-unneeded $LFS/tools/bin/*</userinput></screen>
79     <para>These commands will skip a number of files reporting that it does not
80     recognize their file format. Most of these are scripts instead of binaries.
81     <!--Note that we use the <command>strip</command> program built in
82     <quote>Binutils pass 2</quote>, since it is the one that knows how to strip
83     our cross-compiled programs.--></para>
85     <para>Take care <emphasis>NOT</emphasis> to use
86     <parameter>--strip-unneeded</parameter> on the libraries. The static
87     ones would be destroyed and the toolchain packages would need to be
88     built all over again.</para>
90     <para>To save more space (slightly more than 35 MB), remove the documentation:</para>
92 <screen role="nodump"><userinput>rm -rf $LFS/usr/share/{info,man,doc}</userinput></screen>
94     <para>The libtool .la files are only useful when linking with static
95     libraries. They are unneeded, and potentially harmful, when using dynamic
96     shared libraries, specially when using non-autotools build systems.
97     Remove those files now:</para>
99 <screen role="nodump"><userinput>find $LFS/usr/{lib,libexec} -name \*.la -delete</userinput></screen>
101     <para>At this point, you should have at least 5 GB of free space on the
102     chroot partition that can be used to build and install Glibc and GCC in
103     the next phase. If you can build and install Glibc, you can build and install
104     the rest too. You can check the free disk space with the command 
105     <command>df -h $LFS</command>.</para>
107   </sect2>
109   <sect2>
110     <title>Backup</title>
112     <para>
113       Now that the essential tools have been created, its time to think about
114       a backup. When every check has passed successfully in the previously 
115       built packages, your temporary tools are in a good state and might be
116       backed up for later reuse. In case of fatal failures in the subsequent
117       chapters, it often turns out that removing everything and starting over
118       (more carefully) is the best option to recover. Unfortunatly, all the
119       temporary tools will be removed, too. To avoid spending extra time to
120       redo something which has been built successfully, prepare a backup.
121     </para>
123     <para>
124       Make sure you have at least 600 MB free disk space (the source tarballs
125       will be included in the backup archive) in the home directory of user 
126       <systemitem class="username">root</systemitem>.
127     </para>
129     <para>
130       Create the backup archive by running the following command:
131     </para>
133 <screen role="nodump" revision="sysv"><userinput>cd $LFS &amp;&amp;
134 tar -cJpf $HOME/lfs-temp-tools-&version;.tar.xz .</userinput></screen>
136 <screen role="nodump" revision="systemd"><userinput>cd $LFS &amp;&amp;
137 tar -cJpf $HOME/lfs-temp-tools-&versiond;.tar.xz .</userinput></screen>
139     <para>
140       Replace <envar>$HOME</envar> by a directory of your choice if you
141       do not want to have the backup stored in <systemitem 
142       class="username">root</systemitem>'s home directory.
143     </para>
144   </sect2>
146   <sect2>
147     <title>Restore</title>
149     <para>
150       In case some mistakes have been made and you need to start over, you can
151       use this backup to restore the temporary tools and save some recovery time.
152       Since the sources are located under 
153       <filename class="directory">$LFS</filename>, they are included in the
154       backup archive as well, so they do not need to be downloaded again. After
155       checking that <filename class="directory">$LFS</filename> is set properly,
156       restore the backup by executing the following commands:
157     </para>
159 <!-- Make the following look different so users don't blindly run the
160      restore when they don't need to. -->
162 <screen role="nodump" revision="sysv"><computeroutput>cd $LFS &amp;&amp;
163 rm -rf ./* &amp;&amp;
164 tar -xpf $HOME/lfs-temp-tools-&version;.tar.xz</computeroutput></screen>
166 <screen role="nodump" revision="systemd"><computeroutput>cd $LFS &amp;&amp;
167 rm -rf ./* &amp;&amp;
168 tar -xpf $HOME/lfs-temp-tools-&versiond;.tar.xz</computeroutput></screen>
170     <para>
171       Again, double check that the environment has been setup properly
172       and continue building the rest of the system.
173     </para>
175     <important>
176       <para>
177         If you left the chroot environment either to strip off debug
178         symbols, create a backup or restart building using a restore, 
179         remember to mount the kernel virtual filesystems now again as 
180         described in <xref linkend='ch-tools-kernfs'/> and re-enter
181         the chroot environment (see <xref linkend='ch-tools-chroot'/>)
182         again before continuing.
183       </para>
184     </important>
185     
186   </sect2>
188 </sect1>