Index: chapter01/how.xml
===================================================================
--- chapter01/how.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter01/how.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -9,9 +9,9 @@
   <?dbhtml filename="how.html"?>
 
-  <title>How to Build an LFS System</title>
+  <title>How to Cross Build an LFS System</title>
 
   <para>The LFS system will be built by using an already installed
-  Linux distribution (such as Debian, OpenMandriva, Fedora, or openSUSE). This
-  existing Linux system (the host) will be used as a starting point to
+  UNIX-like system (such as Debian Linux or Mac OS X). This
+  existing UNIX-like system (the host) will be used as a starting point to
   provide necessary programs, including a compiler, linker, and shell,
   to build the new system. Select the <quote>development</quote> option
@@ -54,7 +54,10 @@
   cross-compile basic utilities using the just built cross-toolchain.</para>
 
-  <para><xref linkend="chapter-chroot-temporary-tools"/> then enters a
-  "chroot" environment and uses the previously built tools to build
-  the additional tools needed to build and test the final system.</para>
+  <para><xref linkend="chapter-chroot-temporary-tools"/> then boots the
+  minimal Linux environment on the target machine and uses the previously
+  built tools to build the additional tools needed to build and test the
+  final system.  Note that in the book the minimal Linux environment may be
+  referred as <quote>chroot environment</quote> only to keep the consistency
+  with the original LFS book.</para>
 
   <para>This effort to isolate the new system from the host distribution may
@@ -63,8 +66,5 @@
 
   <para>In <xref linkend="chapter-building-system"/>, The
-  full LFS system is built. Another advantage provided by the chroot
-  environment is that it allows you to continue using the host system
-  while LFS is being built. While waiting for package compilations to
-  complete, you can continue using your computer as normal.</para>
+  full LFS system is built.</para>
 
   <para>To finish the installation, the basic system configuration is set up in
Index: chapter02/aboutlfs.xml
===================================================================
--- chapter02/aboutlfs.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter02/aboutlfs.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -16,8 +16,6 @@
   directory where you will be building your LFS system - we will use
   <filename class="directory">/mnt/lfs</filename> as an example, but the
-  directory choice is up to you. If you are building LFS on a separate
-  partition, this directory will be the mount point for the partition.
-  Choose a directory location and set the variable with the
-  following command:</para>
+  directory choice is up to you. Choose a directory location and set the
+  variable with the following command:</para>
 
 <screen role="nodump"><userinput>export LFS=<replaceable>/mnt/lfs</replaceable></userinput></screen>
@@ -28,4 +26,11 @@
   <quote>/mnt/lfs</quote> (or whatever the variable was set to) when it
   processes the command line.</para>
+
+  <para>Create the directory:</para>
+
+<screen role="nodump"><userinput>mkdir -pv $LFS</userinput></screen>
+
+  <para>If you don't have much space in the partition holding the directory,
+  you can mount another partition on it.</para>
 
   <caution>
Index: chapter02/chapter02.xml
===================================================================
--- chapter02/chapter02.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter02/chapter02.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -15,8 +15,5 @@
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="hostreqs.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="stages.xml"/>
-  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="creatingpartition.xml"/>
-  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="creatingfilesystem.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="aboutlfs.xml"/>
-  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mounting.xml"/>
 
 </chapter>
Index: chapter02/hostreqs.xml
===================================================================
--- chapter02/hostreqs.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter02/hostreqs.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -36,4 +36,9 @@
 
     <listitem>
+      <!-- needed to cross build the kernel in chapter 6 -->
+      <para><emphasis role="strong">Bc-1.07.0</emphasis></para>
+    </listitem>
+
+    <listitem>
       <para><emphasis role="strong">Bison-2.7</emphasis> (/usr/bin/yacc
       should be a link to bison or small script that executes bison)</para>
@@ -71,25 +76,4 @@
     <listitem>
       <para><emphasis role="strong">Gzip-1.3.12</emphasis></para>
-    </listitem>
-
-    <listitem>
-      <para><emphasis role="strong">Linux Kernel-&min-kernel;</emphasis></para>
-
-      <para>The reason for the kernel version requirement is that we specify
-      that version when building <application>glibc</application> in
-      <xref linkend="chapter-cross-tools"/> and
-      <xref linkend="chapter-building-system"/>,
-      at the recommendation of the developers.  It is also required by
-      udev.</para>
-
-      <para>If the host kernel is earlier than &min-kernel; you will need to replace
-      the kernel with a more up to date version. There are two ways
-      you can go about this. First, see if your Linux vendor provides a &min-kernel;
-      or later kernel package. If so, you may wish to install it. If your
-      vendor doesn't offer an acceptable kernel package, or you would prefer not to
-      install it, you can compile a kernel yourself. Instructions for
-      compiling the kernel and configuring the boot loader (assuming the host
-      uses GRUB) are located in <xref linkend="chapter-bootable"/>.</para>
-
     </listitem>
 
@@ -161,4 +145,5 @@
 unset MYSH
 
+bc --version | head -n1
 echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
 bison --version | head -n1
Index: chapter02/stages.xml
===================================================================
--- chapter02/stages.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter02/stages.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -65,28 +65,19 @@
     <itemizedlist>
       <listitem>
-         <para>The /mnt/lfs partition must be mounted.</para>
+        <para>You must boot the temporary system on the target machine.</para>
       </listitem>
 
       <listitem>
-        <para>A few operations, from <quote>Changing Ownership</quote> to
-        <quote>Entering the Chroot Environment</quote> must be done as the
-        <systemitem class="username">root</systemitem> user, with the LFS
-        environment variable set for the &root; user.</para>
+        <para>A few operations, from
+        <quote>Preparing Virtual Kernel File Systems</quote> to
+        <quote>Setting up Environment</quote> must be done.</para>
       </listitem>
 
       <listitem>
-         <para> When entering chroot, the LFS environment variable must be set
-         for <systemitem class="username">root</systemitem>. The LFS
-         variable is not used afterwards.</para>
+        <para>The operations in <xref linkend="ch-tools-lo"/> must be done
+        before starting or continuing from
+        <xref linkend="chapter-building-system"/>.</para>
       </listitem>
 
-      <listitem>
-         <para> The virtual file systems must be mounted.  This can be done
-         before or after entering chroot by changing to a host virtual terminal
-         and, as <systemitem class="username">root</systemitem>, running the
-         commands in
-         <xref linkend='ch-tools-bindmount'/> and
-         <xref linkend='ch-tools-kernfsmount'/>.</para>
-      </listitem>
     </itemizedlist>
   </sect2>
Index: chapter04/aboutsbus.xml
===================================================================
--- chapter04/aboutsbus.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter04/aboutsbus.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -38,4 +38,12 @@
 
   <note>
+    <para>In the cross edition, the SBUs are kept same as the original LFS
+    book.  They should only be considered as a reference. It obviously does
+    not make sense to predict the building time in Chapter 7 or 8 with
+    <quote>1 SBU</quote> measured in Chapter 5, as the target machine and
+    the machine running the host distro may be completely different.</para>
+  </note>
+
+  <note>
     <para>For many modern systems with multiple processors (or cores) the
     compilation time for a package can be reduced by performing a "parallel
Index: chapter04/addinguser.xml
===================================================================
--- chapter04/addinguser.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter04/addinguser.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -81,8 +81,5 @@
   <systemitem class="username">lfs</systemitem> the directory owner:</para>
 
