aboutsummaryrefslogtreecommitdiffstats
path: root/chapter07/stripping.xml
blob: 66b20d4fc65714429f4c57e8e05a9be9d1f8c4de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>

<sect1 id="ch-tools-stripping">
  <?dbhtml filename="stripping.html"?>

  <title>Finishing Temporary Tools</title>
  
  <para>
    The steps in this section are optional. Skip this section entirely
    if you are not really short on disk space and do not want to create
    a backup of the temporary tools.
  </para>

  <sect2>
    <title>Stripping</title>

    <para>If the LFS partition is rather small, it is beneficial to
    learn that unnecessary items can be removed.
    The executables and libraries built so far contain about 70 MB of unneeded
    debugging symbols.</para>

<screen><userinput>strip --strip-debug /usr/lib/*
strip --strip-unneeded /usr/{,s}bin/*
strip --strip-unneeded /tools/bin/*</userinput></screen>

    <para>These commands will skip a number of files reporting that it does not
    recognize their file format. Most of these are scripts instead of binaries.
    <!--Note that we use the <command>strip</command> program built in
    <quote>Binutils pass 1</quote>, since it is the one that knows how to strip
    our cross-compiled programs.--></para>

    <para>Take care <emphasis>NOT</emphasis> to use
    <parameter>--strip-unneeded</parameter> on the libraries. The static
    ones would be destroyed and the toolchain packages would need to be
    built all over again.</para>

    <para>To save more space, remove the documentation:</para>

<screen><userinput>rm -rf /usr/{,share}/{info,man,doc}</userinput></screen>

    <para>The libtool .la files are only useful when linking with static
    libraries. They are unneeded, and potentially harmful, when using dynamic
    shared libraries, specially when using non-autotools build systems.
    Remove those files now:</para>

<screen><userinput>find /usr/{lib,libexec} -name \*.la -delete</userinput></screen>

    <para>At this point, you should have at least 5 GB of free space on the
    chroot partition that can be used to build and install Glibc and Gcc in
    the next phase. If you can build and install Glibc, you can build and install
    the rest too. You can check the free disk space with the command 
    <command>df -h /</command>.</para>

  </sect2>

  <sect2>
    <title>Backup / Restore</title>

    <para>
      Now that the essential tools have been created, its time to think about
      a backup. When every check has passed successfully in the previously 
      built packages, your temporary tools are in a good state and might be
      backed up for later reuse. In case of fatal failures in the subsequent
      chapters, it often turns out that removing everything and starting over
      (more carefully) is the best option to recover. Unfortunatly, all the
      temporary tools will be removed, too. To avoid the extra time needed to redo
      something which has been built successfully, prepare a backup.
    </para>

    <para>
      Leave the chroot environment and make sure you have at least 
      600 MB free disk space (the source tarballs will be included in
      the backup archive) in the home directory of user 
      <systemitem class="username">lfs</systemitem>. Leaving the 
      chroot environment is required as the backup should be stored
      outside of the <filename class="directory">$LFS</filename> directory
      but those cannot be accessed when in chroot. Leave the chroot environment
      and unmount the virtual kernel filesystems:
    </para>

<screen role="nodump"><userinput>exit
umount $LFS/dev{/pts,}
umount $LFS/{sys,proc,run}</userinput></screen>

    <para>Create the backup archive:</para>
<screen role="nodump"><userinput>cd $LFS &amp;&amp;
tar -cJpf $HOME/temp-tools.tar.xz .
</userinput></screen>

    <para>
      In case some mistakes have been made and you need to start over, you can
      use this backup to restore the temporary tools and save some irecovery time.
      Since the sources are located under 
      <filename class="directory">$LFS</filename>, they are included in the
      backup archive as well, so you need not to download them again. After
      checking that <filename class="directory">$LFS</filename> is set properly,
      restore the backup by executing the following commands:
    </para>

<screen role="nodump"><userinput>cd $LFS &amp;&amp;
rm -rf ./* &amp;&amp;
tar -xpf $HOME/temp-tools.tar.xz
</userinput></screen>

    <para>
      Again, double check that the environment has been setup properly
      and continue building the rest of the system.
    </para>

    <important>
      <para>
      If you left the chroot environment either to create a backup
      or restart building using a restore, remember to mount the
      kernel virtual filesystems as described in <xref
      linkend='ch-tools-kernfs'/> and re-enter the
      chroot environment (see <xref
      linkend='ch-tools-chroot'/>) again before continuing.</para>
    </important>
    
  </sect2>

</sect1>