aboutsummaryrefslogtreecommitdiffstats
path: root/chapter06
diff options
context:
space:
mode:
Diffstat (limited to 'chapter06')
-rw-r--r--chapter06/aboutdebug.xml41
-rw-r--r--chapter06/autoconf.xml101
-rw-r--r--chapter06/automake.xml173
-rw-r--r--chapter06/bash.xml73
-rw-r--r--chapter06/binutils.xml230
-rw-r--r--chapter06/bison.xml54
-rw-r--r--chapter06/bzip2.xml140
-rw-r--r--chapter06/changingowner.xml28
-rw-r--r--chapter06/chroot.xml46
-rw-r--r--chapter06/coreutils.xml785
-rw-r--r--chapter06/createfiles.xml6
-rw-r--r--chapter06/creatingdirs.xml37
-rw-r--r--chapter06/devices.xml47
-rw-r--r--chapter06/diffutils.xml55
-rw-r--r--chapter06/e2fsprogs.xml330
-rw-r--r--chapter06/file.xml40
-rw-r--r--chapter06/findutils.xml90
-rw-r--r--chapter06/flex.xml78
-rw-r--r--chapter06/gawk.xml86
-rw-r--r--chapter06/gcc.xml162
-rw-r--r--chapter06/gettext.xml266
-rw-r--r--chapter06/glibc.xml587
-rw-r--r--chapter06/grep.xml44
-rw-r--r--chapter06/groff.xml327
-rw-r--r--chapter06/grub.xml81
-rw-r--r--chapter06/gzip.xml142
-rw-r--r--chapter06/hotplug.xml126
-rw-r--r--chapter06/iana-etc.xml39
-rw-r--r--chapter06/inetutils.xml136
-rw-r--r--chapter06/introduction.xml61
-rw-r--r--chapter06/iproute2.xml253
-rw-r--r--chapter06/kbd.xml248
-rw-r--r--chapter06/kernfs.xml21
-rw-r--r--chapter06/less.xml57
-rw-r--r--chapter06/libol.xml39
-rw-r--r--chapter06/libtool.xml45
-rw-r--r--chapter06/linux-libc-headers.xml37
-rw-r--r--chapter06/m4.xml35
-rw-r--r--chapter06/make.xml29
-rw-r--r--chapter06/man-pages.xml26
-rw-r--r--chapter06/man.xml135
-rw-r--r--chapter06/mktemp.xml55
-rw-r--r--chapter06/module-init-tools.xml120
-rw-r--r--chapter06/ncurses.xml162
-rw-r--r--chapter06/patch.xml37
-rw-r--r--chapter06/perl.xml280
-rw-r--r--chapter06/procps.xml158
-rw-r--r--chapter06/psmisc.xml82
-rw-r--r--chapter06/pwdgroup.xml60
-rw-r--r--chapter06/readjusting.xml84
-rw-r--r--chapter06/readline.xml66
-rw-r--r--chapter06/revisedchroot.xml29
-rw-r--r--chapter06/sed.xml28
-rw-r--r--chapter06/shadow.xml354
-rw-r--r--chapter06/strippingagain.xml38
-rw-r--r--chapter06/syslogng.xml39
-rw-r--r--chapter06/sysvinit.xml191
-rw-r--r--chapter06/tar.xml37
-rw-r--r--chapter06/texinfo.xml99
-rw-r--r--chapter06/udev.xml105
-rw-r--r--chapter06/util-linux.xml572
-rw-r--r--chapter06/vim.xml283
-rw-r--r--chapter06/zlib.xml45
63 files changed, 7911 insertions, 349 deletions
diff --git a/chapter06/aboutdebug.xml b/chapter06/aboutdebug.xml
index f0ac8956f..7ef47d71c 100644
--- a/chapter06/aboutdebug.xml
+++ b/chapter06/aboutdebug.xml
@@ -7,6 +7,45 @@
<title>About Debugging Symbols</title>
<?dbhtml filename="aboutdebug.html"?>
-<para>See testing</para>
+<para>Most programs and libraries are, by default, compiled with
+debugging symbols included (with <command>gcc</command>'s
+<parameter>-g</parameter> option). This means that when debugging a
+program or library that was compiled with debugging information
+included, the debugger can provide not only memory addresses, but also
+the names of the routines and variables.</para>
+
+<para>However, the inclusion of these debugging symbols enlarges a
+program or library significantly. The following is an example of the
+amount of space these symbols occupy:</para>
+
+<itemizedlist>
+
+<listitem><para>a bash binary
+with debugging symbols: 1200 KB</para></listitem>
+
+<listitem><para>a bash binary
+without debugging symbols: 480 KB</para></listitem>
+
+<listitem><para>Glibc and GCC files (<filename class="directory">/lib</filename>
+and <filename class="directory">/usr/lib</filename>)
+with debugging symbols: 87 MB</para></listitem>
+
+<listitem><para>Glibc and GCC files
+without debugging symbols: 16 MB</para></listitem>
+
+</itemizedlist>
+
+<para>Sizes may vary depending on which compiler and C
+library were used, but when comparing programs with and without debugging
+symbols, the difference will usually be a factor between two and
+five.</para>
+
+<para>Because most users will never use a debugger on their system
+software, a lot of disk space can be regained by removing these
+symbols. The next section shows how to strip all debugging symbols
+from the programs and libraries. Additional information on system
+optimization can be found at <ulink url="&hints-root;optimization.txt"><phrase
+condition="pdf">&hints-root; optimization.txt</phrase></ulink>.</para>
</sect1>
+
diff --git a/chapter06/autoconf.xml b/chapter06/autoconf.xml
index ad766f602..790d1408b 100644
--- a/chapter06/autoconf.xml
+++ b/chapter06/autoconf.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-autoconf" xreflabel="Autoconf" role="wrap">
+<sect1 id="ch-system-autoconf" role="wrap">
<title>Autoconf-&autoconf-version;</title>
<?dbhtml filename="autoconf.html"?>
<indexterm zone="ch-system-autoconf"><primary sortas="a-Autoconf">Autoconf</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Autoconf package contains programs for producing shell scripts that
+can automatically configure source code.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,11 @@
<seglistitem><seg>0.5 SBU</seg><seg>7.7 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Autoconf installation depends on</segtitle>
+<seglistitem><seg>Bash, Coreutils, Diffutils, Grep,
+M4, Make, Perl, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -31,7 +38,7 @@
<screen><userinput>make</userinput></screen>
<para>To test the results, issue:
-<userinput>make check</userinput></para>
+<userinput>make check</userinput>. This takes a long time, about 2 SBUs.</para>
<para>Install the package:</para>
@@ -39,11 +46,97 @@
</sect2>
-
<sect2 id="contents-autoconf" role="content"><title>Contents of Autoconf</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>autoconf, autoheader, autom4te,
+autoreconf, autoscan, autoupdate, and ifnames</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="autoconf">
+<term><command>autoconf</command></term>
+<listitem>
+<para>Produces shell scripts that automatically
+configure software source code packages to adapt to many kinds of
+Unix-like systems. The configuration scripts it produces are
+independent&mdash;running them does not require the <command>autoconf</command> program.</para>
+<indexterm zone="ch-system-autoconf autoconf"><primary sortas="b-autoconf">autoconf</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="autoheader">
+<term><command>autoheader</command> </term>
+<listitem>
+<para>A tool for creating template files of C
+<emphasis>#define</emphasis> statements for configure to use</para>
+<indexterm zone="ch-system-autoconf autoheader"><primary sortas="b-autoheader">autoheader</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="autom4te">
+<term><command>autom4te</command></term>
+<listitem>
+<para>A wrapper for the M4 macro processor</para>
+<indexterm zone="ch-system-autoconf autom4te"><primary sortas="b-autom4te">autom4te</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="autoreconf">
+<term><command>autoreconf</command></term>
+<listitem>
+<para>Automatically runs <command>autoconf</command>,
+<command>autoheader</command>, <command>aclocal</command>,
+<command>automake</command>, <command>gettextize</command>, and
+<command>libtoolize</command> in the correct order to save time
+when changes are made to <command>autoconf</command> and
+<command>automake</command> template files</para>
+<indexterm zone="ch-system-autoconf autoreconf"><primary sortas="b-autoreconf">autoreconf</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="autoscan">
+<term><command>autoscan</command> </term>
+<listitem>
+<para>Helps to create a <filename>configure.in</filename> file for a
+software package; it examines the source files in a directory tree,
+searching them for common portability issues, and creates a
+<filename>configure.scan</filename> file that serves as as a
+preliminary <filename>configure.in</filename> file for the
+package</para>
+<indexterm zone="ch-system-autoconf autoscan"><primary sortas="b-autoscan">autoscan</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="autoupdate">
+<term><command>autoupdate</command></term>
+<listitem>
+<para>Modifies a <filename>configure.in</filename> file that still
+calls <command>autoconf</command> macros by their old names to use the
+current macro names</para>
+<indexterm zone="ch-system-autoconf autoupdate"><primary sortas="b-autoupdate">autoupdate</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ifnames">
+<term><command>ifnames</command> </term>
+<listitem>
+<para>Helps when writing <filename>configure.in</filename> files
+for a software package; it prints the identifiers that the package
+uses in C preprocessor conditionals. If a package has already been set
+up to have some portability, this program can help determine what
+<command>configure</command> needs to check for. It can also fill in
+gaps in a <filename>configure.in</filename> file generated by
+<command>autoscan</command></para>
+<indexterm zone="ch-system-autoconf ifnames"><primary sortas="b-ifnames">ifnames</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/automake.xml b/chapter06/automake.xml
index ae50cd74b..ebf4ad482 100644
--- a/chapter06/automake.xml
+++ b/chapter06/automake.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-automake" xreflabel="Automake" role="wrap">
+<sect1 id="ch-system-automake" role="wrap">
<title>Automake-&automake-version;</title>
<?dbhtml filename="automake.html"?>
<indexterm zone="ch-system-automake"><primary sortas="a-Automake">Automake</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Automake package contains programs for generating Makefiles for use
+with Autoconf.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,11 @@
<seglistitem><seg>0.2 SBU</seg><seg>6.8 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Automake installation depends on</segtitle>
+<seglistitem><seg>Autoconf, Bash, Coreutils,
+Diffutils, Grep, M4, Make, Perl, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -31,7 +38,7 @@
<screen><userinput>make</userinput></screen>
<para>To test the results, issue:
-<userinput>make check</userinput></para>
+<userinput>make check</userinput>. This takes a long time, about 5 SBUs.</para>
<para>Install the package:</para>
@@ -42,8 +49,168 @@
<sect2 id="contents-automake" role="content"><title>Contents of Automake</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>acinstall, aclocal, aclocal-&automake-version;,
+automake, automake-&automake-version;,
+compile, config.guess, config.sub, depcomp, elisp-comp, install-sh, mdate-sh,
+missing, mkinstalldirs, py-compile, symlink-tree, and ylwrap</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="acinstall">
+<term><command>acinstall</command></term>
+<listitem>
+<para>A script that installs aclocal-style M4 files</para>
+<indexterm zone="ch-system-automake acinstall"><primary sortas="b-acinstall">acinstall</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="aclocal">
+<term><command>aclocal</command></term>
+<listitem>
+<para>Generates <filename>aclocal.m4</filename>
+files based on the contents of <filename>configure.in</filename> files</para>
+<indexterm zone="ch-system-automake aclocal"><primary sortas="b-aclocal">aclocal</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="aclocal-version">
+<term><command>aclocal-&automake-version;</command></term>
+<listitem>
+<para>A hard link to <command>aclocal</command></para>
+<indexterm zone="ch-system-automake aclocal-version"><primary
+sortas="b-aclocal-&automake-version;">aclocal-&automake-version;</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="automake">
+<term><command>automake</command></term>
+<listitem>
+<para>A tool for automatically generating
+<filename>Makefile.in</filename> files from
+<filename>Makefile.am</filename> files. To create all the
+<filename>Makefile.in</filename> files for a package, run this program
+in the top-level directory. By scanning the
+<filename>configure.in</filename> file, it automatically finds each
+appropriate <filename>Makefile.am</filename> file and generate the
+corresponding <filename>Makefile.in</filename> file</para>
+<indexterm zone="ch-system-automake automake"><primary sortas="b-automake">automake</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="automake-version">
+<term><command>automake-&automake-version;</command></term>
+<listitem>
+<para>A hard link to <command>automake</command></para>
+<indexterm zone="ch-system-automake automake-version"><primary
+sortas="b-automake-&automake-version;">automake-&automake-version;</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="compile">
+<term><command>compile</command></term>
+<listitem>
+<para>A wrapper for compilers</para>
+<indexterm zone="ch-system-automake compile"><primary sortas="b-compile">compile</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="config.guess">
+<term><command>config.guess</command></term>
+<listitem>
+<para>A script that attempts to guess
+the canonical triplet for the given build, host, or target architecture</para>
+<indexterm zone="ch-system-automake config.guess"><primary sortas="b-config.guess">config.guess</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="config.sub">
+<term><command>config.sub</command></term>
+<listitem>
+<para>A configuration validation subroutine script</para>
+<indexterm zone="ch-system-automake config.sub"><primary sortas="b-config.sub">config.sub</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="depcomp">
+<term><command>depcomp</command></term>
+<listitem>
+<para>A script for compiling a program so that dependency information
+is generated in addition to the desired output</para>
+<indexterm zone="ch-system-automake depcomp"><primary sortas="b-depcomp">depcomp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="elisp-comp">
+<term><command>elisp-comp</command></term>
+<listitem>
+<para>Byte-compiles Emacs Lisp code</para>
+<indexterm zone="ch-system-automake elisp-comp"><primary sortas="b-elisp-comp">elisp-comp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="install-sh">
+<term><command>install-sh</command></term>
+<listitem>
+<para>A script that installs a program, script, or data file</para>
+<indexterm zone="ch-system-automake install-sh"><primary sortas="b-install-sh">install-sh</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mdate-sh">
+<term><command>mdate-sh</command></term>
+<listitem>
+<para>A script that prints the modification time of a file or directory</para>
+<indexterm zone="ch-system-automake mdate-sh"><primary sortas="b-mdate-sh">mdate-sh</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="missing">
+<term><command>missing</command></term>
+<listitem>
+<para>A script acting as a common stub for missing GNU programs during
+an installation</para>
+<indexterm zone="ch-system-automake missing"><primary sortas="b-missing">missing</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkinstalldirs">
+<term><command>mkinstalldirs</command></term>
+<listitem>
+<para>A script that creates a directory tree</para>
+<indexterm zone="ch-system-automake mkinstalldirs"><primary sortas="b-mkinstalldirs">mkinstalldirs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="py-compile">
+<term><command>py-compile</command></term>
+<listitem>
+<para>Compiles a Python program</para>
+<indexterm zone="ch-system-automake py-compile"><primary sortas="b-py-compile">py-compile</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="symlink-tree">
+<term><command>symlink-tree</command></term>
+<listitem>
+<para>A script to create a symlink tree of a directory tree</para>
+<indexterm zone="ch-system-automake symlink-tree"><primary sortas="b-symlink-tree">symlink-tree</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ylwrap">
+<term><command>ylwrap</command></term>
+<listitem>
+<para>A wrapper for <command>lex</command> and <command>yacc</command></para>
+<indexterm zone="ch-system-automake ylwrap"><primary sortas="b-ylwrap">ylwrap</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/bash.xml b/chapter06/bash.xml
index 8803aad6a..b7c459f1e 100644
--- a/chapter06/bash.xml
+++ b/chapter06/bash.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-bash" xreflabel="Bash" role="wrap">
+<sect1 id="ch-system-bash" role="wrap">
<title>Bash-&bash-version;</title>
<?dbhtml filename="bash.html"?>
<indexterm zone="ch-system-bash"><primary sortas="a-Bash">Bash</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Bash package contains the Bourne-Again SHell.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,16 +18,24 @@
<seglistitem><seg>1.2 SBU</seg><seg>27 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Bash installation depends on</segtitle>
+<seglistitem><seg>Binutils, Coreutils, Diffutils, Gawk,
+GCC, Glibc, Grep, Make, Ncurses, and Sed.</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Bash</title>
-<para>Apply a patch:</para>
+<!-- Edit Me -->
+<para>The following patch fixes various issues, including a problem where Bash
+will sometimes only show 33 characters on a line, then wrap to the next:</para>
<screen><userinput>patch -Np1 -i ../bash-&bash-version;-fixes-1.patch</userinput></screen>
-<para>Apply another patch:</para>
+<para>Bash also has issues when compiled against newer versions of Glibc. The
+following patch resolves this problem:</para>
<screen><userinput>patch -Np1 -i ../bash-&bash-version;-avoid_WCONTINUED-1.patch</userinput></screen>
@@ -35,6 +44,17 @@
<screen><userinput>./configure --prefix=/usr --bindir=/bin \
--without-bash-malloc --with-installed-readline</userinput></screen>
+<para>The meaning of the configure option:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>--with-installed-readline</parameter></term>
+<listitem><para>This options tells Bash to use the
+<filename class="libraryfile">readline</filename> library that is already installed
+on the system rather than using its own readline version.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
@@ -46,17 +66,60 @@
<screen><userinput>make install</userinput></screen>
-<para>Run the newly compiled <command>bash</command> program:</para>
+<para>Run the newly compiled <command>bash</command> program (replacing the one that is
+currently being executed):</para>
<screen><userinput>exec /bin/bash --login +h</userinput></screen>
+<note><para>The parameters used make the <command>bash</command>
+process an interactive login shell and continue to disable hashing so
+that new programs are found as they become available.</para></note>
+
</sect2>
<sect2 id="contents-bash" role="content"><title>Contents of Bash</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>bash, bashbug, and sh (link to bash)</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="bash">
+<term><command>bash</command></term>
+<listitem>
+<para>A widely-used command interpreter; it performs many types of
+expansions and substitutions on a given command line before executing
+it, thus making this interpreter a powerful tool</para>
+<indexterm zone="ch-system-bash bash"><primary sortas="b-bash">bash</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bashbug">
+<term><command>bashbug</command></term>
+<listitem>
+<para>A shell script to help the user compose and mail bug reports
+concerning <command>bash</command> in a standard format</para>
+<indexterm zone="ch-system-bash bashbug"><primary sortas="b-bashbug">bashbug</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sh">
+<term><command>sh</command></term>
+<listitem>
+<para>A symlink to the <command>bash</command> program; when invoked
+as <command>sh</command>, <command>bash</command> tries to mimic the
+startup behavior of historical versions of <command>sh</command> as
+closely as possible, while conforming to the POSIX standard as well</para>
+<indexterm zone="ch-system-bash sh"><primary sortas="b-sh">sh</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/binutils.xml b/chapter06/binutils.xml
index f749f0864..c3032612a 100644
--- a/chapter06/binutils.xml
+++ b/chapter06/binutils.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-binutils" xreflabel="Binutils" role="wrap">
+<sect1 id="ch-system-binutils" role="wrap">
<title>Binutils-&binutils-version;</title>
<?dbhtml filename="binutils.html"?>
<indexterm zone="ch-system-binutils"><primary sortas="a-Binutils">Binutils</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Binutils package contains a linker, an assembler, and other tools for
+handling object files.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,21 +19,45 @@
<seglistitem><seg>1.4 SBU</seg><seg>167 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Binutils installation depends on</segtitle>
+<seglistitem><seg>Bash, Bison, Coreutils, Diffutils, Flex, GCC, Gettext,
+Glibc, Grep, M4, Make, Perl, Sed, and Texinfo</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Binutils</title>
-<para>Check if there is PTYs for the test suites:</para>
+<para>This package is known to have issues when its default
+optimization flags (including the <parameter>-march</parameter> and
+<parameter>-mcpu</parameter> options) are changed. If any environment
+variables that override default optimizations have been defined, such
+as <envar>CFLAGS</envar> and <envar>CXXFLAGS</envar>,
+unset them when building Binutils.</para>
+
+<para>Verify that the PTYs are working properly inside the chroot
+environment. Check that everything is set up correctly by performing a
+simple test:</para>
<screen><userinput>expect -c "spawn ls"</userinput></screen>
-<para>Create the build directory:</para>
+<para>If the following message shows up, the chroot environment is not
+set up for proper PTY operation:</para>
+
+<screen><computeroutput>The system has no more ptys.
+Ask your system administrator to create more.</computeroutput></screen>
+
+<para>This issue needs to be resolved before running the test suites
+for Binutils and GCC.</para>
+
+<para>The Binutils documentation recommends building Binutils outside of the
+source directory in a dedicated build directory:</para>
<screen><userinput>mkdir ../binutils-build
cd ../binutils-build</userinput></screen>
-<para>Now prepare Binutils for compilation:</para>
+<para>Prepare Binutils for compilation:</para>
<screen><userinput>../binutils-&binutils-version;/configure --prefix=/usr \
--enable-shared</userinput></screen>
@@ -40,19 +66,33 @@ cd ../binutils-build</userinput></screen>
<screen><userinput>make tooldir=/usr</userinput></screen>
-<para>Test the results:</para>
+<para>Normally, the tooldir (the directory where the executables will
+ultimately be located) is set to <filename
+class="directory">$(exec_prefix)/$(target_alias)</filename>, which
+expands into <phrase condition="html"><filename
+class="directory">/usr/i686-pc-linux-gnu</filename></phrase><phrase
+condition="pdf"><filename class="directory">/usr/i686-pc-
+linux-gnu</filename></phrase>. Because this is a custom system, this
+target-specific directory in <filename
+class="directory">/usr</filename> is not required. This setup would be
+used if the system was used to cross-compile (for example, compiling a
+package on an Intel machine that generates code that can be executed
+on PowerPC machines).</para>
-<!--NEW-->
-<screen><userinput>make -k check</userinput></screen>
+<important><para>The test suite for Binutils in this section is
+considered critical. Do not skip it under any
+circumstances.</para></important>
-<para>The test suite notes from <xref linkend="ch-tools-binutils-pass2"/> are still
-very much appropriate here..</para>
+<para>Test the results:</para>
+
+<screen><userinput>make check</userinput></screen>
<para>Install the package:</para>
<screen><userinput>make tooldir=/usr install</userinput></screen>
-<para>Install the <filename class="headerfile">libiberty</filename> header file:</para>
+<para>Install the <filename class="headerfile">libiberty</filename> header file that is needed by
+some packages:</para>
<screen><userinput>cp ../binutils-&binutils-version;/include/libiberty.h /usr/include</userinput></screen>
@@ -61,8 +101,176 @@ very much appropriate here..</para>
<sect2 id="contents-binutils" role="content"><title>Contents of Binutils</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump,
+ranlib, readelf, size, strings, and strip</seg>
+<seg>libiberty.a, libbfd.[a,so], and libopcodes.[a,so]</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="addr2line">
+<term><command>addr2line</command></term>
+<listitem>
+<para>Translates program addresses to file names and line numbers;
+given an address and the name of an executable, it uses the debugging
+information in the executable to determine which source file and line
+number are associated with the address</para>
+<indexterm zone="ch-system-binutils addr2line"><primary sortas="b-addr2line">addr2line</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ar">
+<term><command>ar</command></term>
+<listitem>
+<para>Creates, modifies, and extracts from archives</para>
+<indexterm zone="ch-system-binutils ar"><primary sortas="b-ar">ar</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="as">
+<term><command>as</command></term>
+<listitem>
+<para>An assembler that assembles the output of <command>gcc</command>
+into object files</para>
+<indexterm zone="ch-system-binutils as"><primary sortas="b-as">as</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="c-filt">
+<term><command>c++filt</command></term>
+<listitem>
+<para>Used by the linker to de-mangle C++ and Java symbols and to keep
+overloaded functions from clashing</para>
+<indexterm zone="ch-system-binutils c-filt"><primary sortas="b-c++filt">c++filt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gprof">
+<term><command>gprof</command></term>
+<listitem>
+<para>Displays call graph profile data</para>
+<indexterm zone="ch-system-binutils gprof"><primary sortas="b-gprof">gprof</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ld">
+<term><command>ld</command></term>
+<listitem>
+<para>A linker that combines a number of object and archive files into a single file,
+relocating their data and tying up symbol references</para>
+<indexterm zone="ch-system-binutils ld"><primary sortas="b-ld">ld</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="nm">
+<term><command>nm</command></term>
+<listitem>
+<para>Lists the symbols occurring in a given object file</para>
+<indexterm zone="ch-system-binutils nm"><primary sortas="b-nm">nm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="objcopy">
+<term><command>objcopy</command></term>
+<listitem>
+<para>Translates one type of object file into another</para>
+<indexterm zone="ch-system-binutils objcopy"><primary sortas="b-objcopy">objcopy</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="objdump">
+<term><command>objdump</command></term>
+<listitem>
+<para>Displays information about the given object file, with options
+controlling the particular information to display; the information
+shown is useful to programmers who are working on the compilation
+tools</para>
+<indexterm zone="ch-system-binutils objdump"><primary sortas="b-objdump">objdump</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ranlib">
+<term><command>ranlib</command></term>
+<listitem>
+<para>Generates an index of the contents of an archive and stores it
+in the archive; the index lists all of the symbols defined by archive
+members that are relocatable object files</para>
+<indexterm zone="ch-system-binutils ranlib"><primary sortas="b-ranlib">ranlib</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="readelf">
+<term><command>readelf</command></term>
+<listitem>
+<para>Displays information about ELF type binaries</para>
+<indexterm zone="ch-system-binutils readelf"><primary sortas="b-readelf">readelf</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="size">
+<term><command>size</command></term>
+<listitem>
+<para>Lists the section sizes and the total size for the given object files</para>
+<indexterm zone="ch-system-binutils size"><primary sortas="b-size">size</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="strings">
+<term><command>strings</command></term>
+<listitem>
+<para>Outputs, for each given file, the sequences of printable
+characters that are of at least the specified length (defaulting to
+four); for object files, it prints, by default, only the strings from
+the initializing and loading sections while for other types of files, it
+scans the entire file</para>
+<indexterm zone="ch-system-binutils strings"><primary sortas="b-strings">strings</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="strip">
+<term><command>strip</command></term>
+<listitem>
+<para>Discards symbols from object files</para>
+<indexterm zone="ch-system-binutils strip"><primary sortas="b-strip">strip</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libiberty">
+<term><filename class="libraryfile">libiberty</filename></term>
+<listitem>
+<para>Contains routines used by various GNU programs, including
+<command>getopt</command>, <command>obstack</command>,
+<command>strerror</command>, <command>strtol</command>, and
+<command>strtoul</command></para>
+<indexterm zone="ch-system-binutils libiberty"><primary sortas="c-libiberty">libiberty</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libbfd">
+<term><filename class="libraryfile">libbfd</filename></term>
+<listitem>
+<para>The Binary File Descriptor library</para>
+<indexterm zone="ch-system-binutils libbfd"><primary sortas="c-libbfd">libbfd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libopcodes">
+<term><filename class="libraryfile">libopcodes</filename></term>
+<listitem>
+<para>A library for dealing with opcodes&mdash;the <quote>readable
+text</quote> versions of instructions for the processor;
+it is used for building utilities like
+<command>objdump</command>.</para>
+<indexterm zone="ch-system-binutils libopcodes"><primary sortas="c-libopcodes">libopcodes</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/bison.xml b/chapter06/bison.xml
index ad2b668bc..8626349bf 100644
--- a/chapter06/bison.xml
+++ b/chapter06/bison.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-bison" xreflabel="Bison" role="wrap">
+<sect1 id="ch-system-bison" role="wrap">
<title>Bison-&bison-version;</title>
<?dbhtml filename="bison.html"?>
<indexterm zone="ch-system-bison"><primary sortas="a-Bison">Bison</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Bison package contains a parser generator.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.6 SBU</seg><seg>10.6 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Bison installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Gettext, Glibc, Grep, M4, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -33,17 +39,57 @@
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
</sect2>
-
<sect2 id="contents-bison" role="content"><title>Contents of Bison</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed library</segtitle>
+<seglistitem><seg>bison and yacc</seg><seg>liby.a</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="bison">
+<term><command>bison</command></term>
+<listitem>
+<para>generates, from a series of rules, a program for analyzing the
+structure of text files; <application>Bison</application> is a
+replacement for <application>Yacc</application> (Yet Another Compiler
+Compiler)</para>
+<indexterm zone="ch-system-bison bison"><primary sortas="b-bison">bison</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="yacc">
+<term><command>yacc</command></term>
+<listitem>
+<para>a wrapper for <command>bison</command>, meant for programs
+that still call <command>yacc</command> instead of <command>bison</command>;
+it calls <command>bison</command> with the <parameter>-y</parameter> option</para>
+<indexterm zone="ch-system-bison yacc"><primary sortas="b-yacc">yacc</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="liby.a">
+<term><filename class="libraryfile">liby.a</filename></term>
+<listitem>
+<para>the Yacc library containing implementations of Yacc-compatible
+<emphasis>yyerror</emphasis> and <emphasis>main</emphasis> functions;
+this library is normally not very useful, but POSIX requires
+it</para>
+<indexterm zone="ch-system-bison liby.a"><primary sortas="c-liby.a">liby.a</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/bzip2.xml b/chapter06/bzip2.xml
index 2751da0dd..24f83aab9 100644
--- a/chapter06/bzip2.xml
+++ b/chapter06/bzip2.xml
@@ -3,13 +3,16 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-bzip2" xreflabel="Bzip2" role="wrap">
+<sect1 id="ch-system-bzip2" role="wrap">
<title>Bzip2-&bzip2-version;</title>
<?dbhtml filename="bzip2.html"?>
<indexterm zone="ch-system-bzip2"><primary sortas="a-Bzip2">Bzip2</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Bzip2 package contains programs for compressing and decompressing
+files. Text files yield a much better compression than with the
+traditional <command>gzip</command>.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +20,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>3.0 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Bzip2 installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Glibc, and Make</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -27,15 +35,27 @@
<screen><userinput>make -f Makefile-libbz2_so
make clean</userinput></screen>
+<para>The <parameter>-f</parameter> flag will cause Bzip2 to be built
+using a different <filename>Makefile</filename> file, in this case the
+<filename>Makefile-libbz2_so</filename> file, which creates a dynamic
+<filename class="libraryfile">libbz2.so</filename> library and links the Bzip2
+utilities against it.</para>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Install the package:</para>
+<para>If reinstalling Bzip2, perform
+<userinput>rm -f /usr/bin/bz*</userinput> first, otherwise the following
+<command>make install</command> will fail.</para>
+
+<para>Install the programs:</para>
<screen><userinput>make install</userinput></screen>
-<para>Do some location changes:</para>
+<para>Install the shared <command>bzip2</command> binary into the
+<filename class="directory">/bin</filename> directory, make
+some necessary symbolic links, and clean up:</para>
<screen><userinput>cp bzip2-shared /bin/bzip2
cp -a libbz2.so* /lib
@@ -49,8 +69,120 @@ ln -s bzip2 /bin/bzcat</userinput></screen>
<sect2 id="contents-bzip2" role="content"><title>Contents of Bzip2</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>bunzip2 (link to bzip2), bzcat (link to bzip2), bzcmp, bzdiff,
+bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless, and bzmore</seg>
+<seg>libbz2.a, libbz2.so (link to libbz2.so.1.0), libbz2.so.1.0 (link to
+libbz2.so.&bzip2-version;), and libbz2.so.&bzip2-version;</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="bunzip2">
+<term><command>bunzip2</command></term>
+<listitem>
+<para>Decompresses bzipped files</para>
+<indexterm zone="ch-system-bzip2 bunzip2"><primary sortas="b-bunzip2">bunzip2</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzcat">
+<term><command>bzcat</command></term>
+<listitem>
+<para>Decompresses to standard output</para>
+<indexterm zone="ch-system-bzip2 bzcat"><primary sortas="b-bzcat">bzcat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzcmp">
+<term><command>bzcmp</command></term>
+<listitem>
+<para>Runs <command>cmp</command> on bzipped files</para>
+<indexterm zone="ch-system-bzip2 bzcmp"><primary sortas="b-bzcmp">bzcmp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzdiff">
+<term><command>bzdiff</command></term>
+<listitem>
+<para>Runs <command>diff</command> on bzipped files</para>
+<indexterm zone="ch-system-bzip2 bzdiff"><primary sortas="b-bzdiff">bzdiff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzgrep">
+<term><command>bzgrep</command></term>
+<listitem>
+<para>Runs <command>grep</command> on bzipped files</para>
+<indexterm zone="ch-system-bzip2 bzgrep"><primary sortas="b-bzgrep">bzgrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzegrep">
+<term><command>bzegrep</command></term>
+<listitem>
+<para>Runs <command>egrep</command> on bzipped files</para>
+<indexterm zone="ch-system-bzip2 bzegrep"><primary sortas="b-bzegrep">bzegrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzfgrep">
+<term><command>bzfgrep</command></term>
+<listitem>
+<para>Runs <command>fgrep</command> on bzipped files</para>
+<indexterm zone="ch-system-bzip2 bzfgrep"><primary sortas="b-bzfgrep">bzfgrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzip2">
+<term><command>bzip2</command></term>
+<listitem>
+<para>Compresses files using the Burrows-Wheeler block sorting text
+compression algorithm with Huffman coding; the compression rate is
+better than that achieved by more conventional compressors using
+<quote>Lempel-Ziv</quote> algorithms, like <command>gzip</command></para>
+<indexterm zone="ch-system-bzip2 bzip2"><primary sortas="b-bzip2">bzip2</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzip2recover">
+<term><command>bzip2recover</command></term>
+<listitem>
+<para>Tries to recover data from damaged bzipped files</para>
+<indexterm zone="ch-system-bzip2 bzip2recover"><primary sortas="b-bzip2recover">bzip2recover</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzless">
+<term><command>bzless</command></term>
+<listitem>
+<para>Runs <command>less</command> on bzipped files</para>
+<indexterm zone="ch-system-bzip2 bzless"><primary sortas="b-bzless">bzless</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="bzmore">
+<term><command>bzmore</command></term>
+<listitem>
+<para>Runs <command>more</command> on bzipped files</para>
+<indexterm zone="ch-system-bzip2 bzmore"><primary sortas="b-bzmore">bzmore</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libbz2">
+<term><filename class="libraryfile">libbz2*</filename></term>
+<listitem>
+<para>The library implementing lossless, block-sorting data
+compression, using the Burrows-Wheeler algorithm</para>
+<indexterm zone="ch-system-bzip2 libbz2"><primary sortas="c-libbz2*">libbz2*</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/changingowner.xml b/chapter06/changingowner.xml
index 9d53404f6..a22e199c5 100644
--- a/chapter06/changingowner.xml
+++ b/chapter06/changingowner.xml
@@ -7,8 +7,34 @@
<title>Changing Ownership</title>
<?dbhtml filename="changingowner.html"?>
-<para>Change the owner of <filename class="directory">/tools</filename>:</para>
+<para>Currently, the <filename class="directory">/tools</filename>
+directory is owned by the user <emphasis>lfs</emphasis>, a user that
+exists only on the host system. Although the <filename
+class="directory">/tools</filename> directory can be deleted once the
+LFS system has been finished, it can be retained to build additional
+LFS systems. If the <filename class="directory">/tools</filename>
+directory is kept as is, the files are owned by a user ID without a
+corresponding account. This is dangerous because a user account
+created later could get this same user ID and would own the <filename
+class="directory">/tools</filename> directory and all the files
+therein, thus exposing these files to possible malicious
+manipulation.</para>
+
+<para>To avoid this issue, add the <emphasis>lfs</emphasis> user to
+the new LFS system later when creating the
+<filename>/etc/passwd</filename> file, taking care to assign it the
+same user and group IDs as on the host system. Alternatively, assign
+the contents of the <filename class="directory">/tools</filename>
+directory to user <emphasis>root</emphasis> by running the following
+command:</para>
<screen><userinput>chown -R 0:0 /tools</userinput></screen>
+<para>The command uses <parameter>0:0</parameter> instead of
+<parameter>root:root</parameter>, because <command>chown</command>
+is unable to resolve the name <quote>root</quote> until the password
+file has been created. This book assumes you ran this
+<command>chown</command> command.</para>
+
</sect1>
+
diff --git a/chapter06/chroot.xml b/chapter06/chroot.xml
index 9ef1cca3e..c9afcdc13 100644
--- a/chapter06/chroot.xml
+++ b/chapter06/chroot.xml
@@ -7,11 +7,55 @@
<title>Entering the Chroot Environment</title>
<?dbhtml filename="chroot.html"?>
-<para>Enter the chroot environment:</para>
+<para>It is time to enter the chroot environment to begin
+building and installing the final LFS system. As user
+<emphasis>root</emphasis>, run the following command to enter the
+realm that is, at the moment, populated with only the temporary
+tools:</para>
<screen><userinput>chroot "$LFS" /tools/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
/tools/bin/bash --login +h</userinput></screen>
+<para>The <parameter>-i</parameter> option given to the
+<command>env</command> command will clear all variables of the chroot
+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 needed for programs like
+<command>vim</command> and <command>less</command> to operate
+properly. If other variables are needed, such as
+<envar>CFLAGS</envar> or <envar>CXXFLAGS</envar>, this is
+a good place to set 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>
+comes last in the <envar>PATH</envar>. This means that a
+temporary tool will not be used anymore as soon as its final version
+is installed. This occurs when the shell does not <quote>remember</quote> the
+locations of executed binaries&mdash;for this reason, hashing is switched
+off by passing the <parameter>+h</parameter> option to <command>bash</command>.</para>
+
+<para>It is important that all the commands throughout the remainder
+of this chapter and the following chapters be run from within the
+chroot environment. If you leave this environment for any reason
+(rebooting for example), remember to first mount the <systemitem
+class="filesystem">proc</systemitem> and <systemitem
+class="filesystem">devpts</systemitem> file systems (discussed in the
+previous section) and enter chroot again before continuing with the
+installations.</para>
+
+<para>Note that the bash prompt will say <quote>I have no
+name!</quote> This is normal because the
+<filename>/etc/passwd</filename> file has not been created yet.</para>
+
</sect1>
+
diff --git a/chapter06/coreutils.xml b/chapter06/coreutils.xml
index d4c93c84b..6df281e33 100644
--- a/chapter06/coreutils.xml
+++ b/chapter06/coreutils.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-coreutils" xreflabel="Coreutils" role="wrap">
+<sect1 id="ch-system-coreutils" role="wrap">
<title>Coreutils-&coreutils-version;</title>
<?dbhtml filename="coreutils.html"?>
<indexterm zone="ch-system-coreutils"><primary sortas="a-Coreutils">Coreutils</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Coreutils package contains utilities for showing and setting the
+basic system characteristics.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,16 +19,25 @@
<seglistitem><seg>0.9 SBU</seg><seg>69 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Coreutils installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils, GCC,
+Gettext, Glibc, Grep, Make, Perl, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Coreutils</title>
-<para>Apply a patch:</para>
+<para>A known issue with the <command>uname</command> program from
+this package is that the <parameter>-p</parameter> switch always
+returns <computeroutput>unknown</computeroutput>. The following patch
+fixes this behavior for Intel architectures:</para>
<screen><userinput>patch -Np1 -i ../coreutils-&coreutils-version;-uname-2.patch</userinput></screen>
-<para>Apply another patch:</para>
+<para>Prevent Coreutils from installing binaries that will be later be
+installed by other packages:</para>
<screen><userinput>patch -Np1 -i \
../coreutils-&coreutils-version;-suppress_uptime_kill_su-1.patch</userinput></screen>
@@ -39,21 +50,30 @@
<screen><userinput>make</userinput></screen>
+<para>The test suite of Coreutils makes several assumptions about the
+presence of files and users that are not valid this early in the LFS
+build. Therefore, additional items need to be set up before running
+the tests. Skip down to <quote>Install the package</quote> if
+not running the test suite.</para>
+
<para>Create two dummy groups and a dummy user name:</para>
<screen><userinput>echo "dummy1:x:1000:" &gt;&gt; /etc/group
echo "dummy2:x:1001:dummy" &gt;&gt; /etc/group
echo "dummy:x:1000:1000:::/bin/bash" &gt;&gt; /etc/passwd</userinput></screen>
-<para>Run the <emphasis>root</emphasis> tests:</para>
+<para>Now the test suite is ready to be run. First, run the tests that
+are meant to be run as user <emphasis>root</emphasis>:</para>
<screen><userinput>make NON_ROOT_USERNAME=dummy check-root</userinput></screen>
-<para>Run the user tests:</para>
+<para>Then run the remainder of the tests as the
+<emphasis>dummy</emphasis> user:</para>
<screen><userinput>src/su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"</userinput></screen>
-<para>Remove the dummy user and groups:</para>
+<para>When testing is complete, remove the dummy user and
+groups:</para>
<screen><userinput>sed -i '/dummy/d' /etc/passwd /etc/group</userinput></screen>
@@ -61,7 +81,7 @@ echo "dummy:x:1000:1000:::/bin/bash" &gt;&gt; /etc/passwd</userinput></screen>
<screen><userinput>make install</userinput></screen>
-<para>And move some programs to their proper locations:</para>
+<para>Move programs to the proper locations:</para>
<screen><userinput>mv /usr/bin/{[,basename,cat,chgrp,chmod,chown,cp,dd,df} /bin
mv /usr/bin/{date,echo,false,head,hostname,install,ln} /bin
@@ -69,7 +89,7 @@ mv /usr/bin/{ls,mkdir,mknod,mv,pwd,rm,rmdir,sync} /bin
mv /usr/bin/{sleep,stty,test,touch,true,uname} /bin
mv /usr/bin/chroot /usr/sbin</userinput></screen>
-<para>Create a symlink:</para>
+<para>Finally, create a symlink to be FHS-compliant:</para>
<screen><userinput>ln -s ../../bin/install /usr/bin</userinput></screen>
@@ -78,8 +98,755 @@ mv /usr/bin/chroot /usr/sbin</userinput></screen>
<sect2 id="contents-coreutils" role="content"><title>Contents of Coreutils</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>basename, cat, chgrp, chmod, chown, chroot, cksum,
+comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du,
+echo, env, expand, expr, factor, false, fmt, fold, groups, head,
+hostid, hostname, id, install, join, link, ln, logname, ls, md5sum,
+mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste, pathchk, pinky,
+pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum,
+shred, sleep, sort, split, stat, stty, sum, sync, tac, tail, tee,
+test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink,
+users, vdir, wc, who, whoami, and yes</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="basename">
+<term><command>basename</command></term>
+<listitem>
+<para>Strips any path and a given suffix from a file name</para>
+<indexterm zone="ch-system-coreutils basename"><primary sortas="b-basename">basename</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="cat">
+<term><command>cat</command></term>
+<listitem>
+<para>Concatenates files to standard output</para>
+<indexterm zone="ch-system-coreutils cat"><primary sortas="b-cat">cat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="chgrp">
+<term><command>chgrp</command></term>
+<listitem>
+<para>Changes the group ownership of each given file to the given
+group; the group can either be either given a name or a numeric
+ID</para>
+<indexterm zone="ch-system-coreutils chgrp"><primary sortas="b-chgrp">chgrp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="chmod">
+<term><command>chmod</command></term>
+<listitem>
+<para>Changes the permissions of each file to the given mode; the mode
+can be either a symbolic representation of the changes to make or an
+octal number representing the new permissions</para>
+<indexterm zone="ch-system-coreutils chmod"><primary sortas="b-chmod">chmod</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="chown">
+<term><command>chown</command></term>
+<listitem>
+<para>Changes the user and/or group ownership of
+each given file to the given user/group pair</para>
+<indexterm zone="ch-system-coreutils chown"><primary sortas="b-chown">chown</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="chroot">
+<term><command>chroot</command></term>
+<listitem>
+<para>Runs a command with the specified directory as the
+<filename class="directory">/</filename> directory</para>
+<indexterm zone="ch-system-coreutils chroot"><primary sortas="b-chroot">chroot</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="cksum">
+<term><command>cksum</command></term>
+<listitem>
+<para>Prints the Cyclic Redundancy Check (CRC) checksum and the byte
+counts of each specified file</para>
+<indexterm zone="ch-system-coreutils cksum"><primary sortas="b-cksum">cksum</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="comm">
+<term><command>comm</command></term>
+<listitem>
+<para>Compares two sorted files, outputting in three columns the lines
+that are unique and the lines that are common</para>
+<indexterm zone="ch-system-coreutils comm"><primary sortas="b-comm">comm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="cp">
+<term><command>cp</command></term>
+<listitem>
+<para>Copies files</para>
+<indexterm zone="ch-system-coreutils cp"><primary sortas="b-cp">cp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="csplit">
+<term><command>csplit</command></term>
+<listitem>
+<para>Splits a given file into several new files, separating them
+according to given patterns or line numbers and outputting the byte
+count of each new file</para>
+<indexterm zone="ch-system-coreutils csplit"><primary sortas="b-csplit">csplit</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="cut">
+<term><command>cut</command></term>
+<listitem>
+<para>Prints sections of lines, selecting the parts according to given
+fields or positions</para>
+<indexterm zone="ch-system-coreutils cut"><primary sortas="b-cut">cut</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="date">
+<term><command>date</command></term>
+<listitem>
+<para>Displays the current time in the given format, or sets the
+system date</para>
+<indexterm zone="ch-system-coreutils date"><primary sortas="b-date">date</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="dd">
+<term><command>dd</command> </term>
+<listitem>
+<para>Copies a file using the given block size and count, while
+optionally performing conversions on it</para>
+<indexterm zone="ch-system-coreutils dd"><primary sortas="b-dd">dd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="df">
+<term><command>df</command></term>
+<listitem>
+<para>Reports the amount of disk space available (and used) on all
+mounted file systems, or only on the file systems holding the selected
+files</para>
+<indexterm zone="ch-system-coreutils df"><primary sortas="b-df">df</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="dir">
+<term><command>dir</command></term>
+<listitem>
+<para>Lists the contents of each given directory (the same as
+the <command>ls</command> command)</para>
+<indexterm zone="ch-system-coreutils dir"><primary sortas="b-dir">dir</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="dircolors">
+<term><command>dircolors</command></term>
+<listitem>
+<para>Outputs commands to set the <envar>LS_COLOR</envar>
+environment variable to change the color scheme used by
+<command>ls</command></para>
+<indexterm zone="ch-system-coreutils dircolors"><primary sortas="b-dircolors">dircolors</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="dirname">
+<term><command>dirname</command></term>
+<listitem>
+<para>Strips the non-directory suffix from a file name</para>
+<indexterm zone="ch-system-coreutils dirname"><primary sortas="b-dirname">dirname</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="du">
+<term><command>du</command></term>
+<listitem>
+<para>Reports the amount of disk space used by the current directory,
+by each of the given directories (including all subdirectories) or by
+each of the given files</para>
+<indexterm zone="ch-system-coreutils du"><primary sortas="b-du">du</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="echo">
+<term><command>echo</command></term>
+<listitem>
+<para>Displays the given strings</para>
+<indexterm zone="ch-system-coreutils echo"><primary sortas="b-echo">echo</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="env">
+<term><command>env</command></term>
+<listitem>
+<para>Runs a command in a modified environment</para>
+<indexterm zone="ch-system-coreutils env"><primary sortas="b-env">env</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="expand">
+<term><command>expand</command></term>
+<listitem>
+<para>Converts tabs to spaces</para>
+<indexterm zone="ch-system-coreutils expand"><primary sortas="b-expand">expand</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="expr">
+<term><command>expr</command></term>
+<listitem>
+<para>Evaluates expressions</para>
+<indexterm zone="ch-system-coreutils expr"><primary sortas="b-expr">expr</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="factor">
+<term><command>factor</command></term>
+<listitem>
+<para>Prints the prime factors of all specified integer numbers</para>
+<indexterm zone="ch-system-coreutils factor"><primary sortas="b-factor">factor</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="false">
+<term><command>false</command></term>
+<listitem>
+<para>Does nothing, unsuccessfully; it always exits with a status code
+indicating failure</para>
+<indexterm zone="ch-system-coreutils false"><primary sortas="b-false">false</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fmt">
+<term><command>fmt</command></term>
+<listitem>
+<para>Reformats the paragraphs in the given files</para>
+<indexterm zone="ch-system-coreutils fmt"><primary sortas="b-fmt">fmt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fold">
+<term><command>fold</command></term>
+<listitem>
+<para>Wraps the lines in the given files</para>
+<indexterm zone="ch-system-coreutils fold"><primary sortas="b-fold">fold</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="groups-coreutils">
+<term><command>groups</command></term>
+<listitem>
+<para>Reports a user's group memberships</para>
+<indexterm zone="ch-system-coreutils groups-coreutils"><primary sortas="b-groups-coreutils">groups</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="head">
+<term><command>head</command></term>
+<listitem>
+<para>Prints the first ten lines (or the given number of lines) of each given file</para>
+<indexterm zone="ch-system-coreutils head"><primary sortas="b-head">head</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hostid">
+<term><command>hostid</command></term>
+<listitem>
+<para>Reports the numeric identifier (in hexadecimal) of the host</para>
+<indexterm zone="ch-system-coreutils hostid"><primary sortas="b-hostid">hostid</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hostname">
+<term><command>hostname</command></term>
+<listitem>
+<para>Reports or sets the name of the host</para>
+<indexterm zone="ch-system-coreutils hostname"><primary sortas="b-hostname">hostname</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="id">
+<term><command>id</command></term>
+<listitem>
+<para>Reports the effective user ID, group ID, and
+group memberships of the current user or specified user</para>
+<indexterm zone="ch-system-coreutils id"><primary sortas="b-id">id</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="install">
+<term><command>install</command> </term>
+<listitem>
+<para>Copies files while setting their
+permission modes and, if possible, their owner and group</para>
+<indexterm zone="ch-system-coreutils install"><primary sortas="b-install">install</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="join">
+<term><command>join</command></term>
+<listitem>
+<para>Joins the lines that have identical join fields from two
+separate files</para>
+<indexterm zone="ch-system-coreutils join"><primary sortas="b-join">join</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="link">
+<term><command>link</command></term>
+<listitem>
+<para>Creates a hard link with the given name to a file</para>
+<indexterm zone="ch-system-coreutils link"><primary sortas="b-link">link</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ln">
+<term><command>ln</command></term>
+<listitem>
+<para>Makes hard links or soft (symbolic) links between files</para>
+<indexterm zone="ch-system-coreutils ln"><primary sortas="b-ln">ln</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="logname">
+<term><command>logname</command></term>
+<listitem>
+<para>Reports the current user's login name</para>
+<indexterm zone="ch-system-coreutils logname"><primary sortas="b-logname">logname</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ls">
+<term><command>ls</command></term>
+<listitem>
+<para>Lists the contents of each given directory</para>
+<indexterm zone="ch-system-coreutils ls"><primary sortas="b-ls">ls</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="md5sum">
+<term><command>md5sum</command></term>
+<listitem>
+<para>Reports or checks Message Digest 5 (MD5) checksums</para>
+<indexterm zone="ch-system-coreutils md5sum"><primary sortas="b-md5sum">md5sum</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkdir">
+<term><command>mkdir</command></term>
+<listitem>
+<para>Creates directories with the given names</para>
+<indexterm zone="ch-system-coreutils mkdir"><primary sortas="b-mkdir">mkdir</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkfifo">
+<term><command>mkfifo</command></term>
+<listitem>
+<para>Creates First-In, First-Outs (FIFOs), a <quote>named
+pipe</quote> in UNIX parlance, with the given names</para>
+<indexterm zone="ch-system-coreutils mkfifo"><primary sortas="b-mkfifo">mkfifo</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mknod">
+<term><command>mknod</command></term>
+<listitem>
+<para>Creates device nodes with the given names; a device node is a
+character special file, a block special file, or a FIFO</para>
+<indexterm zone="ch-system-coreutils mknod"><primary sortas="b-mknod">mknod</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mv">
+<term><command>mv</command></term>
+<listitem>
+<para>Moves or renames files or directories</para>
+<indexterm zone="ch-system-coreutils mv"><primary sortas="b-mv">mv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="nice">
+<term><command>nice</command></term>
+<listitem>
+<para>Runs a program with modified scheduling priority</para>
+<indexterm zone="ch-system-coreutils nice"><primary sortas="b-nice">nice</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="nl">
+<term><command>nl</command></term>
+<listitem>
+<para>Numbers the lines from the given files</para>
+<indexterm zone="ch-system-coreutils nl"><primary sortas="b-nl">nl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="nohup">
+<term><command>nohup</command></term>
+<listitem>
+<para>Runs a command immune to hangups, with its output redirected to
+a log file</para>
+<indexterm zone="ch-system-coreutils nohup"><primary sortas="b-nohup">nohup</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="od">
+<term><command>od</command></term>
+<listitem>
+<para>Dumps files in octal and other formats</para>
+<indexterm zone="ch-system-coreutils od"><primary sortas="b-od">od</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="paste">
+<term><command>paste</command></term>
+<listitem>
+<para>Merges the given files, joining sequentially corresponding lines
+side by side, separated by tab characters</para>
+<indexterm zone="ch-system-coreutils paste"><primary sortas="b-paste">paste</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pathchk">
+<term><command>pathchk</command></term>
+<listitem>
+<para>Checks if file names are valid or portable</para>
+<indexterm zone="ch-system-coreutils pathchk"><primary sortas="b-pathchk">pathchk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pinky">
+<term><command>pinky</command></term>
+<listitem>
+<para>Is a lightweight finger client; it reports some information about the given users</para>
+<indexterm zone="ch-system-coreutils pinky"><primary sortas="b-pinky">pinky</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pr">
+<term><command>pr</command></term>
+<listitem>
+<para>Paginates and columnates files for printing</para>
+<indexterm zone="ch-system-coreutils pr"><primary sortas="b-pr">pr</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="printenv">
+<term><command>printenv</command></term>
+<listitem>
+<para>Prints the environment</para>
+<indexterm zone="ch-system-coreutils printenv"><primary sortas="b-printenv">printenv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="printf">
+<term><command>printf</command></term>
+<listitem>
+<para>Prints the given arguments according to the given format, much
+like the C printf function</para>
+<indexterm zone="ch-system-coreutils printf"><primary sortas="b-printf">printf</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ptx">
+<term><command>ptx</command></term>
+<listitem>
+<para>Produces a permuted index from the contents of the given files,
+with each keyword in its context</para>
+<indexterm zone="ch-system-coreutils ptx"><primary sortas="b-ptx">ptx</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pwd">
+<term><command>pwd</command></term>
+<listitem>
+<para>Reports the name of the current working directory</para>
+<indexterm zone="ch-system-coreutils pwd"><primary sortas="b-pwd">pwd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="readlink">
+<term><command>readlink</command></term>
+<listitem>
+<para>Reports the value of the given symbolic link</para>
+<indexterm zone="ch-system-coreutils readlink"><primary sortas="b-readlink">readlink</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rm">
+<term><command>rm</command></term>
+<listitem>
+<para>Removes files or directories</para>
+<indexterm zone="ch-system-coreutils rm"><primary sortas="b-rm">rm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rmdir">
+<term><command>rmdir</command></term>
+<listitem>
+<para>Removes directories if they are empty</para>
+<indexterm zone="ch-system-coreutils rmdir"><primary sortas="b-rmdir">rmdir</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="seq">
+<term><command>seq</command></term>
+<listitem>
+<para>Prints a sequence of numbers within a given range and with a
+given increment</para>
+<indexterm zone="ch-system-coreutils seq"><primary sortas="b-seq">seq</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sha1sum">
+<term><command>sha1sum</command></term>
+<listitem>
+<para>Prints or checks 160-bit Secure Hash Algorithm 1 (SHA1) checksums</para>
+<indexterm zone="ch-system-coreutils sha1sum"><primary sortas="b-sha1sum">sha1sum</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="shred">
+<term><command>shred</command></term>
+<listitem>
+<para>Overwrites the given files repeatedly with complex patterns,
+making it difficult to recover the data</para>
+<indexterm zone="ch-system-coreutils shred"><primary sortas="b-shred">shred</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sleep">
+<term><command>sleep</command></term>
+<listitem>
+<para>Pauses for the given amount of time</para>
+<indexterm zone="ch-system-coreutils sleep"><primary sortas="b-sleep">sleep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sort">
+<term><command>sort</command></term>
+<listitem>
+<para>Sorts the lines from the given files</para>
+<indexterm zone="ch-system-coreutils sort"><primary sortas="b-sort">sort</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="split">
+<term><command>split</command></term>
+<listitem>
+<para>Splits the given file into pieces, by size or by number of lines</para>
+<indexterm zone="ch-system-coreutils split"><primary sortas="b-split">split</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="stat">
+<term><command>stat</command></term>
+<listitem>
+<para>Displays file or filesystem status</para>
+<indexterm zone="ch-system-coreutils stat"><primary sortas="b-stat">stat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="stty">
+<term><command>stty</command></term>
+<listitem>
+<para>Sets or reports terminal line settings</para>
+<indexterm zone="ch-system-coreutils stty"><primary sortas="b-stty">stty</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sum">
+<term><command>sum</command></term>
+<listitem>
+<para>Prints checksum and block counts for each given file</para>
+<indexterm zone="ch-system-coreutils sum"><primary sortas="b-sum">sum</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sync">
+<term><command>sync</command></term>
+<listitem>
+<para>Flushes file system buffers; it forces changed blocks to disk
+and updates the super block</para>
+<indexterm zone="ch-system-coreutils sync"><primary sortas="b-sync">sync</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tac">
+<term><command>tac</command></term>
+<listitem>
+<para>Concatenates the given files in reverse</para>
+<indexterm zone="ch-system-coreutils tac"><primary sortas="b-tac">tac</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tail">
+<term><command>tail</command></term>
+<listitem>
+<para>Prints the last ten lines (or the given number of lines) of each
+given file</para>
+<indexterm zone="ch-system-coreutils tail"><primary sortas="b-tail">tail</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tee">
+<term><command>tee</command></term>
+<listitem>
+<para>Reads from standard input while writing both to standard output
+and to the given files</para>
+<indexterm zone="ch-system-coreutils tee"><primary sortas="b-tee">tee</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="test">
+<term><command>test</command></term>
+<listitem>
+<para>Compares values and checks file types</para>
+<indexterm zone="ch-system-coreutils test"><primary sortas="b-test">test</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="touch">
+<term><command>touch</command></term>
+<listitem>
+<para>Changes file timestamps, setting the access and modification
+times of the given files to the current time; files that do not exist
+are created with zero length</para>
+<indexterm zone="ch-system-coreutils touch"><primary sortas="b-touch">touch</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tr">
+<term><command>tr</command></term>
+<listitem>
+<para>Translates, squeezes, and deletes the given characters from
+standard input</para>
+<indexterm zone="ch-system-coreutils tr"><primary sortas="b-tr">tr</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="true">
+<term><command>true</command></term>
+<listitem>
+<para>Does nothing, successfully; it always exits with a status code
+indicating success</para>
+<indexterm zone="ch-system-coreutils true"><primary sortas="b-true">true</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tsort">
+<term><command>tsort</command></term>
+<listitem>
+<para>Performs a topological sort; it writes a completely ordered list
+according to the partial ordering in a given file</para>
+<indexterm zone="ch-system-coreutils tsort"><primary sortas="b-tsort">tsort</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tty">
+<term><command>tty</command></term>
+<listitem>
+<para>Reports the file name of the terminal connected to standard
+input</para>
+<indexterm zone="ch-system-coreutils tty"><primary sortas="b-tty">tty</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="uname">
+<term><command>uname</command></term>
+<listitem>
+<para>Reports system information</para>
+<indexterm zone="ch-system-coreutils uname"><primary sortas="b-uname">uname</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="unexpand">
+<term><command>unexpand</command></term>
+<listitem>
+<para>Converts spaces to tabs</para>
+<indexterm zone="ch-system-coreutils unexpand"><primary sortas="b-unexpand">unexpand</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="uniq">
+<term><command>uniq</command></term>
+<listitem>
+<para>Discards all but one of successive identical lines</para>
+<indexterm zone="ch-system-coreutils unexpand"><primary sortas="b-unexpand">unexpand</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="unlink">
+<term><command>unlink</command></term>
+<listitem>
+<para>Removes the given file</para>
+<indexterm zone="ch-system-coreutils unlink"><primary sortas="b-unlink">unlink</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="users">
+<term><command>users</command></term>
+<listitem>
+<para>Reports the names of the users currently logged on</para>
+<indexterm zone="ch-system-coreutils users"><primary sortas="b-users">users</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vdir">
+<term><command>vdir</command></term>
+<listitem>
+<para>Is the same as <command>ls -l</command></para>
+<indexterm zone="ch-system-coreutils vdir"><primary sortas="b-vdir">vdir</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="wc">
+<term><command>wc</command></term>
+<listitem>
+<para>Reports the number of lines, words, and bytes for each given
+file, as well as a total line when more than one file is given</para>
+<indexterm zone="ch-system-coreutils wc"><primary sortas="b-wc">wc</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="who">
+<term><command>who</command></term>
+<listitem>
+<para>Reports who is logged on</para>
+<indexterm zone="ch-system-coreutils who"><primary sortas="b-who">who</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="whoami">
+<term><command>whoami</command></term>
+<listitem>
+<para>Reports the user name associated with the current effective user ID</para>
+<indexterm zone="ch-system-coreutils whoami"><primary sortas="b-whoami">whoami</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="yes">
+<term><command>yes</command></term>
+<listitem>
+<para>Repeatedly outputs <quote>y</quote> or a given string until
+killed</para>
+<indexterm zone="ch-system-coreutils yes"><primary sortas="b-yes">yes</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/createfiles.xml b/chapter06/createfiles.xml
index de27a6c76..7e5ddc97a 100644
--- a/chapter06/createfiles.xml
+++ b/chapter06/createfiles.xml
@@ -7,7 +7,10 @@
<title>Creating Essential Symlinks</title>
<?dbhtml filename="createfiles.html"?>
-<para>Create some needed links.</para>
+<para>Some programs hard-wire paths to programs which do not yet
+exist. In order to satisfy these programs, create a number of symbolic
+links which will be replaced by real files throughout the course of
+this chapter after the software has been installed.</para>
<screen><userinput>ln -s /tools/bin/{bash,cat,pwd,stty} /bin
ln -s /tools/bin/perl /usr/bin
@@ -15,3 +18,4 @@ ln -s /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -s bash /bin/sh</userinput></screen>
</sect1>
+
diff --git a/chapter06/creatingdirs.xml b/chapter06/creatingdirs.xml
index b989b7879..e7881c982 100644
--- a/chapter06/creatingdirs.xml
+++ b/chapter06/creatingdirs.xml
@@ -7,7 +7,9 @@
<title>Creating Directories</title>
<?dbhtml filename="creatingdirs.html"?>
-<para>Create a dirs tree:</para>
+<para>It is time to create some structure in the LFS file system.
+Create a directory tree. Issuing the following commands will create a
+standard tree:</para>
<screen><userinput>install -d /{bin,boot,dev,etc/opt,home,lib,mnt}
install -d /{sbin,srv,usr/local,var,opt}
@@ -29,4 +31,37 @@ install -d /var/{opt,cache,lib/{misc,locate},local}
install -d /opt/{bin,doc,include,info}
install -d /opt/{lib,man/man{1,2,3,4,5,6,7,8}}</userinput></screen>
+<para>Directories are, by default, created with permission mode 755,
+but this is not desirable for all directories. In the commands above,
+two changes are made&mdash;one to the home directory of user
+<emphasis>root</emphasis>, and another to the directories for
+temporary files.</para>
+
+<para>The first mode change ensures that not just anybody can enter
+the <filename class="directory">/root</filename> directory&mdash;the same
+as a normal user would do with his or her home directory. The second
+mode change makes sure that any user can write to the <filename
+class="directory">/tmp</filename> and <filename
+class="directory">/var/tmp</filename> directories, but cannot remove
+other users' files from them. The latter is prohibited by the
+so-called <quote>sticky bit,</quote> the highest bit (1) in the 1777
+bit mask.</para>
+
+<sect2>
+<title>FHS Compliance Note</title>
+
+<para>The directory tree is based on the Filesystem Hierarchy Standard
+(FHS) standard (available at <ulink
+url="http://www.pathname.com/fhs/"/>). Besides the tree created above,
+this standard stipulates the existence of <filename
+class="directory">/usr/local/games</filename> and <filename
+class="directory">/usr/share/games</filename>. We do not recommend
+these for a base system, however, feel free to make the system
+FHS-compliant. The FHS is not precise as to the structure of the
+<filename class="directory">/usr/local/share</filename> subdirectory,
+so we created only the directories that are needed.</para>
+
+</sect2>
+
</sect1>
+
diff --git a/chapter06/devices.xml b/chapter06/devices.xml
index 4663f4caf..e46cf8ba5 100644
--- a/chapter06/devices.xml
+++ b/chapter06/devices.xml
@@ -3,20 +3,42 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-devices" xreflabel="devices">
+<sect1 id="ch-system-devices">
<title>Populating /dev</title>
<?dbhtml filename="devices.html"?>
-<para>Create the initial device nodes</para>
+<indexterm zone="ch-system-devices"><primary sortas="e-Devices">/dev/*</primary></indexterm>
+
+<sect2>
+<title>Creating Initial Device Nodes</title>
+
+<para>When the kernel boots the system, it requires the presence of a few device
+nodes, in particular the <filename class="devicefile">console</filename> and
+<filename class="devicefile">null</filename> devices. Create these by
+running the following commands:</para>
<screen><userinput>mknod -m 600 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3</userinput></screen>
+</sect2>
+
+<sect2>
+<title>Mounting ramfs and Populating /dev</title>
-<para>Mount a ramfs in /dev</para>
+<para>The ideal way to populate <filename
+class="directory">/dev</filename> is to mount a <systemitem
+class="filesystem">ramfs</systemitem> onto <filename
+class="directory">/dev</filename>, like <systemitem
+class="filesystem">tmpfs</systemitem>, and create the devices on there
+during each bootup. Since the system has not been booted, it is
+necessary to do what the bootscripts would otherwise do and populate
+<filename class="directory">/dev</filename>. Begin by mounting
+<filename class="directory">/dev</filename>:</para>
<screen><userinput>mount -n -t ramfs none /dev</userinput></screen>
-<para>Create a minimal set of device nodes:</para>
+<!-- Edit Me -->
+<para>Since the Udev package will not be installed until later on in the
+process, create a minimal set of device nodes used for building:</para>
<screen><userinput>mknod -m 622 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3
@@ -26,8 +48,10 @@ mknod -m 666 /dev/tty c 5 0
mknod -m 444 /dev/random c 1 8
mknod -m 444 /dev/urandom c 1 9
chown root:tty /dev/{console,ptmx,tty}</userinput></screen>
+<!-- -->
-<para>Create some symlinks and directories:</para>
+<para>There are some symlinks and directories required by LFS that are
+not created by Udev, so create those here:</para>
<screen><userinput>ln -s /proc/self/fd /dev/fd
ln -s /proc/self/fd/0 /dev/stdin
@@ -37,10 +61,21 @@ ln -s /proc/kcore /dev/core
mkdir /dev/pts
mkdir /dev/shm</userinput></screen>
-<para>Mount the virtual file systems:</para>
+<para>Finally, mount the proper virtual (kernel) file systems on the
+newly-created directories:</para>
<screen><userinput>mount -t devpts -o gid=4,mode=620 none /dev/pts
mount -t tmpfs none /dev/shm</userinput></screen>
+<para>The <command>mount</command> commands executed above may result
+in the following warning message:</para>
+
+<screen><computeroutput>can't open /etc/fstab: No such file or directory.</computeroutput></screen>
+
+<para>This file&mdash;<filename>/etc/fstab</filename>&mdash;has not
+been created yet but is also not required for the file systems to be
+properly mounted. As such, the warning can be safely ignored.</para>
+</sect2>
</sect1>
+
diff --git a/chapter06/diffutils.xml b/chapter06/diffutils.xml
index dfe1e4d2d..3649469f2 100644
--- a/chapter06/diffutils.xml
+++ b/chapter06/diffutils.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-diffutils" xreflabel="Diffutils" role="wrap">
+<sect1 id="ch-system-diffutils" role="wrap">
<title>Diffutils-&diffutils-version;</title>
<?dbhtml filename="diffutils.html"?>
<indexterm zone="ch-system-diffutils"><primary sortas="a-Diffutils">Diffutils</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Diffutils package contains programs that show the differences
+between files or directories.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>7.5 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Diffutils installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils, GCC,
+Gettext, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -30,7 +37,9 @@
<screen><userinput>make</userinput></screen>
-<para>Install it:</para>
+<para>This package does not come with a test suite.</para>
+
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -39,8 +48,48 @@
<sect2 id="contents-diffutils" role="content"><title>Contents of Diffutils</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>cmp, diff, diff3, and sdiff</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="cmp">
+<term><command>cmp</command></term>
+<listitem>
+<para>Compares two files and reports whether or in which bytes they differ</para>
+<indexterm zone="ch-system-diffutils cmp"><primary sortas="b-cmp">cmp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="diff">
+<term><command>diff</command></term>
+<listitem>
+<para>Compares two files or directories and reports which lines in the files differ</para>
+<indexterm zone="ch-system-diffutils diff"><primary sortas="b-diff">diff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="diff3">
+<term><command>diff3</command></term>
+<listitem>
+<para>Compares three files line by line</para>
+<indexterm zone="ch-system-diffutils diff3"><primary sortas="b-diff3">diff3</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sdiff">
+<term><command>sdiff</command></term>
+<listitem>
+<para>Merges two files and interactively outputs the results</para>
+<indexterm zone="ch-system-diffutils sdiff"><primary sortas="b-sdiff">sdiff</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/e2fsprogs.xml b/chapter06/e2fsprogs.xml
index 2a134265c..b3e5ecc30 100644
--- a/chapter06/e2fsprogs.xml
+++ b/chapter06/e2fsprogs.xml
@@ -3,13 +3,16 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-e2fsprogs" xreflabel="E2fsprogs" role="wrap">
+<sect1 id="ch-system-e2fsprogs" role="wrap">
<title>E2fsprogs-&e2fsprogs-version;</title>
<?dbhtml filename="e2fsprogs.html"?>
<indexterm zone="ch-system-e2fsprogs"><primary sortas="a-E2fsprogs">E2fsprogs</primary></indexterm>
<sect2 role="package"><title/>
+<para>The E2fsprogs package contains the utilities for handling the
+<systemitem class="filesystem">ext2</systemitem> file system. It also supports
+the <systemitem class="filesystem">ext3</systemitem> journaling file system.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,12 +20,18 @@
<seglistitem><seg>0.6 SBU</seg><seg>4.9 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>E2fsprogs installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils,
+Diffutils, Gawk, GCC, Gettext, Glibc, Grep, Make, Sed, and Texinfo</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of E2fsprogs</title>
-<para>Create a build directory:</para>
+<para>It is recommended that E2fsprogs be built in a subdirectory of the source tree:
+</para>
<screen><userinput>mkdir build
cd build</userinput></screen>
@@ -32,6 +41,39 @@ cd build</userinput></screen>
<screen><userinput>../configure --prefix=/usr --with-root-prefix="" \
--enable-elf-shlibs --disable-evms</userinput></screen>
+<para>The meaning of the configure options:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>--with-root-prefix=""</parameter></term>
+<listitem><para>Certain programs (such as the
+<command>e2fsck</command> program) are considered essential programs.
+When, for example, <filename class="directory">/usr</filename> is not
+mounted, these essential programs need to be available. They belong in
+directories like <filename class="directory">/lib</filename> and
+<filename class="directory">/sbin</filename>. If this option is not
+passed to E2fsprogs' configure, the programs are installed into the
+<filename class="directory">/usr</filename> directory, which is not
+where they should be.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><parameter>--enable-elf-shlibs</parameter></term>
+<listitem><para>This creates the shared libraries which some programs
+in this package use.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><parameter>--disable-evms</parameter></term>
+<listitem><para>This disables the building of the Enterprise Volume
+Management System (EVMS) plugin. This plugin is not up-to-date with
+the latest EVMS internal interfaces and EVMS is not installed as part
+of a base LFS system, so the plugin is not required. See the EVMS
+website at <ulink url="http://evms.sourceforge.net/"/> for more
+information regarding EVMS.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
@@ -43,16 +85,296 @@ cd build</userinput></screen>
<screen><userinput>make install</userinput></screen>
-<para>Also install the shared libraries:</para>
+<para>Install the shared libraries:</para>
<screen><userinput>make install-libs</userinput></screen>
</sect2>
+
+
<sect2 id="contents-e2fsprogs" role="content"><title>Contents of E2fsprogs</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>badblocks, blkid, chattr,
+compile_et, debugfs, dumpe2fs, e2fsck, e2image, e2label, findfs, fsck,
+fsck.ext2, fsck.ext3, logsave, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3,
+mklost+found, resize2fs, tune2fs, and uuidgen.</seg>
+<seg>libblkid.[a,so], libcom_err.[a,so], libe2p.[a,so],
+libext2fs.[a,so], libss.[a,so], and libuuid.[a,so]</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="badblocks">
+<term><command>badblocks</command></term>
+<listitem>
+<para>Searches a device (usually a disk partition) for bad blocks</para>
+<indexterm zone="ch-system-e2fsprogs badblocks"><primary sortas="b-badblocks">badblocks</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="blkid">
+<term><command>blkid</command></term>
+<listitem>
+<para>A command line utility to locate and print block device attributes</para>
+<indexterm zone="ch-system-e2fsprogs blkid"><primary sortas="b-blkid">blkid</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="chattr">
+<term><command>chattr</command></term>
+<listitem>
+<para>Changes the attributes of files on an <systemitem
+class="filesystem">ext2</systemitem> file system; it also changes <systemitem
+class="filesystem">ext3</systemitem> file systems, the journaling version of
+<systemitem class="filesystem">ext2</systemitem> file systems</para>
+<indexterm zone="ch-system-e2fsprogs chattr"><primary sortas="b-chattr">chattr</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="compile_et">
+<term><command>compile_et</command></term>
+<listitem>
+<para>An error table compiler; it converts a table of error-code names and
+messages into a C source file suitable for use with the <filename
+class="libraryfile">com_err</filename> library</para>
+<indexterm zone="ch-system-e2fsprogs compile_et"><primary sortas="b-compile_et">compile_et</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="debugfs">
+<term><command>debugfs</command></term>
+<listitem>
+<para>A file system debugger; it can be used to examine and change the
+state of an <systemitem class="filesystem">ext2</systemitem> file system</para>
+<indexterm zone="ch-system-e2fsprogs debugfs"><primary sortas="b-debugfs">debugfs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="dumpe2fs">
+<term><command>dumpe2fs</command></term>
+<listitem>
+<para>Prints the super block and blocks group information for the file
+system present on a given device</para>
+<indexterm zone="ch-system-e2fsprogs dumpe2fs"><primary sortas="b-dumpe2fs">dumpe2fs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="e2fsck">
+<term><command>e2fsck</command></term>
+<listitem>
+<para>Is used to check, and optionally repair <systemitem
+class="filesystem">ext2</systemitem> file systems and <systemitem
+class="filesystem">ext3</systemitem> file systems</para>
+<indexterm zone="ch-system-e2fsprogs e2fsck"><primary sortas="b-e2fsck">e2fsck</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="e2image">
+<term><command>e2image</command></term>
+<listitem>
+<para>Is used to save critical <systemitem class="filesystem">ext2</systemitem>
+file system data to a file</para>
+<indexterm zone="ch-system-e2fsprogs e2image"><primary sortas="b-e2image">e2image</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="e2label">
+<term><command>e2label</command></term>
+<listitem>
+<para>Displays or changes the file system label on the <systemitem
+class="filesystem">ext2</systemitem> file system present on a given device</para>
+<indexterm zone="ch-system-e2fsprogs e2label"><primary sortas="b-e2label">e2label</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="findfs">
+<term><command>findfs</command></term>
+<listitem>
+<para>Finds a file system by label or Universally Unique Identifier (UUID)</para>
+<indexterm zone="ch-system-e2fsprogs findfs"><primary sortas="b-findfs">findfs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fsck">
+<term><command>fsck</command></term>
+<listitem>
+<para>Is used to check, and optionally repair, file systems</para>
+<indexterm zone="ch-system-e2fsprogs fsck"><primary sortas="b-fsck">fsck</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fsck.ext2">
+<term><command>fsck.ext2</command></term>
+<listitem>
+<para>By default checks <systemitem class="filesystem">ext2</systemitem>
+file systems</para>
+<indexterm zone="ch-system-e2fsprogs fsck.ext2"><primary
+sortas="b-fsck.ext2">fsck.ext2</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fsck.ext3">
+<term><command>fsck.ext3</command></term>
+<listitem>
+<para>By default checks <systemitem class="filesystem">ext3</systemitem>
+file systems</para>
+<indexterm zone="ch-system-e2fsprogs fsck.ext3"><primary
+sortas="b-fsck.ext3">fsck.ext3</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="logsave">
+<term><command>logsave</command></term>
+<listitem>
+<para>Saves the output of a command in a log file</para>
+<indexterm zone="ch-system-e2fsprogs logsave"><primary sortas="b-logsave">logsave</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lsattr">
+<term><command>lsattr</command></term>
+<listitem>
+<para>Lists the attributes of files on a second extended file system</para>
+<indexterm zone="ch-system-e2fsprogs lsattr"><primary sortas="b-lsattr">lsattr</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mk_cmds">
+<term><command>mk_cmds</command></term>
+<listitem>
+<para>Converts a table of command names and helps messages into a C
+source file suitable for use with the <filename
+class="libraryfile">libss</filename> subsystem library</para>
+<indexterm zone="ch-system-e2fsprogs mk_cmds"><primary sortas="b-mk_cmds">mk_cmds</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mke2fs">
+<term><command>mke2fs</command></term>
+<listitem>
+<para>Is used to create a second extended file system on the given
+device</para>
+<indexterm zone="ch-system-e2fsprogs mke2fs"><primary sortas="b-mke2fs">mke2fs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkfs.ext2">
+<term><command>mkfs.ext2</command></term>
+<listitem>
+<para>By default creates <systemitem class="filesystem">ext2</systemitem>
+file systems</para>
+<indexterm zone="ch-system-e2fsprogs mkfs.ext2"><primary
+sortas="b-mkfs.ext2">mkfs.ext2</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkfs.ext3">
+<term><command>mkfs.ext3</command></term>
+<listitem>
+<para>By default creates <systemitem class="filesystem">ext3</systemitem>
+file systems</para>
+<indexterm zone="ch-system-e2fsprogs mkfs.ext3"><primary
+sortas="b-mkfs.ext3">mkfs.ext3</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mklost-found">
+<term><command>mklost+found</command></term>
+<listitem>
+<para>Used to create a <filename class="directory">lost+found</filename>
+directory on an <systemitem class="filesystem">ext2</systemitem> file system;
+it pre-allocates disk blocks to this directory to lighten the task of
+<command>e2fsck</command></para>
+<indexterm zone="ch-system-e2fsprogs mklost-found"><primary sortas="b-mklost+found">mklost+found</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="resize2fs">
+<term><command>resize2fs</command></term>
+<listitem>
+<para>Can be used to enlarge or shrink an <systemitem
+class="filesystem">ext2</systemitem> file system</para>
+<indexterm zone="ch-system-e2fsprogs resize2fs"><primary sortas="b-resize2fs">resize2fs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tune2fs">
+<term><command>tune2fs</command></term>
+<listitem>
+<para>Adjusts tunable file system parameters on an <systemitem
+class="filesystem">ext2</systemitem> file system</para>
+<indexterm zone="ch-system-e2fsprogs tune2fs"><primary sortas="b-tune2fs">tune2fs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="uuidgen">
+<term><command>uuidgen</command></term>
+<listitem>
+<para>Creates new UUIDs. Each new UUID can reasonably be considered unique
+among all UUIDs created, on the local system and on other systems, in the
+past and in the future</para>
+<indexterm zone="ch-system-e2fsprogs uuidgen"><primary sortas="b-uuidgen">uuidgen</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libblkid">
+<term><filename class="libraryfile">libblkid</filename></term>
+<listitem>
+<para>Contains routines for device identification and token extraction</para>
+<indexterm zone="ch-system-e2fsprogs libblkid"><primary sortas="c-libblkid">libblkid</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libcom_err">
+<term><filename class="libraryfile">libcom_err</filename></term>
+<listitem>
+<para>The common error display routine</para>
+<indexterm zone="ch-system-e2fsprogs libcom_err"><primary sortas="c-libcom_err">libcom_err</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libe2p">
+<term><filename class="libraryfile">libe2p</filename></term>
+<listitem>
+<para>Used by <command>dumpe2fs</command>, <command>chattr</command>,
+and <command>lsattr</command></para>
+<indexterm zone="ch-system-e2fsprogs libe2p"><primary sortas="c-libe2p">libe2p</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libext2fs">
+<term><filename class="libraryfile">libext2fs</filename></term>
+<listitem>
+<para>Contains routines to enable user-level programs to manipulate an
+<systemitem class="filesystem">ext2</systemitem> file system</para>
+<indexterm zone="ch-system-e2fsprogs libext2fs"><primary sortas="c-libext2fs">libext2fs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libss">
+<term><filename class="libraryfile">libss</filename></term>
+<listitem>
+<para>Used by <command>debugfs</command></para>
+<indexterm zone="ch-system-e2fsprogs libss"><primary sortas="c-libss">libss</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libuuid">
+<term><filename class="libraryfile">libuuid</filename></term>
+<listitem>
+<para>Contains routines for generating unique identifiers for objects
+that may be accessible beyond the local system</para>
+<indexterm zone="ch-system-e2fsprogs libuuid"><primary sortas="c-libuuid">libuuid</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/file.xml b/chapter06/file.xml
index 6079e8ebc..639353cd2 100644
--- a/chapter06/file.xml
+++ b/chapter06/file.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-file" xreflabel="File" role="wrap">
+<sect1 id="ch-system-file" role="wrap">
<title>File-&file-version;</title>
<?dbhtml filename="file.html"?>
<indexterm zone="ch-system-file"><primary sortas="a-File">File</primary></indexterm>
<sect2 role="package"><title/>
+<para>The File package contains a utility for determining the type of files.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>6.3 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>File installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Glibc, Grep, Make, Sed, and Zlib</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -30,7 +36,7 @@
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -39,8 +45,36 @@
<sect2 id="contents-file" role="content"><title>Contents of File</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed library</segtitle>
+<seglistitem><seg>file</seg><seg>libmagic.[a,so]</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="file">
+<term><command>file</command></term>
+<listitem>
+<para>Tries to classify each given file; it does this by performing
+several tests&mdash;file system tests, magic number tests, and language
+tests</para>
+<indexterm zone="ch-system-file file"><primary sortas="b-file">file</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libmagic">
+<term><filename class="libraryfile">libmagic</filename></term>
+<listitem>
+<para>Contains routines for magic number recognition, used by the
+<command>file</command> program</para>
+<indexterm zone="ch-system-file libmagic"><primary sortas="c-libmagic">libmagic</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/findutils.xml b/chapter06/findutils.xml
index 15e61801c..1bbbccc06 100644
--- a/chapter06/findutils.xml
+++ b/chapter06/findutils.xml
@@ -3,13 +3,17 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-findutils" xreflabel="Findutils" role="wrap">
+<sect1 id="ch-system-findutils" role="wrap">
<title>Findutils-&findutils-version;</title>
<?dbhtml filename="findutils.html"?>
<indexterm zone="ch-system-findutils"><primary sortas="a-Findutils">Findutils</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Findutils package contains programs to find files. Processes
+are provided to recursively search through a directory tree and to
+create, maintain, and search a database (often faster than the recursive
+find, but unreliable if the database has not been recently updated).</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +21,11 @@
<seglistitem><seg>0.2 SBU</seg><seg>7.5 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Findutils installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils,
+Diffutils, GCC, Gettext, Glibc, Grep, Make and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -27,6 +36,10 @@
<screen><userinput>./configure --prefix=/usr --libexecdir=/usr/lib/locate \
--localstatedir=/var/lib/locate</userinput></screen>
+<para>The <parameter>localstatedir</parameter> directive above changes the
+location of the <command>locate</command> database to be in <filename
+class="directory">/var/lib/locate</filename>, which is FHS-compliant.</para>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
@@ -34,17 +47,86 @@
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
</sect2>
-
<sect2 id="contents-findutils" role="content"><title>Contents of Findutils</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>bigram, code, find, frcode, locate, updatedb, and xargs</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="bigram">
+<term><command>bigram</command></term>
+<listitem>
+<para>Was formerly used to produce <command>locate</command> databases</para>
+<indexterm zone="ch-system-findutils bigram"><primary sortas="b-bigram">bigram</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="code">
+<term><command>code</command></term>
+<listitem>
+<para>Was formerly used to produce <command>locate</command>
+databases; it is the ancestor of <command>frcode</command>.</para>
+<indexterm zone="ch-system-findutils code"><primary sortas="b-code">code</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="find">
+<term><command>find</command></term>
+<listitem>
+<para>Searches given directory trees for files matching the specified criteria</para>
+<indexterm zone="ch-system-findutils find"><primary sortas="b-find">find</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="frcode">
+<term><command>frcode</command></term>
+<listitem>
+<para>Is called by <command>updatedb</command> to compress the list of file names; it uses
+front-compression, reducing the database size by a factor of four to
+five.</para>
+<indexterm zone="ch-system-findutils frcode"><primary sortas="b-frcode">frcode</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="locate">
+<term><command>locate</command></term>
+<listitem>
+<para>Searches through a database of file names and reports the names
+that contain a given string or match a given pattern</para>
+<indexterm zone="ch-system-findutils locate"><primary sortas="b-locate">locate</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="updatedb">
+<term><command>updatedb</command></term>
+<listitem>
+<para>Updates the <command>locate</command> database; it scans
+the entire file system (including other file systems that are currently mounted,
+unless told not to) and puts every file name it finds into the database</para>
+<indexterm zone="ch-system-findutils updatedb"><primary sortas="b-updatedb">updatedb</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="xargs">
+<term><command>xargs</command></term>
+<listitem>
+<para>Can be used to apply a given command to a list of files</para>
+<indexterm zone="ch-system-findutils xargs"><primary sortas="b-xargs">xargs</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/flex.xml b/chapter06/flex.xml
index 9772cfcf4..90282002b 100644
--- a/chapter06/flex.xml
+++ b/chapter06/flex.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-flex" xreflabel="Flex" role="wrap">
+<sect1 id="ch-system-flex" role="wrap">
<title>Flex-&flex-version;</title>
<?dbhtml filename="flex.html"?>
<indexterm zone="ch-system-flex"><primary sortas="a-Flex">Flex</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Flex package contains a utility for generating programs that
+recognize patterns in text.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,20 +19,28 @@
<seglistitem><seg>0.1 SBU</seg><seg>3.4 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Flex installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Bison, Coreutils, Diffutils,
+GCC, Gettext, Glibc, Grep, M4, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Flex</title>
-<para>Apply a patch:</para>
+<para>Flex contains several known bugs. Fix these with the following patch:</para>
<screen><userinput>patch -Np1 -i ../flex-&flex-version;-debian_fixes-2.patch</userinput></screen>
-<para>Touch the man-page:</para>
+<para>The GNU autotools detects that the Flex source code has been
+modified by the previous patch and tries to update the manual page
+accordingly. This does not work correctly on many systems, and the
+default page is fine, so make sure it does not get regenerated:</para>
<screen><userinput>touch doc/flex.1</userinput></screen>
-<para>Now prepare Flex for compilation:</para>
+<para>Prepare Flex for compilation:</para>
<screen><userinput>./configure --prefix=/usr</userinput></screen>
@@ -41,15 +51,21 @@
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>Create a symlink:</para>
+<para>There are some packages that expect to find the
+<filename class="libraryfile">lex</filename> library in <filename
+class="directory">/usr/lib</filename>. Create a symlink to account for
+this:</para>
<screen><userinput>ln -s libfl.a /usr/lib/libl.a</userinput></screen>
-<para>Create a lex script:</para>
+<para>A few programs do not know about <command>flex</command> yet and
+try to run its predecessor, <command>lex</command>. To support those
+programs, create a wrapper script named <filename>lex</filename> that
+calls <filename>flex</filename> in <command>lex</command> emulation mode:</para>
<screen><userinput>cat &gt; /usr/bin/lex &lt;&lt; "EOF"
<literal>#!/bin/sh
@@ -66,8 +82,54 @@ chmod 755 /usr/bin/lex</userinput></screen>
<sect2 id="contents-flex" role="content"><title>Contents of Flex</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed library</segtitle>
+<seglistitem><seg>flex, flex++ (link to flex), and lex</seg>
+<seg>libfl.a</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="flex">
+<term><command>flex</command></term>
+<listitem>
+<para>A tool for generating programs that recognize patterns in text;
+it allows for the versatility to specify the rules for
+pattern-finding, eradicating the need to develop a specialized
+program</para>
+<indexterm zone="ch-system-flex flex"><primary sortas="b-flex">flex</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="flex-">
+<term><command>flex++</command></term>
+<listitem>
+<para>Invokes a version of <command>flex</command> that is used exclusively for C++ scanners</para>
+<indexterm zone="ch-system-flex flex-"><primary sortas="b-flex++">flex++</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lex">
+<term><command>lex</command></term>
+<listitem>
+<para>Script that runs <command>flex</command> in <command>lex</command>
+emulation mode</para>
+<indexterm zone="ch-system-flex lex"><primary sortas="b-lex">lex</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libfl.a">
+<term><filename class="libraryfile">libfl.a</filename></term>
+<listitem>
+<para>The <filename class="libraryfile">flex</filename> library</para>
+<indexterm zone="ch-system-flex libfl.a"><primary sortas="c-libfl.a">libfl.a</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/gawk.xml b/chapter06/gawk.xml
index 02d6cd526..c9968b531 100644
--- a/chapter06/gawk.xml
+++ b/chapter06/gawk.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-gawk" xreflabel="Gawk" role="wrap">
+<sect1 id="ch-system-gawk" role="wrap">
<title>Gawk-&gawk-version;</title>
<?dbhtml filename="gawk.html"?>
<indexterm zone="ch-system-gawk"><primary sortas="a-Gawk">Gawk</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Gawk package contains programs for manipulating text files.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.2 SBU</seg><seg>17 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Gawk installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils,
+Diffutils, GCC, Gettext, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -33,7 +39,7 @@
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -42,8 +48,82 @@
<sect2 id="contents-gawk" role="content"><title>Contents of Gawk</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>awk (link to gawk), gawk, gawk-&gawk-version;, grcat, igawk,
+pgawk, pgawk-&gawk-version;, and pwcat</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="awk">
+<term><command>awk</command></term>
+<listitem>
+<para>A link to <command>gawk</command></para>
+<indexterm zone="ch-system-gawk awk"><primary sortas="b-awk">awk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gawk">
+<term><command>gawk</command></term>
+<listitem>
+<para>A program for manipulating text files; it is the GNU
+implementation of <command>awk</command></para>
+<indexterm zone="ch-system-gawk gawk"><primary sortas="b-gawk">gawk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gawk-version">
+<term><command>gawk-&gawk-version;</command></term>
+<listitem>
+<para>A hard link to <command>gawk</command></para>
+<indexterm zone="ch-system-gawk gawk-version"><primary sortas="b-gawk-&gawk-version;">gawk-&gawk-version;</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grcat">
+<term><command>grcat</command></term>
+<listitem>
+<para>Dumps the group database <filename>/etc/group</filename></para>
+<indexterm zone="ch-system-gawk grcat"><primary sortas="b-grcat">grcat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="igawk">
+<term><command>igawk</command></term>
+<listitem>
+<para>Gives <command>gawk</command> the ability to include files</para>
+<indexterm zone="ch-system-gawk igawk"><primary sortas="b-igawk">igawk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pgawk">
+<term><command>pgawk</command></term>
+<listitem>
+<para>The profiling version of <command>gawk</command></para>
+<indexterm zone="ch-system-gawk pgawk"><primary sortas="b-pgawk">pgawk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pgawk-version">
+<term><command>pgawk-&gawk-version;</command></term>
+<listitem>
+<para>Hard link to <command>pgawk</command></para>
+<indexterm zone="ch-system-gawk pgawk-version"><primary sortas="b-pgawk-&gawk-version;">pgawk-&gawk-version;</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pwcat">
+<term><command>pwcat</command></term>
+<listitem>
+<para>Dumps the password database <filename>/etc/passwd</filename></para>
+<indexterm zone="ch-system-gawk pwcat"><primary sortas="b-pwcat">pwcat</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/gcc.xml b/chapter06/gcc.xml
index bb0e6a172..4015b693a 100644
--- a/chapter06/gcc.xml
+++ b/chapter06/gcc.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-gcc" xreflabel="GCC" role="wrap">
+<sect1 id="ch-system-gcc" role="wrap">
<title>GCC-&gcc-version;</title>
<?dbhtml filename="gcc.html"?>
<indexterm zone="ch-system-gcc"><primary sortas="a-GCC">GCC</primary></indexterm>
<sect2 role="package"><title/>
+<para>The GCC package contains the GNU compiler collection, which includes
+the C and C++ compilers.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,29 +19,54 @@
<seglistitem><seg>11.7 SBU</seg><seg>294 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>GCC installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils, Findutils,
+Gawk, Gettext, Glibc, Grep, Make, Perl, Sed, and Texinfo</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of GCC</title>
-<para>Apply a patch:</para>
+<para>This package is known to have issues when its default
+optimization flags (including the <parameter>-march</parameter> and
+<parameter>-mcpu</parameter> options) are changed. If any environment
+variables that override default optimizations have been defined, such
+as <envar>CFLAGS</envar> and <envar>CXXFLAGS</envar>,
+unset them when building GCC.</para>
+
+<para>Unpack both the gcc-core and the gcc-g++ tarballs&mdash;they will
+unpack into the same directory. Likewise, extract the gcc-testsuite
+package. The full GCC package contains additional compilers.
+Instructions for building these can be found at <ulink
+url="&blfs-root;view/svn/general/gcc.html"/>.</para>
+
+<para>Apply only the No-Fixincludes patch (not the Specs patch) also
+used in the previous chapter:</para>
<screen><userinput>patch -Np1 -i ../gcc-&gcc-version;-no_fixincludes-1.patch</userinput></screen>
-<para>Apply another patch:</para>
+<para>GCC fails to compile some packages outside of a base Linux From Scratch
+install (e.g., Mozilla and kdegraphics) when used in conjunction with newer
+versions of Binutils. Apply the following patch to fix this issue:</para>
<screen><userinput>patch -Np1 -i ../gcc-&gcc-version;-linkonce-1.patch</userinput></screen>
-<para>Apply a sed substitution:</para>
+<para>Apply a sed substitution that will suppress the installation of
+<filename class="libraryfile">libiberty.a</filename>. The version of
+<filename class="libraryfile">libiberty.a</filename> provided by
+Binutils will be used instead:</para>
<screen><userinput>sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in</userinput></screen>
-<para>Create a build directory:</para>
+<para>The GCC documentation recommends building GCC outside of the source
+directory in a dedicated build directory:</para>
<screen><userinput>mkdir ../gcc-build
cd ../gcc-build</userinput></screen>
-<para>Now prepare GCC for compilation:</para>
+<para>Prepare GCC for compilation:</para>
<screen><userinput>../gcc-&gcc-version;/configure --prefix=/usr \
--libexecdir=/usr/lib --enable-shared \
@@ -50,35 +77,140 @@ cd ../gcc-build</userinput></screen>
<screen><userinput>make</userinput></screen>
-<para>Test the results):</para>
+<important><para>In this section, the test suite for GCC is considered
+critical. Do not skip it under any circumstance.</para></important>
+
+<para>Test the results, but do not stop at errors:</para>
<screen><userinput>make -k check</userinput></screen>
-<para>The test suite notes from <xref linkend="ch-tools-gcc-pass2"/> are still very
-much appropriate here.</para>
+<para>Some of the errors are known issues and were noted in the
+previous chapter. The test suite notes from <xref
+linkend="ch-tools-gcc-pass2" role=","/> are still relevant here. Be sure to
+refer back to them as necessary.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>Create this symlink:</para>
+<para>Some packages expect the C PreProcessor to be installed in the
+<filename class="directory">/lib</filename> directory.
+To support those packages, create this symlink:</para>
<screen><userinput>ln -s ../usr/bin/cpp /lib</userinput></screen>
-<para>Create another symlink:</para>
+<para>Many packages use the name <command>cc</command> to call the C
+compiler. To satisfy those packages, create a symlink:</para>
<screen><userinput>ln -s gcc /usr/bin/cc</userinput></screen>
-<note><para>Refer back to <xref linkend="ch-system-readjusting"/>
-and repeat the check.</para></note>
+<note><para>At this point, it is strongly recommended to repeat the
+sanity check performed earlier in this chapter. Refer back to <xref
+linkend="ch-system-readjusting" role=","/> and repeat the check. If the results
+are in error, then the most likely reason is that the GCC Specs patch
+from <xref linkend="chapter-temporary-tools"/> was erroneously applied
+here.</para></note>
</sect2>
<sect2 id="contents-gcc" role="content"><title>Contents of GCC</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>c++, cc (link to gcc), cpp, g++, gcc, gccbug, and
+gcov</seg>
+<seg>libgcc.a, libgcc_eh.a, libgcc_s.so, libstdc++.[a,so], and libsupc++.a</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="cc">
+<term><command>cc</command></term>
+<listitem>
+<para>The C compiler</para>
+<indexterm zone="ch-system-gcc cc"><primary sortas="b-cc">cc</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="cpp">
+<term><command>cpp</command></term>
+<listitem>
+<para>The C preprocessor; it is used by the compiler to expand the
+#include, #define, and similar statements in the source files</para>
+<indexterm zone="ch-system-gcc cpp"><primary sortas="b-cpp">cpp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="c">
+<term><command>c++</command></term>
+<listitem>
+<para>The C++ compiler</para>
+<indexterm zone="ch-system-gcc c"><primary sortas="b-c++">c++</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="g">
+<term><command>g++</command></term>
+<listitem>
+<para>The C++ compiler</para>
+<indexterm zone="ch-system-gcc g"><primary sortas="b-g++">g++</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gcc">
+<term><command>gcc</command></term>
+<listitem>
+<para>The C compiler</para>
+<indexterm zone="ch-system-gcc gcc"><primary sortas="b-gcc">gcc</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gccbug">
+<term><command>gccbug</command></term>
+<listitem>
+<para>A shell script used to help create useful bug reports</para>
+<indexterm zone="ch-system-gcc gccbug"><primary sortas="b-gccbug">gccbug</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gcov">
+<term><command>gcov</command></term>
+<listitem>
+<para>A coverage testing tool; it is used to analyze programs to
+determine where optimizations will have the most effect</para>
+<indexterm zone="ch-system-gcc gcov"><primary sortas="b-gcov">gcov</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libgcc">
+<term><filename class="libraryfile">libgcc</filename></term>
+<listitem>
+<para>Contains run-time support for <command>gcc</command></para>
+<indexterm zone="ch-system-gcc libgcc"><primary sortas="c-libgcc*">libgcc*</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libstdc">
+<term><filename class="libraryfile">libstdc++</filename></term>
+<listitem>
+<para>The standard C++ library</para>
+<indexterm zone="ch-system-gcc libstdc"><primary sortas="c-libstdc++">libstdc++</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libsupc">
+<term><filename class="libraryfile">libsupc++</filename></term>
+<listitem>
+<para>Provides supporting routines for the C++ programming language</para>
+<indexterm zone="ch-system-gcc libsupc"><primary sortas="c-libsupc++">libsupc++</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/gettext.xml b/chapter06/gettext.xml
index 04e6b233e..50d338227 100644
--- a/chapter06/gettext.xml
+++ b/chapter06/gettext.xml
@@ -3,13 +3,16 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-gettext" xreflabel="Gettext" role="wrap">
+<sect1 id="ch-system-gettext" role="wrap">
<title>Gettext-&gettext-version;</title>
<?dbhtml filename="gettext.html"?>
<indexterm zone="ch-system-gettext"><primary sortas="a-Gettext">Gettext</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Gettext package contains utilities for internationalization and
+localization. These allow programs to be compiled with NLS, enabling them
+to output messages in the user's native language.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +20,11 @@
<seglistitem><seg>0.5 SBU</seg><seg>55 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Gettext installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Bison, Coreutils,
+Diffutils, Gawk, GCC, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -31,9 +39,10 @@
<screen><userinput>make</userinput></screen>
<para>To test the results, issue:
-<userinput>make check</userinput>.</para>
+<userinput>make check</userinput>. This takes a very long time, around
+7 SBUs.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -42,8 +51,257 @@
<sect2 id="contents-gettext" role="content"><title>Contents of Gettext</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>autopoint, config.charset, config.rpath, envsubst, gettext,
+gettextize, hostname, msgattrib, msgcat, msgcmp, msgcomm, msgconv, msgen,
+msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt, msguniq,
+ngettext, and xgettext</seg>
+<seg>libasprintf[a,so], libgettextlib[a,so], libgettextpo[a,so] and libgettextsrc[a,so]</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="autopoint">
+<term><command>autopoint</command></term>
+<listitem>
+<para>Copies standard Gettext infrastructure files into a source package</para>
+<indexterm zone="ch-system-gettext autopoint"><primary sortas="b-autopoint">autopoint</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="config.charset">
+<term><command>config.charset</command></term>
+<listitem>
+<para>Outputs a system-dependent table of character encoding aliases</para>
+<indexterm zone="ch-system-gettext config.charset"><primary sortas="b-config.charset">config.charset</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="config.rpath">
+<term><command>config.rpath</command></term>
+<listitem>
+<para>Outputs a system-dependent set of variables, describing how to set the
+runtime search path of shared libraries in an executable</para>
+<indexterm zone="ch-system-gettext config.rpath"><primary sortas="b-config.rpath">config.rpath</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="envsubst">
+<term><command>envsubst</command></term>
+<listitem>
+<para>Substitutes environment variables in shell format strings</para>
+<indexterm zone="ch-system-gettext envsubst"><primary sortas="b-envsubst">envsubst</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gettext">
+<term><command>gettext</command></term>
+<listitem>
+<para>Translates a natural language message into the user's language
+by looking up the translation in a message catalog</para>
+<indexterm zone="ch-system-gettext gettext"><primary sortas="b-gettext">gettext</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gettextize">
+<term><command>gettextize</command></term>
+<listitem>
+<para>Copies all standard Gettext files into the given top-level
+directory of a package to begin internationalizing it</para>
+<indexterm zone="ch-system-gettext gettextize"><primary sortas="b-gettextize">gettextize</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hostname-gettext">
+<term><command>hostname</command></term>
+<listitem>
+<para>Displays a network hostname in various forms</para>
+<indexterm zone="ch-system-gettext hostname-gettext"><primary sortas="b-hostname-gettext">hostname</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgattrib">
+<term><command>msgattrib</command></term>
+<listitem>
+<para>Filters the messages of a translation catalog according to their
+attributes and manipulates the attributes</para>
+<indexterm zone="ch-system-gettext msgattrib"><primary sortas="b-msgattrib">msgattrib</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgcat">
+<term><command>msgcat</command></term>
+<listitem>
+<para>Concatenates and merges the given <filename class="extension">.po</filename> files</para>
+<indexterm zone="ch-system-gettext msgcat"><primary sortas="b-msgcat">msgcat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgcmp">
+<term><command>msgcmp</command></term>
+<listitem>
+<para>Compares two <filename class="extension">.po</filename>
+files to check that both contain the same set of msgid strings</para>
+<indexterm zone="ch-system-gettext msgcmp"><primary sortas="b-msgcmp">msgcmp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgcomm">
+<term><command>msgcomm</command></term>
+<listitem>
+<para>Finds the messages that are common to
+to the given <filename class="extension">.po</filename> files</para>
+<indexterm zone="ch-system-gettext msgcomm"><primary sortas="b-msgcomm">msgcomm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgconv">
+<term><command>msgconv</command></term>
+<listitem>
+<para>Converts a translation catalog to a different character encoding</para>
+<indexterm zone="ch-system-gettext msgconv"><primary sortas="b-msgconv">msgconv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgen">
+<term><command>msgen</command></term>
+<listitem>
+<para>Creates an English translation catalog</para>
+<indexterm zone="ch-system-gettext msgen"><primary sortas="b-msgen">msgen</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgexec">
+<term><command>msgexec</command></term>
+<listitem>
+<para>Applies a command to all translations of a translation catalog</para>
+<indexterm zone="ch-system-gettext msgexec"><primary sortas="b-msgexec">msgexec</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgfilter">
+<term><command>msgfilter</command></term>
+<listitem>
+<para>Applies a filter to all translations of a translation catalog</para>
+<indexterm zone="ch-system-gettext msgfilter"><primary sortas="b-msgfilter">msgfilter</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgfmt">
+<term><command>msgfmt</command></term>
+<listitem>
+<para>Generates a binary message catalog from from a translation catalog</para>
+<indexterm zone="ch-system-gettext msgfmt"><primary sortas="b-msgfmt">msgfmt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msggrep">
+<term><command>msggrep</command></term>
+<listitem>
+<para>Extracts all messages of a translation catalog that match a
+given pattern or belong to some given source files</para>
+<indexterm zone="ch-system-gettext msggrep"><primary sortas="b-msggrep">msggrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msginit">
+<term><command>msginit</command></term>
+<listitem>
+<para>Creates a new <filename class="extension">.po</filename> file, initializing the meta
+information with values from the user's environment</para>
+<indexterm zone="ch-system-gettext msginit"><primary sortas="b-msginit">msginit</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgmerge">
+<term><command>msgmerge</command></term>
+<listitem>
+<para>Combines two raw translations into a single file</para>
+<indexterm zone="ch-system-gettext msgmerge"><primary sortas="b-msgmerge">msgmerge</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msgunfmt">
+<term><command>msgunfmt</command></term>
+<listitem>
+<para>Decompiles a binary message catalog into raw translation text</para>
+<indexterm zone="ch-system-gettext msgunfmt"><primary sortas="b-msgunfmt">msgunfmt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="msguniq">
+<term><command>msguniq</command></term>
+<listitem>
+<para>Unifies duplicate translations in a translation catalog</para>
+<indexterm zone="ch-system-gettext msguniq"><primary sortas="b-msguniq">msguniq</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ngettext">
+<term><command>ngettext</command></term>
+<listitem>
+<para>Displays native language translations of a textual message whose
+grammatical form depends on a number</para>
+<indexterm zone="ch-system-gettext ngettext"><primary sortas="b-ngettext">ngettext</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="xgettext">
+<term><command>xgettext</command></term>
+<listitem>
+<para>Extracts the translatable message lines from the given source
+files to make the first translation template</para>
+<indexterm zone="ch-system-gettext xgettext"><primary sortas="b-xgettext">xgettext</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libasprintf">
+<term><filename class="libraryfile">libasprintf</filename></term>
+<listitem>
+<para>defines the <emphasis>autosprintf</emphasis> class, which makes
+C formatted output routines usable in C++ programs, for use with the
+<emphasis>&lt;string&gt;</emphasis> strings and the
+<emphasis>&lt;iostream&gt;</emphasis> streams</para>
+<indexterm zone="ch-system-gettext libasprintf"><primary sortas="c-libasprintf">libasprintf</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libgettextlib">
+<term><filename class="libraryfile">libgettextlib</filename></term>
+<listitem>
+<para>a private library containing common routines used by the various Gettext
+programs; these are not intended for general use</para>
+<indexterm zone="ch-system-gettext libgettextlib"><primary sortas="c-libgettextlib">libgettextlib</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libgettextpo">
+<term><filename class="libraryfile">libgettextpo</filename></term>
+<listitem>
+<para>Used to write specialized programs that process <filename
+class="extension">.po</filename> files; this library is used when the
+standard applications shipped with Gettext (such as
+<command>msgcomm</command>, <command>msgcmp</command>,
+<command>msgattrib</command>, and <command>msgen</command>) will not
+suffice</para>
+<indexterm zone="ch-system-gettext libgettextpo"><primary sortas="c-libgettextpo">libgettextpo</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libgettextsrc">
+<term><filename class="libraryfile">libgettextsrc</filename></term>
+<listitem>
+<para>A private library containing common routines used by the various Gettext
+programs; these are not intended for general use</para>
+<indexterm zone="ch-system-gettext libgettextsrc"><primary sortas="c-libgettextsrc">libgettextsrc</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/glibc.xml b/chapter06/glibc.xml
index c2bd6519c..8e7732795 100644
--- a/chapter06/glibc.xml
+++ b/chapter06/glibc.xml
@@ -3,13 +3,17 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-glibc" xreflabel="Glibc" role="wrap">
+<sect1 id="ch-system-glibc" role="wrap">
<title>Glibc-&glibc-version;</title>
<?dbhtml filename="glibc.html"?>
<indexterm zone="ch-system-glibc"><primary sortas="a-Glibc">Glibc</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Glibc package contains the main C library. This library provides
+the basic routines for allocating memory, searching directories, opening and
+closing files, reading and writing files, string handling, pattern matching,
+arithmetic, and so on.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,56 +21,131 @@
<seglistitem><seg>12.3 SBU</seg><seg>784 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Glibc installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+Gawk, GCC, Gettext, Grep, Make, Perl, Sed, and Texinfo</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Glibc</title>
-<para>The linuxthreads tarball contains the man pages for the threading
-libraries installed by glibc. Unpack the tarball from within the glibc source
-directory:</para>
+<para>This package is known to have issues when its default
+optimization flags (including the <parameter>-march</parameter> and
+<parameter>-mcpu</parameter> options) are changed. If any environment
+variables that override default optimizations have been defined, such
+as <envar>CFLAGS</envar> and <envar>CXXFLAGS</envar>,
+unset them when building Glibc.</para>
+
+<para>The Glibc build system is self-contained and will install
+perfectly, even though the compiler specs file and linker are still
+pointing at <filename class="directory">/tools</filename>. The specs
+and linker cannot be adjusted before the Glibc install because the
+Glibc autoconf tests would give false results and defeat the goal
+of achieving a clean build.</para>
-<screen><userinput>tar xjvf ../glibc-linuxthreads-&glibc-version;.tar.bz2</userinput></screen>
+<para>The linuxthreads tarball contains the man pages for the
+threading libraries installed by glibc. Unpack the tarball from
+within the glibc source directory:</para>
-<para>Create a build directory:</para>
+<screen><userinput>tar xjvf /sources/glibc-linuxthreads-&glibc-version;.tar.bz2</userinput></screen>
+
+<para>The Glibc documentation recommends building Glibc outside of the source
+directory in a dedicated build directory:</para>
<screen><userinput>mkdir ../glibc-build
cd ../glibc-build</userinput></screen>
-<para>Now prepare Glibc for compilation:</para>
+<para>Prepare Glibc for compilation:</para>
<screen><userinput>../glibc-&glibc-version;/configure --prefix=/usr \
--disable-profile --enable-add-ons \
--enable-kernel=2.6.0 --without-cvs \
--libexecdir=/usr/lib/glibc</userinput></screen>
+<para>The meaning of the new configure option:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>--libexecdir=/usr/lib/glibc</parameter></term>
+<listitem><para>This changes the location of the
+<command>pt_chown</command> program from its default of <filename
+class="directory">/usr/libexec</filename> to <filename
+class="directory">/usr/lib/glibc</filename>.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
+<important><para>In this section, the test suite for Glibc is
+considered critical. Do not skip it under any
+circumstance.</para></important>
+
<para>Test the results:</para>
<screen><userinput>make check</userinput></screen>
-<para>The Glibc test suite is highly dependent on certain functions of your host
-system. See testing for explanations.</para>
-
-<para>Fix an annoying little warning with:</para>
+<para>The Glibc test suite is highly dependent on certain functions of
+the host system, in particular the kernel. In general, the Glibc test
+suite is always expected to pass. However, in certain circumstances,
+some failures are unavoidable. This is a list of the most common
+issues:</para>
+
+<itemizedlist>
+<listitem><para>The <emphasis>math</emphasis> tests sometimes fail when running
+on systems where the CPU is not a relatively new genuine Intel or authentic AMD.
+Certain optimization settings are also known to be a factor here.</para></listitem>
+
+<listitem><para>The <emphasis>gettext</emphasis> test sometimes fails due to
+host system issues. The exact reasons are not yet clear.</para></listitem>
+
+<listitem><para>The <emphasis>atime</emphasis> test sometimes fails
+when the LFS partition is mounted with the
+<parameter>noatime</parameter> option.</para></listitem>
+
+<listitem><para>The <emphasis>shm</emphasis> test can fail when the
+host system is using the <systemitem
+class="filesystem">devfs</systemitem> file system but does not have
+the <systemitem class="filesystem">tmpfs</systemitem> file system
+mounted at <filename class="directory">/dev/shm</filename>. This
+occurs because of a lack of support for <systemitem
+class="filesystem">tmpfs</systemitem> in the
+kernel.</para></listitem>
+
+<listitem><para>When running on older and slower hardware, some tests
+can fail because of test timeouts being exceeded.</para></listitem>
+</itemizedlist>
+
+<para>Though it is a harmless message, the install stage of Glibc will
+complain about the absence of <filename>/etc/ld.so.conf</filename>.
+Prevent this warning with:</para>
<screen><userinput>touch /etc/ld.so.conf</userinput></screen>
-<para>And install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>To install the Glibc locales, use the following
-command:</para>
+<para>The locales that can make the system respond in a different
+language were not installed by the above command. Install this
+with:</para>
<screen><userinput>make localedata/install-locales</userinput></screen>
-<para>An alternative to running the previous command is to install only those
-locales which you need or want. The following instructions, instead of the
-install-locales target above, will install the minimum set of locales necessary
+<para>To save time, an alternative to running the
+previous command (which generates and installs every locale Glibc is
+aware of) is to install only those locales that are wanted and needed.
+This can be achieved by using the <command>localedef</command>
+command. Information on this command is located in the
+<filename>INSTALL</filename> file in the Glibc source. However, there
+are a number of locales that are essential in order for the tests of
+future packages to pass, in particular, the
+<emphasis>libstdc++</emphasis> tests from GCC. The following
+instructions, instead of the <parameter>install-locales</parameter>
+target used above, will install the minimum set of locales necessary
for the tests to run successfully:</para>
<screen><userinput>mkdir -p /usr/lib/locale
@@ -82,18 +161,40 @@ localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP</userinput></screen>
-<para>Build the linuxthreads man pages:</para>
+<para>Some locales installed by the <command>make
+localedata/install-locales</command> command above are not properly
+supported by some applications that are in the LFS and BLFS books.
+Because of the various problems that arise due to application
+programmers making assumptions that break in such locales, LFS should
+not be used in locales that utilize multibyte character sets
+(including UTF-8) or right-to-left writing order. Numerous unofficial
+and unstable patches are required to fix these problems, and it has
+been decided by the LFS developers not to support such complex locales. This applies to the
+ja_JP and fa_IR locales as well&mdash;they have been installed only for
+GCC and Gettext tests to pass, and the <command>watch</command> program
+(part of the Procps package) does not work properly in them. Various
+attempts to circumvent these restrictions are documented in
+internationalization-related hints.</para>
+
+<para>Build the linuxthreads man pages, which are a great reference
+on the threading API (applicable to NPTL as well):</para>
<screen><userinput>make -C ../glibc-&glibc-version;/linuxthreads/man</userinput></screen>
-<para>And install these pages:</para>
+<para>Install these pages:</para>
<screen><userinput>make -C ../glibc-&glibc-version;/linuxthreads/man install</userinput></screen>
</sect2>
-
<sect2 id="conf-glibc" role="configuration"><title>Configuring Glibc</title>
+<indexterm zone="conf-glibc"><primary sortas="e-/etc/nsswitch.conf">/etc/nsswitch.conf</primary></indexterm>
+<indexterm zone="conf-glibc"><primary sortas="e-/etc/localtime">/etc/localtime</primary></indexterm>
+
+<para>The <filename>/etc/nsswitch.conf</filename> file needs to be
+created because, although Glibc provides defaults when this file is
+missing or corrupt, the Glibc defaults do not work well with
+networking. The time zone also needs to be set up.</para>
<para>Create a new file <filename>/etc/nsswitch.conf</filename> by running the
following:</para>
@@ -116,20 +217,56 @@ rpc: files
# End /etc/nsswitch.conf</literal>
EOF</userinput></screen>
-<para>To find out what time zone you're in, run the following script:</para>
+<para>To determine the local time zone, run the following script:</para>
<screen><userinput>tzselect</userinput></screen>
-<para>Then create the <filename>/etc/localtime</filename> file by running:</para>
+<para>After answering a few questions about the location, the script
+will output the name of the time zone (e.g.,
+<emphasis>EST5EDT</emphasis> or <emphasis>Canada/Eastern</emphasis>).
+Then create the <filename>/etc/localtime</filename> file by
+running:</para>
<screen><userinput>cp --remove-destination /usr/share/zoneinfo/<replaceable>[xxx]</replaceable> \
/etc/localtime</userinput></screen>
+<para>Replace <replaceable>[xxx]</replaceable> with the name of the time zone that the
+<command>tzselect</command> provided (e.g., Canada/Eastern).</para>
+
+<para>The meaning of the cp option:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>--remove-destination</parameter></term>
+<listitem><para>This is needed to force removal of the already
+existing symbolic link. The reason for copying the file instead of
+using a symlink is to cover the situation where <filename
+class="directory">/usr</filename> is on a separate partition. This
+could be important when booted into single user
+mode.</para></listitem>
+</varlistentry>
+</variablelist>
+
</sect2>
<sect2 id="conf-ld" role="configuration">
<title>Configuring Dynamic Loader</title>
+<indexterm zone="conf-ld"><primary sortas="e-/etc/ld.so.conf">/etc/ld.so.conf</primary></indexterm>
+
+<para>By default, the dynamic loader (<filename
+class="libraryfile">/lib/ld-linux.so.2</filename>) searches through
+<filename class="directory">/lib</filename> and <filename
+class="directory">/usr/lib</filename> for dynamic libraries that are
+needed by programs as they are run. However, if there are libraries in
+directories other than <filename class="directory">/lib</filename> and
+<filename class="directory">/usr/lib</filename>, these need to be
+added to the <filename>/etc/ld.so.conf</filename> file in order
+for the dynamic loader to find them. Two directories that are commonly
+known to contain additional libraries are <filename
+class="directory">/usr/local/lib</filename> and <filename
+class="directory">/opt/lib</filename>, so add those directories to the
+dynamic loader's search path.</para>
<para>Create a new file <filename>/etc/ld.so.conf</filename> by running the
following:</para>
@@ -145,11 +282,413 @@ EOF</userinput></screen>
</sect2>
-
<sect2 id="contents-glibc" role="content"><title>Contents of Glibc</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>catchsegv, gencat, getconf,
+getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale,
+localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen,
+rpcinfo, sln, sprof, tzselect, xtrace, zdump, and zic</seg>
+<seg>ld.so, libBrokenLocale.[a,so],
+libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so],
+libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a,
+libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so,
+libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so,
+libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so],
+libthread_db.so, and libutil.[a,so]</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="catchsegv">
+<term><command>catchsegv</command></term>
+<listitem>
+<para>Can be used to create a stack trace when a program
+terminates with a segmentation fault</para>
+<indexterm zone="ch-system-glibc catchsegv"><primary sortas="b-catchsegv">catchsegv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gencat">
+<term><command>gencat</command></term>
+<listitem>
+<para>Generates message catalogues</para>
+<indexterm zone="ch-system-glibc gencat"><primary sortas="b-gencat">gencat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="getconf">
+<term><command>getconf</command></term>
+<listitem>
+<para>Displays the system configuration values for file system specific variables</para>
+<indexterm zone="ch-system-glibc getconf"><primary sortas="b-getconf">getconf</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="getent">
+<term><command>getent</command></term>
+<listitem>
+<para>Gets entries from an administrative database</para>
+<indexterm zone="ch-system-glibc getent"><primary sortas="b-getent">getent</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="iconv">
+<term><command>iconv</command></term>
+<listitem>
+<para>Performs character set conversion</para>
+<indexterm zone="ch-system-glibc iconv"><primary sortas="b-iconv">iconv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="iconvconfig">
+<term><command>iconvconfig</command></term>
+<listitem>
+<para>Creates fastloading <command>iconv</command> module configuration files</para>
+<indexterm zone="ch-system-glibc iconvconfig"><primary sortas="b-iconvconfig">iconvconfig</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ldconfig">
+<term><command>ldconfig</command></term>
+<listitem>
+<para>Configures the dynamic linker runtime bindings</para>
+<indexterm zone="ch-system-glibc ldconfig"><primary sortas="b-ldconfig">ldconfig</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ldd">
+<term><command>ldd</command></term>
+<listitem>
+<para>Reports which shared libraries are required
+by each given program or shared library</para>
+<indexterm zone="ch-system-glibc ldd"><primary sortas="b-ldd">ldd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lddlibc4">
+<term><command>lddlibc4</command></term>
+<listitem>
+<para>Assists <command>ldd</command> with object files</para>
+<indexterm zone="ch-system-glibc lddlibc4"><primary sortas="b-lddlibc4">lddlibc4</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="locale">
+<term><command>locale</command></term>
+<listitem>
+<para>Tells the compiler to enable or disable the use of POSIX locales
+for built-in operations</para>
+<indexterm zone="ch-system-glibc locale"><primary sortas="b-locale">locale</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="localedef">
+<term><command>localedef</command></term>
+<listitem>
+<para>Compiles locale specifications</para>
+<indexterm zone="ch-system-glibc localedef"><primary sortas="b-localedef">localedef</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mtrace">
+<term><command>mtrace</command></term>
+<listitem>
+<para>Reads and interprets a memory trace file and
+ouputs a summary in human-readable format</para>
+<indexterm zone="ch-system-glibc mtrace"><primary sortas="b-mtrace">mtrace</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="nscd">
+<term><command>nscd</command></term>
+<listitem>
+<para>A daemon that provides a cache for the most common name
+service requests</para>
+<indexterm zone="ch-system-glibc nscd"><primary sortas="b-nscd">nscd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="nscd_nischeck">
+<term><command>nscd_nischeck</command></term>
+<listitem>
+<para>Checks whether or not secure mode is necessary for NIS+ lookup</para>
+<indexterm zone="ch-system-glibc nscd_nischeck"><primary sortas="b-nscd_nischeck">nscd_nischeck</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pcprofiledump">
+<term><command>pcprofiledump</command></term>
+<listitem>
+<para>Dumps information generated by PC profiling</para>
+<indexterm zone="ch-system-glibc pcprofiledump"><primary sortas="b-pcprofiledump">pcprofiledump</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pt_chown">
+<term><command>pt_chown</command></term>
+<listitem>
+<para>A helper program for <command>grantpt</command> to set
+the owner, group and access permissions of a slave pseudo terminal</para>
+<indexterm zone="ch-system-glibc pt_chown"><primary sortas="b-pt_chown">pt_chown</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rpcgen">
+<term><command>rpcgen</command></term>
+<listitem>
+<para>Generates C code to implement the Remote Procecure Call (RPC) protocol</para>
+<indexterm zone="ch-system-glibc rpcgen"><primary sortas="b-rpcgen">rpcgen</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rpcinfo">
+<term><command>rpcinfo</command></term>
+<listitem>
+<para>Makes an RPC call to an RPC server</para>
+<indexterm zone="ch-system-glibc rpcinfo"><primary sortas="b-rpcinfo">rpcinfo</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sln">
+<term><command>sln</command></term>
+<listitem>
+<para>A statically linked <command>ln</command> program</para>
+<indexterm zone="ch-system-glibc sln"><primary sortas="b-sln">sln</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sprof">
+<term><command>sprof</command></term>
+<listitem>
+<para>Reads and displays shared object profiling data</para>
+<indexterm zone="ch-system-glibc sprof"><primary sortas="b-sprof">sprof</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tzselect">
+<term><command>tzselect</command></term>
+<listitem>
+<para>Asks the user about the location of the
+system and reports the corresponding time zone description</para>
+<indexterm zone="ch-system-glibc tzselect"><primary sortas="b-tzselect">tzselect</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="xtrace">
+<term><command>xtrace</command></term>
+<listitem>
+<para>Traces the execution of a program by
+printing the currently executed function</para>
+<indexterm zone="ch-system-glibc xtrace"><primary sortas="b-xtrace">xtrace</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zdump">
+<term><command>zdump</command></term>
+<listitem>
+<para>The time zone dumper</para>
+<indexterm zone="ch-system-glibc zdump"><primary sortas="b-zdump">zdump</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zic">
+<term><command>zic</command></term>
+<listitem>
+<para>The time zone compiler</para>
+<indexterm zone="ch-system-glibc zic"><primary sortas="b-zic">zic</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ld.so">
+<term><filename class="libraryfile">ld.so</filename></term>
+<listitem>
+<para>The helper program for shared library executables</para>
+<indexterm zone="ch-system-glibc ld.so"><primary sortas="c-ld.so">ld.so</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libBrokenLocale">
+<term><filename class="libraryfile">libBrokenLocale</filename></term>
+<listitem>
+<para>Used by programs, such as Mozilla, to solve broken locales</para>
+<indexterm zone="ch-system-glibc libBrokenLocale"><primary sortas="c-libBrokenLocale">libBrokenLocale</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libSegFault">
+<term><filename class="libraryfile">libSegFault</filename></term>
+<listitem>
+<para>The segmentation fault signal handler</para>
+<indexterm zone="ch-system-glibc libSegFault"><primary sortas="c-libSegFault">libSegFault</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libanl">
+<term><filename class="libraryfile">libanl</filename></term>
+<listitem>
+<para>An asynchronous name lookup library</para>
+<indexterm zone="ch-system-glibc libanl"><primary sortas="c-libanl">libanl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libbsd-compat">
+<term><filename class="libraryfile">libbsd-compat</filename></term>
+<listitem>
+<para>Provides the portability needed
+in order to run certain Berkey Software Distribution (BSD) programs under Linux</para>
+<indexterm zone="ch-system-glibc libbsd-compat"><primary sortas="c-libbsd-compat">libbsd-compat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libc">
+<term><filename class="libraryfile">libc</filename></term>
+<listitem>
+<para>The main C library</para>
+<indexterm zone="ch-system-glibc libc"><primary sortas="c-libc">libc</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libcrypt">
+<term><filename class="libraryfile">libcrypt</filename></term>
+<listitem>
+<para>The cryptography library</para>
+<indexterm zone="ch-system-glibc libcrypt"><primary sortas="c-libcrypt">libcrypt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libdl">
+<term><filename class="libraryfile">libdl</filename></term>
+<listitem>
+<para>The dynamic linking interface library</para>
+<indexterm zone="ch-system-glibc libdl"><primary sortas="c-libdl">libdl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libg">
+<term><filename class="libraryfile">libg</filename></term>
+<listitem>
+<para>A runtime library for <command>g++</command></para>
+<indexterm zone="ch-system-glibc libg"><primary sortas="c-libg">libg</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libieee">
+<term><filename class="libraryfile">libieee</filename></term>
+<listitem>
+<para>The Institute of Electrical and Electronic Engineers (IEEE) floating point library</para>
+<indexterm zone="ch-system-glibc libieee"><primary sortas="c-libieee">libieee</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libm">
+<term><filename class="libraryfile">libm</filename></term>
+<listitem>
+<para>The mathematical library</para>
+<indexterm zone="ch-system-glibc libm"><primary sortas="c-libm">libm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libmcheck">
+<term><filename class="libraryfile">libmcheck</filename></term>
+<listitem>
+<para>Contains code run at boot</para>
+<indexterm zone="ch-system-glibc libmcheck"><primary sortas="c-libmcheck">libmcheck</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libmemusage">
+<term><filename class="libraryfile">libmemusage</filename></term>
+<listitem>
+<para>Used by <command>memusage</command> to help collect
+information about the memory usage of a program</para>
+<indexterm zone="ch-system-glibc libmemusage"><primary sortas="c-libmemusage">libmemusage</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libnsl">
+<term><filename class="libraryfile">libnsl</filename></term>
+<listitem>
+<para>The network services library</para>
+<indexterm zone="ch-system-glibc libnsl"><primary sortas="c-libnsl">libnsl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libnss">
+<term><filename class="libraryfile">libnss</filename></term>
+<listitem>
+<para>The Name Service Switch libraries,
+containing functions for resolving host names, user names, group names,
+aliases, services, protocols, etc</para>
+<indexterm zone="ch-system-glibc libnss"><primary sortas="c-libnss">libnss</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libpcprofile">
+<term><filename class="libraryfile">libpcprofile</filename></term>
+<listitem>
+<para>Contains profiling functions used
+to track the amount of CPU time spent in specific source code lines</para>
+<indexterm zone="ch-system-glibc libpcprofile"><primary sortas="c-libpcprofile">libpcprofile</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libpthread">
+<term><filename class="libraryfile">libpthread</filename></term>
+<listitem>
+<para>The POSIX threads library</para>
+<indexterm zone="ch-system-glibc libpthread"><primary sortas="c-libpthread">libpthread</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libresolv">
+<term><filename class="libraryfile">libresolv</filename></term>
+<listitem>
+<para>Contains functions for creating,
+sending, and interpreting packets to the Internet domain name servers</para>
+<indexterm zone="ch-system-glibc libresolv"><primary sortas="c-libresolv">libresolv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="librpcsvc">
+<term><filename class="libraryfile">librpcsvc</filename></term>
+<listitem>
+<para>Contains functions providing miscellaneous RPC services</para>
+<indexterm zone="ch-system-glibc librpcsvc"><primary sortas="c-librpcsvc">librpcsvc</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="librt">
+<term><filename class="libraryfile">librt</filename></term>
+<listitem>
+<para>Contains functions providing most of the
+interfaces specified by the POSIX.1b Realtime Extension</para>
+<indexterm zone="ch-system-glibc librt"><primary sortas="c-librt">librt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libthread_db">
+<term><filename class="libraryfile">libthread_db</filename></term>
+<listitem>
+<para>Contains functions useful for
+building debuggers for multi-threaded programs</para>
+<indexterm zone="ch-system-glibc libthread_db"><primary sortas="c-libthread_db">libthread_db</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libutil">
+<term><filename class="libraryfile">libutil</filename></term>
+<listitem>
+<para>Contains code for <quote>standard</quote> functions used in many different Unix utilities</para>
+<indexterm zone="ch-system-glibc libutil"><primary sortas="c-libutil">libutil</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/grep.xml b/chapter06/grep.xml
index 2753ceca4..2a526d400 100644
--- a/chapter06/grep.xml
+++ b/chapter06/grep.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-grep" xreflabel="Grep" role="wrap">
+<sect1 id="ch-system-grep" role="wrap">
<title>Grep-&grep-version;</title>
<?dbhtml filename="grep.html"?>
<indexterm zone="ch-system-grep"><primary sortas="a-Grep">Grep</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Grep package contains programs for searching through files.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>5.8 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Grep installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils,
+Diffutils, GCC, Gettext, Glibc, Make, Sed, and Texinfo</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -33,7 +39,7 @@
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -42,8 +48,40 @@
<sect2 id="contents-grep" role="content"><title>Contents of Grep</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>egrep (link to grep), fgrep (link to grep), and grep</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="egrep">
+<term><command>egrep</command></term>
+<listitem>
+<para>Prints lines matching an extended regular expression</para>
+<indexterm zone="ch-system-grep egrep"><primary sortas="b-egrep">egrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fgrep">
+<term><command>fgrep</command></term>
+<listitem>
+<para>Prints lines matching a list of fixed strings</para>
+<indexterm zone="ch-system-grep fgrep"><primary sortas="b-fgrep">fgrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grep">
+<term><command>grep</command></term>
+<listitem>
+<para>Prints lines matching a basic regular expression</para>
+<indexterm zone="ch-system-grep grep"><primary sortas="b-grep">grep</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/groff.xml b/chapter06/groff.xml
index eae23fc23..5289367b8 100644
--- a/chapter06/groff.xml
+++ b/chapter06/groff.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-groff" xreflabel="Groff" role="wrap">
+<sect1 id="ch-system-groff" role="wrap">
<title>Groff-&groff-version;</title>
<?dbhtml filename="groff.html"?>
<indexterm zone="ch-system-groff"><primary sortas="a-Groff">Groff</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Groff package contains programs for processing and formatting text.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,11 +18,21 @@
<seglistitem><seg>0.5 SBU</seg><seg>43 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Groff installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+Gawk, GCC, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Groff</title>
+<para>Groff expects the environment variable <envar>PAGE</envar>
+to contain the default paper size. For users in the United States,
+<parameter>PAGE=letter</parameter> is appropriate. Elsewhere,
+<parameter>PAGE=A4</parameter> may be more suitable.</para>
+
<para>Prepare Groff for compilation:</para>
<screen><userinput>PAGE=<replaceable>[paper_size]</replaceable> ./configure --prefix=/usr</userinput></screen>
@@ -30,11 +41,12 @@
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>Create the following symlinks:</para>
+<para>Some documentation programs, such as <command>xman</command>,
+will not work properly without the following symlinks:</para>
<screen><userinput>ln -s soelim /usr/bin/zsoelim
ln -s eqn /usr/bin/geqn
@@ -45,8 +57,315 @@ ln -s tbl /usr/bin/gtbl</userinput></screen>
<sect2 id="contents-groff" role="content"><title>Contents of Groff</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>addftinfo, afmtodit, eqn, eqn2graph, geqn (link to eqn), grn,
+grodvi, groff, groffer, grog, grolbp, grolj4, grops, grotty, gtbl (link to tbl), hpftodit,
+indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops, pic, pic2graph, post-grohtml,
+pre-grohtml, refer, soelim, tbl, tfmtodit, troff, and zsoelim (link to soelim)</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="addftinfo">
+<term><command>addftinfo</command></term>
+<listitem>
+<para>Reads a troff font file and adds some
+additional font-metric information that is used by the <command>groff</command> system</para>
+<indexterm zone="ch-system-groff addftinfo"><primary sortas="b-addftinfo">addftinfo</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="afmtodit">
+<term><command>afmtodit</command></term>
+<listitem>
+<para>Creates a font file for use with <command>groff</command> and <command>grops</command></para>
+<indexterm zone="ch-system-groff afmtodit"><primary sortas="b-afmtodit">afmtodit</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="eqn">
+<term><command>eqn</command></term>
+<listitem>
+<para>Compiles descriptions of equations embedded
+within troff input files into commands that are understood by <command>troff</command></para>
+<indexterm zone="ch-system-groff eqn"><primary sortas="b-eqn">eqn</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="eqn2graph">
+<term><command>eqn2graph</command></term>
+<listitem>
+<para>Converts a troff EQN (equation) into a cropped image</para>
+<indexterm zone="ch-system-groff eqn2graph"><primary sortas="b-eqn2graph">eqn2graph</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="geqn">
+<term><command>eqn</command></term>
+<listitem>
+<para>A link to <command>eqn</command></para>
+<indexterm zone="ch-system-groff geqn"><primary sortas="b-geqn">geqn</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grn">
+<term><command>grn</command></term>
+<listitem>
+<para>A <command>groff</command> preprocessor for gremlin files</para>
+<indexterm zone="ch-system-groff grn"><primary sortas="b-grn">grn</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grodvi">
+<term><command>grodvi</command></term>
+<listitem>
+<para>A driver for <command>groff</command> that produces TeX dvi format</para>
+<indexterm zone="ch-system-groff grodvi"><primary sortas="b-grodvi">grodvi</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="groff">
+<term><command>groff</command></term>
+<listitem>
+<para>A front-end to the groff document
+formatting system; normally, it runs the <command>troff</command> program and a post-processor
+appropriate for the selected device</para>
+<indexterm zone="ch-system-groff groff"><primary sortas="b-groff">groff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="groffer">
+<term><command>groffer</command></term>
+<listitem>
+<para>Displays groff files and man pages on X and tty terminals</para>
+<indexterm zone="ch-system-groff groffer"><primary sortas="b-groffer">groffer</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grog">
+<term><command>grog</command></term>
+<listitem>
+<para>Reads files and guesses which of the <command>groff</command>
+options <parameter>-e</parameter>, <parameter>-man</parameter>,
+<parameter>-me</parameter>, <parameter>-mm</parameter>,
+<parameter>-ms</parameter>, <parameter>-p</parameter>, <parameter>-s</parameter>,
+and <parameter>-t</parameter> are required for printing
+files, and reports the <command>groff</command> command including those options</para>
+<indexterm zone="ch-system-groff grog"><primary sortas="b-grog">grog</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grolbp">
+<term><command>grolbp</command></term>
+<listitem>
+<para>Is a <command>groff</command> driver for Canon CAPSL printers
+(LBP-4 and LBP-8 series laser printers)</para>
+<indexterm zone="ch-system-groff grolbp"><primary sortas="b-grolbp">grolbp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grolj4">
+<term><command>grolj4</command></term>
+<listitem>
+<para>Is a driver for <command>groff</command> that produces output
+in PCL5 format suitable for an HP Laserjet 4 printer</para>
+<indexterm zone="ch-system-groff grolj4"><primary sortas="b-grolj4">grolj4</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grops">
+<term><command>grops</command></term>
+<listitem>
+<para>Translates the output of GNU <command>troff</command> to PostScript</para>
+<indexterm zone="ch-system-groff grops"><primary sortas="b-grops">grops</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grotty">
+<term><command>grotty</command></term>
+<listitem>
+<para>Translates the output of GNU <command>troff</command> into
+a form suitable for typewriter-like devices</para>
+<indexterm zone="ch-system-groff grotty"><primary sortas="b-grotty">grotty</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gtbl">
+<term><command>gtbl</command></term>
+<listitem>
+<para>Is the GNU implementation of <command>tbl</command></para>
+<indexterm zone="ch-system-groff gtbl"><primary sortas="b-gtbl">gtbl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hpftodit">
+<term><command>hpftodit</command></term>
+<listitem>
+<para>Creates a font file for use with
+<command>groff -Tlj4</command> from an HP-tagged font metric file</para>
+<indexterm zone="ch-system-groff hpftodit"><primary sortas="b-hpftodit">hpftodit</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="indxbib">
+<term><command>indxbib</command></term>
+<listitem>
+<para>Creates an inverted index for the bibliographic databases with a specified file for
+use with <command>refer</command>, <command>lookbib</command>, and <command>lkbib</command></para>
+<indexterm zone="ch-system-groff indxbib"><primary sortas="b-indxbib">indxbib</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lkbib">
+<term><command>lkbib</command></term>
+<listitem>
+<para>Searches bibliographic databases for references that contain
+specified keys and reports any references found</para>
+<indexterm zone="ch-system-groff lkbib"><primary sortas="b-lkbib">lkbib</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lookbib">
+<term><command>lookbib</command></term>
+<listitem>
+<para>Prints a prompt on the standard error (unless the standard input
+is not a terminal), reads a line containing a
+set of keywords from the standard input, searches the bibliographic databases in a specified
+file for references containing those keywords, prints any references
+found on the standard output, and repeats this process until the end
+of input</para>
+<indexterm zone="ch-system-groff lookbib"><primary sortas="b-lookbib">lookbib</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mmroff">
+<term><command>mmroff</command></term>
+<listitem>
+<para>A simple preprocessor for <command>groff</command></para>
+<indexterm zone="ch-system-groff mmroff"><primary sortas="b-mmroff">mmroff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="neqn">
+<term><command>neqn</command></term>
+<listitem>
+<para>Formats equations for American Standard Code for Information
+Interchange (ASCII) output</para>
+<indexterm zone="ch-system-groff neqn"><primary sortas="b-neqn">neqn</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="nroff">
+<term><command>nroff</command></term>
+<listitem>
+<para>A script that emulates the <command>nroff</command> command using <command>groff</command></para>
+<indexterm zone="ch-system-groff nroff"><primary sortas="b-nroff">nroff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pfbtops">
+<term><command>pfbtops</command></term>
+<listitem>
+<para>Translates a PostScript font in <filename class="extension">.pfb</filename> format to ASCII</para>
+<indexterm zone="ch-system-groff pfbtops"><primary sortas="b-pfbtops">pfbtops</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pic">
+<term><command>pic</command></term>
+<listitem>
+<para>Compiles descriptions of pictures embedded
+within troff or TeX input files into commands understood by TeX or <command>troff</command></para>
+<indexterm zone="ch-system-groff pic"><primary sortas="b-pic">pic</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pic2graph">
+<term><command>pic2graph</command></term>
+<listitem>
+<para>Converts a PIC diagram into a cropped image</para>
+<indexterm zone="ch-system-groff pic2graph"><primary sortas="b-pic2graph">pic2graph</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="post-grohtml">
+<term><command>post-grohtml</command></term>
+<listitem>
+<para>Translates the output of GNU <command>troff</command> to html</para>
+<indexterm zone="ch-system-groff post-grohtml"><primary sortas="b-post-grohtml">post-grohtml</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pre-grohtml">
+<term><command>pre-grohtml </command></term>
+<listitem>
+<para>Translates the output of GNU <command>troff</command> to html</para>
+<indexterm zone="ch-system-groff pre-grohtml"><primary sortas="b-pre-grohtml">pre-grohtml</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="refer">
+<term><command>refer</command></term>
+<listitem>
+<para>Copies the contents of a file to the standard output, except
+that lines between <emphasis>.[</emphasis> and <emphasis>.]</emphasis>
+are interpreted as citations, and lines between
+<emphasis>.R1</emphasis> and <emphasis>.R2</emphasis> are interpreted
+as commands for how citations are to be processed</para>
+<indexterm zone="ch-system-groff refer"><primary sortas="b-refer">refer</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="soelim">
+<term><command>soelim</command></term>
+<listitem>
+<para>Reads files and replaces lines of the form
+<emphasis>.so file</emphasis> by the contents of the mentioned
+<emphasis>file</emphasis></para>
+<indexterm zone="ch-system-groff soelim"><primary sortas="b-soelim">soelim</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tbl">
+<term><command>tbl</command></term>
+<listitem>
+<para>Compiles descriptions of tables embedded
+within troff input files into commands that are understood by <command>troff</command></para>
+<indexterm zone="ch-system-groff tbl"><primary sortas="b-tbl">tbl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tfmtodit">
+<term><command>tfmtodit</command></term>
+<listitem>
+<para>Creates a font file for use with <command>groff -Tdvi</command></para>
+<indexterm zone="ch-system-groff tfmtodit"><primary sortas="b-tfmtodit">tfmtodit</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="troff">
+<term><command>troff</command></term>
+<listitem>
+<para>Is highly compatible with Unix <command>troff</command>; it
+should usually be invoked using the
+<command>groff</command> command, which will also run preprocessors and post-processors in the
+appropriate order and with the appropriate options</para>
+<indexterm zone="ch-system-groff troff"><primary sortas="b-troff">troff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zsoelim">
+<term><command>zsoelim</command></term>
+<listitem>
+<para>Is the GNU implementation of <command>soelim</command></para>
+<indexterm zone="ch-system-groff zsoelim"><primary sortas="b-zsoelim">zsoelim</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/grub.xml b/chapter06/grub.xml
index 721c2731e..9f5a0efe0 100644
--- a/chapter06/grub.xml
+++ b/chapter06/grub.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-grub" xreflabel="Grub" role="wrap">
+<sect1 id="ch-system-grub" role="wrap">
<title>Grub-&grub-version;</title>
<?dbhtml filename="grub.html"?>
<indexterm zone="ch-system-grub"><primary sortas="a-Grub">Grub</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Grub package contains the Grand Unified Bootloader.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,28 +18,49 @@
<seglistitem><seg>0.2 SBU</seg><seg>10 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Grub installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Glibc, Grep, Make, Ncurses, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Grub</title>
+<para>This package is known to have issues when its default
+optimization flags (including the <parameter>-march</parameter> and
+<parameter>-mcpu</parameter> options) are changed. If any environment
+variables that override default optimizations have been defined, such
+as <envar>CFLAGS</envar> and <envar>CXXFLAGS</envar>,
+unset them when building Grub.</para>
+
<para>Prepare Grub for compilation:</para>
<screen><userinput>./configure --prefix=/usr</userinput></screen>
-<para>Now compile the package:</para>
+<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Now install it:</para>
+<para>Note that the test results will always show the error
+<quote>ufs2_stage1_5 is too big.</quote> This is due to a compiler
+issue, but can be ignored unless you plan to boot from an UFS
+partition. The partitions are normally only used by Sun
+workstations.</para>
+
+<para>Install the package:</para>
<screen><userinput>make install
mkdir /boot/grub
cp /usr/lib/grub/i386-pc/stage{1,2} /boot/grub</userinput></screen>
+<para>Replace <filename class="directory">i386-pc</filename> with whatever
+directory is appropriate for the hardware in use.</para>
+
<para>The <filename class="directory">i386-pc</filename> directory
contains a number of <filename>*stage1_5</filename> files, different
ones for different file systems. Review the files available and copy
@@ -52,9 +74,58 @@ copy the <filename>e2fs_stage1_5</filename> and/or
<sect2 id="contents-grub" role="content"><title>Contents of Grub</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>grub, grub-install,
+grub-md5-crypt, grub-terminfo, and mbchk</seg></seglistitem>
+</segmentedlist>
-</sect2>
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="grub">
+<term><command>grub</command></term>
+<listitem>
+<para>The Grand Unified Bootloader's command shell</para>
+<indexterm zone="ch-system-grub grub"><primary sortas="b-grub">grub</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grub-install">
+<term><command>grub-install</command></term>
+<listitem>
+<para>Installs GRUB on the given device</para>
+<indexterm zone="ch-system-grub grub-install"><primary sortas="b-grub-install">grub-install</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grub-md5-crypt">
+<term><command>grub-md5-crypt</command></term>
+<listitem>
+<para>Encrypts a password in MD5 format</para>
+<indexterm zone="ch-system-grub grub-md5-crypt"><primary sortas="b-grub-md5-crypt">grub-md5-crypt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grub-terminfo">
+<term><command>grub-terminfo</command></term>
+<listitem>
+<para>Generates a terminfo command from a terminfo name; it can be
+employed if an unknown terminal is being used</para>
+<indexterm zone="ch-system-grub grub-terminfo"><primary sortas="b-grub-terminfo">grub-terminfo</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mbchk">
+<term><command>mbchk</command></term>
+<listitem>
+<para>Checks the format of a multi-boot kernel</para>
+<indexterm zone="ch-system-grub mbchk"><primary sortas="b-mbchk">mbchk</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
+</sect2>
</sect1>
+
diff --git a/chapter06/gzip.xml b/chapter06/gzip.xml
index ea1c677b1..e7e35fa3f 100644
--- a/chapter06/gzip.xml
+++ b/chapter06/gzip.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-gzip" xreflabel="Gzip" role="wrap">
+<sect1 id="ch-system-gzip" role="wrap">
<title>Gzip-&gzip-version;</title>
<?dbhtml filename="gzip.html"?>
<indexterm zone="ch-system-gzip"><primary sortas="a-Gzip">Gzip</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Gzip package contains programs for compressing and decompressing
+files.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>2.6 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Gzip installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -26,7 +33,10 @@
<screen><userinput>./configure --prefix=/usr</userinput></screen>
-<para>Issue a sed command:</para>
+<para>The <command>gzexe</command> script has the location of the
+<command>gzip</command> binary hard-wired into it. Because the
+location of the binary is changed later, the following command ensures
+that the new location gets placed into the script:</para>
<screen><userinput>sed -i 's@"BINDIR"@/bin@g' gzexe.in</userinput></screen>
@@ -51,8 +61,134 @@ ln -s gunzip /bin/uncompress</userinput></screen>
<sect2 id="contents-gzip" role="content"><title>Contents of Gzip</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>gunzip (link to gzip), gzexe,
+gzip, uncompress (link to gunzip), zcat (link to gzip), zcmp, zdiff,
+zegrep, zfgrep, zforce, zgrep, zless, zmore, and znew</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="gunzip">
+<term><command>gunzip</command></term>
+<listitem>
+<para>Decompresses gzipped files</para>
+<indexterm zone="ch-system-gzip gunzip"><primary sortas="b-gunzip">gunzip</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gzexe">
+<term><command>gzexe</command></term>
+<listitem>
+<para>Creates self-uncompressing executable files</para>
+<indexterm zone="ch-system-gzip gzexe"><primary sortas="b-gzexe">gzexe</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gzip">
+<term><command>gzip</command></term>
+<listitem>
+<para>Compresses the given files using Lempel-Ziv (LZ77) coding</para>
+<indexterm zone="ch-system-gzip gzip"><primary sortas="b-gzip">gzip</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="uncompress">
+<term><command>uncompress</command></term>
+<listitem>
+<para>Decompresses compressed files</para>
+<indexterm zone="ch-system-gzip uncompress"><primary sortas="b-uncompress">uncompress</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zcat">
+<term><command>zcat</command></term>
+<listitem>
+<para>Uncompresses the given gzipped files to standard output</para>
+<indexterm zone="ch-system-gzip zcat"><primary sortas="b-zcat">zcat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zcmp">
+<term><command>zcmp</command></term>
+<listitem>
+<para>Runs <command>cmp</command> on gzipped files</para>
+<indexterm zone="ch-system-gzip zcmp"><primary sortas="b-zcmp">zcmp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zdiff">
+<term><command>zdiff</command></term>
+<listitem>
+<para>Runs <command>diff</command> on gzipped files</para>
+<indexterm zone="ch-system-gzip zdiff"><primary sortas="b-zdiff">zdiff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zegrep">
+<term><command>zegrep</command></term>
+<listitem>
+<para>Runs <command>egrep</command> on gzipped files</para>
+<indexterm zone="ch-system-gzip zegrep"><primary sortas="b-zegrep">zegrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zfgrep">
+<term><command>zfgrep</command></term>
+<listitem>
+<para>Runs <command>fgrep</command> on gzipped files</para>
+<indexterm zone="ch-system-gzip zfgrep"><primary sortas="b-zfgrep">zfgrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zforce">
+<term><command>zforce</command></term>
+<listitem>
+<para>Forces a <filename class="extension">.gz</filename> extension on all given files
+that are gzipped files, so that <command>gzip</command> will not compress them again; this can be
+useful when file names were truncated during a file transfer</para>
+<indexterm zone="ch-system-gzip zforce"><primary sortas="b-zforce">zforce</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zgrep">
+<term><command>zgrep</command></term>
+<listitem>
+<para>Runs <command>grep</command> on gzipped files</para>
+<indexterm zone="ch-system-gzip zgrep"><primary sortas="b-zgrep">zgrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zless">
+<term><command>zless</command></term>
+<listitem>
+<para>Runs <command>less</command> on gzipped files</para>
+<indexterm zone="ch-system-gzip zless"><primary sortas="b-zless">zless</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="zmore">
+<term><command>zmore</command></term>
+<listitem>
+<para>Runs <command>more</command> on gzipped files</para>
+<indexterm zone="ch-system-gzip zmore"><primary sortas="b-zmore">zmore</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="znew">
+<term><command>znew</command></term>
+<listitem>
+<para>Re-compresses files from <command>compress</command> format to
+<command>gzip</command> format&mdash;<filename class="extension">.Z</filename>
+to <filename class="extension">.gz</filename></para>
+<indexterm zone="ch-system-gzip znew"><primary sortas="b-znew">znew</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/hotplug.xml b/chapter06/hotplug.xml
index 12a3e0d0f..cfa04326d 100644
--- a/chapter06/hotplug.xml
+++ b/chapter06/hotplug.xml
@@ -10,6 +10,12 @@
<indexterm zone="ch-system-hotplug"><primary sortas="a-Hotplug">Hotplug</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Hotplug package contains scripts that react upon hotplug events
+generated by the kernel. Such events correspond to every change in the kernel
+state visible in the <systemitem class="filesystem">sysfs</systemitem>
+filesystem, e.g., the addition and removal of hardware. This package also
+detects existing hardware during boot and inserts the relevant modules into the
+running kernel.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +23,10 @@
<seglistitem><seg>0.01 SBU</seg><seg>0.1 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Hotplug installation depends on</segtitle>
+<seglistitem><seg>Unchecked</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -26,15 +36,17 @@
<screen><userinput>make install</userinput></screen>
-<para>Copy a file that the &quot;install&quot; target omits.</para>
+<para>Copy a file that the <quote>install</quote> target omits.</para>
<screen><userinput>cp etc/hotplug/pnp.distmap /etc/hotplug</userinput></screen>
-<para>Remove Hotplug's init script:</para>
+<para>Remove the init script that Hotplug installs, since we're going to be
+using the script included with LFS-Bootscripts:</para>
<screen><userinput>rm -rf /etc/init.d</userinput></screen>
-<para>Remove the network hotplug agent:</para>
+<para>Network device hotplugging is not supported by LFS bootscripts yet. For
+that reason, remove the network hotplug agent:</para>
<screen><userinput>rm -f /etc/hotplug/net.agent</userinput></screen>
</sect2>
@@ -42,7 +54,113 @@
<sect2 id="contents-hotplug" role="content"><title>Contents of Hotplug</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed program</segtitle>
+<segtitle>Installed scripts</segtitle>
+<segtitle>Installed files</segtitle>
+<seglistitem><seg>hotplug</seg>
+<seg>/etc/hotplug/*.rc, /etc/hotplug/*.agent</seg>
+<seg>/etc/hotplug/hotplug.functions, /etc/hotplug/blacklist, /etc/hotplug/{pci,usb},
+/etc/hotplug/usb.usermap, /etc/hotplug.d</seg></seglistitem>
+</segmentedlist>
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="hotplug">
+<term><command>hotplug</command></term>
+<listitem>
+<indexterm zone="ch-system-hotplug hotplug"><primary
+sortas="b-hotplug">hotplug</primary></indexterm>
+<para>This script is called by default by Linux kernel when something
+changes in its internal state (e.g., a new device is added or removed).</para>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hotplug-rc">
+<term><command>/etc/hotplug/*.rc</command></term>
+<listitem>
+<indexterm zone="ch-system-hotplug hotplug-rc"><primary
+sortas="d-/etc/hotplug/*.rc">/etc/hotplug/*.rc</primary></indexterm>
+<para>These scripts are used for cold plugging, i.e., detection and other
+specific actions upon hardware already present during system startup.
+They are called by the <filename>hotplug</filename> initscript that comes
+from the LFS-Bootscripts package.
+The <command>*.rc</command>
+scripts try to recover hotplug events that were lost during system boot
+because, e.g., the root filesystem was not mounted by the kernel.
+</para>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hotplug-agent">
+<term><command>/etc/hotplug/*.agent</command></term>
+<listitem>
+<indexterm zone="ch-system-hotplug hotplug-agent"><primary
+sortas="d-/etc/hotplug/*.agent">/etc/hotplug/*.agent</primary></indexterm>
+<para>These scripts are called by <command>hotplug</command>
+in response to different types of hotplug events generated by the kernel.
+Their action is to insert corresponding kernel modules and call user-provided
+scripts, if any.
+</para>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hotplug-functions">
+<term><filename>/etc/hotplug/hotplug.functions</filename></term>
+<listitem>
+<indexterm zone="ch-system-hotplug hotplug-functions"><primary
+sortas="e-/etc/hotplug/hotplug.functions">/etc/hotplug/hotplug.functions</primary></indexterm>
+<para>This file contains common functions used by other scripts in Hotplug
+package.
+</para>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hotplug-blacklist">
+<term><filename>/etc/hotplug/blacklist</filename></term>
+<listitem>
+<indexterm zone="ch-system-hotplug hotplug-blacklist"><primary
+sortas="e-/etc/hotplug/blacklist">/etc/hotplug/blacklist</primary></indexterm>
+<para>This file contains the list of modules that should never be
+inserted into the kernel by hotplug scripts.
+</para>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hotplug-subdirs">
+<term><filename class="directory">/etc/hotplug/{pci,usb}</filename></term>
+<listitem>
+<indexterm zone="ch-system-hotplug hotplug-subdirs"><primary
+sortas="e-/etc/hotplug/{pci,usb}">/etc/hotplug/{pci,usb}</primary></indexterm>
+<para>These directories are supposed to contain user-written handlers for
+hotplug events.
+</para>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hotplug-usb.usermap">
+<term><filename>/etc/hotplug/usb.usermap</filename></term>
+<listitem>
+<indexterm zone="ch-system-hotplug hotplug-usb.usermap"><primary
+sortas="e-/etc/hotplug/usb.usermap">/etc/hotplug/usb.usermap</primary></indexterm>
+<para>This file contains rules that determine which user-defined handlers to
+call for each USB device, based on its vendor, id and other attributes.
+</para>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hotplug-hotplug.d">
+<term><filename class="directory">/etc/hotplug.d</filename></term>
+<listitem>
+<indexterm zone="ch-system-hotplug hotplug-hotplug.d"><primary
+sortas="e-/etc/hotplug.d">/etc/hotplug.d</primary></indexterm>
+<para>This directory contains programs (or symlinks to them)
+that are interested in receiving hotplug events. E.g.,
+<application>Udev</application> puts its symlink here during installation.
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
diff --git a/chapter06/iana-etc.xml b/chapter06/iana-etc.xml
index c37ce147c..3f10e728e 100644
--- a/chapter06/iana-etc.xml
+++ b/chapter06/iana-etc.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-iana-etc" xreflabel="Iana-Etc" role="wrap">
+<sect1 id="ch-system-iana-etc" role="wrap">
<title>Iana-Etc-&iana-etc-version;</title>
<?dbhtml filename="iana-etc.html"?>
<indexterm zone="ch-system-iana-etc"><primary sortas="a-Iana-Etc">Iana-Etc</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Iana-Etc package provides data for network services and protocols.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,10 @@
<seglistitem><seg>0.1 SBU</seg><seg>641 KB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Iana-Etc installation depends on</segtitle>
+<seglistitem><seg>Make</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -26,7 +31,7 @@
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -35,9 +40,35 @@
<sect2 id="contents-iana-etc" role="content"><title>Contents of Iana-Etc</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed files</segtitle>
+<seglistitem><seg>/etc/protocols and /etc/services</seg></seglistitem>
+</segmentedlist>
-</sect2>
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="protocols">
+<term><filename>/etc/protocols</filename></term>
+<listitem>
+<para>Describes the various DARPA Internet protocols that are
+available from the TCP/IP subsystem</para>
+<indexterm zone="ch-system-iana-etc"><primary sortas="e-/etc/protocols">/etc/protocols</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="services">
+<term><filename>/etc/services</filename></term>
+<listitem>
+<para>Provides a mapping between friendly textual names for internet
+services, and their underlying assigned port numbers and protocol
+types</para>
+<indexterm zone="ch-system-iana-etc"><primary sortas="e-/etc/services">/etc/services</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
+</sect2>
</sect1>
+
diff --git a/chapter06/inetutils.xml b/chapter06/inetutils.xml
index 41571c3b5..e489dfc06 100644
--- a/chapter06/inetutils.xml
+++ b/chapter06/inetutils.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-inetutils" xreflabel="Inetutils" role="wrap">
+<sect1 id="ch-system-inetutils" role="wrap">
<title>Inetutils-&inetutils-version;</title>
<?dbhtml filename="inetutils.html"?>
<indexterm zone="ch-system-inetutils"><primary sortas="a-Inetutils">Inetutils</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Inetutils package contains programs for basic networking.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,35 +18,84 @@
<seglistitem><seg>0.2 SBU</seg><seg>11 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Inetutils installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils,
+Diffutils, GCC, Glibc, Grep, Make, Ncurses, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Inetutils</title>
-<para>Apply a patch patch:</para>
+<para>Inetutils has issues with the Linux 2.6 kernel series. Fix these
+issues by applying the following patch:</para>
<screen><userinput>patch -Np1 -i ../inetutils-&inetutils-version;-kernel_headers-1.patch</userinput></screen>
-<para>Apply another patch:</para>
+<para>All programs that come with Inetutils will not be installed.
+However, the Inetutils build system will insist on installing all the
+man pages anyway. The following patch will correct this
+situation:</para>
<screen><userinput>patch -Np1 -i ../inetutils-&inetutils-version;-no_server_man_pages-1.patch</userinput></screen>
-<para>Now prepare Inetutils for compilation:</para>
+<para>Prepare Inetutils for compilation:</para>
<screen><userinput>./configure --prefix=/usr --libexecdir=/usr/sbin \
--sysconfdir=/etc --localstatedir=/var \
--disable-logger --disable-syslogd \
--disable-whois --disable-servers</userinput></screen>
+<para>The meaning of the configure options:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>--disable-logger</parameter></term>
+<listitem><para>This option
+prevents Inetutils from installing the <command>logger</command> program, which is used by
+scripts to pass messages to the System Log Daemon. Do not install it
+because Util-linux installs a better version later.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><parameter>--disable-syslogd</parameter></term>
+<listitem><para>This option
+prevents Inetutils from installing the System Log Daemon, which is
+installed with the Sysklogd package.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><parameter>--disable-whois</parameter></term>
+<listitem><para>This option disables
+the building of the Inetutils <command>whois</command> client, which is out of date.
+Instructions for a better <command>whois</command> client are in the BLFS book.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><parameter>--disable-servers</parameter></term>
+<listitem><para>This disables the installation of the various network
+servers included as part of the Inetutils package. These servers are
+deemed not appropriate in a basic LFS system. Some are insecure by
+nature and are only considered safe on trusted networks. More
+information can be found at <phrase condition="html"><ulink
+url="&blfs-root;view/svn/basicnet/inetutils.html"/></phrase><phrase
+condition="pdf"><ulink url="&blfs-root;view/svn/ basicnet/inetutils.html"/></phrase>. Note that
+better replacements are available for many of these
+servers.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>Move the <command>ping</command> program:</para>
+<para>Move the <command>ping</command> program to its FHS-compliant
+place:</para>
<screen><userinput>mv /usr/bin/ping /bin</userinput></screen>
@@ -54,8 +104,80 @@
<sect2 id="contents-inetutils" role="content"><title>Contents of Inetutils</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>ftp, ping, rcp, rlogin, rsh, talk, telnet, and tftp</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="ftp">
+<term><command>ftp</command></term>
+<listitem>
+<para>Is the file transfer protocol program</para>
+<indexterm zone="ch-system-inetutils ftp"><primary sortas="b-ftp">ftp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ping">
+<term><command>ping</command></term>
+<listitem>
+<para>Sends echo-request packets and reports how long the replies take</para>
+<indexterm zone="ch-system-inetutils ping"><primary sortas="b-ping">ping</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rcp">
+<term><command>rcp</command></term>
+<listitem>
+<para>Performs remote file copy</para>
+<indexterm zone="ch-system-inetutils rcp"><primary sortas="b-rcp">rcp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rlogin">
+<term><command>rlogin</command></term>
+<listitem>
+<para>Performs remote login</para>
+<indexterm zone="ch-system-inetutils rlogin"><primary sortas="b-rlogin">rlogin</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rsh">
+<term><command>rsh</command></term>
+<listitem>
+<para>Runs a remote shell</para>
+<indexterm zone="ch-system-inetutils rsh"><primary sortas="b-rsh">rsh</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="talk">
+<term><command>talk</command></term>
+<listitem>
+<para>Is used to chat with another user</para>
+<indexterm zone="ch-system-inetutils talk"><primary sortas="b-talk">talk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="telnet">
+<term><command>telnet</command></term>
+<listitem>
+<para>An interface to the TELNET protocol</para>
+<indexterm zone="ch-system-inetutils telnet"><primary sortas="b-telnet">telnet</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tftp">
+<term><command>tftp</command></term>
+<listitem>
+<para>A trivial file transfer program</para>
+<indexterm zone="ch-system-inetutils tftp"><primary sortas="b-tftp">tftp</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/introduction.xml b/chapter06/introduction.xml
index a26434375..b19f69e45 100644
--- a/chapter06/introduction.xml
+++ b/chapter06/introduction.xml
@@ -7,6 +7,65 @@
<title>Introduction</title>
<?dbhtml filename="introduction.html"?>
-<para>See testing</para>
+<para>In this chapter, we enter the building site and start
+constructing the LFS system in earnest. That is, we chroot into the
+temporary mini Linux system, make a few final preparations, and then
+begin installing the packages.</para>
+
+<para>The installation of this software is straightforward. Although
+in many cases the installation instructions could be made shorter and
+more generic, we have opted to provide the full instructions for every
+package to minimize the possibilities for mistakes. The key to
+learning what makes a Linux system work is to know what each package
+is used for and why the user (or the system) needs it. For every
+installed package, a summary of its contents is given, followed by
+concise descriptions of each program and library the package
+installed.</para>
+
+<para>If using the compiler optimizations provided in this chapter,
+please review the optimization hint at <ulink
+url="&hints-root;optimization.txt"/>. Compiler optimizations can make
+a program run slightly faster, but they may also cause compilation
+difficulties and problems when running the program. If a package
+refuses to compile when using optimization, try to compile it without
+optimization and see if that fixes the problem. Even if the package
+does compile when using optimization, there is the risk it may have
+been compiled incorrectly because of the complex interactions between
+the code and build tools. The small potential gains achieved in using
+compiler optimizations are often outweighed by the risks. First-time
+builders of LFS are encouraged to build without custom optimizations.
+The subsequent system will still run very fast and be stable at the
+same time.</para>
+
+<para>The order that packages are installed in this chapter needs to
+be strictly followed to ensure that no program accidentally acquires a
+path referring to <filename class="directory">/tools</filename>
+hard-wired into it. For the same reason, do not compile packages in
+parallel. Compiling in parallel may save time (especially on dual-CPU
+machines), but it could result in a program containing a hard-wired
+path to <filename class="directory">/tools</filename>, which will
+cause the program to stop working when that directory is
+removed.</para>
+
+<para>Before the installation instructions, each installation page
+provides information about the package, including a concise
+description of what it contains, approximately how long it will take
+to build, how much disk space is required during this building
+process, and any other packages needed to successfully build the
+package. Following the installation instructions, there is a list of
+programs and libraries (along with brief descriptions of these) that
+the package installs.</para>
+
+<para>To keep track of which package installs particular files, a package
+manager can be used. For a general overview of different styles of package
+managers, please refer to <ulink
+url="&blfs-root;view/svn/introduction/important.html"/>.
+For a package management method specifically geared towards LFS, we recommend <ulink
+url="&hints-root;more_control_and_pkg_man.txt"/>.</para>
+
+<note><para>The remainder of this book is to be performed while logged
+in as user <emphasis>root</emphasis> and no longer as user
+<emphasis>lfs</emphasis>.</para></note>
</sect1>
+
diff --git a/chapter06/iproute2.xml b/chapter06/iproute2.xml
index 3cce62619..cf492bd64 100644
--- a/chapter06/iproute2.xml
+++ b/chapter06/iproute2.xml
@@ -3,16 +3,17 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-iproute2" xreflabel="IProute2" role="wrap">
-<title>Iproute2-&iproute2-version;</title>
+<sect1 id="ch-system-iproute2" role="wrap">
+ <title>Iproute2-&iproute2-version;</title>
<?dbhtml filename="iproute2.html"?>
-
<indexterm zone="ch-system-iproute2">
- <primary sortas="a-iproute2">iproute2</primary>
+ <primary sortas="a-iproute2">Iproute2</primary>
</indexterm>
<sect2 role="package">
<title/>
-
+ <para>The Iproute2 package contains programs for basic and advanced
+ IPV4-based networking.
+ </para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
@@ -21,42 +22,244 @@
<seg>.6 MB</seg>
</seglistitem>
</segmentedlist>
-
+ <segmentedlist>
+ <segtitle>Iproute2 installation depends on</segtitle>
+ <seglistitem>
+ <seg>GCC, Glibc, Make, Linux-Headers, and Sed</seg>
+ </seglistitem>
+ </segmentedlist>
</sect2>
-
<sect2 role="installation">
<title>Installation of Iproute2</title>
-
- <para>Apply a patch</para>
+ <para>The <command>arpd</command> binary included in this package is
+ dependent on Berkeley DB. Because <command>arpd</command> is not a very
+ common requirement on a base Linux system, remove the dependency on
+ Berkeley DB by applying the patch using the command below. If
+ the <command>arpd</command> binary is needed, instructions for
+ compiling Berkeley DB can be found in the BLFS Book at <ulink
+ url="&blfs-root;view/svn/content/databases.html#db"/>.
+ </para>
<screen><userinput>patch -Np1 -i ../iproute2-&iproute2-patch-version;-remove_db-1.patch</userinput></screen>
- <!--NEW-->
- <para>The patch below fixes the issue with the newer versions of findutils,
- the issue will give an error message it options are not in the proper order.
- This patch corrects this issue for IPRoute2.</para>
+<para>The patch below fixes the issue with the newer versions of
+findutils whose <command>find</command> command will report an error
+message when its options are not in the proper order.</para>
- <screen><userinput>patch -Np1 -i ../iproute2-&iproute2-patch-version;-find_update-1.patch</userinput></screen>
+<screen><userinput>patch -Np1 -i ../iproute2-&iproute2-patch-version;-find_update-1.patch</userinput></screen>
- <para>Prepare iproute2 for compilation:</para>
-
+
+ <para>Prepare Iproute2 for compilation:</para>
<screen><userinput>./configure </userinput></screen>
<para>Compile the package:</para>
<screen><userinput>make SBINDIR=/sbin</userinput></screen>
- <para>Now install it:</para>
-
- <!--NEW-->
- <screen><userinput>make install SBINDIR=/sbin</userinput></screen>
-
+ <para>The meaning of the make option:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><parameter>SBINDIR=/sbin</parameter></term>
+ <listitem><para>This makes sure that the Iproute2 binaries will install into
+ <filename class="directory">/sbin</filename>. This is the correct
+ location according to the FHS, because some of the Iproute2 binaries are used
+ in the bootscripts.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Install the package:</para>
+
+ <screen><userinput>make SBINDIR=/sbin install</userinput></screen>
</sect2>
<sect2 id="contents-iproute2" role="content">
- <title>Contents of Iproute2</title>
-
- <para>See testing</para>
-
+ <title>Contents of Iproute2</title>
+ <segmentedlist>
+ <segtitle>Installed programs</segtitle>
+ <seglistitem>
+ <seg>ifstat, ip, nstat, routef, routel, rtmon, rtstat, ss, and tc.</seg>
+ </seglistitem>
+ </segmentedlist>
+
+ <variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+ <varlistentry id="ifstat">
+ <term>
+ <command>ifstat</command>
+ </term>
+ <listitem>
+ <para>Shows the interfaces statistic, including the amount of transmitted
+ and received packages by interface.</para>
+ <indexterm zone="ch-system-iproute2 ifstat">
+ <primary sortas="b-ifstat">ifstat</primary>
+ </indexterm>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="ip">
+ <term>
+ <command>ip</command>
+ </term>
+ <listitem>
+
+ <para>The main executable. It has several different functions:</para>
+
+ <para><command>ip link <replaceable>[device]</replaceable></command>
+ allows users to look at the state of devices and to make changes.
+ </para>
+
+ <para><command>ip addr</command> allows users to look at addresses and
+ their properties, add new addresses, and delete old ones.
+ </para>
+
+ <para><command>ip neighbor</command> allows users to look at
+ neighbor bindings and their properties, add new
+ neighbor entries, and delete old ones.
+ </para>
+
+ <para><command>ip rule</command> allows users to look at the routing
+ policies and change them.
+ </para>
+
+ <para><command>ip route</command> allows users to look at the routing
+ table and change routing table rules.
+ </para>
+
+ <para><command>ip tunnel</command> allows users to look at the IP
+ tunnels and their properties, and change them.
+ </para>
+
+ <para><command>ip maddr</command> allows users to look at the multicast
+ addresses and their properties, and change them.
+ </para>
+
+ <para><command>ip mroute</command> allows users to set, change, or
+ delete the multicast routing.
+ </para>
+
+ <para><command>ip monitor</command> allows users to
+ continously monitor the state of devices, addresses and routes.
+ </para>
+ <indexterm zone="ch-system-iproute2 ip">
+ <primary sortas="b-ip">ip</primary>
+ </indexterm>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="nstat">
+ <term>
+ <command>nstat</command>
+ </term>
+ <listitem>
+ <para>Shows network statistics.</para>
+ <indexterm zone="ch-system-iproute2 nstat">
+ <primary sortas="b-nstat">nstat</primary>
+ </indexterm>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="routef">
+ <term>
+ <command>routef</command>
+ </term>
+ <listitem>
+ <para>A component of <command>ip route</command>. This is for flushing the routing
+ tables.
+ </para>
+ <indexterm zone="ch-system-iproute2 routef">
+ <primary sortas="b-routef">routef</primary>
+ </indexterm>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="routel">
+ <term>
+ <command>routel</command>
+ </term>
+ <listitem>
+ <para>A component of <command>ip route</command>. This is for listing the routing
+ tables.
+ </para>
+ <indexterm zone="ch-system-iproute2 routel">
+ <primary sortas="b-routel">routel</primary>
+ </indexterm>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="rtmon">
+ <term>
+ <command>rtmon</command>
+ </term>
+ <listitem>
+ <para>Route monitoring utility.</para>
+ <indexterm zone="ch-system-iproute2 rtmon">
+ <primary sortas="b-rtmon">rtmon</primary>
+ </indexterm>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="rtstat">
+ <term>
+ <command>rtstat</command>
+ </term>
+ <listitem>
+ <para>Route status utility</para>
+ <indexterm zone="ch-system-iproute2 rtstat">
+ <primary sortas="b-rtstat">rtstat</primary>
+ </indexterm>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="ss">
+ <term>
+ <command>ss</command>
+ </term>
+ <listitem>
+ <para>Similar to the <command>netstat</command> command; shows active connections</para>
+ <indexterm zone="ch-system-iproute2 ss">
+ <primary sortas="b-ss">ss</primary>
+ </indexterm>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="tc">
+ <term>
+ <command>tc</command>
+ </term>
+ <listitem>
+ <para>Traffic Controlling Executable; this is for Quality Of
+Service (QOS) and Class Of Service (COS)
+ implementations
+ </para>
+
+ <para><command>tc qdisc</command> allows users to setup the queueing
+ discipline
+ </para>
+
+ <para><command>tc class</command> allows users to setup classes based on
+ the queuing discipline scheduling
+ </para>
+
+ <para><command>tc estimator</command> allows users to estimate the
+ network flow into a network
+ </para>
+
+ <para><command>tc filter</command> allows users to setup the QOS/COS
+ packet filtering
+ </para>
+
+ <para><command>tc policy</command> allows users to setup the QOS/COS
+ policies
+ </para>
+ <indexterm zone="ch-system-iproute2 ss">
+ <primary sortas="b-tc">tc</primary>
+ </indexterm>
+ </listitem>
+ </varlistentry>
+ </variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/kbd.xml b/chapter06/kbd.xml
index 99acf19cd..055a81d9f 100644
--- a/chapter06/kbd.xml
+++ b/chapter06/kbd.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-kbd" xreflabel="Kbd" role="wrap">
+<sect1 id="ch-system-kbd" role="wrap">
<title>Kbd-&kbd-version;</title>
<?dbhtml filename="kbd.html"?>
<indexterm zone="ch-system-kbd"><primary sortas="a-Kbd">Kbd</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Kbd package contains key-table files and keyboard utilities.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>12 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Kbd installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Bison, Coreutils,
+Diffutils, Flex, GCC, Gettext, Glibc, Grep, Gzip, M4, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -30,7 +36,7 @@
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -38,8 +44,244 @@
<sect2 id="contents-kbd" role="content"><title>Contents of Kbd</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>chvt, deallocvt, dumpkeys,
+fgconsole, getkeycodes, getunimap, kbd_mode, kbdrate, loadkeys, loadunimap,
+mapscrn, openvt, psfaddtable (link to psfxtable), psfgettable (link to
+psfxtable), psfstriptable (link to psfxtable), psfxtable, resizecons,
+setfont, setkeycodes, setleds, setlogcons, setmetamode, setvesablank,
+showconsolefont, showkey, unicode_start, and unicode_stop</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="chvt">
+<term><command>chvt</command></term>
+<listitem>
+<para>Changes the foreground virtual terminal</para>
+<indexterm zone="ch-system-kbd chvt"><primary sortas="b-chvt">chvt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="deallocvt">
+<term><command>deallocvt</command></term>
+<listitem>
+<para>Deallocates unused virtual terminals</para>
+<indexterm zone="ch-system-kbd deallocvt"><primary sortas="b-deallocvt">deallocvt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="dumpkeys">
+<term><command>dumpkeys</command></term>
+<listitem>
+<para>Dumps the keyboard translation tables</para>
+<indexterm zone="ch-system-kbd dumpkeys"><primary sortas="b-dumpkeys">dumpkeys</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fgconsole">
+<term><command>fgconsole</command></term>
+<listitem>
+<para>Prints the number of the active virtual terminal</para>
+<indexterm zone="ch-system-kbd fgconsole"><primary sortas="b-fgconsole">fgconsole</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="getkeycodes">
+<term><command>getkeycodes</command></term>
+<listitem>
+<para>Prints the kernel scancode-to-keycode mapping table</para>
+<indexterm zone="ch-system-kbd getkeycodes"><primary sortas="b-getkeycodes">getkeycodes</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="getunimap">
+<term><command>getunimap</command></term>
+<listitem>
+<para>Prints the currently used unimap</para>
+<indexterm zone="ch-system-kbd getunimap"><primary sortas="b-getunimap">getunimap</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="kbd_mode">
+<term><command>kbd_mode</command></term>
+<listitem>
+<para>Reports or sets the keyboard mode</para>
+<indexterm zone="ch-system-kbd kbd_mode"><primary sortas="b-kbd_mode">kbd_mode</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="kbdrate">
+<term><command>kbdrate</command></term>
+<listitem>
+<para>Sets the keyboard repeat and delay rates</para>
+<indexterm zone="ch-system-kbd kbdrate"><primary sortas="b-kbdrate">kbdrate</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="loadkeys">
+<term><command>loadkeys</command></term>
+<listitem>
+<para>Loads the keyboard translation tables</para>
+<indexterm zone="ch-system-kbd loadkeys"><primary sortas="b-loadkeys">loadkeys</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="loadunimap">
+<term><command>loadunimap</command></term>
+<listitem>
+<para>Loads the kernel unicode-to-font mapping table</para>
+<indexterm zone="ch-system-kbd loadunimap"><primary sortas="b-loadunimap">loadunimap</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mapscrn">
+<term><command>mapscrn</command></term>
+<listitem>
+<para>An obsolete program that used to load
+a user-defined output character mapping table into the console driver; this is
+now done by <command>setfont</command></para>
+<indexterm zone="ch-system-kbd mapscrn"><primary sortas="b-mapscrn">mapscrn</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="openvt">
+<term><command>openvt</command></term>
+<listitem>
+<para>Starts a program on a new virtual terminal (VT)</para>
+<indexterm zone="ch-system-kbd openvt"><primary sortas="b-openvt">openvt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="psfaddtable">
+<term><command>psfaddtable</command></term>
+<listitem>
+<para>A link to <command>psfxtable</command></para>
+<indexterm zone="ch-system-kbd psfaddtable"><primary sortas="b-psfaddtable">psfaddtable</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="psfgettable">
+<term><command>psfgettable</command></term>
+<listitem>
+<para>A link to <command>psfxtable</command></para>
+<indexterm zone="ch-system-kbd psfgettable"><primary sortas="b-psfgettable">psfgettable</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="psfstriptable">
+<term><command>psfstriptable</command></term>
+<listitem>
+<para>A link to <command>psfxtable</command></para>
+<indexterm zone="ch-system-kbd psfstriptable"><primary sortas="b-psfstriptable">psfstriptable</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="psfxtable">
+<term><command>psfxtable</command></term>
+<listitem>
+<para>Handle Unicode character tables for console fonts</para>
+<indexterm zone="ch-system-kbd psfxtable"><primary sortas="b-psfxtable">psfxtable</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="resizecons">
+<term><command>resizecons</command></term>
+<listitem>
+<para>Changes the kernel idea of the console size</para>
+<indexterm zone="ch-system-kbd resizecons"><primary sortas="b-resizecons">resizecons</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="setfont">
+<term><command>setfont</command></term>
+<listitem>
+<para>Changes the Enhanced Graphic Adapter (EGA) and Video Graphics
+Array (VGA) fonts on the console</para>
+<indexterm zone="ch-system-kbd setfont"><primary sortas="b-setfont">setfont</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="setkeycodes">
+<term><command>setkeycodes</command></term>
+<listitem>
+<para>Loads kernel scancode-to-keycode mapping table entries; this is
+useful if there are unusual keys on the keyboard</para>
+<indexterm zone="ch-system-kbd setkeycodes"><primary sortas="b-setkeycodes">setkeycodes</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="setleds">
+<term><command>setleds</command></term>
+<listitem>
+<para>Sets the keyboard flags and Light Emitting Diodes (LEDs)</para>
+<indexterm zone="ch-system-kbd setleds"><primary sortas="b-setleds">setleds</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="setlogcons">
+<term><command>setlogcons</command></term>
+<listitem>
+<para>Sends kernel messages to the console</para>
+<indexterm zone="ch-system-kbd setlogcons"><primary sortas="b-setlogcons">setlogcons</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="setmetamode">
+<term><command>setmetamode</command></term>
+<listitem>
+<para>Defines the keyboard meta-key handling</para>
+<indexterm zone="ch-system-kbd setmetamode"><primary sortas="b-setmetamode">setmetamode</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="setvesablank">
+<term><command>setvesablank</command></term>
+<listitem>
+<para>Lets the user adjust the built-in hardware screensaver (a blank
+screen)</para>
+<indexterm zone="ch-system-kbd setvesablank"><primary sortas="b-setvesablank">setvesablank</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="showconsolefont">
+<term><command>showconsolefont</command></term>
+<listitem>
+<para>Shows the current EGA/VGA console screen font</para>
+<indexterm zone="ch-system-kbd showconsolefont"><primary sortas="b-showconsolefont">showconsolefont</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="showkey">
+<term><command>showkey</command></term>
+<listitem>
+<para>Reports the scancodes, keycodes, and ASCII codes of the keys
+pressed on the keyboard</para>
+<indexterm zone="ch-system-kbd showkey"><primary sortas="b-showkey">showkey</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="unicode_start">
+<term><command>unicode_start</command></term>
+<listitem>
+<para>Puts the keyboard and console in UNICODE mode. Never use it on LFS,
+because applications are not configured to support UNICODE.</para>
+<indexterm zone="ch-system-kbd unicode_start"><primary sortas="b-unicode_start">unicode_start</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="unicode_stop">
+<term><command>unicode_stop</command></term>
+<listitem>
+<para>Reverts keyboard and console from UNICODE mode</para>
+<indexterm zone="ch-system-kbd unicode_stop"><primary sortas="b-unicode_stop">unicode_stop</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/kernfs.xml b/chapter06/kernfs.xml
index a82a03b96..0f925c979 100644
--- a/chapter06/kernfs.xml
+++ b/chapter06/kernfs.xml
@@ -1,10 +1,17 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
+ <!ENTITY % general-entities SYSTEM "../general.ent">
+ %general-entities;
+]>
<sect1 id="ch-system-kernfs">
<title>Mounting Virtual Kernel File Systems</title>
<?dbhtml filename="kernfs.html"?>
-<para>Create the dirs:</para>
+<para>Various file systems exported by the kernel do not exist on the
+hard drive, but are used to communicate to and from the kernel
+itself.</para>
+
+<para>Begin by creating directories onto which the file systems will be mounted:</para>
<screen><userinput>mkdir -p $LFS/{proc,sys}</userinput></screen>
@@ -13,10 +20,18 @@
<screen><userinput>mount -t proc proc $LFS/proc
mount -t sysfs sysfs $LFS/sys</userinput></screen>
-<para>Do some <quote>fake mounts</quote>:</para>
+<para>Remember that if for any reason you stop working on the LFS
+system and start again later, it is important to check that these file
+systems are mounted again before entering the chroot
+environment.</para>
+
+<para>Additional file systems will soon be mounted from within the
+chroot environment. To keep the host up to date, perform a <quote>fake
+mount</quote> for each of these now:</para>
<screen><userinput>mount -f -t ramfs ramfs $LFS/dev
mount -f -t tmpfs tmpfs $LFS/dev/shm
mount -f -t devpts -o gid=4,mode=620 devpts $LFS/dev/pts</userinput></screen>
</sect1>
+
diff --git a/chapter06/less.xml b/chapter06/less.xml
index ccae7af41..fffd1f3ed 100644
--- a/chapter06/less.xml
+++ b/chapter06/less.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-less" xreflabel="Less" role="wrap">
+<sect1 id="ch-system-less" role="wrap">
<title>Less-&less-version;</title>
<?dbhtml filename="less.html"?>
<indexterm zone="ch-system-less"><primary sortas="a-Less">Less</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Less package contains a text file viewer.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>3.4 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Less installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Glibc, Grep, Make, Ncurses, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -26,20 +32,63 @@
<screen><userinput>./configure --prefix=/usr --bindir=/bin --sysconfdir=/etc</userinput></screen>
+<para>The meaning of the configure option:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>--sysconfdir=/etc</parameter></term>
+<listitem><para>This option tells the programs created by the package to look in
+<filename class="directory">/etc</filename> for the configuration files.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-
</sect2>
<sect2 id="contents-less" role="content"><title>Contents of Less</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>less, lessecho, and lesskey</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="less">
+<term><command>less</command></term>
+<listitem>
+<para>a file viewer or pager; it displays the contents of the given
+file, letting the user scroll, find strings, and jump to marks</para>
+<indexterm zone="ch-system-less less"><primary sortas="b-less">less</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lessecho">
+<term><command>lessecho</command></term>
+<listitem>
+<para>needed to expand meta-characters, such as <emphasis>*</emphasis>
+and <emphasis>?</emphasis>, in filenames on Unix systems</para>
+<indexterm zone="ch-system-less lessecho"><primary sortas="b-lessecho">lessecho</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lesskey">
+<term><command>lesskey</command></term>
+<listitem>
+<para>used to specify the key bindings for <command>less</command></para>
+<indexterm zone="ch-system-less lesskey"><primary sortas="b-lesskey">lesskey</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/libol.xml b/chapter06/libol.xml
index abb38e48f..a593f1e17 100644
--- a/chapter06/libol.xml
+++ b/chapter06/libol.xml
@@ -10,6 +10,7 @@
<indexterm zone="ch-system-libol"><primary sortas="a-Libol">Libol</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Libol package contains support libraries needed by Syslog-ng.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,10 @@
<seglistitem><seg>Unchecked</seg><seg>Unchecked</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Libol installation depends on</segtitle>
+<seglistitem><seg>Unchecked</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -24,14 +29,13 @@
<para>Prepare Libol for compilation</para>
-<!--NEW-->
<screen><userinput>./configure --prefix=/usr</userinput></screen>
-<para>Compile Libol:</para>
+<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -40,7 +44,34 @@
<sect2 id="contents-libol" role="content"><title>Contents of Libol</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>Unchecked</seg></seglistitem>
+</segmentedlist>
+
+<!--
+<variablelist><title>Short descriptions</title>
+
+<varlistentry id="klogd">
+<term><command>klogd</command></term>
+<listitem>
+<indexterm zone="ch-system-sysklogd klogd"><primary sortas="b-klogd">klogd</primary></indexterm>
+<para>is a system daemon for intercepting and logging kernel messages.</para>
+</listitem>
+</varlistentry>
+
+<varlistentry id="syslogd">
+<term><command>syslogd</command></term>
+<listitem>
+<indexterm zone="ch-system-sysklogd syslogd"><primary sortas="b-syslogd">syslogd</primary></indexterm>
+<para>logs the messages that system programs
+offer for logging. Every logged message contains at least a date stamp and a
+hostname, and normally the program's name too, but that depends on how
+trusting the logging daemon is told to be.</para>
+</listitem>
+</varlistentry>
+</variablelist>
+-->
</sect2>
diff --git a/chapter06/libtool.xml b/chapter06/libtool.xml
index 13691bb8b..403d2e968 100644
--- a/chapter06/libtool.xml
+++ b/chapter06/libtool.xml
@@ -3,13 +3,16 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-libtool" xreflabel="Libtool" role="wrap">
+<sect1 id="ch-system-libtool" role="wrap">
<title>Libtool-&libtool-version;</title>
<?dbhtml filename="libtool.html"?>
<indexterm zone="ch-system-libtool"><primary sortas="a-Libtool">Libtool</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Libtool package contains the GNU generic library support script.
+It wraps the complexity of using shared libraries in a consistent, portable
+interface.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +20,11 @@
<seglistitem><seg>1.5 SBU</seg><seg>20 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Libtool installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -42,8 +50,41 @@
<sect2 id="contents-libtool" role="content"><title>Contents of Libtool</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>libtool and libtoolize</seg><seg>libltdl.[a,so]</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="libtool">
+<term><command>libtool</command></term>
+<listitem>
+<para>Provides generalized library-building support services</para>
+<indexterm zone="ch-system-libtool libtool"><primary sortas="b-libtool">libtool</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libtoolize">
+<term><command>libtoolize</command></term>
+<listitem>
+<para>Provides a standard way to add <command>libtool</command> support to a package</para>
+<indexterm zone="ch-system-libtool libtoolize"><primary sortas="b-libtoolize">libtoolize</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libltdl">
+<term><filename class="libraryfile">libltdl</filename></term>
+<listitem>
+<para>Hides the various difficulties of dlopening libraries</para>
+<indexterm zone="ch-system-libtool libltdl"><primary sortas="c-libltdl">libltdl</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/linux-libc-headers.xml b/chapter06/linux-libc-headers.xml
index 5db583994..aa14b87bf 100644
--- a/chapter06/linux-libc-headers.xml
+++ b/chapter06/linux-libc-headers.xml
@@ -12,6 +12,8 @@
</indexterm>
<sect2 role="package"><title/>
+<para>The Linux-Libc-Headers package contains the
+<quote>sanitized</quote> kernel headers.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -19,21 +21,34 @@
<seglistitem><seg>0.1 SBU</seg><seg>22 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Linux-Libc-Headers installation depends on</segtitle>
+<seglistitem><seg>Coreutils</seg></seglistitem>
+</segmentedlist>
+
</sect2>
<sect2 role="installation">
<title>Installation of Linux-Libc-Headers</title>
+<para>For years it has been common practice to use <quote>raw</quote>
+kernel headers (straight from a kernel tarball) in <filename
+class="directory">/usr/include</filename>, but over the last few
+years, the kernel developers have taken a strong stance that this
+should not be done. This gave birth to the Linux-Libc-Headers Project,
+which was designed to maintain an API stable version of the Linux
+headers.</para>
+
<para>Install the header files:</para>
<screen><userinput>cp -R include/asm-i386 /usr/include/asm
cp -R include/linux /usr/include</userinput></screen>
-<para>Assure that all the headers are owned by root:</para>
+<para>Ensure that all the headers are owned by root:</para>
<screen><userinput>chown -R root:root /usr/include/{asm,linux}</userinput></screen>
-<para>And make sure all the users can read the headers:</para>
+<para>Make sure the users can read the headers:</para>
<screen><userinput>find /usr/include/{asm,linux} -type d -exec chmod 755 {} \;
find /usr/include/{asm,linux} -type f -exec chmod 644 {} \;</userinput></screen>
@@ -43,8 +58,24 @@ find /usr/include/{asm,linux} -type f -exec chmod 644 {} \;</userinput></screen>
<sect2 id="contents-linux-libc-headers" role="content"><title>Contents of Linux-Libc-Headers</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed headers</segtitle>
+<seglistitem><seg>/usr/include/{asm,linux}/*.h</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="linux-libc-headers">
+<term><filename class="headerfile">/usr/include/{asm,linux}/*.h</filename></term>
+<listitem>
+<para>The Linux headers API</para>
+<indexterm zone="ch-system-linux-libc-headers linux-libc-headers"><primary sortas="e-/usr/include/{asm,linux}/*.h">/usr/include/{asm,linux}/*.h</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/m4.xml b/chapter06/m4.xml
index f81e5c583..ba350ab94 100644
--- a/chapter06/m4.xml
+++ b/chapter06/m4.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-m4" xreflabel="M4" role="wrap">
+<sect1 id="ch-system-m4" role="wrap">
<title>M4-&m4-version;</title>
<?dbhtml filename="m4.html"?>
<indexterm zone="ch-system-m4"><primary sortas="a-M4">M4</primary></indexterm>
<sect2 role="package"><title/>
+<para>The M4 package contains a macro processor.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>3.0 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>M4 installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils, GCC,
+Gettext, Glibc, Grep, Make, Perl, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -33,7 +39,7 @@
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>And install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -42,8 +48,31 @@
<sect2 id="contents-m4" role="content"><title>Contents of M4</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed program</segtitle>
+<seglistitem><seg>m4</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="m4">
+<term><command>m4</command></term>
+<listitem>
+<para>copies the given files while expanding the macros that they
+contain. These macros are either built-in or user-defined and can take
+any number of arguments. Besides performing macro expansion,
+<command>m4</command> has
+built-in functions for including named files, running Unix commands,
+performing integer arithmetic, manipulating text, recursion, etc. The
+<command>m4</command> program can be used either as a front-end to a compiler or as a
+macro processor in its own right.</para>
+<indexterm zone="ch-system-m4 m4"><primary sortas="b-m4">m4</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/make.xml b/chapter06/make.xml
index a0dd5ce18..585f94ca3 100644
--- a/chapter06/make.xml
+++ b/chapter06/make.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-make" xreflabel="Make" role="wrap">
+<sect1 id="ch-system-make" role="wrap">
<title>Make-&make-version;</title>
<?dbhtml filename="make.html"?>
<indexterm zone="ch-system-make"><primary sortas="a-Make">Make</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Make package contains a program for compiling large packages.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.2 SBU</seg><seg>8.8 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Make installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Gettext, Glibc, Grep, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -33,7 +39,7 @@
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -42,8 +48,25 @@
<sect2 id="contents-make" role="content"><title>Contents of Make</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed program</segtitle>
+<seglistitem><seg>make</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="make">
+<term><command>make</command></term>
+<listitem>
+<para>Automatically determines which pieces of a large package need to
+be recompiled and then issues the relevant commands</para>
+<indexterm zone="ch-system-make make"><primary sortas="b-make">make</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/man-pages.xml b/chapter06/man-pages.xml
index e9fcaeeed..ce568ae14 100644
--- a/chapter06/man-pages.xml
+++ b/chapter06/man-pages.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-man-pages" xreflabel="Man-pages" role="wrap">
+<sect1 id="ch-system-man-pages" role="wrap">
<title>Man-pages-&man-pages-version;</title>
<?dbhtml filename="man-pages.html"?>
<indexterm zone="ch-system-man-pages"><primary sortas="a-Man-pages">Man-pages</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Man-pages package contains over 1,200 manual pages.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,10 @@
<seglistitem><seg>0.1 SBU</seg><seg>15 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Man-pages installation depends on</segtitle>
+<seglistitem><seg>Bash, Coreutils, and Make</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -31,8 +36,25 @@
<sect2 id="contents-manpages" role="content"><title>Contents of Man-pages</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed files</segtitle>
+<seglistitem><seg>various manual pages</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="manual-pages">
+<term><filename>manual pages</filename></term>
+<listitem>
+<para>Describe the C and C++ functions, important
+device files, and significant configuration files</para>
+<indexterm zone="ch-system-man-pages manual-pages"><primary sortas="e-manual-pages">manual pages</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/man.xml b/chapter06/man.xml
index 042cb5fee..1a0bce0ff 100644
--- a/chapter06/man.xml
+++ b/chapter06/man.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-man" xreflabel="Man" role="wrap">
+<sect1 id="ch-system-man" role="wrap">
<title>Man-&man-version;</title>
<?dbhtml filename="man.html"?>
<indexterm zone="ch-system-man"><primary sortas="a-Man">Man</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Man package contains programs for finding and viewing manual pages.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,40 +18,160 @@
<seglistitem><seg>0.1 SBU</seg><seg>1.9MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Man installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Gawk, GCC,
+Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Man</title>
-<para>Issue a sed substitution:</para>
+<para>Two adjustments need to be made to the sources of Man.</para>
+
+<para>The first is a sed substitution to add the
+<parameter>-R</parameter> switch to the <envar>PAGER</envar>
+variable so that escape sequences are properly handled by Less:</para>
<screen><userinput>sed -i 's@-is@&amp;R@g' configure</userinput></screen>
-<para>Issue another sed substitution:</para>
+<para>The second is also a sed substitution to comment out the
+<quote>MANPATH /usr/man</quote> line in the
+<filename>man.conf</filename> file to prevent redundant results when
+using programs such as <command>whatis</command>:</para>
<screen><userinput>sed -i 's@MANPATH./usr/man@#&amp;@g' src/man.conf.in</userinput></screen>
-<para>Now prepare Man for compilation:</para>
+<para>Prepare Man for compilation:</para>
<screen><userinput>./configure -confdir=/etc</userinput></screen>
+<para>The meaning of the configure options:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>-confdir=/etc</parameter></term>
+<listitem><para>This tells the <command>man</command> program to look for the
+<filename>man.conf</filename> configuration file in the <filename
+class="directory">/etc</filename> directory.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Lastly, install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>For some internazionalitation issues, see testing.</para>
+<note><para>To disable Select Graphic Rendition (SGR) escape
+sequences, edit the <filename>man.conf</filename> file and
+add the <parameter>-c</parameter> switch to
+the <envar>NROFF</envar> variable.</para></note>
+
+<para>If the character set uses 8-bit characters, search for the line
+beginning with <quote>NROFF</quote> in
+<filename>/etc/man.conf</filename>, and verify that it looks as
+follows:</para>
+
+<screen>NROFF /usr/bin/nroff -Tlatin1 -mandoc</screen>
+
+<para>Note that <quote>latin1</quote> should be used even if it is not
+the character set of the locale. The reason is that, according to the
+specification, <command>groff</command> has no means of typesetting
+characters outside International Organization for Standards
+(ISO) 8859-1 without some strange escape codes. When formatting manual
+pages, <command>groff</command> thinks that they are in the ISO 8859-1
+encoding and this <parameter>-Tlatin1</parameter> switch tells
+<command>groff</command> to use the same encoding for output. Since
+<command>groff</command> does no recoding of input characters, the
+formatted result is really in the same encoding as input, and therefore
+it is usable as the input for a pager.</para>
+
+<para>This does not solve the problem of a non-working
+<command>man2dvi</command> program for localized manual pages in
+non-ISO 8859-1 locales. Also, it does not work with multibyte
+character sets. The first problem does not currently have a solution.
+The second issue is not of concern because the LFS installation does
+not support multibyte character sets.</para>
+
+<para>Additional information with regards to the compression of
+man and info pages can be found in the BLFS book at
+<ulink url="&blfs-root;view/cvs/postlfs/compressdoc.html"><phrase
+condition="pdf">http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/
+compressdoc.html</phrase></ulink>.</para>
</sect2>
<sect2 id="contents-man" role="content"><title>Contents of Man</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>apropos, makewhatis, man,
+man2dvi, man2html, and whatis</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="apropos">
+<term><command>apropos</command></term>
+<listitem>
+<para>Searches the whatis database and displays the short descriptions
+of system commands that contain a given string</para>
+<indexterm zone="ch-system-man apropos"><primary sortas="b-apropos">apropos</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="makewhatis">
+<term><command>makewhatis</command></term>
+<listitem>
+<para>Builds the whatis database; it reads all the manual pages in the
+manpath and writes the name and a short description in the whatis
+database for each page</para>
+<indexterm zone="ch-system-man makewhatis"><primary sortas="b-makewhatis">makewhatis</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="man">
+<term><command>man</command></term>
+<listitem>
+<para>Formats and displays the requested on-line manual page</para>
+<indexterm zone="ch-system-man man"><primary sortas="b-man">man</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="man2dvi">
+<term><command>man2dvi</command></term>
+<listitem>
+<para>Converts a manual page into dvi format</para>
+<indexterm zone="ch-system-man man2dvi"><primary sortas="b-man2dvi">man2dvi</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="man2html">
+<term><command>man2html</command></term>
+<listitem>
+<para>Converts a manual page into HTML</para>
+<indexterm zone="ch-system-man man2html"><primary sortas="b-man2html">man2html</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="whatis">
+<term><command>whatis</command></term>
+<listitem>
+<para>Searches the whatis database and displays the short descriptions
+of system commands that contain the given keyword as a separate
+word</para>
+<indexterm zone="ch-system-man whatis"><primary sortas="b-whatis">whatis</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/mktemp.xml b/chapter06/mktemp.xml
index b71176dfb..d478ab874 100644
--- a/chapter06/mktemp.xml
+++ b/chapter06/mktemp.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-mktemp" xreflabel="Mktemp" role="wrap">
+<sect1 id="ch-system-mktemp" role="wrap">
<title>Mktemp-&mktemp-version;</title>
<?dbhtml filename="mktemp.html"?>
<indexterm zone="ch-system-mktemp"><primary sortas="a-Mktemp">Mktemp</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Mktemp package contains programs used to create secure temporary
+files in shell scripts.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,24 +19,42 @@
<seglistitem><seg>0.1 SBU</seg><seg>317 KB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Mktemp installation depends on</segtitle>
+<seglistitem><seg>Coreutils, Make, and Patch</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Mktemp</title>
-<para>Apply a patch:</para>
+<para>Many scripts still use the deprecated
+<command>tempfile</command> program, which has functionality similar
+to <command>mktemp</command>. Patch Mktemp to include a
+<command>tempfile</command> wrapper:</para>
<screen><userinput>patch -Np1 -i ../mktemp-&mktemp-version;-add_tempfile-1.patch</userinput></screen>
-<para>Now prepare Mktemp for compilation:</para>
+<para>Prepare Mktemp for compilation:</para>
<screen><userinput>./configure --prefix=/usr --with-libc</userinput></screen>
+<para>The meaning of the configure option:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>--with-libc</parameter></term>
+<listitem><para>This causes the <command>mktemp</command> program to
+use the <emphasis>mkstemp</emphasis> and <emphasis>mkdtemp</emphasis>
+functions from the system C library.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install
make install-tempfile</userinput></screen>
@@ -44,8 +64,33 @@ make install-tempfile</userinput></screen>
<sect2 id="contents-mktemp" role="content"><title>Contents of Mktemp</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>mktemp and tempfile</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="mktemp">
+<term><command>mktemp</command></term>
+<listitem>
+<para>Creates temporary files in a secure manner; it is used in scripts</para>
+<indexterm zone="ch-system-mktemp mktemp"><primary sortas="b-mktemp">mktemp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tempfile">
+<term><command>tempfile</command></term>
+<listitem>
+<para>Creates temporary files in a less secure manner than
+<command>mktemp</command>; it is installed for backwards-compatibility</para>
+<indexterm zone="ch-system-mktemp tempfile"><primary sortas="b-tempfile">tempfile</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/module-init-tools.xml b/chapter06/module-init-tools.xml
index d6e84cf5d..26a8a1ad6 100644
--- a/chapter06/module-init-tools.xml
+++ b/chapter06/module-init-tools.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-module-init-tools" xreflabel="Module-Init-Tools" role="wrap">
+<sect1 id="ch-system-module-init-tools" role="wrap">
<title>Module-Init-Tools-&module-init-tools-version;</title>
<?dbhtml filename="module-init-tools.html"?>
<indexterm zone="ch-system-module-init-tools"><primary sortas="a-Module-Init-Tools">Module-Init-Tools</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Module-Init-Tools package contains programs for handling kernel
+modules in Linux kernels greater than or equal to version 2.5.47.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>650 KB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Module-Init-Tools installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Bison,
+Coreutils, Diffutils, Flex, GCC, Glibc, Grep, M4, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -30,10 +37,14 @@
<screen><userinput>make DOCBOOKTOMAN=""</userinput></screen>
+<!-- Edit me -->
+<para>The <command>DOCBOOKTOMAN</command> option allows the compile process to
+complete without regenerating the man pages.</para>
+
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -42,8 +53,111 @@
<sect2 id="contents-module-init-tools" role="content"><title>Contents of Module-Init-Tools</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>depmod, genksyms, insmod,
+insmod_ksymoops_clean, kallsyms (link to insmod), kernelversion, ksyms
+(link to insmod), lsmod (link to insmod), modinfo, modprobe (link to
+insmod), and rmmod (link to insmod)</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="depmod">
+<term><command>depmod</command></term>
+<listitem>
+<para>Creates a dependency file based on the symbols it finds in the
+existing set of modules; this dependency file is used by <command>modprobe</command> to
+automatically load the required modules</para>
+<indexterm zone="ch-system-module-init-tools depmod"><primary sortas="b-depmod">depmod</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="genksyms">
+<term><command>genksyms</command></term>
+<listitem>
+<para>Generates symbol version information</para>
+<indexterm zone="ch-system-module-init-tools genksyms"><primary sortas="b-genksyms">genksyms</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="insmod">
+<term><command>insmod</command></term>
+<listitem>
+<para>Installs a loadable module in the running kernel</para>
+<indexterm zone="ch-system-module-init-tools insmod"><primary sortas="b-insmod">insmod</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="insmod_ksymoops_clean">
+<term><command>insmod_ksymoops_clean</command></term>
+<listitem>
+<para>Deletes saved ksyms and modules not accessed for two days</para>
+<indexterm zone="ch-system-module-init-tools insmod_ksymoops_clean"><primary sortas="b-insmod_ksymoops_clean">insmod_ksymoops_clean</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="kallsyms">
+<term><command>kallsyms</command></term>
+<listitem>
+<para>Extracts all kernel symbols for debugging</para>
+<indexterm zone="ch-system-module-init-tools kallsyms"><primary sortas="b-kallsyms">kallsyms</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="kernelversion">
+<term><command>kernelversion</command></term>
+<listitem>
+<para>Reports the major version of the running kernel</para>
+<indexterm zone="ch-system-module-init-tools kernelversion"><primary sortas="b-kernelversion">kernelversion</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ksyms">
+<term><command>ksyms</command></term>
+<listitem>
+<para>Displays exported kernel symbols</para>
+<indexterm zone="ch-system-module-init-tools ksyms"><primary sortas="b-ksyms">ksyms</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lsmod">
+<term><command>lsmod</command></term>
+<listitem>
+<para>Lists currently loaded modules</para>
+<indexterm zone="ch-system-module-init-tools lsmod"><primary sortas="b-lsmod">lsmod</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="modinfo">
+<term><command>modinfo</command></term>
+<listitem>
+<para>Examines an object file associated with a kernel module and
+displays any information that it can glean</para>
+<indexterm zone="ch-system-module-init-tools modinfo"><primary sortas="b-modinfo">modinfo</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="modprobe">
+<term><command>modprobe</command></term>
+<listitem>
+<para>Uses a dependency file, created by
+<command>depmod</command>, to automatically load relevant modules</para>
+<indexterm zone="ch-system-module-init-tools modprobe"><primary sortas="b-modprobe">modprobe</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rmmod">
+<term><command>rmmod</command></term>
+<listitem>
+<para>Unloads modules from the running kernel</para>
+<indexterm zone="ch-system-module-init-tools rmmod"><primary sortas="b-rmmod">rmmod</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/ncurses.xml b/chapter06/ncurses.xml
index 61050f6ca..90ff64b51 100644
--- a/chapter06/ncurses.xml
+++ b/chapter06/ncurses.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-ncurses" xreflabel="Ncurses" role="wrap">
+<sect1 id="ch-system-ncurses" role="wrap">
<title>Ncurses-&ncurses-version;</title>
<?dbhtml filename="ncurses.html"?>
<indexterm zone="ch-system-ncurses"><primary sortas="a-Ncurses">Ncurses</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Ncurses package contains libraries for terminal-independent
+handling of character screens.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,11 @@
<seglistitem><seg>0.6 SBU</seg><seg>27 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Ncurses installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+Gawk, GCC, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -30,6 +37,8 @@
<screen><userinput>make</userinput></screen>
+<para>This package does not come with a test suite.</para>
+
<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -38,15 +47,17 @@
<screen><userinput>chmod 755 /usr/lib/*.&ncurses-version;</userinput></screen>
-<para>Now fix a library:</para>
+<para>Fix a library that should not be executable:</para>
<screen><userinput>chmod 644 /usr/lib/libncurses++.a</userinput></screen>
-<para>Move the libraries to the <filename class="directory">/lib</filename> directory:</para>
+<para>Move the libraries to the <filename class="directory">/lib</filename> directory,
+where they are expected to reside:</para>
<screen><userinput>mv /usr/lib/libncurses.so.5* /lib</userinput></screen>
-<para>Recreate some symlinks:</para>
+<para>Because the libraries have been moved, a few symlinks are pointing to
+non-existent files. Recreate those symlinks:</para>
<screen><userinput>ln -sf ../../lib/libncurses.so.5 /usr/lib/libncurses.so
ln -sf libncurses.so /usr/lib/libcurses.so</userinput></screen>
@@ -55,8 +66,149 @@ ln -sf libncurses.so /usr/lib/libcurses.so</userinput></screen>
<sect2 id="contents-ncurses" role="content"><title>Contents of Ncurses</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>captoinfo (link to tic), clear, infocmp, infotocap (link to tic),
+reset (link to tset), tack, tic, toe, tput, and tset</seg>
+<seg>libcurses.[a,so] (link to libncurses.[a,so]), libform.[a,so], libmenu.[a,so],
+libncurses++.a, libncurses.[a,so], and libpanel.[a,so]</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="captoinfo">
+<term><command>captoinfo</command></term>
+<listitem>
+<para>Converts a termcap description into a terminfo description</para>
+<indexterm zone="ch-system-ncurses captoinfo"><primary sortas="b-captoinfo">captoinfo</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="clear">
+<term><command>clear</command></term>
+<listitem>
+<para>Clears the screen, if possible</para>
+<indexterm zone="ch-system-ncurses clear"><primary sortas="b-clear">clear</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="infocmp">
+<term><command>infocmp</command></term>
+<listitem>
+<para>Compares or prints out terminfo descriptions</para>
+<indexterm zone="ch-system-ncurses infocmp"><primary sortas="b-infocmp">infocmp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="infotocap">
+<term><command>infotocap</command></term>
+<listitem>
+<para>Converts a terminfo description into a termcap description</para>
+<indexterm zone="ch-system-ncurses infotocap"><primary sortas="b-infotocap">infotocap</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="reset">
+<term><command>reset</command></term>
+<listitem>
+<para>Reinitializes a terminal to its default values</para>
+<indexterm zone="ch-system-ncurses reset"><primary sortas="b-reset">reset</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tack">
+<term><command>tack</command></term>
+<listitem>
+<para>The terminfo action checker; it is mainly used to test the
+accuracy of an entry in the terminfo database</para>
+<indexterm zone="ch-system-ncurses tack"><primary sortas="b-tack">tack</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tic">
+<term><command>tic</command></term>
+<listitem>
+<para>The terminfo entry-description compiler that translates a
+terminfo file from source format into the binary format needed for the
+ncurses library routines. A terminfo file contains information on the
+capabilities of a certain terminal</para>
+<indexterm zone="ch-system-ncurses tic"><primary sortas="b-tic">tic</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="toe">
+<term><command>toe</command></term>
+<listitem>
+<para>Lists all available terminal types, giving the primary name and
+description for each</para>
+<indexterm zone="ch-system-ncurses toe"><primary sortas="b-toe">toe</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tput">
+<term><command>tput</command></term>
+<listitem>
+<para>Makes the values of terminal-dependent capabilities available to
+the shell; it can also be used to reset or initialize a terminal or
+report its long name</para>
+<indexterm zone="ch-system-ncurses tput"><primary sortas="b-tput">tput</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tset">
+<term><command>tset</command></term>
+<listitem>
+<para>Can be used to initialize terminals</para>
+<indexterm zone="ch-system-ncurses tset"><primary sortas="b-tset">tset</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libcurses">
+<term><filename class="libraryfile">libcurses</filename></term>
+<listitem>
+<para>A link to <filename>libncurses</filename></para>
+<indexterm zone="ch-system-ncurses libcurses"><primary sortas="c-libcurses">libcurses</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libncurses">
+<term><filename class="libraryfile">libncurses</filename></term>
+<listitem>
+<para>Contains functions to display text in many complex ways on a
+terminal screen; a good example of the use of these functions is the
+menu displayed during the kernel's <command>make menuconfig</command></para>
+<indexterm zone="ch-system-ncurses libncurses"><primary sortas="c-libncurses">libncurses</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libform">
+<term><filename class="libraryfile">libform</filename></term>
+<listitem>
+<para>Contains functions to implement forms</para>
+<indexterm zone="ch-system-ncurses libform"><primary sortas="c-libform">libform</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libmenu">
+<term><filename class="libraryfile">libmenu</filename></term>
+<listitem>
+<para>Contains functions to implement menus</para>
+<indexterm zone="ch-system-ncurses libmenu"><primary sortas="c-libmenu">libmenu</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libpanel">
+<term><filename class="libraryfile">libpanel</filename></term>
+<listitem>
+<para>Contains functions to implement panels</para>
+<indexterm zone="ch-system-ncurses libpanel"><primary sortas="c-libpanel">libpanel</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/patch.xml b/chapter06/patch.xml
index 5d28069f6..d935dfc14 100644
--- a/chapter06/patch.xml
+++ b/chapter06/patch.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-patch" xreflabel="Patch" role="wrap">
+<sect1 id="ch-system-patch" role="wrap">
<title>Patch-&patch-version;</title>
<?dbhtml filename="patch.html"?>
<indexterm zone="ch-system-patch"><primary sortas="a-Patch">Patch</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Patch package contains a program for modifying files.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,12 +18,19 @@
<seglistitem><seg>0.1 SBU</seg><seg>1.9 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Patch installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Patch</title>
-<para>Prepare Patch for compilation:</para>
+<para>Prepare Patch for compilation. The preprocessor flag
+<parameter>-D_GNU_SOURCE</parameter> is only needed on the PowerPC
+platform. It can be left it out on other architectures:</para>
<screen><userinput>CPPFLAGS=-D_GNU_SOURCE ./configure --prefix=/usr</userinput></screen>
@@ -30,7 +38,9 @@
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>This package does not come with a test suite.</para>
+
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -39,8 +49,27 @@
<sect2 id="contents-patch" role="content"><title>Contents of Patch</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed program</segtitle>
+<seglistitem><seg>patch</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="patch">
+<term><command>patch</command></term>
+<listitem>
+<para>Modifies files according to a patch file. A patch file is normally
+a difference listing created with the <command>diff</command> program. By applying
+these differences to the original files, <command>patch</command> creates the patched
+versions.</para>
+<indexterm zone="ch-system-patch patch"><primary sortas="b-patch">patch</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/perl.xml b/chapter06/perl.xml
index 1bc1397ff..1faa7a9c1 100644
--- a/chapter06/perl.xml
+++ b/chapter06/perl.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-perl" xreflabel="Perl" role="wrap">
+<sect1 id="ch-system-perl" role="wrap">
<title>Perl-&perl-version;</title>
<?dbhtml filename="perl.html"?>
<indexterm zone="ch-system-perl"><primary sortas="a-Perl">Perl</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Perl package contains the Practical Extraction and Report Language.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,24 +18,44 @@
<seglistitem><seg>2.9 SBU</seg><seg>143 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Perl installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+Gawk, GCC, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Perl</title>
-<para>Prepare Perl for compilation:</para>
+<para>To have full control over the way Perl is set up, run the
+interactive <command>Configure</command> script and hand-pick the way
+this package is built. If the defaults it auto-detects are suitable,
+prepare Perl for compilation with:</para>
<screen><userinput>./configure.gnu --prefix=/usr -Dpager="/bin/less -isR"</userinput></screen>
+<para>The meaning of the configure option:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>-Dpager="/bin/less -isR"</parameter></term>
+<listitem><para>This corrects an error in the <command>perldoc</command> code with the invocation
+of the <command>less</command> program.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Create a basic <filename>/etc/hosts</filename> file:</para>
+<para>To run the test suite, first create a basic
+<filename>/etc/hosts</filename> file which is needed by a couple of
+tests to resolve the network name localhost:</para>
<screen><userinput>echo "127.0.0.1 localhost $(hostname)" &gt; /etc/hosts</userinput></screen>
-<para>Run the tests:</para>
+<para>Now run the tests, if desired:</para>
<screen><userinput>make test</userinput></screen>
@@ -47,8 +68,257 @@
<sect2 id="contents-perl" role="content"><title>Contents of Perl</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>a2p, c2ph, dprofpp, enc2xs,
+find2perl, h2ph, h2xs, libnetcfg, perl, perl&perl-version; (link to perl),
+perlbug, perlcc, perldoc, perlivp, piconv, pl2pm, pod2html, pod2latex, pod2man,
+pod2text, pod2usage, podchecker, podselect, psed (link to s2p), pstruct (link
+to c2ph), s2p, splain, and xsubpp</seg>
+<seg>Several hundred which cannot all be listed here</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="a2p">
+<term><command>a2p</command></term>
+<listitem>
+<para>Translates awk to Perl</para>
+<indexterm zone="ch-system-perl a2p"><primary sortas="b-a2p">a2p</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="c2ph">
+<term><command>c2ph</command></term>
+<listitem>
+<para>Dumps C structures as generated from <command>cc -g -S</command></para>
+<indexterm zone="ch-system-perl c2ph"><primary sortas="b-c2ph">c2ph</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="dprofpp">
+<term><command>dprofpp</command></term>
+<listitem>
+<para>Displays Perl profile data</para>
+<indexterm zone="ch-system-perl dprofpp"><primary sortas="b-dprofpp">dprofpp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="en2cxs">
+<term><command>en2cxs</command></term>
+<listitem>
+<para>Builds a Perl extension for the Encode module from either
+Unicode Character Mappings or Tcl Encoding Files</para>
+<indexterm zone="ch-system-perl en2cxs"><primary sortas="b-en2cxs">en2cxs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="find2perl">
+<term><command>find2perl</command></term>
+<listitem>
+<para>Translates <command>find</command> commands to Perl</para>
+<indexterm zone="ch-system-perl find2perl"><primary sortas="b-find2perl">find2perl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="h2ph">
+<term><command>h2ph</command></term>
+<listitem>
+<para>Converts <filename class="extension">.h</filename> C header files to
+<filename class="extension">.ph</filename> Perl header files</para>
+<indexterm zone="ch-system-perl h2ph"><primary sortas="b-h2ph">h2ph</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="h2xs">
+<term><command>h2xs</command></term>
+<listitem>
+<para>Converts <filename class="extension">.h</filename> C header files to Perl extensions</para>
+<indexterm zone="ch-system-perl h2xs"><primary sortas="b-h2xs">h2xs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libnetcfg">
+<term><command>libnetcfg</command></term>
+<listitem>
+<para>Can be used to configure the <filename class="libraryfile">libnet</filename></para>
+<indexterm zone="ch-system-perl libnetcfg"><primary sortas="b-libnetcfg">libnetcfg</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="perl">
+<term><command>perl</command></term>
+<listitem>
+<para>Combines some of the best features of C, sed, awk and sh into a
+single swiss-army language</para>
+<indexterm zone="ch-system-perl perl"><primary sortas="b-perl">perl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="perl-version">
+<term><command>perl&perl-version;</command></term>
+<listitem>
+<para>A hard link to <command>perl</command></para>
+<indexterm zone="ch-system-perl perl-version"><primary
+sortas="b-perl&perl-version;">perl&perl-version;</primary></indexterm>
+</listitem>
+</varlistentry>
+
+
+<varlistentry id="perlbug">
+<term><command>perlbug</command></term>
+<listitem>
+<para>Used to generate bug reports about Perl, or the modules that come
+with it, and mail them</para>
+<indexterm zone="ch-system-perl perlbug"><primary sortas="b-perlbug">perlbug</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="perlcc">
+<term><command>perlcc</command></term>
+<listitem>
+<para>Generates executables from Perl programs</para>
+<indexterm zone="ch-system-perl perlcc"><primary sortas="b-perlcc">perlcc</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="perldoc">
+<term><command>perldoc</command></term>
+<listitem>
+<para>Displays a piece of documentation in pod format that is embedded
+in the Perl installation tree or in a Perl script</para>
+<indexterm zone="ch-system-perl perldoc"><primary sortas="b-perldoc">perldoc</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="perlivp">
+<term><command>perlivp</command></term>
+<listitem>
+<para>The Perl Installation Verification Procedure; it can be used to
+verify that Perl and its libraries have been installed
+correctly</para>
+<indexterm zone="ch-system-perl perlivp"><primary sortas="b-perlivp">perlivp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="piconv">
+<term><command>piconv</command></term>
+<listitem>
+<para>A Perl version of the character encoding converter
+<command>iconv</command></para>
+<indexterm zone="ch-system-perl piconv"><primary sortas="b-piconv">piconv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pl2pm">
+<term><command>pl2pm</command></term>
+<listitem>
+<para>A rough tool for converting Perl4 <filename class="extension">.pl</filename>
+files to Perl5 <filename class="extension">.pm</filename> modules</para>
+<indexterm zone="ch-system-perl pl2pm"><primary sortas="b-pl2pm">pl2pm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pod2html">
+<term><command>pod2html</command></term>
+<listitem>
+<para>Converts files from pod format to HTML format</para>
+<indexterm zone="ch-system-perl pod2html"><primary sortas="b-pod2html">pod2html</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pod2latex">
+<term><command>pod2latex</command></term>
+<listitem>
+<para>Converts files from pod format to LaTeX format</para>
+<indexterm zone="ch-system-perl pod2latex"><primary sortas="b-pod2latex">pod2latex</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pod2man">
+<term><command>pod2man</command></term>
+<listitem>
+<para>Converts pod data to formatted *roff input</para>
+<indexterm zone="ch-system-perl pod2man"><primary sortas="b-pod2man">pod2man</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pod2text">
+<term><command>pod2text</command></term>
+<listitem>
+<para>Converts pod data to formatted ASCII text</para>
+<indexterm zone="ch-system-perl pod2text"><primary sortas="b-pod2text">pod2text</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pod2usage">
+<term><command>pod2usage</command></term>
+<listitem>
+<para>Prints usage messages from embedded pod docs in files</para>
+<indexterm zone="ch-system-perl pod2usage"><primary sortas="b-pod2usage">pod2usage</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="podchecker">
+<term><command>podchecker</command></term>
+<listitem>
+<para>Checks the syntax of pod format documentation files</para>
+<indexterm zone="ch-system-perl podchecker"><primary sortas="b-podchecker">podchecker</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="podselect">
+<term><command>podselect</command></term>
+<listitem>
+<para>Displays selected sections of pod documentation</para>
+<indexterm zone="ch-system-perl podselect"><primary sortas="b-podselect">podselect</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="psed">
+<term><command>psed</command></term>
+<listitem>
+<para>A Perl version of the stream editor <command>sed</command></para>
+<indexterm zone="ch-system-perl psed"><primary sortas="b-psed">psed</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pstruct">
+<term><command>pstruct</command></term>
+<listitem>
+<para>Dumps C structures as generated from <command>cc -g -S</command> stabs</para>
+<indexterm zone="ch-system-perl pstruct"><primary sortas="b-pstruct">pstruct</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="s2p">
+<term><command>s2p</command></term>
+<listitem>
+<para>Translates sed to Perl</para>
+<indexterm zone="ch-system-perl s2p"><primary sortas="b-s2p">s2p</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="splain">
+<term><command>splain</command></term>
+<listitem>
+<para>Is used to force verbose warning diagnostics in Perl</para>
+<indexterm zone="ch-system-perl splain"><primary sortas="b-splain">splain</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="xsubpp">
+<term><command>xsubpp</command></term>
+<listitem>
+<para>Converts Perl XS code into C code</para>
+<indexterm zone="ch-system-perl xsubpp"><primary sortas="b-xsubpp">xsubpp</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/procps.xml b/chapter06/procps.xml
index 09dcfafe4..102836c9a 100644
--- a/chapter06/procps.xml
+++ b/chapter06/procps.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-procps" xreflabel="Procps" role="wrap">
+<sect1 id="ch-system-procps" role="wrap">
<title>Procps-&procps-version;</title>
<?dbhtml filename="procps.html"?>
<indexterm zone="ch-system-procps"><primary sortas="a-Procps">Procps</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Procps package contains programs for monitoring processes.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,16 +18,21 @@
<seglistitem><seg>0.1 SBU</seg><seg>6.2 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Procps installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, GCC, Glibc,
+Make, and Ncurses</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Procps</title>
-<para>Compile Procps:</para>
+<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -35,8 +41,152 @@
<sect2 id="contents-procps" role="content"><title>Contents of Procps</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed library</segtitle>
+<seglistitem><seg>free, kill, pgrep, pkill,
+pmap, ps, skill, snice, sysctl, tload, top, uptime, vmstat, w, and watch</seg>
+<seg>libproc.so</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="free">
+<term><command>free</command></term>
+<listitem>
+<para>Reports the amount of free and used memory (both physical and
+swap memory) in the system</para>
+<indexterm zone="ch-system-procps free"><primary sortas="b-free">free</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="kill">
+<term><command>kill</command></term>
+<listitem>
+<para>Sends signals to processes</para>
+<indexterm zone="ch-system-procps kill"><primary sortas="b-kill">kill</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pgrep">
+<term><command>pgrep</command></term>
+<listitem>
+<para>Looks up processes based on their name and other attributes</para>
+<indexterm zone="ch-system-procps pgrep"><primary sortas="b-pgrep">pgrep</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pkill">
+<term><command>pkill</command></term>
+<listitem>
+<para>Signals processes based on their name and other attributes</para>
+<indexterm zone="ch-system-procps pkill"><primary sortas="b-pkill">pkill</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pmap">
+<term><command>pmap</command></term>
+<listitem>
+<para>Reports the memory map of the given process</para>
+<indexterm zone="ch-system-procps pmap"><primary sortas="b-pmap">pmap</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ps">
+<term><command>ps</command></term>
+<listitem>
+<para>Lists the current running processes</para>
+<indexterm zone="ch-system-procps ps"><primary sortas="b-ps">ps</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="skill">
+<term><command>skill</command></term>
+<listitem>
+<para>Sends signals to processes matching the given criteria</para>
+<indexterm zone="ch-system-procps skill"><primary sortas="b-skill">skill</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="snice">
+<term><command>snice</command></term>
+<listitem>
+<para>Changes the scheduling priority of processes matching the given criteria</para>
+<indexterm zone="ch-system-procps snice"><primary sortas="b-snice">snice</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sysctl">
+<term><command>sysctl</command></term>
+<listitem>
+<para>Modifies kernel parameters at run time</para>
+<indexterm zone="ch-system-procps sysctl"><primary sortas="b-sysctl">sysctl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tload">
+<term><command>tload</command></term>
+<listitem>
+<para>Prints a graph of the current system load average</para>
+<indexterm zone="ch-system-procps tload"><primary sortas="b-tload">tload</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="top">
+<term><command>top</command></term>
+<listitem>
+<para>Displays the top CPU processes; it provides an ongoing look at
+processor activity in real time</para>
+<indexterm zone="ch-system-procps top"><primary sortas="b-top">top</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="uptime">
+<term><command>uptime</command></term>
+<listitem>
+<para>Reports how long the system has been running, how many users are
+logged on, and the system load averages</para>
+<indexterm zone="ch-system-procps uptime"><primary sortas="b-uptime">uptime</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vmstat">
+<term><command>vmstat</command></term>
+<listitem>
+<para>Reports virtual memory statistics, giving information about
+processes, memory, paging, block Input/Output (IO), traps, and CPU activity</para>
+<indexterm zone="ch-system-procps vmstat"><primary sortas="b-vmstat">vmstat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="w">
+<term><command>w</command></term>
+<listitem>
+<para>Shows which users are currently logged on, where, and since when</para>
+<indexterm zone="ch-system-procps w"><primary sortas="b-w">w</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="watch">
+<term><command>watch</command></term>
+<listitem>
+<para>Runs a given command repeatedly, displaying the first screen-full of its
+output; this allows a user to watch the output change over time</para>
+<indexterm zone="ch-system-procps watch"><primary sortas="b-watch">watch</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libproc">
+<term><filename class="libraryfile">libproc</filename></term>
+<listitem>
+<para>Contains the functions used by most programs in this package</para>
+<indexterm zone="ch-system-procps libproc"><primary sortas="c-libproc">libproc</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/psmisc.xml b/chapter06/psmisc.xml
index 5cdaa6c0f..bcceec79a 100644
--- a/chapter06/psmisc.xml
+++ b/chapter06/psmisc.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-psmisc" xreflabel="Psmisc" role="wrap">
+<sect1 id="ch-system-psmisc" role="wrap">
<title>Psmisc-&psmisc-version;</title>
<?dbhtml filename="psmisc.html"?>
<indexterm zone="ch-system-psmisc"><primary sortas="a-Psmisc">Psmisc</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Psmisc package contains programs for displaying information on
+processes.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,11 @@
<seglistitem><seg>0.1 SBU</seg><seg>2.2 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Psmisc installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Gettext, Glibc, Grep, Make, Ncurses, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -26,20 +33,44 @@
<screen><userinput>./configure --prefix=/usr --exec-prefix=""</userinput></screen>
+<para>The meaning of the configure option:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>--exec-prefix=""</parameter></term>
+<listitem><para>This causes the binaries to be installed in <filename
+class="directory">/bin</filename> instead of <filename
+class="directory">/usr/bin</filename>. Because the Psmisc programs are
+often used in bootscripts, they should be available when the <filename
+class="directory">/usr</filename> file system is not
+mounted.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>Move a program:</para>
+<para>There is no reason for the <command>pstree</command> and
+<command>pstree.x11</command> programs to reside in <filename
+class="directory">/bin</filename>. Therefore, move them to <filename
+class="directory">/usr/bin</filename>. Also, there is no need for
+<command>pstree.x11</command> to exist as a separate program. Make it
+a symbolic link to <command>pstree</command> instead:</para>
<screen><userinput>mv /bin/pstree* /usr/bin
ln -sf pstree /usr/bin/pstree.x11</userinput></screen>
-<para>If you're not going to use Sysvinit, you should create the following symlink:</para>
+<para>By default, Psmisc's <command>pidof</command> program is not
+installed. This usually is not a problem because it is installed later
+in the Sysvinit package, which provides a better
+<command>pidof</command> program. If Sysvinit will not be used for a
+particular system, complete the installation of Psmisc by creating the
+following symlink:</para>
<screen><userinput>ln -s killall /bin/pidof</userinput></screen>
@@ -48,8 +79,49 @@ ln -sf pstree /usr/bin/pstree.x11</userinput></screen>
<sect2 id="contents-psmisc" role="content"><title>Contents of Psmisc</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>fuser, killall, pstree, and pstree.x11 (link to pstree)</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="fuser">
+<term><command>fuser</command></term>
+<listitem>
+<para>Reports the Process IDs (PIDs) of processes that use the given files or file systems</para>
+<indexterm zone="ch-system-psmisc fuser"><primary sortas="b-fuser">fuser</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="killall">
+<term><command>killall</command></term>
+<listitem>
+<para>Kills processes by name; it sends a signal to all processes
+running any of the given commands</para>
+<indexterm zone="ch-system-psmisc killall"><primary sortas="b-killall">killall</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pstree">
+<term><command>pstree</command></term>
+<listitem>
+<para>Displays running processes as a tree</para>
+<indexterm zone="ch-system-psmisc pstree"><primary sortas="b-pstree">pstree</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pstree.x11">
+<term><command>pstree.x11</command></term>
+<listitem>
+<para>Same as <command>pstree</command>, except that it waits for confirmation before exiting</para>
+<indexterm zone="ch-system-psmisc pstree.x11"><primary sortas="b-pstree.x11">pstree.x11</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/pwdgroup.xml b/chapter06/pwdgroup.xml
index 864c818f3..990fe976e 100644
--- a/chapter06/pwdgroup.xml
+++ b/chapter06/pwdgroup.xml
@@ -7,13 +7,30 @@
<title>Creating the passwd, group, and log Files</title>
<?dbhtml filename="pwdgroup.html"?>
-<para>Create the <filename>/etc/passwd</filename> file:</para>
+<indexterm zone="ch-system-pwdgroup"><primary sortas="e-/etc/passwd">/etc/passwd</primary></indexterm>
+<indexterm zone="ch-system-pwdgroup"><primary sortas="e-/etc/group">/etc/group</primary></indexterm>
+<indexterm zone="ch-system-pwdgroup"><primary sortas="e-/var/run/utmp">/var/run/utmp</primary></indexterm>
+<indexterm zone="ch-system-pwdgroup"><primary sortas="e-/var/log/btmp">/var/log/btmp</primary></indexterm>
+<indexterm zone="ch-system-pwdgroup"><primary sortas="e-/var/log/lastlog">/var/log/lastlog</primary></indexterm>
+<indexterm zone="ch-system-pwdgroup"><primary sortas="e-/var/log/wtmp">/var/log/wtmp</primary></indexterm>
+
+<para>In order for user <emphasis>root</emphasis> to be able to login
+and for the name <quote>root</quote> to be recognized, there need to
+be relevant entries in the <filename>/etc/passwd</filename> and
+<filename>/etc/group</filename> files.</para>
+
+<para>Create the <filename>/etc/passwd</filename> file by running the following
+command:</para>
<screen><userinput>cat &gt; /etc/passwd &lt;&lt; "EOF"
<literal>root:x:0:0:root:/root:/bin/bash</literal>
EOF</userinput></screen>
-<para>Create the <filename>/etc/group</filename> file:</para>
+<para>The actual password for <emphasis>root</emphasis> (the <quote>x</quote>
+used here is just a placeholder) will be set later.</para>
+
+<para>Create the <filename>/etc/group</filename> file by running the following
+command:</para>
<screen><userinput>cat &gt; /etc/group &lt;&lt; "EOF"
<literal>root:x:0:
@@ -33,14 +50,49 @@ utmp:x:13:
usb:x:14:</literal>
EOF</userinput></screen>
-<para>Start a new shell:</para>
+<para>The created groups are not part of any standard&mdash;they are some
+of the groups that the Udev configuration will be using in the next
+section. The Linux Standard Base (LSB, available at <ulink
+url="http://www.linuxbase.org"/>) recommends only that, besides the
+group <quote>root</quote> with a Group ID (GID) of 0, a group
+<quote>bin</quote> with a GID of 1 be present. All other group names
+and GIDs can be chosen freely by the system administrator since
+well-written packages do not depend on GID numbers, but rather use the
+group's name.</para>
+
+<para>To remove the <quote>I have no name!</quote> prompt, start a new
+shell. Since a full Glibc was installed in <xref
+linkend="chapter-temporary-tools"/> and the
+<filename>/etc/passwd</filename> and <filename>/etc/group</filename>
+files have been created, user name and group name resolution will now
+work.</para>
<screen><userinput>exec /tools/bin/bash --login +h</userinput></screen>
-<para>Initialize the log files and give them their proper permissions:</para>
+<para>Note the use of the <parameter>+h</parameter> directive. This
+tells <command>bash</command> not to use its internal path hashing.
+Without this directive, <command>bash</command> would remember the
+paths to binaries it has executed. In order to use the newly compiled
+binaries as soon as they are installed, turn off this function for the
+duration of this chapter.</para>
+
+<para>The <command>login</command>, <command>agetty</command>, and
+<command>init</command> programs (and others) use a number of log
+files to record information such as who was logged into the system and
+when. However, these programs will not write to the log files if they
+do not already exist. Initialize the log files and give them
+proper permissions:</para>
<screen><userinput>touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
chgrp utmp /var/run/utmp /var/log/lastlog
chmod 664 /var/run/utmp /var/log/lastlog</userinput></screen>
+<para>The <filename>/var/run/utmp</filename> file records the users
+that are currently logged in. The <filename>/var/log/wtmp</filename>
+file records all logins and logouts. The
+<filename>/var/log/lastlog</filename> file records when
+each user last logged in. The <filename>/var/log/btmp</filename> file
+records the bad login attempts.</para>
+
</sect1>
+
diff --git a/chapter06/readjusting.xml b/chapter06/readjusting.xml
index cda2768f1..5d07a94e8 100644
--- a/chapter06/readjusting.xml
+++ b/chapter06/readjusting.xml
@@ -7,31 +7,99 @@
<title>Re-adjusting the Toolchain</title>
<?dbhtml filename="readjusting.html"?>
-<para>Install the adjusted linker by running the following from within the
-<filename class="directory">binutils-build</filename> directory:</para>
+<para>Now that the new and final C libraries have been installed, it
+is time to adjust the toolchain again. The toolchain will be adjusted
+so that it will link any newly compiled program against these new
+libraries. This is the same process used in the
+<quote>Adjusting</quote> phase in the beginning of <xref
+linkend="chapter-temporary-tools"/>, even though it looks to be
+reversed. In <xref linkend="chapter-temporary-tools"/>, the chain was
+guided from the host's <filename
+class="directory">/{,usr/}lib</filename> directories to the new
+<filename class="directory">/tools/lib</filename> directory. Now, the
+chain will be guided from that same <filename
+class="directory">/tools/lib</filename> directory to the LFS
+<filename class="directory">/{,usr/}lib</filename> directories.</para>
+
+<para>Start by adjusting the linker. The source and build directories
+from the second pass over Binutils were retained for this purpose.
+Install the adjusted linker by running the following command from
+within the <filename class="directory">binutils-build</filename>
+directory:</para>
<screen><userinput>make -C ld INSTALL=/tools/bin/install install</userinput></screen>
-<para>Amend the GCC specs file:</para>
+<note><para>If the earlier warning to retain the Binutils source and
+build directories from the second pass in <xref
+linkend="chapter-temporary-tools"/> was missed, or if they were
+accidentally deleted or are inaccessible, ignore the above command.
+The result will be that the next package, Binutils, will link against
+the C libraries in <filename class="directory">/tools</filename>
+rather than in <filename class="directory">/{,usr/}lib</filename>.
+This is not ideal, however, testing has shown that the resulting
+Binutils program binaries should be identical.</para></note>
+
+<para>From now on, every compiled program will link only against the
+libraries in <filename class="directory">/usr/lib</filename> and
+<filename class="directory">/lib</filename>. The extra
+<parameter>INSTALL=/tools/bin/install</parameter> option is needed
+because the <filename>Makefile</filename> file created during the
+second pass still contains the reference to
+<command>/usr/bin/install</command>, which has not been installed yet.
+Some host distributions contain a <filename
+class="symlink">ginstall</filename> symbolic link which takes
+precedence in the <filename>Makefile</filename> file and can cause a
+problem. The above command takes care of this issue.</para>
+
+<para>Remove the Binutils source and build directories now.</para>
+
+<para>Next, amend the GCC specs file so that it points to the new
+dynamic linker. A perl command accomplishes this:</para>
<screen><userinput>perl -pi -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g;' \
-e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' \
`gcc --print-file specs`</userinput></screen>
-<caution><para>Perform a simple sanity check:</para>
+<para>It is a good idea to visually inspect the specs file to verify the intended
+change was actually made.</para>
+
+<important><para>If working on a platform where the name of the
+dynamic linker is something other than
+<filename class="libraryfile">ld-linux.so.2</filename>, substitute
+<quote>ld-linux.so.2</quote> with the name of the platform's
+dynamic linker in the above commands. Refer back to <xref
+linkend="ch-tools-toolchaintechnotes" role=","/> if
+necessary.</para></important>
+
+<caution><para>It is imperative at this point to stop and ensure that
+the basic functions (compiling and linking) of the adjusted toolchain
+are working as expected. To do this, perform a sanity
+check:</para>
<screen><userinput>echo 'main(){}' &gt; dummy.c
cc dummy.c
readelf -l a.out | grep ': /lib'</userinput></screen>
-<para>The output of the last command will be:</para>
+<para>If everything is working correctly, there should be no errors,
+and the output of the last command will be (allowing for
+platform-specific differences in dynamic linker name):</para>
<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen>
-<para>Once you are satisfied that all is well, clean up the test files:</para>
+<para>Note that <filename class="directory">/lib</filename> is now
+the prefix of our dynamic linker.</para>
-<screen><userinput>rm dummy.c a.out</userinput></screen>
-</caution>
+<para>If the output does not appear as shown above or is not received
+at all, then something is seriously wrong. Investigate and retrace the
+steps to find out where the problem is and correct it. The most likely
+reason is that something went wrong with the specs file amendment
+above. Any issues will need to be resolved before continuing on with
+the process.</para>
+<para>Once everything is working correctly, clean up the test
+files:</para>
+
+<screen><userinput>rm dummy.c a.out</userinput></screen></caution>
</sect1>
+
diff --git a/chapter06/readline.xml b/chapter06/readline.xml
index cd15918ec..7c3a1b3d0 100644
--- a/chapter06/readline.xml
+++ b/chapter06/readline.xml
@@ -3,27 +3,35 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-readline" xreflabel="Readline" role="wrap">
+<sect1 id="ch-system-readline" role="wrap">
<title>Readline-&readline-version;</title>
<?dbhtml filename="readline.html"?>
<indexterm zone="ch-system-readline"><primary sortas="a-Readline">Readline</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Readline package contains the Readline command-line library.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
-<seglistitem><seg>XXX SBU</seg><seg>3.8 MB</seg></seglistitem>
+<seglistitem><seg>0.11 SBU</seg><seg>3.8 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Readline installation depends on</segtitle>
+<seglistitem><seg>Binutils, Coreutils, Diffutils, Gawk,
+GCC, Glibc, Grep, Make, Ncurses, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Readline</title>
-<!-- NEW set of commands-->
-<para>Apply a patch.</para>
+<para>The following patch includes a fix for the problem where
+Readline sometimes only shows 33 characters on a line and then wraps
+to the next line. It also includes other fixes recommended by the
+Readline author.</para>
<screen><userinput>patch -Np1 -i ../readline-&readline-version;-fixes-1.patch</userinput></screen>
@@ -35,31 +43,71 @@
<screen><userinput>make SHLIB_XLDFLAGS=-lncurses</userinput></screen>
+<para>The meaning of the make option:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>SHLIB_XLDFLAGS=-lncurses</parameter></term>
+<listitem><para>This option forces Readline to link against the
+<filename class="libraryfile">libncurses</filename> library.</para></listitem>
+</varlistentry>
+</variablelist>
+
<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>Give Readline's dynamic libraries to a more appropriate permissions:</para>
+<para>Give Readline's dynamic libraries more appropriate permissions:</para>
<screen><userinput>chmod 755 /lib/lib{readline,history}.so*</userinput></screen>
-<para>Now we move the static libraries to a more appropriate location:</para>
+<para>Now we move the static libraries to a more appropriate
+location:</para>
<screen><userinput>mv /lib/lib{readline,history}.a /usr/lib</userinput></screen>
-<para>Now we will remove the old, .so files in /lib and relink them into /usr/lib.</para>
+<para>Next we will remove the old, <filename>.so</filename> files in
+<filename class="directory">/lib</filename> and relink them into
+<filename class="directory">/usr/lib</filename>.</para>
<screen><userinput>rm /lib/lib{readline,history}.so
ln -sf ../../lib/libreadline.so.5 /usr/lib/libreadline.so
ln -sf ../../lib/libhistory.so.5 /usr/lib/libhistory.so</userinput></screen>
+
</sect2>
<sect2 id="contents-readline" role="content"><title>Contents of Readline</title>
+<segmentedlist>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>libhistory.[a,so], and libreadline.[a,so]</seg></seglistitem>
+</segmentedlist>
-<para>See testing</para>
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="libhistory">
+<term><filename class="libraryfile">libhistory</filename></term>
+<listitem>
+<para>Provides a consistent user interface
+for recalling lines of history</para>
+<indexterm zone="ch-system-readline libhistory"><primary sortas="c-libhistory">libhistory</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libreadline">
+<term><filename class="libraryfile">libreadline</filename></term>
+<listitem>
+<para>Aids in the consistency of user interface
+across discrete programs that need to provide a command line
+interface</para>
+<indexterm zone="ch-system-readline libreadline"><primary sortas="c-libreadline">libreadline</primary></indexterm>
+</listitem>
+</varlistentry>
+
+</variablelist>
</sect2>
-
</sect1>
+
diff --git a/chapter06/revisedchroot.xml b/chapter06/revisedchroot.xml
index c6afe2bf9..00f627602 100644
--- a/chapter06/revisedchroot.xml
+++ b/chapter06/revisedchroot.xml
@@ -7,11 +7,38 @@
<title>Cleaning Up</title>
<?dbhtml filename="revisedchroot.html"?>
-<para>Modified chroot command:</para>
+<para>From now on, when reentering the chroot environment after
+exiting, use the following modified chroot command:</para>
<screen><userinput>chroot "$LFS" /usr/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/bin/bash --login</userinput></screen>
+<para>The reason for this is that, since the programs in <filename
+class="directory">/tools</filename> are no longer needed, the
+directory can be deleted to regain space. Before actually deleting the
+directory, exit from chroot and reenter it with the above command.
+Also, before removing <filename class="directory">/tools</filename>,
+tar it up and store it in a safe place in case another LFS system will
+be built.</para>
+
+<note><para>Removing <filename class="directory">/tools</filename>
+will also remove the temporary copies of Tcl, Expect, and DejaGNU
+which were used for running the toolchain tests. To use these programs
+later on, they will need to be recompiled and re-installed. The
+installation instructions are the same as in <xref
+linkend="chapter-temporary-tools"/>, apart from changing the prefix
+from <filename class="directory">/tools</filename> to <filename
+class="directory">/usr</filename>. The BLFS book discusses a slightly
+different approach to installing Tcl (see <ulink
+url="&blfs-root;"/>).</para></note>
+
+<para>The packages and patches stored in <filename
+class="directory">/sources</filename> can also be moved to a more
+usual location, such as <filename
+class="directory">/usr/src/packages</filename>. The entire directory
+can also be deleted if its contents have been burned to a CD.</para>
+
</sect1>
+
diff --git a/chapter06/sed.xml b/chapter06/sed.xml
index 2b971d9ce..e16857a5f 100644
--- a/chapter06/sed.xml
+++ b/chapter06/sed.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-sed" xreflabel="Sed" role="wrap">
+<sect1 id="ch-system-sed" role="wrap">
<title>Sed-&sed-version;</title>
<?dbhtml filename="sed.html"?>
<indexterm zone="ch-system-sed"><primary sortas="a-Sed">Sed</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Sed package contains a stream editor.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.2 SBU</seg><seg>5.2 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Sed installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils,
+Diffutils, GCC, Gettext, Glibc, Grep, Make, and Texinfo</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -33,7 +39,7 @@
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -42,10 +48,24 @@
<sect2 id="contents-sed" role="content"><title>Contents of Sed</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed program</segtitle>
+<seglistitem><seg>sed</seg></seglistitem>
+</segmentedlist>
-</sect2>
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+<varlistentry id="sed">
+<term><command>sed</command></term>
+<listitem>
+<para>Filters and transforms text files in a single pass</para>
+<indexterm zone="ch-system-sed sed"><primary sortas="b-sed">sed</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
+</sect2>
</sect1>
+
diff --git a/chapter06/shadow.xml b/chapter06/shadow.xml
index 7dc58a043..91948b3a4 100644
--- a/chapter06/shadow.xml
+++ b/chapter06/shadow.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-shadow" xreflabel="Shadow" role="wrap">
+<sect1 id="ch-system-shadow" role="wrap">
<title>Shadow-&shadow-version;</title>
<?dbhtml filename="shadow.html"?>
<indexterm zone="ch-system-shadow"><primary sortas="a-Shadow">Shadow</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Shadow package contains programs for handling passwords in a secure
+way.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,11 @@
<seglistitem><seg>0.4 SBU</seg><seg>11 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Shadow installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Bison, Coreutils,
+Diffutils, GCC, Gettext, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -26,7 +33,8 @@
<screen><userinput>./configure --libdir=/lib --enable-shared</userinput></screen>
-<para>Remove the installation of the groups program, and it's man page:</para>
+<para>Remove the installation of the <command>groups</command> program, and its man page as
+Coreutils provides a better version:</para>
<screen><userinput>sed -i 's/groups$(EXEEXT) //' src/Makefile
sed -i '/groups/d' man/Makefile</userinput></screen>
@@ -35,31 +43,48 @@ sed -i '/groups/d' man/Makefile</userinput></screen>
<screen><userinput>make</userinput></screen>
-<para>Then install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>Install two config files:</para>
+<para id="shadow-limits-login_access">Shadow uses two files to configure
+authentication settings for the system. Install these two config files:</para>
+
+<indexterm zone="shadow-limits-login_access"><primary sortas="e-/etc/limits">/etc/limits</primary></indexterm>
+<indexterm zone="shadow-limits-login_access"><primary sortas="e-/etc/login.access">/etc/login.access</primary></indexterm>
<screen><userinput>cp etc/{limits,login.access} /etc</userinput></screen>
-<para>Change a configuration file while copying it:</para>
+<para id="shadow-login_defs">Instead of using the default <emphasis>crypt</emphasis> method,
+use the more secure <emphasis>MD5</emphasis> method of password
+encryption, which also allows passwords longer than 8 characters. It
+is also necessary to change the obsolete <filename
+class="directory">/var/spool/mail</filename> location for user
+mailboxes that Shadow uses by default to the <filename
+class="directory">/var/mail</filename> location used currently. Both
+of these can be accomplished by changing the relevant configuration
+file while copying it to its destination:</para>
+
+<indexterm zone="shadow-login_defs"><primary sortas="e-/etc/login.defs">/etc/login.defs</primary></indexterm>
<screen><userinput>sed -e's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' \
-e 's@/var/spool/mail@/var/mail@' \
etc/login.defs.linux &gt; /etc/login.defs</userinput></screen>
-<para>Move a program:</para>
+<para>Move a misplaced program to its proper location:</para>
<screen><userinput>mv /usr/bin/passwd /bin</userinput></screen>
-<para>Move the library:</para>
+<para>Move Shadow's libraries to more appropriate locations:</para>
<screen><userinput>mv /lib/libshadow.*a /usr/lib
rm /lib/libshadow.so
ln -sf ../../lib/libshadow.so.0 /usr/lib/libshadow.so</userinput></screen>
-<para>Create a dir:</para>
+<para>The <parameter>-D</parameter> option of the
+<command>useradd</command> program requires the <filename
+class="directory">/etc/default</filename> directory for it to work
+properly:</para>
<screen><userinput>mkdir /etc/default</userinput></screen>
@@ -67,8 +92,21 @@ ln -sf ../../lib/libshadow.so.0 /usr/lib/libshadow.so</userinput></screen>
<sect2 id="conf-shadow" role="configuration"><title>Configuring Shadow</title>
-
-<para>To enable shadowed passwords:</para>
+<indexterm zone="conf-shadow">
+<primary sortas="a-Shadow">Shadow</primary>
+<secondary>configuring</secondary></indexterm>
+
+<para>This package contains utilities to add, modify, and delete users
+and groups; set and change their passwords; and perform other
+administrative tasks. For a full explanation of what
+<emphasis>password shadowing</emphasis> means, see the
+<filename>doc/HOWTO</filename> file within the unpacked source tree.
+If using Shadow support, keep in mind that programs which need to
+verify passwords (display managers, FTP programs, pop3 daemons, etc.)
+must be shadow-compliant. That is, they need to be able to work with
+shadowed passwords.</para>
+
+<para>To enable shadowed passwords, run the following command:</para>
<screen><userinput>pwconv</userinput></screen>
@@ -76,23 +114,313 @@ ln -sf ../../lib/libshadow.so.0 /usr/lib/libshadow.so</userinput></screen>
<screen><userinput>grpconv</userinput></screen>
+<para>Under normal circumstances, passwords will not have been created
+yet. However, if returning to this section later to enable shadowing,
+reset any current user passwords with the <command>passwd</command>
+command or any group passwords with the <command>gpasswd</command>
+command.</para>
+
</sect2>
<sect2 role="configuration">
<title>Setting the root password</title>
-<para>Choose a password for user root and set it via:</para>
+<para>Choose a password for user <emphasis>root</emphasis> and set it
+by running:</para>
<screen><userinput>passwd root</userinput></screen>
-
</sect2>
<sect2 id="contents-shadow" role="content"><title>Contents of Shadow</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>chage, chfn, chpasswd, chsh, expiry, faillog, gpasswd,
+groupadd, groupdel, groupmod, groups, grpck, grpconv, grpunconv, lastlog, login,
+logoutd, mkpasswd, newgrp, newusers, passwd, pwck, pwconv, pwunconv, sg
+(link to newgrp), useradd, userdel, usermod, vigr (link to vipw), and vipw</seg>
+<seg>libshadow[.a,so]</seg>
+</seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="chage">
+<term><command>chage</command></term>
+<listitem>
+<para>Used to change the maximum number of days between obligatory
+password changes</para>
+<indexterm zone="ch-system-shadow chage"><primary sortas="b-chage">chage</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="chfn">
+<term><command>chfn</command></term>
+<listitem>
+<para>Used to change a user's full name and other info</para>
+<indexterm zone="ch-system-shadow chfn"><primary sortas="b-chfn">chfn</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="chpasswd">
+<term><command>chpasswd</command></term>
+<listitem>
+<para>Used to update the passwords of an entire series of user
+accounts</para>
+<indexterm zone="ch-system-shadow chpasswd"><primary sortas="b-chpasswd">chpasswd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="chsh">
+<term><command>chsh</command></term>
+<listitem>
+<para>Used to change a user's default login shell</para>
+<indexterm zone="ch-system-shadow chsh"><primary sortas="b-chsh">chsh</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="expiry">
+<term><command>expiry</command></term>
+<listitem>
+<para>Checks and enforces the current password expiration policy</para>
+<indexterm zone="ch-system-shadow expiry"><primary sortas="b-expiry">expiry</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="faillog">
+<term><command>faillog</command></term>
+<listitem>
+<para>Is used to examine the log of login failures, to set a maximum number of
+failures before an account is blocked, or to reset the failure count</para>
+<indexterm zone="ch-system-shadow faillog"><primary sortas="b-faillog">faillog</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="gpasswd">
+<term><command>gpasswd</command></term>
+<listitem>
+<para>Is used to add and delete members and administrators to groups</para>
+<indexterm zone="ch-system-shadow gpasswd"><primary sortas="b-gpasswd">gpasswd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="groupadd">
+<term><command>groupadd</command></term>
+<listitem>
+<para>Creates a group with the given name</para>
+<indexterm zone="ch-system-shadow groupadd"><primary sortas="b-groupadd">groupadd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="groupdel">
+<term><command>groupdel</command></term>
+<listitem>
+<para>Deletes the group with the given name</para>
+<indexterm zone="ch-system-shadow groupdel"><primary sortas="b-groupdel">groupdel</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="groupmod">
+<term><command>groupmod</command></term>
+<listitem>
+<para>Is used to modify the given group's name or GID</para>
+<indexterm zone="ch-system-shadow groupmod"><primary sortas="b-groupmod">groupmod</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="groups">
+<term><command>groups</command></term>
+<listitem>
+<para>Reports the groups of which the given users are members</para>
+<indexterm zone="ch-system-shadow groups"><primary sortas="b-groups">groups</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grpck">
+<term><command>grpck</command></term>
+<listitem>
+<para>Verifies the integrity of the group files <filename>/etc/group</filename>
+and <filename>/etc/gshadow</filename></para>
+<indexterm zone="ch-system-shadow grpck"><primary sortas="b-grpck">grpck</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grpconv">
+<term><command>grpconv</command></term>
+<listitem>
+<para>Creates or updates the shadow group file from the normal group file</para>
+<indexterm zone="ch-system-shadow grpconv"><primary sortas="b-grpconv">grpconv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="grpunconv">
+<term><command>grpunconv</command></term>
+<listitem>
+<para>Updates <filename>/etc/group</filename>
+from <filename>/etc/gshadow</filename> and then deletes the latter</para>
+<indexterm zone="ch-system-shadow grpunconv"><primary sortas="b-grpunconv">grpunconv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lastlog">
+<term><command>lastlog</command></term>
+<listitem>
+<para>Reports the most recent login of all users or of a given user</para>
+<indexterm zone="ch-system-shadow lastlog"><primary sortas="b-lastlog">lastlog</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="login">
+<term><command>login</command></term>
+<listitem>
+<para>Is used by the system to let users sign on</para>
+<indexterm zone="ch-system-shadow login"><primary sortas="b-login">login</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="logoutd">
+<term><command>logoutd</command></term>
+<listitem>
+<para>Is a daemon used to enforce restrictions on log-on time and ports</para>
+<indexterm zone="ch-system-shadow logoutd"><primary sortas="b-logoutd">logoutd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkpasswd">
+<term><command>mkpasswd</command></term>
+<listitem>
+<para>Generates random passwords</para>
+<indexterm zone="ch-system-shadow mkpasswd"><primary sortas="b-mkpasswd">mkpasswd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="newgrp">
+<term><command>newgrp</command></term>
+<listitem>
+<para>Is used to change the current GID during a login session</para>
+<indexterm zone="ch-system-shadow newgrp"><primary sortas="b-newgrp">newgrp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="newusers">
+<term><command>newusers</command></term>
+<listitem>
+<para>Is used to create or update an entire series of user accounts</para>
+<indexterm zone="ch-system-shadow newusers"><primary sortas="b-newusers">newusers</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="passwd">
+<term><command>passwd</command></term>
+<listitem>
+<para>Is used to change the password for a user or group account</para>
+<indexterm zone="ch-system-shadow passwd"><primary sortas="b-passwd">passwd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pwck">
+<term><command>pwck</command></term>
+<listitem>
+<para>Verifies the integrity of the password files
+<filename>/etc/passwd</filename> and <filename>/etc/shadow</filename></para>
+<indexterm zone="ch-system-shadow pwck"><primary sortas="b-pwck">pwck</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pwconv">
+<term><command>pwconv</command></term>
+<listitem>
+<para>Creates or updates the shadow password file from the normal
+password file</para>
+<indexterm zone="ch-system-shadow pwconv"><primary sortas="b-pwconv">pwconv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pwunconv">
+<term><command>pwunconv</command></term>
+<listitem>
+<para>Updates <filename>/etc/passwd</filename>
+from <filename>/etc/shadow</filename> and then deletes the latter</para>
+<indexterm zone="ch-system-shadow pwunconv"><primary sortas="b-pwunconv">pwunconv</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sg">
+<term><command>sg</command></term>
+<listitem>
+<para>Executes a given command while the user's GID
+is set to that of the given group</para>
+<indexterm zone="ch-system-shadow sg"><primary sortas="b-sg">sg</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="su">
+<term><command>su</command></term>
+<listitem>
+<indexterm zone="ch-system-shadow su"><primary sortas="b-su">su</primary></indexterm>
+<para>Runs a shell with substitute user and group IDs</para>
+</listitem>
+</varlistentry>
+
+<varlistentry id="useradd">
+<term><command>useradd</command></term>
+<listitem>
+<para>Creates a new user with the given name, or updates the default
+new-user information</para>
+<indexterm zone="ch-system-shadow useradd"><primary sortas="b-useradd">useradd</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="userdel">
+<term><command>userdel</command></term>
+<listitem>
+<para>Deletes the given user account</para>
+<indexterm zone="ch-system-shadow userdel"><primary sortas="b-userdel">userdel</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="usermod">
+<term><command>usermod</command></term>
+<listitem>
+<para>Is used to modify the given user's login name, User
+Identification (UID),
+shell, initial group, home directory, etc.</para>
+<indexterm zone="ch-system-shadow usermod"><primary sortas="b-usermod">usermod</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vigr">
+<term><command>vigr</command></term>
+<listitem>
+<para>Edits the <filename>/etc/group</filename> or
+<filename>/etc/gshadow</filename> files</para>
+<indexterm zone="ch-system-shadow vigr"><primary sortas="b-vigr">vigr</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vipw">
+<term><command>vipw</command></term>
+<listitem>
+<para>Edits the <filename>/etc/passwd</filename> or
+<filename>/etc/shadow</filename> files</para>
+<indexterm zone="ch-system-shadow vipw"><primary sortas="b-vipw">vipw</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="libshadow">
+<term><filename class="libraryfile">libshadow</filename></term>
+<listitem>
+<para>Contains functions used by most programs in this package</para>
+<indexterm zone="ch-system-shadow libshadow"><primary sortas="c-libshadow">libshadow</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/strippingagain.xml b/chapter06/strippingagain.xml
index e0531df3e..f6c5fa2ec 100644
--- a/chapter06/strippingagain.xml
+++ b/chapter06/strippingagain.xml
@@ -1,24 +1,54 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
+ <!ENTITY % general-entities SYSTEM "../general.ent">
+ %general-entities;
+]>
<sect1 id="ch-system-strippingagain">
<title>Stripping Again</title>
<?dbhtml filename="strippingagain.html"?>
-<para>Exit from chroot:</para>
+<para>If the intended user is not a programmer and does not plan to do
+any debugging on the system software, the system size can be decreased
+by about 200 MB by removing the debugging symbols from binaries and
+libraries. This causes no inconvenience other than not being able to
+debug the software fully anymore.</para>
+
+<para>Most people who use the command mentioned below do not
+experience any difficulties. However, it is easy to make a typo and
+render the new system unusable, so before running the
+<command>strip</command> command, it is a good idea to make a
+backup of the current situation.</para>
+
+<para>Before performing the stripping, take special care to ensure that
+none of the binaries that are about to be stripped are running. If
+unsure whether the user entered chroot with the command given in
+<xref linkend="ch-system-chroot" role=","/> first exit from
+chroot:</para>
<screen><userinput>logout</userinput></screen>
-<para>Reenter with:</para>
+<para>Then reenter it with:</para>
<screen><userinput>chroot $LFS /tools/bin/env -i \
HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/tools/bin/bash --login</userinput></screen>
-<para>Strip the binaries and libraries:</para>
+<para>Now the binaries and libraries can be safely stripped:</para>
<screen><userinput>/tools/bin/find /{,usr/}{bin,lib,sbin} -type f \
-exec /tools/bin/strip --strip-debug '{}' ';'</userinput></screen>
+<para>A large number of files will be reported as having their file
+format not recognized. These warnings can be safely ignored. These
+warnings indicate that those files are scripts instead of
+binaries.</para>
+
+<para>If disk space is very tight, the
+<parameter>--strip-all</parameter> option can be used on the binaries
+in <filename class="directory">/{,usr/}{bin,sbin}</filename> to gain
+several more megabytes. Do not use this option on libraries&mdash;they will
+be destroyed.</para>
+
</sect1>
diff --git a/chapter06/syslogng.xml b/chapter06/syslogng.xml
index 249fdbc99..04b432af6 100644
--- a/chapter06/syslogng.xml
+++ b/chapter06/syslogng.xml
@@ -10,6 +10,8 @@
<indexterm zone="ch-system-syslogng"><primary sortas="a-Syslogng">Syslog-ng</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Syslog-ng package contains programs for logging system messages, such
+as those given by the kernel when unusual things happen.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,10 @@
<seglistitem><seg>Unchecked</seg><seg>Unchecked</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Syslog-ng installation depends on</segtitle>
+<seglistitem><seg>Unchecked</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -26,11 +32,11 @@
<screen><userinput>./configure --prefix=/usr --sysconfdir=/etc</userinput></screen>
-<para>Compile Syslog-ng:</para>
+<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
-<para>Now install it:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -38,8 +44,14 @@
<sect2 id="conf-syslogng" role="configuration"><title>Configuring Syslog-ng</title>
+<indexterm zone="conf-syslogng">
+<primary sortas="a-Syslogng">Syslog-ng</primary>
+<secondary>configuring</secondary></indexterm>
+
+<indexterm zone="conf-syslogng"><primary sortas="e-/etc/syslog-ng/syslog-ng.conf">/etc/syslog-ng/syslog-ng.conf</primary></indexterm>
-<para>Create a <filename>/etc/syslog-ng/syslog-ng.conf</filename> file:</para>
+<para>Create a new <filename>/etc/syslog-ng/syslog-ng.conf</filename> file by
+running the following:</para>
<screen><userinput>mkdir -p /etc/syslog-ng
cat &gt; /etc/syslog-ng/syslog-ng.conf &lt;&lt; "EOF"
@@ -121,7 +133,26 @@ EOF</userinput></screen>
<sect2 id="contents-syslogng" role="content"><title>Contents of Syslog-ng</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>Unchecked</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="syslog-ng">
+<term><command>syslog-ng</command></term>
+<listitem>
+<indexterm zone="ch-system-syslogng"><primary sortas="b-syslog-ng">syslog-ng</primary></indexterm>
+<para>Logs the messages that system programs
+offer for logging. Every logged message contains at least a date stamp and a
+hostname, and normally the program's name too, but that depends on how
+trusting the logging daemon is told to be.</para>
+</listitem>
+
+</varlistentry>
+</variablelist>
</sect2>
diff --git a/chapter06/sysvinit.xml b/chapter06/sysvinit.xml
index b3cfab986..65af49d7f 100644
--- a/chapter06/sysvinit.xml
+++ b/chapter06/sysvinit.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-sysvinit" xreflabel="Sysvinit" role="wrap">
+<sect1 id="ch-system-sysvinit" role="wrap">
<title>Sysvinit-&sysvinit-version;</title>
<?dbhtml filename="sysvinit.html"?>
<indexterm zone="ch-system-sysvinit"><primary sortas="a-Sysvinit">Sysvinit</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Sysvinit package contains programs for controlling the startup,
+running, and shutdown of the system.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,21 +19,34 @@
<seglistitem><seg>0.1 SBU</seg><seg> 0.9 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Sysvinit installation depends on</segtitle>
+<seglistitem><seg>Binutils, Coreutils, GCC, Glibc, and Make</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Sysvinit</title>
-<para>Issue a sed sustitution:</para>
+<para>When run-levels are changed (for example, when halting the
+system), <command>init</command> sends termination signals to those
+processes that <command>init</command> itself started and that should
+not be running in the new run-level. While doing this,
+<command>init</command> outputs messages like <quote>Sending processes
+the TERM signal</quote> which seem to imply that it is sending these
+signals to all currently running processes. To avoid this
+misinterpretation, modify the source so that these messages read like
+<quote>Sending processes started by init the TERM signal</quote>
+instead:</para>
<screen><userinput>sed -i 's@Sending processes@&amp; started by init@g' \
src/init.c</userinput></screen>
-<para>Compile Sysvinit:</para>
+<para>Compile the package:</para>
<screen><userinput>make -C src</userinput></screen>
-<para>Then install it:</para>
+<para>Install the package:</para>
<screen><userinput>make -C src install</userinput></screen>
@@ -39,8 +54,14 @@
<sect2 id="conf-sysvinit" role="configuration"><title>Configuring Sysvinit</title>
+<indexterm zone="conf-sysvinit">
+<primary sortas="a-Sysvinit">Sysvinit</primary>
+<secondary>configuring</secondary></indexterm>
+
+<indexterm zone="conf-sysvinit"><primary sortas="e-/etc/inittab">/etc/inittab</primary></indexterm>
-<para>Create a <filename>/etc/inittab</filename> file:</para>
+<para>Create a new file <filename>/etc/inittab</filename> by running the
+following:</para>
<screen><userinput>cat &gt; /etc/inittab &lt;&lt; "EOF"
<literal># Begin /etc/inittab
@@ -71,14 +92,90 @@ su:S016:once:/sbin/sulogin
# End /etc/inittab</literal>
EOF</userinput></screen>
+<para>The <parameter>-I '\033(K'</parameter> option tells
+<command>agetty</command> to send this escape sequence to the terminal
+before doing anything else. This escape sequence switches the console
+character set to a user-defined one, which can be modified by running
+the <command>setfont</command> program. The <command>console</command>
+initscript from the LFS-Bootscripts package calls the <command>setfont</command>
+program during system startup. Sending this escape sequence is
+necessary for people who use non-ISO 8859-1 screen fonts, but it does
+not effect native English speakers.</para>
+
</sect2>
<sect2 id="contents-sysvinit" role="content"><title>Contents of Sysvinit</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>halt, init, killall5, last, lastb (link to last), mesg, pidof (link to
+killall5), poweroff (link to halt), reboot (link to halt), runlevel, shutdown, sulogin, telinit
+(link to init), utmpdump, and wall</seg></seglistitem>
+</segmentedlist>
-<!-- This should be added to testing:
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="halt">
+<term><command>halt</command></term>
+<listitem>
+<para>Normally invokes <command>shutdown</command> with the
+<parameter>-h</parameter> option, except when already in run-level 0,
+then it tells the kernel to halt the system; it notes in the
+file <filename>/var/log/wtmp</filename> that the system is being
+brought down</para>
+<indexterm zone="ch-system-sysvinit halt"><primary sortas="b-halt">halt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="init">
+<term><command>init</command></term>
+<listitem>
+<para>The first process to be started when the kernel has initialized
+the hardware which takes over the boot process and
+starts all the proceses it is instructed to</para>
+<indexterm zone="ch-system-sysvinit init"><primary sortas="b-init">init</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="killall5">
+<term><command>killall5</command></term>
+<listitem>
+<para>Sends a signal to all processes, except the processes in its own
+session so it will not kill the shell running the script that called
+it</para>
+<indexterm zone="ch-system-sysvinit killall5"><primary sortas="b-killall5">killall5</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="last">
+<term><command>last</command></term>
+<listitem>
+<para>Shows which users last logged in (and out),
+searching back through the <filename>/var/log/wtmp</filename> file; it
+also shows system boots, shutdowns, and run-level changes</para>
+<indexterm zone="ch-system-sysvinit last"><primary sortas="b-last">last</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="lastb">
+<term><command>lastb</command></term>
+<listitem>
+<para>Shows the failed login attempts, as logged in
+<filename>/var/log/btmp</filename></para>
+<indexterm zone="ch-system-sysvinit lastb"><primary sortas="b-lastb">lastb</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mesg">
+<term><command>mesg</command></term>
+<listitem>
+<para>Controls whether other users can send messages to the current
+user's terminal</para>
+<indexterm zone="ch-system-sysvinit mesg"><primary sortas="b-mesg">mesg</primary></indexterm>
+</listitem>
+</varlistentry>
<varlistentry id="mountpoint">
<term><command>mountpoint</command></term>
@@ -88,8 +185,86 @@ EOF</userinput></screen>
</listitem>
</varlistentry>
--->
+<varlistentry id="pidof">
+<term><command>pidof</command></term>
+<listitem>
+<para>Reports the PIDs of the given programs</para>
+<indexterm zone="ch-system-sysvinit pidof"><primary sortas="b-pidof">pidof</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="poweroff">
+<term><command>poweroff</command></term>
+<listitem>
+<para>Tells the kernel to halt the system and switch off the computer
+(see <command>halt</command>)</para>
+<indexterm zone="ch-system-sysvinit poweroff"><primary sortas="b-poweroff">poweroff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="reboot">
+<term><command>reboot</command></term>
+<listitem>
+<para>Tells the kernel to reboot the system (see
+<command>halt</command>)</para>
+<indexterm zone="ch-system-sysvinit reboot"><primary sortas="b-reboot">reboot</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="runlevel">
+<term><command>runlevel</command></term>
+<listitem>
+<para>Reports the previous and the current run-level, as noted in the last run-level
+record in <filename>/var/run/utmp</filename></para>
+<indexterm zone="ch-system-sysvinit runlevel"><primary sortas="b-runlevel">runlevel</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="shutdown">
+<term><command>shutdown</command></term>
+<listitem>
+<para>Brings the system down in a secure way, signaling all processes
+and notifying all logged-in users</para>
+<indexterm zone="ch-system-sysvinit shutdown"><primary sortas="b-shutdown">shutdown</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sulogin">
+<term><command>sulogin</command></term>
+<listitem>
+<para>Allows <emphasis>root</emphasis> to log in; it is
+normally invoked by <command>init</command> when the system goes into single user mode</para>
+<indexterm zone="ch-system-sysvinit sulogin"><primary sortas="b-sulogin">sulogin</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="telinit">
+<term><command>telinit</command></term>
+<listitem>
+<para>Tells <command>init</command> which run-level to change to</para>
+<indexterm zone="ch-system-sysvinit telinit"><primary sortas="b-telinit">telinit</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="utmpdump">
+<term><command>utmpdump</command></term>
+<listitem>
+<para>Displays the content of the given login file in a more
+user-friendly format</para>
+<indexterm zone="ch-system-sysvinit utmpdump"><primary sortas="b-utmpdump">utmpdump</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="wall">
+<term><command>wall</command></term>
+<listitem>
+<para>Writes a message to all logged-in users</para>
+<indexterm zone="ch-system-sysvinit wall"><primary sortas="b-wall">wall</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/tar.xml b/chapter06/tar.xml
index 48c821b2f..9c6b581b5 100644
--- a/chapter06/tar.xml
+++ b/chapter06/tar.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-tar" xreflabel="Tar" role="wrap">
+<sect1 id="ch-system-tar" role="wrap">
<title>Tar-&tar-version;</title>
<?dbhtml filename="tar.html"?>
<indexterm zone="ch-system-tar"><primary sortas="a-Tar">Tar</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Tar package contains an archiving program.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +18,11 @@
<seglistitem><seg>0.2 SBU</seg><seg>10 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Tar installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils,
+Diffutils, GCC, Gettext, Glibc, Grep, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -33,7 +39,7 @@
<para>To test the results, issue:
<userinput>make check</userinput>.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
@@ -42,8 +48,33 @@
<sect2 id="contents-tar" role="content"><title>Contents of Tar</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>rmt and tar</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="rmt">
+<term><command>rmt</command></term>
+<listitem>
+<para>Remotely manipulates a magnetic
+tape drive through an interprocess communication connection</para>
+<indexterm zone="ch-system-tar rmt"><primary sortas="b-rmt">rmt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tar">
+<term><command>tar</command></term>
+<listitem>
+<para>Creates and extracts files from archives, also known as tarballs</para>
+<indexterm zone="ch-system-tar tar"><primary sortas="b-tar">tar</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/texinfo.xml b/chapter06/texinfo.xml
index 65b0a6d9d..7560a62a0 100644
--- a/chapter06/texinfo.xml
+++ b/chapter06/texinfo.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-texinfo" xreflabel="Texinfo" role="wrap">
+<sect1 id="ch-system-texinfo" role="wrap">
<title>Texinfo-&texinfo-version;</title>
<?dbhtml filename="texinfo.html"?>
<indexterm zone="ch-system-texinfo"><primary sortas="a-Texinfo">Texinfo</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Texinfo package contains programs for reading, writing, and
+converting Info documents.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,6 +19,11 @@
<seglistitem><seg>0.2 SBU</seg><seg>17 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Texinfo installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils,
+Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
@@ -37,12 +44,29 @@
<screen><userinput>make install</userinput></screen>
-<para>Optionally install the components belonging in a TeX installation:</para>
+<para>Optionally, install the components belonging in a TeX installation:</para>
<screen><userinput>make TEXMF=/usr/share/texmf install-tex</userinput></screen>
-<para>If ever you need to recreate the
-<filename>/usr/share/info/dir</filename> file, run this:</para>
+<para>The meaning of the make parameter:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>TEXMF=/usr/share/texmf</parameter></term>
+<listitem><para>The <envar>TEXMF</envar> makefile variable holds the location of the
+root of the TeX tree if, for example, a TeX package will be installed
+later.</para></listitem>
+</varlistentry>
+</variablelist>
+
+<para>The Info documentation system uses a plain text file to hold its
+list of menu entries. The file is located at
+<filename>/usr/share/info/dir</filename>. Unfortunately, due to
+occasional problems in the Makefiles of various packages, it can
+sometimes get out of step with the Info manuals installed on the
+system. If the <filename>/usr/share/info/dir</filename> file ever
+needs to be recreated, the following optional commands will accomplish
+the task:</para>
<screen><userinput>cd /usr/share/info
rm dir
@@ -52,11 +76,74 @@ done</userinput></screen>
</sect2>
-
<sect2 id="contents-texinfo" role="content"><title>Contents of Texinfo</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>info, infokey, install-info,
+makeinfo, texi2dvi, and texindex</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="info">
+<term><command>info</command></term>
+<listitem>
+<para>Used to read Info documents which are similar to man
+pages, but often go much deeper than just explaining all the command
+line options. For example, compare <command>man bison</command> and
+<command>info bison</command>.</para>
+<indexterm zone="ch-system-texinfo info"><primary sortas="b-info">info</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="infokey">
+<term><command>infokey</command></term>
+<listitem>
+<para>Compiles a source file containing Info customizations into a
+binary format</para>
+<indexterm zone="ch-system-texinfo infokey"><primary sortas="b-infokey">infokey</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="install-info">
+<term><command>install-info</command></term>
+<listitem>
+<para>Used to install Info files; it updates entries in the Info index
+file</para>
+<indexterm zone="ch-system-texinfo install-info"><primary sortas="b-install-info">install-info</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="makeinfo">
+<term><command>makeinfo</command></term>
+<listitem>
+<para>Translates the given Texinfo source documents into
+info files, plain text, or HTML</para>
+<indexterm zone="ch-system-texinfo makeinfo"><primary sortas="b-makeinfo">makeinfo</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="texi2dvi">
+<term><command>texi2dvi</command></term>
+<listitem>
+<para>Used to format the given Texinfo document into a
+device-independent file that can be printed</para>
+<indexterm zone="ch-system-texinfo texi2dvi"><primary sortas="b-texi2dvi">texi2dvi</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="texindex">
+<term><command>texindex</command></term>
+<listitem>
+<para>Used to sort Texinfo index files</para>
+<indexterm zone="ch-system-texinfo texindex"><primary sortas="b-texindex">texindex</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/udev.xml b/chapter06/udev.xml
index b1a34c51d..e25ed756d 100644
--- a/chapter06/udev.xml
+++ b/chapter06/udev.xml
@@ -10,6 +10,7 @@
<indexterm zone="ch-system-udev"><primary sortas="a-Udev">Udev</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Udev package contains programs for dynamic creation of device nodes.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,36 +18,128 @@
<seglistitem><seg>0.2 SBU</seg><seg>5.2 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Udev installation depends on</segtitle>
+<seglistitem><seg>Coreutils and Make</seg></seglistitem>
+</segmentedlist>
+
</sect2>
<sect2 role="installation">
<title>Installation of Udev</title>
-<para>Compile Udev:</para>
+<para>Compile the package:</para>
<screen><userinput>make udevdir=/dev</userinput></screen>
-<para>Install it:</para>
+<variablelist>
+<varlistentry>
+<term><parameter>udevdir=/dev</parameter></term>
+<listitem><para>This tells <command>udev</command> in which directory
+devices nodes are to be created.</para></listitem>
+</varlistentry>
+</variablelist>
+
+<para>This package does not come with a test suite.</para>
+
+<para>Install the package:</para>
<screen><userinput>make udevdir=/dev install</userinput></screen>
-<para>Install our configuration files:</para>
+<para>Udev's configuration is far from ideal by default, so install
+the configuration files here:</para>
<screen><userinput>cp ../udev-config-2.permissions \
/etc/udev/permissions.d/25-lfs.permissions
cp ../udev-config-1.rules /etc/udev/rules.d/25-lfs.rules</userinput></screen>
-<para>Create the full compliment of device nodes:</para>
+<!-- Edit Me -->
+<para>Run the <command>udevstart</command> program to create our full
+compliment of device nodes.</para>
<screen><userinput>/sbin/udevstart</userinput></screen>
</sect2>
-
<sect2 id="contents-udev" role="content"><title>Contents of Udev</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<segtitle>Installed directory</segtitle>
+<seglistitem><seg>udev, udevd, udevsend, udevstart, udevinfo, and udevtest</seg>
+<seg>/etc/udev</seg></seglistitem>
+</segmentedlist>
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="udev">
+<term><command>udev</command></term>
+<listitem>
+<para>Creates device nodes in <filename
+class="directory">/dev</filename> or renames network interfaces (not
+in LFS) in response to hotplug events</para>
+<indexterm zone="ch-system-udev udev"><primary sortas="b-udev">udev</primary></indexterm>
+</listitem></varlistentry>
+
+<varlistentry id="udevd">
+<term><command>udevd</command></term>
+<listitem>
+<para>A daemon that reorders hotplug events before submitting them to
+<command>udev</command>,
+thus avoiding various race conditions</para>
+<indexterm zone="ch-system-udev udevd"><primary sortas="b-udevd">udevd</primary></indexterm>
+</listitem></varlistentry>
+
+<varlistentry id="udevsend">
+<term><command>udevsend</command></term>
+<listitem>
+<para>Delivers hotplug events to <command>udevd</command></para>
+<indexterm zone="ch-system-udev udevsend"><primary sortas="b-udevsend">udevsend</primary></indexterm>
+</listitem></varlistentry>
+
+<varlistentry id="udevstart">
+<term><command>udevstart</command></term>
+<listitem>
+<para>Creates device nodes in <filename
+class="directory">/dev</filename> that correspond to drivers compiled directly
+into the kernel; it performs that task by simulating hotplug events presumably
+dropped by the kernel before invocation of this program (e.g., because the root
+filesystem has not been mounted) and submitting such synthetic hotplug events
+to <command>udev</command></para>
+<indexterm zone="ch-system-udev udevstart"><primary sortas="b-udevstart">udevstart</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="udevinfo">
+<term><command>udevinfo</command></term>
+<listitem>
+<para>Allows users to query the <command>udev</command> database for
+information on any device currently present on the system; it also
+provides a way to query any device in the <systemitem
+class="filesystem">sysfs</systemitem> tree to help create udev
+rules</para>
+<indexterm zone="ch-system-udev udevinfo"><primary sortas="b-udevinfo">udevinfo</primary></indexterm>
+</listitem></varlistentry>
+
+<varlistentry id="udevtest">
+<term><command>udevtest</command></term>
+<listitem>
+<para>Simulates a <command>udev</command> run for the given device,
+and prints out the name of the node the real <command>udev</command> would
+have created or (not in LFS) the name of the renamed network interface</para>
+<indexterm zone="ch-system-udev udevtest"><primary sortas="b-udevtest">udevtest</primary></indexterm>
+</listitem></varlistentry>
+
+<varlistentry id="etc-udev">
+<term><filename class="directory">/etc/udev</filename></term>
+<listitem>
+<para>Contains <command>udev</command> configuation files,
+device permissions, and rules for device naming</para>
+<indexterm zone="ch-system-udev etc-udev"><primary sortas="e-etc-udev">/etc/udev</primary></indexterm>
+</listitem></varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/util-linux.xml b/chapter06/util-linux.xml
index 8ea6d5b2b..fcdc35383 100644
--- a/chapter06/util-linux.xml
+++ b/chapter06/util-linux.xml
@@ -3,13 +3,16 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-util-linux" xreflabel="Util-linux" role="wrap">
+<sect1 id="ch-system-util-linux" role="wrap">
<title>Util-linux-&util-linux-version;</title>
<?dbhtml filename="util-linux.html"?>
<indexterm zone="ch-system-util-linux"><primary sortas="a-Util-linux">Util-linux</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Util-linux package contains miscellaneous utility programs. Among
+them are utilities for handling file systems, consoles, partitions, and
+messages.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,12 +20,22 @@
<seglistitem><seg>0.2 SBU</seg><seg>16 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Util-linux installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils,
+Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed, and Zlib</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>FHS compliance notes</title>
-<para>Issue a sed sustitution:</para>
+<para>The FHS recommends using the <filename
+class="directory">/var/lib/hwclock</filename> directory instead of the
+usual <filename class="directory">/etc</filename> directory as the
+location for the <filename>adjtime</filename> file. To make the
+<command>hwclock</command> program FHS-compliant, run the
+following:</para>
<screen><userinput>sed -i 's@etc/adjtime@var/lib/hwclock/adjtime@g' \
hwclock/hwclock.c
@@ -46,17 +59,566 @@ linux-libc-headers. The following patch properly fixes that issue</para>
<screen><userinput>make HAVE_KILL=yes HAVE_SLN=yes</userinput></screen>
-<para>Now install the package:</para>
+<para>The meaning of the make parameters:</para>
+
+<variablelist>
+<varlistentry>
+<term><parameter>HAVE_KILL=yes</parameter></term>
+<listitem><para>This prevents the
+<command>kill</command> program (already installed by Procps) from being
+built and installed again.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><parameter>HAVE_SLN=yes</parameter></term>
+<listitem><para>This prevents the <command>sln</command> program (a
+statically linked version of <command>ln</command> already installed
+by Glibc) from being built and installed again.</para></listitem>
+</varlistentry>
+</variablelist>
+
+<para>This package does not come with a test suite.</para>
+
+<para>Install the package:</para>
<screen><userinput>make HAVE_KILL=yes HAVE_SLN=yes install</userinput></screen>
</sect2>
-
<sect2 id="contents-utillinux" role="content"><title>Contents of Util-linux</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt,
+colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk,
+fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm, ipcs, isosize, line,
+logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap,
+more, mount, namei, pg, pivot_root, ramsize (link to rdev), raw, rdev, readprofile,
+rename, renice, rev, rootflags (link to rdev), script, setfdprm, setsid, setterm,
+sfdisk, swapdev, swapoff (link to swapon), swapon, tunelp, ul, umount, vidmode (link to rdev),
+whereis, and write</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="agetty">
+<term><command>agetty</command></term>
+<listitem>
+<para>Opens a tty port, prompts for a login name,
+and then invokes the <command>login</command> program</para>
+<indexterm zone="ch-system-util-linux agetty"><primary sortas="b-agetty">agetty</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="arch">
+<term><command>arch</command></term>
+<listitem>
+<para>Reports the machine's architecture</para>
+<indexterm zone="ch-system-util-linux arch"><primary sortas="b-arch">arch</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="blockdev">
+<term><command>blockdev</command></term>
+<listitem>
+<para>Allows users to call block device ioctls from the command line</para>
+<indexterm zone="ch-system-util-linux blockdev"><primary sortas="b-blockdev">blockdev</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="cal">
+<term><command>cal</command></term>
+<listitem>
+<para>Displays a simple calendar</para>
+<indexterm zone="ch-system-util-linux cal"><primary sortas="b-cal">cal</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="cfdisk">
+<term><command>cfdisk</command></term>
+<listitem>
+<para>Manipulates the partition table of the given device</para>
+<indexterm zone="ch-system-util-linux cfdisk"><primary sortas="b-cfdisk">cfdisk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="chkdupexe">
+<term><command>chkdupexe</command></term>
+<listitem>
+<para>Finds duplicate executables</para>
+<indexterm zone="ch-system-util-linux chkdupexe"><primary sortas="b-chkdupexe">chkdupexe</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="col">
+<term><command>col</command></term>
+<listitem>
+<para>Filters out reverse line feeds</para>
+<indexterm zone="ch-system-util-linux col"><primary sortas="b-col">col</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="colcrt">
+<term><command>colcrt</command></term>
+<listitem>
+<para>Filters <command>nroff</command> output for terminals
+that lack some capabilities, such as overstriking and half-lines</para>
+<indexterm zone="ch-system-util-linux colcrt"><primary sortas="b-colcrt">colcrt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="colrm">
+<term><command>colrm</command></term>
+<listitem>
+<para>Filters out the given columns</para>
+<indexterm zone="ch-system-util-linux colrm"><primary sortas="b-colrm">colrm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="column">
+<term><command>column</command></term>
+<listitem>
+<para>Formats a given file into multiple columns</para>
+<indexterm zone="ch-system-util-linux column"><primary sortas="b-column">column</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ctrlaltdel">
+<term><command>ctrlaltdel</command></term>
+<listitem>
+<para>Sets the function of the Ctrl+Alt+Del key combination to a hard or a
+soft reset</para>
+<indexterm zone="ch-system-util-linux ctrlaltdel"><primary sortas="b-ctrlaltdel">ctrlaltdel</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="cytune">
+<term><command>cytune</command></term>
+<listitem>
+<para>Tunes the parameters of the serial line drivers for
+Cyclades cards</para>
+<indexterm zone="ch-system-util-linux cytune"><primary sortas="b-cytune">cytune</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ddate">
+<term><command>ddate</command></term>
+<listitem>
+<para>Gives the Discordian date or converts the given Gregorian date
+to a Discordian one</para>
+<indexterm zone="ch-system-util-linux ddate"><primary sortas="b-ddate">ddate</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="dmesg">
+<term><command>dmesg</command></term>
+<listitem>
+<para>Dumps the kernel boot messages</para>
+<indexterm zone="ch-system-util-linux dmesg"><primary sortas="b-dmesg">dmesg</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="elvtune">
+<term><command>elvtune</command></term>
+<listitem>
+<para>Tunes the performance and interactivity of a block
+device</para>
+<indexterm zone="ch-system-util-linux elvtune"><primary sortas="b-elvtune">elvtune</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fdformat">
+<term><command>fdformat</command></term>
+<listitem>
+<para>Low-level formats a floppy disk</para>
+<indexterm zone="ch-system-util-linux fdformat"><primary sortas="b-fdformat">fdformat</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fdisk">
+<term><command>fdisk</command></term>
+<listitem>
+<para>Manipulates the partition table of the given device</para>
+<indexterm zone="ch-system-util-linux fdisk"><primary sortas="b-fdisk">fdisk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fsck.cramfs">
+<term><command>fsck.cramfs</command></term>
+<listitem>
+<para>Performs a consistency check on the Cramfs file system on the
+given device</para>
+<indexterm zone="ch-system-util-linux fsck.cramfs"><primary sortas="b-fsck.cramfs">fsck.cramfs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="fsck.minix">
+<term><command>fsck.minix</command></term>
+<listitem>
+<para>Performs a consistency check on the Minix file system on the
+given device</para>
+<indexterm zone="ch-system-util-linux fsck.minix"><primary sortas="b-fsck.minix">fsck.minix</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="getopt">
+<term><command>getopt</command></term>
+<listitem>
+<para>Parses options in the given command line</para>
+<indexterm zone="ch-system-util-linux getopt"><primary sortas="b-getopt">getopt</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hexdump">
+<term><command>hexdump</command></term>
+<listitem>
+<para>Dumps the given file in hexadecimal or in another given format</para>
+<indexterm zone="ch-system-util-linux hexdump"><primary sortas="b-hexdump">hexdump</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="hwclock">
+<term><command>hwclock</command></term>
+<listitem>
+<para>Reads or sets the system's hardware clock, also called
+the Real-Time Clock (RTC)) or Basic Input-Output System (BIOS)
+clock</para>
+<indexterm zone="ch-system-util-linux hwclock"><primary sortas="b-hwclock">hwclock</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ipcrm">
+<term><command>ipcrm</command></term>
+<listitem>
+<para>Removes the given Inter-Process Communication (IPC) resource</para>
+<indexterm zone="ch-system-util-linux ipcrm"><primary sortas="b-ipcrm">ipcrm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ipcs">
+<term><command>ipcs</command></term>
+<listitem>
+<para>Provides IPC status information</para>
+<indexterm zone="ch-system-util-linux ipcs"><primary sortas="b-ipcs">ipcs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="isosize">
+<term><command>isosize</command></term>
+<listitem>
+<para>Reports the size of an iso9660 file system</para>
+<indexterm zone="ch-system-util-linux isosize"><primary sortas="b-isosize">isosize</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="line">
+<term><command>line</command></term>
+<listitem>
+<para>Copies a single line</para>
+<indexterm zone="ch-system-util-linux line"><primary sortas="b-line">line</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="logger">
+<term><command>logger</command></term>
+<listitem>
+<para>Enters the given message into the system log</para>
+<indexterm zone="ch-system-util-linux logger"><primary sortas="b-logger">logger</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="look">
+<term><command>look</command></term>
+<listitem>
+<para>Displays lines that begin with the given string</para>
+<indexterm zone="ch-system-util-linux look"><primary sortas="b-look">look</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="losetup">
+<term><command>losetup</command></term>
+<listitem>
+<para>Sets up and controls loop devices</para>
+<indexterm zone="ch-system-util-linux losetup"><primary sortas="b-losetup">losetup</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mcookie">
+<term><command>mcookie</command></term>
+<listitem>
+<para>Generates magic cookies (128-bit random hexadecimal numbers) for
+<command>xauth</command></para>
+<indexterm zone="ch-system-util-linux mcookie"><primary sortas="b-mcookie">mcookie</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkfs">
+<term><command>mkfs</command></term>
+<listitem>
+<para>Builds a file system on a device (usually a hard disk
+partition)</para>
+<indexterm zone="ch-system-util-linux mkfs"><primary sortas="b-mkfs">mkfs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkfs.bfs">
+<term><command>mkfs.bfs</command></term>
+<listitem>
+<para>Creates an Santa Cruz Operations (SCO) bfs file system</para>
+<indexterm zone="ch-system-util-linux mkfs.bfs"><primary sortas="b-mkfs.bfs">mkfs.bfs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkfs.cramfs">
+<term><command>mkfs.cramfs</command></term>
+<listitem>
+<para>Creates a cramfs file system</para>
+<indexterm zone="ch-system-util-linux mkfs.cramfs"><primary sortas="b-mkfs.cramfs">mkfs.cramfs</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkfs.minix">
+<term><command>mkfs.minix</command></term>
+<listitem>
+<para>Creates a Minix file system</para>
+<indexterm zone="ch-system-util-linux mkfs.minix"><primary sortas="b-mkfs.minix">mkfs.minix</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mkswap">
+<term><command>mkswap</command></term>
+<listitem>
+<para>Initializes the given device or file to be used as a swap area</para>
+<indexterm zone="ch-system-util-linux mkswap"><primary sortas="b-mkswap">mkswap</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="more">
+<term><command>more</command></term>
+<listitem>
+<para>A filter for paging through text one screen at a time</para>
+<indexterm zone="ch-system-util-linux more"><primary sortas="b-more">more</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mount">
+<term><command>mount</command></term>
+<listitem>
+<para>Attaches the file system on the given device to a specified
+directory in the file-system tree</para>
+<indexterm zone="ch-system-util-linux mount"><primary sortas="b-mount">mount</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="namei">
+<term><command>namei</command></term>
+<listitem>
+<para>Shows the symbolic links in the given pathnames</para>
+<indexterm zone="ch-system-util-linux namei"><primary sortas="b-namei">namei</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pg">
+<term><command>pg</command></term>
+<listitem>
+<para>Displays a text file one screen full at a time</para>
+<indexterm zone="ch-system-util-linux pg"><primary sortas="b-pg">pg</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pivot_root">
+<term><command>pivot_root</command></term>
+<listitem>
+<para>Makes the given file system the new root file system of the
+current process</para>
+<indexterm zone="ch-system-util-linux pivot_root"><primary sortas="b-pivot_root">pivot_root</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ramsize">
+<term><command>ramsize</command></term>
+<listitem>
+<para>Sets the size of the RAM disk in a bootable image</para>
+<indexterm zone="ch-system-util-linux ramsize"><primary sortas="b-ramsize">ramsize</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="raw">
+<term><command>raw</command></term>
+<listitem>
+<para>Used to bind a Linux raw character device to a block
+device</para>
+<indexterm zone="ch-system-util-linux raw"><primary sortas="b-raw">raw</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rdev">
+<term><command>rdev</command></term>
+<listitem>
+<para>Queries and sets the root device, among other things, in a
+bootable image</para>
+<indexterm zone="ch-system-util-linux rdev"><primary sortas="b-rdev">rdev</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="readprofile">
+<term><command>readprofile</command></term>
+<listitem>
+<para>Reads kernel profiling information</para>
+<indexterm zone="ch-system-util-linux readprofile"><primary sortas="b-readprofile">readprofile</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rename">
+<term><command>rename</command></term>
+<listitem>
+<para>Renames the given files, replacing a given string with another</para>
+<indexterm zone="ch-system-util-linux rename"><primary sortas="b-rename">rename</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="renice">
+<term><command>renice</command></term>
+<listitem>
+<para>Alters the priority of running processes</para>
+<indexterm zone="ch-system-util-linux renice"><primary sortas="b-renice">renice</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rev">
+<term><command>rev</command></term>
+<listitem>
+<para>Reverses the lines of a given file</para>
+<indexterm zone="ch-system-util-linux rev"><primary sortas="b-rev">rev</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rootflags">
+<term><command>rootflags</command></term>
+<listitem>
+<para>Sets the rootflags in a bootable image</para>
+<indexterm zone="ch-system-util-linux rootflags"><primary sortas="b-rootflags">rootflags</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="script">
+<term><command>script</command></term>
+<listitem>
+<para>Makes a typescript of a terminal session</para>
+<indexterm zone="ch-system-util-linux script"><primary sortas="b-script">script</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="setfdprm">
+<term><command>setfdprm</command></term>
+<listitem>
+<para>Sets user-provided floppy disk parameters</para>
+<indexterm zone="ch-system-util-linux setfdprm"><primary sortas="b-setfdprm">setfdprm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="setsid">
+<term><command>setsid</command></term>
+<listitem>
+<para>Runs the given program in a new session</para>
+<indexterm zone="ch-system-util-linux setsid"><primary sortas="b-setsid">setsid</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="setterm">
+<term><command>setterm</command></term>
+<listitem>
+<para>Sets terminal attributes</para>
+<indexterm zone="ch-system-util-linux setterm"><primary sortas="b-setterm">setterm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="sfdisk">
+<term><command>sfdisk</command></term>
+<listitem>
+<para>A disk partition table manipulator</para>
+<indexterm zone="ch-system-util-linux sfdisk"><primary sortas="b-sfdisk">sfdisk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="swapdev">
+<term><command>swapdev</command></term>
+<listitem>
+<para>Sets the swap device in a bootable image</para>
+<indexterm zone="ch-system-util-linux swapdev"><primary sortas="b-swapdev">swapdev</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="swapoff">
+<term><command>swapoff</command></term>
+<listitem>
+<para>Disables devices and files for paging and swapping</para>
+<indexterm zone="ch-system-util-linux swapoff"><primary sortas="b-swapoff">swapoff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="swapon">
+<term><command>swapon</command></term>
+<listitem>
+<para>Enables devices and files for paging and swapping</para>
+<indexterm zone="ch-system-util-linux swapon"><primary sortas="b-swapon">swapon</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tunelp">
+<term><command>tunelp</command></term>
+<listitem>
+<para>Tunes the parameters of the line printer</para>
+<indexterm zone="ch-system-util-linux tunelp"><primary sortas="b-tunelp">tunelp</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ul">
+<term><command>ul</command></term>
+<listitem>
+<para>A filter for translating underscores into
+escape sequences indicating underlining for the terminal in use</para>
+<indexterm zone="ch-system-util-linux ul"><primary sortas="b-ul">ul</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="umount">
+<term><command>umount</command></term>
+<listitem>
+<para>Disconnects a file system from the system's file tree</para>
+<indexterm zone="ch-system-util-linux umount"><primary sortas="b-umount">umount</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vidmode">
+<term><command>vidmode</command></term>
+<listitem>
+<para>Sets the video mode in a bootable image</para>
+<indexterm zone="ch-system-util-linux vidmode"><primary sortas="b-vidmode">vidmode</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="whereis">
+<term><command>whereis</command></term>
+<listitem>
+<para>Reports the location of binary, the source, and the manual page
+for the given command</para>
+<indexterm zone="ch-system-util-linux whereis"><primary sortas="b-whereis">whereis</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="write">
+<term><command>write</command></term>
+<listitem>
+<para>Sends a message to the given user
+<emphasis>if</emphasis> that user has not disabled receipt of such messages</para>
+<indexterm zone="ch-system-util-linux write"><primary sortas="b-write">write</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/vim.xml b/chapter06/vim.xml
index aeeaf535c..ec263cced 100644
--- a/chapter06/vim.xml
+++ b/chapter06/vim.xml
@@ -3,13 +3,14 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-vim" xreflabel="Vim" role="wrap">
+<sect1 id="ch-system-vim" role="wrap">
<title>Vim-&vim-version;</title>
<?dbhtml filename="vim.html"?>
<indexterm zone="ch-system-vim"><primary sortas="a-Vim">Vim</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Vim package contains a powerful text editor.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,12 +18,30 @@
<seglistitem><seg>0.4 SBU</seg><seg>34 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Vim installation depends on</segtitle>
+<seglistitem><seg>Bash, Binutils, Coreutils, Diffutils,
+GCC, Glibc, Grep, Make, Ncurses, and Sed</seg></seglistitem>
+</segmentedlist>
+
+<tip>
+<title>Alternatives to Vim</title>
+<para>If you prefer another editor&mdash;such as Emacs, Joe, or
+Nano&mdash;please refer to <ulink url="&blfs-root;view/svn/postlfs/editors.html"/>
+for suggested installation instructions.</para>
+</tip>
</sect2>
<sect2 role="installation">
<title>Installation of Vim</title>
-<para>Change the default locations of the configuration files:</para>
+<para>First, unpack both
+<filename>vim-&vim-version;.tar.bz2</filename> and (optionally)
+<filename>vim-&vim-version;-lang.tar.gz</filename> archives into the
+same directory. Then, change the default locations of the
+<filename>vimrc</filename> and <filename>gvimrc</filename>
+configuration files to <filename
+class="directory">/etc</filename>:</para>
<screen><userinput>echo '#define SYS_VIMRC_FILE "/etc/vimrc"' &gt;&gt; src/feature.h
echo '#define SYS_GVIMRC_FILE "/etc/gvimrc"' &gt;&gt; src/feature.h</userinput></screen>
@@ -36,28 +55,56 @@ following patch fixes the problem:</para>
<screen><userinput>./configure --prefix=/usr --enable-multibyte</userinput></screen>
+<para>The optional but highly recommended
+<parameter>--enable-multibyte</parameter> switch includes support for
+editing files in multibyte character encodings into
+<command>vim</command>. This is needed if using a locale with
+a multibyte character set. This switch is also helpful to be able to
+edit text files initially created in Linux distributions like Fedora
+Core that use UTF-8 as a default character set.</para>
+
<para>Compile the package:</para>
<screen><userinput>make</userinput></screen>
<para>To test the results, issue:
-<userinput>make test</userinput></para>
+<userinput>make test</userinput>. However, this test suite outputs a
+lot of chaotic characters to the screen, which can cause issues with
+the settings of the current terminal. Therefore, running the test
+suite here is optional.</para>
-<para>Now install the package:</para>
+<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
-<para>Create a symlink:</para>
+<para>Many users are used to using <command>vi</command> instead of
+<command>vim</command>. To allow execution of <command>vim</command>
+when users habitually enter <command>vi</command>, create a
+symlink:</para>
<screen><userinput>ln -s vim /usr/bin/vi</userinput></screen>
-</sect2>
+<para>If the X Window System is going to be installed on the LFS
+system, it may be necessary to recompile Vim after installing X. Vim
+comes with a GUI version of the editor that requires X and some
+additional libraries to be installed. For more information on this
+process, refer to the Vim documentation and the Vim installation page
+in the BLFS book at <ulink
+url="&blfs-root;view/svn/postlfs/editors.html#postlfs-editors-vim"/>.</para>
+</sect2>
<sect2 id="conf-vim" role="configuration"><title>Configuring Vim</title>
+<indexterm zone="conf-vim"><primary sortas="e-/etc/vim">/etc/vim</primary></indexterm>
-<para>Create a default vim configuration file by running
-the following:</para>
+<para>By default, <command>vim</command> runs in vi-incompatible mode.
+This may be new to users who have used other editors in the past. The
+<quote>nocompatible</quote> setting is included below to highlight the
+fact that a new behavior is being used. It also reminds those who
+would change to <quote>compatible</quote> mode that it should appear
+first. This is necessary because it changes other settings, and
+overrides must come after this setting. Create a default <command>vim</command>
+configuration file by running the following:</para>
<screen><userinput>cat &gt; /etc/vimrc &lt;&lt; "EOF"
<literal>" Begin /etc/vimrc
@@ -65,7 +112,6 @@ the following:</para>
set nocompatible
set backspace=2
syntax on
-<!-- set fileencodings=ucs-bom,utf-8,<replaceable>[your-8-bit-charset]</replaceable> -->
if (&amp;term == "iterm") || (&amp;term == "putty")
set background=dark
endif
@@ -73,32 +119,215 @@ endif
" End /etc/vimrc</literal>
EOF</userinput></screen>
-<!-- XXX: the ascii-only files are considered to be in utf-8 - that's not what
-one expects . That's why fileencodings stuff is commented out for now
-
-The <parameter>set fileencodings=...</parameter> makes
-<command>vim</command> capable of automatically detecting the character
-set of the file being edited (replace
-"<replaceable>[your-8-bit-charset]</replaceable>"
-with the value appropriate for your country, e.g. iso-8859-15 in Italy).
-This line is useful because bleeding-edge distributions
-like Fedora Core use UTF-8, and conservative ones like Debian
-use traditional 8-bit encodings for text files. If you have not
-passed the <parameter>- -enable-multibyte</parameter> switch to the
-<command>./configure</command> command above, this line will not work. -->
-
-<para>Documentation for other available options can be obtained by running
-the following command:</para>
+<para>The <parameter>set nocompatible</parameter> makes
+<command>vim</command> behave in a more useful way (the default) than
+the vi-compatible manner. Remove the <quote>no</quote> to keep the
+old <command>vi</command> behavior. The <parameter>set
+backspace=2</parameter> allows backspacing over line breaks,
+autoindents, and the start of insert. The <parameter>syntax
+on</parameter> enables vim's syntax highlighting. Finally, the
+<emphasis>if</emphasis> statement with the <parameter>set
+background=dark</parameter> corrects <command>vim</command>'s guess
+about the background color of some terminal emulators. This gives the
+highlighting a better color scheme for use on the black background of
+these programs.</para>
+
+<para>Documentation for other available options can be obtained by
+running the following command:</para>
<screen><userinput>vim -c ':options'</userinput></screen>
</sect2>
-
<sect2 id="contents-vim" role="content"><title>Contents of Vim</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed programs</segtitle>
+<seglistitem><seg>efm_filter.pl, efm_perl.pl, ex (link to vim), less.sh, mve.awk,
+pltags.pl, ref, rview (link to vim), rvim (link to vim), shtags.pl, tcltags, vi (link to vim),
+view (link to vim), vim, vim132, vim2html.pl, vimdiff (link to vim), vimm, vimspell.sh,
+vimtutor, and xxd</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="efm_filter.pl">
+<term><command>efm_filter.pl</command></term>
+<listitem>
+<para>A filter for creating an error file that can be read by <command>vim</command></para>
+<indexterm zone="ch-system-vim efm_filter.pl"><primary sortas="b-efm_filter.pl">efm_filter.pl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="efm_perl.pl">
+<term><command>efm_perl.pl</command></term>
+<listitem>
+<para>Reformats the error messages of the
+Perl interpreter for use with the <quote>quickfix</quote> mode of <command>vim</command></para>
+<indexterm zone="ch-system-vim efm_perl.pl"><primary sortas="b-efm_perl.pl">efm_perl.pl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ex">
+<term><command>ex</command></term>
+<listitem>
+<para>Starts <command>vim</command> in ex mode</para>
+<indexterm zone="ch-system-vim ex"><primary sortas="b-ex">ex</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="less.sh">
+<term><command>less.sh</command></term>
+<listitem>
+<para>A script that starts <command>vim</command> with less.vim</para>
+<indexterm zone="ch-system-vim less.sh"><primary sortas="b-less.sh">less.sh</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="mve.awk">
+<term><command>mve.awk</command></term>
+<listitem>
+<para>Processes <command>vim</command> errors</para>
+<indexterm zone="ch-system-vim mve.awk"><primary sortas="b-mve.awk">mve.awk</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="pltags.pl">
+<term><command>pltags.pl</command></term>
+<listitem>
+<para>Creates a tags file for Perl code for use by <command>vim</command></para>
+<indexterm zone="ch-system-vim pltags.pl"><primary sortas="b-pltags.pl">pltags.pl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="ref">
+<term><command>ref</command></term>
+<listitem>
+<para>Checks the spelling of arguments</para>
+<indexterm zone="ch-system-vim ref"><primary sortas="b-ref">ref</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rview">
+<term><command>rview</command></term>
+<listitem>
+<para>Is a restricted version of <command>view</command>; no shell
+commands can be started and <command>view</command> cannot be suspended</para>
+<indexterm zone="ch-system-vim rview"><primary sortas="b-rview">rview</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="rvim">
+<term><command>rvim</command></term>
+<listitem>
+<para>Is a restricted version of <command>vim</command>; no shell
+commands can be started and <command>vim</command> cannot be suspended</para>
+<indexterm zone="ch-system-vim rvim"><primary sortas="b-rvim">rvim</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="shtags.pl">
+<term><command>shtags.pl</command></term>
+<listitem>
+<para>Generates a tag file for Perl scripts</para>
+<indexterm zone="ch-system-vim shtags.pl"><primary sortas="b-shtags.pl">shtags.pl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="tcltags">
+<term><command>tcltags</command></term>
+<listitem>
+<para>Generates a tag file for TCL code</para>
+<indexterm zone="ch-system-vim tcltags"><primary sortas="b-tcltags">tcltags</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="view">
+<term><command>view</command></term>
+<listitem>
+<para>Starts <command>vim</command> in read-only mode</para>
+<indexterm zone="ch-system-vim view"><primary sortas="b-view">view</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vi">
+<term><command>vi</command></term>
+<listitem>
+<para>Is the editor</para>
+<indexterm zone="ch-system-vim vi"><primary sortas="b-vi">vi</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vim">
+<term><command>vim</command></term>
+<listitem>
+<para>Is the editor</para>
+<indexterm zone="ch-system-vim vim"><primary sortas="b-vim">vim</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vim132">
+<term><command>vim132</command></term>
+<listitem>
+<para>Starts <command>vim</command> with the terminal in 132-column mode</para>
+<indexterm zone="ch-system-vim vim132"><primary sortas="b-vim132">vim132</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vim2html.pl">
+<term><command>vim2html.pl</command></term>
+<listitem>
+<para>Converts Vim documentation to HypterText Markup Language (HTML)</para>
+<indexterm zone="ch-system-vim vim2html.pl"><primary sortas="b-vim2html.pl">vim2html.pl</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vimdiff">
+<term><command>vimdiff</command></term>
+<listitem>
+<para>Edits two or three versions of a file with <command>vim</command> and show differences</para>
+<indexterm zone="ch-system-vim vimdiff"><primary sortas="b-vimdiff">vimdiff</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vimm">
+<term><command>vimm</command></term>
+<listitem>
+<para>Enables the DEC locator input model on a remote terminal</para>
+<indexterm zone="ch-system-vim vimm"><primary sortas="b-vimm">vimm</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vimspell.sh">
+<term><command>vimspell.sh</command></term>
+<listitem>
+<para>Spells a file and generates the syntax statements necessary
+to highlight in <command>vim</command>. This script requires the old Unix <command>spell</command>
+command, which is provided neither in LFS nor in BLFS</para>
+<indexterm zone="ch-system-vim vimspell.sh"><primary sortas="b-vimspell.sh">vimspell.sh</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="vimtutor">
+<term><command>vimtutor</command></term>
+<listitem>
+<para>Teaches the basic keys and commands of <command>vim</command></para>
+<indexterm zone="ch-system-vim vimtutor"><primary sortas="b-vimtutor">vimtutor</primary></indexterm>
+</listitem>
+</varlistentry>
+
+<varlistentry id="xxd">
+<term><command>xxd</command></term>
+<listitem>
+<para>Creates a hex dump of the given file; it can
+also do the reverse, so it can be used for binary patching</para>
+<indexterm zone="ch-system-vim xxd"><primary sortas="b-xxd">xxd</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+
diff --git a/chapter06/zlib.xml b/chapter06/zlib.xml
index 606751c8d..77c731ba9 100644
--- a/chapter06/zlib.xml
+++ b/chapter06/zlib.xml
@@ -3,13 +3,15 @@
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
-<sect1 id="ch-system-zlib" xreflabel="Zlib" role="wrap">
+<sect1 id="ch-system-zlib" role="wrap">
<title>Zlib-&zlib-version;</title>
<?dbhtml filename="zlib.html"?>
<indexterm zone="ch-system-zlib"><primary sortas="a-Zlib">Zlib</primary></indexterm>
<sect2 role="package"><title/>
+<para>The Zlib package contains compression and un-compression routines used by
+some programs.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
@@ -17,12 +19,22 @@
<seglistitem><seg>0.1 SBU</seg><seg>1.5 MB</seg></seglistitem>
</segmentedlist>
+<segmentedlist>
+<segtitle>Zlib installation depends on</segtitle>
+<seglistitem><seg>Binutils, Coreutils, GCC, Glibc, Make, and Sed</seg></seglistitem>
+</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Zlib</title>
-<!-- NEW set of commands-->
+<note><para>Zlib is known to build its shared library incorrectly if
+<envar>CFLAGS</envar> is specified in the environment. If using a
+specified <envar>CFLAGS</envar>
+variable, be sure to add the <parameter>-fPIC</parameter> directive to
+the <envar>CFLAGS</envar> variable for the duration of the
+configure command below, then remove it afterwards.</para></note>
+
<para>Prepare Zlib for compilation:</para>
<screen><userinput>./configure --prefix=/usr --shared --libdir=/lib</userinput></screen>
@@ -38,25 +50,27 @@
<screen><userinput>make install</userinput></screen>
-<para>Now we will remove the old, .so files in /lib and relink them into /usr/lib.</para>
+<para>Next we will remove the old, <filename>.so</filename> files in
+the <filename class="directory">/lib</filename> directory and relink them
+into <filename class="directory">/usr/lib</filename>.</para>
<screen><userinput>rm /lib/libz.so
ln -sf ../../lib/libz.so.&zlib-version; /usr/lib/libz.so</userinput></screen>
-<para>Now also build the non-shared (static) library:</para>
+<para>Build the static library:</para>
<screen><userinput>make clean
./configure --prefix=/usr
make</userinput></screen>
-<para>To again test the results, issue:
+<para>To test the results again, issue:
<userinput>make check</userinput>.</para>
<para>Install the static library:</para>
<screen><userinput>make install</userinput></screen>
-<para>And fix the permissions on the static library:</para>
+<para>Fix the permissions on the static library:</para>
<screen><userinput>chmod 644 /usr/lib/libz.a</userinput></screen>
@@ -65,8 +79,25 @@ make</userinput></screen>
<sect2 id="contents-zlib" role="content"><title>Contents of Zlib</title>
-<para>See testing</para>
+<segmentedlist>
+<segtitle>Installed libraries</segtitle>
+<seglistitem><seg>libz[a,so]</seg></seglistitem>
+</segmentedlist>
+
+<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
+<?dbfo list-presentation="list"?>
+
+<varlistentry id="libz">
+<term><filename class="libraryfile">libz</filename></term>
+<listitem>
+<para>Contains compression and un-compression
+functions used by some programs</para>
+<indexterm zone="ch-system-zlib libz"><primary sortas="c-libz">libz</primary></indexterm>
+</listitem>
+</varlistentry>
+</variablelist>
</sect2>
</sect1>
+