-<screen><userinput>chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools}
-case $(uname -m) in
-  x86_64) chown -v lfs $LFS/lib64 ;;
-esac</userinput></screen>
+<screen><userinput>chown -v lfs $LFS/{usr{,/*},lib*,boot,var,etc,bin,sbin,tools}</userinput></screen>
 
   <note><para>In some host systems, the following command does not complete
Index: chapter04/creatingminlayout.xml
===================================================================
--- chapter04/creatingminlayout.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter04/creatingminlayout.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -21,13 +21,16 @@
   <systemitem class="username">root</systemitem>:</para>
 
-<screen><userinput>mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}
+<screen><userinput>mkdir -pv $LFS/{boot,etc,var} $LFS/usr/{bin,lib,sbin}
 
 for i in bin lib sbin; do
   ln -sv usr/$i $LFS/$i
-done
+done</userinput></screen>
 
-case $(uname -m) in
-  x86_64) mkdir -pv $LFS/lib64 ;;
-esac</userinput></screen>
+  <para>Some targets (for example, x86_64) needs
+  <filename class="directory">/lib64</filename> directory.  If you are
+  building for one of those targets, create it as
+  <systemitem class="username">root</systemitem>:</para>
+
+<screen><userinput>mkdir -pv $LFS/lib64</userinput></screen>
 
   <para>Programs in <xref linkend="chapter-temporary-tools"/> will be compiled
Index: chapter04/settingenviron.xml
===================================================================
--- chapter04/settingenviron.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter04/settingenviron.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -43,5 +43,5 @@
 LFS=/mnt/lfs
 LC_ALL=POSIX
-LFS_TGT=$(uname -m)-lfs-linux-gnu
+LFS_TGT=<replaceable>x86_64</replaceable>-lfs-linux-gnu
 PATH=/usr/bin
 if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
@@ -104,10 +104,13 @@
 
     <varlistentry>
-      <term><parameter>LFS_TGT=(uname -m)-lfs-linux-gnu</parameter></term>
+      <term><parameter>LFS_TGT=<replaceable>x86_64</replaceable>-lfs-linux-gnu</parameter></term>
       <listitem>
   <para>The <envar>LFS_TGT</envar> variable sets a non-default, but compatible machine
   description for use when building our cross compiler and linker and when cross
   compiling our temporary toolchain. More information is contained in
-  <xref linkend="ch-tools-toolchaintechnotes" role=""/>.</para>
+  <xref linkend="ch-tools-toolchaintechnotes" role=""/>.
+  If you are not building for 64-bit x86, replace
+  <replaceable>x86_64</replaceable> with some value suitable for your target
+  machine, for example <literal>i686</literal> for 32-bit x86.</para>
       </listitem>
     </varlistentry>
Index: chapter05/gcc-pass1.xml
===================================================================
--- chapter05/gcc-pass1.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter05/gcc-pass1.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -63,13 +63,11 @@
 mv -v mpc-&mpc-version; mpc</userinput></screen>
 
-    <para>On x86_64 hosts, set the default directory name for
-    64-bit libraries to <quote>lib</quote>:</para>
-
-<screen><userinput remap="pre">case $(uname -m) in
-  x86_64)
-    sed -e '/m64=/s/lib64/lib/' \
-        -i.orig gcc/config/i386/t-linux64
- ;;
-esac</userinput></screen>
+    <para>For x86_64 target, set the default directory name for
+    64-bit libraries to <quote>lib</quote>.  The command is unnecessary,
+    but harmless for 32-bit x86.  If you are building for another target,
+    you may need to adjust the command for your target.</para>
+
+<screen><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \
+    -i.orig gcc/config/i386/t-linux64</userinput></screen>
 
     <para>The GCC documentation recommends building GCC
Index: chapter05/glibc.xml
===================================================================
--- chapter05/glibc.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter05/glibc.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -46,11 +46,13 @@
     <para>First, create a symbolic link for LSB compliance. Additionally,
     for x86_64, create a compatibility symbolic link required for proper
-    operation of the dynamic library loader:</para>
-
-<screen><userinput remap="pre">case $(uname -m) in
-    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
+    operation of the dynamic library loader.  It's needed to adjust the
+    command if you are building LFS for a target other than 32-bit or
+    64-bit x86.</para>
+
+<screen><userinput remap="pre">case $LFS_TGT in
+    i?86*)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
     ;;
-    x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
-            ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
+    x86_64*) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
+             ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
     ;;
 esac</userinput></screen>
@@ -90,5 +92,5 @@
       --host=$LFS_TGT                    \
       --build=$(../scripts/config.guess) \
-      --enable-kernel=&min-kernel;                \
+      --enable-kernel=&linux-major-version;.&linux-minor-version;               \
       --with-headers=$LFS/usr/include    \
       libc_cv_slibdir=/usr/lib</userinput></screen>
@@ -107,9 +109,11 @@
 
       <varlistentry>
-        <term><parameter>--enable-kernel=&min-kernel;</parameter></term>
-        <listitem>
-          <para>This tells Glibc to compile the library with support
-          for &min-kernel; and later Linux kernels.  Workarounds for older
-          kernels are not enabled.</para>
+        <term><parameter>--enable-kernel=&linux-major-version;.&linux-minor-version;</parameter></term>
+        <listitem>
+          <para>This option tells the build system that this glibc may
+          be used with kernels as old as
+          &linux-major-version;.&linux-minor-version;. This means generating
+          workarounds in case a system call introduced in a later version
+          cannot be used.</para>
         </listitem>
       </varlistentry>
Index: chapter05/linux-headers.xml
===================================================================
--- chapter05/linux-headers.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter05/linux-headers.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -57,7 +57,8 @@
     be available. The headers are first placed in
     <filename class="directory">./usr</filename>, then copied to the needed
-    location.</para>
-
-<screen><userinput remap="make">make headers
+    location.  Replace <replaceable>x86</replaceable> with a value suitable
+    for your target machine if it's not a 32-bit or 64-bit x86:</para>
+
+<screen><userinput remap="make">make headers ARCH=<replaceable>x86</replaceable>
 find usr/include -name '.*' -delete
 rm usr/include/Makefile
Index: chapter06/chapter06.xml
===================================================================
--- chapter06/chapter06.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter06/chapter06.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -32,3 +32,8 @@
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gcc-pass2.xml"/>
 
+  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="util-linux.xml"/>
+  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grub.xml"/>
+  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kernel.xml"/>
+  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grub-cfg.xml"/>
+
 </chapter>
Index: chapter06/gcc-pass2.xml
===================================================================
--- chapter06/gcc-pass2.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter06/gcc-pass2.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -55,12 +55,11 @@
 mv -v mpc-&mpc-version; mpc</userinput></screen>
 
-    <para>If building on x86_64, change the default directory name for 64-bit
-    libraries to <quote>lib</quote>:</para>
+    <para>For x86_64 target, set the default directory name for
+    64-bit libraries to <quote>lib</quote>.  The command is unnecessary,
+    but harmless for 32-bit x86.  If you are building for another target,
+    you may need to adjust the command for your target.</para>
 
-<screen><userinput remap="pre">case $(uname -m) in
-  x86_64)
-    sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
-  ;;
-esac</userinput></screen>
+<screen><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \
+    -i.orig gcc/config/i386/t-linux64</userinput></screen>
 
     <para>Override the building rule of libgcc and libstdc++ headers, to
Index: chapter06/grub-cfg.xml
===================================================================
--- chapter06/grub-cfg.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
+++ chapter06/grub-cfg.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -0,0 +1,216 @@
+<?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-bootable-temp" role="wrap">
+  <?dbhtml filename="grub-cfg.html"?>
+
+  <sect1info condition="script">
+    <productname>grub</productname>
+    <productnumber>&grub-version;</productnumber>
+    <address>&grub-url;</address>
+  </sect1info>
+
+  <title>Making the Temporary System Bootable</title>
+
+  <sect2>
+    <title>Introduction</title>
+
+    <para>In a normal LFS building procedure, we will chroot into the
+    temporary system and continue to build additional temporary tools.
+    But, as we've explained, in the Cross Edition we need to make the
+    temporary system bootable and boot it on the target system.</para>
+  </sect2>
+
+  <sect2>
+    <title>Creating the GRUB Configuration File</title>
+
+    <para>Generate <filename>$LFS/boot/grub/grub.cfg</filename>:</para>
+
+<screen><userinput>mkdir -pv $LFS/boot/grub
+cat &gt; $LFS/boot/grub/grub.cfg &lt;&lt; "EOF"
+<literal># Begin /boot/grub/grub.cfg
+set default=0
+set timeout=5
+
+menuentry "LFS Temporary System" {
+        linux   /vmlinuz root=/dev/sda3 rw init=/bin/bash
+        boot
+}</literal>
+EOF</userinput></screen>
+
+    <variablelist>
+      <title>The meaning of the linux command options:</title>
+
+      <varlistentry>
+        <term><parameter>root=/dev/sda3</parameter></term>
+        <listitem>
+          <para>We will use the third parition as the partition for the
+          root filesystem of the LFS system.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><parameter>rw</parameter></term>
+        <listitem>
+          <para>Tell the kernel to mount the root filesystem read-write.
+          In normal distros there is <parameter>ro</parameter> instead, so
+          the kernel will mount the root filesystem read-only.  Then
+          the <command>init</command> process can check the filesystem
+          integrity and remount it read-write.  For the temporary system
+          it's not needed.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><parameter>init=/bin/bash</parameter></term>
+        <listitem>
+          <para>By default the kernel runs <command>/sbin/init</command>
+          as the first process.  It's provided by SysVinit or Systemd
+          package, which is not installed yet.  We explicitly tell the
+          kernel to run <command>/bin/bash</command> instead to start a
+          shell, so we can run further commands interactively.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>(optional) <parameter>console=ttyS0,115200</parameter></term>
+        <listitem>
+          <para>Use the serial port at <filename>/dev/ttyS0</filename> as
+          the output console device.  It's very useful if the virtual
+          console is not avaliable (for example, the target system may lack
+          graphic output, or the framebuffer console may be too slow).
+          And, by connecting the host system and the target system with a
+          NULL modem or USB serial converter, it will be able to copy the
+          commands from the book and paste it into a terminal emulator
+          (for example,
+          <ulink url='&blfs-book;general/screen.html'>GNU Screen</ulink>)
+          on the host, to execute them on the target system.
+          <parameter>115200</parameter> specifies the baudrate, the default
+          (9600) is too slow for large amount of console output building
+          LFS.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <note><para>From <application>GRUB</application>'s perspective, the
+    kernel files are relative to the partition used.  We will use a
+    a separate /boot partition, so /boot is not needed in the above
+    <emphasis>linux</emphasis> line.
+    </para></note>
+
+   </sect2>
+
+   <sect2>
+     <title>Copy the Temporary System to the Target Machine</title>
+
+     <note>
+       <para>The commands in the subsection must be performed on the host
+       system while logged in as user
+       <systemitem class="username">root</systemitem>
+       and no longer as user <systemitem class="username">lfs</systemitem>.
+       Also, double check that <envar>$LFS</envar> is set in <systemitem
+       class="username">root</systemitem>'s environment.</para>
+     </note>
+
+     <para>Now it's the time to copy the
+     <filename class="directory">$LFS</filename> hierarchy over to your
+     target machine.  You'll need a <quote>moveable</quote> device for this.
+     Using a normal USB stick is likely a bad choice: the USB sticks are
+     generally not optimized for reading or writing many small files
+     (which will happen building packages from source). Especially, if a
+     ext filesystem is used, the performance can be very bad.  You may use
+     a USB to SATA adapter and a HDD or SSD (then you can directly connect
+     it onto the SATA port of the target system, or continuing to use the
+     adapter on a USB port of the target system), or a USB stick with an I/O
+     controller for SSD (these USB sticks are significantly more expansive
+     than a normal one).</para>
+
+     <para>Create a GUID partition table on the device, and then create
+	 three partitions on it. The first will be used as the BIOS boot
+     partition, 1 MB is sufficient enough.  But if you want to use EFI to
+     boot your LFS system later, assign 100 MB for it so it will be possible
+     to convert it into an EFI system partition. The second partition will
+     be used as the boot partition, 500 MB is sufficient enough.  The third
+     will be the root partition, it should be at least 20 GB.</para>
+
+     <para>Create filesystems for the partitions:</para>
+
+<screen><userinput role='nodump'>mkfs.ext4 /dev/<replaceable>sdx</replaceable>2
+mkfs.ext4 /dev/<replaceable>sdx</replaceable>3</userinput></screen>
+
+     <para>
+       It's not needed to create a filesystem for the BIOS boot partition.
+       But, its type should be set to <quote>BIOS boot</quote> in
+       the partition table using <command>fdisk</command>:
+     </para>
+
+<screen role="nodump"><userinput>fdisk /dev/<replaceable>sdx</replaceable></userinput>
+<literal>
+Welcome to fdisk (util-linux &util-linux-version;).
+Changes will remain in memory only, until you decide to write them.
+Be careful before using the write command.
+
+
+Command (m for help): </literal><userinput>t</userinput>
+<literal>Partition number (1-9, default 9): </literal><userinput>1</userinput>
+<literal>Partition type or alias (type L to list all): </literal><userinput>BIOS boot</userinput>
+<literal>Changed type of partition 'Linux' to 'BIOS boot'.
+
+Command (m for help): </literal><userinput>w</userinput>
+<literal>The partition table has been altered.
+Calling ioctl() to re-read partition table.
+Syncing disks.</literal></screen>
+
+     <para>In <xref linkend="ch-tools-cleanup"/> it's optional to make a
+     backup for the temporary system.  If you'd like to do so, prepare
+     another parition (1 GB should be enough) and make an
+     <systemitem class="filesystem">ext4</systemitem> filesystem to hold
+     the backup:</para>
+
+<screen><userinput role='nodump'>mkfs.ext4 /dev/<replaceable>sdx4</replaceable></userinput></screen>
+
+     <para><replaceable>sdx</replaceable> should be replaced with the name
+     of the device node corresponding to your moveable device. Then mount
+     the filesystems:</para>
+
+<screen><userinput role='nodump'>mkdir -pv /mnt/lfs-target
+mount -v -t ext4 /dev/<replaceable>sdx</replaceable>3 /mnt/lfs-target
+mkdir -pv /mnt/lfs-target/boot
+mount -v -t ext4 /dev/<replaceable>sdx</replaceable>2 /mnt/lfs-target/boot</userinput></screen>
+
+     <para>Copy the temporary system onto the device, and change the
+     ownership of the copy to user
+     <systemitem class="username">root</systemitem>:</para>
+
+<screen><userinput role='nodump'>cp -av $LFS/* /mnt/lfs-target
+chown -R root:root /mnt/lfs-target</userinput></screen>
+
+     <para>Install the bootloader onto the device:</para>
+
+<screen><userinput role='nodump'>$LFS/tools/sbin/lfs-grub-install          \
+    --target=i386-pc                      \
+    --boot-directory=/mnt/lfs-target/boot \
+    /dev/<replaceable>sdx</replaceable></userinput></screen>
+
+     <para>Create the mountpoint for
+     <systemitem class="filesystem">devtmpfs</systemitem>, so the kernel
+     will mount it automatically:</para>
+
+<screen><userinput role='nodump'>install -v -dm755 /mnt/lfs-target/dev</userinput></screen>
+
+     <para>Now, unmount the device:</para>
+
+<screen><userinput role='nodump'>umount -Rv /mnt/lfs-target</userinput></screen>
+
+     <para>Now unplug the device and connect it onto the target system,
+     and boot the target system with this device as the boot device.
+     Read the manual from the vendor of the target system to know how to
+     select the boot device.</para>
+
+  </sect2>
+
+</sect1>
Index: chapter06/grub.xml
===================================================================
--- chapter06/grub.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
+++ chapter06/grub.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -0,0 +1,106 @@
+<?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-grub" role="wrap">
+  <?dbhtml filename="grub.html"?>
+
+  <sect1info condition="script">
+    <productname>grub</productname>
+    <productnumber>&grub-version;</productnumber>
+    <address>&grub-url;</address>
+  </sect1info>
+
+  <title>GRUB-&grub-version;</title>
+
+  <indexterm zone="ch-tools-grub">
+    <primary sortas="a-Grub">GRUB</primary>
+    <secondary>tools</secondary>
+  </indexterm>
+
+  <sect2 role="package">
+    <title/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+    href="../chapter08/grub.xml"
+    xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
+
+    <segmentedlist>
+      <segtitle>&buildtime;</segtitle>
+      <segtitle>&diskspace;</segtitle>
+
+      <seglistitem>
+        <seg>&grub-tmp-sbu;</seg>
+        <seg>&grub-tmp-du;</seg>
+      </seglistitem>
+    </segmentedlist>
+
+  </sect2>
+
+  <sect2 role="installation">
+    <title>Installation of GRUB</title>
+
+    <para>Prepare GRUB for compilation:</para>
+
+<screen><userinput remap="configure">./configure --prefix=$LFS/tools               \
+            --build=$(build-aux/config.guess) \
+            --host=$(build-aux/config.guess)  \
+            --target=$LFS_TGT                 \
+            --program-prefix=lfs-             \
+            --disable-werror</userinput></screen>
+
+    <variablelist>
+      <title>The meaning of the new configure options:</title>
+
+      <varlistentry>
+        <term><parameter>--build=..., --host=..., and --target=$LFS_TGT</parameter></term>
+        <listitem>
+          <para>This allows the build to generate GRUB utilities running on
+          the host system, but generating the bootloader files for $LFS_TGT.
+          Then we can use the bootloader files to boot the temporary system
+          on the target machine.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><parameter>--program-prefix=lfs-</parameter></term>
+        <listitem>
+          <para>This ensures that the installed programs have
+          <literal>lfs-</literal> prepended to their names, to better
+          distinguish them from the GRUB installation of the host
+          distro.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><parameter>--disable-werror</parameter></term>
+        <listitem>
+          <para>This allows the build to complete with warnings introduced
+          by more recent Flex versions.</para>
+        </listitem>
+      </varlistentry>
+
+    </variablelist>
+
+    <para>Compile the package:</para>
+
+<screen><userinput remap="make">make</userinput></screen>
+
+    <para>Install the package:</para>
+
+<screen><userinput remap="install">make install</userinput></screen>
+
+  </sect2>
+
+  <sect2 role="content">
+    <title/>
+
+    <para>Details on this package are located in
+    <xref linkend="contents-gRUB" role="."/></para>
+
+  </sect2>
+
+</sect1>
Index: chapter06/kernel.xml
===================================================================
--- chapter06/kernel.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
+++ chapter06/kernel.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -0,0 +1,216 @@
+<?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-kernel" role="wrap">
+  <?dbhtml filename="kernel.html"?>
+
+  <sect1info condition="script">
+    <productname>kernel</productname>
+    <productnumber>&linux-version;</productnumber>
+    <address>&linux-url;</address>
+  </sect1info>
+
+  <title>Linux-&linux-version;</title>
+
+  <indexterm zone="ch-tools-kernel">
+    <primary sortas="a-Linux">Linux</primary>
+    <secondary>tools</secondary>
+  </indexterm>
+
+  <sect2 role="package">
+    <title/>
+
+    <para>The Linux package contains the Linux kernel.</para>
+
+    <segmentedlist>
+      <segtitle>&buildtime;</segtitle>
+      <segtitle>&diskspace;</segtitle>
+
+      <seglistitem>
+        <seg>&linux-tmp-sbu;</seg>
+        <seg>&linux-tmp-du;</seg>
+      </seglistitem>
+    </segmentedlist>
+
+  </sect2>
+
+  <sect2 role="installation">
+    <title>Installation of the kernel</title>
+
+    <para>Building the kernel involves a few steps&mdash;configuration,
+    compilation, and installation. Read the <filename>README</filename> file
+    in the kernel source tree for alternative methods to the way this book
+    configures the kernel.</para>
+
+    <para>Prepare for compilation by running the following command:</para>
+
+<screen><userinput remap="pre">make mrproper</userinput></screen>
+
+    <para>This ensures that the kernel tree is absolutely clean. The
+    kernel team recommends that this command be issued prior to each
+    kernel compilation. Do not rely on the source tree being clean after
+    un-tarring.</para>
+
+    <para>There are several ways to configure the kernel options. Usually,
+    This is done through a menu-driven interface, for example:</para>
+
+<screen role="nodump"><userinput>make ARCH=<replaceable>x86</replaceable> CROSS_COMPILE=$LFS_TGT- menuconfig</userinput></screen>
+
+    <variablelist>
+      <title>The meaning of make environment variables:</title>
+
+      <varlistentry>
+        <term><command>ARCH=x86</command></term>
+        <listitem>
+          <para>Configure the kernel for running on the target machine.
+          Replace <replaceable>x86</replaceable> with a value suitable
+          for your target machine if it's not a 32-bit or 64-bit x86.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><command>CROSS_COMPILE=$LFS_TGT-</command></term>
+        <listitem>
+          <para>Build the kernel with Binutils and GCC built in
+          <xref linkend='chapter-cross-tools'/>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><command>menuconfig</command></term>
+        <listitem>
+          <para>This launches an ncurses menu-driven interface. For other
+          (graphical) interfaces, type <command>make help</command>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>(optional) <parameter>LANG=&lt;host_LANG_value&gt; LC_ALL=</parameter></term>
+        <listitem>
+          <para>This establishes the locale setting to the one used on the
+          host.  This may be needed for a proper menuconfig ncurses interface
+          line drawing on a UTF-8 linux text console.</para>
+
+          <para>If used, be sure to replace
+          <replaceable>&lt;host_LANG_value&gt;</replaceable> by the value of
+          the <envar>$LANG</envar> variable from your host.  You can
+          alternatively use instead the host's value of <envar>$LC_ALL</envar>
+          or <envar>$LC_CTYPE</envar>.</para>
+        </listitem>
+      </varlistentry>
+
+    </variablelist>
+
+    <note>
+    
+      <para>A good starting place for setting up the kernel configuration is to
+      run <command>make ARCH=x86 CROSS_COMPILE=$LFS_TGT- defconfig</command>. This will set the base
+      configuration to a good state that takes your target system architecture
+      into account.</para>
+
+    </note>
+
+      <para>Read <xref linkend='ch-bootable-kernel'/> for more information
+      about kernel configuration.  You should enable or disable some kernel
+      configuration options now:</para>
+
+    <variablelist>
+      <title>Kernel configuration options and explanation:</title>
+
+      <varlistentry>
+        <term>Set <parameter>CONFIG_MODULES=n</parameter></term>
+        <listitem>
+          <para>Modular kernel needs <command>modprobe</command> tool from
+          <application>Kmod</application> to load modules, which is not
+          installed in the temporary system.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>Set <parameter>CONFIG_EXTRA_FIRMWARE="<replaceable>a.bin b.bin</replaceable>"</parameter></term>
+        <listitem>
+          <para>Build firmware blobs into the kernel.  Some drivers may
+          require the firmwares to be in-kernel if the driver is not built
+          as module.</para>
+          <note>
+            <para>
+              The kernel binaries with third-party blobs are not
+              distributable.  If you distribute such a kernel binary to
+              others, you may violate GPL.  It's recommended to remove the
+              temporary kernel image after you've successfully boot your LFS
+              system with the new kernel image, which will be installed in
+              <xref linkend="ch-bootable-kernel"/>.
+            </para>
+          </note>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>Set <parameter>CONFIG_EXTRA_FIRMWARE_DIR="<replaceable>$LFS</replaceable>/lib/firmware"</parameter></term>
+        <listitem>
+          <para>The building system will search
+          <filename class="directory">/lib/firmware</filename> for firmware
+          blobs in <parameter>CONFIG_EXTRA_FIRMWARE</parameter>.  Note that
+          you'll need to install the needed firmwares into
+          <filename class="directory">$LFS/lib/firmware</filename> first,
+          and manually replace <envar>$LFS</envar> with the value in
+          configuration.  The firmwares in
+          <filename class="directory">$LFS/lib/filename</filename> will be
+          copied to the target machine along with the system, so kernel and
+          kernel modules which will be built in
+          <xref linkend="ch-bootable-kernel"/> can load them without
+          <parameter>CONFIG_EXTRA_FIRMWARE</parameter>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>Set <parameter>CONFIG_EXT2=y</parameter>,
+                  <parameter>CONFIG_EXT4=y</parameter>,
+              and <parameter>CONFIG_VFAT_FS=y</parameter></term>
+        <listitem>
+          <para>They are needed to access the filesystems we'll make for the
+          target system.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>
+          Set <parameter>CONFIG_MODULE_SIG=n</parameter>,
+              <parameter>CONFIG_SECURITY=n</parameter>,
+              <parameter>CONFIG_STACK_VALIDATION=n</parameter>,
+              <parameter>CONFIG_SYSTEM_TRUSTED_KEYRING=n</parameter>,
+          and <parameter>CONFIG_SYSTEM_REVOCATION_LIST=n</parameter>
+        </term>
+        <listitem>
+          <para>They are unneeded for the temporary kernel, and they need
+          additional dependencies which may be unavailable on the host
+          distro. You can enable them building the kernel for the final LFS
+          system in Chapter 10 if you need these features.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>Compile the kernel image:</para>
+
+<screen><userinput remap="make">make ARCH=x86 CROSS_COMPILE=$LFS_TGT-</userinput></screen>
+
+    <para>Install the kernel image into the
+    <filename class="directory">$LFS/boot</filename> directory:</para>
+
+  <screen><userinput remap="install">install -vm644 arch/x86/boot/bzImage $LFS/boot/vmlinuz</userinput></screen>
+
+  </sect2>
+
+  <sect2 role="content">
+    <title/>
+
+    <para>Details on this package are located in
+    <xref linkend="contents-kernel" role="."/></para>
+
+  </sect2>
+
+</sect1>
Index: chapter06/util-linux.xml
===================================================================
--- chapter06/util-linux.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
+++ chapter06/util-linux.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -0,0 +1,83 @@
+<?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-mount-setsid" role="wrap">
+  <?dbhtml filename="util-linux.html"?>
+
+  <sect1info condition="script">
+    <productname>util-linux</productname>
+    <productnumber>&util-linux-version;</productnumber>
+    <address>&util-linux-url;</address>
+  </sect1info>
+
+  <title>Programs from Util-linux-&util-linux-version;</title>
+
+  <indexterm zone="ch-tools-mount-setsid">
+    <primary sortas="a-mount-setsid">programs from util-linux</primary>
+    <secondary>tools</secondary>
+  </indexterm>
+
+  <sect2 role="package">
+    <title/>
+
+    <para><command>agetty</command>, <command>mount</command>, and
+    <command>setsid</command> are utilities in
+    <application>Util-Linux</application>.  We need them to
+    set up the environment once we boot the temporary system.</para>
+
+    <segmentedlist>
+      <segtitle>&buildtime;</segtitle>
+      <segtitle>&diskspace;</segtitle>
+
+      <seglistitem>
+        <seg>&mount-setsid-sbu;</seg>
+        <seg>&mount-setsid-du;</seg>
+      </seglistitem>
+    </segmentedlist>
+
+  </sect2>
+
+  <sect2 role="installation">
+    <title>Installation of agetty, setsid and mount</title>
+
+    <para>Prepare Util-linux for compilation:</para>
+
+<screen><userinput remap="configure">./configure --build=$(config/config.guess) --host=$LFS_TGT --disable-shared</userinput></screen>
+
+    <variablelist>
+      <title>The meaning of the configure option:</title>
+
+      <varlistentry>
+        <term><parameter>--disable-shared</parameter></term>
+        <listitem>
+          <para>We do not need to install any of the shared libraries at
+          this time, therefore there is no need to build them.</para>
+        </listitem>
+      </varlistentry>
+
+    </variablelist>
+
+    <para>We only need three tools from the package now, build them:</para>
+
+<screen><userinput remap="make">make agetty mount setsid</userinput></screen>
+
+    <para>Install the tools:</para>
+
+<screen><userinput remap="install">install -vm755 agetty       $LFS/usr/sbin
+install -vm755 mount setsid $LFS/usr/bin</userinput></screen>
+
+  </sect2>
+
+  <sect2 role="content">
+    <title/>
+
+    <para>Details on this package are located in
+    <xref linkend="contents-utillinux" role="."/></para>
+
+  </sect2>
+
+</sect1>
Index: chapter07/chapter07.xml
===================================================================
--- chapter07/chapter07.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter07/chapter07.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -10,8 +10,8 @@
   <?dbhtml filename="chapter07.html"?>
 
-  <title>Entering Chroot and Building Additional Temporary Tools</title>
+  <title>Booting the Target System and Building Additional Temporary Tools</title>
 
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introduction.xml"/>
-  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="changingowner.xml"/>
+  <!--xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="changingowner.xml"/-->
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kernfs.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chroot.xml"/>
@@ -24,4 +24,5 @@
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="texinfo.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="util-linux.xml"/>
+  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="iproute2.xml"/>
 
 <!--
Index: chapter07/chroot.xml
===================================================================
--- chapter07/chroot.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter07/chroot.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -7,29 +7,48 @@
 
 <sect1 id="ch-tools-chroot">
-  <?dbhtml filename="chroot.html"?>
+  <?dbhtml filename="env.html"?>
 
-  <title>Entering the Chroot Environment</title>
+  <title>Setting up the Environment</title>
 
-  <para>Now that all the packages which are required to build the rest of the
-  needed tools are on the system, it is time to enter the chroot environment to
-  finish installing the remaining temporary tools. This environment will be in
-  use also for installing the final system. As user <systemitem
-  class="username">root</systemitem>, run the following command to enter the
-  environment that is, at the moment, populated with only the temporary
-  tools:</para>
+    <para>The standard I/O streams of the initial shell process is connected
+    with <filename>/dev/console</filename>.  However, the testsuite of some
+    packages may expect the standard I/O streams to be connected with a
+    <quote>real</quote> TTY device node.  Spawn a new shell process on the
+    TTY device with <command>agetty</command>:</para>
 
-<screen role="nodump"><userinput>chroot "$LFS" /usr/bin/env -i   \
+<screen role="nodump"><userinput>agetty -n -l /bin/bash <replaceable>tty0</replaceable></userinput></screen>
+
+    <para>If you are working via a serial console, replace
+    <replaceable>tty0</replaceable> with the name of the serial console
+    device node, for example <literal>ttyS0</literal>.</para>
+
+    <para>The command above spawns a new shell process on the TTY device
+    specified in the command, and the initial shell process will run in
+    background as an init process with very limited functions. The new shell
+    process will output:</para>
+
+<screen role="nodump"><computeroutput>bash: cannot set terminal process group (-1): Inappropriate ioctl for device
+bash: no job control in this shell</computeroutput></screen>
+
+    <para>This is normal because the shell is not assigned with a
+    controlling terminal yet.  Now set up controlling terminal and
+    environment variables:</para>
+
+<screen><userinput>exec setsid -c /usr/bin/env -i  \
     HOME=/root                  \
     TERM="$TERM"                \
-    PS1='(lfs chroot) \u:\w\$ ' \
+    PS1='(lfs) \u:\w\$ '        \
     PATH=/usr/bin:/usr/sbin     \
     /bin/bash --login</userinput></screen>
 
+    <para>The command replace the current shell process with a new shell
+    process, with controlling terminal set up.</para>
+
   <para>The <parameter>-i</parameter> option given to the <command>env</command>
-  command will clear all variables of the chroot environment. After that, only
+  command will clear all variables of the environment. After that, only
   the <envar>HOME</envar>, <envar>TERM</envar>, <envar>PS1</envar>, and
   <envar>PATH</envar> variables are set again. The
   <parameter>TERM=$TERM</parameter> construct will set the <envar>TERM</envar>
-  variable inside chroot to the same value as outside chroot. This variable is
+  variable to the default value specified by <command>agetty</command>. This variable is
   needed for programs like <command>vim</command> and <command>less</command>
   to operate properly.  If other variables are desired, such as
@@ -37,13 +56,7 @@
   them again.</para>
 
-  <para>From this point on, there is no need to use the
-  <envar>LFS</envar> variable anymore because all work will be restricted
-  to the LFS file system.  This is because the Bash shell is told that
-  <filename class="directory">$LFS</filename> is now the root
-  (<filename class="directory">/</filename>) directory.</para>
-
   <para>Notice that <filename class="directory">/tools/bin</filename> is not
   in the <envar>PATH</envar>. This means that the cross toolchain will no longer be
-  used in the chroot environment.</para>
+  used on the target machine.</para>
 
   <para>Note that the <command>bash</command> prompt will say
@@ -51,12 +64,17 @@
   <filename>/etc/passwd</filename> file has not been created yet.</para>
 
+  <para>Now set up a temporary hostname, which is required by test suite of
+  some packages:</para>
+
+<screen><userinput>hostname lfs</userinput></screen>
+
   <note>
     <para>It is important that all the commands throughout the remainder of this
-    chapter and the following chapters are run from within the chroot
-    environment. If you leave this environment for any reason (rebooting for
+    chapter and the following chapters are run from within the environment
+    we've set. If you leave this environment for any reason (rebooting for
     example), ensure that the virtual kernel filesystems are mounted as
-    explained in <xref linkend="ch-tools-bindmount"/> and <xref
-    linkend="ch-tools-kernfsmount"/> and enter chroot again before continuing
-    with the installation.</para>
+    explained in <xref linkend="ch-tools-kernfsmount"/> and
+    <xref linkend="ch-tools-devadjust"/> and set up the environment again before
+    continuing with the installation.</para>
   </note>
 
Index: chapter07/cleanup.xml
===================================================================
--- chapter07/cleanup.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter07/cleanup.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -21,6 +21,6 @@
     <para>Second, the libtool .la files are only useful when linking with static
     libraries. They are unneeded and potentially harmful when using dynamic
-    shared libraries, especially when using non-autotools build systems.
-    While still in chroot, remove those files now:</para>
+    shared libraries, specially when using non-autotools build systems.
+    While still on the target machine, remove those files now:</para>
 
 <screen><userinput>find /usr/{lib,libexec} -name \*.la -delete</userinput></screen>
@@ -58,49 +58,13 @@
 
     <para>
-      The following steps are performed from outside the chroot
-      environment. That means, you have to leave the chroot environment
-      first before continuing. The reason for that is to
-      get access to file system locations outside of the chroot
-      environment to store/read the backup archive which should
-      not be placed within the
-      <filename class="directory">$LFS</filename> hierarchy for
-      safety reasons.
+       If you are making a backup, mount the partition for backup:
     </para>
 
-    <para>
-       If you have decided to make a backup, leave the chroot environment:
-    </para>
-
-<screen role="nodump"><userinput>exit</userinput></screen>
-
-    <important>
-      <para>
-        All of the following instructions are executed by
-        <systemitem class="username">root</systemitem> on your host system.
-        Take extra care about the commands you're going to run as mistakes
-        here can modify your host system. Be aware that the
-        environment variable <envar>LFS</envar>
-        is set for user <systemitem class="username">lfs</systemitem> by default
-        but may <emphasis>not</emphasis> be set for
-        <systemitem class="username">root</systemitem>.
-     </para>
-     <para>
-        Whenever commands are to be executed by <systemitem class="username">root</systemitem>,
-        make sure you have set <envar>LFS</envar>.
-     </para>
-     <para>
-        This has been discussed in <xref linkend='ch-partitioning-aboutlfs'/>.
-      </para>
-    </important>
-
-    <para>Before making a backup, unmount the virtual file systems:</para>
-
-<screen role="nodump"><userinput>umount $LFS/dev/pts
-umount $LFS/{sys,proc,run,dev}</userinput></screen>
+<screen role="nodump"><userinput>mount -v /dev/sda<replaceable>4</replaceable> /mnt</userinput></screen>
 
     <para>
       Make sure you have at least 1 GB free disk space (the source tarballs
-      will be included in the backup archive) on the filesystem containing
-      directory where you create the backup archive.
+      will be included in the backup archive) in the partition prepared for
+      backup.
     </para>
 
@@ -128,13 +92,13 @@
     </note>
 
-<screen role="nodump"><userinput>cd $LFS
-tar -cJpf $HOME/lfs-temp-tools-&version;.tar.xz .</userinput></screen>
+<screen role="nodump"><userinput>cd /
+tar -cJpf /mnt/lfs-temp-tools-&version;.tar.xz . \
+    --exclude="dev/*" --exclude="proc/*"
+    --exclude="sys/*" --exclude="run/*"
+    --exclude="mnt/*"</userinput></screen>
 
-    <note>
-      <para>
-        If continuing to chapter 8, don't forget to reenter the chroot
-        environment as explained in the <quote>Important</quote> box below.
-      </para>
-    </note>
+    <para>Unmount the partition containing the backup:</para>
+
+<screen role="nodump"><userinput>umount /mnt</userinput></screen>
 
   </sect2>
@@ -146,36 +110,52 @@
       In case some mistakes have been made and you need to start over, you can
       use this backup to restore the system and save some recovery time.
-      Since the sources are located under
-      <filename class="directory">$LFS</filename>, they are included in the
-      backup archive as well, so they do not need to be downloaded again. After
-      checking that <envar>$LFS</envar> is set properly,
-      restore the backup by executing the following commands:
+      Since the sources are included in the
+      backup archive as well, so they do not need to be downloaded again.
     </para>
+
+    <warning><para>
+      Power off the target system and reconnect the disk containing LFS
+      temporary system to the host for restoring the backup.  It's necessary
+      to avoid overwriting some binaries being used.  Because the package
+      providing <command>shutdown</command> command is not built yet, the
+      system can't be shut down cleanly.  Issue <command>sync</command> to
+      ensure all filesystem writes cached in memory to be really written
+      into the disk, then power off the system physically (for example,
+      unplug the AC cord).
+    </para></warning>
+
+    <para>Mount the LFS partition and the backup partition on
+    <emphasis role="bold">the host system</emphasis>:</para>
 
 <!-- Make the following look different so users don't blindly run the
      restore when they don't need to. -->
 
+<screen role="nodump"><computeroutput>mkdir -pv /mnt/lfs-{target,backup}
+mount -v -t ext4 <replaceable>/dev/sdx</replaceable>3 /mnt/lfs-target
+mount -v -t ext4 <replaceable>/dev/sdx4</replaceable> /mnt/lfs-backup</computeroutput></screen>
+
+
     <warning><para>The following commands are extremely dangerous.  If
     you run <command>rm -rf ./*</command> as the &root; user and you
-    do not change to the $LFS directory or the <envar>LFS</envar>
-    environment variable is not set for the &root; user, it will destroy
-    your entire host system.  YOU ARE WARNED.</para></warning>
+    do not change to the <filename>lfs-target</filename> directory,
+    it will destroy your entire host system.
+    YOU ARE WARNED.</para></warning>
 
-<screen role="nodump"><computeroutput>cd $LFS
+<screen role="nodump"><computeroutput>cd /mnt/lfs-target
 rm -rf ./*
-tar -xpf $HOME/lfs-temp-tools-&version;.tar.xz</computeroutput></screen>
+tar -xpf /mnt/lfs-backup/lfs-temp-tools-&version;.tar.xz</computeroutput></screen>
 
     <para>
-       Again, double check that the environment has been setup properly
-       and continue building the rest of the system.
+       Again, unmount the two partitions, reconnect the device to the target
+       machine, boot it and continue building the rest of system:
     </para>
+
+<screen role="nodump"><computeroutput>umount /mnt/lfs-{target,backup}</computeroutput></screen>
 
     <important>
       <para>
-         If you left the chroot environment to create a backup or restart
-         building using a restore, remember to check that the virtual
-         filesystems are still mounted (<command>findmnt | grep
-         $LFS</command>).  If they are not mounted, remount them now as
-         described in <xref linkend='ch-tools-kernfs'/> and re-enter the chroot
+         If you reboot your target machine and restart
+         building using a restore, remount the virtual filesystems now as
+         described in <xref linkend='ch-tools-kernfs'/> and re-enter the build
          environment (see <xref linkend='ch-tools-chroot'/>) before continuing.
        </para>
Index: chapter07/introduction.xml
===================================================================
--- chapter07/introduction.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter07/introduction.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -11,22 +11,31 @@
   <title>Introduction</title>
 
+  <warning>
+    <para>Please make sure the temporary system is already booted on the
+    target machine.  All commands in this chapter and the following chapters
+    should be executed on the target machine instead of the host distro,
+    unless the book explicitly says a command is for the host.  Running a
+    command for the temporary system on the host can completely destroy the
+    host distro.</para>
+  </warning>
+
   <para>This chapter shows how to build the last missing bits of the temporary
   system: the tools needed by the build machinery of various packages.  Now
-  that all circular dependencies have been resolved, a <quote>chroot</quote>
-  environment, completely isolated from the host operating system (except for
-  the running kernel), can be used for the build.</para>
+  that all circular dependencies have been resolved and the temporary system
+  is already bootable, we can boot it on the target machine and it would be
+  completely isolated from the host operating system.  Then we can continue
+  to build on the target machine.</para>
 
-  <para>For proper operation of the isolated environment, some communication
+  <para>For proper operation of the temporary system, some communication
   with the running kernel must be established. This is done through the
   so-called <emphasis>Virtual Kernel File Systems</emphasis>, which must be
-  mounted when entering the chroot environment. You may want to check
-  that they are mounted by issuing <command>findmnt</command>.</para>
+  mounted as soon as possible after boot. You may want to check
+  that they are mounted by issuing <command>mount</command>.</para>
 
-  <para>Until <xref linkend="ch-tools-chroot"/>, the commands must be
-  run as <systemitem class="username">root</systemitem>, with the
-  <envar>LFS</envar> variable set. After entering chroot, all commands
-  are run as &root;, fortunately without access to the OS of the computer
-  you built LFS on. Be careful anyway, as it is easy to destroy the whole
-  LFS system with badly formed commands.</para>
+  <para>All commands in this and following chapters are run as &root; on the
+  target system, fortunately without access to the host system.
+  Be careful anyway, as if the storage devices of your target system already
+  contain some important data, it's possible to destroy them with badly
+  formed commands.</para>
 
 </sect1>
Index: chapter07/iproute2.xml
===================================================================
--- chapter07/iproute2.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
+++ chapter07/iproute2.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -0,0 +1,93 @@
+<?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-lo" role="wrap">
+  <?dbhtml filename="lo-iface.html"?>
+
+  <sect1info condition="script">
+    <productname>iproute2</productname>
+    <productnumber>&iproute2-version;</productnumber>
+    <address>&iproute2-url;</address>
+  </sect1info>
+
+  <title>Setting Up Loopback Network Interface with IPRoute-&iproute2-version;</title>
+
+  <indexterm zone="ch-tools-lo">
+    <primary sortas="a-IPRoute2">IPRoute2</primary>
+    <secondary>tools</secondary>
+  </indexterm>
+
+  <sect2 role="package">
+    <title/>
+
+    <para>The IPRoute2 package contains programs for basic and advanced IPV4-based
+    networking. Now we need <command>ip</command> from it to bring up
+    loopback network interface, which is expected by the testsuites of
+    various packages.</para>
+
+    <segmentedlist>
+      <segtitle>&buildtime;</segtitle>
+      <segtitle>&diskspace;</segtitle>
+
+      <seglistitem>
+        <seg>&iproute2-tmp-sbu;</seg>
+        <seg>&iproute2-tmp-du;</seg>
+      </seglistitem>
+    </segmentedlist>
+
+  </sect2>
+
+  <sect2 role="installation">
+    <title>Use IPRoute2 to Set Up Loopback Network Interface</title>
+
+    <para>IPRoute2 package has several dependencies not installed yet, but
+    we only need <command>ip</command> utility from the package now.
+    Disable the build of other utilities:</para>
+
+<screen><userinput remap="pre">sed '/SUBDIRS/s/=.*/=lib ip/' -i Makefile</userinput></screen>
+
+    <para>Compile the package:</para>
+
+<screen><userinput remap="make">PKG_CONFIG=false make</userinput></screen>
+
+    <variablelist>
+      <title>The meaning of the environment variable:</title>
+
+      <varlistentry>
+        <term><parameter>PKG_CONFIG=false</parameter></term>
+        <listitem>
+          <para>The building system attempts to find dependencies with
+          <command>pkg-config</command>, which is not installed yet.
+          We can override it since <command>ip</command> utility does not
+          need these dependencies.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>It's not needed to install the <command>ip</command> utility now.
+    Just bring up the loopback interface:</para>
+
+<screen><userinput remap="install">ip/ip link set lo up</userinput></screen>
+
+    <para>Verify the result:</para>
+
+<screen><userinput remap="install">ip/ip addr</userinput></screen>
+
+    <para>The command above should show <literal>127.0.0.1/8</literal>
+    as the IPv4 address of <literal>lo</literal>, and
+    <literal>::1/128</literal> as the IPv6 address.</para>
+
+  </sect2>
+
+  <sect2 role="content">
+    <title/>
+
+    <para>Details on this package are located in <xref linkend="contents-iproute2" role="."/></para>
+
+  </sect2>
+
+</sect1>
Index: chapter07/kernfs.xml
===================================================================
--- chapter07/kernfs.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter07/kernfs.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -23,38 +23,20 @@
     mounted:</para>
 
-<screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen>
-
-  <sect2 id="ch-tools-bindmount">
-    <title>Mounting and Populating /dev</title>
-
-      <para>During a normal boot, the kernel automatically mounts the
-      <systemitem class="filesystem">devtmpfs</systemitem> filesystem on the
-      <filename class="directory">/dev</filename> directory, and allow the
-      devices to be created dynamically on that virtual filesystem as they
-      are detected or accessed. Device creation is generally done during the
-      boot process by the kernel and Udev.
-      Since this new system does not yet have Udev and
-      has not yet been booted, it is necessary to mount and populate
-      <filename class="directory">/dev</filename> manually. This is
-      accomplished by bind mounting the host system's
-      <filename class="directory">/dev</filename> directory. A bind mount is
-      a special type of mount that allows you to create a mirror of a
-      directory or mount point to some other location. Use the following
-      command to achieve this:</para>
-
-<screen><userinput>mount -v --bind /dev $LFS/dev</userinput></screen>
-
-  </sect2>
+<screen><userinput>mkdir -pv /{proc,sys,run}</userinput></screen>
 
   <sect2 id="ch-tools-kernfsmount">
     <title>Mounting Virtual Kernel File Systems</title>
 
-      <para>Now mount the remaining virtual kernel filesystems:</para>
+    <para>The kernel has already mounted
+    <systemitem class="filesystem">devtmpfs</systemitem>.
+    Mount the remaining virtual kernel filesystems:</para>
 
-<screen><userinput>mount -v --bind /dev/pts $LFS/dev/pts
-mount -vt proc proc $LFS/proc
-mount -vt sysfs sysfs $LFS/sys
-mount -vt tmpfs tmpfs $LFS/run</userinput></screen>
-<!--
+<screen><userinput>mkdir -pv /dev/{pts,shm}
+mount -vt devpts /dev/pts /dev/pts -o gid=5,mode=620
+mount -vt proc  proc  /proc
+mount -vt sysfs sysfs /sys
+mount -vt tmpfs tmpfs /run
+mount -vt tmpfs tmpfs /dev/shm</userinput></screen>
+
     <variablelist>
       <title>The meaning of the mount options for devpts:</title>
@@ -84,13 +66,23 @@
 
     </variablelist>
--->
-      <para>In some host systems, <filename>/dev/shm</filename> is a
-      symbolic link to <filename class="directory">/run/shm</filename>.
-      The /run tmpfs was mounted above so in this case only a
-      directory needs to be created.</para>
 
-<screen><userinput>if [ -h $LFS/dev/shm ]; then
-  mkdir -pv $LFS/$(readlink $LFS/dev/shm)
-fi</userinput></screen>
+  </sect2>
+
+  <sect2 id="ch-tools-devadjust">
+    <title>Adjusting devtmpfs</title>
+
+    <para>Now <systemitem class='filesystem'>proc</systemitem> filesystem
+    is mounted, we can replace the device nodes for standard I/O streams
+    with symlinks to pseudo files in
+    <filename class="directory">/proc/self/fd</filename> (which are symlinks
+    to the files connected to the standard I/O streams for the current
+    process).  And, create another symlink recommended by the kernel
+    documentation.  These are necessary for I/O redirection in the building
+    system of some packages to function properly:</para>
+
+<screen><userinput>ln -sfv /proc/self/fd/0 /dev/stdin
+ln -sfv /proc/self/fd/1 /dev/stdout
+ln -sfv /proc/self/fd/2 /dev/stderr
+ln -sv  /proc/self/fd   /dev</userinput></screen>
 
   </sect2>
Index: chapter08/coreutils.xml
===================================================================
--- chapter08/coreutils.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter08/coreutils.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -110,5 +110,10 @@
     meant to be run as user <systemitem class="username">root</systemitem>:</para>
 
-<screen><userinput remap="test">make NON_ROOT_USERNAME=tester check-root</userinput></screen>
+    <!-- CLFS note: "su -c" to set the supplementary group IDs.
+         For a normal LFS build, they are already set by 'login' or 'su'.
+         But for CLFS there is no such tool available at the beginning of
+         chapter 7.  Currently coreutils is the only package of which the
+         test suite needs the supplementary GIDs set up.  -->
+<screen><userinput remap="test">su -c 'make NON_ROOT_USERNAME=tester check-root'</userinput></screen>
 
     <para>We're going to run the remainder of the tests as the
Index: chapter08/gcc.xml
===================================================================
--- chapter08/gcc.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter08/gcc.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -50,13 +50,11 @@
     -i libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp</userinput></screen>
 -->
-    <para>If building on x86_64, change the default directory name for 64-bit
-    libraries to <quote>lib</quote>:</para>
-
-<screen><userinput remap="pre">case $(uname -m) in
-  x86_64)
-    sed -e '/m64=/s/lib64/lib/' \
-        -i.orig gcc/config/i386/t-linux64
-  ;;
-esac</userinput></screen>
+    <para>For x86_64 target, set the default directory name for
+    64-bit libraries to <quote>lib</quote>.  The command is unnecessary,
+    but harmless for 32-bit x86.  If you are building for another target,
+    you may need to adjust the command for your target.</para>
+
+<screen><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \
+    -i.orig gcc/config/i386/t-linux64</userinput></screen>
 
     <para>The GCC documentation recommends building GCC in a dedicated build directory:</para>
Index: chapter08/glibc.xml
===================================================================
--- chapter08/glibc.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter08/glibc.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -73,5 +73,5 @@
 <screen><userinput remap="configure">../configure --prefix=/usr                            \
              --disable-werror                         \
-             --enable-kernel=&min-kernel;                      \
+             --enable-kernel=&linux-major-version;.&linux-minor-version;                     \
              --enable-stack-protector=strong          \
              --with-headers=/usr/include              \
@@ -90,8 +90,9 @@
 
       <varlistentry>
-        <term><parameter>--enable-kernel=&min-kernel;</parameter></term>
+        <term><parameter>--enable-kernel=&linux-major-version;.&linux-minor-version;</parameter></term>
         <listitem>
           <para>This option tells the build system that this glibc may
-          be used with kernels as old as &min-kernel;. This means generating
+          be used with kernels as old as
+          &linux-major-version;.&linux-minor-version;. This means generating
           workarounds in case a system call introduced in a later version
           cannot be used.</para>
Index: chapter10/fstab.xml
===================================================================
--- chapter10/fstab.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter10/fstab.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -26,6 +26,6 @@
 #                                                              order
 
-/dev/<replaceable>&lt;xxx&gt;</replaceable>     /            <replaceable>&lt;fff&gt;</replaceable>    defaults            1     1
-/dev/<replaceable>&lt;yyy&gt;</replaceable>     swap         swap     pri=1               0     0
+/dev/<replaceable>sda</replaceable>3      /            ext4     defaults            1     1
+/dev/<replaceable>sda</replaceable>2      /boot        ext4     defaults            0     2
 proc           /proc        proc     nosuid,noexec,nodev 0     0
 sysfs          /sys         sysfs    nosuid,noexec,nodev 0     0
@@ -43,16 +43,12 @@
 #                                                              order
 
-/dev/<replaceable>&lt;xxx&gt;</replaceable>     /            <replaceable>&lt;fff&gt;</replaceable>    defaults            1     1
-/dev/<replaceable>&lt;yyy&gt;</replaceable>     swap         swap     pri=1               0     0
+/dev/<replaceable>sda</replaceable>3      /            ext4     defaults            1     1
+/dev/<replaceable>sda</replaceable>2      /boot        ext4     defaults            0     2
 
 # End /etc/fstab</literal>
 EOF</userinput></screen>
 
-  <para>Replace <replaceable>&lt;xxx&gt;</replaceable>,
-  <replaceable>&lt;yyy&gt;</replaceable>, and <replaceable>&lt;fff&gt;</replaceable>
-  with the values appropriate for the system, for example, <filename
-  class="partition">sda2</filename>, <filename
-  class="partition">sda5</filename>, and <systemitem
-  class="filesystem">ext4</systemitem>. For details on the six
+  <para>Replace <replaceable>sda</replaceable> to the name of the device
+  node for your disk where LFS is being built.  For details on the six
   fields in this file, see <command>man 5 fstab</command>.</para>
 
Index: chapter10/grub.xml
===================================================================
--- chapter10/grub.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter10/grub.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -77,24 +77,10 @@
     is /boot/grub/.</para>
 
-    <para>The location of the boot partition is a choice of the user that
-    affects the configuration.  One recommendation is to have a separate small
-    (suggested size is 200 MB) partition just for boot information.  That way
-    each build, whether LFS or some commercial distro, can access the same boot
-    files and access can be made from any booted system.  If you choose to do
-    this, you will need to mount the separate partition, move all files in the
-    current <filename class="directory">/boot</filename> directory (e.g. the
-    linux kernel you just built in the previous section) to the new partition.
-    You will then need to unmount the partition and remount it as <filename
-    class="directory">/boot</filename>.  If you do this, be sure to update
-    <filename>/etc/fstab</filename>.</para>
-
-    <para>Using the current lfs partition will also work, but configuration
-    for multiple systems is more difficult.</para>
-
-    <para>Using the above information, determine the appropriate
-    designator for the root partition (or boot partition, if a separate
-    one is used). For the following example, it is assumed that the root
-    (or separate boot) partition is <filename
-    class="partition">sda2</filename>.</para>
+    <para>For the following example, it is assumed that the root
+    partition is <filename class="partition">sda3</filename>, and the
+    seperate boot partition is
+    <filename class="partition">sda2</filename>.  Replace
+    <replaceable>sda</replaceable> to the name of the device node for your
+    disk where LFS is being built.</para>
 
     <para>Install the GRUB files into <filename
@@ -145,5 +131,5 @@
 
 menuentry "GNU/Linux, Linux &linux-version;-lfs-&version;" {
-        linux   /boot/vmlinuz-&linux-version;-lfs-&version; root=/dev/sda2 ro
+        linux   /vmlinuz-&linux-version;-lfs-&version; root=/dev/sda3 ro
 }</literal>
 EOF</userinput></screen>
Index: chapter10/kernel.xml
===================================================================
--- chapter10/kernel.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter10/kernel.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -262,10 +262,13 @@
 
     <caution>
-      <para>If the host system has a separate /boot partition, the files copied
-      below should go there. The easiest way to do that is to bind /boot on the
-      host (outside chroot) to /mnt/lfs/boot before proceeding.  As the
-      &root; user in the <emphasis>host system</emphasis>:</para>
-
-<screen role="nodump"><userinput>mount --bind /boot /mnt/lfs/boot</userinput></screen>
+      <para>As the cross-built LFS system has a separate /boot partition,
+      the files copied below should go there. The easiest way to do that is
+      to mount <filename class="directory">/boot</filename> before
+      proceeding.  As the &root; user:</para>
+
+<screen role="nodump"><userinput>mount /boot</userinput></screen>
+
+      <para>We don't need to specify the path to the device node, as it's
+      already given in <filename>/etc/fstab</filename>.</para>
     </caution>
 
Index: chapter11/reboot.xml
===================================================================
--- chapter11/reboot.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ chapter11/reboot.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -82,35 +82,21 @@
 
   <para>Now that we have said that, let's move on to booting our shiny new LFS
-  installation for the first time! First exit from the chroot environment:</para>
+  installation for the first time!</para>
 
-<screen><userinput>logout</userinput></screen>
-<!-- We need to show the user the details...
-  <para>Unmount the LFS file system hierarchy:</para>
+  <para>Unmount the boot partition:</para>
 
-<screen><userinput>umount -Rv $LFS</userinput></screen>
--->
+<screen role="nodump"><userinput>umount /boot</userinput></screen>
 
-  <para>Then unmount the virtual file systems:</para>
+  <para>Synchronize cached writes to prevent data loss on reboot without a
+  fully functional <command>init</command> process:</para>
 
-<screen><userinput>umount -v $LFS/dev/pts
-umount -v $LFS/dev
-umount -v $LFS/run
-umount -v $LFS/proc
-umount -v $LFS/sys</userinput></screen>
-
-  <para>If multiple partitions were created, unmount the other
-  partitions before unmounting the main one, like this:</para>
-
-<screen role="nodump"><userinput>umount -v $LFS/usr
-umount -v $LFS/home
-umount -v $LFS</userinput></screen>
-
-  <para>Unmount the LFS file system itself:</para>
-
-<screen role="nodump"><userinput>umount -v $LFS</userinput></screen>
+<screen role="nodump"><userinput>sync</userinput></screen>
 
   <para>Now, reboot the system with:</para>
 
-<screen role="nodump"><userinput>shutdown -r now</userinput></screen>
+<screen role="nodump"><userinput>reboot -ff</userinput></screen>
+
+  <para><parameter>-ff</parameter> option allows to reboot the system
+  without support from the <command>init</command> process.</para>
 
   <para>Assuming the GRUB boot loader was set up as outlined earlier, the menu
Index: git-version.sh
===================================================================
--- git-version.sh	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ git-version.sh	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -50,6 +50,6 @@
 sha="$(git describe --abbrev=1)"
 rev=$(echo "$sha" | sed 's/-g[^-]*$//')
-version="$rev"
-versiond="$rev-systemd"
+version="cross-$rev"
+versiond="cross-$rev-systemd"
 
 if [ "$(git diff HEAD | wc -l)" != "0" ]; then
Index: packages.ent
===================================================================
--- packages.ent	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ packages.ent	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -310,4 +310,6 @@
 <!ENTITY grub-fin-du "158 MB">
 <!ENTITY grub-fin-sbu "0.7 SBU">
+<!ENTITY grub-tmp-du "158 MB">
+<!ENTITY grub-tmp-sbu "0.7 SBU">
 
 <!ENTITY gzip-version "1.12">
@@ -353,4 +355,6 @@
 <!ENTITY iproute2-fin-du "15 MB">
 <!ENTITY iproute2-fin-sbu "0.2 SBU">
+<!ENTITY iproute2-tmp-du "15 MB">
+<!ENTITY iproute2-tmp-sbu "less than 0.1 SBU">
 
 <!ENTITY jinja2-version "3.1.2">
@@ -440,4 +444,6 @@
 <!ENTITY linux-knl-du "1200 - 8800 MB (typically about 1700 MB)">
 <!ENTITY linux-knl-sbu "1.5 - 130.0 SBU (typically about 12 SBU)">
+<!ENTITY linux-tmp-du "1200 MB">
+<!ENTITY linux-tmp-sbu "1.5 SBU">
 
 <!ENTITY linux-headers-tmp-du "1.2 GB">
@@ -720,4 +726,6 @@
 <!ENTITY util-linux-fin-du "261 MB">
 <!ENTITY util-linux-fin-sbu "1.1 SBU">
+<!ENTITY mount-setsid-du "85 MB">
+<!ENTITY mount-setsid-sbu "less than 0.1 SBU">
 
 <!ENTITY vim-version "8.2.4814">
Index: prologue/architecture.xml
===================================================================
--- prologue/architecture.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ prologue/architecture.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -13,11 +13,6 @@
 <para>The primary target architectures of LFS are the AMD/Intel x86 (32-bit)
 and x86_64 (64-bit) CPUs.  On the other hand, the instructions in this book are
-also known to work, with some modifications, with the Power PC and ARM CPUs. To
-build a system that utilizes one of these CPUs, the main prerequisite, in
-addition to those on the next page, is an existing Linux system such as an
-earlier LFS installation, Ubuntu, Red Hat/Fedora, SuSE, or other distribution
-that targets the architecture that you have. Also note that a 32-bit
-distribution can be installed and used as a host system on a 64-bit AMD/Intel
-computer.</para>
+also known to work, with some modifications, with the Power PC and ARM
+CPUs.</para>
 
 <para>For building LFS, the gain of building on a 64-bit system
Index: prologue/cross.xml
===================================================================
--- prologue/cross.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
+++ prologue/cross.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -0,0 +1,65 @@
+<?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="pre-cross">
+  <?dbhtml filename="cross.html"?>
+
+  <title>About the Cross Edition</title>
+
+  <para>While LFS has provided an approach to build a Linux system entirely
+  from source code, it builds the LFS system in a
+  <emphasis>chroot</emphasis> environment.  The chroot environment is almost
+  seperate from the host distribution, but it still relies on the hardware
+  and Linux kernel from the host system.</para>
+
+  <para>The Cross Edition contains modification to the LFS book, allowing
+  to boot the temporary system instead of chroot.  So it's possible to
+  bootstrap a Linux system for a target where no Linux distribution exists.
+  And, the kernel ABI may frequently change at the early stage porting Linux
+  to a new hardware.  The modification in this edition completely removes
+  the dependency on the kernel from the host distribution, allowing to
+  rebuild the entire system with a new kernel ABI.</para>
+
+  <para>If you already have a Linux distribution running on the hardware
+  where you need a Linux From Scratch system, with the kernel ABI you want,
+  and it's compatible with the Host System Requirements specified by the
+  LFS book, it's likely you should read the original LFS book instead of
+  this edition.</para>
+
+  <para>This edition contains instructions to bootstrap a Linux system for
+  x86 (32-bit or 64-bit).  It may looks irrational because it's easy to
+  find a host distribution for x86, but this edition can be a start point
+  where you can further modify the instruction for other hardware.</para>
+
+  <sect2>
+    <title>History of Cross LFS</title>
+
+    <para>A project named <emphasis>Cross Linux From Scratch</emphasis>
+    was forked from LFS in 2006, by Joe Ciccone, Jim Gifford, and
+    Ryan Oliver.  It has been inactive since 2017.  Its history can still
+    be explored at <ulink url='https://trac.clfs.org/'/>.</para>
+
+    <para>In 2020, Pierre Labastie modified the LFS book to cross-compile
+    the temporary packages before entering the chroot environment.  The main
+    purpose of this approach was to fix multiple issues found by Iterative
+    Comparision Analysis.  With Pierre's work, the only change needed by
+    this edition is basically <quote>to reboot instead of chroot</quote>.
+    However, some additional steps is needed to make the system bootable
+    at the end of Chapter 6, and setting up an environment suitable for
+    building and test packages at the start of Chapter 7.  Then this Cross
+    Edition is created to demonstrate these steps.</para>
+
+    <para>Unlike the legacy CLFS project, in the Cross Edition we don't
+    build any package containing an <command>init</command> process for the
+    temporary system to boot on the target machine.  The temporary system
+    is booted with a shell running as PID 1, and some necessary jobs of a
+    normal <command>init</command> process are manually done with commands.
+    This minimizes the difference from the main LFS book, and also helpful
+    to learn the initialization steps booting a Linux system.</para>
+  </sect2>
+
+</sect1>
Index: prologue/preface.xml
===================================================================
--- prologue/preface.xml	(revision 3d722b94dc186e70937053c47c368102a7902d61)
+++ prologue/preface.xml	(revision 100ca4e3cb3254570ebdb514c4849e533545b531)
@@ -16,4 +16,5 @@
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="architecture.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="prerequisites.xml"/>
+  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="cross.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="standards.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="why.xml"/>
