cvs commit: LFS/newxml/chapter05 chapter05.xml addinguser.xml creatingtoolsdir.xml settingenviron.xml

matthew at matthew at
Sat Mar 27 13:00:56 PST 2004

matthew     04/03/27 14:00:56

  Modified:    newxml/chapter01 chapter01.xml how.xml
               newxml/chapter02 chapter02.xml
               newxml/chapter03 chapter03.xml introduction.xml
               newxml/chapter04 chapter04.xml
               newxml/chapter05 chapter05.xml
  Added:       newxml/chapter01 askforhelp.xml
               newxml/chapter02 creatingfilesystem.xml
                        creatingpartition.xml introduction.xml mounting.xml
               newxml/chapter03 packages.xml patches.xml
               newxml/chapter04 aboutlfs.xml aboutsbus.xml
                        abouttestsuites.xml addinguser.xml
                        creatingtoolsdir.xml settingenviron.xml
  Removed:     newxml/chapter02 aboutlfs.xml aboutsbus.xml
                        abouttestsuites.xml askforhelp.xml
               newxml/chapter03 creatingfilesystem.xml
                        creatingpartition.xml mounting.xml
               newxml/chapter04 introduction.xml packages.xml patches.xml
               newxml/chapter05 addinguser.xml creatingtoolsdir.xml
  * Applied Alex's restructuring changes
  Revision  Changes    Path
  1.9       +2 -2      LFS/newxml/chapter01/chapter01.xml
  Index: chapter01.xml
  RCS file: /home/cvsroot/LFS/newxml/chapter01/chapter01.xml,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- chapter01.xml	9 Mar 2004 21:57:50 -0000	1.8
  +++ chapter01.xml	27 Mar 2004 21:00:54 -0000	1.9
  @@ -3,7 +3,7 @@
     <!ENTITY % general-entities SYSTEM "../general.ent">
  -<chapter xmlns:xi="" id="chapter01" xreflabel="Chapter 1">
  +<chapter xmlns:xi="" id="chapter-intro" xreflabel="Chapter 1">
   <?dbhtml dir="chapter01"?>
   <?dbhtml filename="chapter01.html"?>
  @@ -16,6 +16,6 @@
   <xi:include href="administrativa.xml"/>
  +<xi:include href="askforhelp.xml"/>
  1.5       +3 -3      LFS/newxml/chapter01/how.xml
  Index: how.xml
  RCS file: /home/cvsroot/LFS/newxml/chapter01/how.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- how.xml	22 Mar 2004 20:48:27 -0000	1.4
  +++ how.xml	27 Mar 2004 21:00:54 -0000	1.5
  @@ -14,7 +14,7 @@
   all the required tools are available if you selected <quote>development</quote>
   as one of the options when you installed your distribution.</para>
  -<para>In <xref linkend="chapter-making-space"/> you will first create a new Linux native
  +<para>In <xref linkend="chapter-partitioning"/> you will first create a new Linux native
   partition and file system, the place where your new LFS system will be compiled
   and installed. Then in <xref linkend="chapter-getting-materials"/> you download all the
   packages and patches required to build an LFS system, and store them on the new
  @@ -67,8 +67,8 @@
   progress through them. If something isn't completely clear now, don't worry, 
   everything will fall into place soon.</para>
  -<para>Please read <xref linkend="chapter-preparation"/> carefully as it explains a few
  -important things you should be aware of before you begin to work through
  +<para>Please read <xref linkend="chapter-final-preps"/> carefully as it explains
  + a few important things you should be aware of before you begin to work through
   <xref linkend="chapter-temporary-tools"/> and beyond.</para>
  1.1                  LFS/newxml/chapter01/askforhelp.xml
  Index: askforhelp.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="prepare-askforhelp">
  <title>How to ask for help</title>
  <?dbhtml filename="askforhelp.html"?>
  <para>If you encounter a problem while using this book, and your problem
  is not listed in the FAQ (<ulink url="&faq-root;"/>), you will find that
  most of the people on Internet Relay Chat (IRC) and on the mailing lists
  are willing to help you. An overview of the LFS mailing lists can be
  found via <xref linkend="ch-scatter-maillists"/>. To assist us in
  diagnosing and solving your problem, include as much relevant
  information as possible in your request for help.</para>
  <title>Things to mention</title>
  <para>Apart from a brief explanation of the problem you're having, the
  essential things to include in your request are:</para>
  <listitem><para>the version of the book you are using (being &version;),</para></listitem>
  <listitem><para>the host distribution and version you are using to create
  LFS from,</para></listitem>
  <listitem><para>the package or section giving you problems,</para></listitem>
  <listitem><para>the exact error message or symptom you are receiving,</para></listitem>
  <listitem><para>whether you have deviated from the book at all.</para></listitem>
  <para>(Note that saying that you've deviated from the book doesn't mean
  that we won't help you. After all, LFS is about choice. It'll just
  help us to see other possible causes of your problem.)</para>
  <title>Configure problems</title>
  <para>When something goes wrong during the stage where the configure script
  is run, look through the <filename>config.log</filename> file. This file
  may contain errors encountered during configure which weren't printed to
  the screen. Include those relevant lines if you decide to ask for
  <title>Compile problems</title>
  <para>To help us find the cause of the problem, both screen output and
  the contents of various files are useful. The screen output from both
  the ./configure script and the make run can be useful. Don't blindly
  include the whole thing but on the other hand, don't include too little.
  As an example, here is some screen output from make:</para>
  <screen>gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\"
  -DLOCALEDIR=\"/mnt/lfs/usr/share/locale\" -DLIBDIR=\"/mnt/lfs/usr/lib\"
  -DINCLUDEDIR=\"/mnt/lfs/usr/include\" -DHAVE_CONFIG_H -I. -I.
  -g -O2 -c getopt1.c
  gcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o expand.o file.o
  function.o getopt.o implicit.o job.o main.o misc.o read.o remake.o rule.o
  signame.o variable.o vpath.o default.o remote-stub.o version.o opt1.o
  -lutil job.o: In function `load_too_high':
  /lfs/tmp/make-3.79.1/job.c:1565: undefined reference to `getloadavg'
  collect2: ld returned 1 exit status
  make[2]: *** [make] Error 1
  make[2]: Leaving directory `/lfs/tmp/make-3.79.1'
  make[1]: *** [all-recursive] Error 1
  make[1]: Leaving directory `/lfs/tmp/make-3.79.1'
  make: *** [all-recursive-am] Error 2</screen>
  <para>In this case, many people just include the bottom section where it
  <screen>make [2]: *** [make] Error 1</screen>
  <para>and onwards. This isn't enough for us to diagnose the problem because it
  only tells us that <emphasis>something</emphasis> went wrong, not
  <emphasis>what</emphasis> went wrong. The whole section, as in the example
  above, is what should be included to be helpful, because it includes the
  command that was executed and the command's error message(s).</para>
  <para>An excellent article on asking for help on the Internet in general
  has been written by Eric S. Raymond. It is available online at 
  <ulink url=""/>.
  Read and follow the hints in that document and you are much more likely
  to get a response to start with and also to get the help you actually
  <title>Test suite problems</title>
  <para>Many packages provide a test suite which, depending on the importance
  of the package, we may encourage you to run. Sometimes packages will
  generate false or expected failures. If you encounter these, you can check
  the LFS Wiki page at <ulink url="&wiki-root;"/> to see whether we have
  already noted and investigated them. If we already know
  about them, then usually there is no need to be concerned.</para>
  1.7       +6 -6      LFS/newxml/chapter02/chapter02.xml
  Index: chapter02.xml
  RCS file: /home/cvsroot/LFS/newxml/chapter02/chapter02.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- chapter02.xml	9 Mar 2004 21:57:50 -0000	1.6
  +++ chapter02.xml	27 Mar 2004 21:00:54 -0000	1.7
  @@ -3,22 +3,22 @@
     <!ENTITY % general-entities SYSTEM "../general.ent">
  -<chapter xmlns:xi="" id="chapter-preparation" xreflabel="Chapter 2">
  +<chapter xmlns:xi="" id="chapter-partitioning" xreflabel="Chapter 2">
   <?dbhtml dir="chapter02"?>
  -<title>Important information</title>
  +<title>Preparing a new partition</title>
   <?dbhtml filename="chapter02.html"?>
  -<xi:include href="aboutlfs.xml"/>
  +<xi:include href="introduction.xml"/>
  -<xi:include href="aboutsbus.xml"/>
  +<xi:include href="creatingpartition.xml"/>
  -<xi:include href="abouttestsuites.xml"/>
  +<xi:include href="creatingfilesystem.xml"/>
  -<xi:include href="askforhelp.xml"/>
  +<xi:include href="mounting.xml"/>
  1.1                  LFS/newxml/chapter02/creatingfilesystem.xml
  Index: creatingfilesystem.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 id="space-creatingfilesystem">
  <title>Creating a file system on the new partition</title>
  <?dbhtml filename="creatingfilesystem.html"?>
  <para>Now that we have a blank partition, we can create a file system on it.
  Most widely used in the Linux world is the second extended file system (ext2),
  but with the high-capacity hard disks of today the so-called journaling file
  systems are becoming increasingly popular. Here we will create an ext2 file
  system, but build instructions for other file systems can be found at 
  <ulink url="&blfs-root;view/stable/postlfs/filesystems.html"/>.</para>
  <para>To create an ext2 file system on the LFS partition run the following:</para>
  <screen><userinput>mke2fs /dev/xxx</userinput></screen>
  <para>Replace <filename>xxx</filename> with the name of the LFS partition
  (something like <filename>hda5</filename>).</para>
  <para>If you created a (new) swap partition you need to initialize it as a
  swap partition too (also known as formatting, like you did above with
  <userinput>mke2fs</userinput>) by running:</para>
  <screen><userinput>mkswap /dev/yyy</userinput></screen>
  <para>Replace <filename>yyy</filename> with the name of the swap
  1.1                  LFS/newxml/chapter02/creatingpartition.xml
  Index: creatingpartition.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 id="space-creatingpartition">
  <title>Creating a new partition</title>
  <?dbhtml filename="creatingpartition.html"?>
  <para>In order to build our new Linux system, we will need some space:
  an empty disk partition. If you don't have a free partition, and no room
  on any of your hard disks to make one, then you could build LFS on the
  same partition as the one on which your current distribution is installed.
  This procedure is not recommended for your first LFS install, but if you
  are short on disk space, and you feel brave, take a look at the hint at
  <ulink url="&hints-root;lfs_next_to_existing_systems.txt"/>.</para>
  <para>For a minimal system you will need a partition of around 1.2 GB.
  This is enough to store all the source tarballs and compile all the packages.
  But if you intend to use the LFS system as your primary Linux system, you
  will probably want to install additional software, and will need more space
  than this, probably around 2 or 3 GB.</para>
  <para>As we almost never have enough RAM in our box, it is a good idea to
  use a small disk partition as swap space -- this space is used by the kernel
  to store seldom-used data to make room in memory for more urgent stuff.
  The swap partition for your LFS system can be the same one as for your host
  system, so you won't have to create another if your host system already uses
  a swap partition.</para>
  <para>Start a disk partitioning program such as <userinput>cfdisk</userinput>
  or <userinput>fdisk</userinput> with an argument naming the hard disk upon
  which the new partition must be created -- for example
  <filename>/dev/hda</filename> for the primary IDE disk. Create a Linux native
  partition and a swap partition, if needed. Please refer to the man pages of
  <userinput>cfdisk</userinput> or <userinput>fdisk</userinput> if you don't yet
  know how to use the programs.</para>
  <para>Remember the designation of your new partition -- something like
  <filename>hda5</filename>. This book will refer to it as the LFS partition.
  If you (now) also have a swap partition, remember its designation too. These
  names will later be needed for the <filename>/etc/fstab</filename> file.</para>
  1.1                  LFS/newxml/chapter02/introduction.xml
  Index: introduction.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="space-introduction">
  <?dbhtml filename="introduction.html"?>
  <para>In this chapter the partition which will host the LFS system is
  prepared. We will create the partition itself, make a file system on it,
  and mount it.</para>
  1.1                  LFS/newxml/chapter02/mounting.xml
  Index: mounting.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="space-mounting">
  <title>Mounting the new partition</title>
  <?dbhtml filename="mounting.html"?>
  <para>Now that we've created a file system, we want to be able to access
  the partition. For that, we need to mount it, and have to choose a mount
  point. In this book we assume that the file system is mounted under
  <filename>/mnt/lfs</filename>, but it doesn't matter what directory
  you choose.</para>
  <para>Choose a mount point and assign it to the LFS environment variable
  by running:</para>
  <screen><userinput>export LFS=/mnt/lfs</userinput></screen>
  <para>Now create the mount point and mount the LFS file system by running:</para>
  <screen><userinput>mkdir -p $LFS
  mount /dev/xxx $LFS</userinput></screen>
  <para>Replace <filename>xxx</filename> with the designation of the LFS
  <para>If you have decided to use multiple partitions for LFS (say one for
  <filename>/</filename> and another for <filename>/usr</filename>), mount
  them like this:</para>
  <screen><userinput>mkdir -p $LFS
  mount /dev/xxx $LFS
  mkdir $LFS/usr
  mount /dev/yyy $LFS/usr</userinput></screen>
  <para>Of course, replace <filename>xxx</filename> and <filename>yyy</filename>
  with the appropriate partition names.</para>
  <para>You should also ensure that this new partition is not mounted with
  permissions that are too restrictive (such as the nosuid, nodev or noatime
  options). You can run the <command>mount</command> command without any
  parameters to see with what options the LFS partition is mounted. If
  you see nosuid, nodev or noatime, you will need to remount it.</para>
  <para>Now that we've made ourselves a place to work in, we're ready to download
  the packages.</para>
  1.7       +4 -8      LFS/newxml/chapter03/chapter03.xml
  Index: chapter03.xml
  RCS file: /home/cvsroot/LFS/newxml/chapter03/chapter03.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- chapter03.xml	9 Mar 2004 21:57:50 -0000	1.6
  +++ chapter03.xml	27 Mar 2004 21:00:54 -0000	1.7
  @@ -3,22 +3,18 @@
     <!ENTITY % general-entities SYSTEM "../general.ent">
  -<chapter xmlns:xi="" id="chapter-making-space" xreflabel="Chapter 3">
  +<chapter xmlns:xi="" id="chapter-getting-materials" xreflabel="Chapter 3">
   <?dbhtml dir="chapter03"?>
  -<title>Preparing a new partition</title>
  +<title>The materials: packages and patches</title>
   <?dbhtml filename="chapter03.html"?>
   <xi:include href="introduction.xml"/>
  -<xi:include href="creatingpartition.xml"/>
  +<xi:include href="packages.xml"/>
  -<xi:include href="creatingfilesystem.xml"/>
  -<xi:include href="mounting.xml"/>
  +<xi:include href="patches.xml"/>
  1.4       +47 -4     LFS/newxml/chapter03/introduction.xml
  Index: introduction.xml
  RCS file: /home/cvsroot/LFS/newxml/chapter03/introduction.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- introduction.xml	9 Mar 2004 21:57:50 -0000	1.3
  +++ introduction.xml	27 Mar 2004 21:00:55 -0000	1.4
  @@ -3,12 +3,55 @@
     <!ENTITY % general-entities SYSTEM "../general.ent">
  -<sect1 xmlns:xi="" id="space-introduction">
  +<sect1 xmlns:xi="" id="materials-introduction">
   <?dbhtml filename="introduction.html"?>
  -<para>In this chapter the partition which will host the LFS system is
  -prepared. We will create the partition itself, make a file system on it,
  -and mount it.</para>
  +<para>Below is a list of packages you need to download for building a basic
  +Linux system. The listed version numbers correspond to versions of the
  +software that are <emphasis>known</emphasis> to work, and this book is
  +based upon them. Unless you are an experienced LFS builder, we highly
  +recommend not to try out newer versions, as the build commands for one
  +version may not work with a newer version. Also, there is often a good
  +reason for not using the latest version due to known problems that haven't
  +been worked around yet.</para>
  +<para>All the URLs, when possible, refer to the project's page at
  +<ulink url=""/>. The Freshmeat
  +pages will give you easy access to the official download sites as well as
  +project websites, mailing lists, FAQs, changelogs and more.</para>
  +<para>We can't guarantee that these download locations are always available.
  +In case a download location has changed since this book was published, please
  +try to google for the package. Should you remain unsuccessful with this, you
  +can consult the book's errata page at <ulink url="&lfs-root;lfs/print/"/>
  +or, better yet, try one of the alternative means of downloading listed on
  +<ulink url="&lfs-root;lfs/packages.html"/>.</para>
  +<para>You'll need to store all the downloaded packages and patches somewhere
  +that is conveniently available throughout the entire build. You'll also need a
  +working directory in which to unpack the sources and build them. A scheme that
  +works well is to use <filename>$LFS/sources</filename> as the place to store
  +the tarballs and patches, <emphasis>and</emphasis> as a working directory.
  +This way everything you need will be located on the LFS partition and available
  +during all stages of the building process.</para>
  +<para>So you may want to execute, as <emphasis>root</emphasis>, the following
  +command before starting your download session:</para>
  +<screen><userinput>mkdir $LFS/sources</userinput></screen>
  +<para>And make this directory writable (and sticky) for your normal user -- as
  +you won't do the downloading as <emphasis>root</emphasis>, we guess:</para>
  +<screen><userinput>chmod a+wt $LFS/sources</userinput></screen>
  +<para>For your convenience the top of the list contains a link to a file
  +you can use with the <ulink url="">wget</ulink>
  +program. Using this file and the <command>wget</command> program will
  +make it easy to download all the files at once, rather than downloading each
  +and every individual file manually.</para>
  1.1                  LFS/newxml/chapter03/packages.xml
  Index: packages.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="materials-packages">
  <title>All the packages</title>
  <?dbhtml filename="packages.html"?>
  <para>Download or otherwise obtain the following packages:</para>
  Autoconf (&autoconf-version;) - 903 KB:
  <ulink url="&freshmeat;autoconf/"/>
  Automake (&automake-version;) - 623 KB:
  <ulink url="&freshmeat;automake/"/>
  Bash (&bash-version;) - 1,910 KB:
  <ulink url="&freshmeat;gnubash/"/>
  Binutils (&binutils-version;) - 10,666 KB:
  <ulink url="&freshmeat;binutils/"/>
  Bison (&bison-version;) - 796 KB:
  <ulink url="&freshmeat;bison/"/>
  Bzip2 (&bzip2-version;) - 650 KB:
  <ulink url="&freshmeat;bzip2/"/>
  Coreutils (&coreutils-version;) - 3,860 KB:
  <ulink url="&freshmeat;coreutils/"/>
  DejaGnu (&dejagnu-version;) - 1,055 KB:
  <ulink url="&freshmeat;dejagnu/"/>
  Diffutils (&diffutils-version;) - 762 KB:
  <ulink url="&freshmeat;diffutils/"/>
  E2fsprogs (&e2fsprogs-version;) - 3,003 KB:
  <ulink url="&freshmeat;e2fsprogs/"/>
  Ed (&ed-version;) - 182 KB:
  <ulink url="&freshmeat;ed/"/>
  Expect (&expect-version;) - 509 KB:
  <ulink url="&freshmeat;expect/"/>
  File (&file-version;) - 356 KB: -- <emphasis>(see Note 1 below)</emphasis>
  <ulink url="&freshmeat;file/"/>
  Findutils (&findutils-version;) - 760 KB:
  <ulink url="&freshmeat;findutils/"/>
  Flex (&flex-version;) - 372 KB:
  <ulink url=""/>
  Gawk (&gawk-version;) - 1,596 KB:
  <ulink url="&freshmeat;gnuawk/"/>
  GCC (&gcc-2953-version;) - 9,618 KB:
  <ulink url="&freshmeat;gcc/"/>
  GCC-core (&gcc-version;) - 10,994 KB:
  <ulink url="&freshmeat;gcc/"/>
  GCC-g++ (&gcc-version;) - 2,019 KB:
  <ulink url="&freshmeat;gcc/"/>
  GCC-testsuite (&gcc-version;) - 1,042 KB:
  <ulink url="&freshmeat;gcc/"/>
  Gettext (&gettext-version;) - 6,397 KB:
  <ulink url="&freshmeat;gettext/"/>
  Glibc (&glibc-version;) - 13,101 KB: -- <emphasis>(see Note 2 below)</emphasis>
  <ulink url="&freshmeat;glibc/"/>
  Grep (&grep-version;) - 545 KB:
  <ulink url="&freshmeat;grep/"/>
  Groff (&groff-version;) - 2,360 KB:
  <ulink url="&freshmeat;groff/"/>
  Grub (&grub-version;) - 902 KB:
  <ulink url=""/>
  Gzip (&gzip-version;) - 324 KB:
  <ulink url=""/>
  Iana-Etc (&iana-etc-version;) - 161 KB:
  <ulink url="&freshmeat;iana-etc/"/>
  Inetutils (&inetutils-version;) - 1,019 KB:
  <ulink url="&freshmeat;inetutils/"/>
  Kbd (&kbd-version;) - 617 KB:
  <ulink url="&freshmeat;kbd/"/>
  Less (&less-version;) - 259 KB:
  <ulink url="&freshmeat;less/"/>
  LFS-Bootscripts (&bootscripts-version;) - 25 KB:
  <ulink url="&http-down;lfs-bootscripts-1.12.tar.bz2"/>
  Libtool (&libtool-version;) - 2,591 KB:
  <ulink url="&freshmeat;libtool/"/>
  Linux (&linux-version;) - 29,138 KB:
  <ulink url="&freshmeat;linux/"/>
  M4 (&m4-version;) - 310 KB:
  <ulink url="&freshmeat;gnum4/"/>
  Make (&make-version;) - 899 KB:
  <ulink url="&freshmeat;gnumake/"/>
  Make_devices (&makedev-version;) - 20 KB:
  <ulink url="&lfs-root;~alex/make_devices-1.2.bz2"/>
  Man (&man-version;) - 196 KB:
  <ulink url="&freshmeat;man/"/>
  Man-pages (&man-pages-version;) - 1,582 KB:
  <ulink url="&freshmeat;man-pages/"/>
  Mktemp (&mktemp-version;) - 69 KB:
  <ulink url="&freshmeat;mktemp/"/>
  Modutils (&modutils-version;) - 229 KB:
  <ulink url="&freshmeat;modutils/"/>
  Ncurses (&ncurses-version;) - 2,019 KB:
  <ulink url="&freshmeat;ncurses/"/>
  Net-tools (&net-tools-version;) - 194 KB:
  <ulink url="&freshmeat;net-tools/"/>
  Patch (&patch-version;) - 182 KB:
  <ulink url="&freshmeat;patch/"/>
  Perl (&perl-version;) - 11,721 KB:
  <ulink url="&freshmeat;perl/"/>
  Procinfo (&procinfo-version;) - 24 KB:
  <ulink url="&freshmeat;procinfo/"/>
  Procps (&procps-version;) - 260 KB:
  <ulink url="&freshmeat;procps/"/>
  Psmisc (&psmisc-version;) - 375 KB:
  <ulink url="&freshmeat;psmisc/"/>
  Sed (&sed-version;) - 751 KB:
  <ulink url="&freshmeat;sed/"/>
  Shadow (&shadow-version;) - 795 KB:
  <ulink url="&freshmeat;shadow/"/>
  Sysklogd (&sysklogd-version;) - 80 KB:
  <ulink url="&freshmeat;sysklogd/"/>
  Sysvinit (&sysvinit-version;) - 91 KB:
  <ulink url="&freshmeat;sysvinit/"/>
  Tar (&tar-version;) - 1,281 KB:
  <ulink url=""/>
  Tcl (&tcl-version;) - 3,363 KB:
  <ulink url="&freshmeat;tcltk/"/>
  Texinfo (&texinfo-version;) - 1,317 KB:
  <ulink url="&freshmeat;texinfo/"/>
  Util-linux (&util-linux-version;) - 1,814 KB:
  <ulink url="&freshmeat;util-linux/"/>
  Vim (&vim-version;) - 3,193 KB:
  <ulink url="&freshmeat;vim/"/>
  Zlib (&zlib-version;) - 277 KB:
  <ulink url="&freshmeat;zlib/"/>
  Total size of these packages: 134 MB
  <note><para>1) File (&file-version;) may not be available by the time you read
  this. The site admins of the master download location are known to occasionally
  remove old versions when new ones are released. Please refer to the
  <xref linkend="ch-system-file"/> section for an alternate download
  <note><para>2) As of this writing, the Glibc maintainers have decided in their
  wisdom not to make available new release tarballs for download. The only way to
  obtain the current Glibc release from pristine upstream sources is to pull it
  from the Glibc CVS repository. The following commands will download the current
  release and make a tarball from it:</para>
  <screen><userinput>cvs -z 9 -d :pserver:anoncvs at \
      export -d glibc-2.3.3-20031202 -D "2003-12-02 UTC" libc
  tar jcvf glibc-2.3.3-20031202.tar.bz2 glibc-2.3.3-20031202</userinput></screen>
  <para>Alternatively, we've made our own tarball available which you can
  download courtesy of the generous LFS mirror sites. Please refer to the
  <xref linkend="ch-tools-glibc"/> section for the download links.</para></note>
  1.1                  LFS/newxml/chapter03/patches.xml
  Index: patches.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="materials-patches">
  <title>Needed patches</title>
  <?dbhtml filename="patches.html"?>
  <para>Besides all those packages, you'll also need several patches. These
  correct tiny mistakes in the packages that should be fixed by the maintainer,
  or just make some small modifications to bend things our way. You'll need the
  Bash Patch - 7 KB:
  <ulink url="&patches-root;bash-&bash-version;-2.patch"/>
  Bison Attribute Patch - 2 KB:
  <ulink url="&patches-root;bison-&bison-version;-attribute.patch"/>
  Coreutils Hostname Patch - 1 KB:
  <ulink url="&patches-root;coreutils-&coreutils-version;-hostname-2.patch"/>
  Coreutils Posixver Patch - 1 KB:
  <ulink url="&patches-root;coreutils-&coreutils-version;-posixver-2.patch"/>
  Coreutils Uname Patch - 1 KB:
  <ulink url="&patches-root;coreutils-&coreutils-version;-uname.patch"/>
  Ed Mkstemp Patch - 1 KB:
  <ulink url="&patches-root;ed-&ed-version;-mkstemp.patch"/>
  Expect Spawn Patch - 6 KB:
  <ulink url="&patches-root;expect-&expect-version;-spawn.patch"/>
  GCC No-Fixincludes Patch - 1 KB:
  <ulink url="&patches-root;gcc-&gcc-version;-no_fixincludes-1.patch"/>
  GCC Specs Patch - 11 KB:
  <ulink url="&patches-root;gcc-&gcc-version;-specs-1.patch"/>
  GCC-2 Patch - 16 KB:
  <ulink url="&patches-root;gcc-&gcc-2953-version;-2.patch"/>
  GCC-2 No-Fixincludes Patch - 1 KB:
  <ulink url="&patches-root;gcc-&gcc-2953-version;-no-fixinc.patch"/>
  GCC-2 Return-Type Patch - 1 KB:
  <ulink url="&patches-root;gcc-&gcc-2953-version;-returntype-fix.patch"/>
  Inetutils No-Server-Man-Pages Patch - 4 KB:
  <ulink url="&patches-root;inetutils-&inetutils-version;-no_server_man_pages-1.patch"/>
  Kbd More-Programs Patch - 1 KB:
  <ulink url="&patches-root;kbd-&kbd-version;-more-programs-1.patch"/>
  Man 80-Columns Patch - 1 KB:
  <ulink url="&patches-root;man-&man-version;-80cols.patch"/>
  Mktemp Tempfile Patch - 3 KB:
  <ulink url="&patches-root;mktemp-&mktemp-version;-add-tempfile.patch"/>
  Net-tools Mii-Tool-Gcc33 Patch - 2 KB:
  <ulink url="&patches-root;net-tools-&net-tools-version;-miitool-gcc33-1.patch"/>
  Perl Libc Patch - 1 KB:
  <ulink url="&patches-root;perl-&perl-version;-libc-1.patch"/>
  <para>In addition to the above required patches, there exist a number of
  optional ones created by the LFS community. Most of these solve slight
  problems, or enable some functionality that's not enabled by default.
  Feel free to examine the patches database, located at <ulink url="&lfs-root;patches/"/>, 
  and pick any additional patches you wish to use.</para>
  1.7       +8 -9      LFS/newxml/chapter04/chapter04.xml
  Index: chapter04.xml
  RCS file: /home/cvsroot/LFS/newxml/chapter04/chapter04.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- chapter04.xml	9 Mar 2004 21:57:51 -0000	1.6
  +++ chapter04.xml	27 Mar 2004 21:00:55 -0000	1.7
  @@ -3,18 +3,17 @@
     <!ENTITY % general-entities SYSTEM "../general.ent">
  -<chapter xmlns:xi="" id="chapter-getting-materials" xreflabel="Chapter 4">
  +<chapter xmlns:xi="" id="chapter-final-preps" xreflabel="Chapter 4">
   <?dbhtml dir="chapter04"?>
  -<title>The materials: packages and patches</title>
  +<title>Final Preparations</title>
   <?dbhtml filename="chapter04.html"?>
  -<xi:include href="introduction.xml"/>
  -<xi:include href="packages.xml"/>
  -<xi:include href="patches.xml"/>
  +<xi:include href="aboutlfs.xml"/>
  +<xi:include href="creatingtoolsdir.xml"/>
  +<xi:include href="addinguser.xml"/>
  +<xi:include href="settingenviron.xml"/>
  +<xi:include href="aboutsbus.xml"/>
  +<xi:include href="abouttestsuites.xml"/>
  1.1                  LFS/newxml/chapter04/aboutlfs.xml
  Index: aboutlfs.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="prepare-aboutlfs">
  <title>About $LFS</title>
  <?dbhtml filename="aboutlfs.html"?>
  <para>Please read the following paragraphs carefully. Throughout this book the
  variable LFS will be used frequently. $LFS must at all times be replaced with
  the directory where the partition that contains the LFS system is mounted. How
  to create and where to mount the partition will be explained in full detail in
  <xref linkend="chapter-partitioning"/>. For the moment let's assume that the LFS partition
  is mounted on <filename>/mnt/lfs</filename>.</para>
  <para>When you are told to run a command like
  <userinput>./configure --prefix=$LFS/tools</userinput>, you actually have to
  execute <userinput>./configure --prefix=/mnt/lfs/tools</userinput>.</para>
  <para>It's important that this is done no matter where it is read; be it in
  commands entered in a shell, or in a file edited or created.</para>
  <para>A possible solution is to set the environment variable LFS.
  This way $LFS can be entered literally instead of replacing it with 
  /mnt/lfs. This is accomplished by running: </para>
  <screen><userinput>export LFS=/mnt/lfs</userinput></screen>
  <para>Now, if you are told to run a command such as
  <userinput>./configure --prefix=$LFS/tools</userinput>, then you may type it
  literally. Your shell will replace "$LFS" with "/mnt/lfs" when it processes
  the command line (that is, when you hit Enter after having typed the
  1.1                  LFS/newxml/chapter04/aboutsbus.xml
  Index: aboutsbus.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="prepare-aboutsbus">
  <title>About SBUs</title>
  <?dbhtml filename="aboutsbus.html"?>
  <para>Most people would like to know beforehand how long it approximately
  takes to compile and install each package. But "Linux from Scratch" is built
  on so many different systems, it is not possible to give actual times that are
  anywhere near accurate: the biggest package (Glibc) won't take more than
  twenty minutes on the fastest systems, but will take something like three days
  on the slowest -- no kidding. So instead of giving actual times, we've come up
  with the idea of using the <emphasis>Static Binutils Unit</emphasis>
  (abbreviated to <emphasis>SBU</emphasis>).</para>
  <para>It works like this: the first package you compile in this book is the
  statically linked Binutils in <xref linkend="chapter-temporary-tools"/>, and the time it
  takes to compile this package is what we call the "Static Binutils Unit" or
  "SBU". All other compile times will be expressed relative to this time.</para>
  <para>For example, the time it takes to build the static version of GCC is
  4.4 SBUs. This means that if on your system it took 10 minutes
  to compile and install the static Binutils, then you know it will take
  approximately 45 minutes to build the static GCC. Fortunately, most build times
  are much shorter than the one of Binutils.</para>
  <para>Note that if the system compiler on your host is GCC-2 based, the SBUs
  listed may end up being somewhat understated. This is because the SBU is based
  on the very first package, compiled with the old GCC, while the rest of the
  system is compiled with the newer GCC-3.3.2 which is known to be
  approximately 30% slower.</para>
  <para>Also note that SBUs don't work well for SMP-based machines. But if you're
  so lucky as to have multiple processors, chances are that your system is so fast
  that you won't mind.</para>
  <para>If you wish to see actual timings for specific machines, have a look at
  <ulink url="&lfs-root;~bdubbs/"/>.</para>
  1.1                  LFS/newxml/chapter04/abouttestsuites.xml
  Index: abouttestsuites.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="prepare-abouttestsuites">
  <title>About the test suites</title>
  <?dbhtml filename="abouttestsuites.html"?>
  <para>Most packages provide a test suite. Running the test suite for a newly
  built package is generally a good idea, as it can provide a nice sanity check
  that everything compiled correctly. A test suite that passes its set of checks
  usually proves that the package is functioning as the developer intended. It
  does not, however, guarantee that the package is totally bug free.</para>
  <para>Some test suites are more important than others. For example, the test
  suites for the core toolchain packages -- GCC, Binutils, and Glibc -- are of
  the utmost importance due to their central role in a properly functioning
  system. But be warned, the test suites for GCC and Glibc can take a very long
  time to complete, especially on slower hardware.</para>
  <note><para>Experience has shown us that there is little to be gained from running
  the test suites in <xref linkend="chapter-temporary-tools"/>. There can be no
  escaping the fact that the host system always exerts some influence on the
  tests in that chapter, often causing weird and inexplicable failures. Not only
  that, the tools built in <xref linkend="chapter-temporary-tools"/> are
  temporary and eventually discarded. For the average reader of this book we
  recommend <emphasis>not</emphasis> to run the test suites in 
  <xref linkend="chapter-temporary-tools"/>. The instructions for running those test
  suites are still provided for the benefit of testers and developers, but they
  are strictly optional for everyone else.</para></note>
  <para>A common problem when running the test suites for Binutils and GCC is
  running out of pseudo terminals (PTYs for short). The symptom is a very high
  number of failing tests. This can happen for several reasons, but the most
  likely cause is that the host system doesn't have the
  <emphasis>devpts</emphasis> file system set up correctly. We'll discuss this in
  more detail later on in <xref linkend="chapter-temporary-tools"/>.</para>
  <para>Sometimes package test suites will give false failures. You can
  consult the LFS Wiki at <ulink url="&wiki-root;"/> to verify that these
  failures are normal. This applies to all tests throughout the book.</para>
  1.1                  LFS/newxml/chapter04/addinguser.xml
  Index: addinguser.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="ch-tools-addinguser">
  <title>Adding the user lfs</title>
  <?dbhtml filename="addinguser.html"?>
  <para>When logged in as <emphasis>root</emphasis>, making a single mistake
  can damage or even wreck your system. Therefore we recommend that you
  build the packages in this chapter as an unprivileged user. You could
  of course use your own user name, but to make it easier to set up a clean
  work environment we'll create a new user <emphasis>lfs</emphasis> and
  use this one during the installation process. As <emphasis>root</emphasis>,
  issue the following command to add the new user:</para>
  <screen><userinput>useradd -s /bin/bash -m -k /dev/null lfs</userinput></screen>
  <para>The meaning of the switches:</para>
  <listitem><para><userinput>-s /bin/bash</userinput>: This makes
  <userinput>bash</userinput> the default shell for user
  <listitem><para><userinput>-m -k /dev/null</userinput>: These create a home
  directory for <emphasis>lfs</emphasis>, while preventing the files from a
  possible <filename>/etc/skel</filename> being copied into it.</para></listitem>
  <para>If you want to be able to log in as <emphasis>lfs</emphasis>, then give
  this new user a password:</para>
  <screen><userinput>passwd lfs</userinput></screen>
  <para>Now grant this new user <emphasis>lfs</emphasis> full access to
  <filename class="directory">$LFS/tools</filename> by giving it ownership
  of the directory:</para>
  <screen><userinput>chown lfs $LFS/tools</userinput></screen>
  <para>If you made a separate working directory as suggested, give user
  <emphasis>lfs</emphasis> ownership of this directory too:</para>
  <screen><userinput>chown lfs $LFS/sources</userinput></screen>
  <para>Next, login as user <emphasis>lfs</emphasis>. This can be done via a
  virtual console, through a display manager, or with the following substitute
  user command:</para>
  <screen><userinput>su - lfs</userinput></screen>
  <para>The "<command>-</command>" instructs <command>su</command> to start a
  <emphasis>login</emphasis> shell.</para>
  1.1                  LFS/newxml/chapter04/creatingtoolsdir.xml
  Index: creatingtoolsdir.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="ch-tools-creatingtoolsdir">
  <title>Creating the $LFS/tools directory</title>
  <?dbhtml filename="creatingtoolsdir.html"?>
  <para>All programs compiled in this chapter will be installed under <filename 
  class="directory">$LFS/tools</filename> to keep them separate from the
  programs compiled in the next chapter. The programs compiled here are only
  temporary tools and won't be a part of the final LFS system and by keeping them
  in a separate directory, we can later easily throw them away.</para>
  <para>Later on you might wish to search through the binaries of your system to
  see what files they make use of or link against. To make this searching easier
  you may want to choose a unique name for the directory in which the temporary
  tools are stored. Instead of the simple "tools" you could use something like
  "tools-for-lfs". However, you'll need to be careful to adjust all references to
  "tools" throughout the book -- including those in any patches, notably the
  GCC Specs Patch.</para>
  <para>Create the required directory by running the following:</para>
  <screen><userinput>mkdir $LFS/tools</userinput></screen>
  <para>The next step is to create a <filename>/tools</filename> symlink on
  your host system. It will point to the directory we just created on the LFS
  <screen><userinput>ln -s $LFS/tools /</userinput></screen>
  <note><para>The above command is correct. The <command>ln</command> command
  has a few syntactic variations, so be sure to check the info page before
  reporting what you may think is an error.</para></note>
  <para>The created symlink enables us to compile our toolchain so that it always
  refers to <filename>/tools</filename>, meaning that the compiler, assembler
  and linker will work both in this chapter (when we are still using some tools
  from the host) <emphasis>and</emphasis> in the next (when we are chrooted to
  the LFS partition).</para>
  1.1                  LFS/newxml/chapter04/settingenviron.xml
  Index: settingenviron.xml
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN" "" [
    <!ENTITY % general-entities SYSTEM "../general.ent">
  <sect1 xmlns:xi="" id="ch-tools-settingenviron">
  <title>Setting up the environment</title>
  <?dbhtml filename="settingenvironment.html"?>
  <para>We're going to set up a good working environment by creating two new
  startup files for the <command>bash</command> shell. While logged in as
  user <emphasis>lfs</emphasis>, issue the following command to create a new
  <screen><userinput>cat > ~/.bash_profile << "EOF"</userinput>
  exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
  <para>Normally, when you log on as user <emphasis>lfs</emphasis>,
  the initial shell is a <emphasis>login</emphasis> shell which reads the
  <filename>/etc/profile</filename> of your host (probably containing some
  settings of environment variables) and then <filename>.bash_profile</filename>.
  The <command>exec env -i ... /bin/bash</command> command in the latter file
  replaces the running shell with a new one with a completely empty environment,
  except for the HOME, TERM and PS1 variables. This ensures that no unwanted and
  potentially hazardous environment variables from the host system leak into our
  build environment. The technique used here is a little strange, but it achieves
  the goal of enforcing a clean environment.</para>
  <para>The new instance of the shell is a <emphasis>non-login</emphasis> shell,
  which doesn't read the <filename>/etc/profile</filename> or
  <filename>.bash_profile</filename> files, but reads the
  <filename>.bashrc</filename> file instead. Create this latter file now:</para>
  <screen><userinput>cat > ~/.bashrc << "EOF"</userinput>
  set +h
  umask 022
  export LFS LC_ALL PATH
  <para>The <command>set +h</command> command turns off
  <command>bash</command>'s hash function. Normally hashing is a useful
  feature: <command>bash</command> uses a hash table to remember the
  full pathnames of executable files to avoid searching the PATH time and time
  again to find the same executable. However, we'd like the new tools to be
  used as soon as they are installed. By switching off the hash function, our
  "interactive" commands (<command>make</command>,
  <command>patch</command>, <command>sed</command>,
  <command>cp</command> and so forth) will always use
  the newest available version during the build process.</para>
  <para>Setting the user file-creation mask to 022 ensures that newly created
  files and directories are only writable for their owner, but readable and
  executable for anyone.</para>
  <para>The LFS variable should of course be set to the mount point you
  <para>The LC_ALL variable controls the localization of certain programs,
  making their messages follow the conventions of a specified country. If your
  host system uses a version of Glibc older than 2.2.4,
  having LC_ALL set to something other than "POSIX" or "C" during this chapter
  may cause trouble if you exit the chroot environment and wish to return later.
  By setting LC_ALL to "POSIX" (or "C", the two are equivalent) we ensure that
  everything will work as expected in the chroot environment.</para>
  <para>We prepend <filename>/tools/bin</filename> to the standard PATH so
  that, as we move along through this chapter, the tools we build will get used
  during the rest of the building process.</para>
  <para>Finally, to have our environment fully prepared for building the
  temporary tools, source the just-created profile:</para>
  <screen><userinput>source ~/.bash_profile</userinput></screen>
  1.8       +0 -3      LFS/newxml/chapter05/chapter05.xml
  Index: chapter05.xml
  RCS file: /home/cvsroot/LFS/newxml/chapter05/chapter05.xml,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- chapter05.xml	27 Mar 2004 17:03:13 -0000	1.7
  +++ chapter05.xml	27 Mar 2004 21:00:56 -0000	1.8
  @@ -10,9 +10,6 @@
   <xi:include href="introduction.xml"/>
   <xi:include href="toolchaintechnotes.xml"/>
  -<xi:include href="creatingtoolsdir.xml"/>
  -<xi:include href="addinguser.xml"/>
  -<xi:include href="settingenviron.xml"/>
   <xi:include href="binutils-pass1.xml"/>
   <xi:include href="gcc-pass1.xml"/>
   <xi:include href="kernel-headers.xml"/>

More information about the lfs-book mailing list