123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <chapter id="chapter05">
- <title>Preparing the LFS system</title>
- <?dbhtml filename="chapter05.html" dir="chapter05"?>
- &c5-introduction;
- &c5-whystatic;
- &c5-creatingstage1dir;
- &c5-addinguser;
- &c5-settingenviron;
- &c5-binutils-pass1;
- &c5-gcc-pass1;
- &c5-kernelheaders;
- &c5-glibc;
- &c5-lockingglibc;
- &c5-tcl;
- &c5-expect;
- &c5-dejagnu;
- &c5-gcc-pass2;
- &c5-binutils-pass2;
- &c5-gawk;
- &c5-coreutils;
- &c5-bzip2;
- &c5-gzip;
- &c5-diffutils;
- &c5-findutils;
- &c5-make;
- &c5-grep;
- &c5-sed;
- &c5-gettext;
- &c5-ncurses;
- &c5-patch;
- &c5-tar;
- &c5-texinfo;
- &c5-bash;
- &c5-utillinux;
- &c5-perl;
- <sect1 id="ch05-adjustingtoolchain">
- <title>Re-adjusting the toolchain</title>
- <?dbhtml filename="adjustingtoolchain.html" dir="chapter05"?>
- <para>Now that we have compiled all the necessary tools, it is time to
- re-adjust our toolchain. We will set it up so that it will link any newly
- compiled program against the new Glibc, which is the first thing to get
- compiled in the next chapter. Basically, this is the reverse of what we did
- in the "Locking in" stage in the beginning of this chapter.</para>
- <para>The first thing to do is to adjust the linker scripts. For this we
- retained the <filename>binutils-build</filename> directory from the second
- pass over Binutils. Do the following:</para>
- <para><screen><userinput>cd binutils-build
- make -C ld INSTALL=/stage1/bin/install install-data-local</userinput></screen></para>
- <para>This installs the adjusted linker scripts. The linker scripts now contain
- no mention of <filename>/stage1/lib</filename>. From now on every compiled
- program will link <emphasis>only</emphasis> against the libraries in
- <filename>/usr/lib</filename> and <filename>/lib</filename>. The extra
- <userinput>INSTALL=/stage1/bin/install</userinput> is needed because the
- Makefile created during the second pass still contains the reference to
- <filename>/usr/bin/install</filename>, which we obviously haven't installed
- yet.</para>
- <para>You can now remove the Binutils source and build directories.</para>
- <para>The next thing to do is to amend our GCC specs file so that it points to
- the new dynamic linker. Just like earlier on, we use a sed to accomplish
- this:</para>
- <para><screen><userinput>CURRENTSPECFILE=/stage1/lib/gcc-lib/*/*/specs
- sed -e 's@/stage1/lib/ld.so.1@/lib/ld.so.1@g' \
- -e 's@/stage1/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' \
- $CURRENTSPECFILE > newspecfile
- mv newspecfile $CURRENTSPECFILE
- unset CURRENTSPECFILE</userinput></screen></para>
- <para>Again, cutting and pasting the above is recommended. And just like
- before, it is a good idea to check the linker scripts and the specs file to
- ensure the intended changes were actually made.</para>
- <para>Note that the linker scripts will still contain a reference to
- <filename>/stage1/i686-pc-linux-gnu/lib</filename>. This is unavoidable, but
- luckily does not present a problem. There are no libraries in that location
- as all the temporary stage1 libraries are located in
- <filename>/stage1/lib</filename>.</para>
- </sect1>
- <sect1 id="ch05-stripping">
- <title>Stripping</title>
- <?dbhtml filename="stripping.html" dir="chapter05"?>
- <para>If your LFS partition is rather small, you will be glad to learn that you
- can throw away some unnecessary things. The executables and libraries you have
- built so far contain about 130 MB of unneeded debugging symbols. Remove those
- symbols like this:</para>
- <para><screen><userinput>strip --strip-unneeded /stage1/{,s}bin/*
- strip --strip-debug /stage1/lib/*</userinput></screen></para>
- <para>The first of the above commands will skip some twenty files, reporting
- that it doesn't recognize their file format. Most of them are scripts instead
- of binaries.</para>
- <para>Take care <emphasis>not</emphasis> to use
- <userinput>--strip-unneeded</userinput> on the libraries -- they would be
- destroyed and you would have to build Glibc all over again.</para>
- <para>To save another couple of megabytes, you can throw away the documentation
- and some of the bigger unneeded programs:</para>
- <para><screen><userinput>rm -r /stage1/share/{doc,info,man}
- rm /stage1/bin/{addr2line,gprof,nm,size,strings,strip}</userinput></screen></para>
- <para>You will now need to have at least 700 MB of free space on your LFS
- filesystem to be able to build and install Glibc in the next phase.</para>
- </sect1>
- </chapter>
|