diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | chapter05/binutils-pass1.xml | 2 | ||||
-rw-r--r-- | chapter05/chapter05.xml | 38 | ||||
-rw-r--r-- | chapter05/gcc-pass1.xml | 2 | ||||
-rw-r--r-- | chapter05/glibc.xml | 2 | ||||
-rw-r--r-- | chapter06/bash.xml | 137 | ||||
-rw-r--r-- | chapter06/binutils-pass1.xml | 156 | ||||
-rw-r--r-- | chapter06/binutils-pass2.xml | 94 | ||||
-rw-r--r-- | chapter06/bison.xml | 110 | ||||
-rw-r--r-- | chapter06/bzip2.xml | 202 | ||||
-rw-r--r-- | chapter06/changingowner.xml | 41 | ||||
-rw-r--r-- | chapter06/chapter06.xml | 93 | ||||
-rw-r--r-- | chapter06/chroot.xml | 65 | ||||
-rw-r--r-- | chapter06/coreutils.xml | 1264 | ||||
-rw-r--r-- | chapter06/createfiles.xml | 204 | ||||
-rw-r--r-- | chapter06/creatingdirs.xml | 59 | ||||
-rw-r--r-- | chapter06/dejagnu.xml | 96 | ||||
-rw-r--r-- | chapter06/diffutils.xml | 85 | ||||
-rw-r--r-- | chapter06/expect.xml | 139 | ||||
-rw-r--r-- | chapter06/file.xml | 75 | ||||
-rw-r--r-- | chapter06/findutils.xml | 124 | ||||
-rw-r--r-- | chapter06/flex.xml | 127 | ||||
-rw-r--r-- | chapter06/gawk.xml | 86 | ||||
-rw-r--r-- | chapter06/gcc-pass1.xml | 208 | ||||
-rw-r--r-- | chapter06/gcc-pass2.xml | 160 | ||||
-rw-r--r-- | chapter06/generalinstructions.xml | 120 | ||||
-rw-r--r-- | chapter06/gettext.xml | 410 | ||||
-rw-r--r-- | chapter06/glibc.xml | 980 | ||||
-rw-r--r-- | chapter06/grep.xml | 73 | ||||
-rw-r--r-- | chapter06/grub.xml | 374 | ||||
-rw-r--r-- | chapter06/gzip.xml | 196 | ||||
-rw-r--r-- | chapter06/introduction.xml | 79 | ||||
-rw-r--r-- | chapter06/kernfs.xml | 115 | ||||
-rw-r--r-- | chapter06/libstdc++-pass2.xml | 114 | ||||
-rw-r--r-- | chapter06/libstdc++.xml | 122 | ||||
-rw-r--r-- | chapter06/linux-headers.xml | 207 | ||||
-rw-r--r-- | chapter06/m4.xml | 64 | ||||
-rw-r--r-- | chapter06/make.xml | 76 | ||||
-rw-r--r-- | chapter06/ncurses.xml | 339 | ||||
-rw-r--r-- | chapter06/patch.xml | 58 | ||||
-rw-r--r-- | chapter06/perl.xml | 485 | ||||
-rw-r--r-- | chapter06/python.xml | 233 | ||||
-rw-r--r-- | chapter06/sed.xml | 67 | ||||
-rw-r--r-- | chapter06/stripping.xml | 53 | ||||
-rw-r--r-- | chapter06/tar.xml | 77 | ||||
-rw-r--r-- | chapter06/tcl.xml | 191 | ||||
-rw-r--r-- | chapter06/texinfo.xml | 201 | ||||
-rw-r--r-- | chapter06/toolchaintechnotes.xml | 335 | ||||
-rw-r--r-- | chapter06/util-linux.xml | 1278 | ||||
-rw-r--r-- | chapter06/xz.xml | 335 | ||||
-rw-r--r-- | chapter07/bash.xml | 96 | ||||
-rw-r--r-- | chapter07/binutils-pass1.xml | 156 | ||||
-rw-r--r-- | chapter07/binutils-pass2.xml | 94 | ||||
-rw-r--r-- | chapter07/bison.xml | 82 | ||||
-rw-r--r-- | chapter07/bzip2.xml | 112 | ||||
-rw-r--r-- | chapter07/changingowner.xml | 41 | ||||
-rw-r--r-- | chapter07/chapter07.xml | 48 | ||||
-rw-r--r-- | chapter07/chroot.xml | 65 | ||||
-rw-r--r-- | chapter07/coreutils.xml | 105 | ||||
-rw-r--r-- | chapter07/createfiles.xml | 204 | ||||
-rw-r--r-- | chapter07/creatingdirs.xml | 59 | ||||
-rw-r--r-- | chapter07/dejagnu.xml | 96 | ||||
-rw-r--r-- | chapter07/diffutils.xml | 68 | ||||
-rw-r--r-- | chapter07/expect.xml | 139 | ||||
-rw-r--r-- | chapter07/file.xml | 73 | ||||
-rw-r--r-- | chapter07/findutils.xml | 75 | ||||
-rw-r--r-- | chapter07/flex.xml | 88 | ||||
-rw-r--r-- | chapter07/gawk.xml | 74 | ||||
-rw-r--r-- | chapter07/gcc-pass1.xml | 208 | ||||
-rw-r--r-- | chapter07/gcc-pass2.xml | 160 | ||||
-rw-r--r-- | chapter07/generalinstructions.xml | 120 | ||||
-rw-r--r-- | chapter07/gettext.xml | 85 | ||||
-rw-r--r-- | chapter07/glibc.xml | 230 | ||||
-rw-r--r-- | chapter07/grep.xml | 70 | ||||
-rw-r--r-- | chapter07/gzip.xml | 72 | ||||
-rw-r--r-- | chapter07/introduction.xml | 224 | ||||
-rw-r--r-- | chapter07/kernfs.xml | 115 | ||||
-rw-r--r-- | chapter07/libstdc++-pass2.xml | 114 | ||||
-rw-r--r-- | chapter07/libstdc++.xml | 122 | ||||
-rw-r--r-- | chapter07/linux-headers.xml | 207 | ||||
-rw-r--r-- | chapter07/m4.xml | 74 | ||||
-rw-r--r-- | chapter07/make.xml | 83 | ||||
-rw-r--r-- | chapter07/ncurses.xml | 157 | ||||
-rw-r--r-- | chapter07/patch.xml | 70 | ||||
-rw-r--r-- | chapter07/perl.xml | 79 | ||||
-rw-r--r-- | chapter07/python.xml | 88 | ||||
-rw-r--r-- | chapter07/sed.xml | 70 | ||||
-rw-r--r-- | chapter07/stripping.xml | 53 | ||||
-rw-r--r-- | chapter07/tar.xml | 71 | ||||
-rw-r--r-- | chapter07/tcl.xml | 191 | ||||
-rw-r--r-- | chapter07/texinfo.xml | 74 | ||||
-rw-r--r-- | chapter07/toolchaintechnotes.xml | 335 | ||||
-rw-r--r-- | chapter07/util-linux.xml | 113 | ||||
-rw-r--r-- | chapter07/xz.xml | 77 | ||||
-rw-r--r-- | chapter08/aboutdebug.xml (renamed from chapter06/aboutdebug.xml) | 0 | ||||
-rw-r--r-- | chapter08/acl.xml (renamed from chapter06/acl.xml) | 0 | ||||
-rw-r--r-- | chapter08/adjusting.xml (renamed from chapter06/adjusting.xml) | 0 | ||||
-rw-r--r-- | chapter08/attr.xml (renamed from chapter06/attr.xml) | 0 | ||||
-rw-r--r-- | chapter08/autoconf.xml (renamed from chapter06/autoconf.xml) | 0 | ||||
-rw-r--r-- | chapter08/automake.xml (renamed from chapter06/automake.xml) | 0 | ||||
-rw-r--r-- | chapter08/bash.xml | 173 | ||||
-rw-r--r-- | chapter08/bc.xml (renamed from chapter06/bc.xml) | 0 | ||||
-rw-r--r-- | chapter08/binutils.xml (renamed from chapter06/binutils.xml) | 0 | ||||
-rw-r--r-- | chapter08/bison.xml | 142 | ||||
-rw-r--r-- | chapter08/bzip2.xml | 250 | ||||
-rw-r--r-- | chapter08/chapter08.xml | 92 | ||||
-rw-r--r-- | chapter08/check.xml (renamed from chapter06/check.xml) | 0 | ||||
-rw-r--r-- | chapter08/coreutils.xml | 1287 | ||||
-rw-r--r-- | chapter08/dbus.xml (renamed from chapter06/dbus.xml) | 0 | ||||
-rw-r--r-- | chapter08/diffutils.xml | 125 | ||||
-rw-r--r-- | chapter08/e2fsprogs.xml (renamed from chapter06/e2fsprogs.xml) | 0 | ||||
-rw-r--r-- | chapter08/eudev.xml (renamed from chapter06/eudev.xml) | 0 | ||||
-rw-r--r-- | chapter08/expat.xml (renamed from chapter06/expat.xml) | 0 | ||||
-rw-r--r-- | chapter08/file.xml | 108 | ||||
-rw-r--r-- | chapter08/findutils.xml | 161 | ||||
-rw-r--r-- | chapter08/flex.xml | 149 | ||||
-rw-r--r-- | chapter08/gawk.xml | 128 | ||||
-rw-r--r-- | chapter08/gcc.xml (renamed from chapter06/gcc.xml) | 0 | ||||
-rw-r--r-- | chapter08/gdbm.xml (renamed from chapter06/gdbm.xml) | 0 | ||||
-rw-r--r-- | chapter08/gettext.xml | 445 | ||||
-rw-r--r-- | chapter08/glibc.xml | 970 | ||||
-rw-r--r-- | chapter08/gmp.xml (renamed from chapter06/gmp.xml) | 0 | ||||
-rw-r--r-- | chapter08/gperf.xml (renamed from chapter06/gperf.xml) | 0 | ||||
-rw-r--r-- | chapter08/grep.xml | 111 | ||||
-rw-r--r-- | chapter08/groff.xml (renamed from chapter06/groff.xml) | 0 | ||||
-rw-r--r-- | chapter08/grub.xml | 495 | ||||
-rw-r--r-- | chapter08/gzip.xml | 236 | ||||
-rw-r--r-- | chapter08/iana-etc.xml (renamed from chapter06/iana-etc.xml) | 0 | ||||
-rw-r--r-- | chapter08/inetutils.xml (renamed from chapter06/inetutils.xml) | 0 | ||||
-rw-r--r-- | chapter08/intltool.xml (renamed from chapter06/intltool.xml) | 0 | ||||
-rw-r--r-- | chapter08/introduction.xml | 66 | ||||
-rw-r--r-- | chapter08/iproute2.xml (renamed from chapter06/iproute2.xml) | 0 | ||||
-rw-r--r-- | chapter08/kbd.xml (renamed from chapter06/kbd.xml) | 0 | ||||
-rw-r--r-- | chapter08/kmod.xml (renamed from chapter06/kmod.xml) | 0 | ||||
-rw-r--r-- | chapter08/less.xml (renamed from chapter06/less.xml) | 0 | ||||
-rw-r--r-- | chapter08/libcap.xml (renamed from chapter06/libcap.xml) | 0 | ||||
-rw-r--r-- | chapter08/libelf.xml (renamed from chapter06/libelf.xml) | 0 | ||||
-rw-r--r-- | chapter08/libffi.xml (renamed from chapter06/libffi.xml) | 0 | ||||
-rw-r--r-- | chapter08/libpipeline.xml (renamed from chapter06/libpipeline.xml) | 0 | ||||
-rw-r--r-- | chapter08/libtool.xml (renamed from chapter06/libtool.xml) | 0 | ||||
-rw-r--r-- | chapter08/m4.xml | 104 | ||||
-rw-r--r-- | chapter08/make.xml | 99 | ||||
-rw-r--r-- | chapter08/man-db.xml (renamed from chapter06/man-db.xml) | 0 | ||||
-rw-r--r-- | chapter08/man-pages.xml (renamed from chapter06/man-pages.xml) | 0 | ||||
-rw-r--r-- | chapter08/meson.xml (renamed from chapter06/meson.xml) | 0 | ||||
-rw-r--r-- | chapter08/mpc.xml (renamed from chapter06/mpc.xml) | 0 | ||||
-rw-r--r-- | chapter08/mpfr.xml (renamed from chapter06/mpfr.xml) | 0 | ||||
-rw-r--r-- | chapter08/ncurses.xml | 380 | ||||
-rw-r--r-- | chapter08/ninja.xml (renamed from chapter06/ninja.xml) | 0 | ||||
-rw-r--r-- | chapter08/openssl.xml (renamed from chapter06/openssl.xml) | 0 | ||||
-rw-r--r-- | chapter08/patch.xml | 96 | ||||
-rw-r--r-- | chapter08/perl.xml | 522 | ||||
-rw-r--r-- | chapter08/pkgconfig.xml (renamed from chapter06/pkgconfig.xml) | 0 | ||||
-rw-r--r-- | chapter08/pkgmgt.xml (renamed from chapter06/pkgmgt.xml) | 0 | ||||
-rw-r--r-- | chapter08/procps.xml (renamed from chapter06/procps.xml) | 0 | ||||
-rw-r--r-- | chapter08/psmisc.xml (renamed from chapter06/psmisc.xml) | 0 | ||||
-rw-r--r-- | chapter08/python.xml | 253 | ||||
-rw-r--r-- | chapter08/readline.xml (renamed from chapter06/readline.xml) | 0 | ||||
-rw-r--r-- | chapter08/revisedchroot.xml (renamed from chapter06/revisedchroot.xml) | 0 | ||||
-rw-r--r-- | chapter08/sed.xml | 97 | ||||
-rw-r--r-- | chapter08/shadow.xml (renamed from chapter06/shadow.xml) | 0 | ||||
-rw-r--r-- | chapter08/strippingagain.xml (renamed from chapter06/strippingagain.xml) | 0 | ||||
-rw-r--r-- | chapter08/sysklogd.xml (renamed from chapter06/sysklogd.xml) | 0 | ||||
-rw-r--r-- | chapter08/systemd.xml (renamed from chapter06/systemd.xml) | 0 | ||||
-rw-r--r-- | chapter08/sysvinit.xml (renamed from chapter06/sysvinit.xml) | 0 | ||||
-rw-r--r-- | chapter08/tar.xml | 116 | ||||
-rw-r--r-- | chapter08/texinfo.xml | 237 | ||||
-rw-r--r-- | chapter08/util-linux.xml | 1319 | ||||
-rw-r--r-- | chapter08/vim.xml (renamed from chapter06/vim.xml) | 0 | ||||
-rw-r--r-- | chapter08/xml-parser.xml (renamed from chapter06/xml-parser.xml) | 0 | ||||
-rw-r--r-- | chapter08/xz.xml | 364 | ||||
-rw-r--r-- | chapter08/zlib.xml (renamed from chapter06/zlib.xml) | 0 | ||||
-rw-r--r-- | chapter08/zstd.xml (renamed from chapter06/zstd.xml) | 0 | ||||
-rw-r--r-- | chapter09/bootscripts.xml (renamed from chapter07/bootscripts.xml) | 0 | ||||
-rw-r--r-- | chapter09/chapter09.xml | 36 | ||||
-rw-r--r-- | chapter09/clock.xml (renamed from chapter07/clock.xml) | 0 | ||||
-rw-r--r-- | chapter09/consoled.xml (renamed from chapter07/consoled.xml) | 0 | ||||
-rw-r--r-- | chapter09/etcshells.xml (renamed from chapter07/etcshells.xml) | 0 | ||||
-rw-r--r-- | chapter09/inputrc.xml (renamed from chapter07/inputrc.xml) | 0 | ||||
-rw-r--r-- | chapter09/introduction.xml | 225 | ||||
-rw-r--r-- | chapter09/introductiond.xml (renamed from chapter07/introductiond.xml) | 0 | ||||
-rw-r--r-- | chapter09/locale.xml (renamed from chapter07/locale.xml) | 0 | ||||
-rw-r--r-- | chapter09/network.xml (renamed from chapter07/network.xml) | 0 | ||||
-rw-r--r-- | chapter09/networkd.xml (renamed from chapter07/networkd.xml) | 0 | ||||
-rw-r--r-- | chapter09/profile.xml (renamed from chapter07/profile.xml) | 0 | ||||
-rw-r--r-- | chapter09/symlinks.xml (renamed from chapter07/symlinks.xml) | 0 | ||||
-rw-r--r-- | chapter09/systemd-custom.xml (renamed from chapter07/systemd-custom.xml) | 0 | ||||
-rw-r--r-- | chapter09/udev.xml (renamed from chapter07/udev.xml) | 0 | ||||
-rw-r--r-- | chapter09/usage.xml (renamed from chapter07/usage.xml) | 0 | ||||
-rw-r--r-- | chapter10/chapter10.xml | 19 | ||||
-rw-r--r-- | chapter10/fstab.xml (renamed from chapter08/fstab.xml) | 0 | ||||
-rw-r--r-- | chapter10/grub.xml | 191 | ||||
-rw-r--r-- | chapter10/introduction.xml | 18 | ||||
-rw-r--r-- | chapter10/kernel.xml (renamed from chapter08/kernel.xml) | 0 | ||||
-rw-r--r-- | chapter11/chapter11.xml | 19 | ||||
-rw-r--r-- | chapter11/getcounted.xml (renamed from chapter09/getcounted.xml) | 0 | ||||
-rw-r--r-- | chapter11/reboot.xml (renamed from chapter09/reboot.xml) | 0 | ||||
-rw-r--r-- | chapter11/theend.xml (renamed from chapter09/theend.xml) | 0 | ||||
-rw-r--r-- | chapter11/whatnow.xml (renamed from chapter09/whatnow.xml) | 0 | ||||
-rw-r--r-- | general.ent | 6 | ||||
-rw-r--r-- | index.xml | 13 |
201 files changed, 16783 insertions, 7361 deletions
@@ -23,10 +23,10 @@ ifneq ($(REV), sysv) endif ifeq ($(REV), sysv) - BASEDIR ?= ~/lfs-book + BASEDIR ?= ~/cross2-lfs-book PDF_OUTPUT ?= LFS-BOOK.pdf NOCHUNKS_OUTPUT ?= LFS-BOOK.html - DUMPDIR ?= ~/lfs-commands + DUMPDIR ?= ~/cross-lfs-commands else BASEDIR ?= ~/lfs-systemd PDF_OUTPUT ?= LFS-SYSD-BOOK.pdf diff --git a/chapter05/binutils-pass1.xml b/chapter05/binutils-pass1.xml index 8658cfcfe..e91c64a62 100644 --- a/chapter05/binutils-pass1.xml +++ b/chapter05/binutils-pass1.xml @@ -25,7 +25,7 @@ <title/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" - href="../chapter06/binutils.xml" + href="../chapter08/binutils.xml" xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> diff --git a/chapter05/chapter05.xml b/chapter05/chapter05.xml index ddd652709..8a05daca5 100644 --- a/chapter05/chapter05.xml +++ b/chapter05/chapter05.xml @@ -5,11 +5,11 @@ %general-entities; ]> -<chapter id="chapter-temporary-tools" xreflabel="Chapter 5"> +<chapter id="chapter-cross-tools" xreflabel="Chapter 5"> <?dbhtml dir="chapter05"?> <?dbhtml filename="chapter05.html"?> - <title>Constructing a Temporary System</title> + <title>Cross Compiling a Toolchain</title> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introduction.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="toolchaintechnotes.xml"/> @@ -19,39 +19,5 @@ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="linux-headers.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="glibc.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libstdc++.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="m4.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ncurses.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bash.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="coreutils.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="diffutils.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="file.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="findutils.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gawk.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grep.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gzip.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="make.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="patch.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sed.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="tar.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="xz.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="binutils-pass2.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gcc-pass2.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="stripping.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="changingowner.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kernfs.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chroot.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="creatingdirs.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="createfiles.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libstdc++-pass2.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bison.xml"/> -<!-- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="flex.xml"/>--> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gettext.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="perl.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="python.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="texinfo.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="util-linux.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="tcl.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="expect.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dejagnu.xml"/> </chapter> diff --git a/chapter05/gcc-pass1.xml b/chapter05/gcc-pass1.xml index 1bd308f09..7db6408c2 100644 --- a/chapter05/gcc-pass1.xml +++ b/chapter05/gcc-pass1.xml @@ -25,7 +25,7 @@ <title/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" - href="../chapter06/gcc.xml" + href="../chapter08/gcc.xml" xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> diff --git a/chapter05/glibc.xml b/chapter05/glibc.xml index 5213c23e5..39aabd12c 100644 --- a/chapter05/glibc.xml +++ b/chapter05/glibc.xml @@ -25,7 +25,7 @@ <title/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" - href="../chapter06/glibc.xml" + href="../chapter08/glibc.xml" xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> diff --git a/chapter06/bash.xml b/chapter06/bash.xml index 650c33ade..92627e92c 100644 --- a/chapter06/bash.xml +++ b/chapter06/bash.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-bash" role="wrap"> +<sect1 id="ch-tools-bash" role="wrap"> <?dbhtml filename="bash.html"?> <sect1info condition="script"> @@ -16,22 +16,25 @@ <title>Bash-&bash-version;</title> - <indexterm zone="ch-system-bash"> + <indexterm zone="ch-tools-bash"> <primary sortas="a-Bash">Bash</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Bash package contains the Bourne-Again SHell.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/bash.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&bash-ch6-sbu;</seg> - <seg>&bash-ch6-du;</seg> + <seg>&bash-ch5-sbu;</seg> + <seg>&bash-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -40,27 +43,24 @@ <sect2 role="installation"> <title>Installation of Bash</title> - <para>Incorporate some upstream fixes:</para> - -<screen><userinput remap="pre">patch -Np1 -i ../&bash-fixes-patch;</userinput></screen> - <para>Prepare Bash for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr \ - --docdir=/usr/share/doc/bash-&bash-version; \ - --without-bash-malloc \ - --with-installed-readline</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --build=$(support/config.guess) \ + --host=$LFS_TGT \ + --without-bash-malloc</userinput></screen> <variablelist> - <title>The meaning of the new configure option:</title> + <title>The meaning of the configure options:</title> <varlistentry> - <term><parameter>--with-installed-readline</parameter></term> + <term><parameter>--without-bash-malloc</parameter></term> <listitem> - <para>This option 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> + <para>This option turns off the use of Bash's memory allocation + (<function>malloc</function>) function which is known to cause + segmentation faults. By turning this option off, Bash will use + the <function>malloc</function> functions from Glibc which are + more stable.</para> </listitem> </varlistentry> @@ -70,103 +70,26 @@ <screen><userinput remap="make">make</userinput></screen> - <para>Skip down to <quote>Install the - package</quote> if not running the test suite.</para> - - <para>To prepare the tests, ensure that the <systemitem class="username">tester</systemitem> user can write to the sources tree:</para> - -<screen><userinput remap="test">chown -Rv tester .</userinput></screen> + <para>Install the package:</para> - <para>Now, run the tests as the <systemitem - class="username">tester</systemitem> user:</para> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> -<screen><userinput remap="test">su tester << EOF -PATH=$PATH make tests < $(tty) -EOF</userinput></screen> -<!-- - <para>The <systemitem class="username">tester</systemitem> - user does not have enough permissions for all the tests to pass. This shows - up in some <quote>diff</quote> output in four test results. Portions of the - run-execscript, run-lastpipe, run-read, and run-test programs - are known to fail in the LFS chroot environment, but pass if the tests - are run in a full system.</para> ---> - <para>Install the package and move the main executable to - <filename class='directory'>/bin</filename>:</para> + <para>Move the excutable to where it is expected to be:</para> -<screen><userinput remap="install">make install -mv -vf /usr/bin/bash /bin</userinput></screen> +<screen><userinput remap="install">mv $LFS/usr/bin/bash $LFS/bin/bash</userinput></screen> - <para>Run the newly compiled <command>bash</command> program (replacing the one that is - currently being executed):</para> + <para>Make a link for the programs that use <command>sh</command> for + a shell:</para> -<screen role="nodump"><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> +<screen><userinput remap="install">ln -sv bash $LFS/bin/sh</userinput></screen> </sect2> - <sect2 id="contents-bash" role="content"> - <title>Contents of Bash</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed directory</segtitle> - - <seglistitem> - <seg>bash, bashbug, and sh (link to bash)</seg> - <seg>/usr/include/bash, /usr/lib/bash, and - /usr/share/doc/bash-&bash-version;</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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 standard - formatted bug reports concerning <command>bash</command></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> + <sect2 role="content"> + <title/> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-bash" role="."/></para> </sect2> diff --git a/chapter06/binutils-pass1.xml b/chapter06/binutils-pass1.xml new file mode 100644 index 000000000..8658cfcfe --- /dev/null +++ b/chapter06/binutils-pass1.xml @@ -0,0 +1,156 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-binutils-pass1" role="wrap"> + <?dbhtml filename="binutils-pass1.html"?> + + <sect1info condition="script"> + <productname>binutils-pass1</productname> + <productnumber>&binutils-version;</productnumber> + <address>&binutils-url;</address> + </sect1info> + + <title>Binutils-&binutils-version; - Pass 1</title> + + <indexterm zone="ch-tools-binutils-pass1"> + <primary sortas="a-Binutils">Binutils</primary> + <secondary>tools, pass 1</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/binutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&binutils-ch5p1-sbu;</seg> + <seg>&binutils-ch5p1-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Cross Binutils</title> + + <note><para>Go back and re-read the notes in the previous section. + Understanding the notes labeled important will save you a lot + of problems later.</para></note> + + <para>It is important that Binutils be the first package compiled + because both Glibc and GCC perform various tests on the available + linker and assembler to determine which of their own features to + enable.</para> + + <para>The Binutils documentation recommends building Binutils + in a dedicated build directory:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <note> + <para>In order for the SBU values listed in the rest of the book + to be of any use, measure the time it takes to build this package from + the configuration, up to and including the first install. To achieve + this easily, wrap the commands in a <command>time</command> + command like this: <userinput>time { ./configure ... && ... + && make install; }</userinput>.</para> + </note> +<!-- + <note><para>The approximate build SBU values and required disk space + in Chapter 5 does not include test suite data.</para></note> +--> + <para>Now prepare Binutils for compilation:</para> + +<screen><userinput remap="configure">../configure --prefix=$LFS/tools \ + --with-sysroot=$LFS \ + --target=$LFS_TGT \ + --disable-nls \ + --disable-werror</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--prefix=$LFS/tools</parameter></term> + <listitem> + <para>This tells the configure script to prepare to install the + Binutils programs in the <filename + class="directory">$LFS/tools</filename> directory.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-sysroot=$LFS</parameter></term> + <listitem> + <para>For cross compilation, this tells the build system to look in + $LFS for the target system libraries as needed.</para> + </listitem> + </varlistentry> + <!-- + <varlistentry> + <term><parameter>- -with-lib-path=/tools/lib</parameter></term> + <listitem> + <para>This specifies which library path the linker should be + configured to use.</para> + </listitem> + </varlistentry> + --> + <varlistentry> + <term><envar>--target=$LFS_TGT</envar></term> + <listitem> + <para>Because the machine description in the <envar>LFS_TGT</envar> + variable is slightly different than the value returned by the + <command>config.guess</command> script, this switch will tell the + <command>configure</command> script to adjust Binutil's build system + for building a cross linker. </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-nls</parameter></term> + <listitem> + <para>This disables internationalization as i18n is not needed for the + temporary tools.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-werror</parameter></term> + <listitem> + <para>This prevents the build from stopping in the event that there + are warnings from the host's compiler.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Continue with compiling the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-binutils" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter06/binutils-pass2.xml b/chapter06/binutils-pass2.xml new file mode 100644 index 000000000..d88bb84e2 --- /dev/null +++ b/chapter06/binutils-pass2.xml @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-binutils-pass2" role="wrap"> + <?dbhtml filename="binutils-pass2.html"?> + + <sect1info condition="script"> + <productname>binutils-pass2</productname> + <productnumber>&binutils-version;</productnumber> + <address>&binutils-url;</address> + </sect1info> + + <title>Binutils-&binutils-version; - Pass 2</title> + + <indexterm zone="ch-tools-binutils-pass2"> + <primary sortas="a-Binutils">Binutils</primary> + <secondary>tools, pass 2</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/binutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&binutils-ch5p2-sbu;</seg> + <seg>&binutils-ch5p2-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Binutils</title> + + <para>Create a separate build directory again:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare Binutils for compilation:</para> + +<screen><userinput remap="configure">../configure \ + --prefix=/usr \ + --build=$(../config.guess) \ + --host=$LFS_TGT \ + --disable-nls \ + --enable-shared \ + --disable-werror</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title> + + <varlistentry> + <term><parameter>--host=$LFS_TGT</parameter></term> + <listitem> + <para>This tells the configure script that we want to build + this pass of binutils for the $LFS_TGT machine, using our just + built cross-compiler. This prevents the linker from searching + through library directories on the host.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-binutils" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter06/bison.xml b/chapter06/bison.xml index 23b6f0a95..afe84a403 100644 --- a/chapter06/bison.xml +++ b/chapter06/bison.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-bison" role="wrap"> +<sect1 id="ch-tools-bison" role="wrap"> <?dbhtml filename="bison.html"?> <sect1info condition="script"> @@ -16,22 +16,25 @@ <title>Bison-&bison-version;</title> - <indexterm zone="ch-system-bison"> + <indexterm zone="ch-tools-bison"> <primary sortas="a-Bison">Bison</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Bison package contains a parser generator.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/bison.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&bison-ch6-sbu;</seg> - <seg>&bison-ch6-du;</seg> + <seg>&bison-ch5-sbu;</seg> + <seg>&bison-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -39,103 +42,40 @@ <sect2 role="installation"> <title>Installation of Bison</title> -<!-- - <para>First, fix a build problem with the current version:</para> -<screen><userinput remap="pre">sed -i '9327 s/mv/cp/' Makefile.in</userinput></screen> ---> <para>Prepare Bison for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr --docdir=/usr/share/doc/bison-&bison-version;</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --docdir=/usr/share/doc/bison-&bison-version;</userinput></screen> -<!-- I could not find a race condidtion in the current version. - <para>Compile the package, but work around a race condition in the - current version:</para> + <variablelist> + <title>The meaning of the new configure option:</title> + + <varlistentry> + <term><parameter>--docdir=/usr/share/doc/bison-&bison-version;</parameter></term> + <listitem> + <para>This tells the build system to install bison documentation + into a versioned directory.</para> + </listitem> + </varlistentry> -<screen><userinput remap="make">make -j1</userinput></screen>--> + </variablelist> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results (about 5.5 SBU), issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - - <para>Fourteen tests fail in the "Diagnostics" section, probably because of - missing locales.</para> - -<!-- - <para>There is a circular dependency between bison and flex with regard to - the checks. If desired, after installing flex in the next section, the - bison package can be rebuilt and the bison checks can be run with - <command>make check</command>.</para> ---> - <para>Install the package:</para> <screen><userinput remap="install">make install</userinput></screen> </sect2> - <sect2 id="contents-bison" role="content"> - <title>Contents of Bison</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed library</segtitle> - <segtitle>Installed directory</segtitle> - - <seglistitem> - <seg>bison and yacc</seg> - <seg>liby.a</seg> - <seg>/usr/share/bison</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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; Bison is a replacement for Yacc (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"> - <term><filename class="libraryfile">liby</filename></term> - <listitem> - <para>The Yacc library containing implementations of Yacc-compatible - <function>yyerror</function> and <function>main</function> functions; - this library is normally not very useful, but POSIX requires it</para> - <indexterm zone="ch-system-bison liby"> - <primary sortas="c-liby">liby</primary> - </indexterm> - </listitem> - </varlistentry> + <sect2 role="content"> + <title/> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-bison" role="."/></para> </sect2> diff --git a/chapter06/bzip2.xml b/chapter06/bzip2.xml index edf2f5bd4..828b7fc0f 100644 --- a/chapter06/bzip2.xml +++ b/chapter06/bzip2.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-bzip2" role="wrap"> +<sect1 id="ch-tools-bzip2" role="wrap"> <?dbhtml filename="bzip2.html"?> <sect1info condition="script"> @@ -16,25 +16,25 @@ <title>Bzip2-&bzip2-version;</title> - <indexterm zone="ch-system-bzip2"> + <indexterm zone="ch-tools-bzip2"> <primary sortas="a-Bzip2">Bzip2</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Bzip2 package contains programs for compressing and decompressing - files. Compressing text files with <command>bzip2</command> yields a much - better compression percentage than with the traditional - <command>gzip</command>.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/bzip2.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&bzip2-ch6-sbu;</seg> - <seg>&bzip2-ch6-du;</seg> + <seg>&bzip2-ch5-sbu;</seg> + <seg>&bzip2-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -43,11 +43,13 @@ <sect2 role="installation"> <title>Installation of Bzip2</title> - <para>Apply a patch that will install the documentation for this package:</para> + <para>Apply a patch that will install the documentation for this + package:</para> <screen><userinput remap="pre">patch -Np1 -i ../&bzip2-docs-patch;</userinput></screen> - <para>The following command ensures installation of symbolic links are relative:</para> + <para>The following command ensures installation of symbolic links are + relative:</para> <screen><userinput remap="pre">sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile</userinput></screen> @@ -55,9 +57,12 @@ <screen><userinput remap="pre">sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile</userinput></screen> - <para>Prepare Bzip2 for compilation with:</para> + <para>The Bzip2 package does not contain a <command>configure</command> + script. There are two <filename>Makefile</filename>, one for the shared + library, and the other for the static library. Since we need both, We + do the compilation in two stages. First the shared library:</para> -<screen><userinput remap="make">make -f Makefile-libbz2_so +<screen><userinput remap="make">make CC=$LFS_TGT-gcc -f Makefile-libbz2_so make clean</userinput></screen> <variablelist> @@ -76,174 +81,31 @@ make clean</userinput></screen> </variablelist> - <para>Compile and test the package:</para> + <para>Compile and test the package with:</para> -<screen><userinput remap="make">make</userinput></screen> +<screen><userinput remap="make">make CC=$LFS_TGT-gcc AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib</userinput></screen> - <para>Install the programs:</para> + <para>Install the package:</para> -<screen><userinput remap="install">make PREFIX=/usr install</userinput></screen> +<screen><userinput remap="install">make PREFIX=$LFS/usr install</userinput></screen> <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> + <filename class="directory">/bin</filename> directory, make some necessary + symbolic links, and clean up:</para> -<screen><userinput remap="install">cp -v bzip2-shared /bin/bzip2 -cp -av libbz2.so* /lib +<screen><userinput remap="install">cp -v bzip2-shared $LFS/bin/bzip2 +cp -av libbz2.so* $LFS/lib ln -sv ../../lib/libbz2.so.1.0 $LFS/usr/lib/libbz2.so -rm -v /usr/bin/{bunzip2,bzcat,bzip2} -ln -sv bzip2 /bin/bunzip2 -ln -sv bzip2 /bin/bzcat</userinput></screen> +rm -v $LFS/usr/bin/{bunzip2,bzcat,bzip2} +ln -sv bzip2 $LFS/bin/bunzip2 +ln -sv bzip2 $LFS/bin/bzcat</userinput></screen> </sect2> - <sect2 id="contents-bzip2" role="content"> - <title>Contents of Bzip2</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed libraries</segtitle> - <segtitle>Installed directory</segtitle> - - <seglistitem> - <seg>bunzip2 (link to bzip2), bzcat (link to bzip2), bzcmp (link to - bzdiff), bzdiff, bzegrep (link to bzgrep), bzfgrep (link to bzgrep), - bzgrep, bzip2, bzip2recover, bzless (link to bzmore), and bzmore</seg> - <seg>libbz2.{a,so}</seg> - <seg>/usr/share/doc/bzip2-&bzip2-version;</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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="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="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="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 role="content"> + <title/> + <para>Details on this package are located in + <xref linkend="contents-bzip2" role="."/></para> </sect2> diff --git a/chapter06/changingowner.xml b/chapter06/changingowner.xml new file mode 100644 index 000000000..43a902821 --- /dev/null +++ b/chapter06/changingowner.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-changingowner"> + <?dbhtml filename="changingowner.html"?> + + <title>Changing Ownership</title> + + <note> + <para>The commands in the remainder of this book must be performed while + logged in as user <systemitem class="username">root</systemitem> and no + longer as user <systemitem class="username">lfs</systemitem>. Also, double + check that <envar>$LFS</envar> is set in <systemitem + class="username">root</systemitem>'s environment.</para> + </note> + + <para>Currently, the whole directory hierarchy in <filename + class="directory">$LFS</filename> + is owned by the user <systemitem class="username">lfs</systemitem>, a user + that exists only on the host system. If the directories under <filename + class="directory">$LFS</filename> are kept as they are, 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 all + the files under <filename class="directory">$LFS</filename>, thus exposing + these files to possible malicious manipulation.</para> + + <para>To avoid this issue, you could add the <systemitem + class="username">lfs</systemitem> 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. Better yet, change the + ownership of the <filename class="directory">$LFS/*</filename> directories to + user <systemitem class="username">root</systemitem> by running the following + command:</para> + +<screen><userinput>chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,lib64,tools}</userinput></screen> + +</sect1> diff --git a/chapter06/chapter06.xml b/chapter06/chapter06.xml index 7fc83b374..eadff3cf7 100644 --- a/chapter06/chapter06.xml +++ b/chapter06/chapter06.xml @@ -5,101 +5,30 @@ %general-entities; ]> -<chapter id="chapter-building-system" xreflabel="Chapter 6"> +<chapter id="chapter-temporary-tools" xreflabel="Chapter 6"> <?dbhtml dir="chapter06"?> <?dbhtml filename="chapter06.html"?> - <title>Installing Basic System Software</title> + <title>Cross Compiling Temporary Tools</title> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introduction.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pkgmgt.xml"/> -<!-- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="linux-headers.xml"/>--> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="man-pages.xml"/> -<!-- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="adjusting.xml"/>--> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="glibc.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="zlib.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bzip2.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="xz.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="zstd.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="file.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="readline.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="m4.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bc.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="flex.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="binutils.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gmp.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mpfr.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mpc.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="attr.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="acl.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libcap.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="shadow.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gcc.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pkgconfig.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ncurses.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sed.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="psmisc.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="iana-etc.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gettext.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bison.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grep.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bash.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libtool.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gdbm.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gperf.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="expat.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="inetutils.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="perl.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="xml-parser.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="intltool.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="autoconf.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="automake.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kmod.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libelf.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libffi.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="openssl.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="python.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ninja.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="meson.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="coreutils.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="check.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="diffutils.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gawk.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="file.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="findutils.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="groff.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grub.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="less.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gawk.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grep.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gzip.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="iproute2.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kbd.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libpipeline.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="make.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="patch.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="man-db.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sed.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="tar.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="texinfo.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="vim.xml"/> - - <!-- systemd only --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="systemd.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbus.xml"/> - - <!-- sysv only --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="eudev.xml"/> - - <!-- Both sysv on systemd builds --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="procps.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="util-linux.xml"/> - - <!-- Both sysv and systemd builds --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="e2fsprogs.xml"/> - - <!-- sysv only --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sysklogd.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sysvinit.xml"/> - - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="aboutdebug.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="strippingagain.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="revisedchroot.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="xz.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="binutils-pass2.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gcc-pass2.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="stripping.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="changingowner.xml"/> </chapter> diff --git a/chapter06/chroot.xml b/chapter06/chroot.xml new file mode 100644 index 000000000..5b6310af7 --- /dev/null +++ b/chapter06/chroot.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-chroot"> + <?dbhtml filename="chroot.html"?> + + <title>Entering the Chroot Environment</title> + + <para>Now that all the packages which depend on themselves for being built + are on the system, it is time to enter the chroot environment to finish + installing the remaining temporary tools. This environment will be in use + also for installing the final system. As user <systemitem + class="username">root</systemitem>, run the following command to enter the + realm that is, at the moment, populated with only the temporary tools:</para> + +<screen role="nodump"><userinput>chroot "$LFS" /usr/bin/env -i \ + HOME=/root \ + TERM="$TERM" \ + PS1='(lfs chroot) \u:\w\$ ' \ + PATH=/bin:/usr/bin:/sbin:/usr/sbin \ + /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> is not + anymore in the <envar>PATH</envar>. This means that a temporary tool will no longer be + used once its final version is installed. This occurs when the shell does not + <quote>remember</quote> the locations of executed binaries—for this + reason, hashing is switched off by passing the <parameter>+h</parameter> option + to <command>bash</command>.</para> + + <para>Note that the <command>bash</command> prompt will say + <computeroutput>I have no name!</computeroutput> This is normal because the + <filename>/etc/passwd</filename> file has not been created yet.</para> + + <note> + <para>It is important that all the commands throughout the remainder of this + chapter and the following chapters are run from within the chroot + environment. If you leave this environment for any reason (rebooting for + example), ensure that the virtual kernel filesystems are mounted as + explained in <xref linkend="ch-system-bindmount"/> and <xref + linkend="ch-system-kernfsmount"/> and enter chroot again before continuing + with the installation.</para> + </note> + +</sect1> diff --git a/chapter06/coreutils.xml b/chapter06/coreutils.xml index 5a4079d78..378abebff 100644 --- a/chapter06/coreutils.xml +++ b/chapter06/coreutils.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-coreutils" role="wrap"> +<sect1 id="ch-tools-coreutils" role="wrap"> <?dbhtml filename="coreutils.html"?> <sect1info condition="script"> @@ -16,23 +16,25 @@ <title>Coreutils-&coreutils-version;</title> - <indexterm zone="ch-system-coreutils"> + <indexterm zone="ch-tools-coreutils"> <primary sortas="a-Coreutils">Coreutils</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Coreutils package contains utilities for showing and setting the - basic system characteristics.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/coreutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&coreutils-ch6-sbu;</seg> - <seg>&coreutils-ch6-du;</seg> + <seg>&coreutils-ch5-sbu;</seg> + <seg>&coreutils-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -41,59 +43,23 @@ <sect2 role="installation"> <title>Installation of Coreutils</title> - <para>POSIX requires that programs from Coreutils recognize character - boundaries correctly even in multibyte locales. The following patch fixes - this non-compliance and other internationalization-related bugs.</para> + <para>Prepare Coreutils for compilation:</para> -<screen><userinput remap="pre">patch -Np1 -i ../&coreutils-i18n-patch;</userinput></screen> - - <note> - <para>In the past, many bugs were found in this patch. When reporting new - bugs to Coreutils maintainers, please check first if they are reproducible - without this patch.</para> - </note> - - <!-- this has been fixed in upstream gnulib, when a new version of - coreutils is released, please check #4055 to see if the change has been - picked up in this package --> - <para>Suppress a test which on some machines can loop forever:</para> - -<screen><userinput remap="pre">sed -i '/test.lock/s/^/#/' gnulib-tests/gnulib.mk</userinput></screen> - - <para>Now prepare Coreutils for compilation:</para> - -<screen><userinput remap="configure">autoreconf -fiv -FORCE_UNSAFE_CONFIGURE=1 ./configure \ - --prefix=/usr \ +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) \ + --enable-install-program=hostname \ --enable-no-install-program=kill,uptime</userinput></screen> <variablelist> <title>The meaning of the configure options:</title> <varlistentry> - <term><command>autoreconf</command></term> - <listitem> - <para>This command updates generated configuration files - consistent with the latest version of automake. - </para> - </listitem> - </varlistentry> - - <varlistentry> - <term><envar>FORCE_UNSAFE_CONFIGURE=1</envar></term> - <listitem> - <para>This environment variable allows the package to be - built as the root user. - </para> - </listitem> - </varlistentry> - - <varlistentry> - <term><parameter>--enable-no-install-program=kill,uptime</parameter></term> + <term><envar>--enable-install-program=hostname</envar></term> <listitem> - <para>The purpose of this switch is to prevent Coreutils from - installing binaries that will be installed by other packages later. - </para> + <para>This enables the <command>hostname</command> binary to be built + and installed – it is disabled by default but is required by the + Perl test suite.</para> </listitem> </varlistentry> </variablelist> @@ -102,1185 +68,37 @@ FORCE_UNSAFE_CONFIGURE=1 ./configure \ <screen><userinput remap="make">make</userinput></screen> - <para>Skip down to <quote>Install the - package</quote> if not running the test suite.</para> - - <para>Now the test suite is ready to be run. First, run the tests that are - meant to be run as user <systemitem class="username">root</systemitem>:</para> - -<screen><userinput remap="test">make NON_ROOT_USERNAME=tester check-root</userinput></screen> - - <para>We're going to run the remainder of the tests as the - <systemitem class="username">tester</systemitem> user. Certain tests, - however, require that the user be a member of more than one group. So that - these tests are not skipped we'll add a temporary group and make the - user <systemitem class="username">tester</systemitem> a part of it:</para> - -<screen><userinput remap="test">echo "dummy:x:102:tester" >> /etc/group</userinput></screen> - - <para>Fix some of the permissions so that the non-root user can compile and - run the tests:</para> - -<screen><userinput remap="test">chown -Rv tester . </userinput></screen> - - <para>Now run the tests:</para> - -<screen><userinput remap="test">su tester -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"</userinput></screen> -<!-- - <para>The test program test-getlogin is known to fail in a - partially built system environment like the chroot environment here, but - passes if run at the end of this chapter. The test program tty.sh is - also known to fail.</para> ---> - - <para>Remove the temporary group:</para> - -<screen><userinput remap="test">sed -i '/dummy/d' /etc/group</userinput></screen> <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> - - <para>Move programs to the locations specified by the FHS:</para> - -<screen><userinput remap="install">mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin -mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin -mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin -mv -v /usr/bin/chroot /usr/sbin -mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8 -sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8</userinput></screen> - - <para revision="sysv">Some of the scripts in the LFS-Bootscripts package - depend on <command>head</command>, <command>nice</command>, - <command>sleep</command>, and <command>touch</command>. As <filename - class="directory">/usr</filename> may not be available during the early and - late stages of booting, those binaries need to be on the root partition to - maintain FHS compliance:</para> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> +<!-- + <para>The above command refuses to install <filename>su</filename> + because the program cannot be installed setuid root as a non-privileged + user. By manually installing it, we can use it for running tests in the + final system as a non-privileged user. Install it with:</para> -<screen><userinput remap="install">mv -v /usr/bin/{head,nice,sleep,touch} /bin</userinput></screen> +<screen><userinput remap="install">cp -v src/su /tools/bin</userinput></screen> +--> + <para>Move programs to their final expected locations. Although this is + not necessary in this temporary environment, we must do so because some + programs harcode executable locations:</para> + +<screen><userinput remap="install">mv -v $LFS/usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} $LFS/bin +mv -v $LFS/usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} $LFS/bin +mv -v $LFS/usr/bin/{rmdir,stty,sync,true,uname} $LFS/bin +mv -v $LFS/usr/bin/chroot $LFS/usr/sbin +mkdir -pv $LFS/usr/share/man/man8 +mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8 +sed -i s/\"1\"/\"8\"/1 $LFS/usr/share/man/man8/chroot.8 +mv -v $LFS/usr/bin/{head,nice,sleep,touch} $LFS/bin</userinput></screen> </sect2> - <sect2 id="contents-coreutils" role="content"> - <title>Contents of Coreutils</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed library</segtitle> - <segtitle>Installed directory</segtitle> - - <seglistitem> - <seg>[, b2sum, base32, base64, basename, basenc, cat, chcon, 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, id, install, join, link, ln, logname, ls, md5sum, mkdir, - mkfifo, mknod, mktemp, mv, nice, nl, nohup, nproc, numfmt, od, paste, - pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, realpath, rm, - rmdir, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, - sha512sum, shred, shuf, sleep, sort, split, stat, stdbuf, stty, sum, - sync, tac, tail, tee, test, timeout, touch, tr, true, truncate, tsort, - tty, uname, unexpand, uniq, unlink, users, vdir, wc, who, whoami, and - yes</seg> - <seg>libstdbuf.so (in /usr/libexec/coreutils)</seg> - <seg>/usr/libexec/coreutils</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="base32"> - <term><command>base32</command></term> - <listitem> - <para>Encodes and decodes data according to the base32 specification - (RFC 4648)</para> - <indexterm zone="ch-system-coreutils base64"> - <primary sortas="b-base64">base64</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="base64"> - <term><command>base64</command></term> - <listitem> - <para>Encodes and decodes data according to the base64 specification - (RFC 4648)</para> - <indexterm zone="ch-system-coreutils base64"> - <primary sortas="b-base64">base64</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="b2sum"> - <term><command>b2sum</command></term> - <listitem> - <para>Prints or checks BLAKE2 (512-bit) checksums</para> - <indexterm zone="ch-system-coreutils b2sum"> - <primary sortas="b-b2sum">b2sum</primary> - </indexterm> - </listitem> - </varlistentry> - - <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="basenc"> - <term><command>basenc</command></term> - <listitem> - <para>Encodes or decodes data using various algorithms</para> - <indexterm zone="ch-system-coreutils basenc"> - <primary sortas="b-basenc">basenc</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="chcon"> - <term><command>chcon</command></term> - <listitem> - <para>Changes security context for files and directories</para> - <indexterm zone="ch-system-coreutils chcon"> - <primary sortas="b-chcon">chcon</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="chgrp"> - <term><command>chgrp</command></term> - <listitem> - <para>Changes the group ownership of files and directories</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 files and - directories</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"> - <term><command>groups</command></term> - <listitem> - <para>Reports a user's group memberships</para> - <indexterm zone="ch-system-coreutils groups"> - <primary sortas="b-groups">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="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 "named - pipe" 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="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-coreutils mktemp"> - <primary sortas="b-mktemp">mktemp</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="nproc"> - <term><command>nproc</command></term> - <listitem> - <para>Prints the number of processing units available to a - process</para> - <indexterm zone="ch-system-coreutils nproc"> - <primary sortas="b-nproc">nproc</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="numfmt"> - <term><command>numfmt</command></term> - <listitem> - <para>Converts numbers to or from human-readable strings</para> - <indexterm zone="ch-system-coreutils numfmt"> - <primary sortas="b-numfmt">numfmt</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="realpath"> - <term><command>realpath</command></term> - <listitem> - <para>Prints the resolved path</para> - <indexterm zone="ch-system-coreutils realpath"> - <primary sortas="b-realpath">realpath</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="runcon"> - <term><command>runcon</command></term> - <listitem> - <para>Runs a command with specified security context</para> - <indexterm zone="ch-system-coreutils runcon"> - <primary sortas="b-runcon">runcon</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="sha224sum"> - <term><command>sha224sum</command></term> - <listitem> - <para>Prints or checks 224-bit Secure Hash Algorithm checksums</para> - <indexterm zone="ch-system-coreutils sha224sum"> - <primary sortas="b-sha224sum">sha224sum</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="sha256sum"> - <term><command>sha256sum</command></term> - <listitem> - <para>Prints or checks 256-bit Secure Hash Algorithm checksums</para> - <indexterm zone="ch-system-coreutils sha256sum"> - <primary sortas="b-sha256sum">sha256sum</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="sha384sum"> - <term><command>sha384sum</command></term> - <listitem> - <para>Prints or checks 384-bit Secure Hash Algorithm checksums</para> - <indexterm zone="ch-system-coreutils sha384sum"> - <primary sortas="b-sha384sum">sha384sum</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="sha512sum"> - <term><command>sha512sum</command></term> - <listitem> - <para>Prints or checks 512-bit Secure Hash Algorithm checksums</para> - <indexterm zone="ch-system-coreutils sha512sum"> - <primary sortas="b-sha512sum">sha512sum</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="shuf"> - <term><command>shuf</command></term> - <listitem> - <para>Shuffles lines of text</para> - <indexterm zone="ch-system-coreutils shuf"> - <primary sortas="b-shuf">shuf</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="stdbuf"> - <term><command>stdbuf</command></term> - <listitem> - <para>Runs commands with altered buffering operations for its standard - streams</para> - <indexterm zone="ch-system-coreutils stdbuf"> - <primary sortas="b-stdbuf">stdbuf</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="timeout"> - <term><command>timeout</command></term> - <listitem> - <para>Runs a command with a time limit</para> - <indexterm zone="ch-system-coreutils timeout"> - <primary sortas="b-timeout">timeout</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="truncate"> - <term><command>truncate</command></term> - <listitem> - <para>Shrinks or expands a file to the specified size</para> - <indexterm zone="ch-system-coreutils truncate"> - <primary sortas="b-truncate">truncate</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 uniq"> - <primary sortas="b-uniq">uniq</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> - - <varlistentry id="libstdbuf"> - <term><filename class="libraryfile">libstdbuf</filename></term> - <listitem> - <para>Library used by <command>stdbuf</command></para> - <indexterm zone="ch-system-coreutils libstdbuf"> - <primary sortas="c-libstdbuf">libstdbuf</primary> - </indexterm> - </listitem> - </varlistentry> + <sect2 role="content"> + <title/> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-coreutils" role="."/></para> </sect2> diff --git a/chapter06/createfiles.xml b/chapter06/createfiles.xml new file mode 100644 index 000000000..aed8d79da --- /dev/null +++ b/chapter06/createfiles.xml @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-createfiles"> + <?dbhtml filename="createfiles.html"?> + + <title>Creating Essential Files and Symlinks</title> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/etc/passwd">/etc/passwd</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/etc/group">/etc/group</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/var/run/utmp">/var/run/utmp</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/var/log/btmp">/var/log/btmp</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/var/log/lastlog">/var/log/lastlog</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/var/log/wtmp">/var/log/wtmp</primary> + </indexterm> + + <para>Historically, Linux maintains a list of the mounted file systems in the + file <filename>/etc/mtab</filename>. Modern kernels maintain this list + internally and exposes it to the user via the <filename + class="directory">/proc</filename> filesystem. To satisfy utilities that + expect the presence of <filename>/etc/mtab</filename>, create the following + symbolic link:</para> + +<screen><userinput>ln -sv /proc/self/mounts /etc/mtab</userinput></screen> + + <para>In order for user <systemitem class="username">root</systemitem> to be + able to login and for the name <quote>root</quote> to be recognized, there + must 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 revision="sysv"><userinput>cat > /etc/passwd << "EOF" +<literal>root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/dev/null:/bin/false +daemon:x:6:6:Daemon User:/dev/null:/bin/false +messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false +nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal> +EOF</userinput></screen> + +<screen revision="systemd"><userinput>cat > /etc/passwd << "EOF" +<literal>root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/dev/null:/bin/false +daemon:x:6:6:Daemon User:/dev/null:/bin/false +messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false +systemd-bus-proxy:x:72:72:systemd Bus Proxy:/:/bin/false +systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/bin/false +systemd-journal-remote:x:74:74:systemd Journal Remote:/:/bin/false +systemd-journal-upload:x:75:75:systemd Journal Upload:/:/bin/false +systemd-network:x:76:76:systemd Network Management:/:/bin/false +systemd-resolve:x:77:77:systemd Resolver:/:/bin/false +systemd-timesync:x:78:78:systemd Time Synchronization:/:/bin/false +systemd-coredump:x:79:79:systemd Core Dumper:/:/bin/false +nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal> +EOF</userinput></screen> + + <para>The actual password for <systemitem class="username">root</systemitem> + (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 revision="sysv"><userinput>cat > /etc/group << "EOF" +<literal>root:x:0: +bin:x:1:daemon +sys:x:2: +kmem:x:3: +tape:x:4: +tty:x:5: +daemon:x:6: +floppy:x:7: +disk:x:8: +lp:x:9: +dialout:x:10: +audio:x:11: +video:x:12: +utmp:x:13: +usb:x:14: +cdrom:x:15: +adm:x:16: +messagebus:x:18: +input:x:24: +mail:x:34: +kvm:x:61: +wheel:x:97: +nogroup:x:99: +users:x:999:</literal> +EOF</userinput></screen> + +<screen revision="systemd"><userinput>cat > /etc/group << "EOF" +<literal>root:x:0: +bin:x:1:daemon +sys:x:2: +kmem:x:3: +tape:x:4: +tty:x:5: +daemon:x:6: +floppy:x:7: +disk:x:8: +lp:x:9: +dialout:x:10: +audio:x:11: +video:x:12: +utmp:x:13: +usb:x:14: +cdrom:x:15: +adm:x:16: +messagebus:x:18: +systemd-journal:x:23: +input:x:24: +mail:x:34: +kvm:x:61: +systemd-bus-proxy:x:72: +systemd-journal-gateway:x:73: +systemd-journal-remote:x:74: +systemd-journal-upload:x:75: +systemd-network:x:76: +systemd-resolve:x:77: +systemd-timesync:x:78: +systemd-coredump:x:79: +wheel:x:97: +nogroup:x:99: +users:x:999:</literal> +EOF</userinput></screen> + + <para>The created groups are not part of any standard—they are groups + decided on in part by the requirements of the Udev configuration in the next + chapter, and in part by common convention employed by a number of existing + Linux distributions. In addition, some test suites rely on specific users + or groups. The Linux Standard Base (LSB, available at <ulink + url="http://www.linuxbase.org"/>) recommends only that, besides the group + <systemitem class="groupname">root</systemitem> with a Group ID (GID) of 0, + a group <systemitem class="groupname">bin</systemitem> with a GID of 1 be + present. All other group names and GIDs can be chosen freely by the system + administrator since well-written programs do not depend on GID numbers, but + rather use the group's name.</para> + + <para>Some tests in <xref linkend="chapter-building-system"/> need a regular + user. We add this user here and delete this account at the end of that + chapter.</para> + +<screen><userinput>echo "tester:x:$(ls -n $(tty) | cut -d" " -f3):101::/home/tester:/bin/bash" >> /etc/passwd +echo "tester:x:101:" >> /etc/group +install -o tester -d /home/tester</userinput></screen> + + <para>To remove the <quote>I have no name!</quote> prompt, start a new + shell. Since 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 role="nodump"><userinput>exec /bin/bash --login +h</userinput></screen> + + <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. To ensure the use of the newly compiled binaries as soon as they are + installed, the <parameter>+h</parameter> directive will be used 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/log/{btmp,lastlog,faillog,wtmp} +chgrp -v utmp /var/log/lastlog +chmod -v 664 /var/log/lastlog +chmod -v 600 /var/log/btmp</userinput></screen> + + <para>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/faillog</filename> file records + failed login attempts. The <filename>/var/log/btmp</filename> file records + the bad login attempts.</para> + + <note><para>The <filename>/run/utmp</filename> file records the users that + are currently logged in. This file is created dynamically in the boot + scripts.</para></note> + +</sect1> diff --git a/chapter06/creatingdirs.xml b/chapter06/creatingdirs.xml new file mode 100644 index 000000000..359717ff7 --- /dev/null +++ b/chapter06/creatingdirs.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-creatingdirs"> + <?dbhtml filename="creatingdirs.html"?> + + <title>Creating Directories</title> + + <para>It is time to create the full structure in the LFS file system. Create + a standard directory tree by issuing the following commands:</para> + +<screen><userinput>mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt} +mkdir -pv /{media/{floppy,cdrom},srv,var} +install -dv -m 0750 /root +install -dv -m 1777 /tmp /var/tmp +mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src} +mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} +mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo} +mkdir -pv /usr/{,local/}share/man/man{1..8} + +mkdir -v /var/{log,mail,spool} +ln -sv /run /var/run +ln -sv /run/lock /var/lock +mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}</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—one to the home directory of user <systemitem + class="username">root</systemitem>, 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—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 + another user's 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) (available at <ulink + url="https://refspecs.linuxfoundation.org/fhs.shtml"/>). The FHS also specifies + the optional existence of some directories such as <filename + class="directory">/usr/local/games</filename> and <filename + class="directory">/usr/share/games</filename>. We create only the + directories that are needed. However, feel free to create these + directories. </para> + + </sect2> + +</sect1> diff --git a/chapter06/dejagnu.xml b/chapter06/dejagnu.xml new file mode 100644 index 000000000..8f1ab7648 --- /dev/null +++ b/chapter06/dejagnu.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-dejagnu" role="wrap"> + <?dbhtml filename="dejagnu.html"?> + + <sect1info condition="script"> + <productname>dejagnu</productname> + <productnumber>&dejagnu-version;</productnumber> + <address>&dejagnu-url;</address> + </sect1info> + + <title>DejaGNU-&dejagnu-version;</title> + + <indexterm zone="ch-tools-dejagnu"> + <primary sortas="a-DejaGNU">DejaGNU</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The <application>DejaGnu</application> package contains a framework for running test + suites on GNU tools. It is written in <command>expect</command>, which itself + uses <application>Tcl</application> (Tool Command Language).</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&dejagnu-ch5-sbu;</seg> + <seg>&dejagnu-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of DejaGNU</title> + + <para>Prepare DejaGNU for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr +makeinfo --html --no-split -o doc/dejagnu.html doc/dejagnu.texi +makeinfo --plaintext -o doc/dejagnu.txt doc/dejagnu.texi</userinput></screen> + + <para>Build and install the package:</para> + +<screen><userinput remap="install">make install +install -v -dm755 /usr/share/doc/dejagnu-&dejagnu-version; +install -v -m644 doc/dejagnu.{html,txt} \ + /usr/share/doc/dejagnu-&dejagnu-version;</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + </sect2> + + + <sect2 id="contents-dejagnu" role="content"> + <title>Contents of DejaGNU</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + + <seglistitem> + <seg>runtest</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="runtest"> + <term><command>runtest</command></term> + <listitem> + <para>A wrapper script that locates the proper + <command>expect</command> shell and then runs DejaGNU</para> + <indexterm zone="ch-tools-dejagnu runtest"> + <primary sortas="b-runtest">runtest</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/diffutils.xml b/chapter06/diffutils.xml index 0d8bd5c77..6594058be 100644 --- a/chapter06/diffutils.xml +++ b/chapter06/diffutils.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-diffutils" role="wrap"> +<sect1 id="ch-tools-diffutils" role="wrap"> <?dbhtml filename="diffutils.html"?> <sect1info condition="script"> @@ -16,23 +16,25 @@ <title>Diffutils-&diffutils-version;</title> - <indexterm zone="ch-system-diffutils"> + <indexterm zone="ch-tools-diffutils"> <primary sortas="a-Diffutils">Diffutils</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Diffutils package contains programs that show the differences - between files or directories.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/diffutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&diffutils-ch6-sbu;</seg> - <seg>&diffutils-ch6-du;</seg> + <seg>&diffutils-ch5-sbu;</seg> + <seg>&diffutils-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -43,82 +45,23 @@ <para>Prepare Diffutils for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr --host=$LFS_TGT</userinput></screen> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> </sect2> + <sect2 role="content"> + <title/> - <sect2 id="contents-diffutils" role="content"> - <title>Contents of Diffutils</title> - - <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"?> - <?dbhtml list-presentation="table"?> - - <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> + <para>Details on this package are located in + <xref linkend="contents-diffutils" role="."/></para> </sect2> diff --git a/chapter06/expect.xml b/chapter06/expect.xml new file mode 100644 index 000000000..20b227ea5 --- /dev/null +++ b/chapter06/expect.xml @@ -0,0 +1,139 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-expect" role="wrap"> + <?dbhtml filename="expect.html"?> + + <sect1info condition="script"> + <productname>expect</productname> + <productnumber>&expect-version;</productnumber> + <address>&expect-url;</address> + </sect1info> + + <title>Expect-&expect-version;</title> + + <indexterm zone="ch-tools-expect"> + <primary sortas="a-Expect">Expect</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The <application>Expect</application> package contains tools for + automating, via scripted dialogues, interactive applications such as + <command>telnet</command>, <command>ftp</command>, + <command>passwd</command>, <command>fsck</command>, + <command>rlogin</command>, and <command>tip</command>. + <application>Expect</application> is also useful for testing these same + applications as well as easing all sorts of tasks that are prohibitively + difficult with anything else. The <application>DejaGnu</application> + framework is written in <application>Expect</application>.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&expect-ch5-sbu;</seg> + <seg>&expect-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Expect</title> + + <para>Prepare Expect for compilation:</para> + +<screen><userinput remap="configure"> +./configure --prefix=/usr \ + --with-tcl=/usr/lib \ + --enable-shared \ + --mandir=/usr/share/man \ + --with-tclinclude=/usr/include</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--with-tcl=/usr/lib</parameter></term> + <listitem> + <para>This parameter is needed to tell the + <command>configure</command> where the + <command>tclConfig.sh</command> is located.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-tclinclude=/usr/include</parameter></term> + <listitem> + <para>This explicitly tells Expect where to find Tcl's internal + headers. Using this option avoids conditions where + <command>configure</command> fails because it cannot automatically + discover the location of Tcl's headers.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Build the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install +ln -svf expect&expect-version;/libexpect&expect-version;.so /usr/lib</userinput></screen> + + </sect2> + + <sect2 id="contents-expect" role="content"> + <title>Contents of Expect</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>expect</seg> + <seg>libexpect-&expect-lib-version;.so</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="expect"> + <term><command>expect</command></term> + <listitem> + <para>Communicates with other interactive programs according + to a script</para> + <indexterm zone="ch-tools-expect expect"> + <primary sortas="b-expect">expect</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libexpect"> + <term><filename class="libraryfile">libexpect-&expect-lib-version;.so</filename></term> + <listitem> + <para>Contains functions that allow Expect to be used as a Tcl + extension or to be used directly from C or C++ (without Tcl)</para> + <indexterm zone="ch-tools-expect libexpect"> + <primary sortas="c-libexpect-&expect-lib-version;">libexpect-&expect-lib-version;</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/file.xml b/chapter06/file.xml index b5e28f244..83a473b70 100644 --- a/chapter06/file.xml +++ b/chapter06/file.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-file" role="wrap"> +<sect1 id="ch-tools-file" role="wrap"> <?dbhtml filename="file.html"?> <sect1info condition="script"> @@ -16,23 +16,25 @@ <title>File-&file-version;</title> - <indexterm zone="ch-system-file"> + <indexterm zone="ch-tools-file"> <primary sortas="a-File">File</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The File package contains a utility for determining the type of a given - file or files.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/file.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&file-ch6-sbu;</seg> - <seg>&file-ch6-du;</seg> + <seg>&file-ch5-sbu;</seg> + <seg>&file-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -43,65 +45,28 @@ <para>Prepare File for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT</userinput></screen> +<!-- devs: if using - -build here, the build system wants to compile + the signature file with "file" on the build system, but stops if it is not + the same version. One possibility would be to build "file" on the build + system first, but it is simpler to have the system think it is not + cross-compiling, and use the just built "file". --> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> </sect2> - - <sect2 id="contents-file" role="content"> - <title>Contents of File</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed library</segtitle> - - <seglistitem> - <seg>file</seg> - <seg>libmagic.so</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="file"> - <term><command>file</command></term> - <listitem> - <para>Tries to classify each given file; it does this by performing - several tests—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 role="content"> + <title/> + <para>Details on this package are located in<!-- TODO + <xref linkend="contents-file" role="."/> --></para> </sect2> diff --git a/chapter06/findutils.xml b/chapter06/findutils.xml index 37393f0de..bf9f9c62a 100644 --- a/chapter06/findutils.xml +++ b/chapter06/findutils.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-findutils" role="wrap"> +<sect1 id="ch-tools-findutils" role="wrap"> <?dbhtml filename="findutils.html"?> <sect1info condition="script"> @@ -16,25 +16,25 @@ <title>Findutils-&findutils-version;</title> - <indexterm zone="ch-system-findutils"> + <indexterm zone="ch-tools-findutils"> <primary sortas="a-Findutils">Findutils</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Findutils package contains programs to find files. These programs - 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> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/findutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&findutils-ch6-sbu;</seg> - <seg>&findutils-ch6-du;</seg> + <seg>&findutils-ch5-sbu;</seg> + <seg>&findutils-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -45,116 +45,30 @@ <para>Prepare Findutils for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr --localstatedir=/var/lib/locate</userinput></screen> - - <variablelist> - <title>The meaning of the configure options:</title> - - <varlistentry> - <term><parameter>--localstatedir</parameter></term> - <listitem> - <para>This option changes the location of the <command>locate</command> - database to be in <filename class="directory">/var/lib/locate</filename>, - which is FHS-compliant.</para> - </listitem> - </varlistentry> - - </variablelist> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess)</userinput></screen> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> - -<screen><userinput remap="test">chown -Rv tester . -su tester -c "PATH=$PATH make check"</userinput></screen> - <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> - - <para revision="sysv">Some of the scripts in the LFS-Bootscripts package - depend on <command>find</command>. As <filename - class="directory">/usr</filename> may not be available during the early - stages of booting, this program needs to be on the root partition. The - <command>updatedb</command> script also needs to be modified to correct an - explicit path:</para> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> - <para revision="systemd"> Some packages in BLFS and beyond expect the - <command>find</command> program in <filename - class="directory">/bin</filename>, so make sure it's placed there:</para> + <para>Move the excutable to its final expected location:</para> -<screen><userinput remap="install">mv -v /usr/bin/find /bin -sed -i 's|find:=${BINDIR}|find:=/bin|' /usr/bin/updatedb</userinput></screen> +<screen><userinput remap="install">mv -v $LFS/usr/bin/find $LFS/bin +sed -i 's|find:=${BINDIR}|find:=/bin|' $LFS/usr/bin/updatedb</userinput></screen> </sect2> - <sect2 id="contents-findutils" role="content"> - <title>Contents of Findutils</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed directory</segtitle> - - <seglistitem> - <seg>find, locate, updatedb, and xargs</seg> - <seg>/var/lib/locate</seg> - </seglistitem> - - </segmentedlist> + <sect2 role="content"> + <title/> - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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="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> + <para>Details on this package are located in + <xref linkend="contents-findutils" role="."/></para> </sect2> diff --git a/chapter06/flex.xml b/chapter06/flex.xml index bd4bd545f..88e263413 100644 --- a/chapter06/flex.xml +++ b/chapter06/flex.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-flex" role="wrap"> +<sect1 id="ch-tools-flex" role="wrap"> <?dbhtml filename="flex.html"?> <sect1info condition="script"> @@ -16,23 +16,25 @@ <title>Flex-&flex-version;</title> - <indexterm zone="ch-system-flex"> + <indexterm zone="ch-tools-flex"> <primary sortas="a-Flex">Flex</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Flex package contains a utility for generating programs that - recognize patterns in text.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/flex.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&flex-ch6-sbu;</seg> - <seg>&flex-ch6-du;</seg> + <seg>&flex-ch5-sbu;</seg> + <seg>&flex-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -41,108 +43,45 @@ <sect2 role="installation"> <title>Installation of Flex</title> -<!-- - <para>First, fix a problem introduced with glibc-2.26:</para> - -<screen><userinput remap="pre">sed -i "/math.h/a #include <malloc.h>" src/flexdef.h</userinput></screen> - - <para>The build procedure assumes the <application>help2man</application> - program is available to create a man page from the executable - -help option. - This is not present, so we use an environment variable to skip this process. - Now, prepare Flex for compilation:</para> --> - <para>Prepare Flex for compilation:</para> -<!-- <screen><userinput remap="configure">HELP2MAN=/tools/bin/true \ --> -<screen><userinput remap="configure">./configure --prefix=/usr --docdir=/usr/share/doc/flex-&flex-version;</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --docdir=/usr/share/doc/flex-&flex-version;</userinput></screen> + <!-- + <variablelist> + <title>The meaning of the new configure option:</title> + + <varlistentry> + <term><parameter>- -disable-bootstrap</parameter></term> + <listitem> + <para>Normally, building flex is done in two stages. A first + programs, which is used to generate the source of a second one, + which is then compiled. When using cross-compilation, the first + program is generated on the build system. However, due to a bug + in configure, the presence of some function is tested only on the + host system. If this function is not found on the build system, the + build fails. This can be prevented by disabling the two stage + build.</para> + </listitem> + </varlistentry> + </variablelist> + --> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results (about 0.5 SBU), issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - <para>Install the package:</para> <screen><userinput remap="install">make install</userinput></screen> - <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 symbolic link named <filename>lex</filename> that - runs <filename>flex</filename> in <command>lex</command> emulation - mode:</para> - -<screen><userinput remap="install">ln -sv flex /usr/bin/lex</userinput></screen> - </sect2> - <sect2 id="contents-flex" role="content"> - <title>Contents of Flex</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed libraries</segtitle> - <segtitle>Installed directory</segtitle> - - <seglistitem> - <seg>flex, flex++ (link to flex), and lex (link to flex)</seg> - <seg>libfl.so</seg> - <seg>/usr/share/doc/flex-&flex-version;</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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="flexpp"> - <term><command>flex++</command></term> - <listitem> - <para>An extension of flex, is used for generating C++ code - and classes. It is a symbolic link to <command>flex</command></para> - <indexterm zone="ch-system-flex flexpp"> - <primary sortas="b-flex++">flex++</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lex"> - <term><command>lex</command></term> - <listitem> - <para>A symbolic link 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"> - <term><filename class="libraryfile">libfl</filename></term> - <listitem> - <para>The <filename class="libraryfile">flex</filename> library</para> - <indexterm zone="ch-system-flex libfl"> - <primary sortas="c-libfl">libfl</primary> - </indexterm> - </listitem> - </varlistentry> + <sect2 role="content"> + <title/> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-flex" role="."/></para> </sect2> diff --git a/chapter06/gawk.xml b/chapter06/gawk.xml index b112eb10d..105abdb8e 100644 --- a/chapter06/gawk.xml +++ b/chapter06/gawk.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-gawk" role="wrap"> +<sect1 id="ch-tools-gawk" role="wrap"> <?dbhtml filename="gawk.html"?> <sect1info condition="script"> @@ -16,22 +16,25 @@ <title>Gawk-&gawk-version;</title> - <indexterm zone="ch-system-gawk"> + <indexterm zone="ch-tools-gawk"> <primary sortas="a-Gawk">Gawk</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Gawk package contains programs for manipulating text files.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/gawk.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&gawk-ch6-sbu;</seg> - <seg>&gawk-ch6-du;</seg> + <seg>&gawk-ch5-sbu;</seg> + <seg>&gawk-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -46,82 +49,25 @@ <para>Prepare Gawk for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(./config.guess)</userinput></screen> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> - - <para>If desired, install the documentation:</para> - -<screen><userinput remap="install">mkdir -v /usr/share/doc/gawk-&gawk-version; -cp -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-&gawk-version;</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> </sect2> - <sect2 id="contents-gawk" role="content"> - <title>Contents of Gawk</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed libraries</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - <seg>awk (link to gawk), gawk, and awk-&gawk-version;</seg> - <seg>filefuncs.so, fnmatch.so, fork.so, inplace.so, intdiv.so, ordchr.so, - readdir.so, readfile.so, revoutput.so, revtwoway.so, rwarray.so, - and time.so (all in /usr/lib/gawk)</seg> - <seg>/usr/lib/gawk, /usr/libexec/awk, /usr/share/awk, and - /usr/share/doc/gawk-&gawk-version;</seg> - </seglistitem> - </segmentedlist> + <sect2 role="content"> + <title/> - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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> - - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-gawk" role="."/></para> </sect2> diff --git a/chapter06/gcc-pass1.xml b/chapter06/gcc-pass1.xml new file mode 100644 index 000000000..1bd308f09 --- /dev/null +++ b/chapter06/gcc-pass1.xml @@ -0,0 +1,208 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-gcc-pass1" role="wrap" xreflabel="gcc-pass1"> + <?dbhtml filename="gcc-pass1.html"?> + + <sect1info condition="script"> + <productname>gcc-pass1</productname> + <productnumber>&gcc-version;</productnumber> + <address>&gcc-url;</address> + </sect1info> + + <title>GCC-&gcc-version; - Pass 1</title> + + <indexterm zone="ch-tools-gcc-pass1"> + <primary sortas="a-GCC">GCC</primary> + <secondary>tools, pass 1</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/gcc.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gcc-ch5p1-sbu;</seg> + <seg>&gcc-ch5p1-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Cross GCC</title> + + <para>GCC requires the GMP, MPFR and MPC packages. As these packages may + not be included in your host distribution, they will be built with + GCC. Unpack each package into the GCC source directory and rename the + resulting directories so the GCC build procedures will automatically + use them:</para> + + <note><para>There are frequent misunderstandings about this chapter. The + procedures are the same as every other chapter as explained earlier (<xref + linkend='buildinstr'/>). First extract the gcc tarball from the sources + directory and then change to the directory created. Only then should you + proceed with the instructions below.</para></note> + +<screen><userinput remap="pre">tar -xf ../mpfr-&mpfr-version;.tar.xz +mv -v mpfr-&mpfr-version; mpfr +tar -xf ../gmp-&gmp-version;.tar.xz +mv -v gmp-&gmp-version; gmp +tar -xf ../mpc-&mpc-version;.tar.gz +mv -v mpc-&mpc-version; mpc</userinput></screen> + + <para>On x86_64 hosts, set the default directory name for + 64-bit libraries to <quote>lib</quote>:</para> + +<screen><userinput remap="pre">case $(uname -m) in + x86_64) + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + ;; +esac</userinput></screen> + + <para>The GCC documentation recommends building GCC + in a dedicated build directory:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare GCC for compilation:</para> + +<screen><userinput remap="configure">../configure \ + --target=$LFS_TGT \ + --prefix=$LFS/tools \ + --with-glibc-version=2.11 \ + --with-sysroot=$LFS \ + --with-newlib \ + --without-headers \ + --enable-initfini-array \ + --disable-nls \ + --disable-shared \ + --disable-multilib \ + --disable-decimal-float \ + --disable-threads \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++</userinput></screen> + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--with-glibc-version=2.11</parameter></term> + <listitem> + <para>This option ensures the package will be compatible with the host's + version of glibc. It is set to the minimum glibc requirement + specified in the <xref linkend="ch-partitioning-hostreqs"/>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-newlib</parameter></term> + <listitem> + <para>Since a working C library is not yet available, this ensures + that the inhibit_libc constant is defined when building libgcc. This prevents + the compiling of any code that requires libc support.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--without-headers</parameter></term> + <listitem> + <para>When creating a complete cross-compiler, GCC requires + standard headers compatible with the target system. For our + purposes these headers will not be needed. This switch prevents + GCC from looking for them.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-shared</parameter></term> + <listitem> + <para>This switch forces GCC to link its internal libraries + statically. We need this because the shared libraries require glibc, + which is not yet installed on the target system.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-decimal-float, --disable-threads, + --disable-libatomic, --disable-libgomp, <!--- -disable-libmpx,--> + --disable-libquadmath, --disable-libssp, --disable-libvtv, + --disable-libstdcxx</parameter></term> + <listitem> + <para>These switches disable support for the decimal floating point + extension, threading, libatomic, libgomp, <!--libmpx, --> libquadmath, libssp, + libvtv, and the C++ standard library respectively. These features + will fail to compile when building a cross-compiler and are not + necessary for the task of cross-compiling the temporary libc.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-multilib</parameter></term> + <listitem> + <para>On x86_64, LFS does not yet support a multilib configuration. + This switch is harmless for x86.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-languages=c,c++</parameter></term> + <listitem> + <para>This option ensures that only the C and C++ compilers are built. + These are the only languages needed now.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile GCC by running:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + + <screen><userinput remap="install">make install</userinput></screen> + + <para>This build of GCC has installed a couple of internal system + headers. Normally one of them, <filename>limits.h</filename>, would in turn + include the corresponding system <filename>limits.h</filename> header, in + this case, <filename>$LFS/usr/include/limits.h</filename>. However, at the + time of this build of gcc <filename>$LFS/usr/include/limits.h</filename> + does not exist, so the internal header that has just been installed is a + partial, self-contained file and does not include the extended features of + the system header. This is adequate for building glibc, but the full + internal header will be needed later. Create a full version of the internal + header using a command that is identical to what the GCC build system does + in normal circumstances:</para> + +<screen><userinput remap="install">cd .. +cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ + `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h</userinput></screen> + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gcc" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter06/gcc-pass2.xml b/chapter06/gcc-pass2.xml new file mode 100644 index 000000000..7f7d7a021 --- /dev/null +++ b/chapter06/gcc-pass2.xml @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-gcc-pass2" role="wrap"> + <?dbhtml filename="gcc-pass2.html"?> + + <sect1info condition="script"> + <productname>gcc-pass2</productname> + <productnumber>&gcc-version;</productnumber> + <address>&gcc-url;</address> + </sect1info> + + <title>GCC-&gcc-version; - Pass 2</title> + + <indexterm zone="ch-tools-gcc-pass2"> + <primary sortas="a-GCC">GCC</primary> + <secondary>tools, pass 2</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/gcc.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gcc-ch5p2-sbu;</seg> + <seg>&gcc-ch5p2-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of GCC</title> + + <para>As in the first build of GCC, the GMP, MPFR, and MPC packages are + required. Unpack the tarballs and move them into the required directory + names:</para> + +<screen><userinput remap="pre">tar -xf ../mpfr-&mpfr-version;.tar.xz +mv -v mpfr-&mpfr-version; mpfr +tar -xf ../gmp-&gmp-version;.tar.xz +mv -v gmp-&gmp-version; gmp +tar -xf ../mpc-&mpc-version;.tar.gz +mv -v mpc-&mpc-version; mpc</userinput></screen> + + <para>If building on x86_64, change the default directory name for 64-bit + libraries to <quote>lib</quote>:</para> + +<screen><userinput remap="pre">case $(uname -m) in + x86_64) + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + ;; +esac</userinput></screen> + + <para>Fix an issue with GCC-10.1 when building with a cross + compiler:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&gcc-cross-patch;</userinput></screen> + + <para>Create a separate build directory again:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Create a symlink that allos libgcc to be built with posix threads + support:</para> + +<screen><userinput remap="pre">mkdir -pv $LFS_TGT/libgcc +ln -s ../../../libgcc/gthr-posix.h $LFS_TGT/libgcc/gthr-default.h</userinput></screen> + + <para>Before starting to build GCC, remember to unset any environment + variables that override the default optimization flags.</para> + + <para>Now prepare GCC for compilation:</para> + +<screen><userinput remap="configure">../configure \ + --build=$(../config.guess) \ + --host=$LFS_TGT \ + --prefix=/usr \ + CC_FOR_TARGET=$LFS_TGT-gcc \ + --with-build-sysroot=$LFS \ + --enable-initfini-array \ + --disable-nls \ + --disable-multilib \ + --disable-decimal-float \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title><!-- WIP --> + + <varlistentry> + <term><parameter>-with-build-sysroot=$LFS</parameter></term> + <listitem> + <para>Normally, using <parameter>--host=</parameter> ensures that + a cross-compiler is used for building gcc, and that compiler knows + that it has to look for headers and libraries in <filename + class="directory">$LFS</filename>. But the build system of GCC uses + other tools, which are not aware of this location. This switch is + needed to have them find the needed files in <filename + class="directory">$LFS</filename>, and not on the host.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-initfini-array</parameter></term> + <listitem> + <para>This option is automatically enabled when building a native + compiler with a native compiler on x86. But here, we build with + a cross compiler, so we need to explicitely set this option.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + <para>As a finishing touch, create a symlink. Many programs and scripts + run <command>cc</command> instead of <command>gcc</command>, which is + used to keep programs generic and therefore usable on all kinds of UNIX + systems where the GNU C compiler is not always installed. Running + <command>cc</command> leaves the system administrator free to decide + which C compiler to install:</para> + +<screen><userinput remap="install">ln -sv gcc $LFS/usr/bin/cc</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gcc" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter06/generalinstructions.xml b/chapter06/generalinstructions.xml new file mode 100644 index 000000000..05b88b98c --- /dev/null +++ b/chapter06/generalinstructions.xml @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-generalinstructions"> + <?dbhtml filename="generalinstructions.html"?> + + <title>General Compilation Instructions</title> + + <para>When building packages there are several assumptions made within + the instructions:</para> + + <itemizedlist> + + <listitem> + <para>Several of the packages are patched before compilation, but only when + the patch is needed to circumvent a problem. A patch is often needed in + both this and the next chapter, but sometimes in only one or the other. + Therefore, do not be concerned if instructions for a downloaded patch seem + to be missing. Warning messages about <emphasis>offset</emphasis> or + <emphasis>fuzz</emphasis> may also be encountered when applying a patch. Do + not worry about these warnings, as the patch was still successfully + applied.</para> + </listitem> + + <listitem> + <para>During the compilation of most packages, there will be several + warnings that scroll by on the screen. These are normal and can safely be + ignored. These warnings are as they appear—warnings about + deprecated, but not invalid, use of the C or C++ syntax. C standards change + fairly often, and some packages still use the older standard. This is not a + problem, but does prompt the warning.</para> + </listitem> + + <listitem> + <para>Check one last time that the <envar>LFS</envar> environment variable + is set up properly:</para> + +<screen role="nodump"><userinput>echo $LFS</userinput></screen> + + <para>Make sure the output shows the path to the LFS partition's mount + point, which is <filename class="directory">/mnt/lfs</filename>, using our + example.</para> + </listitem> + + <listitem> + + <para>Finally, two important items must be emphasized:</para> + + <important> + + <para>The build instructions assume that the <xref + linkend='ch-partitioning-hostreqs'/>, including symbolic links, have + been set properly:</para> + + <itemizedlist role='important'> + + <listitem override='bullet'><para><command>bash</command> is the shell + in use.</para></listitem> + + <listitem override='bullet'><para><command>sh</command> is a symbolic + link to <command>bash</command>.</para></listitem> + + <listitem override='bullet'><para><command>/usr/bin/awk</command> is a + symbolic link to <command>gawk</command>.</para></listitem> + + <listitem override='bullet'><para><command>/usr/bin/yacc</command> is a + symbolic link to <command>bison</command> or a small script that + executes bison.</para></listitem> + + </itemizedlist> + </important> + + <important> + <para>To re-emphasize the build process:</para> + + <orderedlist numeration="arabic" spacing="compact"> + <listitem> + <para>Place all the sources and patches in a directory that will be + accessible from the chroot environment such as + <filename class="directory">/mnt/lfs/sources/</filename>.<!-- Do + <emphasis>not</emphasis> put sources in + <filename class="directory">/mnt/lfs/tools/</filename>. --></para> + </listitem> + <listitem> + <para>Change to the sources directory.</para> + </listitem> + <listitem id='buildinstr' xreflabel='Package build instructions'> + <para>For each package:</para> + <orderedlist numeration="loweralpha" spacing="compact"> + <listitem> + <para>Using the <command>tar</command> program, extract the package + to be built. In Chapter 5, ensure you are the <emphasis>lfs</emphasis> + user when extracting the package.</para> + </listitem> + <listitem> + <para>Change to the directory created when the package was + extracted.</para> + </listitem> + <listitem> + <para>Follow the book's instructions for building the package.</para> + </listitem> + <listitem> + <para>Change back to the sources directory.</para> + </listitem> + <listitem> + <para>Delete the extracted source directory unless instructed otherwise.</para> + </listitem> + </orderedlist> + </listitem> + </orderedlist> + </important> + </listitem> + + </itemizedlist> + +</sect1> diff --git a/chapter06/gettext.xml b/chapter06/gettext.xml index 2c4683804..34d0ee32e 100644 --- a/chapter06/gettext.xml +++ b/chapter06/gettext.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-gettext" role="wrap"> +<sect1 id="ch-tools-gettext" role="wrap"> <?dbhtml filename="gettext.html"?> <sect1info condition="script"> @@ -16,25 +16,25 @@ <title>Gettext-&gettext-version;</title> - <indexterm zone="ch-system-gettext"> + <indexterm zone="ch-tools-gettext"> <primary sortas="a-Gettext">Gettext</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Gettext package contains utilities for internationalization and - localization. These allow programs to be compiled with NLS (Native Language - Support), enabling them to output messages in the user's native - language.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/gettext.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&gettext-ch6-sbu;</seg> - <seg>&gettext-ch6-du;</seg> + <seg>&gettext-ch5-sbu;</seg> + <seg>&gettext-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -43,402 +43,42 @@ <sect2 role="installation"> <title>Installation of Gettext</title> - <!-- This has been fixed in upstream gnulib, when a new version of - gettext is released, please check #4055 to see if the change has been - picked up in this package - - As of April 11, 2018, 'TESTS = test-lock' is in gettext-runtime/tests/Makefile.am - Perhaps the test is fixed. + <para>For our temporary set of tools, we only need to install + three programs from Gettext.</para> - There is no reference to 'test' or TEST in gettext-tools/gnulib-tests/Makefile.am - --> - <!-- - <para>First, suppress two invocations of test-lock which on some machines - can loop forever:</para> - -<screen><userinput remap="pre">sed -i '/^TESTS =/d' gettext-runtime/tests/Makefile.in && -sed -i 's/test-lock..EXEEXT.//' gettext-tools/gnulib-tests/Makefile.in</userinput></screen>--> - - <!-- As of April 11, 2018 appdata.* is NOT in git master, but appears - to be in metainfo.{its,loc}, When updating, check BLFS gnome-screenshot. --> - -<!-- - <para>Now fix a configuration file:</para> - -<screen><userinput remap="pre">sed -e '/AppData/{N;N;p;s/\.appdata\./.metainfo./}' \ - -i gettext-tools/its/appdata.loc</userinput></screen> ---> <para>Prepare Gettext for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr \ - --disable-static \ - --docdir=/usr/share/doc/gettext-&gettext-version;</userinput></screen> +<screen><userinput remap="configure">./configure --disable-shared</userinput></screen> - <para>Compile the package:</para> - -<screen><userinput remap="make">make BISON_LOCALEDIR=/usr/share/locale</userinput></screen> - - <variablelist> - <title>The meaning of the make parameter:</title> + <variablelist> + <title>The meaning of the configure option:</title> <varlistentry> - <term><parameter>BISON_LOCALEDIR=/usr/share/locale</parameter></term> + <term><parameter>--disable-shared</parameter></term> <listitem> - <para>Since bison is not yet installed in /usr, configure hardcodes - the directory containing translations for the bison program (the - "locale" directory) as /tools/share/locale. Passing this variable - to make allows overriding the choice made by configure.</para> + <para>We do not need to install any of the shared Gettext libraries at + this time, therefore there is no need to build them.</para> </listitem> </varlistentry> </variablelist> - <para>To test the results (this takes a long time, around 3 SBUs), - issue:</para> + <para>Compile the package:</para> -<screen><userinput remap="test">make check</userinput></screen> +<screen><userinput remap="make">make</userinput></screen> - <para>Install the package:</para> + <para>Install the <command>msgfmt</command>, <command>msgmerge</command> and + <command>xgettext</command> programs:</para> -<screen><userinput remap="install">make install -chmod -v 0755 /usr/lib/preloadable_libintl.so</userinput></screen> +<screen><userinput remap="install">cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin</userinput></screen> </sect2> - <sect2 id="contents-gettext" role="content"> - <title>Contents of Gettext</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed libraries</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - <seg>autopoint, envsubst, gettext, gettext.sh, - gettextize, msgattrib, msgcat, msgcmp, msgcomm, msgconv, msgen, - msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt, msguniq, - ngettext, recode-sr-latin, and xgettext</seg> - <seg>libasprintf.so, libgettextlib.so, libgettextpo.so, - libgettextsrc.so, libtextstyle.so, and preloadable_libintl.so</seg> - <seg>/usr/lib/gettext, /usr/share/doc/gettext-&gettext-version;, - /usr/share/gettext, and /usr/share/gettext-0.19.8</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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="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="gettext.sh"> - <term><command>gettext.sh</command></term> - <listitem> - <para>Primarily serves as a shell function library for gettext</para> - <indexterm zone="ch-system-gettext gettext.sh"> - <primary sortas="b-gettext.sh">gettext.sh</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="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 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 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="recode-sr-latin"> - <term><command>recode-sr-latin</command></term> - <listitem> - <para>Recodes Serbian text from Cyrillic to Latin script</para> - <indexterm zone="ch-system-gettext recode-sr-latin"> - <primary sortas="b-recode-sr-latin">recode-sr-latin</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><string></emphasis> strings and the - <emphasis><iostream></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> - - <varlistentry id="libtextstyle"> - <term><filename class="libraryfile">libtextstyle</filename></term> - <listitem> - <para>Text styling library</para> - <indexterm zone="ch-system-gettext libtextstyle"> - <primary sortas="c-libtextstyle">libtextstyle</primary> - </indexterm> - </listitem> - </varlistentry> + <sect2 role="content"> + <title/> - <varlistentry id="preloadable_libintl"> - <term><filename class="libraryfile">preloadable_libintl</filename></term> - <listitem> - <para>A library, intended to be used by LD_PRELOAD that assists - <filename class="libraryfile">libintl</filename> in logging - untranslated messages</para> - <indexterm zone="ch-system-gettext preloadable_libintl"> - <primary sortas="c-preloadable_libintl">preloadable_libintl</primary> - </indexterm> - </listitem> - </varlistentry> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-gettext" role="."/></para> </sect2> diff --git a/chapter06/glibc.xml b/chapter06/glibc.xml index a422c8d3c..5213c23e5 100644 --- a/chapter06/glibc.xml +++ b/chapter06/glibc.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-glibc" role="wrap"> +<sect1 id="ch-tools-glibc" role="wrap"> <?dbhtml filename="glibc.html"?> <sect1info condition="script"> @@ -16,25 +16,25 @@ <title>Glibc-&glibc-version;</title> - <indexterm zone="ch-system-glibc"> + <indexterm zone="ch-tools-glibc"> <primary sortas="a-Glibc">Glibc</primary> + <secondary>tools</secondary> </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> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/glibc.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&glibc-ch6-sbu;</seg> - <seg>&glibc-ch6-du;</seg> + <seg>&glibc-ch5-sbu;</seg> + <seg>&glibc-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -43,927 +43,187 @@ <sect2 role="installation"> <title>Installation of Glibc</title> + <para>First, create two symbolic links, which are needed for proper + operation of the dynamic library loader:</para> + +<screen><userinput remap="pre">ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 +ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3</userinput></screen> + <para>Some of the Glibc programs use the non-FHS compliant - <filename class="directory">/var/db</filename> directory to store - their runtime data. Apply the following patch to make such programs - store their runtime data in the FHS-compliant locations:</para> + <filename class="directory">/var/db</filename> directory to store their + runtime data. Apply the following patch to make such programs store their + runtime data in the FHS-compliant locations:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../glibc-&glibc-version;-fhs-1.patch</userinput></screen> -<screen><userinput remap="pre">patch -Np1 -i ../&glibc-fhs-patch;</userinput></screen> -<!-- - <para>Fix a minor security issue with glob functions:</para> - -<screen><userinput remap="pre">patch -Np1 -i ../&glibc-glob-patch;</userinput></screen> ---> -<!-- No longer needed - <para>Fix a problem introduced with the linux-5.2 kernel:</para> - -<screen><userinput remap="pre">sed -i '/asm.socket.h/a# include <linux/sockios.h>' \ - sysdeps/unix/sysv/linux/bits/socket.h</userinput></screen> -=== already done === - <para>Create a symlink for LSB - compliance. Additionally, for x86_64, create a compatibility symlink - required for the dynamic loader to function correctly:</para> - -<screen><userinput remap="pre">case $(uname -m) in - i?86) ln -sfv ld-linux.so.2 /lib/ld-lsb.so.3 - ;; - x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64 - ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3 - ;; -esac</userinput></screen> - - <para>Remove a file that may be left over from a previous build attempt: - </para> - -<screen><userinput remap="pre">rm -f /usr/include/limits.h</userinput></screen> ---> <para>The Glibc documentation recommends building Glibc in a dedicated build directory:</para> <screen><userinput remap="pre">mkdir -v build cd build</userinput></screen> - <para>Prepare Glibc for compilation:</para> + <para>Next, prepare Glibc for compilation:</para> + +<screen><userinput remap="configure">../configure \ + --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(../scripts/config.guess) \ + --enable-kernel=&min-kernel; \ + --with-headers=$LFS/usr/include \ + libc_cv_slibdir=/lib</userinput></screen> +<!-- + libc_cv_forced_unwind=yes \ + libc_cv_c_cleanup=yes</userinput></screen> --> -<screen><userinput remap="configure">../configure --prefix=/usr \ - --disable-werror \ - --enable-kernel=&min-kernel; \ - --enable-stack-protector=strong \ - --with-headers=/usr/include \ - libc_cv_slibdir=/lib</userinput></screen> - <!-- WIP --> <variablelist> - <title>The meaning of the options and new configure parameters:</title> + <title>The meaning of the configure options:</title> <varlistentry> - <term><parameter>CC="gcc -ffile-prefix-map=$LFS_DIR=$DIR"</parameter></term> + <term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term> <listitem> - <para>Make GCC record any references to files in <filename - class="directory">/usr/lib/gcc/x86_64-lfs-linux-gnu</filename> - in result of the compilation as if the files resided in <filename - class="directory">/usr/lib/gcc/x86_64-pc-linux-gnu</filename>. - This avoids introduction of invalid paths in debugging - symbols.</para> + <para>The combined effect of these switches is that Glibc's build system + configures itself to be cross-compiled, using the cross-linker and + cross-compiler in <filename class="directory">/tools</filename>.</para> </listitem> </varlistentry> <varlistentry> - <term><parameter>--disable-werror</parameter></term> + <term><parameter>--enable-kernel=&min-kernel;</parameter></term> <listitem> - <para>This option disables the -Werror option passed to - GCC. This is necessary for running the test suite.</para> + <para>This tells Glibc to compile the library with support + for &min-kernel; and later Linux kernels. Workarounds for older + kernels are not enabled.</para> </listitem> </varlistentry> <varlistentry> - <term><parameter>--enable-stack-protector=strong</parameter></term> - <listitem> - <para>This option increases system security by adding - extra code to check for buffer overflows, such as stack - smashing attacks.</para> - </listitem> - </varlistentry> -<!-- do we need this one? --> - <varlistentry> - <term><parameter>--with-headers=/usr/include</parameter></term> + <term><parameter>--with-headers=$LFS/usr/include</parameter></term> <listitem> - <para>This option tells the build system where to find the - kernel API headers.</para> + <para>This tells Glibc to compile itself against the headers recently + installed to the usr/include directory, so that it knows exactly what + features the kernel has and can optimize itself accordingly.</para> </listitem> </varlistentry> <varlistentry> <term><parameter>libc_cv_slibdir=/lib</parameter></term> <listitem> - <para>This variable sets the correct library for all - systems. We do not want lib64 to be used.</para> + <para>This ensures that the library is installed in /lib instead + of the default /lib64 on 64 bit machines.</para> </listitem> </varlistentry> - - </variablelist> - - <para>Compile the package:</para> - -<screen><userinput remap="make">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>Generally a few tests do not pass. The test failures listed below - are usually safe to ignore.</para> - -<!-- Use remap="make" here to work around a jhalfs issue. --> -<screen><userinput remap="make">case $(uname -m) in - i?86) ln -sfnv $PWD/elf/ld-linux.so.2 /lib ;; - x86_64) ln -sfnv $PWD/elf/ld-linux-x86-64.so.2 /lib ;; -esac</userinput></screen> - - <note><para>The symbolic link above is needed to run the tests at this - stage of building in the chroot environment. It will be overwritten - in the install phase below.</para></note> - -<screen><userinput remap="test">make check</userinput></screen> - - <para>You may see some test failures. The Glibc test suite is - somewhat dependent on the host system. This is a list of the most common - issues seen for some versions of LFS:</para> - - <itemizedlist> - - <listitem> - <para><emphasis>misc/tst-ttyname</emphasis> - is known to fail in the LFS chroot environment.</para> - </listitem> - - <listitem> - <para><emphasis>inet/tst-idna_name_classify</emphasis> - is known to fail in the LFS chroot environment.</para> - </listitem> - - <listitem> - <para><emphasis>posix/tst-getaddrinfo4</emphasis> and - <emphasis>posix/tst-getaddrinfo5</emphasis> - may fail on some architectures.</para> - </listitem> - - <listitem> - <para>The <emphasis>nss/tst-nss-files-hosts-multi</emphasis> - test may fail for reasons that have not been determined.</para> - </listitem> - - <listitem> - <para>The <emphasis>rt/tst-cputimer{1,2,3}</emphasis> tests depend on - the host system kernel. Kernels 4.14.91–4.14.96, - 4.19.13–4.19.18, and 4.20.0–4.20.5 are known to - cause these tests to fail. - </para> - </listitem> - - <listitem> - <para>The math tests sometimes fail when running on - systems where the CPU is not a relatively new Intel or - AMD processor.</para> - </listitem> <!-- - <listitem> - <para>The - <emphasis>nptl/tst-thread-affinity-{pthread,pthread2,sched}</emphasis> - tests may fail for reasons that have not been determined. </para> - </listitem> - - <listitem> - <para>Other tests known to fail on some architectures are - malloc/tst-malloc-usable and nptl/tst-cleanupx4. </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 remap="install">touch /etc/ld.so.conf</userinput></screen> - - <para>Fix the generated Makefile to skip an unneeded sanity check - that fails in the LFS partial environment: - </para> - -<screen><userinput remap="install">sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile</userinput></screen> - - <para>Install the package:</para> - -<screen><userinput remap="install">make install</userinput></screen> - - <para>Install the configuration file and runtime directory for - <command>nscd</command>:</para> - -<screen><userinput remap="install">cp -v ../nscd/nscd.conf /etc/nscd.conf -mkdir -pv /var/cache/nscd</userinput></screen> - - <para revision="systemd">Install the systemd support files for - <command>nscd</command>:</para> - - <screen revision="systemd"><userinput remap="install">install -v -Dm644 ../nscd/nscd.tmpfiles /usr/lib/tmpfiles.d/nscd.conf -install -v -Dm644 ../nscd/nscd.service /lib/systemd/system/nscd.service</userinput></screen> - - <para>Next, install the locales that can make the system respond in a - different language. None of the locales are required, but if some of them - are missing, the test suites of future packages would skip important - testcases.</para> - - <para>Individual locales can be installed using the - <command>localedef</command> program. E.g., the first - <command>localedef</command> command below combines the - <filename>/usr/share/i18n/locales/cs_CZ</filename> - charset-independent locale definition with the - <filename>/usr/share/i18n/charmaps/UTF-8.gz</filename> - charmap definition and appends the result to the - <filename>/usr/lib/locale/locale-archive</filename> file. - The following instructions will install the minimum set of - locales necessary for the optimal coverage of tests:</para> - -<screen role="nodump"><userinput remap="locale-test">mkdir -pv /usr/lib/locale -localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true -localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8 -localedef -i de_DE -f ISO-8859-1 de_DE -localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro -localedef -i de_DE -f UTF-8 de_DE.UTF-8 -localedef -i el_GR -f ISO-8859-7 el_GR -localedef -i en_GB -f UTF-8 en_GB.UTF-8 -localedef -i en_HK -f ISO-8859-1 en_HK -localedef -i en_PH -f ISO-8859-1 en_PH -localedef -i en_US -f ISO-8859-1 en_US -localedef -i en_US -f UTF-8 en_US.UTF-8 -localedef -i es_MX -f ISO-8859-1 es_MX -localedef -i fa_IR -f UTF-8 fa_IR -localedef -i fr_FR -f ISO-8859-1 fr_FR -localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro -localedef -i fr_FR -f UTF-8 fr_FR.UTF-8 -localedef -i it_IT -f ISO-8859-1 it_IT -localedef -i it_IT -f UTF-8 it_IT.UTF-8 -localedef -i ja_JP -f EUC-JP ja_JP -localedef -i ja_JP -f SHIFT_JIS ja_JP.SIJS 2> /dev/null || true -localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 -localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R -localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 -localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 -localedef -i zh_CN -f GB18030 zh_CN.GB18030 -localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS</userinput></screen> - - <para>In addition, install the locale for your own country, language and - character set.</para> - - <para>Alternatively, install all locales listed in the - <filename>glibc-&glibc-version;/localedata/SUPPORTED</filename> file - (it includes every locale listed above and many more) at once with the - following time-consuming command:</para> - -<screen><userinput remap="locale-full">make localedata/install-locales</userinput></screen> - - <para>Then use the <command>localedef</command> command to create and - install locales not listed in the - <filename>glibc-&glibc-version;/localedata/SUPPORTED</filename> file - in the unlikely case you need them.</para> - - <note><para>Glibc now uses libidn2 when resolving internationalized - domain names. This is a run time dependency. If this capability - is needed, the instructions for installing libidn2 are in the - <ulink url="&blfs-book;general/libidn2.html">BLFS libidn2 page</ulink>. - </para></note> - - </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> - - <sect3> - <title>Adding nsswitch.conf</title> - - <para>The <filename>/etc/nsswitch.conf</filename> file needs to be created - because the Glibc defaults do not work well in a networked environment. - </para> - - <para>Create a new file <filename>/etc/nsswitch.conf</filename> by running the - following:</para> - -<screen><userinput>cat > /etc/nsswitch.conf << "EOF" -<literal># Begin /etc/nsswitch.conf - -passwd: files -group: files -shadow: files - -hosts: files dns -networks: files - -protocols: files -services: files -ethers: files -rpc: files - -# End /etc/nsswitch.conf</literal> -EOF</userinput></screen> - - </sect3> - - <sect3> - <title>Adding time zone data</title> - - <para>Install and set up the time zone data with the following:</para> -<screen><userinput>tar -xf ../../tzdata&tzdata-version;.tar.gz - -ZONEINFO=/usr/share/zoneinfo -mkdir -pv $ZONEINFO/{posix,right} - -for tz in etcetera southamerica northamerica europe africa antarctica \ - asia australasia backward pacificnew systemv; do - zic -L /dev/null -d $ZONEINFO ${tz} - zic -L /dev/null -d $ZONEINFO/posix ${tz} - zic -L leapseconds -d $ZONEINFO/right ${tz} -done - -cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO -zic -d $ZONEINFO -p America/New_York -unset ZONEINFO</userinput></screen> - - <variablelist> - <title>The meaning of the zic commands:</title> - - <varlistentry> - <term><parameter>zic -L /dev/null ...</parameter></term> - <listitem> - <para>This creates posix time zones, without any leap seconds. It is - conventional to put these in both - <filename class="directory">zoneinfo</filename> and - <filename class="directory">zoneinfo/posix</filename>. It is - necessary to put the POSIX time zones in - <filename class="directory">zoneinfo</filename>, otherwise various - test-suites will report errors. On an embedded system, where space is - tight and you do not intend to ever update the time zones, you could save - 1.9MB by not using the <filename class="directory">posix</filename> - directory, but some applications or test-suites might produce some - failures.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><parameter>zic -L leapseconds ...</parameter></term> - <listitem> - <para>This creates right time zones, including leap seconds. On an - embedded system, where space is tight and you do not intend to - ever update the time zones, or care about the correct time, you could - save 1.9MB by omitting the <filename class="directory">right</filename> - directory.</para> - </listitem> - </varlistentry> <varlistentry> - <term><parameter>zic ... -p ...</parameter></term> - <listitem> - <para>This creates the <filename>posixrules</filename> file. We use - New York because POSIX requires the daylight savings time rules - to be in accordance with US rules.</para> - </listitem> - </varlistentry> - </variablelist> - - - <para>One way to determine the local time zone is to run the following - script:</para> - -<screen role="nodump"><userinput>tzselect</userinput></screen> - - <para>After answering a few questions about the location, the script will - output the name of the time zone (e.g., - <emphasis>America/Edmonton</emphasis>). There are also some other possible - time zones listed in <filename - class='directory'>/usr/share/zoneinfo</filename> such as - <emphasis>Canada/Eastern</emphasis> or <emphasis>EST5EDT</emphasis> that - are not identified by the script but can be used.</para> - - <para>Then create the <filename>/etc/localtime</filename> file by - running:</para> - -<screen><userinput>ln -sfv /usr/share/zoneinfo/<replaceable><xxx></replaceable> /etc/localtime</userinput></screen> - - <para>Replace <replaceable><xxx></replaceable> with the name of the - time zone selected (e.g., Canada/Eastern).</para> - - </sect3> - - <sect3 id="conf-ld" role="configuration"> - <title>Configuring the 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> - -<screen><userinput>cat > /etc/ld.so.conf << "EOF" -<literal># Begin /etc/ld.so.conf -/usr/local/lib -/opt/lib -</literal> -EOF</userinput></screen> - - <para>If desired, the dynamic loader can also search a directory and - include the contents of files found there. Generally the files in - this include directory are one line specifying the desired library path. - To add this capability run the following commands:</para> - -<screen role="nodump"><userinput>cat >> /etc/ld.so.conf << "EOF" -<literal># Add an include directory -include /etc/ld.so.conf.d/*.conf -</literal> -EOF -mkdir -pv /etc/ld.so.conf.d</userinput></screen> - - </sect3> - </sect2> - - <sect2 id="contents-glibc" role="content"> - <title>Contents of Glibc</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed libraries</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - <seg>catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, - ldd, lddlibc4, locale, localedef, makedb, mtrace, nscd, - pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace, - zdump, and zic</seg> - <seg>ld-&glibc-version;.so, libBrokenLocale.{a,so}, libSegFault.so, libanl.{a,so}, - libc.{a,so}, libc_nonshared.a, - libcrypt.{a,so}, libdl.{a,so}, libg.a, libm.{a,so}, - libmcheck.a, libmemusage.so, libmvec.{a,so}, libnsl.{a,so}, - libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, - libpcprofile.so, libpthread.{a,so}, - libpthread_nonshared.a, libresolv.{a,so}, librt.{a,so}, - libthread_db.so, and libutil.{a,so}</seg> - <seg>/usr/include/arpa, /usr/include/bits, /usr/include/gnu, - /usr/include/net, /usr/include/netash, /usr/include/netatalk, - /usr/include/netax25, /usr/include/neteconet, /usr/include/netinet, - /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, - /usr/include/netrom, /usr/include/netrose, /usr/include/nfs, - /usr/include/protocols, /usr/include/rpc, - /usr/include/sys, /usr/lib/audit, /usr/lib/gconv, /usr/lib/locale, - /usr/libexec/getconf, /usr/share/i18n, /usr/share/zoneinfo, - /var/cache/nscd, and /var/lib/nss_db</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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> + <term><parameter>libc_cv_c_cleanup=yes</parameter></term> <listitem> - <para>Prints various information about the current locale</para> - <indexterm zone="ch-system-glibc locale"> - <primary sortas="b-locale">locale</primary> - </indexterm> + <para>Similarly, we pass libc_cv_c_cleanup=yes through to the + <command>configure</command> script so that the test is skipped and C + cleanup handling support is configured.</para> </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="makedb"> - <term><command>makedb</command></term> - <listitem> - <para>Creates a simple database from textual input</para> - <indexterm zone="ch-system-glibc makedb"> - <primary sortas="b-makedb">makedb</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="mtrace"> - <term><command>mtrace</command></term> - <listitem> - <para>Reads and interprets a memory trace file and displays 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="pcprofiledump"> - <term><command>pcprofiledump</command></term> + <varlistentry> + <term><parameter>libc_cv_ctors_header=yes</parameter></term> <listitem> - <para>Dump information generated by PC profiling</para> - <indexterm zone="ch-system-glibc pcprofiledump"> - <primary sortas="b-pcprofiledump">pcprofiledump</primary> - </indexterm> + <para>Similarly, we pass libc_cv_ctors_header=yes through to the + <command>configure</command> script so that the test is skipped and + gcc constructor support is configured.</para> </listitem> - </varlistentry> + </varlistentry>--> - <varlistentry id="pldd"> - <term><command>pldd</command></term> - <listitem> - <para>Lists dynamic shared objects used by running processes</para> - <indexterm zone="ch-system-glibc pldd"> - <primary sortas="b-pldd">pldd</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> + </variablelist> - <varlistentry id="sotruss"> - <term><command>sotruss</command></term> - <listitem> - <para>Traces shared library procedure calls of a specified command</para> - <indexterm zone="ch-system-glibc sotruss"> - <primary sortas="b-sotruss">sotruss</primary> - </indexterm> - </listitem> - </varlistentry> + <para>During this stage the following warning might appear:</para> - <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> + <blockquote> +<screen><computeroutput>configure: WARNING: +*** These auxiliary programs are missing or +*** incompatible versions: msgfmt +*** some features will be disabled. +*** Check the INSTALL file for required versions.</computeroutput></screen> + </blockquote> - <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> + <para>The missing or incompatible <command>msgfmt</command> program is + generally harmless. This <command>msgfmt</command> program is part of the + Gettext package which the host distribution should provide.</para> - <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> + <note><para>There have been reports that this package may fail when + building as a "parallel make". If this occurs, rerun the make command + with a "-j1" option.</para></note> - <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> + <para>Compile the package:</para> - <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> +<screen><userinput remap="make">make</userinput></screen> - <varlistentry id="ld.so"> - <term><filename class="libraryfile">ld-&glibc-version;.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-&glibc-version;.so</primary> - </indexterm> - </listitem> - </varlistentry> + <para>Install the package:</para> - <varlistentry id="libBrokenLocale"> - <term><filename class="libraryfile">libBrokenLocale</filename></term> - <listitem> - <para>Used internally by Glibc as a gross hack to get broken programs - (e.g., some Motif applications) running. See comments in - <filename>glibc-&glibc-version;/locale/broken_cur_max.c</filename> - for more information</para> - <indexterm zone="ch-system-glibc libBrokenLocale"> - <primary sortas="c-libBrokenLocale">libBrokenLocale</primary> - </indexterm> - </listitem> - </varlistentry> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> - <varlistentry id="libSegFault"> - <term><filename class="libraryfile">libSegFault</filename></term> - <listitem> - <para>The segmentation fault signal handler, used by - <command>catchsegv</command></para> - <indexterm zone="ch-system-glibc libSegFault"> - <primary sortas="c-libSegFault">libSegFault</primary> - </indexterm> - </listitem> - </varlistentry> + <variablelist> + <title>The meaning of the <command>make install</command> option:</title> - <varlistentry id="libanl"> - <term><filename class="libraryfile">libanl</filename></term> + <varlistentry> + <term><parameter>DESTDIR=$LFS</parameter></term> <listitem> - <para>An asynchronous name lookup library</para> - <indexterm zone="ch-system-glibc libanl"> - <primary sortas="c-libanl">libanl</primary> - </indexterm> + <para>The <envar>DESTDIR</envar> make variable is used by almost all + packages to define the location where the package should be + installed. If it is not set, it defaults to the root (<filename + class="directory">/</filename>) directory. Here we specify that + the package be installed in <filename class="directory">$LFS + </filename>, which will become the root after <xref linkend= + "ch-tools-chroot"/>.</para> </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> + </variablelist> - <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> + <caution> + <para>At this point, it is imperative to stop and ensure that the basic + functions (compiling and linking) of the new toolchain are working as + expected. To perform a sanity check, run the following commands:</para> - <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> +<screen><userinput>echo 'int main(){}' > dummy.c +$LFS_TGT-gcc dummy.c +readelf -l a.out | grep '/ld-linux'</userinput></screen> - <varlistentry id="libg"> - <term><filename class="libraryfile">libg</filename></term> - <listitem> - <para>Dummy library containing no functions. Previously was a runtime - library for <command>g++</command></para> - <indexterm zone="ch-system-glibc libg"> - <primary sortas="c-libg">libg</primary> - </indexterm> - </listitem> - </varlistentry> + <para>If everything is working correctly, there should be no errors, + and the output of the last command will be of the form:</para> - <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> +<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen> - <varlistentry id="libmcheck"> - <term><filename class="libraryfile">libmcheck</filename></term> - <listitem> - <para>Turns on memory allocation checking when linked to</para> - <indexterm zone="ch-system-glibc libmcheck"> - <primary sortas="c-libmcheck">libmcheck</primary> - </indexterm> - </listitem> - </varlistentry> + <para>Note that for 32-bit machines, the interpreter name will be + <filename>/lib/ld-linux.so.2</filename>.</para> - <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> + <para>If the output is not shown as above or there was no output at all, + then something is wrong. Investigate and retrace the steps to find out + where the problem is and correct it. This issue must be resolved before + continuing on.</para> - <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> + <para>Once all is well, clean up the test files:</para> - <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> +<screen><userinput>rm -v dummy.c a.out</userinput></screen> - <varlistentry id="libpcprofile"> - <term><filename class="libraryfile">libpcprofile</filename></term> - <listitem> - <para>Can be preloaded to PC profile an executable</para> - <indexterm zone="ch-system-glibc libpcprofile"> - <primary sortas="c-libpcprofile">libpcprofile</primary> - </indexterm> - </listitem> - </varlistentry> + </caution> - <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> + <note><para>Building packages in the next sections will serve as an + additional check that the toolchain has been built properly. If some + package, especially binutils-pass2 or gcc-pass2, fails to build, it is + an indication that something has gone wrong with the + previous Binutils, GCC, or Glibc installations.</para></note> - <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> + <para>Now that our cross-toolchain is complete, finalize the installation + of the limits.h header. For doing so, run an utility provided by the GCC + developers:</para> - <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> +<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen> - <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> + </sect2> - <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> + <sect2 role="content"> + <title/> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-glibc" role="."/></para> </sect2> diff --git a/chapter06/grep.xml b/chapter06/grep.xml index 58b0db366..6a8ada4b8 100644 --- a/chapter06/grep.xml +++ b/chapter06/grep.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-grep" role="wrap"> +<sect1 id="ch-tools-grep" role="wrap"> <?dbhtml filename="grep.html"?> <sect1info condition="script"> @@ -16,22 +16,25 @@ <title>Grep-&grep-version;</title> - <indexterm zone="ch-system-grep"> + <indexterm zone="ch-tools-grep"> <primary sortas="a-Grep">Grep</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Grep package contains programs for searching through files.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/grep.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&grep-ch6-sbu;</seg> - <seg>&grep-ch6-du;</seg> + <seg>&grep-ch5-sbu;</seg> + <seg>&grep-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -42,69 +45,25 @@ <para>Prepare Grep for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr --bindir=/bin</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --bindir=/bin</userinput></screen> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> </sect2> - <sect2 id="contents-grep" role="content"> - <title>Contents of Grep</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - - <seglistitem> - <seg>egrep, fgrep, and grep</seg> - </seglistitem> - </segmentedlist> + <sect2 role="content"> + <title/> - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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> + <para>Details on this package are located in + <xref linkend="contents-grep" role="."/></para> </sect2> diff --git a/chapter06/grub.xml b/chapter06/grub.xml deleted file mode 100644 index 25a61077b..000000000 --- a/chapter06/grub.xml +++ /dev/null @@ -1,374 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" - "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ - <!ENTITY % general-entities SYSTEM "../general.ent"> - %general-entities; -]> - -<sect1 id="ch-system-grub" role="wrap"> - <?dbhtml filename="grub.html"?> - - <sect1info condition="script"> - <productname>grub</productname> - <productnumber>&grub-version;</productnumber> - <address>&grub-url;</address> - </sect1info> - - <title>GRUB-&grub-version;</title> - - <indexterm zone="ch-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> - <segtitle>&diskspace;</segtitle> - - <seglistitem> - <seg>&grub-ch6-sbu;</seg> - <seg>&grub-ch6-du;</seg> - </seglistitem> - </segmentedlist> - - </sect2> - - <sect2 role="installation"> - <title>Installation of GRUB</title> - - <para>Prepare GRUB for compilation:</para> - -<screen><userinput remap="configure">./configure --prefix=/usr \ - --sbindir=/sbin \ - --sysconfdir=/etc \ - --disable-efiemu \ - --disable-werror</userinput></screen> - - <variablelist> - <title>The meaning of the new configure options:</title> - - <varlistentry> - <term><parameter>--disable-werror</parameter></term> - <listitem> - <para>This allows the build to complete with warnings introduced - by more recent Flex versions.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><parameter>--disable-efiemu</parameter></term> - <listitem> - <para>This option minimizes what is built by disabling a feature and - testing programs not needed for LFS.</para> - </listitem> - </varlistentry> - - </variablelist> - - <para>Compile the package:</para> - -<screen><userinput remap="make">make</userinput></screen> - - <para>This package does not come with a test suite.</para> - - <para>Install the package:</para> - -<screen><userinput remap="install">make install -mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions</userinput></screen> - - <para>Using GRUB to make your LFS system bootable will be discussed in - <xref linkend="ch-bootable-grub"/>.</para> - - </sect2> - - <sect2 id="contents-gRUB" role="content"> - <title>Contents of GRUB</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - - <seg>grub-bios-setup, grub-editenv, grub-file, grub-fstest, - grub-glue-efi, grub-install, grub-kbdcomp, grub-macbless, - grub-menulst2cfg, grub-mkconfig, - grub-mkimage, grub-mklayout, grub-mknetdir, - grub-mkpasswd-pbkdf2, grub-mkrelpath, grub-mkrescue, grub-mkstandalone, - grub-ofpathname, grub-probe, grub-reboot, grub-render-label, - grub-script-check, - grub-set-default, grub-sparc64-setup, and grub-syslinux2cfg</seg> - - <seg>/usr/lib/grub, /etc/grub.d, /usr/share/grub, and /boot/grub (when grub-install - is first run)</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="grub-bios-setup"> - <term><command>grub-bios-setup</command></term> - <listitem> - <para>Is a helper program for grub-install</para> - <indexterm zone="ch-system-grub grub-bios-setup"> - <primary sortas="b-grub-bios-setup">grub-bios-setup</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-editenv"> - <term><command>grub-editenv</command></term> - <listitem> - <para>A tool to edit the environment block</para> - <indexterm zone="ch-system-grub grub-editenv"> - <primary sortas="b-grub-editenv">grub-editenv</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-file"> - <term><command>grub-file</command></term> - <listitem> - <para>Checks if FILE is of the specified type.</para> - <indexterm zone="ch-system-grub grub-file"> - <primary sortas="b-grub-file">grub-file</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-fstest"> - <term><command>grub-fstest</command></term> - <listitem> - <para>Tool to debug the filesystem driver</para> - <indexterm zone="ch-system-grub grub-fstest"> - <primary sortas="b-grub-fstest">grub-fstest</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-glue-efi"> - <term><command>grub-glue-efi</command></term> - <listitem> - <para>Processes ia32 and amd64 EFI images and glues them - according to Apple format.</para> - <indexterm zone="ch-system-grub grub-glue-efi"> - <primary sortas="b-grub-glue-efi">grub-glue-efi</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-install"> - <term><command>grub-install</command></term> - <listitem> - <para>Install GRUB on your drive</para> - <indexterm zone="ch-system-grub grub-install"> - <primary sortas="b-grub-install">grub-install</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-kbdcomp"> - <term><command>grub-kbdcomp</command></term> - <listitem> - <para>Script that converts an xkb layout into one recognized by - GRUB</para> - <indexterm zone="ch-system-grub grub-kbdcomp"> - <primary sortas="b-grub-kbdcomp">grub-kbdcomp</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-macbless"> - <term><command>grub-macbless</command></term> - <listitem> - <para>Mac-style bless on HFS or HFS+ files</para> - <indexterm zone="ch-system-grub grub-macbless"> - <primary sortas="b-grub-macbless">grub-macbless</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-menulst2cfg"> - <term><command>grub-menulst2cfg</command></term> - <listitem> - <para>Converts a GRUB Legacy <filename>menu.lst</filename> - into a <filename>grub.cfg</filename> for use with GRUB 2</para> - <indexterm zone="ch-system-grub grub-menulst2cfg"> - <primary sortas="b-grub-menulst2cfg">grub-menulst2cfg</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-mkconfig"> - <term><command>grub-mkconfig</command></term> - <listitem> - <para>Generate a grub config file</para> - <indexterm zone="ch-system-grub grub-mkconfig"> - <primary sortas="b-grub-mkconfig">grub-mkconfig</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-mkimage"> - <term><command>grub-mkimage</command></term> - <listitem> - <para>Make a bootable image of GRUB</para> - <indexterm zone="ch-system-grub grub-mkimage"> - <primary sortas="b-grub-mkimage">grub-mkimage</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-mklayout"> - <term><command>grub-mklayout</command></term> - <listitem> - <para>Generates a GRUB keyboard layout file</para> - <indexterm zone="ch-system-grub grub-mklayout"> - <primary sortas="b-grub-mklayout">grub-mklayout</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-mknetdir"> - <term><command>grub-mknetdir</command></term> - <listitem> - <para>Prepares a GRUB netboot directory</para> - <indexterm zone="ch-system-grub grub-mknetdir"> - <primary sortas="b-grub-mknetdir">grub-mknetdir</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-mkpasswd-pbkdf2"> - <term><command>grub-mkpasswd-pbkdf2</command></term> - <listitem> - <para>Generates an encrypted PBKDF2 password for use in the boot - menu</para> - <indexterm zone="ch-system-grub grub-mkpasswd-pbkdf2"> - <primary sortas="b-grub-mkpasswd-pbkdf2">grub-mkpasswd-pbkdf2</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-mkrelpath"> - <term><command>grub-mkrelpath</command></term> - <listitem> - <para>Makes a system pathname relative to its root</para> - <indexterm zone="ch-system-grub grub-mkrelpath"> - <primary sortas="b-grub-mkrelpath">grub-mkrelpath</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-mkrescue"> - <term><command>grub-mkrescue</command></term> - <listitem> - <para>Make a bootable image of GRUB suitable for a floppy disk or CDROM/DVD</para> - <indexterm zone="ch-system-grub grub-mkrescue"> - <primary sortas="b-grub-mkrescue">grub-mkrescue</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-mkstandalone"> - <term><command>grub-mkstandalone</command></term> - <listitem> - <para>Generates a standalone image</para> - <indexterm zone="ch-system-grub grub-mkstandalone"> - <primary sortas="b-grub-mkstandalone">grub-mkstandalone</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-ofpathname"> - <term><command>grub-ofpathname</command></term> - <listitem> - <para>Is a helper program that prints the path of a GRUB device</para> - <indexterm zone="ch-system-grub grub-ofpathname"> - <primary sortas="b-grub-ofpathname">grub-ofpathname</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-probe"> - <term><command>grub-probe</command></term> - <listitem> - <para>Probe device information for a given path or device</para> - <indexterm zone="ch-system-grub grub-probe"> - <primary sortas="b-grub-probe">grub-probe</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-reboot"> - <term><command>grub-reboot</command></term> - <listitem> - <para>Sets the default boot entry for GRUB for the next boot only</para> - <indexterm zone="ch-system-grub grub-reboot"> - <primary sortas="b-grub-reboot">grub-reboot</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-render-label"> - <term><command>grub-render-label</command></term> - <listitem> - <para>Render Apple .disk_label for Apple Macs</para> - <indexterm zone="ch-system-grub grub-render-label"> - <primary sortas="b-grub-render-label">grub-render-label</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-script-check"> - <term><command>grub-script-check</command></term> - <listitem> - <para>Checks GRUB configuration script for syntax errors</para> - <indexterm zone="ch-system-grub grub-script-check"> - <primary sortas="b-grub-script-check">grub-script-check</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-set-default"> - <term><command>grub-set-default</command></term> - <listitem> - <para>Sets the default boot entry for GRUB</para> - <indexterm zone="ch-system-grub grub-set-default"> - <primary sortas="b-grub-set-default">grub-set-default</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-sparc64-setup"> - <term><command>grub-sparc64-setup</command></term> - <listitem> - <para>Is a helper program for grub-setup</para> - <indexterm zone="ch-system-grub grub-sparc64-setup"> - <primary sortas="b-grub-sparc64-setup">grub-setup</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="grub-syslinux2cfg"> - <term><command>grub-syslinux2cfg</command></term> - <listitem> - <para>Transform a syslinux config file into grub.cfg format</para> - <indexterm zone="ch-system-grub grub-syslinux2cfg"> - <primary sortas="b-grub-syslinux2cfg">grub-syslinux2cfg</primary> - </indexterm> - </listitem> - </varlistentry> - - </variablelist> - - </sect2> - -</sect1> diff --git a/chapter06/gzip.xml b/chapter06/gzip.xml index 09eebbdf7..e5b5d0a37 100644 --- a/chapter06/gzip.xml +++ b/chapter06/gzip.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-gzip" role="wrap"> +<sect1 id="ch-tools-gzip" role="wrap"> <?dbhtml filename="gzip.html"?> <sect1info condition="script"> @@ -16,23 +16,25 @@ <title>Gzip-&gzip-version;</title> - <indexterm zone="ch-system-gzip"> + <indexterm zone="ch-tools-gzip"> <primary sortas="a-Gzip">Gzip</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Gzip package contains programs for compressing and decompressing - files.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/gzip.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&gzip-ch6-sbu;</seg> - <seg>&gzip-ch6-du;</seg> + <seg>&gzip-ch5-sbu;</seg> + <seg>&gzip-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -43,193 +45,27 @@ <para>Prepare Gzip for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr --host=$LFS_TGT</userinput></screen> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - - <para>Two tests are known to fail in the LFS environment: - help-version and zmore.</para> - <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> - <para>Move a program that needs to be on the root filesystem:</para> + <para>Move the excutable to its final expected location:</para> -<screen><userinput remap="install">mv -v /usr/bin/gzip /bin</userinput></screen> +<screen><userinput remap="install">mv -v $LFS/usr/bin/gzip $LFS/bin</userinput></screen> </sect2> - <sect2 id="contents-gzip" role="content"> - <title>Contents of Gzip</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - - <seglistitem> - <seg>gunzip, gzexe, gzip, uncompress (hard link with gunzip), zcat, zcmp, - zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore, and znew</seg> - </seglistitem> - </segmentedlist> + <sect2 role="content"> + <title/> - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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-decompressing 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>Decompresses 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—<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> + <para>Details on this package are located in + <xref linkend="contents-gzip" role="."/></para> </sect2> diff --git a/chapter06/introduction.xml b/chapter06/introduction.xml index c8ccb3908..5614270b2 100644 --- a/chapter06/introduction.xml +++ b/chapter06/introduction.xml @@ -5,70 +5,25 @@ %general-entities; ]> -<sect1 id="ch-system-introduction"> +<sect1 id="ch-tools-introduction"> <?dbhtml filename="introduction.html"?> <title>Introduction</title> - <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 you (or the system) - may need it.</para> - - <para>We do not recommend using optimizations. They 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. Also note that - the <option>-march</option> and <option>-mtune</option> options using values - not specified in the book have not been tested. This may cause problems with - the toolchain packages (Binutils, GCC and Glibc). 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>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, and how much disk - space is required during this building process. Following the installation - instructions, there is a list of programs and libraries (along with brief - descriptions of these) that the package installs.</para> - - <note><para>The SBU values and required disk space includes - test suite data for all applicable packages in Chapter 6.</para></note> - - <sect2> - <title>About libraries</title> - - <para>In general, the LFS editors discourage building and installing static - libraries. The original purpose for most static libraries has been made - obsolete in a modern Linux system. In addition linking a static library - into a program can be detrimental. If an update to the library is needed - to remove a security problem, all programs that use the static library will - need to be relinked to the new library. Since the use of static libraries - is not always obvious, the relevant programs (and the procedures needed to - do the linking) may not even be known.</para> - - <para>In the procedures in Chapter 6, we remove or disable installation of - most static libraries. Usually this is done by passing a - <option>--disable-static</option> option to <command>configure</command>. - In other cases, alternate means are needed. In a few cases, especially - glibc and gcc, the use of static libraries remains essential to the general - package building process. </para> - - <para>For a more complete discussion of libraries, see the discussion - <ulink url="&blfs-root;/view/&short-version;/introduction/libraries.html"> - Libraries: Static or shared?</ulink> in the BLFS book.</para> - - </sect2> - + <para>This chapter shows how to build a minimal Linux system. + This system will contain just enough tools to start constructing the final + LFS system in <xref linkend="chapter-building-system"/> and allow a working + environment with more user convenience than a minimum environment would.</para> + + <para>There are two steps in building this minimal system. The first step + is to build a new and host-independent toolchain (compiler, assembler, + linker, libraries, and a few useful utilities). The second step uses this + toolchain to build the other essential tools.</para> +<!-- + <para>The files compiled in this chapter will be installed under the + <filename class="directory">$LFS</filename> directory to keep them + separate from the files installed in the next chapter and the host + production directories. Since the packages compiled here are temporary, + we do not want them to pollute the soon-to-be LFS system.</para> +--> </sect1> diff --git a/chapter06/kernfs.xml b/chapter06/kernfs.xml new file mode 100644 index 000000000..dd6b8991c --- /dev/null +++ b/chapter06/kernfs.xml @@ -0,0 +1,115 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-kernfs"> + <?dbhtml filename="kernfs.html"?> + + <title>Preparing Virtual Kernel File Systems</title> + + <indexterm zone="ch-tools-kernfs"> + <primary sortas="e-/dev/">/dev/*</primary> + </indexterm> + + <para>Various file systems exported by the kernel are used to communicate to + and from the kernel itself. These file systems are virtual in that no disk + space is used for them. The content of the file systems resides in + memory.</para> + + <para>Begin by creating directories onto which the file systems will be + mounted:</para> + +<screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen> + + <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. The device nodes must be created + on the hard disk so that they are available before <command>udevd</command> + has been started, and additionally when Linux is started with + <parameter>init=/bin/bash</parameter>. Create the devices by running the + following commands:</para> + +<screen><userinput>mknod -m 600 $LFS/dev/console c 5 1 +mknod -m 666 $LFS/dev/null c 1 3</userinput></screen> + + </sect2> + + <sect2 id="ch-system-bindmount"> + <title>Mounting and Populating /dev</title> + + <para>The recommended method of populating the <filename + class="directory">/dev</filename> directory with devices is to mount a + virtual filesystem (such as <systemitem + class="filesystem">tmpfs</systemitem>) on the <filename + class="directory">/dev</filename> directory, and allow the devices to be + created dynamically on that virtual filesystem as they are detected or + accessed. Device creation is generally done during the boot process + by Udev. Since this new system does not yet have Udev and has not yet + been booted, it is necessary to mount and populate <filename + class="directory">/dev</filename> manually. This is accomplished by bind + mounting the host system's <filename class="directory">/dev</filename> + directory. A bind mount is a special type of mount that allows you to + create a mirror of a directory or mount point to some other location. Use + the following command to achieve this:</para> + +<screen><userinput>mount -v --bind /dev $LFS/dev</userinput></screen> + + </sect2> + + <sect2 id="ch-system-kernfsmount"> + <title>Mounting Virtual Kernel File Systems</title> + + <para>Now mount the remaining virtual kernel filesystems:</para> + +<screen><userinput>mount -v --bind /dev/pts $LFS/dev/pts +mount -vt proc proc $LFS/proc +mount -vt sysfs sysfs $LFS/sys +mount -vt tmpfs tmpfs $LFS/run</userinput></screen> + + <variablelist> + <title>The meaning of the mount options for devpts:</title> + + <varlistentry> + <term><parameter>gid=5</parameter></term> + <listitem> + <para>This ensures that all devpts-created device nodes are owned by + group ID 5. This is the ID we will use later on for the <systemitem + class="groupname">tty</systemitem> group. We use the group ID instead + of a name, since the host system might use a different ID for its + <systemitem class="groupname">tty</systemitem> group.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>mode=0620</parameter></term> + <listitem> + <para>This ensures that all devpts-created device nodes have mode 0620 + (user readable and writable, group writable). Together with the + option above, this ensures that devpts will create device nodes that + meet the requirements of grantpt(), meaning the Glibc + <command>pt_chown</command> helper binary (which is not installed by + default) is not necessary.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>In some host systems, <filename>/dev/shm</filename> is a + symbolic link to <filename class="directory">/run/shm</filename>. + The /run tmpfs was mounted above so in this case only a + directory needs to be created.</para> + +<screen><userinput>if [ -h $LFS/dev/shm ]; then + mkdir -pv $LFS/$(readlink $LFS/dev/shm) +fi</userinput></screen> + + </sect2> + +</sect1> diff --git a/chapter06/libstdc++-pass2.xml b/chapter06/libstdc++-pass2.xml new file mode 100644 index 000000000..999a4fa4e --- /dev/null +++ b/chapter06/libstdc++-pass2.xml @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-libstdcpp-pass2" role="wrap"> + <?dbhtml filename="gcc-libstdc++-pass2.html"?> + + <sect1info condition="script"> + <productname>gcc-libstdc++</productname> + <productnumber>&gcc-version;</productnumber> + <address>&gcc-url;</address> + </sect1info> + + <title>Libstdc++ from GCC-&gcc-version;, Pass 2</title> + + <indexterm zone="ch-tools-libstdcpp-pass2"> + <primary sortas="a-GCC">GCC</primary> + <secondary>tools, libstdc++ pass 2</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Again, when building <xref linkend="ch-tools-gcc-pass2"/>, we had to + defer the installation of the C++ standard library, because no suitable + compiler was available to compile it: we could not use the compiler + installed, because this compiler is a native + compiler, and should not be used outside of chroot without being at + risk of polluting the build with some host components.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <!-- TODO --> + <seglistitem> + <seg>&libstdcpp-ch5-sbu;</seg> + <seg>&libstdcpp-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Target Libstdc++</title> + + <note> + <para><application>Libstdc++</application> is part of the GCC sources. + You should first unpack the GCC tarball and change to the + <filename>gcc-&gcc-version;</filename> directory.</para> + </note> + + <para>Create a link which exists when building Libstdc++ in the gcc + tree:</para> + +<screen><userinput remap="pre">ln -s gthr-posix.h libgcc/gthr-default.h</userinput></screen> + + <para>Create a separate build directory for Libstdc++ and enter it:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare Libstdc++ for compilation:</para> + +<screen><userinput remap="configure">../libstdc++-v3/configure \ + CXXFLAGS="-g -O2 -D_GNU_SOURCE" \ + --prefix=/usr \ + --disable-multilib \ + --disable-nls \ + --disable-libstdcxx-pch</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>CXXFLAGS="-g -O2 -D_GNU_SOURCE"</parameter></term> + <listitem> + <para>Those flags are passed by the top level Makefile when doing + a full build of GCC.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-libstdcxx-pch</parameter></term> + <listitem> + <para>This switch prevents the installation of precompiled + include files, which are not needed at this stage.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile libstdc++ by running:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the library:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gcc" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter06/libstdc++.xml b/chapter06/libstdc++.xml new file mode 100644 index 000000000..3a1b0f2bf --- /dev/null +++ b/chapter06/libstdc++.xml @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-libstdcpp-pass1" role="wrap"> + <?dbhtml filename="gcc-libstdc++-pass1.html"?> + + <sect1info condition="script"> + <productname>gcc-libstdc++</productname> + <productnumber>&gcc-version;</productnumber> + <address>&gcc-url;</address> + </sect1info> + + <title>Libstdc++ from GCC-&gcc-version;, Pass 1</title> + + <indexterm zone="ch-tools-libstdcpp-pass1"> + <primary sortas="a-GCC">GCC</primary> + <secondary>tools, libstdc++ pass 1</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Libstdc++ is the standard C++ library. It is needed + to compile C++ code + (part of GCC is written in C++), but we had to defer its installation + when we built <xref linkend="ch-tools-gcc-pass1"/> + because it depends on glibc, which was not yet available in the target + directory. + </para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&libstdcpp-ch5-sbu;</seg> + <seg>&libstdcpp-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Target Libstdc++</title> + + <note> + <para><application>Libstdc++</application> is part of the GCC sources. + You should first unpack the GCC tarball and change to the + <filename>gcc-&gcc-version;</filename> directory.</para> + </note> + + <para>Create a separate build directory for Libstdc++ and enter it:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare Libstdc++ for compilation:</para> + +<screen><userinput remap="configure">../libstdc++-v3/configure \ + --host=$LFS_TGT \ + --build=$(../config.guess) \ + --prefix=/usr \ + --disable-multilib \ + --disable-nls \ + --disable-libstdcxx-pch \ + --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--host=...</parameter></term> + <listitem> + <para>Indicates to use the cross compiler we have just built + instead of the one in <filename>/usr/bin</filename>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-libstdcxx-pch</parameter></term> + <listitem> + <para>This switch prevents the installation of precompiled + include files, which are not needed at this stage.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</parameter></term> + <listitem> + <para>This is the location where the standard include files are + searched by the C++ compiler. In a normal build, this information + is automatically passed to the Libstdc++ <command>configure</command> + options from the top level directory. In our case, this information + must be explicitly given.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile libstdc++ by running:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the library:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gcc" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter06/linux-headers.xml b/chapter06/linux-headers.xml new file mode 100644 index 000000000..6c1af3173 --- /dev/null +++ b/chapter06/linux-headers.xml @@ -0,0 +1,207 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-linux-headers" role="wrap"> + <?dbhtml filename="linux-headers.html"?> + + <sect1info condition="script"> + <productname>linux-headers</productname> + <productnumber>&linux-version;</productnumber> + <address>&linux-url;</address> + </sect1info> + + <title>Linux-&linux-version; API Headers</title> + + <indexterm zone="ch-tools-linux-headers"> + <primary sortas="a-Linux">Linux</primary> + <secondary>tools, API headers</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Linux API Headers (in linux-&linux-version;.tar.xz) expose the + kernel's API for use by Glibc.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&linux-headers-ch5-sbu;</seg> + <seg>&linux-headers-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Linux API Headers</title> + + <para>The Linux kernel needs to expose an Application Programming Interface + (API) for the system's C library (Glibc in LFS) to use. This is done + by way of sanitizing various C header files that are shipped in the Linux + kernel source tarball.</para> + + <para>Make sure there are no stale files embedded in the package:</para> + +<screen><userinput remap="pre">make mrproper</userinput></screen> + + <para>Now extract the user-visible kernel headers from the source. + The recommended make target <quote>headers_install</quote> cannot be + used, because it requires <application>rsync</application>, which may not + be available. The headers are first placed in + <filename class="directory">./usr</filename>, then copied to the needed + location.</para> + +<screen><userinput remap="make">make headers +find usr/include -name '.*' -delete +rm usr/include/Makefile +</userinput><userinput remap="install">cp -rv usr/include $LFS/usr</userinput></screen> + + </sect2> + + <sect2 id="contents-linux-headers" role="content"> + <title>Contents of Linux API Headers</title> + + <segmentedlist> + <segtitle>Installed headers</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>/usr/include/asm/*.h, /usr/include/asm-generic/*.h, + /usr/include/drm/*.h, /usr/include/linux/*.h, /usr/include/misc/*.h, + /usr/include/mtd/*.h, /usr/include/rdma/*.h, /usr/include/scsi/*.h, + /usr/include/sound/*.h, /usr/include/video/*.h, + and /usr/include/xen/*.h</seg> + <seg>/usr/include/asm, /usr/include/asm-generic, /usr/include/drm, + /usr/include/linux, /usr/include/misc, /usr/include/mtd, + /usr/include/rdma, /usr/include/scsi, /usr/include/sound, + /usr/include/video, and /usr/include/xen</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="asm"> + <term><filename class="headerfile">/usr/include/asm/*.h</filename></term> + <listitem> + <para>The Linux API ASM Headers</para> + <indexterm zone="ch-tools-linux-headers asm"> + <primary sortas="e-/usr/include/asm/*.h">/usr/include/asm/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="asm-generic"> + <term><filename class="headerfile">/usr/include/asm-generic/*.h</filename></term> + <listitem> + <para>The Linux API ASM Generic Headers</para> + <indexterm zone="ch-tools-linux-headers asm-generic"> + <primary sortas="e-/usr/include/asm-generic/*.h">/usr/include/asm-generic/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="drm"> + <term><filename class="headerfile">/usr/include/drm/*.h</filename></term> + <listitem> + <para>The Linux API DRM Headers</para> + <indexterm zone="ch-tools-linux-headers drm"> + <primary sortas="e-/usr/include/drm/*.h">/usr/include/drm/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="linux"> + <term><filename class="headerfile">/usr/include/linux/*.h</filename></term> + <listitem> + <para>The Linux API Linux Headers</para> + <indexterm zone="ch-tools-linux-headers linux"> + <primary sortas="e-/usr/include/linux/*.h">/usr/include/linux/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="misc"> + <term><filename class="headerfile">/usr/include/misc/*.h</filename></term> + <listitem> + <para>The Linux API Miscellaneous Headers</para> + <indexterm zone="ch-tools-linux-headers misc"> + <primary sortas="e-/usr/include/misc/*.h">/usr/include/misc/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mtd"> + <term><filename class="headerfile">/usr/include/mtd/*.h</filename></term> + <listitem> + <para>The Linux API MTD Headers</para> + <indexterm zone="ch-tools-linux-headers mtd"> + <primary sortas="e-/usr/include/mtd/*.h">/usr/include/mtd/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rdma"> + <term><filename class="headerfile">/usr/include/rdma/*.h</filename></term> + <listitem> + <para>The Linux API RDMA Headers</para> + <indexterm zone="ch-tools-linux-headers rdma"> + <primary sortas="e-/usr/include/rdma/*.h">/usr/include/rdma/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="scsi"> + <term><filename class="headerfile">/usr/include/scsi/*.h</filename></term> + <listitem> + <para>The Linux API SCSI Headers</para> + <indexterm zone="ch-tools-linux-headers scsi"> + <primary sortas="e-/usr/include/scsi/*.h">/usr/include/scsi/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="sound"> + <term><filename class="headerfile">/usr/include/sound/*.h</filename></term> + <listitem> + <para>The Linux API Sound Headers</para> + <indexterm zone="ch-tools-linux-headers sound"> + <primary sortas="e-/usr/include/sound/*.h">/usr/include/sound/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="video"> + <term><filename class="headerfile">/usr/include/video/*.h</filename></term> + <listitem> + <para>The Linux API Video Headers</para> + <indexterm zone="ch-tools-linux-headers video"> + <primary sortas="e-/usr/include/video/*.h">/usr/include/video/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xen"> + <term><filename class="headerfile">/usr/include/xen/*.h</filename></term> + <listitem> + <para>The Linux API Xen Headers</para> + <indexterm zone="ch-tools-linux-headers xen"> + <primary sortas="e-/usr/include/xen/*.h">/usr/include/xen/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/m4.xml b/chapter06/m4.xml index 7fe282ee7..79559f6da 100644 --- a/chapter06/m4.xml +++ b/chapter06/m4.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-m4" role="wrap"> +<sect1 id="ch-tools-m4" role="wrap"> <?dbhtml filename="m4.html"?> <sect1info condition="script"> @@ -16,22 +16,25 @@ <title>M4-&m4-version;</title> - <indexterm zone="ch-system-m4"> + <indexterm zone="ch-tools-m4"> <primary sortas="a-M4">M4</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The M4 package contains a macro processor.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/m4.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&m4-ch6-sbu;</seg> - <seg>&m4-ch6-du;</seg> + <seg>&m4-ch5-sbu;</seg> + <seg>&m4-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -40,64 +43,31 @@ <sect2 role="installation"> <title>Installation of M4</title> - <para>First, make some fixes required by glibc-2.28:</para> + <para>First, make some fixes introduced by glibc-2.28:</para> <screen><userinput remap="pre">sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h</userinput></screen> <para>Prepare M4 for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess)</userinput></screen> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> </sect2> - <sect2 id="contents-m4" role="content"> - <title>Contents of M4</title> - - <segmentedlist> - <segtitle>Installed program</segtitle> - - <seglistitem> - <seg>m4</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="m4"> - <!-- Don't remove the extra space, it prevet a FOP warning. --> - <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 role="content"> + <title/> + <para>Details on this package are located in + <xref linkend="contents-m4" role="."/></para> </sect2> diff --git a/chapter06/make.xml b/chapter06/make.xml index 9c649cdc5..fef5555aa 100644 --- a/chapter06/make.xml +++ b/chapter06/make.xml @@ -4,8 +4,7 @@ <!ENTITY % general-entities SYSTEM "../general.ent"> %general-entities; ]> - -<sect1 id="ch-system-make" role="wrap"> +<sect1 id="ch-tools-make" role="wrap"> <?dbhtml filename="make.html"?> <sect1info condition="script"> @@ -16,22 +15,25 @@ <title>Make-&make-version;</title> - <indexterm zone="ch-system-make"> + <indexterm zone="ch-tools-make"> <primary sortas="a-Make">Make</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Make package contains a program for compiling packages.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/make.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&make-ch6-sbu;</seg> - <seg>&make-ch6-du;</seg> + <seg>&make-ch5-sbu;</seg> + <seg>&make-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -39,60 +41,42 @@ <sect2 role="installation"> <title>Installation of Make</title> -<!-- - <para>Again, work around an error caused by glibc-2.27 and later:</para> -<screen><userinput remap="pre">sed -i '211,217 d; 219,229 d; 232 d' glob/glob.c</userinput></screen> ---> <para>Prepare Make for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --without-guile \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess)</userinput></screen> - <para>Compile the package:</para> + <variablelist> + <title>The meaning of the new configure option:</title> -<screen><userinput remap="make">make</userinput></screen> + <varlistentry> + <term><parameter>--without-guile</parameter></term> + <listitem> + <para>Although we are cross-compiling, configure tries to use + guile from the build host if it finds it. This makes compilation + fail, so this switch prevents using it.</para> + </listitem> + </varlistentry> + </variablelist> - <para>The test suite needs to know where supporting perl files are located. - We use an environment variable to accomplish this. To test the - results, issue:</para> + <para>Compile the package:</para> -<screen><userinput remap="test">make check</userinput></screen> +<screen><userinput remap="make">make</userinput></screen> <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> </sect2> + <sect2 role="content"> + <title/> - <sect2 id="contents-make" role="content"> - <title>Contents of Make</title> - - <segmentedlist> - <segtitle>Installed program</segtitle> - - <seglistitem> - <seg>make</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="make"> - <term><command>make</command></term> - <listitem> - <para>Automatically determines which pieces of a package need to - be (re)compiled and then issues the relevant commands</para> - <indexterm zone="ch-system-make make"> - <primary sortas="b-make">make</primary> - </indexterm> - </listitem> - </varlistentry> - - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-make" role="."/></para> </sect2> diff --git a/chapter06/ncurses.xml b/chapter06/ncurses.xml index b37f1f69c..93cf85263 100644 --- a/chapter06/ncurses.xml +++ b/chapter06/ncurses.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-ncurses" role="wrap"> +<sect1 id="ch-tools-ncurses" role="wrap"> <?dbhtml filename="ncurses.html"?> <sect1info condition="script"> @@ -16,23 +16,25 @@ <title>Ncurses-&ncurses-version;</title> - <indexterm zone="ch-system-ncurses"> + <indexterm zone="ch-tools-ncurses"> <primary sortas="a-Ncurses">Ncurses</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Ncurses package contains libraries for terminal-independent - handling of character screens.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/ncurses.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&ncurses-ch6-sbu;</seg> - <seg>&ncurses-ch6-du;</seg> + <seg>&ncurses-ch5-sbu;</seg> + <seg>&ncurses-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -41,24 +43,46 @@ <sect2 role="installation"> <title>Installation of Ncurses</title> - <para>Don't install a static library that is not handled by configure:</para> + <para>First, ensure that <command>gawk</command> is found first during configuration:</para> -<screen><userinput remap="pre">sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in</userinput></screen> +<screen><userinput remap="pre">sed -i s/mawk// configure</userinput></screen> + + <para>Then, run the following commands to build the <quote>tic</quote> + program on the build host:</para> + +<screen><userinput remap="pre">mkdir build +cd build +../configure +make -C include +make -C progs tic +cd ..</userinput></screen> <para>Prepare Ncurses for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr \ - --mandir=/usr/share/man \ - --with-shared \ - --without-debug \ - --without-normal \ - --enable-pc-files \ - --enable-widec</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(./config.guess) \ + --mandir=/usr/share/man \ + --with-shared \ + --without-debug \ + --without-ada \ + --without-normal \ + --enable-widec \ + --enable-pc-files</userinput></screen> <variablelist> <title>The meaning of the new configure options:</title> <varlistentry> + <term><parameter>--without-ada</parameter></term> + <listitem> + <para>This ensures that Ncurses does not build support for the Ada + compiler which may be present on the host but will not be available + once we enter the <command>chroot</command> environment.</para> + </listitem> + </varlistentry> + + <varlistentry> <term><parameter>--enable-widec</parameter></term> <listitem> <para>This switch causes wide-character libraries (e.g., <filename @@ -87,293 +111,46 @@ </para> </listitem> </varlistentry> - + <!-- + <varlistentry> + <term><parameter>- -disable-db-install</parameter></term> + <listitem> + <para>This switch disables building the terminfo database: it is not + needed at this stage, and if <command>tic</command> is too old, + it cannot compile recent databases.</para> + </listitem> + </varlistentry> + --> </variablelist> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>This package has a test suite, but it can only be run after the - package has been installed. The tests reside in the - <filename class="directory">test/</filename> directory. See the - <filename>README</filename> file in that directory for further details. - </para> - <para>Install the package:</para> - -<screen><userinput remap="install">make install</userinput></screen> +<!-- TODO: check and document --> +<screen><userinput remap="install">make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install +ln -s libncursesw.so $LFS/usr/lib/libncurses.so</userinput></screen> <para>Move the shared libraries to the <filename class="directory">/lib</filename> directory, where they are expected to reside:</para> -<screen><userinput remap="install">mv -v /usr/lib/libncursesw.so.6* /lib</userinput></screen> +<screen><userinput remap="install">mv -v $LFS/usr/lib/libncursesw.so.6* $LFS/lib</userinput></screen> <para>Because the libraries have been moved, one symlink points to a non-existent file. Recreate it:</para> -<screen><userinput remap="install">ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so</userinput></screen> - - <para>Many applications still expect the linker to be able to find - non-wide-character Ncurses libraries. Trick such applications into linking with - wide-character libraries by means of symlinks and linker scripts:</para> - -<screen><userinput remap="install">for lib in ncurses form panel menu ; do - rm -vf /usr/lib/lib${lib}.so - echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so - ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc -done</userinput></screen> - - <para>Finally, make sure that old applications that look for - <filename class="libraryfile">-lcurses</filename> at build time are still - buildable:</para> - -<screen><userinput remap="install">rm -vf /usr/lib/libcursesw.so -echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so -ln -sfv libncurses.so /usr/lib/libcurses.so</userinput></screen> +<screen><userinput remap="install">ln -sfv ../../lib/$(readlink $LFS/usr/lib/libncursesw.so) $LFS/usr/lib/libncursesw.so</userinput></screen> - <para>If desired, install the Ncurses documentation:</para> - -<screen><userinput remap="install">mkdir -v /usr/share/doc/ncurses-&ncurses-version; -cp -v -R doc/* /usr/share/doc/ncurses-&ncurses-version;</userinput></screen> - - <note> - - <para>The instructions above don't create non-wide-character Ncurses - libraries since no package installed by compiling from sources would link - against them at runtime. However, the only known binary-only - applications that link against non-wide-character Ncurses libraries - require version 5. If you must have such libraries because of some binary-only - application or to be compliant with LSB, build the package again with the - following commands:</para> - -<screen role="nodump"><userinput>make distclean -./configure --prefix=/usr \ - --with-shared \ - --without-normal \ - --without-debug \ - --without-cxx-binding \ - --with-abi-version=5 -make sources libs -cp -av lib/lib*.so.5* /usr/lib</userinput></screen> - </note> </sect2> - <sect2 id="contents-ncurses" role="content"> - <title>Contents of Ncurses</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed libraries</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - <seg> - captoinfo (link to tic), - clear, - infocmp, - infotocap (link to tic), - ncursesw6-config, - reset (link to tset), - tabs, - tic, - toe, - tput, and - tset - </seg> - <seg> - libcursesw.so (symlink and linker script to libncursesw.so), - libformw.so, - libmenuw.so, - libncursesw.so, - libncurses++w.a, - libpanelw.so, and their non-wide-character counterparts without "w" - in the library names.</seg> - <seg> - /usr/share/tabset, - /usr/share/terminfo, and - /usr/share/doc/ncurses-&ncurses-version; - </seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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="ncursesw6-config"> - <term><command>ncursesw6-config</command></term> - <listitem> - <para>Provides configuration information for ncurses</para> - <indexterm zone="ch-system-ncurses ncursesw6-config"> - <primary sortas="b-ncursesw6-config">ncursesw6-config</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="tabs"> - <term><command>tabs</command></term> - <listitem> - <para>Clears and sets tab stops on a terminal</para> - <indexterm zone="ch-system-ncurses tabs"> - <primary sortas="b-tabs">tabs</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="libcursesw"> - <term><filename class="libraryfile">libcursesw</filename></term> - <listitem> - <para>A link to <filename>libncursesw</filename></para> - <indexterm zone="ch-system-ncurses libcursesw"> - <primary sortas="c-libcursesw">libcursesw</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="libncursesw"> - <term><filename class="libraryfile">libncursesw</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 libncursesw"> - <primary sortas="c-libncursesw">libncursesw</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="libformw"> - <term><filename class="libraryfile">libformw</filename></term> - <listitem> - <para>Contains functions to implement forms</para> - <indexterm zone="ch-system-ncurses libformw"> - <primary sortas="c-libformw">libformw</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="libmenuw"> - <term><filename class="libraryfile">libmenuw</filename></term> - <listitem> - <para>Contains functions to implement menus</para> - <indexterm zone="ch-system-ncurses libmenuw"> - <primary sortas="c-libmenuw">libmenuw</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="libpanelw"> - <term><filename class="libraryfile">libpanelw</filename></term> - <listitem> - <para>Contains functions to implement panels</para> - <indexterm zone="ch-system-ncurses libpanelw"> - <primary sortas="c-libpanelw">libpanelw</primary> - </indexterm> - </listitem> - </varlistentry> + <sect2 role="content"> + <title/> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-ncurses" role="."/></para> </sect2> diff --git a/chapter06/patch.xml b/chapter06/patch.xml index 6c6c6852b..ecd5b2c47 100644 --- a/chapter06/patch.xml +++ b/chapter06/patch.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-patch" role="wrap"> +<sect1 id="ch-tools-patch" role="wrap"> <?dbhtml filename="patch.html"?> <sect1info condition="script"> @@ -16,24 +16,25 @@ <title>Patch-&patch-version;</title> - <indexterm zone="ch-system-patch"> + <indexterm zone="ch-tools-patch"> <primary sortas="a-Patch">Patch</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Patch package contains a program for modifying or creating files - by applying a <quote>patch</quote> file typically created by the - <command>diff</command> program.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/patch.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&patch-ch6-sbu;</seg> - <seg>&patch-ch6-du;</seg> + <seg>&patch-ch5-sbu;</seg> + <seg>&patch-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -44,52 +45,25 @@ <para>Prepare Patch for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess)</userinput></screen> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - <para>Install the package:</para> -<screen><userinput remap="install">make install</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> </sect2> - <sect2 id="contents-patch" role="content"> - <title>Contents of Patch</title> - - <segmentedlist> - <segtitle>Installed program</segtitle> - - <seglistitem> - <seg>patch</seg> - </seglistitem> - </segmentedlist> + <sect2 role="content"> + <title/> - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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> + <para>Details on this package are located in + <xref linkend="contents-patch" role="."/></para> </sect2> diff --git a/chapter06/perl.xml b/chapter06/perl.xml index 284464d87..663d3dbc2 100644 --- a/chapter06/perl.xml +++ b/chapter06/perl.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-perl" role="wrap"> +<sect1 id="ch-tools-perl" role="wrap"> <?dbhtml filename="perl.html"?> <sect1info condition="script"> @@ -16,23 +16,25 @@ <title>Perl-&perl-version;</title> - <indexterm zone="ch-system-perl"> + <indexterm zone="ch-tools-perl"> <primary sortas="a-Perl">Perl</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Perl package contains the Practical Extraction and Report - Language.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/perl.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&perl-ch6-sbu;</seg> - <seg>&perl-ch6-du;</seg> + <seg>&perl-ch5-sbu;</seg> + <seg>&perl-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -41,481 +43,36 @@ <sect2 role="installation"> <title>Installation of Perl</title> - <para>First create a basic <filename>/etc/hosts</filename> file to be - referenced in one of Perl's configuration files as well as the optional - test suite:</para> + <para>Prepare Perl for compilation:</para> -<screen><userinput remap="pre">echo "127.0.0.1 localhost $(hostname)" > /etc/hosts</userinput></screen> - - <para>This version of Perl now builds the Compress::Raw::Zlib and - Compress::Raw::BZip2 modules. By - default Perl will use an internal copy of the sources for the build. - Issue the following command so that Perl will use the libraries - installed on the system:</para> - -<screen><userinput remap="pre">export BUILD_ZLIB=False -export BUILD_BZIP2=0</userinput></screen> -<!-- - <para>Apply a patch to allow the Errno.pm module and the h2ph - program to build correctly when building with GCC 5:</para> - -<screen><userinput remap="pre">patch -Np1 -i ../&perl-gcc5-fixes-patch;</userinput></screen> ---> - - <para>To have full control over the way Perl is set up, you can remove the - <quote>-des</quote> options from the following command and hand-pick the way - this package is built. Alternatively, use the command exactly as below to - use the defaults that Perl auto-detects:</para> - -<screen><userinput remap="configure">sh Configure -des -Dprefix=/usr \ - -Dvendorprefix=/usr \ - -Dman1dir=/usr/share/man/man1 \ - -Dman3dir=/usr/share/man/man3 \ - -Dpager="/usr/bin/less -isR" \ - -Duseshrplib \ - -Dusethreads</userinput></screen> +<screen><userinput remap="configure">sh Configure -des -Dprefix=/usr</userinput></screen> <variablelist> - <title>The meaning of the configure options:</title> - - <varlistentry> - <term><parameter>-Dvendorprefix=/usr</parameter></term> - <listitem> - <para>This ensures <command>perl</command> knows how to - tell packages where they should install their perl modules.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><parameter>-Dpager="/usr/bin/less -isR"</parameter></term> - <listitem> - <para>This ensures that <userinput>less</userinput> is used instead - of <userinput>more</userinput>.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><parameter>-Dman1dir=/usr/share/man/man1 - -Dman3dir=/usr/share/man/man3</parameter></term> - <listitem> - <para>Since Groff is not installed yet, <command>Configure</command> - thinks that we do not want man pages for Perl. Issuing these - parameters overrides this decision.</para> - </listitem> - </varlistentry> - + <title>The meaning of the new Configure options:</title> <varlistentry> - <term><parameter>-Duseshrplib</parameter></term> + <term><parameter>-des</parameter></term> <listitem> - <para>Build a shared libperl needed by some perl modules.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><parameter>-Dusethreads</parameter></term> - <listitem> - <para>Build perl with support for threads.</para> + <para>This is a combination of three options: -d uses defaults for + all items; -e ensures completion of all tasks; -s silences + non-essential output.</para> </listitem> </varlistentry> </variablelist> - <para>Compile the package:</para> + <para>Build the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results (approximately 11 SBU), issue:</para> - -<screen><userinput remap="test">make test</userinput></screen> - - <!--note><para>One test fails due to using the most recent version of gdbm. - </para></note--> - - <para>Install the package and clean up:</para> - -<screen><userinput remap="install">make install -unset BUILD_ZLIB BUILD_BZIP2</userinput></screen> +<screen><userinput remap="install">make install</userinput></screen> </sect2> - <sect2 id="contents-perl" role="content"> - <title>Contents of Perl</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed libraries</segtitle> - <segtitle>Installed directory</segtitle> - - <seglistitem> - <seg>corelist, cpan, enc2xs, encguess, h2ph, h2xs, instmodsh, - json_pp, libnetcfg, perl, perl&perl-version; (hard link to perl), - perlbug, perldoc, perlivp, perlthanks (hard link to perlbug), piconv, - pl2pm, pod2html, pod2man, pod2text, pod2usage, podchecker, podselect, - prove, ptar, ptardiff, ptargrep, shasum, - splain, xsubpp, and zipdetails</seg> - <seg>Many which cannot all be listed here</seg> - <seg>/usr/lib/perl5</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> -<!-- - <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="corelist"> - <term><command>corelist</command></term> - <listitem> - <para>A commandline frontend to Module::CoreList</para> - <indexterm zone="ch-system-perl corelist"> - <primary sortas="b-corelist">corelist</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="cpan"> - <term><command>cpan</command></term> - <listitem> - <para>Interact with the Comprehensive Perl Archive Network (CPAN) - from the command line</para> - <indexterm zone="ch-system-perl cpan"> - <primary sortas="b-cpan">cpan</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="enc2xs"> - <term><command>enc2xs</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 enc2xs"> - <primary sortas="b-enc2xs">enc2xs</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="encguess"> - <term><command>encguess</command></term> - <listitem> - <para>Guess the encoding type of one or several files</para> - <indexterm zone="ch-system-perl encguess"> - <primary sortas="b-encguess">encguess</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="instmodsh"> - <term><command>instmodsh</command></term> - <listitem> - <para>Shell script for examining installed Perl modules, - and can create a tarball from an installed module</para> - <indexterm zone="ch-system-perl instmodsh"> - <primary sortas="b-instmodsh">instmodsh</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="json_pp"> - <term><command>json_pp</command></term> - <listitem> - <para>Converts data between certain input and output formats</para> - <indexterm zone="ch-system-perl json_pp"> - <primary sortas="b-json_pp">json_pp</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> Perl module</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, <command>sed</command>, - <command>awk</command> and <command>sh</command> 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="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="perlthanks"> - <term><command>perlthanks</command></term> - <listitem> - <para>Used to generate thank you messages to mail to the Perl - developers</para> - <indexterm zone="ch-system-perl perlthanks"> - <primary sortas="b-perlthanks">perlthanks</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="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="prove"> - <term><command>prove</command></term> - <listitem> - <para>Command line tool for running tests against the Test::Harness - module</para> - <indexterm zone="ch-system-perl prove"> - <primary sortas="b-prove">prove</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="ptar"> - <term><command>ptar</command></term> - <listitem> - <para>A <command>tar</command>-like program written in Perl</para> - <indexterm zone="ch-system-perl ptar"> - <primary sortas="b-ptar">ptar</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="ptardiff"> - <term><command>ptardiff</command></term> - <listitem> - <para>A Perl program that compares an extracted archive with an - unextracted one</para> - <indexterm zone="ch-system-perl ptardiff"> - <primary sortas="b-ptardiff">ptardiff</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="ptargrep"> - <term><command>ptargrep</command></term> - <listitem> - <para>A Perl program that applies pattern matching to the contents - of files in a tar archive</para> - <indexterm zone="ch-system-perl ptargrep"> - <primary sortas="b-ptargrep">ptargrep</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="shasum"> - <term><command>shasum</command></term> - <listitem> - <para>Prints or checks SHA checksums</para> - <indexterm zone="ch-system-perl shasum"> - <primary sortas="b-shasum">shasum</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> - - <varlistentry id="zipdetails"> - <term><command>zipdetails</command></term> - <listitem> - <para>Displays details about the internal structure of a Zip file</para> - <indexterm zone="ch-system-perl zipdetails"> - <primary sortas="b-zipdetails">zipdetails</primary> - </indexterm> - </listitem> - </varlistentry> + <sect2 role="content"> + <title/> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-perl" role="."/></para> </sect2> diff --git a/chapter06/python.xml b/chapter06/python.xml index cc440903d..52c070ab3 100644 --- a/chapter06/python.xml +++ b/chapter06/python.xml @@ -5,8 +5,8 @@ %general-entities; ]> -<sect1 id="ch-system-Python" role="wrap"> - <?dbhtml filename="Python.html"?> +<sect1 id="ch-system-Python-temp" role="wrap"> + <?dbhtml filename="Python-temp.html"?> <sect1info condition="script"> <productname>Python</productname> @@ -16,66 +16,54 @@ <title>Python-&python-version;</title> - <indexterm zone="ch-system-Python"> - <primary sortas="a-python">python</primary> + <indexterm zone="ch-system-Python-temp"> + <primary sortas="a-Python">Python</primary> + <secondary>temporary</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Python 3 package contains the Python development environment. It - is useful for object-oriented programming, writing scripts, prototyping - large programs or developing entire applications.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/python.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> - <segtitle>&buildtime;</segtitle> + <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&python-ch6-sbu;</seg> - <seg>&python-ch6-du;</seg> + <seg>&python-ch5-sbu;</seg> + <seg>&python-ch5-du;</seg> </seglistitem> </segmentedlist> </sect2> <sect2 role="installation"> - <title>Installation of Python 3</title> + <title>Installation of Python</title> + + <note> + <para>There are two package files whose name starts with + <quote>python</quote>. The one to extract from is + <filename>Python-&python-version;.tar.xz</filename> (notice the + uppercase first letter).</para> + </note> <para>Prepare Python for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr \ - --enable-shared \ - --with-system-expat \ - --with-system-ffi \ - --with-ensurepip=yes</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr --without-ensurepip</userinput></screen> <variablelist> - <title>The meaning of the configure options:</title> - - <varlistentry> - <term><parameter>--with-system-expat</parameter></term> - <listitem> - <para>This switch enables linking against system version of - <application>Expat</application>.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><parameter>--with-system-ffi</parameter></term> - <listitem> - <para>This switch enables linking against system version of - <application>libffi</application>.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><parameter>--with-ensurepip=yes</parameter></term> - <listitem> - <para>This switch enables building <command>pip</command> and - <command>setuptools</command> packaging programs.</para> - </listitem> - </varlistentry> + <title>The meaning of the configure option:</title> + + <varlistentry> + <term><parameter>--without-ensurepip</parameter></term> + <listitem> + <para>This switch disables the Python package installer, which is not + needed at this stage.</para> + </listitem> + </varlistentry> </variablelist> @@ -83,171 +71,18 @@ <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue <command>make test</command>. - Some tests requiring network connection or additional packages are - skipped. The test named test_normalization fails because network - configuration is not completed yet. For more comprehensive results, - the test can be rerun when Python 3 is reinstalled in BLFS.</para> - <para>Install the package:</para> -<screen><userinput remap="install">make install -chmod -v 755 /usr/lib/libpython&python-minor;.so -chmod -v 755 /usr/lib/libpython3.so -ln -sfv pip&python-minor; /usr/bin/pip3</userinput></screen> - - <variablelist> - <title>The meaning of the install commands:</title> -<!-- ====== Change 8m if Python minor version changes ======= --> - <varlistentry> - <term><command>chmod -v 755 /usr/lib/libpython3.{8.,}so</command></term> - <listitem> - <para>Fix permissions for libraries to be consistent with other - libraries.</para> - </listitem> - </varlistentry> - - </variablelist> - - <para>If desired, install the preformatted documentation:</para> - -<screen><userinput remap="install">install -v -dm755 /usr/share/doc/python-&python-version;/html - -tar --strip-components=1 \ - --no-same-owner \ - --no-same-permissions \ - -C /usr/share/doc/python-&python-version;/html \ - -xvf ../python-&python-version;-docs-html.tar.bz2</userinput></screen> - - <variablelist> - <title>The meaning of the documentation install commands:</title> - - <varlistentry> - <term><option>--no-same-owner</option> and <option>--no-same-permissions</option></term> - <listitem> - <para>Ensure the installed files have the correct ownership and - permissions. Without these options, using <application>tar</application> - will install the package files with the upstream creator's values. - </para> - </listitem> - </varlistentry> - - </variablelist> +<screen><userinput remap="install">make install</userinput></screen> </sect2> - <sect2 id="contents-python" role="content"> - <title>Contents of Python 3</title> - - <segmentedlist> - <segtitle>Installed Programs</segtitle> - <segtitle>Installed Library</segtitle> - <segtitle>Installed Directories</segtitle> - - <seglistitem> - <seg> - 2to3, idle3, pip3, pydoc3, python3, and python3-config - </seg> - <seg> - libpython&python-minor;.so and libpython3.so - </seg> - <seg> - /usr/include/python&python-minor;, - /usr/lib/python3, and - /usr/share/doc/python-&python-version; - </seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="python-2to3"> - <term><command>2to3</command></term> - <listitem> - <para> - is a <application>Python</application> program that reads - <application>Python 2.x</application> source code and applies a - series of fixes to transform it into valid - <application>Python 3.x</application> code. - </para> - <indexterm zone="ch-system-Python"> - <primary sortas="b-2to3">2to3</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="idle3"> - <term><command>idle3</command></term> - <listitem> - <para> - is a wrapper script that opens a <application>Python</application> - aware GUI editor. For this script to run, you must have installed - <application>Tk</application> before Python so that the Tkinter - Python module is built. - </para> - <indexterm zone="ch-system-Python"> - <primary sortas="b-idle3">idle3</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="pip3"> - <term><command>pip3</command></term> - <listitem> - <para> - The package installer for Python. You can use pip to install - packages from Python Package Index and other indexes. - </para> - <indexterm zone="ch-system-Python"> - <primary sortas="b-pip3">pip3</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="pydoc3"> - <term><command>pydoc3</command></term> - <listitem> - <para> - is the <application>Python</application> documentation tool. - </para> - <indexterm zone="ch-system-Python"> - <primary sortas="b-pydoc3">pydoc3</primary> - </indexterm> - </listitem> - </varlistentry> + <sect2 role="content"> + <title/> - <varlistentry id="python3"> - <term><command>python3</command></term> - <listitem> - <para> - is an interpreted, interactive, object-oriented programming - language. - </para> - <indexterm zone="ch-system-Python"> - <primary sortas="b-python3">python3</primary> - </indexterm> - </listitem> - </varlistentry> -<!-- - <varlistentry id="pyvenv"> - <term><command>pyvenv</command></term> - <listitem> - <para> - creates virtual <application>Python</application> environments in - one or more target directories. - </para> - <indexterm zone="ch-system-Python"> - <primary sortas="b-pyvenv">pyvenv</primary> - </indexterm> - </listitem> - </varlistentry> ---> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-python" role="."/></para> </sect2> </sect1> - diff --git a/chapter06/sed.xml b/chapter06/sed.xml index 030e77a0b..f146b5102 100644 --- a/chapter06/sed.xml +++ b/chapter06/sed.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-sed" role="wrap"> +<sect1 id="ch-tools-sed" role="wrap"> <?dbhtml filename="sed.html"?> <sect1info condition="script"> @@ -16,22 +16,25 @@ <title>Sed-&sed-version;</title> - <indexterm zone="ch-system-sed"> + <indexterm zone="ch-tools-sed"> <primary sortas="a-Sed">Sed</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Sed package contains a stream editor.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/sed.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> - <segtitle>&buildtime;</segtitle> + <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&sed-ch6-sbu;</seg> - <seg>&sed-ch6-du;</seg> + <seg>&sed-ch5-sbu;</seg> + <seg>&sed-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -42,55 +45,25 @@ <para>Prepare Sed for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr --bindir=/bin</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --bindir=/bin</userinput></screen> - <para>Compile the package and generate the HTML documentation:</para> + <para>Compile the package:</para> -<screen><userinput remap="make">make -make html</userinput></screen> +<screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> + <para>Install the package:</para> -<screen><userinput remap="test">chown -Rv tester . -su tester -c "PATH=$PATH make check"</userinput></screen> - - <para>Install the package and its documentation:</para> - -<screen><userinput remap="install">make install -install -d -m755 /usr/share/doc/sed-&sed-version; -install -m644 doc/sed.html /usr/share/doc/sed-&sed-version;</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> </sect2> - <sect2 id="contents-sed" role="content"> - <title>Contents of Sed</title> - - <segmentedlist> - <segtitle>Installed program</segtitle> - <segtitle>Installed directory</segtitle> - - <seglistitem> - <seg>sed</seg> - <seg>/usr/share/doc/sed-&sed-version;</seg> - </seglistitem> - </segmentedlist> + <sect2 role="content"> + <title/> - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <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> + <para>Details on this package are located in + <xref linkend="contents-sed" role="."/></para> </sect2> diff --git a/chapter06/stripping.xml b/chapter06/stripping.xml new file mode 100644 index 000000000..7c054b6b2 --- /dev/null +++ b/chapter06/stripping.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-stripping"> + <?dbhtml filename="stripping.html"?> + + <title>Stripping</title> + + <para>The steps in this section are optional, but if the LFS partition is + rather small, it is beneficial to learn that unnecessary items can be removed. + The executables and libraries built so far contain about 70 MB of unneeded + debugging symbols. Remove those symbols with:</para> + +<screen><userinput>$LFS_TGT-strip --strip-debug $LFS/usr/lib/* +$LFS_TGT-strip --strip-unneeded $LFS/usr/{,s}bin/*</userinput></screen> + + <para>These commands will skip a number of files, reporting that it does not + recognize their file format. Most of these are scripts instead of binaries. + Note that we use the <command>strip</command> program built in + <quote>Binutils pass 1</quote>, since it is the one that knows how to strip + our cross-compiled programs.</para> +<!-- Normally, the host "strip" could be used too, since it is actually the +same computer. But Some old versions of binutils may generate buggy crt1.o +and the like, because they do not know about recently introduced symbol +types. For more details, +see https://sourceware.org/bugzilla/show_bug.cgi?id=22875--> + + <para>Take care <emphasis>not</emphasis> to use + <parameter>--strip-unneeded</parameter> on the libraries. The static + ones would be destroyed and the toolchain packages would need to be + built all over again.</para> + + <para>To save more, remove the documentation:</para> + +<screen><userinput>rm -rf $LFS/usr/{,share}/{info,man,doc}</userinput></screen> + + <para>The libtool .la files are only useful when linking with static + libraries. They are unneeded, and potentially harmful, when using dynamic + shared libraries, specially when using also non-autotools build systems. + Remove those files now:</para> + +<screen><userinput>find $LFS/usr/{lib,libexec} -name \*.la -delete</userinput></screen> + + <para>At this point, you should have at least 3 GB of free space in + <envar>$LFS</envar> that can be used to build and install Glibc and Gcc in + the next phase. If you can build and install Glibc, you can build and install + the rest too.</para> + +</sect1> diff --git a/chapter06/tar.xml b/chapter06/tar.xml index d148c4695..ff2008e28 100644 --- a/chapter06/tar.xml +++ b/chapter06/tar.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-tar" role="wrap"> +<sect1 id="ch-tools-tar" role="wrap"> <?dbhtml filename="tar.html"?> <sect1info condition="script"> @@ -16,22 +16,25 @@ <title>Tar-&tar-version;</title> - <indexterm zone="ch-system-tar"> + <indexterm zone="ch-tools-tar"> <primary sortas="a-Tar">Tar</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Tar package contains an archiving program.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/tar.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&tar-ch6-sbu;</seg> - <seg>&tar-ch6-du;</seg> + <seg>&tar-ch5-sbu;</seg> + <seg>&tar-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -42,74 +45,26 @@ <para>Prepare Tar for compilation:</para> -<screen><userinput remap="configure">FORCE_UNSAFE_CONFIGURE=1 \ -./configure --prefix=/usr \ +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) \ --bindir=/bin</userinput></screen> - <variablelist> - <title>The meaning of the configure options:</title> - - <varlistentry> - <term><envar>FORCE_UNSAFE_CONFIGURE=1</envar></term> - <listitem> - <para>This forces the test for <function>mknod</function> to be run - as root. It is generally considered dangerous to run this test as - the root user, but as it is being run on a system that has only been - partially built, overriding it is OK.</para> - </listitem> - </varlistentry> - </variablelist> - <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results (about 3 SBU), issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - -<!-- Seems to pass for version 1.31. Keeping as a comment just in case... - <para>One test, link mismatch, is known to fail.</para> ---> - <para>Install the package:</para> -<screen><userinput remap="install">make install -make -C doc install-html docdir=/usr/share/doc/tar-&tar-version;</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> </sect2> + <sect2 role="content"> + <title/> - <sect2 id="contents-tar" role="content"> - <title>Contents of Tar</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed directory</segtitle> - - <seglistitem> - <seg>tar</seg> - <seg>/usr/share/doc/tar-&tar-version;</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="tar"> - <term><command>tar</command></term> - <listitem> - <para>Creates, extracts files from, and lists the contents of archives, - also known as tarballs</para> - <indexterm zone="ch-system-tar tar"> - <primary sortas="b-tar">tar</primary> - </indexterm> - </listitem> - </varlistentry> - - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-tar" role="."/></para> </sect2> diff --git a/chapter06/tcl.xml b/chapter06/tcl.xml new file mode 100644 index 000000000..bd17a91a8 --- /dev/null +++ b/chapter06/tcl.xml @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; + <!ENTITY tdbc-ver "1.1.1"> + <!ENTITY itcl-ver "4.2.0"> +]> + +<sect1 id="ch-tools-tcl" role="wrap"> + <?dbhtml filename="tcl.html"?> + + <sect1info condition="script"> + <productname>tcl</productname> + <productnumber>&tcl-version;</productnumber> + <address>&tcl-url;</address> + </sect1info> + + <title>Tcl-&tcl-version;</title> + + <indexterm zone="ch-tools-tcl"> + <primary sortas="a-Tcl">Tcl</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The <application>Tcl</application> package contains the Tool Command Language, + a robust general-purpose scripting language. The <application>Expect</application> package + is written in the <application>Tcl</application> language.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&tcl-ch5-sbu;</seg> + <seg>&tcl-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Tcl</title> + + <para>This package and the next two (Expect and DejaGNU) are + installed to support running the test suites for GCC and Binutils and other + packages. Installing three packages for testing purposes may seem + excessive, but it is very reassuring, if not essential, to know that the + most important tools are working properly. These packages are required + to run the test suites in <xref linkend="chapter-building-system"/>.</para> + + <para>Note that the Tcl package used here is a minimal version needed + to run the LFS tests. For the full package, see the + <ulink url='&blfs-book;general/tcl.html'>BLFS Tcl procedures</ulink>.</para> + + <para>Prepare Tcl for compilation:</para> + +<screen><userinput remap="configure">SRCDIR=$(pwd) +cd unix +./configure --prefix=/usr \ + --mandir=/usr/share/man \ + $([ "$(uname -m)" = x86_64 ] && echo --enable-64bit)</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>$([ "$(uname -m)" = x86_64 ] && echo --enable-64bit)</parameter></term> + <listitem> + <para>The construct <parameter>$(<shell command>)</parameter> + is replaced by the output of the chell command. Here this output is + empty if running on a 32 bit machine, and is + <parameter>--enable-64bit</parameter> if running on a 64 bit machine. + </para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Build the package:</para> + +<screen><userinput remap="make">make + +sed -e "s|$SRCDIR/unix|/usr/lib|" \ + -e "s|$SRCDIR|/usr/include|" \ + -i tclConfig.sh + +sed -e "s|$SRCDIR/unix/pkgs/tdbc&tdbc-ver;|/usr/lib/tdbc&tdbc-ver;|" \ + -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;/generic|/usr/include|" \ + -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;/library|/usr/lib/tcl8.6|" \ + -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;|/usr/include|" \ + -i pkgs/tdbc&tdbc-ver;/tdbcConfig.sh + +sed -e "s|$SRCDIR/unix/pkgs/itcl&itcl-ver;|/usr/lib/itcl&itcl-ver;|" \ + -e "s|$SRCDIR/pkgs/itcl&itcl-ver;/generic|/usr/include|" \ + -e "s|$SRCDIR/pkgs/itcl&itcl-ver;|/usr/include|" \ + -i pkgs/itcl&itcl-ver;/itclConfig.sh + +unset SRCDIR</userinput></screen> + + <para>The various <quote>sed</quote> after the <quote>make</quote> command + remove references to the build directory from various configuration files, + and replaces them with the install directory. This is not mandatory + for the remaining of LFS, but may be needed in case a package built later + uses Tcl.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Make the installed library writable so debugging symbols can + be removed later:</para> + +<screen><userinput remap="install">chmod -v u+w /usr/lib/libtcl&tcl-major-version;.so</userinput></screen> + + <para>Install Tcl's headers. The next package, Expect, requires them + to build.</para> + +<screen><userinput remap="install">make install-private-headers</userinput></screen> + + <para>Now make a necessary symbolic link:</para> + +<screen><userinput remap="install">ln -sfv tclsh&tcl-major-version; /usr/bin/tclsh</userinput></screen> + + </sect2> + + <sect2 id="contents-tcl" role="content"> + <title>Contents of Tcl</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>tclsh (link to tclsh&tcl-major-version;) and tclsh&tcl-major-version;</seg> + <seg>libtcl&tcl-major-version;.so, libtclstub&tcl-major-version;.a</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="tclsh&tcl-major-version;"> + <term><command>tclsh&tcl-major-version;</command></term> + <listitem> + <para>The Tcl command shell</para> + <indexterm zone="ch-tools-tcl tclsh&tcl-major-version;"> + <primary sortas="b-tclsh&tcl-major-version;">tclsh&tcl-major-version;</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="tclsh"> + <term><command>tclsh</command></term> + <listitem> + <para>A link to tclsh&tcl-major-version;</para> + <indexterm zone="ch-tools-tcl tclsh"> + <primary sortas="b-tclsh">tclsh</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libtcl&tcl-major-version;.so"> + <term><filename class="libraryfile">libtcl&tcl-major-version;.so</filename></term> + <listitem> + <para>The Tcl library</para> + <indexterm zone="ch-tools-tcl libtcl&tcl-major-version;.so"> + <primary sortas="c-libtcl&tcl-major-version;.so">libtcl&tcl-major-version;.so</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libtclstub&tcl-major-version;.a"> + <term><filename class="libraryfile">libtclstub&tcl-major-version;.a</filename></term> + <listitem> + <para>The Tcl Stub library</para> + <indexterm zone="ch-tools-tcl libtclstub&tcl-major-version;.a"> + <primary sortas="c-libtclstub&tcl-major-version;.a">libtclstub&tcl-major-version;.a</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/texinfo.xml b/chapter06/texinfo.xml index d61df477b..8434c7112 100644 --- a/chapter06/texinfo.xml +++ b/chapter06/texinfo.xml @@ -5,8 +5,8 @@ %general-entities; ]> -<sect1 id="ch-system-texinfo" role="wrap"> - <?dbhtml filename="texinfo.html"?> +<sect1 id="ch-system-texinfo-temp" role="wrap"> + <?dbhtml filename="texinfo-temp.html"?> <sect1info condition="script"> <productname>texinfo</productname> @@ -16,23 +16,25 @@ <title>Texinfo-&texinfo-version;</title> - <indexterm zone="ch-system-texinfo"> + <indexterm zone="ch-system-texinfo-temp"> <primary sortas="a-Texinfo">Texinfo</primary> + <secondary>temporary</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Texinfo package contains programs for reading, writing, and - converting info pages.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/texinfo.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&texinfo-ch6-sbu;</seg> - <seg>&texinfo-ch6-du;</seg> + <seg>&texinfo-ch5-sbu;</seg> + <seg>&texinfo-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -43,194 +45,29 @@ <para>Prepare Texinfo for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr --disable-static</userinput></screen> +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> - <variablelist> - <title>The meaning of the configure options:</title> - - <varlistentry> - <term><parameter>--disable-static</parameter></term> - <listitem> - <para>In this case, the top-level configure script will complain that - this is an unrecognized option, but the configure script for - XSParagraph recognizes it and uses it to disable installing a static - <filename class="libraryfile">XSParagraph.a</filename> to <filename - class="directory">/usr/lib/texinfo</filename>.</para> - </listitem> - </varlistentry> - - </variablelist> + <note> + <para>As part of the configure process, a test is made that indicates an + error for TestXS_la-TestXS.lo. This is not relevant for LFS and should be + ignored.</para> + </note> <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> - -<screen><userinput remap="test">make check</userinput></screen> - <para>Install the package:</para> <screen><userinput remap="install">make install</userinput></screen> - <para>Optionally, install the components belonging in a TeX - installation:</para> - <!-- FIXME: doesn't the TeX installation in BLFS overwrite files there? --> - -<screen><userinput remap="install">make TEXMF=/usr/share/texmf install-tex</userinput></screen> - - <variablelist> - <title>The meaning of the make parameter:</title> - - <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 sync with the info pages 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 role="nodump"><userinput>pushd /usr/share/info -rm -v dir -for f in * - do install-info $f dir 2>/dev/null -done -popd</userinput></screen> - </sect2> - <sect2 id="contents-texinfo" role="content"> - <title>Contents of Texinfo</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed library</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - <seg>info, install-info, makeinfo (link to texi2any), - pdftexi2dvi, pod2texi, texi2any, texi2dvi, texi2pdf, and texindex</seg> - <seg>MiscXS.so, Parsetexi.so, and XSParagraph.so - (all in /usr/lib/texinfo)</seg> - <seg>/usr/share/texinfo and /usr/lib/texinfo</seg> - </seglistitem> - </segmentedlist> + <sect2 role="content"> + <title/> - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="info"> - <term><command>info</command></term> - <listitem> - <para>Used to read info pages which are similar to man pages, but - often go much deeper than just explaining all the available 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="install-info"> - <term><command>install-info</command></term> - <listitem> - <para>Used to install info pages; it updates entries in the - <command>info</command> 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 pages, plain text, or HTML</para> - <indexterm zone="ch-system-texinfo makeinfo"> - <primary sortas="b-makeinfo">makeinfo</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="pdftexi2dvi"> - <term><command>pdftexi2dvi</command></term> - <listitem> - <para>Used to format the given Texinfo document into a - Portable Document Format (PDF) file</para> - <indexterm zone="ch-system-texinfo pdftexi2dvi"> - <primary sortas="b-pdftexi2dvi">pdftexi2dvi</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="pod2texi"> - <term><command>pod2texi</command></term> - <listitem> - <para>Converts Pod to Texinfo format</para> - <indexterm zone="ch-system-texinfo pod2texi"> - <primary sortas="b-pod2texi">pod2texi</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="texi2any"> - <term><command>texi2any</command></term> - <listitem> - <para>Translate Texinfo source documentation to - various other formats</para> - <indexterm zone="ch-system-texinfo texi2any"> - <primary sortas="b-texiany">texi2any</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="texi2pdf"> - <term><command>texi2pdf</command></term> - <listitem> - <para>Used to format the given Texinfo document into a - Portable Document Format (PDF) file</para> - <indexterm zone="ch-system-texinfo texi2pdf"> - <primary sortas="b-texi2pdf">texi2pdf</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> + <para>Details on this package are located in + <xref linkend="contents-texinfo" role="."/></para> </sect2> diff --git a/chapter06/toolchaintechnotes.xml b/chapter06/toolchaintechnotes.xml new file mode 100644 index 000000000..63c9210e5 --- /dev/null +++ b/chapter06/toolchaintechnotes.xml @@ -0,0 +1,335 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-toolchaintechnotes"> + <?dbhtml filename="toolchaintechnotes.html"?> + + <title>Toolchain Technical Notes</title> + + <para>This section explains some of the rationale and technical details + behind the overall build method. It is not essential to immediately + understand everything in this section. Most of this information will be + clearer after performing an actual build. This section can be referred + to at any time during the process.</para> + + <para>The overall goal of <xref linkend="chapter-temporary-tools"/> is to + produce a temporary area that contains a known-good set of tools that can be + isolated from the host system. By using <command>chroot</command>, the + commands in the remaining chapters will be contained within that environment, + ensuring a clean, trouble-free build of the target LFS system. The build + process has been designed to minimize the risks for new readers and to provide + the most educational value at the same time.</para> + + <para>The build process is based on the process of + <emphasis>cross-compilation</emphasis>. Cross-compilation is normally used + for building a compiler and its toolchain for a machine different from + the one that is used for the build. This is not strictly needed for LFS, + since the machine where the new system will run is the same as the one + used for the build. But cross-compilation has the great advantage that + anything that is cross-compiled cannot depend on the host environment.</para> + + <sect2 id="cross-compile" xreflabel="About Cross-Compilation"> + + <title>About Cross-Compilation</title> + + <para>Cross-compilation involves some concepts that deserve a section on + their own. Although this section may be omitted in a first reading, it + is strongly suggested to come back to it later in order to get a full + grasp of the build process.</para> + + <para>Let us first define some terms used in this context:</para> + + <variablelist> + <varlistentry><term>build</term><listitem> + <para>is the machine where we build programs. Note that this machine + is referred to as the <quote>host</quote> in other + sections.</para></listitem> + </varlistentry> + + <varlistentry><term>host</term><listitem> + <para>is the machine/system where the built programs will run. Note + that this use of <quote>host</quote> is not the same as in other + sections.</para></listitem> + </varlistentry> + + <varlistentry><term>target</term><listitem> + <para>is only used for compilers. It is the machine the compiler + produces code for. It may be different from both build and + host.</para></listitem> + </varlistentry> + + </variablelist> + + <para>As an example, let us imagine the following scenario: we may have a + compiler on a slow machine only, let's call the machine A, and the compiler + ccA. We may have also a fast machine (B), but with no compiler, and we may + want to produce code for a another slow machine (C). Then, to build a + compiler for machine C, we would have three stages:</para> + + <informaltable align="center"> + <tgroup cols="5"> + <colspec colnum="1" align="center"/> + <colspec colnum="2" align="center"/> + <colspec colnum="3" align="center"/> + <colspec colnum="4" align="center"/> + <colspec colnum="5" align="left"/> + <thead> + <row><entry>Stage</entry><entry>Build</entry><entry>Host</entry> + <entry>Target</entry><entry>Action</entry></row> + </thead> + <tbody> + <row> + <entry>1</entry><entry>A</entry><entry>A</entry><entry>B</entry> + <entry>build cross-compiler cc1 using ccA on machine A</entry> + </row> + <row> + <entry>2</entry><entry>A</entry><entry>B</entry><entry>B</entry> + <entry>build cross-compiler cc2 using cc1 on machine A</entry> + </row> + <row> + <entry>3</entry><entry>B</entry><entry>C</entry><entry>C</entry> + <entry>build compiler ccC using cc2 on machine B</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Then, all the other programs needed by machine C can be compiled + using cc2 on the fast machine B. Note that unless B can run programs + produced for C, there is no way to test the built programs until machine + C itself is running. For example, for testing ccC, we may want to add a + fourth stage:</para> + + <informaltable align="center"> + <tgroup cols="5"> + <colspec colnum="1" align="center"/> + <colspec colnum="2" align="center"/> + <colspec colnum="3" align="center"/> + <colspec colnum="4" align="center"/> + <colspec colnum="5" align="left"/> + <thead> + <row><entry>Stage</entry><entry>Build</entry><entry>Host</entry> + <entry>Target</entry><entry>Action</entry></row> + </thead> + <tbody> + <row> + <entry>4</entry><entry>C</entry><entry>C</entry><entry>C</entry> + <entry>rebuild and test ccC using itself on machine C</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>In the example above, only cc1 and cc2 are cross-compilers, that is, + they produce code for a machine different from the one they are run on. + The other compilers ccA and ccC produce code for the machine they are run + on. Such compilers are called <emphasis>native</emphasis> compilers.</para> + + </sect2> + + <sect2 id="lfs-cross"> + <title>Implementation of Cross-Compilation for LFS</title> + + <note> + <para>Almost all the build systems use names of the form + cpu-vendor-kernel-os referred to as the machine triplet. An astute + reader may wonder why a <quote>triplet</quote> refers to a four component + name. The reason is history: initially, three component names were enough + to designate unambiguously a machine, but with new machines and systems + appearing, that proved insufficient. The word <quote>triplet</quote> + remained. A simple way to determine your machine triplet is to run + the <command>config.guess</command> + script that comes with the source for many packages. Unpack the Binutils + sources and run the script: <userinput>./config.guess</userinput> and note + the output. For example, for a 32-bit Intel processor the + output will be <emphasis>i686-pc-linux-gnu</emphasis>. On a 64-bit + system it will be <emphasis>x86_64-pc-linux-gnu</emphasis>.</para> + + <para>Also be aware of the name of the platform's dynamic linker, often + referred to as the dynamic loader (not to be confused with the standard + linker <command>ld</command> that is part of Binutils). The dynamic linker + provided by Glibc finds and loads the shared libraries needed by a + program, prepares the program to run, and then runs it. The name of the + dynamic linker for a 32-bit Intel machine will be <filename + class="libraryfile">ld-linux.so.2</filename> (<filename + class="libraryfile">ld-linux-x86-64.so.2</filename> for 64-bit systems). A + sure-fire way to determine the name of the dynamic linker is to inspect a + random binary from the host system by running: <userinput>readelf -l + <name of binary> | grep interpreter</userinput> and noting the + output. The authoritative reference covering all platforms is in the + <filename>shlib-versions</filename> file in the root of the Glibc source + tree.</para> + </note> + + <para>In order to fake a cross compilation, the name of the host triplet + is slightly adjusted by changing the "vendor" field in the + <envar>LFS_TGT</envar> variable. We also use the + <parameter>--with-sysroot</parameter> when building the cross linker and + cross compiler, to tell them where to find the needed host files. This + ensures none of the other programs built in <xref + linkend="chapter-temporary-tools"/> can link to libraries on the build + machine. Only two stages are mandatory, and one more for tests:</para> + + <informaltable align="center"> + <tgroup cols="5"> + <colspec colnum="1" align="center"/> + <colspec colnum="2" align="center"/> + <colspec colnum="3" align="center"/> + <colspec colnum="4" align="center"/> + <colspec colnum="5" align="left"/> + <thead> + <row><entry>Stage</entry><entry>Build</entry><entry>Host</entry> + <entry>Target</entry><entry>Action</entry></row> + </thead> + <tbody> + <row> + <entry>1</entry><entry>pc</entry><entry>pc</entry><entry>lfs</entry> + <entry>build cross-compiler cc1 using cc-pc on pc</entry> + </row> + <row> + <entry>2</entry><entry>pc</entry><entry>lfs</entry><entry>lfs</entry> + <entry>build compiler cc-lfs using cc1 on pc</entry> + </row> + <row> + <entry>3</entry><entry>lfs</entry><entry>lfs</entry><entry>lfs</entry> + <entry>rebuild and test cc-lfs using itself on lfs</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>In the above table, <quote>on pc</quote> means the commands are run + on a machine using the already installed distribution. <quote>On + lfs</quote> means the commands are run in a chrooted environment.</para> + + <para>Now, there is more about cross-compiling: the C language is not + just a compiler, but also defines a standard library. In this book, the + GNU C library, named glibc, is used. This library must + be compiled for the lfs machine, that is, using the cross compiler cc1. + But the compiler itself uses an internal library implementing complex + instructions not available in the assembler instruction set. This + internal library is named libgcc, and must be linked to the glibc + library to be fully functional! Furthermore, the standard library for + C++ (libstdc++) also needs being linked to glibc. The solution + to this chicken and egg problem is to first build a degraded cc1+libgcc, + lacking some fuctionalities such as threads and exception handling, then + build glibc using this degraded compiler (glibc itself is not + degraded), then build libstdc++. But this last library will lack the + same functionalities as libgcc.</para> + + <para>This is not the end of the story: the conclusion of the preceding + paragraph is that cc1 is unable to build a fully functional libstdc++, but + this is the only compiler available for building the C/C++ libraries + during stage 2! Of course, the compiler built during stage 2, cc-lfs, + would be able to build those libraries, but (i) the build system of + gcc does not know that it is usable on pc, and (ii) using it on pc + would be at risk of linking to the pc libraries, since cc-lfs is a native + compiler. So we have to build libstdc++ later, in chroot.</para> + + </sect2> + + <sect2 id="other-details"> + + <title>Other procedural details</title> + + <para>The cross-compiler will be installed in a separate <filename + class="directory">$LFS/tools</filename> directory, since it will not + be part of the final system.</para> + + <para>Binutils is installed first because the <command>configure</command> + runs of both GCC and Glibc perform various feature tests on the assembler + and linker to determine which software features to enable or disable. This + is more important than one might first realize. An incorrectly configured + GCC or Glibc can result in a subtly broken toolchain, where the impact of + such breakage might not show up until near the end of the build of an + entire distribution. A test suite failure will usually highlight this error + before too much additional work is performed.</para> + + <para>Binutils installs its assembler and linker in two locations, + <filename class="directory">$LFS/tools/bin</filename> and <filename + class="directory">$LFS/tools/$LFS_TGT/bin</filename>. The tools in one + location are hard linked to the other. An important facet of the linker is + its library search order. Detailed information can be obtained from + <command>ld</command> by passing it the <parameter>--verbose</parameter> + flag. For example, <command>$LFS_TGT-ld --verbose | grep SEARCH</command> + will illustrate the current search paths and their order. It shows which + files are linked by <command>ld</command> by compiling a dummy program and + passing the <parameter>--verbose</parameter> switch to the linker. For + example, + <command>$LFS_TGT-gcc dummy.c -Wl,--verbose 2>&1 | grep succeeded</command> + will show all the files successfully opened during the linking.</para> + + <para>The next package installed is GCC. An example of what can be + seen during its run of <command>configure</command> is:</para> + +<screen><computeroutput>checking what assembler to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/as +checking what linker to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/ld</computeroutput></screen> + + <para>This is important for the reasons mentioned above. It also + demonstrates that GCC's configure script does not search the PATH + directories to find which tools to use. However, during the actual + operation of <command>gcc</command> itself, the same search paths are not + necessarily used. To find out which standard linker <command>gcc</command> + will use, run: <command>$LFS_TGT-gcc -print-prog-name=ld</command>.</para> + + <para>Detailed information can be obtained from <command>gcc</command> by + passing it the <parameter>-v</parameter> command line option while compiling + a dummy program. For example, <command>gcc -v dummy.c</command> will show + detailed information about the preprocessor, compilation, and assembly + stages, including <command>gcc</command>'s included search paths and their + order.</para> + + <para>Next installed are sanitized Linux API headers. These allow the + standard C library (Glibc) to interface with features that the Linux + kernel will provide.</para> + + <para>The next package installed is Glibc. The most important + considerations for building Glibc are the compiler, binary tools, and + kernel headers. The compiler is generally not an issue since Glibc will + always use the compiler relating to the <parameter>--host</parameter> + parameter passed to its configure script; e.g. in our case, the compiler + will be <command>$LFS_TGT-gcc</command>. The binary tools and kernel + headers can be a bit more complicated. Therefore, take no risks and use + the available configure switches to enforce the correct selections. After + the run of <command>configure</command>, check the contents of the + <filename>config.make</filename> file in the <filename + class="directory">build</filename> directory for all important details. + Note the use of <parameter>CC="$LFS_TGT-gcc"</parameter> (with + <envar>$LFS_TGT</envar> expanded) to control which binary tools are used + and the use of the <parameter>-nostdinc</parameter> and + <parameter>-isystem</parameter> flags to control the compiler's include + search path. These items highlight an important aspect of the Glibc + package—it is very self-sufficient in terms of its build machinery + and generally does not rely on toolchain defaults.</para> + + <para>As said above, the standard C++ library is compiled next, followed + by all the programs that need themselves to be built. The install step + uses the <envar>DESTDIR</envar> variable to have the programs land into + the LFS filesystem.</para> + + <para>Then the native lfs compiler is built. First Binutils Pass 2, with + the same <envar>DESTDIR</envar> install as the other programs, then the + second pass of GCC, omitting libstdc++ and other non-important libraries. + Due to some weird logic in GCC's configure script, + <envar>CC_FOR_TARGET</envar> ends up as <command>cc</command> when host + is the same as target, but is different from build. This is why + <parameter>CC_FOR_TARGET=$LFS_TGT-gcc</parameter> is put explicitely into + the configure options.</para> + + <para>Upon entering the chroot environment in <xref + linkend="chapter-building-system"/>, the first task is to install + libstdc++. Then temporary installations of programs needed for the proper + operation of the toolchain are performed. Programs needed for testing + other programs are also built. From this point onwards, the + core toolchain is self-contained and self-hosted. In the remainder of + the <xref linkend="chapter-building-system"/>, final versions of all the + packages needed for a fully functional system are built, tested and + installed.</para> + + </sect2> + +</sect1> diff --git a/chapter06/util-linux.xml b/chapter06/util-linux.xml index 519c3b171..6aebad7a1 100644 --- a/chapter06/util-linux.xml +++ b/chapter06/util-linux.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-util-linux" role="wrap"> +<sect1 id="ch-tools-util-linux" role="wrap"> <?dbhtml filename="util-linux.html"?> <sect1info condition="script"> @@ -16,24 +16,23 @@ <title>Util-linux-&util-linux-version;</title> - <indexterm zone="ch-system-util-linux"> + <indexterm zone="ch-tools-util-linux"> <primary sortas="a-Util-linux">Util-linux</primary> + <secondary>tools</secondary> </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> + <para>The Util-linux package contains miscellaneous utility programs.</para> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&util-linux-ch6-sbu;</seg> - <seg>&util-linux-ch6-du;</seg> + <seg>&util-linux-ch5-sbu;</seg> + <seg>&util-linux-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -42,31 +41,14 @@ <sect2 role="installation"> <title>Installation of Util-linux</title> - <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. Create this directory - with:</para> + <para>First create a directory + to enable storage for the <command>hwclock</command> program:</para> <screen><userinput remap="pre">mkdir -pv /var/lib/hwclock</userinput></screen> <para>Prepare Util-linux for compilation:</para> -<screen revision="sysv"><userinput remap="configure">./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ - --docdir=/usr/share/doc/util-linux-&util-linux-version; \ - --disable-chfn-chsh \ - --disable-login \ - --disable-nologin \ - --disable-su \ - --disable-setpriv \ - --disable-runuser \ - --disable-pylibmount \ - --disable-static \ - --without-python \ - --without-systemd \ - --without-systemdsystemunitdir</userinput></screen> - -<screen revision="systemd"><userinput remap="configure">./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ +<screen><userinput remap="configure">./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ --docdir=/usr/share/doc/util-linux-&util-linux-version; \ --disable-chfn-chsh \ --disable-login \ @@ -78,1241 +60,53 @@ --disable-static \ --without-python</userinput></screen> - <para>The --disable and --without options prevent warnings about - building components that require packages not in LFS or are - inconsistent with programs installed by other packages.</para> - - <para>Compile the package:</para> - -<screen><userinput remap="make">make</userinput></screen> - - <para>If desired, run the test suite as a non-root user:</para> - - <warning><para>Running the test suite as the root user can be harmful to - your system. To run it, the CONFIG_SCSI_DEBUG option for the kernel must - be available in the currently running system, and must be built as a - module. Building it into the kernel will prevent booting. For complete - coverage, other BLFS packages must be installed. If desired, this test can - be run after rebooting into the completed LFS system and running:</para> - -<screen role="nodump"><userinput>bash tests/run.sh --srcdir=$PWD --builddir=$PWD</userinput></screen> - </warning> - -<screen><userinput remap="test">chown -Rv tester . -su tester -c "make -k check"</userinput></screen> - - <para>Install the package:</para> - -<screen><userinput remap="install">make install</userinput></screen> - - </sect2> - - <sect2 id="contents-utillinux" role="content"> - <title>Contents of Util-linux</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed libraries</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - <seg>addpart, agetty, blkdiscard, blkid, blkzone, blockdev, cal, cfdisk, chcpu, - chmem, choom, chrt, col, colcrt, colrm, column, ctrlaltdel, delpart, dmesg, - eject, fallocate, fdformat, fdisk, fincore, findfs, findmnt, flock, fsck, - fsck.cramfs, fsck.minix, fsfreeze, fstrim, getopt, hexdump, hwclock, - i386, ionice, ipcmk, ipcrm, ipcs, isosize, kill, last, lastb (link to - last), ldattach, linux32, linux64, logger, look, losetup, lsblk, lscpu, - lsipc, lslocks, lslogins, lsmem, lsns, mcookie, mesg, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, - more, mount, mountpoint, namei, nsenter, partx, pivot_root, prlimit, raw, - readprofile, rename, renice, resizepart, rev, rfkill, rtcwake, script, - scriptreplay, setarch, setsid, setterm, sfdisk, sulogin, swaplabel, - swapoff (link to swapon), swapon, switch_root, taskset, ul, - umount, uname26, unshare, utmpdump, uuidd, uuidgen, uuidparse, wall, wdctl, whereis, - wipefs, x86_64, and zramctl</seg> - <seg>libblkid.so, libfdisk.so, libmount.so, - libsmartcols.so, and libuuid.so</seg> - <seg>/usr/include/blkid, - /usr/include/libfdisk, - /usr/include/libmount, - /usr/include/libsmartcols, - /usr/include/uuid, - /usr/share/doc/util-linux-&util-linux-version;, - and /var/lib/hwclock</seg> - </seglistitem> - </segmentedlist> - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="addpart"> - <term><command>addpart</command></term> - <listitem> - <para>Informs the Linux kernel of new partitions</para> - <indexterm zone="ch-system-util-linux addpart"> - <primary sortas="b-addpart">addpart</primary> - </indexterm> - </listitem> - </varlistentry> - - <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="blkdiscard"> - <term><command>blkdiscard</command></term> - <listitem> - <para>Discards sectors on a device</para> - <indexterm zone="ch-system-util-linux blkdiscard"> - <primary sortas="b-blkdiscard">blkdiscard</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-util-linux blkid"> - <primary sortas="b-blkid">blkid</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="blkzone"> - <term><command>blkzone</command></term> - <listitem> - <para>Runs zone command on the given block device</para> - <indexterm zone="ch-system-util-linux blkzone"> - <primary sortas="b-blkzone">blkzone</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="chcpu"> - <term><command>chcpu</command></term> - <listitem> - <para>Modifies the state of CPUs</para> - <indexterm zone="ch-system-util-linux chcpu"> - <primary sortas="b-chcpu">chcpu</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="chmem"> - <term><command>chmem</command></term> - <listitem> - <para>Configures memory</para> - <indexterm zone="ch-system-util-linux chmem"> - <primary sortas="b-chmem">chmem</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="choom"> - <term><command>choom</command></term> - <listitem> - <para>Displays and adjusts OOM-killer score</para> - <indexterm zone="ch-system-util-linux choom"> - <primary sortas="b-choom">choom</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="chrt"> - <term><command>chrt</command></term> - <listitem> - <para>Manipulates real-time attributes of a process</para> - <indexterm zone="ch-system-util-linux chrt"> - <primary sortas="b-chrt">chrt</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="delpart"> - <term><command>delpart</command></term> - <listitem> - <para>Asks the Linux kernel to remove a partition</para> - <indexterm zone="ch-system-util-linux delpart"> - <primary sortas="b-delpart">delpart</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="eject"> - <term><command>eject</command></term> - <listitem> - <para>Ejects removable media</para> - <indexterm zone="ch-system-util-linux eject"> - <primary sortas="b-eject">eject</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="fallocate"> - <term><command>fallocate</command></term> - <listitem> - <para>Preallocates space to a file</para> - <indexterm zone="ch-system-util-linux fallocate"> - <primary sortas="b-fallocate">fallocate</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="fincore"> - <term><command>fincore</command></term> - <listitem> - <para>Counts pages of file contents in core</para> - <indexterm zone="ch-system-util-linux fincore"> - <primary sortas="b-fincore">fincore</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-util-linux findfs"> - <primary sortas="b-findfs">findfs</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="findmnt"> - <term><command>findmnt</command></term> - <listitem> - <para>Is a command line interface to the libmount library - for work with mountinfo, fstab and mtab files</para> - <indexterm zone="ch-system-util-linux findmnt"> - <primary sortas="b-findmnt">findmnt</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="flock"> - <term><command>flock</command></term> - <listitem> - <para>Acquires a file lock and then executes a command with the lock - held</para> - <indexterm zone="ch-system-util-linux flock"> - <primary sortas="b-flock">flock</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-util-linux fsck"> - <primary sortas="b-fsck">fsck</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="fsfreeze"> - <term><command>fsfreeze</command></term> - <listitem> - <para>Is a very simple wrapper around FIFREEZE/FITHAW ioctl - kernel driver operations</para> - <indexterm zone="ch-system-util-linux fsfreeze"> - <primary sortas="b-fsfreeze">fsfreeze</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="fstrim"> - <term><command>fstrim</command></term> - <listitem> - <para>Discards unused blocks on a mounted filesystem</para> - <indexterm zone="ch-system-util-linux fstrim"> - <primary sortas="b-fstrim">fstrim</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="i386"> - <term><command>i386</command></term> - <listitem> - <para>A symbolic link to setarch</para> - <indexterm zone="ch-system-util-linux i386"> - <primary sortas="b-i386">i386</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="ionice"> - <term><command>ionice</command></term> - <listitem> - <para>Gets or sets the io scheduling class and priority for a program</para> - <indexterm zone="ch-system-util-linux ionice"> - <primary sortas="b-ionice">ionice</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="ipcmk"> - <term><command>ipcmk</command></term> - <listitem> - <para>Creates various IPC resources</para> - <indexterm zone="ch-system-util-linux ipcmk"> - <primary sortas="b-ipcmk">ipcmk</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="kill"> - <term><command>kill</command></term> - <listitem> - <para>Sends signals to processes</para> - <indexterm zone="ch-system-util-linux kill"> - <primary sortas="b-kill">kill</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-util-linux 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-util-linux lastb"> - <primary sortas="b-lastb">lastb</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="ldattach"> - <term><command>ldattach</command></term> - <listitem> - <para>Attaches a line discipline to a serial line</para> - <indexterm zone="ch-system-util-linux ldattach"> - <primary sortas="b-ldattach">ldattach</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="linux32"> - <term><command>linux32</command></term> - <listitem> - <para>A symbolic link to setarch</para> - <indexterm zone="ch-system-util-linux linux32"> - <primary sortas="b-linux32">linux32</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="linux64"> - <term><command>linux64</command></term> - <listitem> - <para>A symbolic link to setarch</para> - <indexterm zone="ch-system-util-linux linux64"> - <primary sortas="b-linux64">linux64</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="lsblk"> - <term><command>lsblk</command></term> - <listitem> - <para>Lists information about all or selected block devices in - a tree-like format</para> - <indexterm zone="ch-system-util-linux lsblk"> - <primary sortas="b-lsblk">lsblk</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lscpu"> - <term><command>lscpu</command></term> - <listitem> - <para>Prints CPU architecture information</para> - <indexterm zone="ch-system-util-linux lscpu"> - <primary sortas="b-lscpu">lscpu</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lsipc"> - <term><command>lsipc</command></term> - <listitem> - <para>Prints information on IPC facilities currently employed - in the system</para> - <indexterm zone="ch-system-util-linux lsipc"> - <primary sortas="b-lsipc">lsipc</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lslocks"> - <term><command>lslocks</command></term> - <listitem> - <para>Lists local system locks</para> - <indexterm zone="ch-system-util-linux lslocks"> - <primary sortas="b-lslocks">lslocks</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lslogins"> - <term><command>lslogins</command></term> - <listitem> - <para>Lists information about users, groups and system accounts</para> - <indexterm zone="ch-system-util-linux lslogins"> - <primary sortas="b-lslogins">lslogins</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lsmem"> - <term><command>lsmem</command></term> - <listitem> - <para>Lists the ranges of available memory with their online - status</para> - <indexterm zone="ch-system-util-linux lsmem"> - <primary sortas="b-lsmem">lsmem</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lsns"> - <term><command>lsns</command></term> - <listitem> - <para>Lists namespaces</para> - <indexterm zone="ch-system-util-linux lsns"> - <primary sortas="b-lsns">lsns</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="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-util-linux mesg"> - <primary sortas="b-mesg">mesg</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 a 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="mountpoint"> - <term><command>mountpoint</command></term> - <listitem> - <para>Checks if the directory is a mountpoint</para> - <indexterm zone="ch-system-util-linux mountpoint"> - <primary sortas="b-mountpoint">mountpoint</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="nsenter"> - <term><command>nsenter</command></term> - <listitem> - <para>Runs a program with namespaces of other processes</para> - <indexterm zone="ch-system-util-linux nsenter"> - <primary sortas="b-nsenter">nsenter</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="partx"> - <term><command>partx</command></term> - <listitem> - <para>Tells the kernel about the presence and numbering of on-disk - partitions</para> - <indexterm zone="ch-system-util-linux partx"> - <primary sortas="b-partx">partx</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="prlimit"> - <term><command>prlimit</command></term> - <listitem> - <para>Get and set a process' resource limits</para> - <indexterm zone="ch-system-util-linux prlimit"> - <primary sortas="b-prlimit">prlimit</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="raw"> - <term><command>raw</command></term> - <listitem> - <para>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="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="resizepart"> - <term><command>resizepart</command></term> - <listitem> - <para>Asks the Linux kernel to resize a partition</para> - <indexterm zone="ch-system-util-linux resizepart"> - <primary sortas="b-resizepart">resizepart</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="rkfill"> - <term><command>rkfill</command></term> - <listitem> - <para>Tool for enabling and disabling wireless devices</para> - <indexterm zone="ch-system-util-linux rkfill"> - <primary sortas="b-rkfill">rkfill</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="rtcwake"> - <term><command>rtcwake</command></term> - <listitem> - <para>Used to enter a system sleep state until specified wakeup - time</para> - <indexterm zone="ch-system-util-linux rtcwake"> - <primary sortas="b-rtcwake">rtcwake</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="scriptreplay"> - <term><command>scriptreplay</command></term> - <listitem> - <para>Plays back typescripts using timing information</para> - <indexterm zone="ch-system-util-linux scriptreplay"> - <primary sortas="b-scriptreplay">scriptreplay</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="setarch"> - <term><command>setarch</command></term> - <listitem> - <para>Changes reported architecture in a new program environment and - sets personality flags</para> - <indexterm zone="ch-system-util-linux setarch"> - <primary sortas="b-setarch">setarch</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> + <title>The meaning of the configure options:</title> +<!-- TODO --> + <varlistentry> + <term><parameter>ADJTIME_PATH=/var/lib/hwclock/adjtime</parameter></term> <listitem> - <para>Sets terminal attributes</para> - <indexterm zone="ch-system-util-linux setterm"> - <primary sortas="b-setterm">setterm</primary> - </indexterm> + <para>This sets the location of the file recording information about + the hardware clock, in accordance to the FHS. This is not stricly + needed fot his temporary tool, but it prevent creating a file + at another location, which would not be overwritten or removed + when building the final util-linux.</para> </listitem> </varlistentry> - <varlistentry id="sfdisk"> - <term><command>sfdisk</command></term> + <varlistentry> + <term><parameter>--disable-*</parameter></term> <listitem> - <para>A disk partition table manipulator</para> - <indexterm zone="ch-system-util-linux sfdisk"> - <primary sortas="b-sfdisk">sfdisk</primary> - </indexterm> + <para>Those switches prevent warnings about building components + that require packages not in LFS or not installed yet.</para> </listitem> </varlistentry> - <varlistentry id="sulogin"> - <term><command>sulogin</command></term> + <varlistentry> + <term><parameter>--without-python</parameter></term> <listitem> - <para>Allows <systemitem class="username">root</systemitem> to log in; - it is normally invoked by <command>init</command> when the system goes - into single user mode</para> - <indexterm zone="ch-system-util-linux sulogin"> - <primary sortas="b-sulogin">sulogin</primary> - </indexterm> + <para>This switch disables using <application>Python</application>. + It avoids trying to build unneeded bindings.</para> </listitem> </varlistentry> - <varlistentry id="swaplabel"> - <term><command>swaplabel</command></term> - <listitem> - <para>Allows to change swaparea UUID and label</para> - <indexterm zone="ch-system-util-linux swaplabel"> - <primary sortas="b-swaplabel">swaplabel</primary> - </indexterm> - </listitem> - </varlistentry> + </variablelist> - <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 and - lists the devices and files currently in use</para> - <indexterm zone="ch-system-util-linux swapon"> - <primary sortas="b-swapon">swapon</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="switch_root"> - <term><command>switch_root</command></term> - <listitem> - <para>Switches to another filesystem as the root of the mount tree</para> - <indexterm zone="ch-system-util-linux switch_root"> - <primary sortas="b-switch_root">switch_root</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="tailf"> - <term><command>tailf</command></term> - <listitem> - <para>Tracks the growth of a log file; displays the last 10 lines - of a log file, then continues displaying any new entries in the - log file as they are created</para> - <indexterm zone="ch-system-util-linux tailf"> - <primary sortas="b-tailf">tailf</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="taskset"> - <term><command>taskset</command></term> - <listitem> - <para>Retrieves or sets a process' CPU affinity</para> - <indexterm zone="ch-system-util-linux taskset"> - <primary sortas="b-taskset">taskset</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="uname26"> - <term><command>uname26</command></term> - <listitem> - <para>A symbolic link to setarch</para> - <indexterm zone="ch-system-util-linux uname26"> - <primary sortas="b-uname26">uname26</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="unshare"> - <term><command>unshare</command></term> - <listitem> - <para>Runs a program with some namespaces unshared from parent</para> - <indexterm zone="ch-system-util-linux unshare"> - <primary sortas="b-unshare">unshare</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-util-linux utmpdump"> - <primary sortas="b-utmpdump">utmpdump</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="uuidd"> - <term><command>uuidd</command></term> - <listitem> - <para>A daemon used by the UUID library to generate time-based - UUIDs in a secure and guaranteed-unique fashion</para> - <indexterm zone="ch-system-util-linux uuidd"> - <primary sortas="b-uuidd">uuidd</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-util-linux uuidgen"> - <primary sortas="b-uuidgen">uuidgen</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="uuidparse"> - <term><command>uuidparse</command></term> - <listitem> - <para>An utility to parse unique identifiers</para> - <indexterm zone="ch-system-util-linux uuidparse"> - <primary sortas="b-uuidparse">uuidparse</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="wall"> - <term><command>wall</command></term> - <listitem> - <para>Displays the contents of a file or, by default, its standard - input, on the terminals of all currently logged in users</para> - <indexterm zone="ch-system-util-linux wall"> - <primary sortas="b-wall">wall</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="wdctl"> - <term><command>wdctl</command></term> - <listitem> - <para>Shows hardware watchdog status</para> - <indexterm zone="ch-system-util-linux wdctl"> - <primary sortas="b-wdctl">wdctl</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="whereis"> - <term><command>whereis</command></term> - <listitem> - <para>Reports the location of the binary, source, and man page - for the given command</para> - <indexterm zone="ch-system-util-linux whereis"> - <primary sortas="b-whereis">whereis</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="wipefs"> - <term><command>wipefs</command></term> - <listitem> - <para>Wipes a filesystem signature from a device</para> - <indexterm zone="ch-system-util-linux wipefs"> - <primary sortas="b-wipefs">wipefs</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="x86_64"> - <term><command>x86_64</command></term> - <listitem> - <para>A symbolic link to setarch</para> - <indexterm zone="ch-system-util-linux x86_64"> - <primary sortas="b-x86_64">x86_64</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="zramctl"> - <term><command>zramctl</command></term> - <listitem> - <para>A program to set up and control zram (compressed ram disk) - devices</para> - <indexterm zone="ch-system-util-linux zramctl"> - <primary sortas="b-zramctl">zramctl</primary> - </indexterm> - </listitem> - </varlistentry> + <para>Compile the package:</para> - <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-util-linux libblkid"> - <primary sortas="c-libblkid">libblkid</primary> - </indexterm> - </listitem> - </varlistentry> +<screen><userinput remap="make">make</userinput></screen> - <varlistentry id="libfdisk"> - <term><filename class="libraryfile">libfdisk</filename></term> - <listitem> - <para>Contains routines for manipulating partition tables</para> - <indexterm zone="ch-system-util-linux libfdisk"> - <primary sortas="c-libfdisk">libfdisk</primary> - </indexterm> - </listitem> - </varlistentry> + <para>Install the package:</para> - <varlistentry id="libmount"> - <term><filename class="libraryfile">libmount</filename></term> - <listitem> - <para>Contains routines for block device mounting and - unmounting</para> - <indexterm zone="ch-system-util-linux libmount"> - <primary sortas="c-libmount">libmount</primary> - </indexterm> - </listitem> - </varlistentry> +<screen><userinput remap="install">make install</userinput></screen> - <varlistentry id="libsmartcols"> - <term><filename class="libraryfile">libsmartcols</filename></term> - <listitem> - <para>Contains routines for aiding screen output in tabular form</para> - <indexterm zone="ch-system-util-linux libsmartcols"> - <primary sortas="c-libsmartcols">libsmartcols</primary> - </indexterm> - </listitem> - </varlistentry> + </sect2> - <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-util-linux libuuid"> - <primary sortas="c-libuuid">libuuid</primary> - </indexterm> - </listitem> - </varlistentry> + <sect2 role="content"> + <title/> - </variablelist> + <para>Details on this package are located in + <xref linkend="contents-utillinux" role="."/></para> </sect2> diff --git a/chapter06/xz.xml b/chapter06/xz.xml index 5a342b2ff..9e2d0da4b 100644 --- a/chapter06/xz.xml +++ b/chapter06/xz.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-system-xz" role="wrap"> +<sect1 id="ch-tools-xz" role="wrap"> <?dbhtml filename="xz.html"?> <sect1info condition="script"> @@ -16,26 +16,25 @@ <title>Xz-&xz-version;</title> - <indexterm zone="ch-system-xz"> + <indexterm zone="ch-tools-xz"> <primary sortas="a-xz">Xz</primary> + <secondary>tools</secondary> </indexterm> <sect2 role="package"> <title/> - <para>The Xz package contains programs for compressing and decompressing - files. It provides capabilities for the lzma and the newer xz compression - formats. Compressing text files with <command>xz</command> yields a better - compression percentage than with the traditional <command>gzip</command> or - <command>bzip2</command> commands.</para> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/xz.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> - <seg>&xz-ch6-sbu;</seg> - <seg>&xz-ch6-du;</seg> + <seg>&xz-ch5-sbu;</seg> + <seg>&xz-ch5-du;</seg> </seglistitem> </segmentedlist> @@ -44,320 +43,34 @@ <sect2 role="installation"> <title>Installation of Xz</title> - <para>Prepare Xz for compilation with:</para> + <para>Prepare Xz for compilation:</para> -<screen><userinput remap="configure">./configure --prefix=/usr \ - --disable-static \ +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) \ + --disable-static \ --docdir=/usr/share/doc/xz-&xz-version;</userinput></screen> - <para>Compile the package:</para> + <para>Compile the package:</para> <screen><userinput remap="make">make</userinput></screen> - <para>To test the results, issue:</para> + <para>Install the package:</para> -<screen><userinput remap="test">make check</userinput></screen> +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> - <para>Install the package and make sure that all essential files are in the - correct directory:</para> + <para>Make sure that all essential files are in the correct directory:</para> -<screen><userinput remap="install">make install -mv -v /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin -mv -v /usr/lib/liblzma.so.* /lib -ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so</userinput></screen> +<screen><userinput remap="install">mv -v $LFS/usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} $LFS/bin +mv -v $LFS/usr/lib/liblzma.so.* $LFS/lib +ln -svf ../../lib/$(readlink $LFS/usr/lib/liblzma.so) $LFS/usr/lib/liblzma.so</userinput></screen> </sect2> - <sect2 id="contents-xz" role="content"> - <title>Contents of Xz</title> - - <segmentedlist> - <segtitle>Installed programs</segtitle> - <segtitle>Installed libraries</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - <seg> - lzcat (link to xz), - lzcmp (link to xzdiff), - lzdiff (link to xzdiff), - lzegrep (link to xzgrep), - lzfgrep (link to xzgrep), - lzgrep (link to xzgrep), - lzless (link to xzless), - lzma (link to xz), - lzmadec, - lzmainfo, - lzmore (link to xzmore), - unlzma (link to xz), - unxz (link to xz), - xz, - xzcat (link to xz), - xzcmp (link to xzdiff), - xzdec, - xzdiff, - xzegrep (link to xzgrep), - xzfgrep (link to xzgrep), - xzgrep, - xzless, and - xzmore</seg> - <seg> - liblzma.so - </seg> - <seg> - /usr/include/lzma and - /usr/share/doc/xz-&xz-version; - </seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="lzcat"> - <term><command>lzcat</command></term> - <listitem> - <para>Decompresses to standard output</para> - <indexterm zone="ch-system-xz lzcat"> - <primary sortas="b-lzcat">lzcat</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzcmp"> - <term><command>lzcmp</command></term> - <listitem> - <para>Runs <command>cmp</command> on LZMA compressed files</para> - <indexterm zone="ch-system-xz lzcmp"> - <primary sortas="b-lzcmp">lzcmp</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzdiff"> - <term><command>lzdiff</command></term> - <listitem> - <para>Runs <command>diff</command> on LZMA compressed files</para> - <indexterm zone="ch-system-xz lzdiff"> - <primary sortas="b-lzdiff">lzdiff</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzegrep"> - <term><command>lzegrep</command></term> - <listitem> - <para>Runs <command>egrep</command> on LZMA compressed files</para> - <indexterm zone="ch-system-xz lzegrep"> - <primary sortas="b-lzegrep">lzegrep</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzfgrep"> - <term><command>lzfgrep</command></term> - <listitem> - <para>Runs <command>fgrep</command> on LZMA compressed files</para> - <indexterm zone="ch-system-xz lzfgrep"> - <primary sortas="b-lzfgrep">lzfgrep</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzgrep"> - <term><command>lzgrep</command></term> - <listitem> - <para>Runs <command>grep</command> on LZMA compressed files</para> - <indexterm zone="ch-system-xz lzgrep"> - <primary sortas="b-lzgrep">lzgrep</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzless"> - <term><command>lzless</command></term> - <listitem> - <para>Runs <command>less</command> on LZMA compressed files</para> - <indexterm zone="ch-system-xz lzless"> - <primary sortas="b-lzless">lzless</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzma"> - <term><command>lzma</command></term> - <listitem> - <para>Compresses or decompresses files using the LZMA format</para> - <indexterm zone="ch-system-xz lzma"> - <primary sortas="b-lzma">lzma</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzmadec"> - <term><command>lzmadec</command></term> - <listitem> - <para>A small and fast decoder for LZMA compressed files</para> - <indexterm zone="ch-system-xz lzmadec"> - <primary sortas="b-lzmadec">lzmadec</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzmainfo"> - <term><command>lzmainfo</command></term> - <listitem> - <para>Shows information stored in the LZMA compressed file header</para> - <indexterm zone="ch-system-xz lzmainfo"> - <primary sortas="b-lzmainfo">lzmainfo</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lzmore"> - <term><command>lzmore</command></term> - <listitem> - <para>Runs <command>more</command> on LZMA compressed files</para> - <indexterm zone="ch-system-xz lzmore"> - <primary sortas="b-lzmamore">lzmore</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="unlzma"> - <term><command>unlzma</command></term> - <listitem> - <para>Decompresses files using the LZMA format</para> - <indexterm zone="ch-system-xz unlzma"> - <primary sortas="b-unlzma">unlzma</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="unxz"> - <term><command>unxz</command></term> - <listitem> - <para>Decompresses files using the XZ format</para> - <indexterm zone="ch-system-xz unxz"> - <primary sortas="b-unxz">unxz</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xz"> - <term><command>xz</command></term> - <listitem> - <para>Compresses or decompresses files using the XZ format</para> - <indexterm zone="ch-system-xz xz"> - <primary sortas="b-xz">xz</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xzcat"> - <term><command>xzcat</command></term> - <listitem> - <para>Decompresses to standard output</para> - <indexterm zone="ch-system-xz xzcat"> - <primary sortas="b-xzcat">xzcat</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xzcmp"> - <term><command>xzcmp</command></term> - <listitem> - <para>Runs <command>cmp</command> on XZ compressed files</para> - <indexterm zone="ch-system-xz xzcmp"> - <primary sortas="b-xzcmp">xzcmp</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xzdec"> - <term><command>xzdec</command></term> - <listitem> - <para>A small and fast decoder for XZ compressed files</para> - <indexterm zone="ch-system-xz xzdec"> - <primary sortas="b-xzdec">xzdec</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xzdiff"> - <term><command>xzdiff</command></term> - <listitem> - <para>Runs <command>diff</command> on XZ compressed files</para> - <indexterm zone="ch-system-xz xzdiff"> - <primary sortas="b-xzdiff">xzdiff</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xzegrep"> - <term><command>xzegrep</command></term> - <listitem> - <para>Runs <command>egrep</command> on XZ compressed files</para> - <indexterm zone="ch-system-xz xzegrep"> - <primary sortas="b-xzegrep">xzegrep</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xzfgrep"> - <term><command>xzfgrep</command></term> - <listitem> - <para>Runs <command>fgrep</command> on XZ compressed files</para> - <indexterm zone="ch-system-xz xzfgrep"> - <primary sortas="b-xzfgrep">xzfgrep</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xzgrep"> - <term><command>xzgrep</command></term> - <listitem> - <para>Runs <command>grep</command> on XZ compressed files</para> - <indexterm zone="ch-system-xz xzgrep"> - <primary sortas="b-xzgrep">xzgrep</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xzless"> - <term><command>xzless</command></term> - <listitem> - <para>Runs <command>less</command> on XZ compressed files</para> - <indexterm zone="ch-system-xz xzless"> - <primary sortas="b-xzless">xzless</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="xzmore"> - <term><command>xzmore</command></term> - <listitem> - <para>Runs <command>more</command> on XZ compressed files</para> - <indexterm zone="ch-system-xz xzmore"> - <primary sortas="b-xzmore">xzmore</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="liblzma"> - <term><filename class="libraryfile">liblzma</filename></term> - <listitem> - <para>The library implementing lossless, block-sorting data - compression, using the Lempel-Ziv-Markov chain algorithm</para> - <indexterm zone="ch-system-xz liblzma"> - <primary sortas="c-liblzma">liblzma</primary> - </indexterm> - </listitem> - </varlistentry> - - </variablelist> + <sect2 role="content"> + <title/> + <para>Details on this package are located in<!-- TODO + <xref linkend="contents-xz" role="."/> --></para> </sect2> diff --git a/chapter07/bash.xml b/chapter07/bash.xml new file mode 100644 index 000000000..ee1fb574e --- /dev/null +++ b/chapter07/bash.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-bash" role="wrap"> + <?dbhtml filename="bash.html"?> + + <sect1info condition="script"> + <productname>bash</productname> + <productnumber>&bash-version;</productnumber> + <address>&bash-url;</address> + </sect1info> + + <title>Bash-&bash-version;</title> + + <indexterm zone="ch-tools-bash"> + <primary sortas="a-Bash">Bash</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/bash.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&bash-ch5-sbu;</seg> + <seg>&bash-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Bash</title> + + <para>Prepare Bash for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --build=$(support/config.guess) \ + --host=$LFS_TGT \ + --without-bash-malloc</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--without-bash-malloc</parameter></term> + <listitem> + <para>This option turns off the use of Bash's memory allocation + (<function>malloc</function>) function which is known to cause + segmentation faults. By turning this option off, Bash will use + the <function>malloc</function> functions from Glibc which are + more stable.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + <para>Move the excutable to where it is expected to be:</para> + +<screen><userinput remap="install">mv $LFS/usr/bin/bash $LFS/bin/bash</userinput></screen> + + <para>Make a link for the programs that use <command>sh</command> for + a shell:</para> + +<screen><userinput remap="install">ln -sv bash $LFS/bin/sh</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-bash" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/binutils-pass1.xml b/chapter07/binutils-pass1.xml new file mode 100644 index 000000000..8658cfcfe --- /dev/null +++ b/chapter07/binutils-pass1.xml @@ -0,0 +1,156 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-binutils-pass1" role="wrap"> + <?dbhtml filename="binutils-pass1.html"?> + + <sect1info condition="script"> + <productname>binutils-pass1</productname> + <productnumber>&binutils-version;</productnumber> + <address>&binutils-url;</address> + </sect1info> + + <title>Binutils-&binutils-version; - Pass 1</title> + + <indexterm zone="ch-tools-binutils-pass1"> + <primary sortas="a-Binutils">Binutils</primary> + <secondary>tools, pass 1</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/binutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&binutils-ch5p1-sbu;</seg> + <seg>&binutils-ch5p1-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Cross Binutils</title> + + <note><para>Go back and re-read the notes in the previous section. + Understanding the notes labeled important will save you a lot + of problems later.</para></note> + + <para>It is important that Binutils be the first package compiled + because both Glibc and GCC perform various tests on the available + linker and assembler to determine which of their own features to + enable.</para> + + <para>The Binutils documentation recommends building Binutils + in a dedicated build directory:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <note> + <para>In order for the SBU values listed in the rest of the book + to be of any use, measure the time it takes to build this package from + the configuration, up to and including the first install. To achieve + this easily, wrap the commands in a <command>time</command> + command like this: <userinput>time { ./configure ... && ... + && make install; }</userinput>.</para> + </note> +<!-- + <note><para>The approximate build SBU values and required disk space + in Chapter 5 does not include test suite data.</para></note> +--> + <para>Now prepare Binutils for compilation:</para> + +<screen><userinput remap="configure">../configure --prefix=$LFS/tools \ + --with-sysroot=$LFS \ + --target=$LFS_TGT \ + --disable-nls \ + --disable-werror</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--prefix=$LFS/tools</parameter></term> + <listitem> + <para>This tells the configure script to prepare to install the + Binutils programs in the <filename + class="directory">$LFS/tools</filename> directory.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-sysroot=$LFS</parameter></term> + <listitem> + <para>For cross compilation, this tells the build system to look in + $LFS for the target system libraries as needed.</para> + </listitem> + </varlistentry> + <!-- + <varlistentry> + <term><parameter>- -with-lib-path=/tools/lib</parameter></term> + <listitem> + <para>This specifies which library path the linker should be + configured to use.</para> + </listitem> + </varlistentry> + --> + <varlistentry> + <term><envar>--target=$LFS_TGT</envar></term> + <listitem> + <para>Because the machine description in the <envar>LFS_TGT</envar> + variable is slightly different than the value returned by the + <command>config.guess</command> script, this switch will tell the + <command>configure</command> script to adjust Binutil's build system + for building a cross linker. </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-nls</parameter></term> + <listitem> + <para>This disables internationalization as i18n is not needed for the + temporary tools.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-werror</parameter></term> + <listitem> + <para>This prevents the build from stopping in the event that there + are warnings from the host's compiler.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Continue with compiling the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-binutils" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/binutils-pass2.xml b/chapter07/binutils-pass2.xml new file mode 100644 index 000000000..5d0fd7e6d --- /dev/null +++ b/chapter07/binutils-pass2.xml @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-binutils-pass2" role="wrap"> + <?dbhtml filename="binutils-pass2.html"?> + + <sect1info condition="script"> + <productname>binutils-pass2</productname> + <productnumber>&binutils-version;</productnumber> + <address>&binutils-url;</address> + </sect1info> + + <title>Binutils-&binutils-version; - Pass 2</title> + + <indexterm zone="ch-tools-binutils-pass2"> + <primary sortas="a-Binutils">Binutils</primary> + <secondary>tools, pass 2</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/binutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&binutils-ch5p2-sbu;</seg> + <seg>&binutils-ch5p2-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Binutils</title> + + <para>Create a separate build directory again:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare Binutils for compilation:</para> + +<screen><userinput remap="configure">../configure \ + --prefix=/usr \ + --build=$(../config.guess) \ + --host=$LFS_TGT \ + --disable-nls \ + --enable-shared \ + --disable-werror</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title> + + <varlistentry> + <term><parameter>--host=$LFS_TGT</parameter></term> + <listitem> + <para>This tells the configure script that we want to build + this pass of binutils for the $LFS_TGT machine, using our just + built cross-compiler. This prevents the linker from searching + through library directories on the host.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-binutils" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/bison.xml b/chapter07/bison.xml new file mode 100644 index 000000000..3ed86713a --- /dev/null +++ b/chapter07/bison.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-bison" role="wrap"> + <?dbhtml filename="bison.html"?> + + <sect1info condition="script"> + <productname>bison</productname> + <productnumber>&bison-version;</productnumber> + <address>&bison-url;</address> + </sect1info> + + <title>Bison-&bison-version;</title> + + <indexterm zone="ch-tools-bison"> + <primary sortas="a-Bison">Bison</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/bison.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&bison-ch5-sbu;</seg> + <seg>&bison-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Bison</title> + + <para>Prepare Bison for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --docdir=/usr/share/doc/bison-&bison-version;</userinput></screen> + + <variablelist> + <title>The meaning of the new configure option:</title> + + <varlistentry> + <term><parameter>--docdir=/usr/share/doc/bison-&bison-version;</parameter></term> + <listitem> + <para>This tells the build system to install bison documentation + into a versioned directory.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-bison" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/bzip2.xml b/chapter07/bzip2.xml new file mode 100644 index 000000000..828b7fc0f --- /dev/null +++ b/chapter07/bzip2.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-bzip2" role="wrap"> + <?dbhtml filename="bzip2.html"?> + + <sect1info condition="script"> + <productname>bzip2</productname> + <productnumber>&bzip2-version;</productnumber> + <address>&bzip2-url;</address> + </sect1info> + + <title>Bzip2-&bzip2-version;</title> + + <indexterm zone="ch-tools-bzip2"> + <primary sortas="a-Bzip2">Bzip2</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/bzip2.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&bzip2-ch5-sbu;</seg> + <seg>&bzip2-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Bzip2</title> + + <para>Apply a patch that will install the documentation for this + package:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&bzip2-docs-patch;</userinput></screen> + + <para>The following command ensures installation of symbolic links are + relative:</para> + +<screen><userinput remap="pre">sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile</userinput></screen> + + <para>Ensure the man pages are installed into the correct location:</para> + +<screen><userinput remap="pre">sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile</userinput></screen> + + <para>The Bzip2 package does not contain a <command>configure</command> + script. There are two <filename>Makefile</filename>, one for the shared + library, and the other for the static library. Since we need both, We + do the compilation in two stages. First the shared library:</para> + +<screen><userinput remap="make">make CC=$LFS_TGT-gcc -f Makefile-libbz2_so +make clean</userinput></screen> + + <variablelist> + <title>The meaning of the make parameter:</title> + + <varlistentry> + <term><parameter>-f Makefile-libbz2_so</parameter></term> + <listitem> + <para>This 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> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile and test the package with:</para> + +<screen><userinput remap="make">make CC=$LFS_TGT-gcc AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make PREFIX=$LFS/usr install</userinput></screen> + + <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 remap="install">cp -v bzip2-shared $LFS/bin/bzip2 +cp -av libbz2.so* $LFS/lib +ln -sv ../../lib/libbz2.so.1.0 $LFS/usr/lib/libbz2.so +rm -v $LFS/usr/bin/{bunzip2,bzcat,bzip2} +ln -sv bzip2 $LFS/bin/bunzip2 +ln -sv bzip2 $LFS/bin/bzcat</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + <para>Details on this package are located in + <xref linkend="contents-bzip2" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/changingowner.xml b/chapter07/changingowner.xml new file mode 100644 index 000000000..43a902821 --- /dev/null +++ b/chapter07/changingowner.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-changingowner"> + <?dbhtml filename="changingowner.html"?> + + <title>Changing Ownership</title> + + <note> + <para>The commands in the remainder of this book must be performed while + logged in as user <systemitem class="username">root</systemitem> and no + longer as user <systemitem class="username">lfs</systemitem>. Also, double + check that <envar>$LFS</envar> is set in <systemitem + class="username">root</systemitem>'s environment.</para> + </note> + + <para>Currently, the whole directory hierarchy in <filename + class="directory">$LFS</filename> + is owned by the user <systemitem class="username">lfs</systemitem>, a user + that exists only on the host system. If the directories under <filename + class="directory">$LFS</filename> are kept as they are, 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 all + the files under <filename class="directory">$LFS</filename>, thus exposing + these files to possible malicious manipulation.</para> + + <para>To avoid this issue, you could add the <systemitem + class="username">lfs</systemitem> 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. Better yet, change the + ownership of the <filename class="directory">$LFS/*</filename> directories to + user <systemitem class="username">root</systemitem> by running the following + command:</para> + +<screen><userinput>chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,lib64,tools}</userinput></screen> + +</sect1> diff --git a/chapter07/chapter07.xml b/chapter07/chapter07.xml index b745594da..df740eaa5 100644 --- a/chapter07/chapter07.xml +++ b/chapter07/chapter07.xml @@ -5,39 +5,25 @@ %general-entities; ]> -<chapter id="chapter-config" xreflabel="Chapter 7"> +<chapter id="chapter-chroot-temporary-tools" xreflabel="Chapter 7"> <?dbhtml dir="chapter07"?> <?dbhtml filename="chapter07.html"?> - <title>System Configuration</title> - - <!-- sysv --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introduction.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bootscripts.xml"/> - - <!-- systemd --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introductiond.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="networkd.xml"/> - - <!-- common --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="udev.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="symlinks.xml"/> - - <!-- sysv --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="network.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="usage.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="profile.xml"/> - - <!-- systemd --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="clock.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="consoled.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="locale.xml"/> - - <!-- common --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="inputrc.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="etcshells.xml"/> - - <!-- systemd --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="systemd-custom.xml"/> + <title>Entering Chroot and Building Additional Tools</title> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kernfs.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chroot.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="creatingdirs.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="createfiles.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libstdc++-pass2.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bison.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gettext.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="perl.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="python.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="texinfo.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="util-linux.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="tcl.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="expect.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dejagnu.xml"/> </chapter> diff --git a/chapter07/chroot.xml b/chapter07/chroot.xml new file mode 100644 index 000000000..5b6310af7 --- /dev/null +++ b/chapter07/chroot.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-chroot"> + <?dbhtml filename="chroot.html"?> + + <title>Entering the Chroot Environment</title> + + <para>Now that all the packages which depend on themselves for being built + are on the system, it is time to enter the chroot environment to finish + installing the remaining temporary tools. This environment will be in use + also for installing the final system. As user <systemitem + class="username">root</systemitem>, run the following command to enter the + realm that is, at the moment, populated with only the temporary tools:</para> + +<screen role="nodump"><userinput>chroot "$LFS" /usr/bin/env -i \ + HOME=/root \ + TERM="$TERM" \ + PS1='(lfs chroot) \u:\w\$ ' \ + PATH=/bin:/usr/bin:/sbin:/usr/sbin \ + /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> is not + anymore in the <envar>PATH</envar>. This means that a temporary tool will no longer be + used once its final version is installed. This occurs when the shell does not + <quote>remember</quote> the locations of executed binaries—for this + reason, hashing is switched off by passing the <parameter>+h</parameter> option + to <command>bash</command>.</para> + + <para>Note that the <command>bash</command> prompt will say + <computeroutput>I have no name!</computeroutput> This is normal because the + <filename>/etc/passwd</filename> file has not been created yet.</para> + + <note> + <para>It is important that all the commands throughout the remainder of this + chapter and the following chapters are run from within the chroot + environment. If you leave this environment for any reason (rebooting for + example), ensure that the virtual kernel filesystems are mounted as + explained in <xref linkend="ch-system-bindmount"/> and <xref + linkend="ch-system-kernfsmount"/> and enter chroot again before continuing + with the installation.</para> + </note> + +</sect1> diff --git a/chapter07/coreutils.xml b/chapter07/coreutils.xml new file mode 100644 index 000000000..f1e380f7e --- /dev/null +++ b/chapter07/coreutils.xml @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-coreutils" role="wrap"> + <?dbhtml filename="coreutils.html"?> + + <sect1info condition="script"> + <productname>coreutils</productname> + <productnumber>&coreutils-version;</productnumber> + <address>&coreutils-url;</address> + </sect1info> + + <title>Coreutils-&coreutils-version;</title> + + <indexterm zone="ch-tools-coreutils"> + <primary sortas="a-Coreutils">Coreutils</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/coreutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&coreutils-ch5-sbu;</seg> + <seg>&coreutils-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Coreutils</title> + + <para>Prepare Coreutils for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) \ + --enable-install-program=hostname \ + --enable-no-install-program=kill,uptime</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><envar>--enable-install-program=hostname</envar></term> + <listitem> + <para>This enables the <command>hostname</command> binary to be built + and installed – it is disabled by default but is required by the + Perl test suite.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> +<!-- + <para>The above command refuses to install <filename>su</filename> + because the program cannot be installed setuid root as a non-privileged + user. By manually installing it, we can use it for running tests in the + final system as a non-privileged user. Install it with:</para> + +<screen><userinput remap="install">cp -v src/su /tools/bin</userinput></screen> +--> + <para>Move programs to their final expected locations. Although this is + not necessary in this temporary environment, we must do so because some + programs harcode executable locations:</para> + +<screen><userinput remap="install">mv -v $LFS/usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} $LFS/bin +mv -v $LFS/usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} $LFS/bin +mv -v $LFS/usr/bin/{rmdir,stty,sync,true,uname} $LFS/bin +mv -v $LFS/usr/bin/chroot $LFS/usr/sbin +mkdir -pv $LFS/usr/share/man/man8 +mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8 +sed -i s/\"1\"/\"8\"/1 $LFS/usr/share/man/man8/chroot.8 +mv -v $LFS/usr/bin/{head,nice,sleep,touch} $LFS/bin</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-coreutils" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/createfiles.xml b/chapter07/createfiles.xml new file mode 100644 index 000000000..aed8d79da --- /dev/null +++ b/chapter07/createfiles.xml @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-createfiles"> + <?dbhtml filename="createfiles.html"?> + + <title>Creating Essential Files and Symlinks</title> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/etc/passwd">/etc/passwd</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/etc/group">/etc/group</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/var/run/utmp">/var/run/utmp</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/var/log/btmp">/var/log/btmp</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/var/log/lastlog">/var/log/lastlog</primary> + </indexterm> + + <indexterm zone="ch-tools-createfiles"> + <primary sortas="e-/var/log/wtmp">/var/log/wtmp</primary> + </indexterm> + + <para>Historically, Linux maintains a list of the mounted file systems in the + file <filename>/etc/mtab</filename>. Modern kernels maintain this list + internally and exposes it to the user via the <filename + class="directory">/proc</filename> filesystem. To satisfy utilities that + expect the presence of <filename>/etc/mtab</filename>, create the following + symbolic link:</para> + +<screen><userinput>ln -sv /proc/self/mounts /etc/mtab</userinput></screen> + + <para>In order for user <systemitem class="username">root</systemitem> to be + able to login and for the name <quote>root</quote> to be recognized, there + must 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 revision="sysv"><userinput>cat > /etc/passwd << "EOF" +<literal>root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/dev/null:/bin/false +daemon:x:6:6:Daemon User:/dev/null:/bin/false +messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false +nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal> +EOF</userinput></screen> + +<screen revision="systemd"><userinput>cat > /etc/passwd << "EOF" +<literal>root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/dev/null:/bin/false +daemon:x:6:6:Daemon User:/dev/null:/bin/false +messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false +systemd-bus-proxy:x:72:72:systemd Bus Proxy:/:/bin/false +systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/bin/false +systemd-journal-remote:x:74:74:systemd Journal Remote:/:/bin/false +systemd-journal-upload:x:75:75:systemd Journal Upload:/:/bin/false +systemd-network:x:76:76:systemd Network Management:/:/bin/false +systemd-resolve:x:77:77:systemd Resolver:/:/bin/false +systemd-timesync:x:78:78:systemd Time Synchronization:/:/bin/false +systemd-coredump:x:79:79:systemd Core Dumper:/:/bin/false +nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal> +EOF</userinput></screen> + + <para>The actual password for <systemitem class="username">root</systemitem> + (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 revision="sysv"><userinput>cat > /etc/group << "EOF" +<literal>root:x:0: +bin:x:1:daemon +sys:x:2: +kmem:x:3: +tape:x:4: +tty:x:5: +daemon:x:6: +floppy:x:7: +disk:x:8: +lp:x:9: +dialout:x:10: +audio:x:11: +video:x:12: +utmp:x:13: +usb:x:14: +cdrom:x:15: +adm:x:16: +messagebus:x:18: +input:x:24: +mail:x:34: +kvm:x:61: +wheel:x:97: +nogroup:x:99: +users:x:999:</literal> +EOF</userinput></screen> + +<screen revision="systemd"><userinput>cat > /etc/group << "EOF" +<literal>root:x:0: +bin:x:1:daemon +sys:x:2: +kmem:x:3: +tape:x:4: +tty:x:5: +daemon:x:6: +floppy:x:7: +disk:x:8: +lp:x:9: +dialout:x:10: +audio:x:11: +video:x:12: +utmp:x:13: +usb:x:14: +cdrom:x:15: +adm:x:16: +messagebus:x:18: +systemd-journal:x:23: +input:x:24: +mail:x:34: +kvm:x:61: +systemd-bus-proxy:x:72: +systemd-journal-gateway:x:73: +systemd-journal-remote:x:74: +systemd-journal-upload:x:75: +systemd-network:x:76: +systemd-resolve:x:77: +systemd-timesync:x:78: +systemd-coredump:x:79: +wheel:x:97: +nogroup:x:99: +users:x:999:</literal> +EOF</userinput></screen> + + <para>The created groups are not part of any standard—they are groups + decided on in part by the requirements of the Udev configuration in the next + chapter, and in part by common convention employed by a number of existing + Linux distributions. In addition, some test suites rely on specific users + or groups. The Linux Standard Base (LSB, available at <ulink + url="http://www.linuxbase.org"/>) recommends only that, besides the group + <systemitem class="groupname">root</systemitem> with a Group ID (GID) of 0, + a group <systemitem class="groupname">bin</systemitem> with a GID of 1 be + present. All other group names and GIDs can be chosen freely by the system + administrator since well-written programs do not depend on GID numbers, but + rather use the group's name.</para> + + <para>Some tests in <xref linkend="chapter-building-system"/> need a regular + user. We add this user here and delete this account at the end of that + chapter.</para> + +<screen><userinput>echo "tester:x:$(ls -n $(tty) | cut -d" " -f3):101::/home/tester:/bin/bash" >> /etc/passwd +echo "tester:x:101:" >> /etc/group +install -o tester -d /home/tester</userinput></screen> + + <para>To remove the <quote>I have no name!</quote> prompt, start a new + shell. Since 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 role="nodump"><userinput>exec /bin/bash --login +h</userinput></screen> + + <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. To ensure the use of the newly compiled binaries as soon as they are + installed, the <parameter>+h</parameter> directive will be used 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/log/{btmp,lastlog,faillog,wtmp} +chgrp -v utmp /var/log/lastlog +chmod -v 664 /var/log/lastlog +chmod -v 600 /var/log/btmp</userinput></screen> + + <para>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/faillog</filename> file records + failed login attempts. The <filename>/var/log/btmp</filename> file records + the bad login attempts.</para> + + <note><para>The <filename>/run/utmp</filename> file records the users that + are currently logged in. This file is created dynamically in the boot + scripts.</para></note> + +</sect1> diff --git a/chapter07/creatingdirs.xml b/chapter07/creatingdirs.xml new file mode 100644 index 000000000..359717ff7 --- /dev/null +++ b/chapter07/creatingdirs.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-creatingdirs"> + <?dbhtml filename="creatingdirs.html"?> + + <title>Creating Directories</title> + + <para>It is time to create the full structure in the LFS file system. Create + a standard directory tree by issuing the following commands:</para> + +<screen><userinput>mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt} +mkdir -pv /{media/{floppy,cdrom},srv,var} +install -dv -m 0750 /root +install -dv -m 1777 /tmp /var/tmp +mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src} +mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} +mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo} +mkdir -pv /usr/{,local/}share/man/man{1..8} + +mkdir -v /var/{log,mail,spool} +ln -sv /run /var/run +ln -sv /run/lock /var/lock +mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}</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—one to the home directory of user <systemitem + class="username">root</systemitem>, 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—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 + another user's 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) (available at <ulink + url="https://refspecs.linuxfoundation.org/fhs.shtml"/>). The FHS also specifies + the optional existence of some directories such as <filename + class="directory">/usr/local/games</filename> and <filename + class="directory">/usr/share/games</filename>. We create only the + directories that are needed. However, feel free to create these + directories. </para> + + </sect2> + +</sect1> diff --git a/chapter07/dejagnu.xml b/chapter07/dejagnu.xml new file mode 100644 index 000000000..8f1ab7648 --- /dev/null +++ b/chapter07/dejagnu.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-dejagnu" role="wrap"> + <?dbhtml filename="dejagnu.html"?> + + <sect1info condition="script"> + <productname>dejagnu</productname> + <productnumber>&dejagnu-version;</productnumber> + <address>&dejagnu-url;</address> + </sect1info> + + <title>DejaGNU-&dejagnu-version;</title> + + <indexterm zone="ch-tools-dejagnu"> + <primary sortas="a-DejaGNU">DejaGNU</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The <application>DejaGnu</application> package contains a framework for running test + suites on GNU tools. It is written in <command>expect</command>, which itself + uses <application>Tcl</application> (Tool Command Language).</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&dejagnu-ch5-sbu;</seg> + <seg>&dejagnu-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of DejaGNU</title> + + <para>Prepare DejaGNU for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr +makeinfo --html --no-split -o doc/dejagnu.html doc/dejagnu.texi +makeinfo --plaintext -o doc/dejagnu.txt doc/dejagnu.texi</userinput></screen> + + <para>Build and install the package:</para> + +<screen><userinput remap="install">make install +install -v -dm755 /usr/share/doc/dejagnu-&dejagnu-version; +install -v -m644 doc/dejagnu.{html,txt} \ + /usr/share/doc/dejagnu-&dejagnu-version;</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + </sect2> + + + <sect2 id="contents-dejagnu" role="content"> + <title>Contents of DejaGNU</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + + <seglistitem> + <seg>runtest</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="runtest"> + <term><command>runtest</command></term> + <listitem> + <para>A wrapper script that locates the proper + <command>expect</command> shell and then runs DejaGNU</para> + <indexterm zone="ch-tools-dejagnu runtest"> + <primary sortas="b-runtest">runtest</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter07/diffutils.xml b/chapter07/diffutils.xml new file mode 100644 index 000000000..194fe4607 --- /dev/null +++ b/chapter07/diffutils.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-diffutils" role="wrap"> + <?dbhtml filename="diffutils.html"?> + + <sect1info condition="script"> + <productname>diffutils</productname> + <productnumber>&diffutils-version;</productnumber> + <address>&diffutils-url;</address> + </sect1info> + + <title>Diffutils-&diffutils-version;</title> + + <indexterm zone="ch-tools-diffutils"> + <primary sortas="a-Diffutils">Diffutils</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/diffutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&diffutils-ch5-sbu;</seg> + <seg>&diffutils-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Diffutils</title> + + <para>Prepare Diffutils for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --host=$LFS_TGT</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-diffutils" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/expect.xml b/chapter07/expect.xml new file mode 100644 index 000000000..20b227ea5 --- /dev/null +++ b/chapter07/expect.xml @@ -0,0 +1,139 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-expect" role="wrap"> + <?dbhtml filename="expect.html"?> + + <sect1info condition="script"> + <productname>expect</productname> + <productnumber>&expect-version;</productnumber> + <address>&expect-url;</address> + </sect1info> + + <title>Expect-&expect-version;</title> + + <indexterm zone="ch-tools-expect"> + <primary sortas="a-Expect">Expect</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The <application>Expect</application> package contains tools for + automating, via scripted dialogues, interactive applications such as + <command>telnet</command>, <command>ftp</command>, + <command>passwd</command>, <command>fsck</command>, + <command>rlogin</command>, and <command>tip</command>. + <application>Expect</application> is also useful for testing these same + applications as well as easing all sorts of tasks that are prohibitively + difficult with anything else. The <application>DejaGnu</application> + framework is written in <application>Expect</application>.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&expect-ch5-sbu;</seg> + <seg>&expect-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Expect</title> + + <para>Prepare Expect for compilation:</para> + +<screen><userinput remap="configure"> +./configure --prefix=/usr \ + --with-tcl=/usr/lib \ + --enable-shared \ + --mandir=/usr/share/man \ + --with-tclinclude=/usr/include</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--with-tcl=/usr/lib</parameter></term> + <listitem> + <para>This parameter is needed to tell the + <command>configure</command> where the + <command>tclConfig.sh</command> is located.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-tclinclude=/usr/include</parameter></term> + <listitem> + <para>This explicitly tells Expect where to find Tcl's internal + headers. Using this option avoids conditions where + <command>configure</command> fails because it cannot automatically + discover the location of Tcl's headers.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Build the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install +ln -svf expect&expect-version;/libexpect&expect-version;.so /usr/lib</userinput></screen> + + </sect2> + + <sect2 id="contents-expect" role="content"> + <title>Contents of Expect</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>expect</seg> + <seg>libexpect-&expect-lib-version;.so</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="expect"> + <term><command>expect</command></term> + <listitem> + <para>Communicates with other interactive programs according + to a script</para> + <indexterm zone="ch-tools-expect expect"> + <primary sortas="b-expect">expect</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libexpect"> + <term><filename class="libraryfile">libexpect-&expect-lib-version;.so</filename></term> + <listitem> + <para>Contains functions that allow Expect to be used as a Tcl + extension or to be used directly from C or C++ (without Tcl)</para> + <indexterm zone="ch-tools-expect libexpect"> + <primary sortas="c-libexpect-&expect-lib-version;">libexpect-&expect-lib-version;</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter07/file.xml b/chapter07/file.xml new file mode 100644 index 000000000..5a821d180 --- /dev/null +++ b/chapter07/file.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-file" role="wrap"> + <?dbhtml filename="file.html"?> + + <sect1info condition="script"> + <productname>file</productname> + <productnumber>&file-version;</productnumber> + <address>&file-url;</address> + </sect1info> + + <title>File-&file-version;</title> + + <indexterm zone="ch-tools-file"> + <primary sortas="a-File">File</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/file.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&file-ch5-sbu;</seg> + <seg>&file-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of File</title> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT</userinput></screen> + +<!-- devs: if using - -build here, the build system wants to compile + the signature file with "file" on the build system, but stops if it is not + the same version. One possibility would be to build "file" on the build + system first, but it is simpler to have the system think it is not + cross-compiling, and use the just built "file". --> + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + <para>Details on this package are located in<!-- TODO + <xref linkend="contents-file" role="."/> --></para> + + </sect2> + +</sect1> diff --git a/chapter07/findutils.xml b/chapter07/findutils.xml new file mode 100644 index 000000000..073c1640c --- /dev/null +++ b/chapter07/findutils.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-findutils" role="wrap"> + <?dbhtml filename="findutils.html"?> + + <sect1info condition="script"> + <productname>findutils</productname> + <productnumber>&findutils-version;</productnumber> + <address>&findutils-url;</address> + </sect1info> + + <title>Findutils-&findutils-version;</title> + + <indexterm zone="ch-tools-findutils"> + <primary sortas="a-Findutils">Findutils</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/findutils.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&findutils-ch5-sbu;</seg> + <seg>&findutils-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Findutils</title> + + <para>Prepare Findutils for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess)</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + <para>Move the excutable to its final expected location:</para> + +<screen><userinput remap="install">mv -v $LFS/usr/bin/find $LFS/bin +sed -i 's|find:=${BINDIR}|find:=/bin|' $LFS/usr/bin/updatedb</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-findutils" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/flex.xml b/chapter07/flex.xml new file mode 100644 index 000000000..88e263413 --- /dev/null +++ b/chapter07/flex.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-flex" role="wrap"> + <?dbhtml filename="flex.html"?> + + <sect1info condition="script"> + <productname>flex</productname> + <productnumber>&flex-version;</productnumber> + <address>&flex-url;</address> + </sect1info> + + <title>Flex-&flex-version;</title> + + <indexterm zone="ch-tools-flex"> + <primary sortas="a-Flex">Flex</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/flex.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&flex-ch5-sbu;</seg> + <seg>&flex-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Flex</title> + + <para>Prepare Flex for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --docdir=/usr/share/doc/flex-&flex-version;</userinput></screen> + + <!-- + <variablelist> + <title>The meaning of the new configure option:</title> + + <varlistentry> + <term><parameter>- -disable-bootstrap</parameter></term> + <listitem> + <para>Normally, building flex is done in two stages. A first + programs, which is used to generate the source of a second one, + which is then compiled. When using cross-compilation, the first + program is generated on the build system. However, due to a bug + in configure, the presence of some function is tested only on the + host system. If this function is not found on the build system, the + build fails. This can be prevented by disabling the two stage + build.</para> + </listitem> + </varlistentry> + </variablelist> + --> + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-flex" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/gawk.xml b/chapter07/gawk.xml new file mode 100644 index 000000000..d5b5d6d8d --- /dev/null +++ b/chapter07/gawk.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-gawk" role="wrap"> + <?dbhtml filename="gawk.html"?> + + <sect1info condition="script"> + <productname>gawk</productname> + <productnumber>&gawk-version;</productnumber> + <address>&gawk-url;</address> + </sect1info> + + <title>Gawk-&gawk-version;</title> + + <indexterm zone="ch-tools-gawk"> + <primary sortas="a-Gawk">Gawk</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/gawk.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gawk-ch5-sbu;</seg> + <seg>&gawk-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Gawk</title> + + <para>First, ensure some unneeded files are not installed:</para> + +<screen><userinput remap="pre">sed -i 's/extras//' Makefile.in</userinput></screen> + + <para>Prepare Gawk for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(./config.guess)</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gawk" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/gcc-pass1.xml b/chapter07/gcc-pass1.xml new file mode 100644 index 000000000..1bd308f09 --- /dev/null +++ b/chapter07/gcc-pass1.xml @@ -0,0 +1,208 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-gcc-pass1" role="wrap" xreflabel="gcc-pass1"> + <?dbhtml filename="gcc-pass1.html"?> + + <sect1info condition="script"> + <productname>gcc-pass1</productname> + <productnumber>&gcc-version;</productnumber> + <address>&gcc-url;</address> + </sect1info> + + <title>GCC-&gcc-version; - Pass 1</title> + + <indexterm zone="ch-tools-gcc-pass1"> + <primary sortas="a-GCC">GCC</primary> + <secondary>tools, pass 1</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/gcc.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gcc-ch5p1-sbu;</seg> + <seg>&gcc-ch5p1-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Cross GCC</title> + + <para>GCC requires the GMP, MPFR and MPC packages. As these packages may + not be included in your host distribution, they will be built with + GCC. Unpack each package into the GCC source directory and rename the + resulting directories so the GCC build procedures will automatically + use them:</para> + + <note><para>There are frequent misunderstandings about this chapter. The + procedures are the same as every other chapter as explained earlier (<xref + linkend='buildinstr'/>). First extract the gcc tarball from the sources + directory and then change to the directory created. Only then should you + proceed with the instructions below.</para></note> + +<screen><userinput remap="pre">tar -xf ../mpfr-&mpfr-version;.tar.xz +mv -v mpfr-&mpfr-version; mpfr +tar -xf ../gmp-&gmp-version;.tar.xz +mv -v gmp-&gmp-version; gmp +tar -xf ../mpc-&mpc-version;.tar.gz +mv -v mpc-&mpc-version; mpc</userinput></screen> + + <para>On x86_64 hosts, set the default directory name for + 64-bit libraries to <quote>lib</quote>:</para> + +<screen><userinput remap="pre">case $(uname -m) in + x86_64) + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + ;; +esac</userinput></screen> + + <para>The GCC documentation recommends building GCC + in a dedicated build directory:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare GCC for compilation:</para> + +<screen><userinput remap="configure">../configure \ + --target=$LFS_TGT \ + --prefix=$LFS/tools \ + --with-glibc-version=2.11 \ + --with-sysroot=$LFS \ + --with-newlib \ + --without-headers \ + --enable-initfini-array \ + --disable-nls \ + --disable-shared \ + --disable-multilib \ + --disable-decimal-float \ + --disable-threads \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++</userinput></screen> + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--with-glibc-version=2.11</parameter></term> + <listitem> + <para>This option ensures the package will be compatible with the host's + version of glibc. It is set to the minimum glibc requirement + specified in the <xref linkend="ch-partitioning-hostreqs"/>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-newlib</parameter></term> + <listitem> + <para>Since a working C library is not yet available, this ensures + that the inhibit_libc constant is defined when building libgcc. This prevents + the compiling of any code that requires libc support.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--without-headers</parameter></term> + <listitem> + <para>When creating a complete cross-compiler, GCC requires + standard headers compatible with the target system. For our + purposes these headers will not be needed. This switch prevents + GCC from looking for them.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-shared</parameter></term> + <listitem> + <para>This switch forces GCC to link its internal libraries + statically. We need this because the shared libraries require glibc, + which is not yet installed on the target system.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-decimal-float, --disable-threads, + --disable-libatomic, --disable-libgomp, <!--- -disable-libmpx,--> + --disable-libquadmath, --disable-libssp, --disable-libvtv, + --disable-libstdcxx</parameter></term> + <listitem> + <para>These switches disable support for the decimal floating point + extension, threading, libatomic, libgomp, <!--libmpx, --> libquadmath, libssp, + libvtv, and the C++ standard library respectively. These features + will fail to compile when building a cross-compiler and are not + necessary for the task of cross-compiling the temporary libc.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-multilib</parameter></term> + <listitem> + <para>On x86_64, LFS does not yet support a multilib configuration. + This switch is harmless for x86.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-languages=c,c++</parameter></term> + <listitem> + <para>This option ensures that only the C and C++ compilers are built. + These are the only languages needed now.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile GCC by running:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + + <screen><userinput remap="install">make install</userinput></screen> + + <para>This build of GCC has installed a couple of internal system + headers. Normally one of them, <filename>limits.h</filename>, would in turn + include the corresponding system <filename>limits.h</filename> header, in + this case, <filename>$LFS/usr/include/limits.h</filename>. However, at the + time of this build of gcc <filename>$LFS/usr/include/limits.h</filename> + does not exist, so the internal header that has just been installed is a + partial, self-contained file and does not include the extended features of + the system header. This is adequate for building glibc, but the full + internal header will be needed later. Create a full version of the internal + header using a command that is identical to what the GCC build system does + in normal circumstances:</para> + +<screen><userinput remap="install">cd .. +cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ + `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h</userinput></screen> + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gcc" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/gcc-pass2.xml b/chapter07/gcc-pass2.xml new file mode 100644 index 000000000..5f6864d02 --- /dev/null +++ b/chapter07/gcc-pass2.xml @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-gcc-pass2" role="wrap"> + <?dbhtml filename="gcc-pass2.html"?> + + <sect1info condition="script"> + <productname>gcc-pass2</productname> + <productnumber>&gcc-version;</productnumber> + <address>&gcc-url;</address> + </sect1info> + + <title>GCC-&gcc-version; - Pass 2</title> + + <indexterm zone="ch-tools-gcc-pass2"> + <primary sortas="a-GCC">GCC</primary> + <secondary>tools, pass 2</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/gcc.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gcc-ch5p2-sbu;</seg> + <seg>&gcc-ch5p2-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of GCC</title> + + <para>As in the first build of GCC, the GMP, MPFR, and MPC packages are + required. Unpack the tarballs and move them into the required directory + names:</para> + +<screen><userinput remap="pre">tar -xf ../mpfr-&mpfr-version;.tar.xz +mv -v mpfr-&mpfr-version; mpfr +tar -xf ../gmp-&gmp-version;.tar.xz +mv -v gmp-&gmp-version; gmp +tar -xf ../mpc-&mpc-version;.tar.gz +mv -v mpc-&mpc-version; mpc</userinput></screen> + + <para>If building on x86_64, change the default directory name for 64-bit + libraries to <quote>lib</quote>:</para> + +<screen><userinput remap="pre">case $(uname -m) in + x86_64) + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + ;; +esac</userinput></screen> + + <para>Fix an issue with GCC-10.1 when building with a cross + compiler:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&gcc-cross-patch;</userinput></screen> + + <para>Create a separate build directory again:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Create a symlink that allos libgcc to be built with posix threads + support:</para> + +<screen><userinput remap="pre">mkdir -pv $LFS_TGT/libgcc +ln -s ../../../libgcc/gthr-posix.h $LFS_TGT/libgcc/gthr-default.h</userinput></screen> + + <para>Before starting to build GCC, remember to unset any environment + variables that override the default optimization flags.</para> + + <para>Now prepare GCC for compilation:</para> + +<screen><userinput remap="configure">../configure \ + --build=$(../config.guess) \ + --host=$LFS_TGT \ + --prefix=/usr \ + CC_FOR_TARGET=$LFS_TGT-gcc \ + --with-build-sysroot=$LFS \ + --enable-initfini-array \ + --disable-nls \ + --disable-multilib \ + --disable-decimal-float \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title><!-- WIP --> + + <varlistentry> + <term><parameter>-with-build-sysroot=$LFS</parameter></term> + <listitem> + <para>Normally, using <parameter>--host=</parameter> ensures that + a cross-compiler is used for building gcc, and that compiler knows + that it has to look for headers and libraries in <filename + class="directory">$LFS</filename>. But the build system of GCC uses + other tools, which are not aware of this location. This switch is + needed to have them find the needed files in <filename + class="directory">$LFS</filename>, and not on the host.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-initfini-array</parameter></term> + <listitem> + <para>This option is automatically enabled when building a native + compiler with a native compiler on x86. But here, we build with + a cross compiler, so we need to explicitely set this option.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + <para>As a finishing touch, create a symlink. Many programs and scripts + run <command>cc</command> instead of <command>gcc</command>, which is + used to keep programs generic and therefore usable on all kinds of UNIX + systems where the GNU C compiler is not always installed. Running + <command>cc</command> leaves the system administrator free to decide + which C compiler to install:</para> + +<screen><userinput remap="install">ln -sv gcc $LFS/usr/bin/cc</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gcc" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/generalinstructions.xml b/chapter07/generalinstructions.xml new file mode 100644 index 000000000..05b88b98c --- /dev/null +++ b/chapter07/generalinstructions.xml @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-generalinstructions"> + <?dbhtml filename="generalinstructions.html"?> + + <title>General Compilation Instructions</title> + + <para>When building packages there are several assumptions made within + the instructions:</para> + + <itemizedlist> + + <listitem> + <para>Several of the packages are patched before compilation, but only when + the patch is needed to circumvent a problem. A patch is often needed in + both this and the next chapter, but sometimes in only one or the other. + Therefore, do not be concerned if instructions for a downloaded patch seem + to be missing. Warning messages about <emphasis>offset</emphasis> or + <emphasis>fuzz</emphasis> may also be encountered when applying a patch. Do + not worry about these warnings, as the patch was still successfully + applied.</para> + </listitem> + + <listitem> + <para>During the compilation of most packages, there will be several + warnings that scroll by on the screen. These are normal and can safely be + ignored. These warnings are as they appear—warnings about + deprecated, but not invalid, use of the C or C++ syntax. C standards change + fairly often, and some packages still use the older standard. This is not a + problem, but does prompt the warning.</para> + </listitem> + + <listitem> + <para>Check one last time that the <envar>LFS</envar> environment variable + is set up properly:</para> + +<screen role="nodump"><userinput>echo $LFS</userinput></screen> + + <para>Make sure the output shows the path to the LFS partition's mount + point, which is <filename class="directory">/mnt/lfs</filename>, using our + example.</para> + </listitem> + + <listitem> + + <para>Finally, two important items must be emphasized:</para> + + <important> + + <para>The build instructions assume that the <xref + linkend='ch-partitioning-hostreqs'/>, including symbolic links, have + been set properly:</para> + + <itemizedlist role='important'> + + <listitem override='bullet'><para><command>bash</command> is the shell + in use.</para></listitem> + + <listitem override='bullet'><para><command>sh</command> is a symbolic + link to <command>bash</command>.</para></listitem> + + <listitem override='bullet'><para><command>/usr/bin/awk</command> is a + symbolic link to <command>gawk</command>.</para></listitem> + + <listitem override='bullet'><para><command>/usr/bin/yacc</command> is a + symbolic link to <command>bison</command> or a small script that + executes bison.</para></listitem> + + </itemizedlist> + </important> + + <important> + <para>To re-emphasize the build process:</para> + + <orderedlist numeration="arabic" spacing="compact"> + <listitem> + <para>Place all the sources and patches in a directory that will be + accessible from the chroot environment such as + <filename class="directory">/mnt/lfs/sources/</filename>.<!-- Do + <emphasis>not</emphasis> put sources in + <filename class="directory">/mnt/lfs/tools/</filename>. --></para> + </listitem> + <listitem> + <para>Change to the sources directory.</para> + </listitem> + <listitem id='buildinstr' xreflabel='Package build instructions'> + <para>For each package:</para> + <orderedlist numeration="loweralpha" spacing="compact"> + <listitem> + <para>Using the <command>tar</command> program, extract the package + to be built. In Chapter 5, ensure you are the <emphasis>lfs</emphasis> + user when extracting the package.</para> + </listitem> + <listitem> + <para>Change to the directory created when the package was + extracted.</para> + </listitem> + <listitem> + <para>Follow the book's instructions for building the package.</para> + </listitem> + <listitem> + <para>Change back to the sources directory.</para> + </listitem> + <listitem> + <para>Delete the extracted source directory unless instructed otherwise.</para> + </listitem> + </orderedlist> + </listitem> + </orderedlist> + </important> + </listitem> + + </itemizedlist> + +</sect1> diff --git a/chapter07/gettext.xml b/chapter07/gettext.xml new file mode 100644 index 000000000..a3baed723 --- /dev/null +++ b/chapter07/gettext.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-gettext" role="wrap"> + <?dbhtml filename="gettext.html"?> + + <sect1info condition="script"> + <productname>gettext</productname> + <productnumber>&gettext-version;</productnumber> + <address>&gettext-url;</address> + </sect1info> + + <title>Gettext-&gettext-version;</title> + + <indexterm zone="ch-tools-gettext"> + <primary sortas="a-Gettext">Gettext</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/gettext.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gettext-ch5-sbu;</seg> + <seg>&gettext-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Gettext</title> + + <para>For our temporary set of tools, we only need to install + three programs from Gettext.</para> + + <para>Prepare Gettext for compilation:</para> + +<screen><userinput remap="configure">./configure --disable-shared</userinput></screen> + + <variablelist> + <title>The meaning of the configure option:</title> + + <varlistentry> + <term><parameter>--disable-shared</parameter></term> + <listitem> + <para>We do not need to install any of the shared Gettext libraries at + this time, therefore there is no need to build them.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the <command>msgfmt</command>, <command>msgmerge</command> and + <command>xgettext</command> programs:</para> + +<screen><userinput remap="install">cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gettext" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/glibc.xml b/chapter07/glibc.xml new file mode 100644 index 000000000..5213c23e5 --- /dev/null +++ b/chapter07/glibc.xml @@ -0,0 +1,230 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-glibc" role="wrap"> + <?dbhtml filename="glibc.html"?> + + <sect1info condition="script"> + <productname>glibc</productname> + <productnumber>&glibc-version;</productnumber> + <address>&glibc-url;</address> + </sect1info> + + <title>Glibc-&glibc-version;</title> + + <indexterm zone="ch-tools-glibc"> + <primary sortas="a-Glibc">Glibc</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/glibc.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&glibc-ch5-sbu;</seg> + <seg>&glibc-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Glibc</title> + + <para>First, create two symbolic links, which are needed for proper + operation of the dynamic library loader:</para> + +<screen><userinput remap="pre">ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 +ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3</userinput></screen> + + <para>Some of the Glibc programs use the non-FHS compliant + <filename class="directory">/var/db</filename> directory to store their + runtime data. Apply the following patch to make such programs store their + runtime data in the FHS-compliant locations:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../glibc-&glibc-version;-fhs-1.patch</userinput></screen> + + <para>The Glibc documentation recommends building Glibc + in a dedicated build directory:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Next, prepare Glibc for compilation:</para> + +<screen><userinput remap="configure">../configure \ + --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(../scripts/config.guess) \ + --enable-kernel=&min-kernel; \ + --with-headers=$LFS/usr/include \ + libc_cv_slibdir=/lib</userinput></screen> +<!-- + libc_cv_forced_unwind=yes \ + libc_cv_c_cleanup=yes</userinput></screen> --> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term> + <listitem> + <para>The combined effect of these switches is that Glibc's build system + configures itself to be cross-compiled, using the cross-linker and + cross-compiler in <filename class="directory">/tools</filename>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-kernel=&min-kernel;</parameter></term> + <listitem> + <para>This tells Glibc to compile the library with support + for &min-kernel; and later Linux kernels. Workarounds for older + kernels are not enabled.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-headers=$LFS/usr/include</parameter></term> + <listitem> + <para>This tells Glibc to compile itself against the headers recently + installed to the usr/include directory, so that it knows exactly what + features the kernel has and can optimize itself accordingly.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>libc_cv_slibdir=/lib</parameter></term> + <listitem> + <para>This ensures that the library is installed in /lib instead + of the default /lib64 on 64 bit machines.</para> + </listitem> + </varlistentry> +<!-- + <varlistentry> + <term><parameter>libc_cv_c_cleanup=yes</parameter></term> + <listitem> + <para>Similarly, we pass libc_cv_c_cleanup=yes through to the + <command>configure</command> script so that the test is skipped and C + cleanup handling support is configured.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>libc_cv_ctors_header=yes</parameter></term> + <listitem> + <para>Similarly, we pass libc_cv_ctors_header=yes through to the + <command>configure</command> script so that the test is skipped and + gcc constructor support is configured.</para> + </listitem> + </varlistentry>--> + + </variablelist> + + <para>During this stage the following warning might appear:</para> + + <blockquote> +<screen><computeroutput>configure: WARNING: +*** These auxiliary programs are missing or +*** incompatible versions: msgfmt +*** some features will be disabled. +*** Check the INSTALL file for required versions.</computeroutput></screen> + </blockquote> + + <para>The missing or incompatible <command>msgfmt</command> program is + generally harmless. This <command>msgfmt</command> program is part of the + Gettext package which the host distribution should provide.</para> + + <note><para>There have been reports that this package may fail when + building as a "parallel make". If this occurs, rerun the make command + with a "-j1" option.</para></note> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + <variablelist> + <title>The meaning of the <command>make install</command> option:</title> + + <varlistentry> + <term><parameter>DESTDIR=$LFS</parameter></term> + <listitem> + <para>The <envar>DESTDIR</envar> make variable is used by almost all + packages to define the location where the package should be + installed. If it is not set, it defaults to the root (<filename + class="directory">/</filename>) directory. Here we specify that + the package be installed in <filename class="directory">$LFS + </filename>, which will become the root after <xref linkend= + "ch-tools-chroot"/>.</para> + </listitem> + </varlistentry> + + </variablelist> + + <caution> + <para>At this point, it is imperative to stop and ensure that the basic + functions (compiling and linking) of the new toolchain are working as + expected. To perform a sanity check, run the following commands:</para> + +<screen><userinput>echo 'int main(){}' > dummy.c +$LFS_TGT-gcc dummy.c +readelf -l a.out | grep '/ld-linux'</userinput></screen> + + <para>If everything is working correctly, there should be no errors, + and the output of the last command will be of the form:</para> + +<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen> + + <para>Note that for 32-bit machines, the interpreter name will be + <filename>/lib/ld-linux.so.2</filename>.</para> + + <para>If the output is not shown as above or there was no output at all, + then something is wrong. Investigate and retrace the steps to find out + where the problem is and correct it. This issue must be resolved before + continuing on.</para> + + <para>Once all is well, clean up the test files:</para> + +<screen><userinput>rm -v dummy.c a.out</userinput></screen> + + </caution> + + <note><para>Building packages in the next sections will serve as an + additional check that the toolchain has been built properly. If some + package, especially binutils-pass2 or gcc-pass2, fails to build, it is + an indication that something has gone wrong with the + previous Binutils, GCC, or Glibc installations.</para></note> + + <para>Now that our cross-toolchain is complete, finalize the installation + of the limits.h header. For doing so, run an utility provided by the GCC + developers:</para> + +<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-glibc" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/grep.xml b/chapter07/grep.xml new file mode 100644 index 000000000..bac311f2f --- /dev/null +++ b/chapter07/grep.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-grep" role="wrap"> + <?dbhtml filename="grep.html"?> + + <sect1info condition="script"> + <productname>grep</productname> + <productnumber>&grep-version;</productnumber> + <address>&grep-url;</address> + </sect1info> + + <title>Grep-&grep-version;</title> + + <indexterm zone="ch-tools-grep"> + <primary sortas="a-Grep">Grep</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/grep.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&grep-ch5-sbu;</seg> + <seg>&grep-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Grep</title> + + <para>Prepare Grep for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --bindir=/bin</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-grep" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/gzip.xml b/chapter07/gzip.xml new file mode 100644 index 000000000..e9bdd3bd8 --- /dev/null +++ b/chapter07/gzip.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-gzip" role="wrap"> + <?dbhtml filename="gzip.html"?> + + <sect1info condition="script"> + <productname>gzip</productname> + <productnumber>&gzip-version;</productnumber> + <address>&gzip-url;</address> + </sect1info> + + <title>Gzip-&gzip-version;</title> + + <indexterm zone="ch-tools-gzip"> + <primary sortas="a-Gzip">Gzip</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/gzip.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gzip-ch5-sbu;</seg> + <seg>&gzip-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Gzip</title> + + <para>Prepare Gzip for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --host=$LFS_TGT</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + <para>Move the excutable to its final expected location:</para> + +<screen><userinput remap="install">mv -v $LFS/usr/bin/gzip $LFS/bin</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gzip" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/introduction.xml b/chapter07/introduction.xml index cbc197a7b..5614270b2 100644 --- a/chapter07/introduction.xml +++ b/chapter07/introduction.xml @@ -5,221 +5,25 @@ %general-entities; ]> -<sect1 id="ch-config-introduction" revision="sysv"> +<sect1 id="ch-tools-introduction"> <?dbhtml filename="introduction.html"?> <title>Introduction</title> - <para>Booting a Linux system involves several tasks. The process must - mount both virtual and real file systems, initialize devices, activate swap, - check file systems for integrity, mount any swap partitions or files, set - the system clock, bring up networking, start any daemons required by the - system, and accomplish any other custom tasks needed by the user. This - process must be organized to ensure the tasks are performed in the correct - order but, at the same time, be executed as fast as possible.</para> + <para>This chapter shows how to build a minimal Linux system. + This system will contain just enough tools to start constructing the final + LFS system in <xref linkend="chapter-building-system"/> and allow a working + environment with more user convenience than a minimum environment would.</para> -<!-- <para>In the packages that were installed in Chapter 6, there were two - different boot systems installed. LFS provides the ability to easily - select which system the user wants to use and to compare and contrast the - two systems by actually running each system on the local computer. The - advantages and disadvantages of these systems is presented below.</para>--> - - <sect2 id='sysv-desc'> - <title>System V</title> - - <para>System V is the classic boot process that has been used in Unix and - Unix-like systems such as Linux since about 1983. It consists of a small - program, <command>init</command>, that sets up basic programs such as - <command>login</command> (via getty) and runs a script. This script, - usually named <command>rc</command>, controls the execution of a set of - additional scripts that perform the tasks required to initialize the - system.</para> - - <para>The <command>init</command> program is controlled by the - <filename>/etc/inittab</filename> file and is organized into run levels that - can be run by the user:</para> - -<literallayout> -0 — halt -1 — Single user mode -2 — Multiuser, without networking -3 — Full multiuser mode -4 — User definable -5 — Full multiuser mode with display manager -6 — reboot -</literallayout> - - <para>The usual default run level is 3 or 5.</para> - - <bridgehead renderas="sect3">Advantages</bridgehead> - - <itemizedlist> - <listitem> - <para>Established, well understood system.</para> - </listitem> - - <listitem> - <para>Easy to customize.</para> - </listitem> - - </itemizedlist> - - - <bridgehead renderas="sect3">Disadvantages</bridgehead> - - <itemizedlist> - <listitem> - <para>Slower to boot. A medium speed base LFS system - takes 8-12 seconds where the boot time is measured from the - first kernel message to the login prompt. Network - connectivity is typically established about 2 seconds - after the login prompt.</para> - </listitem> - - <listitem> - <para>Serial processing of boot tasks. This is related to the previous - point. A delay in any process such as a file system check, will - delay the entire boot process.</para> - </listitem> - - <listitem> - <para>Does not directly support advanced features like - control groups (cgroups), and per-user fair share scheduling.</para> - </listitem> - - <listitem> - <para>Adding scripts requires manual, static sequencing decisions.</para> - </listitem> - - </itemizedlist> - - </sect2> -<!-- - <sect2 id='sysd-desc'> - <title>Systemd</title> - - <para>Systemd is a group of interconnected programs that handles system and - individual process requests. It provides a dependency system between - various entities called "units". It automatically addresses dependencies - between units and can execute several startup tasks in parallel. It - provides login, inetd, logging, time, and networking services. </para> - - <bridgehead renderas="sect3">Advantages</bridgehead> - - <itemizedlist> - <listitem> - <para>Used on many established distributions by default.</para> - </listitem> - - <listitem> - <para>There is extensive documentation. - See <ulink url="http://www.freedesktop.org/wiki/Software/systemd/"/>.</para> - </listitem> - - <listitem> - <para>Parallel execution of boot processes. A medium speed - base LFS system takes 6-10 seconds from kernel start to a - login prompt. Network connectivity is typically established - about 2 seconds after the login prompt. More complex startup - procedures may show a greater speedup when compared to System V.</para> - </listitem> - - <listitem> - <para>Implements advanced features such as control groups to - manage related processes.</para> - </listitem> - - <listitem> - <para>Maintains backward compatibility with System V programs - and scripts.</para> - </listitem> - </itemizedlist> - - <bridgehead renderas="sect3">Disadvantages</bridgehead> - - <itemizedlist> - <listitem> - <para>There is a substantial learning curve.</para> - </listitem> - - <listitem> - <para>Some advanced features such as dbus or cgroups cannot be - disabled if they are not otherwise needed.</para> - </listitem> - - <listitem> - <para>Although implemented as several executable programs - the user cannot choose to implement only the portions desired.</para> - </listitem> - - <listitem> - <para>Due to the nature of using compiled programs, systemd is - more difficult to debug.</para> - </listitem> - - <listitem> - <para>Logging is done in a binary format. Extra tools must - be used to process logs or additional processes must be implemented - to duplicate traditional logging programs.</para> - </listitem> - - </itemizedlist> - - </sect2> ---> + <para>There are two steps in building this minimal system. The first step + is to build a new and host-independent toolchain (compiler, assembler, + linker, libraries, and a few useful utilities). The second step uses this + toolchain to build the other essential tools.</para> <!-- - <sect2 id='sysv'> - <title>Selecting a Boot Method</title> - - <para>Selecting a boot method in LFS is relatively easy. - Both systems are installed side-by-side. The only task needed is to - ensure the files that are needed by the system have the correct names. - The following scripts do that.</para> - -<screen><userinput remap="install">cat > /usr/sbin/set-systemd << "EOF" -#! /bin/bash - -ln -svfn init-systemd /sbin/init -ln -svfn init.d-systemd /etc/init.d - -for tool in halt poweroff reboot runlevel shutdown telinit; do - ln -sfvn ${tool}-systemd /sbin/${tool} - ln -svfn ${tool}-systemd.8 /usr/share/man/man8/${tool}.8 -done - -echo "Now reboot with /sbin/reboot-sysv" -EOF - -chmod 0744 /usr/sbin/set-systemd - -cat > /usr/sbin/set-sysv << "EOF" -#! /bin/bash - -ln -sfvn init-sysv /sbin/init -ln -svfn init.d-sysv /etc/init.d - -for tool in halt poweroff reboot runlevel shutdown telinit; do - ln -sfvn ${tool}-sysv /sbin/${tool} - ln -svfn ${tool}-sysv.8 /usr/share/man/man8/${tool}.8 -done - -echo "Now reboot with /sbin/reboot-systemd" -EOF - -chmod 0744 /usr/sbin/set-sysv</userinput></screen> - - <note><para>The comment about the correct command to reboot in the - above scripts is correct. The reboot command for the current boot - system must be used after the script changes the default reboot command. - </para></note> - - <para>Now set the desired boot system. The default is System V:</para> - -<screen><userinput remap="install">/usr/sbin/set-sysv</userinput></screen> - - <para>Changing the boot system can be done at any time by running the - appropriate script above and rebooting.</para> - - </sect2> + <para>The files compiled in this chapter will be installed under the + <filename class="directory">$LFS</filename> directory to keep them + separate from the files installed in the next chapter and the host + production directories. Since the packages compiled here are temporary, + we do not want them to pollute the soon-to-be LFS system.</para> --> </sect1> diff --git a/chapter07/kernfs.xml b/chapter07/kernfs.xml new file mode 100644 index 000000000..dd6b8991c --- /dev/null +++ b/chapter07/kernfs.xml @@ -0,0 +1,115 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-kernfs"> + <?dbhtml filename="kernfs.html"?> + + <title>Preparing Virtual Kernel File Systems</title> + + <indexterm zone="ch-tools-kernfs"> + <primary sortas="e-/dev/">/dev/*</primary> + </indexterm> + + <para>Various file systems exported by the kernel are used to communicate to + and from the kernel itself. These file systems are virtual in that no disk + space is used for them. The content of the file systems resides in + memory.</para> + + <para>Begin by creating directories onto which the file systems will be + mounted:</para> + +<screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen> + + <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. The device nodes must be created + on the hard disk so that they are available before <command>udevd</command> + has been started, and additionally when Linux is started with + <parameter>init=/bin/bash</parameter>. Create the devices by running the + following commands:</para> + +<screen><userinput>mknod -m 600 $LFS/dev/console c 5 1 +mknod -m 666 $LFS/dev/null c 1 3</userinput></screen> + + </sect2> + + <sect2 id="ch-system-bindmount"> + <title>Mounting and Populating /dev</title> + + <para>The recommended method of populating the <filename + class="directory">/dev</filename> directory with devices is to mount a + virtual filesystem (such as <systemitem + class="filesystem">tmpfs</systemitem>) on the <filename + class="directory">/dev</filename> directory, and allow the devices to be + created dynamically on that virtual filesystem as they are detected or + accessed. Device creation is generally done during the boot process + by Udev. Since this new system does not yet have Udev and has not yet + been booted, it is necessary to mount and populate <filename + class="directory">/dev</filename> manually. This is accomplished by bind + mounting the host system's <filename class="directory">/dev</filename> + directory. A bind mount is a special type of mount that allows you to + create a mirror of a directory or mount point to some other location. Use + the following command to achieve this:</para> + +<screen><userinput>mount -v --bind /dev $LFS/dev</userinput></screen> + + </sect2> + + <sect2 id="ch-system-kernfsmount"> + <title>Mounting Virtual Kernel File Systems</title> + + <para>Now mount the remaining virtual kernel filesystems:</para> + +<screen><userinput>mount -v --bind /dev/pts $LFS/dev/pts +mount -vt proc proc $LFS/proc +mount -vt sysfs sysfs $LFS/sys +mount -vt tmpfs tmpfs $LFS/run</userinput></screen> + + <variablelist> + <title>The meaning of the mount options for devpts:</title> + + <varlistentry> + <term><parameter>gid=5</parameter></term> + <listitem> + <para>This ensures that all devpts-created device nodes are owned by + group ID 5. This is the ID we will use later on for the <systemitem + class="groupname">tty</systemitem> group. We use the group ID instead + of a name, since the host system might use a different ID for its + <systemitem class="groupname">tty</systemitem> group.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>mode=0620</parameter></term> + <listitem> + <para>This ensures that all devpts-created device nodes have mode 0620 + (user readable and writable, group writable). Together with the + option above, this ensures that devpts will create device nodes that + meet the requirements of grantpt(), meaning the Glibc + <command>pt_chown</command> helper binary (which is not installed by + default) is not necessary.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>In some host systems, <filename>/dev/shm</filename> is a + symbolic link to <filename class="directory">/run/shm</filename>. + The /run tmpfs was mounted above so in this case only a + directory needs to be created.</para> + +<screen><userinput>if [ -h $LFS/dev/shm ]; then + mkdir -pv $LFS/$(readlink $LFS/dev/shm) +fi</userinput></screen> + + </sect2> + +</sect1> diff --git a/chapter07/libstdc++-pass2.xml b/chapter07/libstdc++-pass2.xml new file mode 100644 index 000000000..999a4fa4e --- /dev/null +++ b/chapter07/libstdc++-pass2.xml @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-libstdcpp-pass2" role="wrap"> + <?dbhtml filename="gcc-libstdc++-pass2.html"?> + + <sect1info condition="script"> + <productname>gcc-libstdc++</productname> + <productnumber>&gcc-version;</productnumber> + <address>&gcc-url;</address> + </sect1info> + + <title>Libstdc++ from GCC-&gcc-version;, Pass 2</title> + + <indexterm zone="ch-tools-libstdcpp-pass2"> + <primary sortas="a-GCC">GCC</primary> + <secondary>tools, libstdc++ pass 2</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Again, when building <xref linkend="ch-tools-gcc-pass2"/>, we had to + defer the installation of the C++ standard library, because no suitable + compiler was available to compile it: we could not use the compiler + installed, because this compiler is a native + compiler, and should not be used outside of chroot without being at + risk of polluting the build with some host components.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <!-- TODO --> + <seglistitem> + <seg>&libstdcpp-ch5-sbu;</seg> + <seg>&libstdcpp-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Target Libstdc++</title> + + <note> + <para><application>Libstdc++</application> is part of the GCC sources. + You should first unpack the GCC tarball and change to the + <filename>gcc-&gcc-version;</filename> directory.</para> + </note> + + <para>Create a link which exists when building Libstdc++ in the gcc + tree:</para> + +<screen><userinput remap="pre">ln -s gthr-posix.h libgcc/gthr-default.h</userinput></screen> + + <para>Create a separate build directory for Libstdc++ and enter it:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare Libstdc++ for compilation:</para> + +<screen><userinput remap="configure">../libstdc++-v3/configure \ + CXXFLAGS="-g -O2 -D_GNU_SOURCE" \ + --prefix=/usr \ + --disable-multilib \ + --disable-nls \ + --disable-libstdcxx-pch</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>CXXFLAGS="-g -O2 -D_GNU_SOURCE"</parameter></term> + <listitem> + <para>Those flags are passed by the top level Makefile when doing + a full build of GCC.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-libstdcxx-pch</parameter></term> + <listitem> + <para>This switch prevents the installation of precompiled + include files, which are not needed at this stage.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile libstdc++ by running:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the library:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gcc" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/libstdc++.xml b/chapter07/libstdc++.xml new file mode 100644 index 000000000..3a1b0f2bf --- /dev/null +++ b/chapter07/libstdc++.xml @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-libstdcpp-pass1" role="wrap"> + <?dbhtml filename="gcc-libstdc++-pass1.html"?> + + <sect1info condition="script"> + <productname>gcc-libstdc++</productname> + <productnumber>&gcc-version;</productnumber> + <address>&gcc-url;</address> + </sect1info> + + <title>Libstdc++ from GCC-&gcc-version;, Pass 1</title> + + <indexterm zone="ch-tools-libstdcpp-pass1"> + <primary sortas="a-GCC">GCC</primary> + <secondary>tools, libstdc++ pass 1</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Libstdc++ is the standard C++ library. It is needed + to compile C++ code + (part of GCC is written in C++), but we had to defer its installation + when we built <xref linkend="ch-tools-gcc-pass1"/> + because it depends on glibc, which was not yet available in the target + directory. + </para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&libstdcpp-ch5-sbu;</seg> + <seg>&libstdcpp-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Target Libstdc++</title> + + <note> + <para><application>Libstdc++</application> is part of the GCC sources. + You should first unpack the GCC tarball and change to the + <filename>gcc-&gcc-version;</filename> directory.</para> + </note> + + <para>Create a separate build directory for Libstdc++ and enter it:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare Libstdc++ for compilation:</para> + +<screen><userinput remap="configure">../libstdc++-v3/configure \ + --host=$LFS_TGT \ + --build=$(../config.guess) \ + --prefix=/usr \ + --disable-multilib \ + --disable-nls \ + --disable-libstdcxx-pch \ + --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--host=...</parameter></term> + <listitem> + <para>Indicates to use the cross compiler we have just built + instead of the one in <filename>/usr/bin</filename>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-libstdcxx-pch</parameter></term> + <listitem> + <para>This switch prevents the installation of precompiled + include files, which are not needed at this stage.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</parameter></term> + <listitem> + <para>This is the location where the standard include files are + searched by the C++ compiler. In a normal build, this information + is automatically passed to the Libstdc++ <command>configure</command> + options from the top level directory. In our case, this information + must be explicitly given.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile libstdc++ by running:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the library:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-gcc" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/linux-headers.xml b/chapter07/linux-headers.xml new file mode 100644 index 000000000..6c1af3173 --- /dev/null +++ b/chapter07/linux-headers.xml @@ -0,0 +1,207 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-linux-headers" role="wrap"> + <?dbhtml filename="linux-headers.html"?> + + <sect1info condition="script"> + <productname>linux-headers</productname> + <productnumber>&linux-version;</productnumber> + <address>&linux-url;</address> + </sect1info> + + <title>Linux-&linux-version; API Headers</title> + + <indexterm zone="ch-tools-linux-headers"> + <primary sortas="a-Linux">Linux</primary> + <secondary>tools, API headers</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Linux API Headers (in linux-&linux-version;.tar.xz) expose the + kernel's API for use by Glibc.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&linux-headers-ch5-sbu;</seg> + <seg>&linux-headers-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Linux API Headers</title> + + <para>The Linux kernel needs to expose an Application Programming Interface + (API) for the system's C library (Glibc in LFS) to use. This is done + by way of sanitizing various C header files that are shipped in the Linux + kernel source tarball.</para> + + <para>Make sure there are no stale files embedded in the package:</para> + +<screen><userinput remap="pre">make mrproper</userinput></screen> + + <para>Now extract the user-visible kernel headers from the source. + The recommended make target <quote>headers_install</quote> cannot be + used, because it requires <application>rsync</application>, which may not + be available. The headers are first placed in + <filename class="directory">./usr</filename>, then copied to the needed + location.</para> + +<screen><userinput remap="make">make headers +find usr/include -name '.*' -delete +rm usr/include/Makefile +</userinput><userinput remap="install">cp -rv usr/include $LFS/usr</userinput></screen> + + </sect2> + + <sect2 id="contents-linux-headers" role="content"> + <title>Contents of Linux API Headers</title> + + <segmentedlist> + <segtitle>Installed headers</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>/usr/include/asm/*.h, /usr/include/asm-generic/*.h, + /usr/include/drm/*.h, /usr/include/linux/*.h, /usr/include/misc/*.h, + /usr/include/mtd/*.h, /usr/include/rdma/*.h, /usr/include/scsi/*.h, + /usr/include/sound/*.h, /usr/include/video/*.h, + and /usr/include/xen/*.h</seg> + <seg>/usr/include/asm, /usr/include/asm-generic, /usr/include/drm, + /usr/include/linux, /usr/include/misc, /usr/include/mtd, + /usr/include/rdma, /usr/include/scsi, /usr/include/sound, + /usr/include/video, and /usr/include/xen</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="asm"> + <term><filename class="headerfile">/usr/include/asm/*.h</filename></term> + <listitem> + <para>The Linux API ASM Headers</para> + <indexterm zone="ch-tools-linux-headers asm"> + <primary sortas="e-/usr/include/asm/*.h">/usr/include/asm/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="asm-generic"> + <term><filename class="headerfile">/usr/include/asm-generic/*.h</filename></term> + <listitem> + <para>The Linux API ASM Generic Headers</para> + <indexterm zone="ch-tools-linux-headers asm-generic"> + <primary sortas="e-/usr/include/asm-generic/*.h">/usr/include/asm-generic/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="drm"> + <term><filename class="headerfile">/usr/include/drm/*.h</filename></term> + <listitem> + <para>The Linux API DRM Headers</para> + <indexterm zone="ch-tools-linux-headers drm"> + <primary sortas="e-/usr/include/drm/*.h">/usr/include/drm/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="linux"> + <term><filename class="headerfile">/usr/include/linux/*.h</filename></term> + <listitem> + <para>The Linux API Linux Headers</para> + <indexterm zone="ch-tools-linux-headers linux"> + <primary sortas="e-/usr/include/linux/*.h">/usr/include/linux/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="misc"> + <term><filename class="headerfile">/usr/include/misc/*.h</filename></term> + <listitem> + <para>The Linux API Miscellaneous Headers</para> + <indexterm zone="ch-tools-linux-headers misc"> + <primary sortas="e-/usr/include/misc/*.h">/usr/include/misc/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mtd"> + <term><filename class="headerfile">/usr/include/mtd/*.h</filename></term> + <listitem> + <para>The Linux API MTD Headers</para> + <indexterm zone="ch-tools-linux-headers mtd"> + <primary sortas="e-/usr/include/mtd/*.h">/usr/include/mtd/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rdma"> + <term><filename class="headerfile">/usr/include/rdma/*.h</filename></term> + <listitem> + <para>The Linux API RDMA Headers</para> + <indexterm zone="ch-tools-linux-headers rdma"> + <primary sortas="e-/usr/include/rdma/*.h">/usr/include/rdma/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="scsi"> + <term><filename class="headerfile">/usr/include/scsi/*.h</filename></term> + <listitem> + <para>The Linux API SCSI Headers</para> + <indexterm zone="ch-tools-linux-headers scsi"> + <primary sortas="e-/usr/include/scsi/*.h">/usr/include/scsi/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="sound"> + <term><filename class="headerfile">/usr/include/sound/*.h</filename></term> + <listitem> + <para>The Linux API Sound Headers</para> + <indexterm zone="ch-tools-linux-headers sound"> + <primary sortas="e-/usr/include/sound/*.h">/usr/include/sound/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="video"> + <term><filename class="headerfile">/usr/include/video/*.h</filename></term> + <listitem> + <para>The Linux API Video Headers</para> + <indexterm zone="ch-tools-linux-headers video"> + <primary sortas="e-/usr/include/video/*.h">/usr/include/video/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xen"> + <term><filename class="headerfile">/usr/include/xen/*.h</filename></term> + <listitem> + <para>The Linux API Xen Headers</para> + <indexterm zone="ch-tools-linux-headers xen"> + <primary sortas="e-/usr/include/xen/*.h">/usr/include/xen/*.h</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter07/m4.xml b/chapter07/m4.xml new file mode 100644 index 000000000..3f51c11d1 --- /dev/null +++ b/chapter07/m4.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-m4" role="wrap"> + <?dbhtml filename="m4.html"?> + + <sect1info condition="script"> + <productname>m4</productname> + <productnumber>&m4-version;</productnumber> + <address>&m4-url;</address> + </sect1info> + + <title>M4-&m4-version;</title> + + <indexterm zone="ch-tools-m4"> + <primary sortas="a-M4">M4</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/m4.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&m4-ch5-sbu;</seg> + <seg>&m4-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of M4</title> + + <para>First, make some fixes introduced by glibc-2.28:</para> + +<screen><userinput remap="pre">sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c +echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h</userinput></screen> + + <para>Prepare M4 for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess)</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + <para>Details on this package are located in + <xref linkend="contents-m4" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/make.xml b/chapter07/make.xml new file mode 100644 index 000000000..2d054dd9e --- /dev/null +++ b/chapter07/make.xml @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> +<sect1 id="ch-tools-make" role="wrap"> + <?dbhtml filename="make.html"?> + + <sect1info condition="script"> + <productname>make</productname> + <productnumber>&make-version;</productnumber> + <address>&make-url;</address> + </sect1info> + + <title>Make-&make-version;</title> + + <indexterm zone="ch-tools-make"> + <primary sortas="a-Make">Make</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/make.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&make-ch5-sbu;</seg> + <seg>&make-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Make</title> + + <para>Prepare Make for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --without-guile \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess)</userinput></screen> + + <variablelist> + <title>The meaning of the new configure option:</title> + + <varlistentry> + <term><parameter>--without-guile</parameter></term> + <listitem> + <para>Although we are cross-compiling, configure tries to use + guile from the build host if it finds it. This makes compilation + fail, so this switch prevents using it.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-make" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/ncurses.xml b/chapter07/ncurses.xml new file mode 100644 index 000000000..e2455eb7a --- /dev/null +++ b/chapter07/ncurses.xml @@ -0,0 +1,157 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-ncurses" role="wrap"> + <?dbhtml filename="ncurses.html"?> + + <sect1info condition="script"> + <productname>ncurses</productname> + <productnumber>&ncurses-version;</productnumber> + <address>&ncurses-url;</address> + </sect1info> + + <title>Ncurses-&ncurses-version;</title> + + <indexterm zone="ch-tools-ncurses"> + <primary sortas="a-Ncurses">Ncurses</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/ncurses.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&ncurses-ch5-sbu;</seg> + <seg>&ncurses-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Ncurses</title> + + <para>First, ensure that <command>gawk</command> is found first during configuration:</para> + +<screen><userinput remap="pre">sed -i s/mawk// configure</userinput></screen> + + <para>Then, run the following commands to build the <quote>tic</quote> + program on the build host:</para> + +<screen><userinput remap="pre">mkdir build +cd build +../configure +make -C include +make -C progs tic +cd ..</userinput></screen> + + <para>Prepare Ncurses for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(./config.guess) \ + --mandir=/usr/share/man \ + --with-shared \ + --without-debug \ + --without-ada \ + --without-normal \ + --enable-widec \ + --enable-pc-files</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title> + + <varlistentry> + <term><parameter>--without-ada</parameter></term> + <listitem> + <para>This ensures that Ncurses does not build support for the Ada + compiler which may be present on the host but will not be available + once we enter the <command>chroot</command> environment.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-widec</parameter></term> + <listitem> + <para>This switch causes wide-character libraries (e.g., <filename + class="libraryfile">libncursesw.so.&ncurses-version;</filename>) + to be built instead of normal ones (e.g., <filename + class="libraryfile">libncurses.so.&ncurses-version;</filename>). + These wide-character libraries are usable in both multibyte and + traditional 8-bit locales, while normal libraries work properly + only in 8-bit locales. Wide-character and normal libraries are + source-compatible, but not binary-compatible.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-pc-files</parameter></term> + <listitem> + <para>This switch generates and installs .pc files for pkg-config. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--without-normal</parameter></term> + <listitem> + <para>This switch disables building and installing most static libraries. + </para> + </listitem> + </varlistentry> + <!-- + <varlistentry> + <term><parameter>- -disable-db-install</parameter></term> + <listitem> + <para>This switch disables building the terminfo database: it is not + needed at this stage, and if <command>tic</command> is too old, + it cannot compile recent databases.</para> + </listitem> + </varlistentry> + --> + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> +<!-- TODO: check and document --> +<screen><userinput remap="install">make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install +ln -s libncursesw.so $LFS/usr/lib/libncurses.so</userinput></screen> + + <para>Move the shared libraries to the + <filename class="directory">/lib</filename> directory, where they are + expected to reside:</para> + +<screen><userinput remap="install">mv -v $LFS/usr/lib/libncursesw.so.6* $LFS/lib</userinput></screen> + + <para>Because the libraries have been moved, one symlink points to + a non-existent file. Recreate it:</para> + +<screen><userinput remap="install">ln -sfv ../../lib/$(readlink $LFS/usr/lib/libncursesw.so) $LFS/usr/lib/libncursesw.so</userinput></screen> + + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-ncurses" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/patch.xml b/chapter07/patch.xml new file mode 100644 index 000000000..08bad5c56 --- /dev/null +++ b/chapter07/patch.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-patch" role="wrap"> + <?dbhtml filename="patch.html"?> + + <sect1info condition="script"> + <productname>patch</productname> + <productnumber>&patch-version;</productnumber> + <address>&patch-url;</address> + </sect1info> + + <title>Patch-&patch-version;</title> + + <indexterm zone="ch-tools-patch"> + <primary sortas="a-Patch">Patch</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/patch.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&patch-ch5-sbu;</seg> + <seg>&patch-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Patch</title> + + <para>Prepare Patch for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess)</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-patch" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/perl.xml b/chapter07/perl.xml new file mode 100644 index 000000000..2e2bfd6bd --- /dev/null +++ b/chapter07/perl.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-perl" role="wrap"> + <?dbhtml filename="perl.html"?> + + <sect1info condition="script"> + <productname>perl</productname> + <productnumber>&perl-version;</productnumber> + <address>&perl-url;</address> + </sect1info> + + <title>Perl-&perl-version;</title> + + <indexterm zone="ch-tools-perl"> + <primary sortas="a-Perl">Perl</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/perl.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&perl-ch5-sbu;</seg> + <seg>&perl-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Perl</title> + + <para>Prepare Perl for compilation:</para> + +<screen><userinput remap="configure">sh Configure -des -Dprefix=/usr</userinput></screen> + + <variablelist> + <title>The meaning of the new Configure options:</title> + <varlistentry> + <term><parameter>-des</parameter></term> + <listitem> + <para>This is a combination of three options: -d uses defaults for + all items; -e ensures completion of all tasks; -s silences + non-essential output.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Build the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-perl" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/python.xml b/chapter07/python.xml new file mode 100644 index 000000000..8e7afaf03 --- /dev/null +++ b/chapter07/python.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-Python-temp" role="wrap"> + <?dbhtml filename="Python-temp.html"?> + + <sect1info condition="script"> + <productname>Python</productname> + <productnumber>&python-version;</productnumber> + <address>&python-url;</address> + </sect1info> + + <title>Python-&python-version;</title> + + <indexterm zone="ch-system-Python-temp"> + <primary sortas="a-Python">Python</primary> + <secondary>temporary</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/python.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&python-ch5-sbu;</seg> + <seg>&python-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Python</title> + + <note> + <para>There are two package files whose name starts with + <quote>python</quote>. The one to extract from is + <filename>Python-&python-version;.tar.xz</filename> (notice the + uppercase first letter).</para> + </note> + + <para>Prepare Python for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --without-ensurepip</userinput></screen> + + <variablelist> + <title>The meaning of the configure option:</title> + + <varlistentry> + <term><parameter>--without-ensurepip</parameter></term> + <listitem> + <para>This switch disables the Python package installer, which is not + needed at this stage.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-python" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/sed.xml b/chapter07/sed.xml new file mode 100644 index 000000000..5daaf6b7e --- /dev/null +++ b/chapter07/sed.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-sed" role="wrap"> + <?dbhtml filename="sed.html"?> + + <sect1info condition="script"> + <productname>sed</productname> + <productnumber>&sed-version;</productnumber> + <address>&sed-url;</address> + </sect1info> + + <title>Sed-&sed-version;</title> + + <indexterm zone="ch-tools-sed"> + <primary sortas="a-Sed">Sed</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/sed.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&sed-ch5-sbu;</seg> + <seg>&sed-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Sed</title> + + <para>Prepare Sed for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --bindir=/bin</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-sed" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/stripping.xml b/chapter07/stripping.xml new file mode 100644 index 000000000..7c054b6b2 --- /dev/null +++ b/chapter07/stripping.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-stripping"> + <?dbhtml filename="stripping.html"?> + + <title>Stripping</title> + + <para>The steps in this section are optional, but if the LFS partition is + rather small, it is beneficial to learn that unnecessary items can be removed. + The executables and libraries built so far contain about 70 MB of unneeded + debugging symbols. Remove those symbols with:</para> + +<screen><userinput>$LFS_TGT-strip --strip-debug $LFS/usr/lib/* +$LFS_TGT-strip --strip-unneeded $LFS/usr/{,s}bin/*</userinput></screen> + + <para>These commands will skip a number of files, reporting that it does not + recognize their file format. Most of these are scripts instead of binaries. + Note that we use the <command>strip</command> program built in + <quote>Binutils pass 1</quote>, since it is the one that knows how to strip + our cross-compiled programs.</para> +<!-- Normally, the host "strip" could be used too, since it is actually the +same computer. But Some old versions of binutils may generate buggy crt1.o +and the like, because they do not know about recently introduced symbol +types. For more details, +see https://sourceware.org/bugzilla/show_bug.cgi?id=22875--> + + <para>Take care <emphasis>not</emphasis> to use + <parameter>--strip-unneeded</parameter> on the libraries. The static + ones would be destroyed and the toolchain packages would need to be + built all over again.</para> + + <para>To save more, remove the documentation:</para> + +<screen><userinput>rm -rf $LFS/usr/{,share}/{info,man,doc}</userinput></screen> + + <para>The libtool .la files are only useful when linking with static + libraries. They are unneeded, and potentially harmful, when using dynamic + shared libraries, specially when using also non-autotools build systems. + Remove those files now:</para> + +<screen><userinput>find $LFS/usr/{lib,libexec} -name \*.la -delete</userinput></screen> + + <para>At this point, you should have at least 3 GB of free space in + <envar>$LFS</envar> that can be used to build and install Glibc and Gcc in + the next phase. If you can build and install Glibc, you can build and install + the rest too.</para> + +</sect1> diff --git a/chapter07/tar.xml b/chapter07/tar.xml new file mode 100644 index 000000000..26f676121 --- /dev/null +++ b/chapter07/tar.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-tar" role="wrap"> + <?dbhtml filename="tar.html"?> + + <sect1info condition="script"> + <productname>tar</productname> + <productnumber>&tar-version;</productnumber> + <address>&tar-url;</address> + </sect1info> + + <title>Tar-&tar-version;</title> + + <indexterm zone="ch-tools-tar"> + <primary sortas="a-Tar">Tar</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/tar.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&tar-ch5-sbu;</seg> + <seg>&tar-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Tar</title> + + <para>Prepare Tar for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) \ + --bindir=/bin</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-tar" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/tcl.xml b/chapter07/tcl.xml new file mode 100644 index 000000000..bd17a91a8 --- /dev/null +++ b/chapter07/tcl.xml @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; + <!ENTITY tdbc-ver "1.1.1"> + <!ENTITY itcl-ver "4.2.0"> +]> + +<sect1 id="ch-tools-tcl" role="wrap"> + <?dbhtml filename="tcl.html"?> + + <sect1info condition="script"> + <productname>tcl</productname> + <productnumber>&tcl-version;</productnumber> + <address>&tcl-url;</address> + </sect1info> + + <title>Tcl-&tcl-version;</title> + + <indexterm zone="ch-tools-tcl"> + <primary sortas="a-Tcl">Tcl</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The <application>Tcl</application> package contains the Tool Command Language, + a robust general-purpose scripting language. The <application>Expect</application> package + is written in the <application>Tcl</application> language.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&tcl-ch5-sbu;</seg> + <seg>&tcl-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Tcl</title> + + <para>This package and the next two (Expect and DejaGNU) are + installed to support running the test suites for GCC and Binutils and other + packages. Installing three packages for testing purposes may seem + excessive, but it is very reassuring, if not essential, to know that the + most important tools are working properly. These packages are required + to run the test suites in <xref linkend="chapter-building-system"/>.</para> + + <para>Note that the Tcl package used here is a minimal version needed + to run the LFS tests. For the full package, see the + <ulink url='&blfs-book;general/tcl.html'>BLFS Tcl procedures</ulink>.</para> + + <para>Prepare Tcl for compilation:</para> + +<screen><userinput remap="configure">SRCDIR=$(pwd) +cd unix +./configure --prefix=/usr \ + --mandir=/usr/share/man \ + $([ "$(uname -m)" = x86_64 ] && echo --enable-64bit)</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>$([ "$(uname -m)" = x86_64 ] && echo --enable-64bit)</parameter></term> + <listitem> + <para>The construct <parameter>$(<shell command>)</parameter> + is replaced by the output of the chell command. Here this output is + empty if running on a 32 bit machine, and is + <parameter>--enable-64bit</parameter> if running on a 64 bit machine. + </para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Build the package:</para> + +<screen><userinput remap="make">make + +sed -e "s|$SRCDIR/unix|/usr/lib|" \ + -e "s|$SRCDIR|/usr/include|" \ + -i tclConfig.sh + +sed -e "s|$SRCDIR/unix/pkgs/tdbc&tdbc-ver;|/usr/lib/tdbc&tdbc-ver;|" \ + -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;/generic|/usr/include|" \ + -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;/library|/usr/lib/tcl8.6|" \ + -e "s|$SRCDIR/pkgs/tdbc&tdbc-ver;|/usr/include|" \ + -i pkgs/tdbc&tdbc-ver;/tdbcConfig.sh + +sed -e "s|$SRCDIR/unix/pkgs/itcl&itcl-ver;|/usr/lib/itcl&itcl-ver;|" \ + -e "s|$SRCDIR/pkgs/itcl&itcl-ver;/generic|/usr/include|" \ + -e "s|$SRCDIR/pkgs/itcl&itcl-ver;|/usr/include|" \ + -i pkgs/itcl&itcl-ver;/itclConfig.sh + +unset SRCDIR</userinput></screen> + + <para>The various <quote>sed</quote> after the <quote>make</quote> command + remove references to the build directory from various configuration files, + and replaces them with the install directory. This is not mandatory + for the remaining of LFS, but may be needed in case a package built later + uses Tcl.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Make the installed library writable so debugging symbols can + be removed later:</para> + +<screen><userinput remap="install">chmod -v u+w /usr/lib/libtcl&tcl-major-version;.so</userinput></screen> + + <para>Install Tcl's headers. The next package, Expect, requires them + to build.</para> + +<screen><userinput remap="install">make install-private-headers</userinput></screen> + + <para>Now make a necessary symbolic link:</para> + +<screen><userinput remap="install">ln -sfv tclsh&tcl-major-version; /usr/bin/tclsh</userinput></screen> + + </sect2> + + <sect2 id="contents-tcl" role="content"> + <title>Contents of Tcl</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>tclsh (link to tclsh&tcl-major-version;) and tclsh&tcl-major-version;</seg> + <seg>libtcl&tcl-major-version;.so, libtclstub&tcl-major-version;.a</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="tclsh&tcl-major-version;"> + <term><command>tclsh&tcl-major-version;</command></term> + <listitem> + <para>The Tcl command shell</para> + <indexterm zone="ch-tools-tcl tclsh&tcl-major-version;"> + <primary sortas="b-tclsh&tcl-major-version;">tclsh&tcl-major-version;</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="tclsh"> + <term><command>tclsh</command></term> + <listitem> + <para>A link to tclsh&tcl-major-version;</para> + <indexterm zone="ch-tools-tcl tclsh"> + <primary sortas="b-tclsh">tclsh</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libtcl&tcl-major-version;.so"> + <term><filename class="libraryfile">libtcl&tcl-major-version;.so</filename></term> + <listitem> + <para>The Tcl library</para> + <indexterm zone="ch-tools-tcl libtcl&tcl-major-version;.so"> + <primary sortas="c-libtcl&tcl-major-version;.so">libtcl&tcl-major-version;.so</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libtclstub&tcl-major-version;.a"> + <term><filename class="libraryfile">libtclstub&tcl-major-version;.a</filename></term> + <listitem> + <para>The Tcl Stub library</para> + <indexterm zone="ch-tools-tcl libtclstub&tcl-major-version;.a"> + <primary sortas="c-libtclstub&tcl-major-version;.a">libtclstub&tcl-major-version;.a</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter07/texinfo.xml b/chapter07/texinfo.xml new file mode 100644 index 000000000..2cb7764cb --- /dev/null +++ b/chapter07/texinfo.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-texinfo-temp" role="wrap"> + <?dbhtml filename="texinfo-temp.html"?> + + <sect1info condition="script"> + <productname>texinfo</productname> + <productnumber>&texinfo-version;</productnumber> + <address>&texinfo-url;</address> + </sect1info> + + <title>Texinfo-&texinfo-version;</title> + + <indexterm zone="ch-system-texinfo-temp"> + <primary sortas="a-Texinfo">Texinfo</primary> + <secondary>temporary</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/texinfo.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&texinfo-ch5-sbu;</seg> + <seg>&texinfo-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Texinfo</title> + + <para>Prepare Texinfo for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> + + <note> + <para>As part of the configure process, a test is made that indicates an + error for TestXS_la-TestXS.lo. This is not relevant for LFS and should be + ignored.</para> + </note> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-texinfo" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/toolchaintechnotes.xml b/chapter07/toolchaintechnotes.xml new file mode 100644 index 000000000..63c9210e5 --- /dev/null +++ b/chapter07/toolchaintechnotes.xml @@ -0,0 +1,335 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-toolchaintechnotes"> + <?dbhtml filename="toolchaintechnotes.html"?> + + <title>Toolchain Technical Notes</title> + + <para>This section explains some of the rationale and technical details + behind the overall build method. It is not essential to immediately + understand everything in this section. Most of this information will be + clearer after performing an actual build. This section can be referred + to at any time during the process.</para> + + <para>The overall goal of <xref linkend="chapter-temporary-tools"/> is to + produce a temporary area that contains a known-good set of tools that can be + isolated from the host system. By using <command>chroot</command>, the + commands in the remaining chapters will be contained within that environment, + ensuring a clean, trouble-free build of the target LFS system. The build + process has been designed to minimize the risks for new readers and to provide + the most educational value at the same time.</para> + + <para>The build process is based on the process of + <emphasis>cross-compilation</emphasis>. Cross-compilation is normally used + for building a compiler and its toolchain for a machine different from + the one that is used for the build. This is not strictly needed for LFS, + since the machine where the new system will run is the same as the one + used for the build. But cross-compilation has the great advantage that + anything that is cross-compiled cannot depend on the host environment.</para> + + <sect2 id="cross-compile" xreflabel="About Cross-Compilation"> + + <title>About Cross-Compilation</title> + + <para>Cross-compilation involves some concepts that deserve a section on + their own. Although this section may be omitted in a first reading, it + is strongly suggested to come back to it later in order to get a full + grasp of the build process.</para> + + <para>Let us first define some terms used in this context:</para> + + <variablelist> + <varlistentry><term>build</term><listitem> + <para>is the machine where we build programs. Note that this machine + is referred to as the <quote>host</quote> in other + sections.</para></listitem> + </varlistentry> + + <varlistentry><term>host</term><listitem> + <para>is the machine/system where the built programs will run. Note + that this use of <quote>host</quote> is not the same as in other + sections.</para></listitem> + </varlistentry> + + <varlistentry><term>target</term><listitem> + <para>is only used for compilers. It is the machine the compiler + produces code for. It may be different from both build and + host.</para></listitem> + </varlistentry> + + </variablelist> + + <para>As an example, let us imagine the following scenario: we may have a + compiler on a slow machine only, let's call the machine A, and the compiler + ccA. We may have also a fast machine (B), but with no compiler, and we may + want to produce code for a another slow machine (C). Then, to build a + compiler for machine C, we would have three stages:</para> + + <informaltable align="center"> + <tgroup cols="5"> + <colspec colnum="1" align="center"/> + <colspec colnum="2" align="center"/> + <colspec colnum="3" align="center"/> + <colspec colnum="4" align="center"/> + <colspec colnum="5" align="left"/> + <thead> + <row><entry>Stage</entry><entry>Build</entry><entry>Host</entry> + <entry>Target</entry><entry>Action</entry></row> + </thead> + <tbody> + <row> + <entry>1</entry><entry>A</entry><entry>A</entry><entry>B</entry> + <entry>build cross-compiler cc1 using ccA on machine A</entry> + </row> + <row> + <entry>2</entry><entry>A</entry><entry>B</entry><entry>B</entry> + <entry>build cross-compiler cc2 using cc1 on machine A</entry> + </row> + <row> + <entry>3</entry><entry>B</entry><entry>C</entry><entry>C</entry> + <entry>build compiler ccC using cc2 on machine B</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Then, all the other programs needed by machine C can be compiled + using cc2 on the fast machine B. Note that unless B can run programs + produced for C, there is no way to test the built programs until machine + C itself is running. For example, for testing ccC, we may want to add a + fourth stage:</para> + + <informaltable align="center"> + <tgroup cols="5"> + <colspec colnum="1" align="center"/> + <colspec colnum="2" align="center"/> + <colspec colnum="3" align="center"/> + <colspec colnum="4" align="center"/> + <colspec colnum="5" align="left"/> + <thead> + <row><entry>Stage</entry><entry>Build</entry><entry>Host</entry> + <entry>Target</entry><entry>Action</entry></row> + </thead> + <tbody> + <row> + <entry>4</entry><entry>C</entry><entry>C</entry><entry>C</entry> + <entry>rebuild and test ccC using itself on machine C</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>In the example above, only cc1 and cc2 are cross-compilers, that is, + they produce code for a machine different from the one they are run on. + The other compilers ccA and ccC produce code for the machine they are run + on. Such compilers are called <emphasis>native</emphasis> compilers.</para> + + </sect2> + + <sect2 id="lfs-cross"> + <title>Implementation of Cross-Compilation for LFS</title> + + <note> + <para>Almost all the build systems use names of the form + cpu-vendor-kernel-os referred to as the machine triplet. An astute + reader may wonder why a <quote>triplet</quote> refers to a four component + name. The reason is history: initially, three component names were enough + to designate unambiguously a machine, but with new machines and systems + appearing, that proved insufficient. The word <quote>triplet</quote> + remained. A simple way to determine your machine triplet is to run + the <command>config.guess</command> + script that comes with the source for many packages. Unpack the Binutils + sources and run the script: <userinput>./config.guess</userinput> and note + the output. For example, for a 32-bit Intel processor the + output will be <emphasis>i686-pc-linux-gnu</emphasis>. On a 64-bit + system it will be <emphasis>x86_64-pc-linux-gnu</emphasis>.</para> + + <para>Also be aware of the name of the platform's dynamic linker, often + referred to as the dynamic loader (not to be confused with the standard + linker <command>ld</command> that is part of Binutils). The dynamic linker + provided by Glibc finds and loads the shared libraries needed by a + program, prepares the program to run, and then runs it. The name of the + dynamic linker for a 32-bit Intel machine will be <filename + class="libraryfile">ld-linux.so.2</filename> (<filename + class="libraryfile">ld-linux-x86-64.so.2</filename> for 64-bit systems). A + sure-fire way to determine the name of the dynamic linker is to inspect a + random binary from the host system by running: <userinput>readelf -l + <name of binary> | grep interpreter</userinput> and noting the + output. The authoritative reference covering all platforms is in the + <filename>shlib-versions</filename> file in the root of the Glibc source + tree.</para> + </note> + + <para>In order to fake a cross compilation, the name of the host triplet + is slightly adjusted by changing the "vendor" field in the + <envar>LFS_TGT</envar> variable. We also use the + <parameter>--with-sysroot</parameter> when building the cross linker and + cross compiler, to tell them where to find the needed host files. This + ensures none of the other programs built in <xref + linkend="chapter-temporary-tools"/> can link to libraries on the build + machine. Only two stages are mandatory, and one more for tests:</para> + + <informaltable align="center"> + <tgroup cols="5"> + <colspec colnum="1" align="center"/> + <colspec colnum="2" align="center"/> + <colspec colnum="3" align="center"/> + <colspec colnum="4" align="center"/> + <colspec colnum="5" align="left"/> + <thead> + <row><entry>Stage</entry><entry>Build</entry><entry>Host</entry> + <entry>Target</entry><entry>Action</entry></row> + </thead> + <tbody> + <row> + <entry>1</entry><entry>pc</entry><entry>pc</entry><entry>lfs</entry> + <entry>build cross-compiler cc1 using cc-pc on pc</entry> + </row> + <row> + <entry>2</entry><entry>pc</entry><entry>lfs</entry><entry>lfs</entry> + <entry>build compiler cc-lfs using cc1 on pc</entry> + </row> + <row> + <entry>3</entry><entry>lfs</entry><entry>lfs</entry><entry>lfs</entry> + <entry>rebuild and test cc-lfs using itself on lfs</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>In the above table, <quote>on pc</quote> means the commands are run + on a machine using the already installed distribution. <quote>On + lfs</quote> means the commands are run in a chrooted environment.</para> + + <para>Now, there is more about cross-compiling: the C language is not + just a compiler, but also defines a standard library. In this book, the + GNU C library, named glibc, is used. This library must + be compiled for the lfs machine, that is, using the cross compiler cc1. + But the compiler itself uses an internal library implementing complex + instructions not available in the assembler instruction set. This + internal library is named libgcc, and must be linked to the glibc + library to be fully functional! Furthermore, the standard library for + C++ (libstdc++) also needs being linked to glibc. The solution + to this chicken and egg problem is to first build a degraded cc1+libgcc, + lacking some fuctionalities such as threads and exception handling, then + build glibc using this degraded compiler (glibc itself is not + degraded), then build libstdc++. But this last library will lack the + same functionalities as libgcc.</para> + + <para>This is not the end of the story: the conclusion of the preceding + paragraph is that cc1 is unable to build a fully functional libstdc++, but + this is the only compiler available for building the C/C++ libraries + during stage 2! Of course, the compiler built during stage 2, cc-lfs, + would be able to build those libraries, but (i) the build system of + gcc does not know that it is usable on pc, and (ii) using it on pc + would be at risk of linking to the pc libraries, since cc-lfs is a native + compiler. So we have to build libstdc++ later, in chroot.</para> + + </sect2> + + <sect2 id="other-details"> + + <title>Other procedural details</title> + + <para>The cross-compiler will be installed in a separate <filename + class="directory">$LFS/tools</filename> directory, since it will not + be part of the final system.</para> + + <para>Binutils is installed first because the <command>configure</command> + runs of both GCC and Glibc perform various feature tests on the assembler + and linker to determine which software features to enable or disable. This + is more important than one might first realize. An incorrectly configured + GCC or Glibc can result in a subtly broken toolchain, where the impact of + such breakage might not show up until near the end of the build of an + entire distribution. A test suite failure will usually highlight this error + before too much additional work is performed.</para> + + <para>Binutils installs its assembler and linker in two locations, + <filename class="directory">$LFS/tools/bin</filename> and <filename + class="directory">$LFS/tools/$LFS_TGT/bin</filename>. The tools in one + location are hard linked to the other. An important facet of the linker is + its library search order. Detailed information can be obtained from + <command>ld</command> by passing it the <parameter>--verbose</parameter> + flag. For example, <command>$LFS_TGT-ld --verbose | grep SEARCH</command> + will illustrate the current search paths and their order. It shows which + files are linked by <command>ld</command> by compiling a dummy program and + passing the <parameter>--verbose</parameter> switch to the linker. For + example, + <command>$LFS_TGT-gcc dummy.c -Wl,--verbose 2>&1 | grep succeeded</command> + will show all the files successfully opened during the linking.</para> + + <para>The next package installed is GCC. An example of what can be + seen during its run of <command>configure</command> is:</para> + +<screen><computeroutput>checking what assembler to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/as +checking what linker to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/ld</computeroutput></screen> + + <para>This is important for the reasons mentioned above. It also + demonstrates that GCC's configure script does not search the PATH + directories to find which tools to use. However, during the actual + operation of <command>gcc</command> itself, the same search paths are not + necessarily used. To find out which standard linker <command>gcc</command> + will use, run: <command>$LFS_TGT-gcc -print-prog-name=ld</command>.</para> + + <para>Detailed information can be obtained from <command>gcc</command> by + passing it the <parameter>-v</parameter> command line option while compiling + a dummy program. For example, <command>gcc -v dummy.c</command> will show + detailed information about the preprocessor, compilation, and assembly + stages, including <command>gcc</command>'s included search paths and their + order.</para> + + <para>Next installed are sanitized Linux API headers. These allow the + standard C library (Glibc) to interface with features that the Linux + kernel will provide.</para> + + <para>The next package installed is Glibc. The most important + considerations for building Glibc are the compiler, binary tools, and + kernel headers. The compiler is generally not an issue since Glibc will + always use the compiler relating to the <parameter>--host</parameter> + parameter passed to its configure script; e.g. in our case, the compiler + will be <command>$LFS_TGT-gcc</command>. The binary tools and kernel + headers can be a bit more complicated. Therefore, take no risks and use + the available configure switches to enforce the correct selections. After + the run of <command>configure</command>, check the contents of the + <filename>config.make</filename> file in the <filename + class="directory">build</filename> directory for all important details. + Note the use of <parameter>CC="$LFS_TGT-gcc"</parameter> (with + <envar>$LFS_TGT</envar> expanded) to control which binary tools are used + and the use of the <parameter>-nostdinc</parameter> and + <parameter>-isystem</parameter> flags to control the compiler's include + search path. These items highlight an important aspect of the Glibc + package—it is very self-sufficient in terms of its build machinery + and generally does not rely on toolchain defaults.</para> + + <para>As said above, the standard C++ library is compiled next, followed + by all the programs that need themselves to be built. The install step + uses the <envar>DESTDIR</envar> variable to have the programs land into + the LFS filesystem.</para> + + <para>Then the native lfs compiler is built. First Binutils Pass 2, with + the same <envar>DESTDIR</envar> install as the other programs, then the + second pass of GCC, omitting libstdc++ and other non-important libraries. + Due to some weird logic in GCC's configure script, + <envar>CC_FOR_TARGET</envar> ends up as <command>cc</command> when host + is the same as target, but is different from build. This is why + <parameter>CC_FOR_TARGET=$LFS_TGT-gcc</parameter> is put explicitely into + the configure options.</para> + + <para>Upon entering the chroot environment in <xref + linkend="chapter-building-system"/>, the first task is to install + libstdc++. Then temporary installations of programs needed for the proper + operation of the toolchain are performed. Programs needed for testing + other programs are also built. From this point onwards, the + core toolchain is self-contained and self-hosted. In the remainder of + the <xref linkend="chapter-building-system"/>, final versions of all the + packages needed for a fully functional system are built, tested and + installed.</para> + + </sect2> + +</sect1> diff --git a/chapter07/util-linux.xml b/chapter07/util-linux.xml new file mode 100644 index 000000000..6aebad7a1 --- /dev/null +++ b/chapter07/util-linux.xml @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-util-linux" role="wrap"> + <?dbhtml filename="util-linux.html"?> + + <sect1info condition="script"> + <productname>util-linux</productname> + <productnumber>&util-linux-version;</productnumber> + <address>&util-linux-url;</address> + </sect1info> + + <title>Util-linux-&util-linux-version;</title> + + <indexterm zone="ch-tools-util-linux"> + <primary sortas="a-Util-linux">Util-linux</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Util-linux package contains miscellaneous utility programs.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&util-linux-ch5-sbu;</seg> + <seg>&util-linux-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Util-linux</title> + + <para>First create a directory + to enable storage for the <command>hwclock</command> program:</para> + +<screen><userinput remap="pre">mkdir -pv /var/lib/hwclock</userinput></screen> + + <para>Prepare Util-linux for compilation:</para> + +<screen><userinput remap="configure">./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --docdir=/usr/share/doc/util-linux-&util-linux-version; \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> +<!-- TODO --> + <varlistentry> + <term><parameter>ADJTIME_PATH=/var/lib/hwclock/adjtime</parameter></term> + <listitem> + <para>This sets the location of the file recording information about + the hardware clock, in accordance to the FHS. This is not stricly + needed fot his temporary tool, but it prevent creating a file + at another location, which would not be overwritten or removed + when building the final util-linux.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-*</parameter></term> + <listitem> + <para>Those switches prevent warnings about building components + that require packages not in LFS or not installed yet.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--without-python</parameter></term> + <listitem> + <para>This switch disables using <application>Python</application>. + It avoids trying to build unneeded bindings.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + + <para>Details on this package are located in + <xref linkend="contents-utillinux" role="."/></para> + + </sect2> + +</sect1> diff --git a/chapter07/xz.xml b/chapter07/xz.xml new file mode 100644 index 000000000..83e4a96d6 --- /dev/null +++ b/chapter07/xz.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-tools-xz" role="wrap"> + <?dbhtml filename="xz.html"?> + + <sect1info condition="script"> + <productname>xz</productname> + <productnumber>&xz-version;</productnumber> + <address>&xz-url;</address> + </sect1info> + + <title>Xz-&xz-version;</title> + + <indexterm zone="ch-tools-xz"> + <primary sortas="a-xz">Xz</primary> + <secondary>tools</secondary> + </indexterm> + + <sect2 role="package"> + <title/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter06/xz.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&xz-ch5-sbu;</seg> + <seg>&xz-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Xz</title> + + <para>Prepare Xz for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) \ + --disable-static \ + --docdir=/usr/share/doc/xz-&xz-version;</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen> + + <para>Make sure that all essential files are in the correct directory:</para> + +<screen><userinput remap="install">mv -v $LFS/usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} $LFS/bin +mv -v $LFS/usr/lib/liblzma.so.* $LFS/lib +ln -svf ../../lib/$(readlink $LFS/usr/lib/liblzma.so) $LFS/usr/lib/liblzma.so</userinput></screen> + + </sect2> + + <sect2 role="content"> + <title/> + <para>Details on this package are located in<!-- TODO + <xref linkend="contents-xz" role="."/> --></para> + + </sect2> + +</sect1> diff --git a/chapter06/aboutdebug.xml b/chapter08/aboutdebug.xml index f49618c83..f49618c83 100644 --- a/chapter06/aboutdebug.xml +++ b/chapter08/aboutdebug.xml diff --git a/chapter06/acl.xml b/chapter08/acl.xml index f9f2eddbe..f9f2eddbe 100644 --- a/chapter06/acl.xml +++ b/chapter08/acl.xml diff --git a/chapter06/adjusting.xml b/chapter08/adjusting.xml index 3e6b49e19..3e6b49e19 100644 --- a/chapter06/adjusting.xml +++ b/chapter08/adjusting.xml diff --git a/chapter06/attr.xml b/chapter08/attr.xml index 10c6eec53..10c6eec53 100644 --- a/chapter06/attr.xml +++ b/chapter08/attr.xml diff --git a/chapter06/autoconf.xml b/chapter08/autoconf.xml index 6652747fd..6652747fd 100644 --- a/chapter06/autoconf.xml +++ b/chapter08/autoconf.xml diff --git a/chapter06/automake.xml b/chapter08/automake.xml index 11dccfad3..11dccfad3 100644 --- a/chapter06/automake.xml +++ b/chapter08/automake.xml diff --git a/chapter08/bash.xml b/chapter08/bash.xml new file mode 100644 index 000000000..650c33ade --- /dev/null +++ b/chapter08/bash.xml @@ -0,0 +1,173 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-bash" role="wrap"> + <?dbhtml filename="bash.html"?> + + <sect1info condition="script"> + <productname>bash</productname> + <productnumber>&bash-version;</productnumber> + <address>&bash-url;</address> + </sect1info> + + <title>Bash-&bash-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&bash-ch6-sbu;</seg> + <seg>&bash-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Bash</title> + + <para>Incorporate some upstream fixes:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&bash-fixes-patch;</userinput></screen> + + <para>Prepare Bash for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --docdir=/usr/share/doc/bash-&bash-version; \ + --without-bash-malloc \ + --with-installed-readline</userinput></screen> + + <variablelist> + <title>The meaning of the new configure option:</title> + + <varlistentry> + <term><parameter>--with-installed-readline</parameter></term> + <listitem> + <para>This option 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 remap="make">make</userinput></screen> + + <para>Skip down to <quote>Install the + package</quote> if not running the test suite.</para> + + <para>To prepare the tests, ensure that the <systemitem class="username">tester</systemitem> user can write to the sources tree:</para> + +<screen><userinput remap="test">chown -Rv tester .</userinput></screen> + + <para>Now, run the tests as the <systemitem + class="username">tester</systemitem> user:</para> + +<screen><userinput remap="test">su tester << EOF +PATH=$PATH make tests < $(tty) +EOF</userinput></screen> +<!-- + <para>The <systemitem class="username">tester</systemitem> + user does not have enough permissions for all the tests to pass. This shows + up in some <quote>diff</quote> output in four test results. Portions of the + run-execscript, run-lastpipe, run-read, and run-test programs + are known to fail in the LFS chroot environment, but pass if the tests + are run in a full system.</para> +--> + <para>Install the package and move the main executable to + <filename class='directory'>/bin</filename>:</para> + +<screen><userinput remap="install">make install +mv -vf /usr/bin/bash /bin</userinput></screen> + + <para>Run the newly compiled <command>bash</command> program (replacing the one that is + currently being executed):</para> + +<screen role="nodump"><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> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>bash, bashbug, and sh (link to bash)</seg> + <seg>/usr/include/bash, /usr/lib/bash, and + /usr/share/doc/bash-&bash-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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 standard + formatted bug reports concerning <command>bash</command></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/bc.xml b/chapter08/bc.xml index d848ad365..d848ad365 100644 --- a/chapter06/bc.xml +++ b/chapter08/bc.xml diff --git a/chapter06/binutils.xml b/chapter08/binutils.xml index 04dbd199c..04dbd199c 100644 --- a/chapter06/binutils.xml +++ b/chapter08/binutils.xml diff --git a/chapter08/bison.xml b/chapter08/bison.xml new file mode 100644 index 000000000..23b6f0a95 --- /dev/null +++ b/chapter08/bison.xml @@ -0,0 +1,142 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-bison" role="wrap"> + <?dbhtml filename="bison.html"?> + + <sect1info condition="script"> + <productname>bison</productname> + <productnumber>&bison-version;</productnumber> + <address>&bison-url;</address> + </sect1info> + + <title>Bison-&bison-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&bison-ch6-sbu;</seg> + <seg>&bison-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Bison</title> +<!-- + <para>First, fix a build problem with the current version:</para> + +<screen><userinput remap="pre">sed -i '9327 s/mv/cp/' Makefile.in</userinput></screen> +--> + <para>Prepare Bison for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --docdir=/usr/share/doc/bison-&bison-version;</userinput></screen> + +<!-- I could not find a race condidtion in the current version. + <para>Compile the package, but work around a race condition in the + current version:</para> + +<screen><userinput remap="make">make -j1</userinput></screen>--> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results (about 5.5 SBU), issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Fourteen tests fail in the "Diagnostics" section, probably because of + missing locales.</para> + +<!-- + <para>There is a circular dependency between bison and flex with regard to + the checks. If desired, after installing flex in the next section, the + bison package can be rebuilt and the bison checks can be run with + <command>make check</command>.</para> +--> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-bison" role="content"> + <title>Contents of Bison</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>bison and yacc</seg> + <seg>liby.a</seg> + <seg>/usr/share/bison</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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; Bison is a replacement for Yacc (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"> + <term><filename class="libraryfile">liby</filename></term> + <listitem> + <para>The Yacc library containing implementations of Yacc-compatible + <function>yyerror</function> and <function>main</function> functions; + this library is normally not very useful, but POSIX requires it</para> + <indexterm zone="ch-system-bison liby"> + <primary sortas="c-liby">liby</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/bzip2.xml b/chapter08/bzip2.xml new file mode 100644 index 000000000..edf2f5bd4 --- /dev/null +++ b/chapter08/bzip2.xml @@ -0,0 +1,250 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-bzip2" role="wrap"> + <?dbhtml filename="bzip2.html"?> + + <sect1info condition="script"> + <productname>bzip2</productname> + <productnumber>&bzip2-version;</productnumber> + <address>&bzip2-url;</address> + </sect1info> + + <title>Bzip2-&bzip2-version;</title> + + <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. Compressing text files with <command>bzip2</command> yields a much + better compression percentage than with the traditional + <command>gzip</command>.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&bzip2-ch6-sbu;</seg> + <seg>&bzip2-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Bzip2</title> + + <para>Apply a patch that will install the documentation for this package:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&bzip2-docs-patch;</userinput></screen> + + <para>The following command ensures installation of symbolic links are relative:</para> + +<screen><userinput remap="pre">sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile</userinput></screen> + + <para>Ensure the man pages are installed into the correct location:</para> + +<screen><userinput remap="pre">sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile</userinput></screen> + + <para>Prepare Bzip2 for compilation with:</para> + +<screen><userinput remap="make">make -f Makefile-libbz2_so +make clean</userinput></screen> + + <variablelist> + <title>The meaning of the make parameter:</title> + + <varlistentry> + <term><parameter>-f Makefile-libbz2_so</parameter></term> + <listitem> + <para>This 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> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile and test the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Install the programs:</para> + +<screen><userinput remap="install">make PREFIX=/usr install</userinput></screen> + + <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 remap="install">cp -v bzip2-shared /bin/bzip2 +cp -av libbz2.so* /lib +ln -sv ../../lib/libbz2.so.1.0 $LFS/usr/lib/libbz2.so +rm -v /usr/bin/{bunzip2,bzcat,bzip2} +ln -sv bzip2 /bin/bunzip2 +ln -sv bzip2 /bin/bzcat</userinput></screen> + + </sect2> + + <sect2 id="contents-bzip2" role="content"> + <title>Contents of Bzip2</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>bunzip2 (link to bzip2), bzcat (link to bzip2), bzcmp (link to + bzdiff), bzdiff, bzegrep (link to bzgrep), bzfgrep (link to bzgrep), + bzgrep, bzip2, bzip2recover, bzless (link to bzmore), and bzmore</seg> + <seg>libbz2.{a,so}</seg> + <seg>/usr/share/doc/bzip2-&bzip2-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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="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="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="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/chapter08/chapter08.xml b/chapter08/chapter08.xml index 32112e37a..cbdb39963 100644 --- a/chapter08/chapter08.xml +++ b/chapter08/chapter08.xml @@ -5,15 +5,99 @@ %general-entities; ]> -<chapter id="chapter-bootable" xreflabel="Chapter 8"> +<chapter id="chapter-building-system" xreflabel="Chapter 8"> <?dbhtml dir="chapter08"?> <?dbhtml filename="chapter08.html"?> - <title>Making the LFS System Bootable</title> + <title>Installing Basic System Software</title> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introduction.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="fstab.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kernel.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pkgmgt.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="man-pages.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="glibc.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="zlib.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bzip2.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="xz.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="zstd.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="file.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="readline.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="m4.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bc.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="flex.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="binutils.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gmp.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mpfr.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="mpc.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="attr.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="acl.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libcap.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="shadow.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gcc.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pkgconfig.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ncurses.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sed.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="psmisc.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="iana-etc.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gettext.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bison.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grep.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bash.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libtool.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gdbm.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gperf.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="expat.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="inetutils.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="perl.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="xml-parser.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="intltool.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="autoconf.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="automake.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kmod.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libelf.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libffi.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="openssl.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="python.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ninja.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="meson.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="coreutils.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="check.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="diffutils.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gawk.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="findutils.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="groff.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grub.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="less.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="gzip.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="iproute2.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kbd.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="libpipeline.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="make.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="patch.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="man-db.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="tar.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="texinfo.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="vim.xml"/> + + <!-- systemd only --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="systemd.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbus.xml"/> + + <!-- sysv only --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="eudev.xml"/> + + <!-- Both sysv on systemd builds --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="procps.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="util-linux.xml"/> + + <!-- Both sysv and systemd builds --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="e2fsprogs.xml"/> + + <!-- sysv only --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sysklogd.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="sysvinit.xml"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="aboutdebug.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="strippingagain.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="revisedchroot.xml"/> </chapter> diff --git a/chapter06/check.xml b/chapter08/check.xml index bd4306b28..bd4306b28 100644 --- a/chapter06/check.xml +++ b/chapter08/check.xml diff --git a/chapter08/coreutils.xml b/chapter08/coreutils.xml new file mode 100644 index 000000000..5a4079d78 --- /dev/null +++ b/chapter08/coreutils.xml @@ -0,0 +1,1287 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-coreutils" role="wrap"> + <?dbhtml filename="coreutils.html"?> + + <sect1info condition="script"> + <productname>coreutils</productname> + <productnumber>&coreutils-version;</productnumber> + <address>&coreutils-url;</address> + </sect1info> + + <title>Coreutils-&coreutils-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&coreutils-ch6-sbu;</seg> + <seg>&coreutils-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Coreutils</title> + + <para>POSIX requires that programs from Coreutils recognize character + boundaries correctly even in multibyte locales. The following patch fixes + this non-compliance and other internationalization-related bugs.</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&coreutils-i18n-patch;</userinput></screen> + + <note> + <para>In the past, many bugs were found in this patch. When reporting new + bugs to Coreutils maintainers, please check first if they are reproducible + without this patch.</para> + </note> + + <!-- this has been fixed in upstream gnulib, when a new version of + coreutils is released, please check #4055 to see if the change has been + picked up in this package --> + <para>Suppress a test which on some machines can loop forever:</para> + +<screen><userinput remap="pre">sed -i '/test.lock/s/^/#/' gnulib-tests/gnulib.mk</userinput></screen> + + <para>Now prepare Coreutils for compilation:</para> + +<screen><userinput remap="configure">autoreconf -fiv +FORCE_UNSAFE_CONFIGURE=1 ./configure \ + --prefix=/usr \ + --enable-no-install-program=kill,uptime</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><command>autoreconf</command></term> + <listitem> + <para>This command updates generated configuration files + consistent with the latest version of automake. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><envar>FORCE_UNSAFE_CONFIGURE=1</envar></term> + <listitem> + <para>This environment variable allows the package to be + built as the root user. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-no-install-program=kill,uptime</parameter></term> + <listitem> + <para>The purpose of this switch is to prevent Coreutils from + installing binaries that will be installed by other packages later. + </para> + </listitem> + </varlistentry> + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Skip down to <quote>Install the + package</quote> if not running the test suite.</para> + + <para>Now the test suite is ready to be run. First, run the tests that are + meant to be run as user <systemitem class="username">root</systemitem>:</para> + +<screen><userinput remap="test">make NON_ROOT_USERNAME=tester check-root</userinput></screen> + + <para>We're going to run the remainder of the tests as the + <systemitem class="username">tester</systemitem> user. Certain tests, + however, require that the user be a member of more than one group. So that + these tests are not skipped we'll add a temporary group and make the + user <systemitem class="username">tester</systemitem> a part of it:</para> + +<screen><userinput remap="test">echo "dummy:x:102:tester" >> /etc/group</userinput></screen> + + <para>Fix some of the permissions so that the non-root user can compile and + run the tests:</para> + +<screen><userinput remap="test">chown -Rv tester . </userinput></screen> + + <para>Now run the tests:</para> + +<screen><userinput remap="test">su tester -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"</userinput></screen> +<!-- + <para>The test program test-getlogin is known to fail in a + partially built system environment like the chroot environment here, but + passes if run at the end of this chapter. The test program tty.sh is + also known to fail.</para> +--> + + <para>Remove the temporary group:</para> + +<screen><userinput remap="test">sed -i '/dummy/d' /etc/group</userinput></screen> + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Move programs to the locations specified by the FHS:</para> + +<screen><userinput remap="install">mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin +mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin +mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin +mv -v /usr/bin/chroot /usr/sbin +mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8 +sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8</userinput></screen> + + <para revision="sysv">Some of the scripts in the LFS-Bootscripts package + depend on <command>head</command>, <command>nice</command>, + <command>sleep</command>, and <command>touch</command>. As <filename + class="directory">/usr</filename> may not be available during the early and + late stages of booting, those binaries need to be on the root partition to + maintain FHS compliance:</para> + +<screen><userinput remap="install">mv -v /usr/bin/{head,nice,sleep,touch} /bin</userinput></screen> + + </sect2> + + <sect2 id="contents-coreutils" role="content"> + <title>Contents of Coreutils</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>[, b2sum, base32, base64, basename, basenc, cat, chcon, 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, id, install, join, link, ln, logname, ls, md5sum, mkdir, + mkfifo, mknod, mktemp, mv, nice, nl, nohup, nproc, numfmt, od, paste, + pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, realpath, rm, + rmdir, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, + sha512sum, shred, shuf, sleep, sort, split, stat, stdbuf, stty, sum, + sync, tac, tail, tee, test, timeout, touch, tr, true, truncate, tsort, + tty, uname, unexpand, uniq, unlink, users, vdir, wc, who, whoami, and + yes</seg> + <seg>libstdbuf.so (in /usr/libexec/coreutils)</seg> + <seg>/usr/libexec/coreutils</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="base32"> + <term><command>base32</command></term> + <listitem> + <para>Encodes and decodes data according to the base32 specification + (RFC 4648)</para> + <indexterm zone="ch-system-coreutils base64"> + <primary sortas="b-base64">base64</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="base64"> + <term><command>base64</command></term> + <listitem> + <para>Encodes and decodes data according to the base64 specification + (RFC 4648)</para> + <indexterm zone="ch-system-coreutils base64"> + <primary sortas="b-base64">base64</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="b2sum"> + <term><command>b2sum</command></term> + <listitem> + <para>Prints or checks BLAKE2 (512-bit) checksums</para> + <indexterm zone="ch-system-coreutils b2sum"> + <primary sortas="b-b2sum">b2sum</primary> + </indexterm> + </listitem> + </varlistentry> + + <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="basenc"> + <term><command>basenc</command></term> + <listitem> + <para>Encodes or decodes data using various algorithms</para> + <indexterm zone="ch-system-coreutils basenc"> + <primary sortas="b-basenc">basenc</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="chcon"> + <term><command>chcon</command></term> + <listitem> + <para>Changes security context for files and directories</para> + <indexterm zone="ch-system-coreutils chcon"> + <primary sortas="b-chcon">chcon</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="chgrp"> + <term><command>chgrp</command></term> + <listitem> + <para>Changes the group ownership of files and directories</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 files and + directories</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"> + <term><command>groups</command></term> + <listitem> + <para>Reports a user's group memberships</para> + <indexterm zone="ch-system-coreutils groups"> + <primary sortas="b-groups">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="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 "named + pipe" 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="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-coreutils mktemp"> + <primary sortas="b-mktemp">mktemp</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="nproc"> + <term><command>nproc</command></term> + <listitem> + <para>Prints the number of processing units available to a + process</para> + <indexterm zone="ch-system-coreutils nproc"> + <primary sortas="b-nproc">nproc</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="numfmt"> + <term><command>numfmt</command></term> + <listitem> + <para>Converts numbers to or from human-readable strings</para> + <indexterm zone="ch-system-coreutils numfmt"> + <primary sortas="b-numfmt">numfmt</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="realpath"> + <term><command>realpath</command></term> + <listitem> + <para>Prints the resolved path</para> + <indexterm zone="ch-system-coreutils realpath"> + <primary sortas="b-realpath">realpath</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="runcon"> + <term><command>runcon</command></term> + <listitem> + <para>Runs a command with specified security context</para> + <indexterm zone="ch-system-coreutils runcon"> + <primary sortas="b-runcon">runcon</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="sha224sum"> + <term><command>sha224sum</command></term> + <listitem> + <para>Prints or checks 224-bit Secure Hash Algorithm checksums</para> + <indexterm zone="ch-system-coreutils sha224sum"> + <primary sortas="b-sha224sum">sha224sum</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="sha256sum"> + <term><command>sha256sum</command></term> + <listitem> + <para>Prints or checks 256-bit Secure Hash Algorithm checksums</para> + <indexterm zone="ch-system-coreutils sha256sum"> + <primary sortas="b-sha256sum">sha256sum</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="sha384sum"> + <term><command>sha384sum</command></term> + <listitem> + <para>Prints or checks 384-bit Secure Hash Algorithm checksums</para> + <indexterm zone="ch-system-coreutils sha384sum"> + <primary sortas="b-sha384sum">sha384sum</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="sha512sum"> + <term><command>sha512sum</command></term> + <listitem> + <para>Prints or checks 512-bit Secure Hash Algorithm checksums</para> + <indexterm zone="ch-system-coreutils sha512sum"> + <primary sortas="b-sha512sum">sha512sum</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="shuf"> + <term><command>shuf</command></term> + <listitem> + <para>Shuffles lines of text</para> + <indexterm zone="ch-system-coreutils shuf"> + <primary sortas="b-shuf">shuf</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="stdbuf"> + <term><command>stdbuf</command></term> + <listitem> + <para>Runs commands with altered buffering operations for its standard + streams</para> + <indexterm zone="ch-system-coreutils stdbuf"> + <primary sortas="b-stdbuf">stdbuf</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="timeout"> + <term><command>timeout</command></term> + <listitem> + <para>Runs a command with a time limit</para> + <indexterm zone="ch-system-coreutils timeout"> + <primary sortas="b-timeout">timeout</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="truncate"> + <term><command>truncate</command></term> + <listitem> + <para>Shrinks or expands a file to the specified size</para> + <indexterm zone="ch-system-coreutils truncate"> + <primary sortas="b-truncate">truncate</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 uniq"> + <primary sortas="b-uniq">uniq</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> + + <varlistentry id="libstdbuf"> + <term><filename class="libraryfile">libstdbuf</filename></term> + <listitem> + <para>Library used by <command>stdbuf</command></para> + <indexterm zone="ch-system-coreutils libstdbuf"> + <primary sortas="c-libstdbuf">libstdbuf</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/dbus.xml b/chapter08/dbus.xml index bb4bffc76..bb4bffc76 100644 --- a/chapter06/dbus.xml +++ b/chapter08/dbus.xml diff --git a/chapter08/diffutils.xml b/chapter08/diffutils.xml new file mode 100644 index 000000000..0d8bd5c77 --- /dev/null +++ b/chapter08/diffutils.xml @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-diffutils" role="wrap"> + <?dbhtml filename="diffutils.html"?> + + <sect1info condition="script"> + <productname>diffutils</productname> + <productnumber>&diffutils-version;</productnumber> + <address>&diffutils-url;</address> + </sect1info> + + <title>Diffutils-&diffutils-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&diffutils-ch6-sbu;</seg> + <seg>&diffutils-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Diffutils</title> + + <para>Prepare Diffutils for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + + <sect2 id="contents-diffutils" role="content"> + <title>Contents of Diffutils</title> + + <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"?> + <?dbhtml list-presentation="table"?> + + <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/chapter08/e2fsprogs.xml index 984ba6db9..984ba6db9 100644 --- a/chapter06/e2fsprogs.xml +++ b/chapter08/e2fsprogs.xml diff --git a/chapter06/eudev.xml b/chapter08/eudev.xml index 71511c3e7..71511c3e7 100644 --- a/chapter06/eudev.xml +++ b/chapter08/eudev.xml diff --git a/chapter06/expat.xml b/chapter08/expat.xml index df9f709c9..df9f709c9 100644 --- a/chapter06/expat.xml +++ b/chapter08/expat.xml diff --git a/chapter08/file.xml b/chapter08/file.xml new file mode 100644 index 000000000..b5e28f244 --- /dev/null +++ b/chapter08/file.xml @@ -0,0 +1,108 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-file" role="wrap"> + <?dbhtml filename="file.html"?> + + <sect1info condition="script"> + <productname>file</productname> + <productnumber>&file-version;</productnumber> + <address>&file-url;</address> + </sect1info> + + <title>File-&file-version;</title> + + <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 a given + file or files.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&file-ch6-sbu;</seg> + <seg>&file-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of File</title> + + <para>Prepare File for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + + <sect2 id="contents-file" role="content"> + <title>Contents of File</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>file</seg> + <seg>libmagic.so</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="file"> + <term><command>file</command></term> + <listitem> + <para>Tries to classify each given file; it does this by performing + several tests—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/chapter08/findutils.xml b/chapter08/findutils.xml new file mode 100644 index 000000000..37393f0de --- /dev/null +++ b/chapter08/findutils.xml @@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-findutils" role="wrap"> + <?dbhtml filename="findutils.html"?> + + <sect1info condition="script"> + <productname>findutils</productname> + <productnumber>&findutils-version;</productnumber> + <address>&findutils-url;</address> + </sect1info> + + <title>Findutils-&findutils-version;</title> + + <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. These programs + 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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&findutils-ch6-sbu;</seg> + <seg>&findutils-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Findutils</title> + + <para>Prepare Findutils for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --localstatedir=/var/lib/locate</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--localstatedir</parameter></term> + <listitem> + <para>This option changes the location of the <command>locate</command> + database to be in <filename class="directory">/var/lib/locate</filename>, + which is FHS-compliant.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">chown -Rv tester . +su tester -c "PATH=$PATH make check"</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para revision="sysv">Some of the scripts in the LFS-Bootscripts package + depend on <command>find</command>. As <filename + class="directory">/usr</filename> may not be available during the early + stages of booting, this program needs to be on the root partition. The + <command>updatedb</command> script also needs to be modified to correct an + explicit path:</para> + + <para revision="systemd"> Some packages in BLFS and beyond expect the + <command>find</command> program in <filename + class="directory">/bin</filename>, so make sure it's placed there:</para> + +<screen><userinput remap="install">mv -v /usr/bin/find /bin +sed -i 's|find:=${BINDIR}|find:=/bin|' /usr/bin/updatedb</userinput></screen> + + </sect2> + + <sect2 id="contents-findutils" role="content"> + <title>Contents of Findutils</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>find, locate, updatedb, and xargs</seg> + <seg>/var/lib/locate</seg> + </seglistitem> + + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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="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/chapter08/flex.xml b/chapter08/flex.xml new file mode 100644 index 000000000..bd4bd545f --- /dev/null +++ b/chapter08/flex.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-flex" role="wrap"> + <?dbhtml filename="flex.html"?> + + <sect1info condition="script"> + <productname>flex</productname> + <productnumber>&flex-version;</productnumber> + <address>&flex-url;</address> + </sect1info> + + <title>Flex-&flex-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&flex-ch6-sbu;</seg> + <seg>&flex-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Flex</title> + +<!-- + <para>First, fix a problem introduced with glibc-2.26:</para> + +<screen><userinput remap="pre">sed -i "/math.h/a #include <malloc.h>" src/flexdef.h</userinput></screen> + + <para>The build procedure assumes the <application>help2man</application> + program is available to create a man page from the executable - -help option. + This is not present, so we use an environment variable to skip this process. + Now, prepare Flex for compilation:</para> --> + + <para>Prepare Flex for compilation:</para> + +<!-- <screen><userinput remap="configure">HELP2MAN=/tools/bin/true \ --> +<screen><userinput remap="configure">./configure --prefix=/usr --docdir=/usr/share/doc/flex-&flex-version;</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results (about 0.5 SBU), issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <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 symbolic link named <filename>lex</filename> that + runs <filename>flex</filename> in <command>lex</command> emulation + mode:</para> + +<screen><userinput remap="install">ln -sv flex /usr/bin/lex</userinput></screen> + + </sect2> + + <sect2 id="contents-flex" role="content"> + <title>Contents of Flex</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>flex, flex++ (link to flex), and lex (link to flex)</seg> + <seg>libfl.so</seg> + <seg>/usr/share/doc/flex-&flex-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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="flexpp"> + <term><command>flex++</command></term> + <listitem> + <para>An extension of flex, is used for generating C++ code + and classes. It is a symbolic link to <command>flex</command></para> + <indexterm zone="ch-system-flex flexpp"> + <primary sortas="b-flex++">flex++</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lex"> + <term><command>lex</command></term> + <listitem> + <para>A symbolic link 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"> + <term><filename class="libraryfile">libfl</filename></term> + <listitem> + <para>The <filename class="libraryfile">flex</filename> library</para> + <indexterm zone="ch-system-flex libfl"> + <primary sortas="c-libfl">libfl</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/gawk.xml b/chapter08/gawk.xml new file mode 100644 index 000000000..b112eb10d --- /dev/null +++ b/chapter08/gawk.xml @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-gawk" role="wrap"> + <?dbhtml filename="gawk.html"?> + + <sect1info condition="script"> + <productname>gawk</productname> + <productnumber>&gawk-version;</productnumber> + <address>&gawk-url;</address> + </sect1info> + + <title>Gawk-&gawk-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gawk-ch6-sbu;</seg> + <seg>&gawk-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Gawk</title> + + <para>First, ensure some unneeded files are not installed:</para> + +<screen><userinput remap="pre">sed -i 's/extras//' Makefile.in</userinput></screen> + + <para>Prepare Gawk for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>If desired, install the documentation:</para> + +<screen><userinput remap="install">mkdir -v /usr/share/doc/gawk-&gawk-version; +cp -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-&gawk-version;</userinput></screen> + + </sect2> + + <sect2 id="contents-gawk" role="content"> + <title>Contents of Gawk</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>awk (link to gawk), gawk, and awk-&gawk-version;</seg> + <seg>filefuncs.so, fnmatch.so, fork.so, inplace.so, intdiv.so, ordchr.so, + readdir.so, readfile.so, revoutput.so, revtwoway.so, rwarray.so, + and time.so (all in /usr/lib/gawk)</seg> + <seg>/usr/lib/gawk, /usr/libexec/awk, /usr/share/awk, and + /usr/share/doc/gawk-&gawk-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/gcc.xml b/chapter08/gcc.xml index 9e4c53ec5..9e4c53ec5 100644 --- a/chapter06/gcc.xml +++ b/chapter08/gcc.xml diff --git a/chapter06/gdbm.xml b/chapter08/gdbm.xml index f953b63f9..f953b63f9 100644 --- a/chapter06/gdbm.xml +++ b/chapter08/gdbm.xml diff --git a/chapter08/gettext.xml b/chapter08/gettext.xml new file mode 100644 index 000000000..2c4683804 --- /dev/null +++ b/chapter08/gettext.xml @@ -0,0 +1,445 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-gettext" role="wrap"> + <?dbhtml filename="gettext.html"?> + + <sect1info condition="script"> + <productname>gettext</productname> + <productnumber>&gettext-version;</productnumber> + <address>&gettext-url;</address> + </sect1info> + + <title>Gettext-&gettext-version;</title> + + <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 (Native Language + Support), enabling them to output messages in the user's native + language.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gettext-ch6-sbu;</seg> + <seg>&gettext-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Gettext</title> + + <!-- This has been fixed in upstream gnulib, when a new version of + gettext is released, please check #4055 to see if the change has been + picked up in this package + + As of April 11, 2018, 'TESTS = test-lock' is in gettext-runtime/tests/Makefile.am + Perhaps the test is fixed. + + There is no reference to 'test' or TEST in gettext-tools/gnulib-tests/Makefile.am + --> + <!-- + <para>First, suppress two invocations of test-lock which on some machines + can loop forever:</para> + +<screen><userinput remap="pre">sed -i '/^TESTS =/d' gettext-runtime/tests/Makefile.in && +sed -i 's/test-lock..EXEEXT.//' gettext-tools/gnulib-tests/Makefile.in</userinput></screen>--> + + <!-- As of April 11, 2018 appdata.* is NOT in git master, but appears + to be in metainfo.{its,loc}, When updating, check BLFS gnome-screenshot. --> + +<!-- + <para>Now fix a configuration file:</para> + +<screen><userinput remap="pre">sed -e '/AppData/{N;N;p;s/\.appdata\./.metainfo./}' \ + -i gettext-tools/its/appdata.loc</userinput></screen> +--> + <para>Prepare Gettext for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/gettext-&gettext-version;</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make BISON_LOCALEDIR=/usr/share/locale</userinput></screen> + + <variablelist> + <title>The meaning of the make parameter:</title> + + <varlistentry> + <term><parameter>BISON_LOCALEDIR=/usr/share/locale</parameter></term> + <listitem> + <para>Since bison is not yet installed in /usr, configure hardcodes + the directory containing translations for the bison program (the + "locale" directory) as /tools/share/locale. Passing this variable + to make allows overriding the choice made by configure.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>To test the results (this takes a long time, around 3 SBUs), + issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install +chmod -v 0755 /usr/lib/preloadable_libintl.so</userinput></screen> + + </sect2> + + <sect2 id="contents-gettext" role="content"> + <title>Contents of Gettext</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>autopoint, envsubst, gettext, gettext.sh, + gettextize, msgattrib, msgcat, msgcmp, msgcomm, msgconv, msgen, + msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt, msguniq, + ngettext, recode-sr-latin, and xgettext</seg> + <seg>libasprintf.so, libgettextlib.so, libgettextpo.so, + libgettextsrc.so, libtextstyle.so, and preloadable_libintl.so</seg> + <seg>/usr/lib/gettext, /usr/share/doc/gettext-&gettext-version;, + /usr/share/gettext, and /usr/share/gettext-0.19.8</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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="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="gettext.sh"> + <term><command>gettext.sh</command></term> + <listitem> + <para>Primarily serves as a shell function library for gettext</para> + <indexterm zone="ch-system-gettext gettext.sh"> + <primary sortas="b-gettext.sh">gettext.sh</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="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 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 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="recode-sr-latin"> + <term><command>recode-sr-latin</command></term> + <listitem> + <para>Recodes Serbian text from Cyrillic to Latin script</para> + <indexterm zone="ch-system-gettext recode-sr-latin"> + <primary sortas="b-recode-sr-latin">recode-sr-latin</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><string></emphasis> strings and the + <emphasis><iostream></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> + + <varlistentry id="libtextstyle"> + <term><filename class="libraryfile">libtextstyle</filename></term> + <listitem> + <para>Text styling library</para> + <indexterm zone="ch-system-gettext libtextstyle"> + <primary sortas="c-libtextstyle">libtextstyle</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="preloadable_libintl"> + <term><filename class="libraryfile">preloadable_libintl</filename></term> + <listitem> + <para>A library, intended to be used by LD_PRELOAD that assists + <filename class="libraryfile">libintl</filename> in logging + untranslated messages</para> + <indexterm zone="ch-system-gettext preloadable_libintl"> + <primary sortas="c-preloadable_libintl">preloadable_libintl</primary> + </indexterm> + </listitem> + </varlistentry> + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/glibc.xml b/chapter08/glibc.xml new file mode 100644 index 000000000..a422c8d3c --- /dev/null +++ b/chapter08/glibc.xml @@ -0,0 +1,970 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-glibc" role="wrap"> + <?dbhtml filename="glibc.html"?> + + <sect1info condition="script"> + <productname>glibc</productname> + <productnumber>&glibc-version;</productnumber> + <address>&glibc-url;</address> + </sect1info> + + <title>Glibc-&glibc-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&glibc-ch6-sbu;</seg> + <seg>&glibc-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Glibc</title> + + <para>Some of the Glibc programs use the non-FHS compliant + <filename class="directory">/var/db</filename> directory to store + their runtime data. Apply the following patch to make such programs + store their runtime data in the FHS-compliant locations:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&glibc-fhs-patch;</userinput></screen> +<!-- + <para>Fix a minor security issue with glob functions:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&glibc-glob-patch;</userinput></screen> +--> +<!-- No longer needed + <para>Fix a problem introduced with the linux-5.2 kernel:</para> + +<screen><userinput remap="pre">sed -i '/asm.socket.h/a# include <linux/sockios.h>' \ + sysdeps/unix/sysv/linux/bits/socket.h</userinput></screen> +=== already done === + <para>Create a symlink for LSB + compliance. Additionally, for x86_64, create a compatibility symlink + required for the dynamic loader to function correctly:</para> + +<screen><userinput remap="pre">case $(uname -m) in + i?86) ln -sfv ld-linux.so.2 /lib/ld-lsb.so.3 + ;; + x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64 + ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3 + ;; +esac</userinput></screen> + + <para>Remove a file that may be left over from a previous build attempt: + </para> + +<screen><userinput remap="pre">rm -f /usr/include/limits.h</userinput></screen> +--> + <para>The Glibc documentation recommends building Glibc + in a dedicated build directory:</para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare Glibc for compilation:</para> + +<screen><userinput remap="configure">../configure --prefix=/usr \ + --disable-werror \ + --enable-kernel=&min-kernel; \ + --enable-stack-protector=strong \ + --with-headers=/usr/include \ + libc_cv_slibdir=/lib</userinput></screen> + <!-- WIP --> + <variablelist> + <title>The meaning of the options and new configure parameters:</title> + + <varlistentry> + <term><parameter>CC="gcc -ffile-prefix-map=$LFS_DIR=$DIR"</parameter></term> + <listitem> + <para>Make GCC record any references to files in <filename + class="directory">/usr/lib/gcc/x86_64-lfs-linux-gnu</filename> + in result of the compilation as if the files resided in <filename + class="directory">/usr/lib/gcc/x86_64-pc-linux-gnu</filename>. + This avoids introduction of invalid paths in debugging + symbols.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-werror</parameter></term> + <listitem> + <para>This option disables the -Werror option passed to + GCC. This is necessary for running the test suite.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-stack-protector=strong</parameter></term> + <listitem> + <para>This option increases system security by adding + extra code to check for buffer overflows, such as stack + smashing attacks.</para> + </listitem> + </varlistentry> +<!-- do we need this one? --> + <varlistentry> + <term><parameter>--with-headers=/usr/include</parameter></term> + <listitem> + <para>This option tells the build system where to find the + kernel API headers.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>libc_cv_slibdir=/lib</parameter></term> + <listitem> + <para>This variable sets the correct library for all + systems. We do not want lib64 to be used.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">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>Generally a few tests do not pass. The test failures listed below + are usually safe to ignore.</para> + +<!-- Use remap="make" here to work around a jhalfs issue. --> +<screen><userinput remap="make">case $(uname -m) in + i?86) ln -sfnv $PWD/elf/ld-linux.so.2 /lib ;; + x86_64) ln -sfnv $PWD/elf/ld-linux-x86-64.so.2 /lib ;; +esac</userinput></screen> + + <note><para>The symbolic link above is needed to run the tests at this + stage of building in the chroot environment. It will be overwritten + in the install phase below.</para></note> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>You may see some test failures. The Glibc test suite is + somewhat dependent on the host system. This is a list of the most common + issues seen for some versions of LFS:</para> + + <itemizedlist> + + <listitem> + <para><emphasis>misc/tst-ttyname</emphasis> + is known to fail in the LFS chroot environment.</para> + </listitem> + + <listitem> + <para><emphasis>inet/tst-idna_name_classify</emphasis> + is known to fail in the LFS chroot environment.</para> + </listitem> + + <listitem> + <para><emphasis>posix/tst-getaddrinfo4</emphasis> and + <emphasis>posix/tst-getaddrinfo5</emphasis> + may fail on some architectures.</para> + </listitem> + + <listitem> + <para>The <emphasis>nss/tst-nss-files-hosts-multi</emphasis> + test may fail for reasons that have not been determined.</para> + </listitem> + + <listitem> + <para>The <emphasis>rt/tst-cputimer{1,2,3}</emphasis> tests depend on + the host system kernel. Kernels 4.14.91–4.14.96, + 4.19.13–4.19.18, and 4.20.0–4.20.5 are known to + cause these tests to fail. + </para> + </listitem> + + <listitem> + <para>The math tests sometimes fail when running on + systems where the CPU is not a relatively new Intel or + AMD processor.</para> + </listitem> +<!-- + <listitem> + <para>The + <emphasis>nptl/tst-thread-affinity-{pthread,pthread2,sched}</emphasis> + tests may fail for reasons that have not been determined. </para> + </listitem> + + <listitem> + <para>Other tests known to fail on some architectures are + malloc/tst-malloc-usable and nptl/tst-cleanupx4. </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 remap="install">touch /etc/ld.so.conf</userinput></screen> + + <para>Fix the generated Makefile to skip an unneeded sanity check + that fails in the LFS partial environment: + </para> + +<screen><userinput remap="install">sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Install the configuration file and runtime directory for + <command>nscd</command>:</para> + +<screen><userinput remap="install">cp -v ../nscd/nscd.conf /etc/nscd.conf +mkdir -pv /var/cache/nscd</userinput></screen> + + <para revision="systemd">Install the systemd support files for + <command>nscd</command>:</para> + + <screen revision="systemd"><userinput remap="install">install -v -Dm644 ../nscd/nscd.tmpfiles /usr/lib/tmpfiles.d/nscd.conf +install -v -Dm644 ../nscd/nscd.service /lib/systemd/system/nscd.service</userinput></screen> + + <para>Next, install the locales that can make the system respond in a + different language. None of the locales are required, but if some of them + are missing, the test suites of future packages would skip important + testcases.</para> + + <para>Individual locales can be installed using the + <command>localedef</command> program. E.g., the first + <command>localedef</command> command below combines the + <filename>/usr/share/i18n/locales/cs_CZ</filename> + charset-independent locale definition with the + <filename>/usr/share/i18n/charmaps/UTF-8.gz</filename> + charmap definition and appends the result to the + <filename>/usr/lib/locale/locale-archive</filename> file. + The following instructions will install the minimum set of + locales necessary for the optimal coverage of tests:</para> + +<screen role="nodump"><userinput remap="locale-test">mkdir -pv /usr/lib/locale +localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true +localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8 +localedef -i de_DE -f ISO-8859-1 de_DE +localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro +localedef -i de_DE -f UTF-8 de_DE.UTF-8 +localedef -i el_GR -f ISO-8859-7 el_GR +localedef -i en_GB -f UTF-8 en_GB.UTF-8 +localedef -i en_HK -f ISO-8859-1 en_HK +localedef -i en_PH -f ISO-8859-1 en_PH +localedef -i en_US -f ISO-8859-1 en_US +localedef -i en_US -f UTF-8 en_US.UTF-8 +localedef -i es_MX -f ISO-8859-1 es_MX +localedef -i fa_IR -f UTF-8 fa_IR +localedef -i fr_FR -f ISO-8859-1 fr_FR +localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro +localedef -i fr_FR -f UTF-8 fr_FR.UTF-8 +localedef -i it_IT -f ISO-8859-1 it_IT +localedef -i it_IT -f UTF-8 it_IT.UTF-8 +localedef -i ja_JP -f EUC-JP ja_JP +localedef -i ja_JP -f SHIFT_JIS ja_JP.SIJS 2> /dev/null || true +localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 +localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R +localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 +localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 +localedef -i zh_CN -f GB18030 zh_CN.GB18030 +localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS</userinput></screen> + + <para>In addition, install the locale for your own country, language and + character set.</para> + + <para>Alternatively, install all locales listed in the + <filename>glibc-&glibc-version;/localedata/SUPPORTED</filename> file + (it includes every locale listed above and many more) at once with the + following time-consuming command:</para> + +<screen><userinput remap="locale-full">make localedata/install-locales</userinput></screen> + + <para>Then use the <command>localedef</command> command to create and + install locales not listed in the + <filename>glibc-&glibc-version;/localedata/SUPPORTED</filename> file + in the unlikely case you need them.</para> + + <note><para>Glibc now uses libidn2 when resolving internationalized + domain names. This is a run time dependency. If this capability + is needed, the instructions for installing libidn2 are in the + <ulink url="&blfs-book;general/libidn2.html">BLFS libidn2 page</ulink>. + </para></note> + + </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> + + <sect3> + <title>Adding nsswitch.conf</title> + + <para>The <filename>/etc/nsswitch.conf</filename> file needs to be created + because the Glibc defaults do not work well in a networked environment. + </para> + + <para>Create a new file <filename>/etc/nsswitch.conf</filename> by running the + following:</para> + +<screen><userinput>cat > /etc/nsswitch.conf << "EOF" +<literal># Begin /etc/nsswitch.conf + +passwd: files +group: files +shadow: files + +hosts: files dns +networks: files + +protocols: files +services: files +ethers: files +rpc: files + +# End /etc/nsswitch.conf</literal> +EOF</userinput></screen> + + </sect3> + + <sect3> + <title>Adding time zone data</title> + + <para>Install and set up the time zone data with the following:</para> +<screen><userinput>tar -xf ../../tzdata&tzdata-version;.tar.gz + +ZONEINFO=/usr/share/zoneinfo +mkdir -pv $ZONEINFO/{posix,right} + +for tz in etcetera southamerica northamerica europe africa antarctica \ + asia australasia backward pacificnew systemv; do + zic -L /dev/null -d $ZONEINFO ${tz} + zic -L /dev/null -d $ZONEINFO/posix ${tz} + zic -L leapseconds -d $ZONEINFO/right ${tz} +done + +cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO +zic -d $ZONEINFO -p America/New_York +unset ZONEINFO</userinput></screen> + + <variablelist> + <title>The meaning of the zic commands:</title> + + <varlistentry> + <term><parameter>zic -L /dev/null ...</parameter></term> + <listitem> + <para>This creates posix time zones, without any leap seconds. It is + conventional to put these in both + <filename class="directory">zoneinfo</filename> and + <filename class="directory">zoneinfo/posix</filename>. It is + necessary to put the POSIX time zones in + <filename class="directory">zoneinfo</filename>, otherwise various + test-suites will report errors. On an embedded system, where space is + tight and you do not intend to ever update the time zones, you could save + 1.9MB by not using the <filename class="directory">posix</filename> + directory, but some applications or test-suites might produce some + failures.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><parameter>zic -L leapseconds ...</parameter></term> + <listitem> + <para>This creates right time zones, including leap seconds. On an + embedded system, where space is tight and you do not intend to + ever update the time zones, or care about the correct time, you could + save 1.9MB by omitting the <filename class="directory">right</filename> + directory.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><parameter>zic ... -p ...</parameter></term> + <listitem> + <para>This creates the <filename>posixrules</filename> file. We use + New York because POSIX requires the daylight savings time rules + to be in accordance with US rules.</para> + </listitem> + </varlistentry> + </variablelist> + + + <para>One way to determine the local time zone is to run the following + script:</para> + +<screen role="nodump"><userinput>tzselect</userinput></screen> + + <para>After answering a few questions about the location, the script will + output the name of the time zone (e.g., + <emphasis>America/Edmonton</emphasis>). There are also some other possible + time zones listed in <filename + class='directory'>/usr/share/zoneinfo</filename> such as + <emphasis>Canada/Eastern</emphasis> or <emphasis>EST5EDT</emphasis> that + are not identified by the script but can be used.</para> + + <para>Then create the <filename>/etc/localtime</filename> file by + running:</para> + +<screen><userinput>ln -sfv /usr/share/zoneinfo/<replaceable><xxx></replaceable> /etc/localtime</userinput></screen> + + <para>Replace <replaceable><xxx></replaceable> with the name of the + time zone selected (e.g., Canada/Eastern).</para> + + </sect3> + + <sect3 id="conf-ld" role="configuration"> + <title>Configuring the 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> + +<screen><userinput>cat > /etc/ld.so.conf << "EOF" +<literal># Begin /etc/ld.so.conf +/usr/local/lib +/opt/lib +</literal> +EOF</userinput></screen> + + <para>If desired, the dynamic loader can also search a directory and + include the contents of files found there. Generally the files in + this include directory are one line specifying the desired library path. + To add this capability run the following commands:</para> + +<screen role="nodump"><userinput>cat >> /etc/ld.so.conf << "EOF" +<literal># Add an include directory +include /etc/ld.so.conf.d/*.conf +</literal> +EOF +mkdir -pv /etc/ld.so.conf.d</userinput></screen> + + </sect3> + </sect2> + + <sect2 id="contents-glibc" role="content"> + <title>Contents of Glibc</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, + ldd, lddlibc4, locale, localedef, makedb, mtrace, nscd, + pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace, + zdump, and zic</seg> + <seg>ld-&glibc-version;.so, libBrokenLocale.{a,so}, libSegFault.so, libanl.{a,so}, + libc.{a,so}, libc_nonshared.a, + libcrypt.{a,so}, libdl.{a,so}, libg.a, libm.{a,so}, + libmcheck.a, libmemusage.so, libmvec.{a,so}, libnsl.{a,so}, + libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, + libpcprofile.so, libpthread.{a,so}, + libpthread_nonshared.a, libresolv.{a,so}, librt.{a,so}, + libthread_db.so, and libutil.{a,so}</seg> + <seg>/usr/include/arpa, /usr/include/bits, /usr/include/gnu, + /usr/include/net, /usr/include/netash, /usr/include/netatalk, + /usr/include/netax25, /usr/include/neteconet, /usr/include/netinet, + /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, + /usr/include/netrom, /usr/include/netrose, /usr/include/nfs, + /usr/include/protocols, /usr/include/rpc, + /usr/include/sys, /usr/lib/audit, /usr/lib/gconv, /usr/lib/locale, + /usr/libexec/getconf, /usr/share/i18n, /usr/share/zoneinfo, + /var/cache/nscd, and /var/lib/nss_db</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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>Prints various information about the current locale</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="makedb"> + <term><command>makedb</command></term> + <listitem> + <para>Creates a simple database from textual input</para> + <indexterm zone="ch-system-glibc makedb"> + <primary sortas="b-makedb">makedb</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mtrace"> + <term><command>mtrace</command></term> + <listitem> + <para>Reads and interprets a memory trace file and displays 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="pcprofiledump"> + <term><command>pcprofiledump</command></term> + <listitem> + <para>Dump information generated by PC profiling</para> + <indexterm zone="ch-system-glibc pcprofiledump"> + <primary sortas="b-pcprofiledump">pcprofiledump</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pldd"> + <term><command>pldd</command></term> + <listitem> + <para>Lists dynamic shared objects used by running processes</para> + <indexterm zone="ch-system-glibc pldd"> + <primary sortas="b-pldd">pldd</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="sotruss"> + <term><command>sotruss</command></term> + <listitem> + <para>Traces shared library procedure calls of a specified command</para> + <indexterm zone="ch-system-glibc sotruss"> + <primary sortas="b-sotruss">sotruss</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-&glibc-version;.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-&glibc-version;.so</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libBrokenLocale"> + <term><filename class="libraryfile">libBrokenLocale</filename></term> + <listitem> + <para>Used internally by Glibc as a gross hack to get broken programs + (e.g., some Motif applications) running. See comments in + <filename>glibc-&glibc-version;/locale/broken_cur_max.c</filename> + for more information</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, used by + <command>catchsegv</command></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="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>Dummy library containing no functions. Previously was 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="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>Turns on memory allocation checking when linked to</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>Can be preloaded to PC profile an executable</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="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/gmp.xml b/chapter08/gmp.xml index 4bc361a56..4bc361a56 100644 --- a/chapter06/gmp.xml +++ b/chapter08/gmp.xml diff --git a/chapter06/gperf.xml b/chapter08/gperf.xml index d8c5b6594..d8c5b6594 100644 --- a/chapter06/gperf.xml +++ b/chapter08/gperf.xml diff --git a/chapter08/grep.xml b/chapter08/grep.xml new file mode 100644 index 000000000..58b0db366 --- /dev/null +++ b/chapter08/grep.xml @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-grep" role="wrap"> + <?dbhtml filename="grep.html"?> + + <sect1info condition="script"> + <productname>grep</productname> + <productnumber>&grep-version;</productnumber> + <address>&grep-url;</address> + </sect1info> + + <title>Grep-&grep-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&grep-ch6-sbu;</seg> + <seg>&grep-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Grep</title> + + <para>Prepare Grep for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --bindir=/bin</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-grep" role="content"> + <title>Contents of Grep</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + + <seglistitem> + <seg>egrep, fgrep, and grep</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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/chapter08/groff.xml index aad0cbf85..aad0cbf85 100644 --- a/chapter06/groff.xml +++ b/chapter08/groff.xml diff --git a/chapter08/grub.xml b/chapter08/grub.xml index d6897d5e5..25a61077b 100644 --- a/chapter08/grub.xml +++ b/chapter08/grub.xml @@ -5,7 +5,7 @@ %general-entities; ]> -<sect1 id="ch-bootable-grub" role="wrap"> +<sect1 id="ch-system-grub" role="wrap"> <?dbhtml filename="grub.html"?> <sect1info condition="script"> @@ -14,178 +14,361 @@ <address>&grub-url;</address> </sect1info> - <title>Using GRUB to Set Up the Boot Process</title> - - <sect2> - <title>Introduction</title> - - <warning><para>Configuring GRUB incorrectly can render your system - inoperable without an alternate boot device such as a CD-ROM. This - section is not required to boot your LFS system. You may just - want to modify your current boot loader, e.g. Grub-Legacy, GRUB2, or - LILO.</para></warning> - - - <para> Ensure that an emergency boot disk is ready to <quote>rescue</quote> - the computer if the computer becomes unusable (un-bootable). If you do not - already have a boot device, you can create one. In order for the procedure - below to work, you need to jump ahead to BLFS and install - <userinput>xorriso</userinput> from the <ulink - url="&blfs-book;multimedia/libisoburn.html"> - libisoburn</ulink> package.</para> - -<screen role="nodump"><userinput>cd /tmp -grub-mkrescue --output=grub-img.iso -xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso</userinput></screen> - - <note> - <para> - To boot LFS on host systems that have UEFI enabled, the kernel needs to - have been built with the CONFIG_EFI_STUB capabality described in the - previous section. However, LFS can be booted using GRUB2 without such - an addition. To do this, the UEFI Mode and Secure Boot capabilities in - the host system's BIOS need to be turned off. For details, see <ulink - url="&hints-root;lfs-uefi.txt"> - the lfs-uefi.txt hint</ulink> at - &hints-root;lfs-uefi.txt. - </para> - </note> + <title>GRUB-&grub-version;</title> - </sect2> + <indexterm zone="ch-system-grub"> + <primary sortas="a-Grub">GRUB</primary> + </indexterm> - <sect2> - <title>GRUB Naming Conventions</title> - - <para>GRUB uses its own naming structure for drives and partitions in - the form of <emphasis>(hdn,m)</emphasis>, where <emphasis>n</emphasis> - is the hard drive number and <emphasis>m</emphasis> is the partition - number. The hard drive number starts from zero, but the partition number - starts from one for normal partitions and five for extended partitions. - Note that this is different from earlier versions where - both numbers started from zero. For example, partition <filename - class="partition">sda1</filename> is <emphasis>(hd0,1)</emphasis> to - GRUB and <filename class="partition">sdb3</filename> is - <emphasis>(hd1,3)</emphasis>. In contrast to Linux, GRUB does not - consider CD-ROM drives to be hard drives. For example, if using a CD - on <filename class="partition">hdb</filename> and a second hard drive - on <filename class="partition">hdc</filename>, that second hard drive - would still be <emphasis>(hd1)</emphasis>.</para> + <sect2 role="package"> + <title/> - </sect2> + <para>The GRUB package contains the GRand Unified Bootloader.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&grub-ch6-sbu;</seg> + <seg>&grub-ch6-du;</seg> + </seglistitem> + </segmentedlist> - <sect2> - <title>Setting Up the Configuration</title> - - <para>GRUB works by writing data to the first physical track of the - hard disk. This area is not part of any file system. The programs - there access GRUB modules in the boot partition. The default location - is /boot/grub/.</para> - - <para>The location of the boot partition is a choice of the user that - affects the configuration. One recommendation is to have a separate small - (suggested size is 100 MB) partition just for boot information. That way - each build, whether LFS or some commercial distro, can access the same boot - files and access can be made from any booted system. If you choose to do - this, you will need to mount the separate partition, move all files in the - current <filename class="directory">/boot</filename> directory (e.g. the - linux kernel you just built in the previous section) to the new partition. - You will then need to unmount the partition and remount it as <filename - class="directory">/boot</filename>. If you do this, be sure to update - <filename>/etc/fstab</filename>.</para> - - <para>Using the current lfs partition will also work, but configuration - for multiple systems is more difficult.</para> - - <para>Using the above information, determine the appropriate - designator for the root partition (or boot partition, if a separate - one is used). For the following example, it is assumed that the root - (or separate boot) partition is <filename - class="partition">sda2</filename>.</para> - - <para>Install the GRUB files into <filename - class="directory">/boot/grub</filename> and set up the boot track:</para> - - <warning> - <para>The following command will overwrite the current boot loader. Do not - run the command if this is not desired, for example, if using a third party - boot manager to manage the Master Boot Record (MBR).</para> - </warning> - -<screen role="nodump"><userinput>grub-install /dev/sda</userinput></screen> - - <note> - <para>If the system has been booted using UEFI, - <command>grub-install</command> will try to install files for the - <emphasis>x86_64-efi</emphasis> target, but those files - have not been installed in chapter 6. If this is the case, add - <option>--target i386-pc</option> to the command above.</para> - </note> - -<!-- This does not seem to be true any more - <note><para><application>grub-install</application> is a script and calls another - program, grub-probe, that may fail with a message "cannot stat `/dev/root'". - If so, create a temporary symbolic link from your root partition to /dev/root:</para> - -<screen role="nodump"><userinput>ln -sv /dev/sda2 /dev/root</userinput></screen> - - <para>The symbolic link will only be present until the system is rebooted. - The link is only needed for the installation procedure. - </para></note> ---> </sect2> - <sect2 id="grub-cfg"> - <title>Creating the GRUB Configuration File</title> + <sect2 role="installation"> + <title>Installation of GRUB</title> + + <para>Prepare GRUB for compilation:</para> - <para>Generate <filename>/boot/grub/grub.cfg</filename>:</para> +<screen><userinput remap="configure">./configure --prefix=/usr \ + --sbindir=/sbin \ + --sysconfdir=/etc \ + --disable-efiemu \ + --disable-werror</userinput></screen> - <screen revision="sysv"><userinput>cat > /boot/grub/grub.cfg << "EOF" -<literal># Begin /boot/grub/grub.cfg -set default=0 -set timeout=5 + <variablelist> + <title>The meaning of the new configure options:</title> -insmod ext2 -set root=(hd0,2) + <varlistentry> + <term><parameter>--disable-werror</parameter></term> + <listitem> + <para>This allows the build to complete with warnings introduced + by more recent Flex versions.</para> + </listitem> + </varlistentry> -menuentry "GNU/Linux, Linux &linux-version;-lfs-&version;" { - linux /boot/vmlinuz-&linux-version;-lfs-&version; root=/dev/sda2 ro -}</literal> -EOF</userinput></screen> + <varlistentry> + <term><parameter>--disable-efiemu</parameter></term> + <listitem> + <para>This option minimizes what is built by disabling a feature and + testing programs not needed for LFS.</para> + </listitem> + </varlistentry> - <screen revision="systemd"><userinput>cat > /boot/grub/grub.cfg << "EOF" -<literal># Begin /boot/grub/grub.cfg -set default=0 -set timeout=5 + </variablelist> -insmod ext2 -set root=(hd0,2) + <para>Compile the package:</para> -menuentry "GNU/Linux, Linux &linux-version;-lfs-&versiond;" { - linux /boot/vmlinuz-&linux-version;-lfs-&versiond; root=/dev/sda2 ro -}</literal> -EOF</userinput></screen> +<screen><userinput remap="make">make</userinput></screen> + <para>This package does not come with a test suite.</para> - <note><para>From <application>GRUB</application>'s perspective, the - kernel files are relative to the partition used. If you - used a separate /boot partition, remove /boot from the above - <emphasis>linux</emphasis> line. You will also need to change the - <emphasis>set root</emphasis> line to point to the boot partition. - </para></note> + <para>Install the package:</para> - <para>GRUB is an extremely powerful program and it provides a tremendous - number of options for booting from a wide variety of devices, operating - systems, and partition types. There are also many options for customization - such as graphical splash screens, playing sounds, mouse input, etc. The - details of these options are beyond the scope of this introduction.</para> +<screen><userinput remap="install">make install +mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions</userinput></screen> - <caution><para>There is a command, <application>grub-mkconfig</application>, that - can write a configuration file automatically. It uses a set of scripts in - /etc/grub.d/ and will destroy any customizations that you make. These scripts - are designed primarily for non-source distributions and are not recommended for - LFS. If you install a commercial Linux distribution, there is a good chance - that this program will be run. Be sure to back up your grub.cfg file.</para></caution> + <para>Using GRUB to make your LFS system bootable will be discussed in + <xref linkend="ch-bootable-grub"/>.</para> - </sect2> + </sect2> + + <sect2 id="contents-gRUB" role="content"> + <title>Contents of GRUB</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + + <seg>grub-bios-setup, grub-editenv, grub-file, grub-fstest, + grub-glue-efi, grub-install, grub-kbdcomp, grub-macbless, + grub-menulst2cfg, grub-mkconfig, + grub-mkimage, grub-mklayout, grub-mknetdir, + grub-mkpasswd-pbkdf2, grub-mkrelpath, grub-mkrescue, grub-mkstandalone, + grub-ofpathname, grub-probe, grub-reboot, grub-render-label, + grub-script-check, + grub-set-default, grub-sparc64-setup, and grub-syslinux2cfg</seg> + + <seg>/usr/lib/grub, /etc/grub.d, /usr/share/grub, and /boot/grub (when grub-install + is first run)</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="grub-bios-setup"> + <term><command>grub-bios-setup</command></term> + <listitem> + <para>Is a helper program for grub-install</para> + <indexterm zone="ch-system-grub grub-bios-setup"> + <primary sortas="b-grub-bios-setup">grub-bios-setup</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-editenv"> + <term><command>grub-editenv</command></term> + <listitem> + <para>A tool to edit the environment block</para> + <indexterm zone="ch-system-grub grub-editenv"> + <primary sortas="b-grub-editenv">grub-editenv</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-file"> + <term><command>grub-file</command></term> + <listitem> + <para>Checks if FILE is of the specified type.</para> + <indexterm zone="ch-system-grub grub-file"> + <primary sortas="b-grub-file">grub-file</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-fstest"> + <term><command>grub-fstest</command></term> + <listitem> + <para>Tool to debug the filesystem driver</para> + <indexterm zone="ch-system-grub grub-fstest"> + <primary sortas="b-grub-fstest">grub-fstest</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-glue-efi"> + <term><command>grub-glue-efi</command></term> + <listitem> + <para>Processes ia32 and amd64 EFI images and glues them + according to Apple format.</para> + <indexterm zone="ch-system-grub grub-glue-efi"> + <primary sortas="b-grub-glue-efi">grub-glue-efi</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-install"> + <term><command>grub-install</command></term> + <listitem> + <para>Install GRUB on your drive</para> + <indexterm zone="ch-system-grub grub-install"> + <primary sortas="b-grub-install">grub-install</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-kbdcomp"> + <term><command>grub-kbdcomp</command></term> + <listitem> + <para>Script that converts an xkb layout into one recognized by + GRUB</para> + <indexterm zone="ch-system-grub grub-kbdcomp"> + <primary sortas="b-grub-kbdcomp">grub-kbdcomp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-macbless"> + <term><command>grub-macbless</command></term> + <listitem> + <para>Mac-style bless on HFS or HFS+ files</para> + <indexterm zone="ch-system-grub grub-macbless"> + <primary sortas="b-grub-macbless">grub-macbless</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-menulst2cfg"> + <term><command>grub-menulst2cfg</command></term> + <listitem> + <para>Converts a GRUB Legacy <filename>menu.lst</filename> + into a <filename>grub.cfg</filename> for use with GRUB 2</para> + <indexterm zone="ch-system-grub grub-menulst2cfg"> + <primary sortas="b-grub-menulst2cfg">grub-menulst2cfg</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-mkconfig"> + <term><command>grub-mkconfig</command></term> + <listitem> + <para>Generate a grub config file</para> + <indexterm zone="ch-system-grub grub-mkconfig"> + <primary sortas="b-grub-mkconfig">grub-mkconfig</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-mkimage"> + <term><command>grub-mkimage</command></term> + <listitem> + <para>Make a bootable image of GRUB</para> + <indexterm zone="ch-system-grub grub-mkimage"> + <primary sortas="b-grub-mkimage">grub-mkimage</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-mklayout"> + <term><command>grub-mklayout</command></term> + <listitem> + <para>Generates a GRUB keyboard layout file</para> + <indexterm zone="ch-system-grub grub-mklayout"> + <primary sortas="b-grub-mklayout">grub-mklayout</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-mknetdir"> + <term><command>grub-mknetdir</command></term> + <listitem> + <para>Prepares a GRUB netboot directory</para> + <indexterm zone="ch-system-grub grub-mknetdir"> + <primary sortas="b-grub-mknetdir">grub-mknetdir</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-mkpasswd-pbkdf2"> + <term><command>grub-mkpasswd-pbkdf2</command></term> + <listitem> + <para>Generates an encrypted PBKDF2 password for use in the boot + menu</para> + <indexterm zone="ch-system-grub grub-mkpasswd-pbkdf2"> + <primary sortas="b-grub-mkpasswd-pbkdf2">grub-mkpasswd-pbkdf2</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-mkrelpath"> + <term><command>grub-mkrelpath</command></term> + <listitem> + <para>Makes a system pathname relative to its root</para> + <indexterm zone="ch-system-grub grub-mkrelpath"> + <primary sortas="b-grub-mkrelpath">grub-mkrelpath</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-mkrescue"> + <term><command>grub-mkrescue</command></term> + <listitem> + <para>Make a bootable image of GRUB suitable for a floppy disk or CDROM/DVD</para> + <indexterm zone="ch-system-grub grub-mkrescue"> + <primary sortas="b-grub-mkrescue">grub-mkrescue</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-mkstandalone"> + <term><command>grub-mkstandalone</command></term> + <listitem> + <para>Generates a standalone image</para> + <indexterm zone="ch-system-grub grub-mkstandalone"> + <primary sortas="b-grub-mkstandalone">grub-mkstandalone</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-ofpathname"> + <term><command>grub-ofpathname</command></term> + <listitem> + <para>Is a helper program that prints the path of a GRUB device</para> + <indexterm zone="ch-system-grub grub-ofpathname"> + <primary sortas="b-grub-ofpathname">grub-ofpathname</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-probe"> + <term><command>grub-probe</command></term> + <listitem> + <para>Probe device information for a given path or device</para> + <indexterm zone="ch-system-grub grub-probe"> + <primary sortas="b-grub-probe">grub-probe</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-reboot"> + <term><command>grub-reboot</command></term> + <listitem> + <para>Sets the default boot entry for GRUB for the next boot only</para> + <indexterm zone="ch-system-grub grub-reboot"> + <primary sortas="b-grub-reboot">grub-reboot</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-render-label"> + <term><command>grub-render-label</command></term> + <listitem> + <para>Render Apple .disk_label for Apple Macs</para> + <indexterm zone="ch-system-grub grub-render-label"> + <primary sortas="b-grub-render-label">grub-render-label</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-script-check"> + <term><command>grub-script-check</command></term> + <listitem> + <para>Checks GRUB configuration script for syntax errors</para> + <indexterm zone="ch-system-grub grub-script-check"> + <primary sortas="b-grub-script-check">grub-script-check</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-set-default"> + <term><command>grub-set-default</command></term> + <listitem> + <para>Sets the default boot entry for GRUB</para> + <indexterm zone="ch-system-grub grub-set-default"> + <primary sortas="b-grub-set-default">grub-set-default</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-sparc64-setup"> + <term><command>grub-sparc64-setup</command></term> + <listitem> + <para>Is a helper program for grub-setup</para> + <indexterm zone="ch-system-grub grub-sparc64-setup"> + <primary sortas="b-grub-sparc64-setup">grub-setup</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grub-syslinux2cfg"> + <term><command>grub-syslinux2cfg</command></term> + <listitem> + <para>Transform a syslinux config file into grub.cfg format</para> + <indexterm zone="ch-system-grub grub-syslinux2cfg"> + <primary sortas="b-grub-syslinux2cfg">grub-syslinux2cfg</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> </sect1> diff --git a/chapter08/gzip.xml b/chapter08/gzip.xml new file mode 100644 index 000000000..09eebbdf7 --- /dev/null +++ b/chapter08/gzip.xml @@ -0,0 +1,236 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-gzip" role="wrap"> + <?dbhtml filename="gzip.html"?> + + <sect1info condition="script"> + <productname>gzip</productname> + <productnumber>&gzip-version;</productnumber> + <address>&gzip-url;</address> + </sect1info> + + <title>Gzip-&gzip-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gzip-ch6-sbu;</seg> + <seg>&gzip-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Gzip</title> + + <para>Prepare Gzip for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Two tests are known to fail in the LFS environment: + help-version and zmore.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Move a program that needs to be on the root filesystem:</para> + +<screen><userinput remap="install">mv -v /usr/bin/gzip /bin</userinput></screen> + + </sect2> + + <sect2 id="contents-gzip" role="content"> + <title>Contents of Gzip</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + + <seglistitem> + <seg>gunzip, gzexe, gzip, uncompress (hard link with gunzip), zcat, zcmp, + zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore, and znew</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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-decompressing 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>Decompresses 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—<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/iana-etc.xml b/chapter08/iana-etc.xml index 42ab25c34..42ab25c34 100644 --- a/chapter06/iana-etc.xml +++ b/chapter08/iana-etc.xml diff --git a/chapter06/inetutils.xml b/chapter08/inetutils.xml index c8fdd456f..c8fdd456f 100644 --- a/chapter06/inetutils.xml +++ b/chapter08/inetutils.xml diff --git a/chapter06/intltool.xml b/chapter08/intltool.xml index 9e9ebad20..9e9ebad20 100644 --- a/chapter06/intltool.xml +++ b/chapter08/intltool.xml diff --git a/chapter08/introduction.xml b/chapter08/introduction.xml index 5cb40b882..c8ccb3908 100644 --- a/chapter08/introduction.xml +++ b/chapter08/introduction.xml @@ -5,14 +5,70 @@ %general-entities; ]> -<sect1 id="ch-bootable-introduction"> +<sect1 id="ch-system-introduction"> <?dbhtml filename="introduction.html"?> <title>Introduction</title> - <para>It is time to make the LFS system bootable. This chapter - discusses creating an <filename>fstab</filename> file, building a - kernel for the new LFS system, and installing the GRUB boot loader so - that the LFS system can be selected for booting at startup.</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 you (or the system) + may need it.</para> + + <para>We do not recommend using optimizations. They 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. Also note that + the <option>-march</option> and <option>-mtune</option> options using values + not specified in the book have not been tested. This may cause problems with + the toolchain packages (Binutils, GCC and Glibc). 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>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, and how much disk + space is required during this building process. Following the installation + instructions, there is a list of programs and libraries (along with brief + descriptions of these) that the package installs.</para> + + <note><para>The SBU values and required disk space includes + test suite data for all applicable packages in Chapter 6.</para></note> + + <sect2> + <title>About libraries</title> + + <para>In general, the LFS editors discourage building and installing static + libraries. The original purpose for most static libraries has been made + obsolete in a modern Linux system. In addition linking a static library + into a program can be detrimental. If an update to the library is needed + to remove a security problem, all programs that use the static library will + need to be relinked to the new library. Since the use of static libraries + is not always obvious, the relevant programs (and the procedures needed to + do the linking) may not even be known.</para> + + <para>In the procedures in Chapter 6, we remove or disable installation of + most static libraries. Usually this is done by passing a + <option>--disable-static</option> option to <command>configure</command>. + In other cases, alternate means are needed. In a few cases, especially + glibc and gcc, the use of static libraries remains essential to the general + package building process. </para> + + <para>For a more complete discussion of libraries, see the discussion + <ulink url="&blfs-root;/view/&short-version;/introduction/libraries.html"> + Libraries: Static or shared?</ulink> in the BLFS book.</para> + + </sect2> </sect1> diff --git a/chapter06/iproute2.xml b/chapter08/iproute2.xml index 8b868df65..8b868df65 100644 --- a/chapter06/iproute2.xml +++ b/chapter08/iproute2.xml diff --git a/chapter06/kbd.xml b/chapter08/kbd.xml index 2f9cfd3f1..2f9cfd3f1 100644 --- a/chapter06/kbd.xml +++ b/chapter08/kbd.xml diff --git a/chapter06/kmod.xml b/chapter08/kmod.xml index 6cc3eb168..6cc3eb168 100644 --- a/chapter06/kmod.xml +++ b/chapter08/kmod.xml diff --git a/chapter06/less.xml b/chapter08/less.xml index 087b2e6a3..087b2e6a3 100644 --- a/chapter06/less.xml +++ b/chapter08/less.xml diff --git a/chapter06/libcap.xml b/chapter08/libcap.xml index 8126dfaae..8126dfaae 100644 --- a/chapter06/libcap.xml +++ b/chapter08/libcap.xml diff --git a/chapter06/libelf.xml b/chapter08/libelf.xml index b559e6aa2..b559e6aa2 100644 --- a/chapter06/libelf.xml +++ b/chapter08/libelf.xml diff --git a/chapter06/libffi.xml b/chapter08/libffi.xml index 6a6f8a458..6a6f8a458 100644 --- a/chapter06/libffi.xml +++ b/chapter08/libffi.xml diff --git a/chapter06/libpipeline.xml b/chapter08/libpipeline.xml index eb5a19438..eb5a19438 100644 --- a/chapter06/libpipeline.xml +++ b/chapter08/libpipeline.xml diff --git a/chapter06/libtool.xml b/chapter08/libtool.xml index 3093b4164..3093b4164 100644 --- a/chapter06/libtool.xml +++ b/chapter08/libtool.xml diff --git a/chapter08/m4.xml b/chapter08/m4.xml new file mode 100644 index 000000000..7fe282ee7 --- /dev/null +++ b/chapter08/m4.xml @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-m4" role="wrap"> + <?dbhtml filename="m4.html"?> + + <sect1info condition="script"> + <productname>m4</productname> + <productnumber>&m4-version;</productnumber> + <address>&m4-url;</address> + </sect1info> + + <title>M4-&m4-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&m4-ch6-sbu;</seg> + <seg>&m4-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of M4</title> + + <para>First, make some fixes required by glibc-2.28:</para> + +<screen><userinput remap="pre">sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c +echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h</userinput></screen> + + <para>Prepare M4 for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-m4" role="content"> + <title>Contents of M4</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + + <seglistitem> + <seg>m4</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="m4"> + <!-- Don't remove the extra space, it prevet a FOP warning. --> + <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/chapter08/make.xml b/chapter08/make.xml new file mode 100644 index 000000000..9c649cdc5 --- /dev/null +++ b/chapter08/make.xml @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-make" role="wrap"> + <?dbhtml filename="make.html"?> + + <sect1info condition="script"> + <productname>make</productname> + <productnumber>&make-version;</productnumber> + <address>&make-url;</address> + </sect1info> + + <title>Make-&make-version;</title> + + <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 packages.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&make-ch6-sbu;</seg> + <seg>&make-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Make</title> +<!-- + <para>Again, work around an error caused by glibc-2.27 and later:</para> + +<screen><userinput remap="pre">sed -i '211,217 d; 219,229 d; 232 d' glob/glob.c</userinput></screen> +--> + <para>Prepare Make for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>The test suite needs to know where supporting perl files are located. + We use an environment variable to accomplish this. To test the + results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + + <sect2 id="contents-make" role="content"> + <title>Contents of Make</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + + <seglistitem> + <seg>make</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="make"> + <term><command>make</command></term> + <listitem> + <para>Automatically determines which pieces of a package need to + be (re)compiled 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-db.xml b/chapter08/man-db.xml index f2f46b891..f2f46b891 100644 --- a/chapter06/man-db.xml +++ b/chapter08/man-db.xml diff --git a/chapter06/man-pages.xml b/chapter08/man-pages.xml index 3d2c52046..3d2c52046 100644 --- a/chapter06/man-pages.xml +++ b/chapter08/man-pages.xml diff --git a/chapter06/meson.xml b/chapter08/meson.xml index 0b49c5441..0b49c5441 100644 --- a/chapter06/meson.xml +++ b/chapter08/meson.xml diff --git a/chapter06/mpc.xml b/chapter08/mpc.xml index 2d518c8c1..2d518c8c1 100644 --- a/chapter06/mpc.xml +++ b/chapter08/mpc.xml diff --git a/chapter06/mpfr.xml b/chapter08/mpfr.xml index ff8e323b7..ff8e323b7 100644 --- a/chapter06/mpfr.xml +++ b/chapter08/mpfr.xml diff --git a/chapter08/ncurses.xml b/chapter08/ncurses.xml new file mode 100644 index 000000000..b37f1f69c --- /dev/null +++ b/chapter08/ncurses.xml @@ -0,0 +1,380 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-ncurses" role="wrap"> + <?dbhtml filename="ncurses.html"?> + + <sect1info condition="script"> + <productname>ncurses</productname> + <productnumber>&ncurses-version;</productnumber> + <address>&ncurses-url;</address> + </sect1info> + + <title>Ncurses-&ncurses-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&ncurses-ch6-sbu;</seg> + <seg>&ncurses-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Ncurses</title> + + <para>Don't install a static library that is not handled by configure:</para> + +<screen><userinput remap="pre">sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in</userinput></screen> + + <para>Prepare Ncurses for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --with-shared \ + --without-debug \ + --without-normal \ + --enable-pc-files \ + --enable-widec</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title> + + <varlistentry> + <term><parameter>--enable-widec</parameter></term> + <listitem> + <para>This switch causes wide-character libraries (e.g., <filename + class="libraryfile">libncursesw.so.&ncurses-version;</filename>) + to be built instead of normal ones (e.g., <filename + class="libraryfile">libncurses.so.&ncurses-version;</filename>). + These wide-character libraries are usable in both multibyte and + traditional 8-bit locales, while normal libraries work properly + only in 8-bit locales. Wide-character and normal libraries are + source-compatible, but not binary-compatible.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-pc-files</parameter></term> + <listitem> + <para>This switch generates and installs .pc files for pkg-config. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--without-normal</parameter></term> + <listitem> + <para>This switch disables building and installing most static libraries. + </para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>This package has a test suite, but it can only be run after the + package has been installed. The tests reside in the + <filename class="directory">test/</filename> directory. See the + <filename>README</filename> file in that directory for further details. + </para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Move the shared libraries to the + <filename class="directory">/lib</filename> directory, where they are + expected to reside:</para> + +<screen><userinput remap="install">mv -v /usr/lib/libncursesw.so.6* /lib</userinput></screen> + + <para>Because the libraries have been moved, one symlink points to + a non-existent file. Recreate it:</para> + +<screen><userinput remap="install">ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so</userinput></screen> + + <para>Many applications still expect the linker to be able to find + non-wide-character Ncurses libraries. Trick such applications into linking with + wide-character libraries by means of symlinks and linker scripts:</para> + +<screen><userinput remap="install">for lib in ncurses form panel menu ; do + rm -vf /usr/lib/lib${lib}.so + echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so + ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc +done</userinput></screen> + + <para>Finally, make sure that old applications that look for + <filename class="libraryfile">-lcurses</filename> at build time are still + buildable:</para> + +<screen><userinput remap="install">rm -vf /usr/lib/libcursesw.so +echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so +ln -sfv libncurses.so /usr/lib/libcurses.so</userinput></screen> + + <para>If desired, install the Ncurses documentation:</para> + +<screen><userinput remap="install">mkdir -v /usr/share/doc/ncurses-&ncurses-version; +cp -v -R doc/* /usr/share/doc/ncurses-&ncurses-version;</userinput></screen> + + <note> + + <para>The instructions above don't create non-wide-character Ncurses + libraries since no package installed by compiling from sources would link + against them at runtime. However, the only known binary-only + applications that link against non-wide-character Ncurses libraries + require version 5. If you must have such libraries because of some binary-only + application or to be compliant with LSB, build the package again with the + following commands:</para> + +<screen role="nodump"><userinput>make distclean +./configure --prefix=/usr \ + --with-shared \ + --without-normal \ + --without-debug \ + --without-cxx-binding \ + --with-abi-version=5 +make sources libs +cp -av lib/lib*.so.5* /usr/lib</userinput></screen> + </note> + + </sect2> + + <sect2 id="contents-ncurses" role="content"> + <title>Contents of Ncurses</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg> + captoinfo (link to tic), + clear, + infocmp, + infotocap (link to tic), + ncursesw6-config, + reset (link to tset), + tabs, + tic, + toe, + tput, and + tset + </seg> + <seg> + libcursesw.so (symlink and linker script to libncursesw.so), + libformw.so, + libmenuw.so, + libncursesw.so, + libncurses++w.a, + libpanelw.so, and their non-wide-character counterparts without "w" + in the library names.</seg> + <seg> + /usr/share/tabset, + /usr/share/terminfo, and + /usr/share/doc/ncurses-&ncurses-version; + </seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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="ncursesw6-config"> + <term><command>ncursesw6-config</command></term> + <listitem> + <para>Provides configuration information for ncurses</para> + <indexterm zone="ch-system-ncurses ncursesw6-config"> + <primary sortas="b-ncursesw6-config">ncursesw6-config</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="tabs"> + <term><command>tabs</command></term> + <listitem> + <para>Clears and sets tab stops on a terminal</para> + <indexterm zone="ch-system-ncurses tabs"> + <primary sortas="b-tabs">tabs</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="libcursesw"> + <term><filename class="libraryfile">libcursesw</filename></term> + <listitem> + <para>A link to <filename>libncursesw</filename></para> + <indexterm zone="ch-system-ncurses libcursesw"> + <primary sortas="c-libcursesw">libcursesw</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libncursesw"> + <term><filename class="libraryfile">libncursesw</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 libncursesw"> + <primary sortas="c-libncursesw">libncursesw</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libformw"> + <term><filename class="libraryfile">libformw</filename></term> + <listitem> + <para>Contains functions to implement forms</para> + <indexterm zone="ch-system-ncurses libformw"> + <primary sortas="c-libformw">libformw</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libmenuw"> + <term><filename class="libraryfile">libmenuw</filename></term> + <listitem> + <para>Contains functions to implement menus</para> + <indexterm zone="ch-system-ncurses libmenuw"> + <primary sortas="c-libmenuw">libmenuw</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libpanelw"> + <term><filename class="libraryfile">libpanelw</filename></term> + <listitem> + <para>Contains functions to implement panels</para> + <indexterm zone="ch-system-ncurses libpanelw"> + <primary sortas="c-libpanelw">libpanelw</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/ninja.xml b/chapter08/ninja.xml index e998c64fb..e998c64fb 100644 --- a/chapter06/ninja.xml +++ b/chapter08/ninja.xml diff --git a/chapter06/openssl.xml b/chapter08/openssl.xml index f2ff1fa80..f2ff1fa80 100644 --- a/chapter06/openssl.xml +++ b/chapter08/openssl.xml diff --git a/chapter08/patch.xml b/chapter08/patch.xml new file mode 100644 index 000000000..6c6c6852b --- /dev/null +++ b/chapter08/patch.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-patch" role="wrap"> + <?dbhtml filename="patch.html"?> + + <sect1info condition="script"> + <productname>patch</productname> + <productnumber>&patch-version;</productnumber> + <address>&patch-url;</address> + </sect1info> + + <title>Patch-&patch-version;</title> + + <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 or creating files + by applying a <quote>patch</quote> file typically created by the + <command>diff</command> program.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&patch-ch6-sbu;</seg> + <seg>&patch-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Patch</title> + + <para>Prepare Patch for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-patch" role="content"> + <title>Contents of Patch</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + + <seglistitem> + <seg>patch</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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/chapter08/perl.xml b/chapter08/perl.xml new file mode 100644 index 000000000..284464d87 --- /dev/null +++ b/chapter08/perl.xml @@ -0,0 +1,522 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-perl" role="wrap"> + <?dbhtml filename="perl.html"?> + + <sect1info condition="script"> + <productname>perl</productname> + <productnumber>&perl-version;</productnumber> + <address>&perl-url;</address> + </sect1info> + + <title>Perl-&perl-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&perl-ch6-sbu;</seg> + <seg>&perl-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Perl</title> + + <para>First create a basic <filename>/etc/hosts</filename> file to be + referenced in one of Perl's configuration files as well as the optional + test suite:</para> + +<screen><userinput remap="pre">echo "127.0.0.1 localhost $(hostname)" > /etc/hosts</userinput></screen> + + <para>This version of Perl now builds the Compress::Raw::Zlib and + Compress::Raw::BZip2 modules. By + default Perl will use an internal copy of the sources for the build. + Issue the following command so that Perl will use the libraries + installed on the system:</para> + +<screen><userinput remap="pre">export BUILD_ZLIB=False +export BUILD_BZIP2=0</userinput></screen> +<!-- + <para>Apply a patch to allow the Errno.pm module and the h2ph + program to build correctly when building with GCC 5:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&perl-gcc5-fixes-patch;</userinput></screen> +--> + + <para>To have full control over the way Perl is set up, you can remove the + <quote>-des</quote> options from the following command and hand-pick the way + this package is built. Alternatively, use the command exactly as below to + use the defaults that Perl auto-detects:</para> + +<screen><userinput remap="configure">sh Configure -des -Dprefix=/usr \ + -Dvendorprefix=/usr \ + -Dman1dir=/usr/share/man/man1 \ + -Dman3dir=/usr/share/man/man3 \ + -Dpager="/usr/bin/less -isR" \ + -Duseshrplib \ + -Dusethreads</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>-Dvendorprefix=/usr</parameter></term> + <listitem> + <para>This ensures <command>perl</command> knows how to + tell packages where they should install their perl modules.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dpager="/usr/bin/less -isR"</parameter></term> + <listitem> + <para>This ensures that <userinput>less</userinput> is used instead + of <userinput>more</userinput>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dman1dir=/usr/share/man/man1 + -Dman3dir=/usr/share/man/man3</parameter></term> + <listitem> + <para>Since Groff is not installed yet, <command>Configure</command> + thinks that we do not want man pages for Perl. Issuing these + parameters overrides this decision.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Duseshrplib</parameter></term> + <listitem> + <para>Build a shared libperl needed by some perl modules.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dusethreads</parameter></term> + <listitem> + <para>Build perl with support for threads.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results (approximately 11 SBU), issue:</para> + +<screen><userinput remap="test">make test</userinput></screen> + + <!--note><para>One test fails due to using the most recent version of gdbm. + </para></note--> + + <para>Install the package and clean up:</para> + +<screen><userinput remap="install">make install +unset BUILD_ZLIB BUILD_BZIP2</userinput></screen> + + </sect2> + + <sect2 id="contents-perl" role="content"> + <title>Contents of Perl</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>corelist, cpan, enc2xs, encguess, h2ph, h2xs, instmodsh, + json_pp, libnetcfg, perl, perl&perl-version; (hard link to perl), + perlbug, perldoc, perlivp, perlthanks (hard link to perlbug), piconv, + pl2pm, pod2html, pod2man, pod2text, pod2usage, podchecker, podselect, + prove, ptar, ptardiff, ptargrep, shasum, + splain, xsubpp, and zipdetails</seg> + <seg>Many which cannot all be listed here</seg> + <seg>/usr/lib/perl5</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> +<!-- + <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="corelist"> + <term><command>corelist</command></term> + <listitem> + <para>A commandline frontend to Module::CoreList</para> + <indexterm zone="ch-system-perl corelist"> + <primary sortas="b-corelist">corelist</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="cpan"> + <term><command>cpan</command></term> + <listitem> + <para>Interact with the Comprehensive Perl Archive Network (CPAN) + from the command line</para> + <indexterm zone="ch-system-perl cpan"> + <primary sortas="b-cpan">cpan</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="enc2xs"> + <term><command>enc2xs</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 enc2xs"> + <primary sortas="b-enc2xs">enc2xs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="encguess"> + <term><command>encguess</command></term> + <listitem> + <para>Guess the encoding type of one or several files</para> + <indexterm zone="ch-system-perl encguess"> + <primary sortas="b-encguess">encguess</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="instmodsh"> + <term><command>instmodsh</command></term> + <listitem> + <para>Shell script for examining installed Perl modules, + and can create a tarball from an installed module</para> + <indexterm zone="ch-system-perl instmodsh"> + <primary sortas="b-instmodsh">instmodsh</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="json_pp"> + <term><command>json_pp</command></term> + <listitem> + <para>Converts data between certain input and output formats</para> + <indexterm zone="ch-system-perl json_pp"> + <primary sortas="b-json_pp">json_pp</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> Perl module</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, <command>sed</command>, + <command>awk</command> and <command>sh</command> 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="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="perlthanks"> + <term><command>perlthanks</command></term> + <listitem> + <para>Used to generate thank you messages to mail to the Perl + developers</para> + <indexterm zone="ch-system-perl perlthanks"> + <primary sortas="b-perlthanks">perlthanks</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="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="prove"> + <term><command>prove</command></term> + <listitem> + <para>Command line tool for running tests against the Test::Harness + module</para> + <indexterm zone="ch-system-perl prove"> + <primary sortas="b-prove">prove</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="ptar"> + <term><command>ptar</command></term> + <listitem> + <para>A <command>tar</command>-like program written in Perl</para> + <indexterm zone="ch-system-perl ptar"> + <primary sortas="b-ptar">ptar</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ptardiff"> + <term><command>ptardiff</command></term> + <listitem> + <para>A Perl program that compares an extracted archive with an + unextracted one</para> + <indexterm zone="ch-system-perl ptardiff"> + <primary sortas="b-ptardiff">ptardiff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ptargrep"> + <term><command>ptargrep</command></term> + <listitem> + <para>A Perl program that applies pattern matching to the contents + of files in a tar archive</para> + <indexterm zone="ch-system-perl ptargrep"> + <primary sortas="b-ptargrep">ptargrep</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="shasum"> + <term><command>shasum</command></term> + <listitem> + <para>Prints or checks SHA checksums</para> + <indexterm zone="ch-system-perl shasum"> + <primary sortas="b-shasum">shasum</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> + + <varlistentry id="zipdetails"> + <term><command>zipdetails</command></term> + <listitem> + <para>Displays details about the internal structure of a Zip file</para> + <indexterm zone="ch-system-perl zipdetails"> + <primary sortas="b-zipdetails">zipdetails</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/pkgconfig.xml b/chapter08/pkgconfig.xml index 3c311e389..3c311e389 100644 --- a/chapter06/pkgconfig.xml +++ b/chapter08/pkgconfig.xml diff --git a/chapter06/pkgmgt.xml b/chapter08/pkgmgt.xml index d28038467..d28038467 100644 --- a/chapter06/pkgmgt.xml +++ b/chapter08/pkgmgt.xml diff --git a/chapter06/procps.xml b/chapter08/procps.xml index 59bf0864c..59bf0864c 100644 --- a/chapter06/procps.xml +++ b/chapter08/procps.xml diff --git a/chapter06/psmisc.xml b/chapter08/psmisc.xml index b01303131..b01303131 100644 --- a/chapter06/psmisc.xml +++ b/chapter08/psmisc.xml diff --git a/chapter08/python.xml b/chapter08/python.xml new file mode 100644 index 000000000..cc440903d --- /dev/null +++ b/chapter08/python.xml @@ -0,0 +1,253 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-Python" role="wrap"> + <?dbhtml filename="Python.html"?> + + <sect1info condition="script"> + <productname>Python</productname> + <productnumber>&python-version;</productnumber> + <address>&python-url;</address> + </sect1info> + + <title>Python-&python-version;</title> + + <indexterm zone="ch-system-Python"> + <primary sortas="a-python">python</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Python 3 package contains the Python development environment. It + is useful for object-oriented programming, writing scripts, prototyping + large programs or developing entire applications.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&python-ch6-sbu;</seg> + <seg>&python-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Python 3</title> + + <para>Prepare Python for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + --with-ensurepip=yes</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--with-system-expat</parameter></term> + <listitem> + <para>This switch enables linking against system version of + <application>Expat</application>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-system-ffi</parameter></term> + <listitem> + <para>This switch enables linking against system version of + <application>libffi</application>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-ensurepip=yes</parameter></term> + <listitem> + <para>This switch enables building <command>pip</command> and + <command>setuptools</command> packaging programs.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue <command>make test</command>. + Some tests requiring network connection or additional packages are + skipped. The test named test_normalization fails because network + configuration is not completed yet. For more comprehensive results, + the test can be rerun when Python 3 is reinstalled in BLFS.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install +chmod -v 755 /usr/lib/libpython&python-minor;.so +chmod -v 755 /usr/lib/libpython3.so +ln -sfv pip&python-minor; /usr/bin/pip3</userinput></screen> + + <variablelist> + <title>The meaning of the install commands:</title> +<!-- ====== Change 8m if Python minor version changes ======= --> + <varlistentry> + <term><command>chmod -v 755 /usr/lib/libpython3.{8.,}so</command></term> + <listitem> + <para>Fix permissions for libraries to be consistent with other + libraries.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>If desired, install the preformatted documentation:</para> + +<screen><userinput remap="install">install -v -dm755 /usr/share/doc/python-&python-version;/html + +tar --strip-components=1 \ + --no-same-owner \ + --no-same-permissions \ + -C /usr/share/doc/python-&python-version;/html \ + -xvf ../python-&python-version;-docs-html.tar.bz2</userinput></screen> + + <variablelist> + <title>The meaning of the documentation install commands:</title> + + <varlistentry> + <term><option>--no-same-owner</option> and <option>--no-same-permissions</option></term> + <listitem> + <para>Ensure the installed files have the correct ownership and + permissions. Without these options, using <application>tar</application> + will install the package files with the upstream creator's values. + </para> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + + <sect2 id="contents-python" role="content"> + <title>Contents of Python 3</title> + + <segmentedlist> + <segtitle>Installed Programs</segtitle> + <segtitle>Installed Library</segtitle> + <segtitle>Installed Directories</segtitle> + + <seglistitem> + <seg> + 2to3, idle3, pip3, pydoc3, python3, and python3-config + </seg> + <seg> + libpython&python-minor;.so and libpython3.so + </seg> + <seg> + /usr/include/python&python-minor;, + /usr/lib/python3, and + /usr/share/doc/python-&python-version; + </seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="python-2to3"> + <term><command>2to3</command></term> + <listitem> + <para> + is a <application>Python</application> program that reads + <application>Python 2.x</application> source code and applies a + series of fixes to transform it into valid + <application>Python 3.x</application> code. + </para> + <indexterm zone="ch-system-Python"> + <primary sortas="b-2to3">2to3</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="idle3"> + <term><command>idle3</command></term> + <listitem> + <para> + is a wrapper script that opens a <application>Python</application> + aware GUI editor. For this script to run, you must have installed + <application>Tk</application> before Python so that the Tkinter + Python module is built. + </para> + <indexterm zone="ch-system-Python"> + <primary sortas="b-idle3">idle3</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pip3"> + <term><command>pip3</command></term> + <listitem> + <para> + The package installer for Python. You can use pip to install + packages from Python Package Index and other indexes. + </para> + <indexterm zone="ch-system-Python"> + <primary sortas="b-pip3">pip3</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pydoc3"> + <term><command>pydoc3</command></term> + <listitem> + <para> + is the <application>Python</application> documentation tool. + </para> + <indexterm zone="ch-system-Python"> + <primary sortas="b-pydoc3">pydoc3</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="python3"> + <term><command>python3</command></term> + <listitem> + <para> + is an interpreted, interactive, object-oriented programming + language. + </para> + <indexterm zone="ch-system-Python"> + <primary sortas="b-python3">python3</primary> + </indexterm> + </listitem> + </varlistentry> +<!-- + <varlistentry id="pyvenv"> + <term><command>pyvenv</command></term> + <listitem> + <para> + creates virtual <application>Python</application> environments in + one or more target directories. + </para> + <indexterm zone="ch-system-Python"> + <primary sortas="b-pyvenv">pyvenv</primary> + </indexterm> + </listitem> + </varlistentry> +--> + </variablelist> + + </sect2> + +</sect1> + diff --git a/chapter06/readline.xml b/chapter08/readline.xml index 87571ea9d..87571ea9d 100644 --- a/chapter06/readline.xml +++ b/chapter08/readline.xml diff --git a/chapter06/revisedchroot.xml b/chapter08/revisedchroot.xml index 0e836d661..0e836d661 100644 --- a/chapter06/revisedchroot.xml +++ b/chapter08/revisedchroot.xml diff --git a/chapter08/sed.xml b/chapter08/sed.xml new file mode 100644 index 000000000..030e77a0b --- /dev/null +++ b/chapter08/sed.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-sed" role="wrap"> + <?dbhtml filename="sed.html"?> + + <sect1info condition="script"> + <productname>sed</productname> + <productnumber>&sed-version;</productnumber> + <address>&sed-url;</address> + </sect1info> + + <title>Sed-&sed-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&sed-ch6-sbu;</seg> + <seg>&sed-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Sed</title> + + <para>Prepare Sed for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --bindir=/bin</userinput></screen> + + <para>Compile the package and generate the HTML documentation:</para> + +<screen><userinput remap="make">make +make html</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">chown -Rv tester . +su tester -c "PATH=$PATH make check"</userinput></screen> + + <para>Install the package and its documentation:</para> + +<screen><userinput remap="install">make install +install -d -m755 /usr/share/doc/sed-&sed-version; +install -m644 doc/sed.html /usr/share/doc/sed-&sed-version;</userinput></screen> + + </sect2> + + <sect2 id="contents-sed" role="content"> + <title>Contents of Sed</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>sed</seg> + <seg>/usr/share/doc/sed-&sed-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <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/chapter08/shadow.xml index 425112cbd..425112cbd 100644 --- a/chapter06/shadow.xml +++ b/chapter08/shadow.xml diff --git a/chapter06/strippingagain.xml b/chapter08/strippingagain.xml index fb2a1b55f..fb2a1b55f 100644 --- a/chapter06/strippingagain.xml +++ b/chapter08/strippingagain.xml diff --git a/chapter06/sysklogd.xml b/chapter08/sysklogd.xml index e96980cb4..e96980cb4 100644 --- a/chapter06/sysklogd.xml +++ b/chapter08/sysklogd.xml diff --git a/chapter06/systemd.xml b/chapter08/systemd.xml index 2cf2d1d1b..2cf2d1d1b 100644 --- a/chapter06/systemd.xml +++ b/chapter08/systemd.xml diff --git a/chapter06/sysvinit.xml b/chapter08/sysvinit.xml index 0c171acf5..0c171acf5 100644 --- a/chapter06/sysvinit.xml +++ b/chapter08/sysvinit.xml diff --git a/chapter08/tar.xml b/chapter08/tar.xml new file mode 100644 index 000000000..d148c4695 --- /dev/null +++ b/chapter08/tar.xml @@ -0,0 +1,116 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-tar" role="wrap"> + <?dbhtml filename="tar.html"?> + + <sect1info condition="script"> + <productname>tar</productname> + <productnumber>&tar-version;</productnumber> + <address>&tar-url;</address> + </sect1info> + + <title>Tar-&tar-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&tar-ch6-sbu;</seg> + <seg>&tar-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Tar</title> + + <para>Prepare Tar for compilation:</para> + +<screen><userinput remap="configure">FORCE_UNSAFE_CONFIGURE=1 \ +./configure --prefix=/usr \ + --bindir=/bin</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><envar>FORCE_UNSAFE_CONFIGURE=1</envar></term> + <listitem> + <para>This forces the test for <function>mknod</function> to be run + as root. It is generally considered dangerous to run this test as + the root user, but as it is being run on a system that has only been + partially built, overriding it is OK.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results (about 3 SBU), issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + +<!-- Seems to pass for version 1.31. Keeping as a comment just in case... + <para>One test, link mismatch, is known to fail.</para> +--> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install +make -C doc install-html docdir=/usr/share/doc/tar-&tar-version;</userinput></screen> + + </sect2> + + + <sect2 id="contents-tar" role="content"> + <title>Contents of Tar</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>tar</seg> + <seg>/usr/share/doc/tar-&tar-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="tar"> + <term><command>tar</command></term> + <listitem> + <para>Creates, extracts files from, and lists the contents of 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/chapter08/texinfo.xml b/chapter08/texinfo.xml new file mode 100644 index 000000000..d61df477b --- /dev/null +++ b/chapter08/texinfo.xml @@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-texinfo" role="wrap"> + <?dbhtml filename="texinfo.html"?> + + <sect1info condition="script"> + <productname>texinfo</productname> + <productnumber>&texinfo-version;</productnumber> + <address>&texinfo-url;</address> + </sect1info> + + <title>Texinfo-&texinfo-version;</title> + + <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 pages.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&texinfo-ch6-sbu;</seg> + <seg>&texinfo-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Texinfo</title> + + <para>Prepare Texinfo for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --disable-static</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--disable-static</parameter></term> + <listitem> + <para>In this case, the top-level configure script will complain that + this is an unrecognized option, but the configure script for + XSParagraph recognizes it and uses it to disable installing a static + <filename class="libraryfile">XSParagraph.a</filename> to <filename + class="directory">/usr/lib/texinfo</filename>.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Optionally, install the components belonging in a TeX + installation:</para> + <!-- FIXME: doesn't the TeX installation in BLFS overwrite files there? --> + +<screen><userinput remap="install">make TEXMF=/usr/share/texmf install-tex</userinput></screen> + + <variablelist> + <title>The meaning of the make parameter:</title> + + <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 sync with the info pages 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 role="nodump"><userinput>pushd /usr/share/info +rm -v dir +for f in * + do install-info $f dir 2>/dev/null +done +popd</userinput></screen> + + </sect2> + + <sect2 id="contents-texinfo" role="content"> + <title>Contents of Texinfo</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>info, install-info, makeinfo (link to texi2any), + pdftexi2dvi, pod2texi, texi2any, texi2dvi, texi2pdf, and texindex</seg> + <seg>MiscXS.so, Parsetexi.so, and XSParagraph.so + (all in /usr/lib/texinfo)</seg> + <seg>/usr/share/texinfo and /usr/lib/texinfo</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="info"> + <term><command>info</command></term> + <listitem> + <para>Used to read info pages which are similar to man pages, but + often go much deeper than just explaining all the available 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="install-info"> + <term><command>install-info</command></term> + <listitem> + <para>Used to install info pages; it updates entries in the + <command>info</command> 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 pages, plain text, or HTML</para> + <indexterm zone="ch-system-texinfo makeinfo"> + <primary sortas="b-makeinfo">makeinfo</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pdftexi2dvi"> + <term><command>pdftexi2dvi</command></term> + <listitem> + <para>Used to format the given Texinfo document into a + Portable Document Format (PDF) file</para> + <indexterm zone="ch-system-texinfo pdftexi2dvi"> + <primary sortas="b-pdftexi2dvi">pdftexi2dvi</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pod2texi"> + <term><command>pod2texi</command></term> + <listitem> + <para>Converts Pod to Texinfo format</para> + <indexterm zone="ch-system-texinfo pod2texi"> + <primary sortas="b-pod2texi">pod2texi</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="texi2any"> + <term><command>texi2any</command></term> + <listitem> + <para>Translate Texinfo source documentation to + various other formats</para> + <indexterm zone="ch-system-texinfo texi2any"> + <primary sortas="b-texiany">texi2any</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="texi2pdf"> + <term><command>texi2pdf</command></term> + <listitem> + <para>Used to format the given Texinfo document into a + Portable Document Format (PDF) file</para> + <indexterm zone="ch-system-texinfo texi2pdf"> + <primary sortas="b-texi2pdf">texi2pdf</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/chapter08/util-linux.xml b/chapter08/util-linux.xml new file mode 100644 index 000000000..519c3b171 --- /dev/null +++ b/chapter08/util-linux.xml @@ -0,0 +1,1319 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-util-linux" role="wrap"> + <?dbhtml filename="util-linux.html"?> + + <sect1info condition="script"> + <productname>util-linux</productname> + <productnumber>&util-linux-version;</productnumber> + <address>&util-linux-url;</address> + </sect1info> + + <title>Util-linux-&util-linux-version;</title> + + <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> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&util-linux-ch6-sbu;</seg> + <seg>&util-linux-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Util-linux</title> + + <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. Create this directory + with:</para> + +<screen><userinput remap="pre">mkdir -pv /var/lib/hwclock</userinput></screen> + + <para>Prepare Util-linux for compilation:</para> + +<screen revision="sysv"><userinput remap="configure">./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --docdir=/usr/share/doc/util-linux-&util-linux-version; \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python \ + --without-systemd \ + --without-systemdsystemunitdir</userinput></screen> + +<screen revision="systemd"><userinput remap="configure">./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --docdir=/usr/share/doc/util-linux-&util-linux-version; \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python</userinput></screen> + + <para>The --disable and --without options prevent warnings about + building components that require packages not in LFS or are + inconsistent with programs installed by other packages.</para> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>If desired, run the test suite as a non-root user:</para> + + <warning><para>Running the test suite as the root user can be harmful to + your system. To run it, the CONFIG_SCSI_DEBUG option for the kernel must + be available in the currently running system, and must be built as a + module. Building it into the kernel will prevent booting. For complete + coverage, other BLFS packages must be installed. If desired, this test can + be run after rebooting into the completed LFS system and running:</para> + +<screen role="nodump"><userinput>bash tests/run.sh --srcdir=$PWD --builddir=$PWD</userinput></screen> + </warning> + +<screen><userinput remap="test">chown -Rv tester . +su tester -c "make -k check"</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-utillinux" role="content"> + <title>Contents of Util-linux</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>addpart, agetty, blkdiscard, blkid, blkzone, blockdev, cal, cfdisk, chcpu, + chmem, choom, chrt, col, colcrt, colrm, column, ctrlaltdel, delpart, dmesg, + eject, fallocate, fdformat, fdisk, fincore, findfs, findmnt, flock, fsck, + fsck.cramfs, fsck.minix, fsfreeze, fstrim, getopt, hexdump, hwclock, + i386, ionice, ipcmk, ipcrm, ipcs, isosize, kill, last, lastb (link to + last), ldattach, linux32, linux64, logger, look, losetup, lsblk, lscpu, + lsipc, lslocks, lslogins, lsmem, lsns, mcookie, mesg, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, + more, mount, mountpoint, namei, nsenter, partx, pivot_root, prlimit, raw, + readprofile, rename, renice, resizepart, rev, rfkill, rtcwake, script, + scriptreplay, setarch, setsid, setterm, sfdisk, sulogin, swaplabel, + swapoff (link to swapon), swapon, switch_root, taskset, ul, + umount, uname26, unshare, utmpdump, uuidd, uuidgen, uuidparse, wall, wdctl, whereis, + wipefs, x86_64, and zramctl</seg> + <seg>libblkid.so, libfdisk.so, libmount.so, + libsmartcols.so, and libuuid.so</seg> + <seg>/usr/include/blkid, + /usr/include/libfdisk, + /usr/include/libmount, + /usr/include/libsmartcols, + /usr/include/uuid, + /usr/share/doc/util-linux-&util-linux-version;, + and /var/lib/hwclock</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="addpart"> + <term><command>addpart</command></term> + <listitem> + <para>Informs the Linux kernel of new partitions</para> + <indexterm zone="ch-system-util-linux addpart"> + <primary sortas="b-addpart">addpart</primary> + </indexterm> + </listitem> + </varlistentry> + + <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="blkdiscard"> + <term><command>blkdiscard</command></term> + <listitem> + <para>Discards sectors on a device</para> + <indexterm zone="ch-system-util-linux blkdiscard"> + <primary sortas="b-blkdiscard">blkdiscard</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-util-linux blkid"> + <primary sortas="b-blkid">blkid</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="blkzone"> + <term><command>blkzone</command></term> + <listitem> + <para>Runs zone command on the given block device</para> + <indexterm zone="ch-system-util-linux blkzone"> + <primary sortas="b-blkzone">blkzone</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="chcpu"> + <term><command>chcpu</command></term> + <listitem> + <para>Modifies the state of CPUs</para> + <indexterm zone="ch-system-util-linux chcpu"> + <primary sortas="b-chcpu">chcpu</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="chmem"> + <term><command>chmem</command></term> + <listitem> + <para>Configures memory</para> + <indexterm zone="ch-system-util-linux chmem"> + <primary sortas="b-chmem">chmem</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="choom"> + <term><command>choom</command></term> + <listitem> + <para>Displays and adjusts OOM-killer score</para> + <indexterm zone="ch-system-util-linux choom"> + <primary sortas="b-choom">choom</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="chrt"> + <term><command>chrt</command></term> + <listitem> + <para>Manipulates real-time attributes of a process</para> + <indexterm zone="ch-system-util-linux chrt"> + <primary sortas="b-chrt">chrt</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="delpart"> + <term><command>delpart</command></term> + <listitem> + <para>Asks the Linux kernel to remove a partition</para> + <indexterm zone="ch-system-util-linux delpart"> + <primary sortas="b-delpart">delpart</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="eject"> + <term><command>eject</command></term> + <listitem> + <para>Ejects removable media</para> + <indexterm zone="ch-system-util-linux eject"> + <primary sortas="b-eject">eject</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="fallocate"> + <term><command>fallocate</command></term> + <listitem> + <para>Preallocates space to a file</para> + <indexterm zone="ch-system-util-linux fallocate"> + <primary sortas="b-fallocate">fallocate</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="fincore"> + <term><command>fincore</command></term> + <listitem> + <para>Counts pages of file contents in core</para> + <indexterm zone="ch-system-util-linux fincore"> + <primary sortas="b-fincore">fincore</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-util-linux findfs"> + <primary sortas="b-findfs">findfs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="findmnt"> + <term><command>findmnt</command></term> + <listitem> + <para>Is a command line interface to the libmount library + for work with mountinfo, fstab and mtab files</para> + <indexterm zone="ch-system-util-linux findmnt"> + <primary sortas="b-findmnt">findmnt</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="flock"> + <term><command>flock</command></term> + <listitem> + <para>Acquires a file lock and then executes a command with the lock + held</para> + <indexterm zone="ch-system-util-linux flock"> + <primary sortas="b-flock">flock</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-util-linux fsck"> + <primary sortas="b-fsck">fsck</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="fsfreeze"> + <term><command>fsfreeze</command></term> + <listitem> + <para>Is a very simple wrapper around FIFREEZE/FITHAW ioctl + kernel driver operations</para> + <indexterm zone="ch-system-util-linux fsfreeze"> + <primary sortas="b-fsfreeze">fsfreeze</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="fstrim"> + <term><command>fstrim</command></term> + <listitem> + <para>Discards unused blocks on a mounted filesystem</para> + <indexterm zone="ch-system-util-linux fstrim"> + <primary sortas="b-fstrim">fstrim</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="i386"> + <term><command>i386</command></term> + <listitem> + <para>A symbolic link to setarch</para> + <indexterm zone="ch-system-util-linux i386"> + <primary sortas="b-i386">i386</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ionice"> + <term><command>ionice</command></term> + <listitem> + <para>Gets or sets the io scheduling class and priority for a program</para> + <indexterm zone="ch-system-util-linux ionice"> + <primary sortas="b-ionice">ionice</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ipcmk"> + <term><command>ipcmk</command></term> + <listitem> + <para>Creates various IPC resources</para> + <indexterm zone="ch-system-util-linux ipcmk"> + <primary sortas="b-ipcmk">ipcmk</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="kill"> + <term><command>kill</command></term> + <listitem> + <para>Sends signals to processes</para> + <indexterm zone="ch-system-util-linux kill"> + <primary sortas="b-kill">kill</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-util-linux 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-util-linux lastb"> + <primary sortas="b-lastb">lastb</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ldattach"> + <term><command>ldattach</command></term> + <listitem> + <para>Attaches a line discipline to a serial line</para> + <indexterm zone="ch-system-util-linux ldattach"> + <primary sortas="b-ldattach">ldattach</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="linux32"> + <term><command>linux32</command></term> + <listitem> + <para>A symbolic link to setarch</para> + <indexterm zone="ch-system-util-linux linux32"> + <primary sortas="b-linux32">linux32</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="linux64"> + <term><command>linux64</command></term> + <listitem> + <para>A symbolic link to setarch</para> + <indexterm zone="ch-system-util-linux linux64"> + <primary sortas="b-linux64">linux64</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="lsblk"> + <term><command>lsblk</command></term> + <listitem> + <para>Lists information about all or selected block devices in + a tree-like format</para> + <indexterm zone="ch-system-util-linux lsblk"> + <primary sortas="b-lsblk">lsblk</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lscpu"> + <term><command>lscpu</command></term> + <listitem> + <para>Prints CPU architecture information</para> + <indexterm zone="ch-system-util-linux lscpu"> + <primary sortas="b-lscpu">lscpu</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lsipc"> + <term><command>lsipc</command></term> + <listitem> + <para>Prints information on IPC facilities currently employed + in the system</para> + <indexterm zone="ch-system-util-linux lsipc"> + <primary sortas="b-lsipc">lsipc</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lslocks"> + <term><command>lslocks</command></term> + <listitem> + <para>Lists local system locks</para> + <indexterm zone="ch-system-util-linux lslocks"> + <primary sortas="b-lslocks">lslocks</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lslogins"> + <term><command>lslogins</command></term> + <listitem> + <para>Lists information about users, groups and system accounts</para> + <indexterm zone="ch-system-util-linux lslogins"> + <primary sortas="b-lslogins">lslogins</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lsmem"> + <term><command>lsmem</command></term> + <listitem> + <para>Lists the ranges of available memory with their online + status</para> + <indexterm zone="ch-system-util-linux lsmem"> + <primary sortas="b-lsmem">lsmem</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lsns"> + <term><command>lsns</command></term> + <listitem> + <para>Lists namespaces</para> + <indexterm zone="ch-system-util-linux lsns"> + <primary sortas="b-lsns">lsns</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="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-util-linux mesg"> + <primary sortas="b-mesg">mesg</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 a 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="mountpoint"> + <term><command>mountpoint</command></term> + <listitem> + <para>Checks if the directory is a mountpoint</para> + <indexterm zone="ch-system-util-linux mountpoint"> + <primary sortas="b-mountpoint">mountpoint</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="nsenter"> + <term><command>nsenter</command></term> + <listitem> + <para>Runs a program with namespaces of other processes</para> + <indexterm zone="ch-system-util-linux nsenter"> + <primary sortas="b-nsenter">nsenter</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="partx"> + <term><command>partx</command></term> + <listitem> + <para>Tells the kernel about the presence and numbering of on-disk + partitions</para> + <indexterm zone="ch-system-util-linux partx"> + <primary sortas="b-partx">partx</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="prlimit"> + <term><command>prlimit</command></term> + <listitem> + <para>Get and set a process' resource limits</para> + <indexterm zone="ch-system-util-linux prlimit"> + <primary sortas="b-prlimit">prlimit</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="raw"> + <term><command>raw</command></term> + <listitem> + <para>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="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="resizepart"> + <term><command>resizepart</command></term> + <listitem> + <para>Asks the Linux kernel to resize a partition</para> + <indexterm zone="ch-system-util-linux resizepart"> + <primary sortas="b-resizepart">resizepart</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="rkfill"> + <term><command>rkfill</command></term> + <listitem> + <para>Tool for enabling and disabling wireless devices</para> + <indexterm zone="ch-system-util-linux rkfill"> + <primary sortas="b-rkfill">rkfill</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rtcwake"> + <term><command>rtcwake</command></term> + <listitem> + <para>Used to enter a system sleep state until specified wakeup + time</para> + <indexterm zone="ch-system-util-linux rtcwake"> + <primary sortas="b-rtcwake">rtcwake</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="scriptreplay"> + <term><command>scriptreplay</command></term> + <listitem> + <para>Plays back typescripts using timing information</para> + <indexterm zone="ch-system-util-linux scriptreplay"> + <primary sortas="b-scriptreplay">scriptreplay</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="setarch"> + <term><command>setarch</command></term> + <listitem> + <para>Changes reported architecture in a new program environment and + sets personality flags</para> + <indexterm zone="ch-system-util-linux setarch"> + <primary sortas="b-setarch">setarch</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="sulogin"> + <term><command>sulogin</command></term> + <listitem> + <para>Allows <systemitem class="username">root</systemitem> to log in; + it is normally invoked by <command>init</command> when the system goes + into single user mode</para> + <indexterm zone="ch-system-util-linux sulogin"> + <primary sortas="b-sulogin">sulogin</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="swaplabel"> + <term><command>swaplabel</command></term> + <listitem> + <para>Allows to change swaparea UUID and label</para> + <indexterm zone="ch-system-util-linux swaplabel"> + <primary sortas="b-swaplabel">swaplabel</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 and + lists the devices and files currently in use</para> + <indexterm zone="ch-system-util-linux swapon"> + <primary sortas="b-swapon">swapon</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="switch_root"> + <term><command>switch_root</command></term> + <listitem> + <para>Switches to another filesystem as the root of the mount tree</para> + <indexterm zone="ch-system-util-linux switch_root"> + <primary sortas="b-switch_root">switch_root</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="tailf"> + <term><command>tailf</command></term> + <listitem> + <para>Tracks the growth of a log file; displays the last 10 lines + of a log file, then continues displaying any new entries in the + log file as they are created</para> + <indexterm zone="ch-system-util-linux tailf"> + <primary sortas="b-tailf">tailf</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="taskset"> + <term><command>taskset</command></term> + <listitem> + <para>Retrieves or sets a process' CPU affinity</para> + <indexterm zone="ch-system-util-linux taskset"> + <primary sortas="b-taskset">taskset</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="uname26"> + <term><command>uname26</command></term> + <listitem> + <para>A symbolic link to setarch</para> + <indexterm zone="ch-system-util-linux uname26"> + <primary sortas="b-uname26">uname26</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="unshare"> + <term><command>unshare</command></term> + <listitem> + <para>Runs a program with some namespaces unshared from parent</para> + <indexterm zone="ch-system-util-linux unshare"> + <primary sortas="b-unshare">unshare</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-util-linux utmpdump"> + <primary sortas="b-utmpdump">utmpdump</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="uuidd"> + <term><command>uuidd</command></term> + <listitem> + <para>A daemon used by the UUID library to generate time-based + UUIDs in a secure and guaranteed-unique fashion</para> + <indexterm zone="ch-system-util-linux uuidd"> + <primary sortas="b-uuidd">uuidd</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-util-linux uuidgen"> + <primary sortas="b-uuidgen">uuidgen</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="uuidparse"> + <term><command>uuidparse</command></term> + <listitem> + <para>An utility to parse unique identifiers</para> + <indexterm zone="ch-system-util-linux uuidparse"> + <primary sortas="b-uuidparse">uuidparse</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="wall"> + <term><command>wall</command></term> + <listitem> + <para>Displays the contents of a file or, by default, its standard + input, on the terminals of all currently logged in users</para> + <indexterm zone="ch-system-util-linux wall"> + <primary sortas="b-wall">wall</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="wdctl"> + <term><command>wdctl</command></term> + <listitem> + <para>Shows hardware watchdog status</para> + <indexterm zone="ch-system-util-linux wdctl"> + <primary sortas="b-wdctl">wdctl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="whereis"> + <term><command>whereis</command></term> + <listitem> + <para>Reports the location of the binary, source, and man page + for the given command</para> + <indexterm zone="ch-system-util-linux whereis"> + <primary sortas="b-whereis">whereis</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="wipefs"> + <term><command>wipefs</command></term> + <listitem> + <para>Wipes a filesystem signature from a device</para> + <indexterm zone="ch-system-util-linux wipefs"> + <primary sortas="b-wipefs">wipefs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="x86_64"> + <term><command>x86_64</command></term> + <listitem> + <para>A symbolic link to setarch</para> + <indexterm zone="ch-system-util-linux x86_64"> + <primary sortas="b-x86_64">x86_64</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="zramctl"> + <term><command>zramctl</command></term> + <listitem> + <para>A program to set up and control zram (compressed ram disk) + devices</para> + <indexterm zone="ch-system-util-linux zramctl"> + <primary sortas="b-zramctl">zramctl</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-util-linux libblkid"> + <primary sortas="c-libblkid">libblkid</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libfdisk"> + <term><filename class="libraryfile">libfdisk</filename></term> + <listitem> + <para>Contains routines for manipulating partition tables</para> + <indexterm zone="ch-system-util-linux libfdisk"> + <primary sortas="c-libfdisk">libfdisk</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libmount"> + <term><filename class="libraryfile">libmount</filename></term> + <listitem> + <para>Contains routines for block device mounting and + unmounting</para> + <indexterm zone="ch-system-util-linux libmount"> + <primary sortas="c-libmount">libmount</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libsmartcols"> + <term><filename class="libraryfile">libsmartcols</filename></term> + <listitem> + <para>Contains routines for aiding screen output in tabular form</para> + <indexterm zone="ch-system-util-linux libsmartcols"> + <primary sortas="c-libsmartcols">libsmartcols</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-util-linux libuuid"> + <primary sortas="c-libuuid">libuuid</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/vim.xml b/chapter08/vim.xml index 263122bd7..263122bd7 100644 --- a/chapter06/vim.xml +++ b/chapter08/vim.xml diff --git a/chapter06/xml-parser.xml b/chapter08/xml-parser.xml index 54d5bcb35..54d5bcb35 100644 --- a/chapter06/xml-parser.xml +++ b/chapter08/xml-parser.xml diff --git a/chapter08/xz.xml b/chapter08/xz.xml new file mode 100644 index 000000000..5a342b2ff --- /dev/null +++ b/chapter08/xz.xml @@ -0,0 +1,364 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-xz" role="wrap"> + <?dbhtml filename="xz.html"?> + + <sect1info condition="script"> + <productname>xz</productname> + <productnumber>&xz-version;</productnumber> + <address>&xz-url;</address> + </sect1info> + + <title>Xz-&xz-version;</title> + + <indexterm zone="ch-system-xz"> + <primary sortas="a-xz">Xz</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Xz package contains programs for compressing and decompressing + files. It provides capabilities for the lzma and the newer xz compression + formats. Compressing text files with <command>xz</command> yields a better + compression percentage than with the traditional <command>gzip</command> or + <command>bzip2</command> commands.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&xz-ch6-sbu;</seg> + <seg>&xz-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Xz</title> + + <para>Prepare Xz for compilation with:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/xz-&xz-version;</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package and make sure that all essential files are in the + correct directory:</para> + +<screen><userinput remap="install">make install +mv -v /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin +mv -v /usr/lib/liblzma.so.* /lib +ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so</userinput></screen> + + </sect2> + + <sect2 id="contents-xz" role="content"> + <title>Contents of Xz</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg> + lzcat (link to xz), + lzcmp (link to xzdiff), + lzdiff (link to xzdiff), + lzegrep (link to xzgrep), + lzfgrep (link to xzgrep), + lzgrep (link to xzgrep), + lzless (link to xzless), + lzma (link to xz), + lzmadec, + lzmainfo, + lzmore (link to xzmore), + unlzma (link to xz), + unxz (link to xz), + xz, + xzcat (link to xz), + xzcmp (link to xzdiff), + xzdec, + xzdiff, + xzegrep (link to xzgrep), + xzfgrep (link to xzgrep), + xzgrep, + xzless, and + xzmore</seg> + <seg> + liblzma.so + </seg> + <seg> + /usr/include/lzma and + /usr/share/doc/xz-&xz-version; + </seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="lzcat"> + <term><command>lzcat</command></term> + <listitem> + <para>Decompresses to standard output</para> + <indexterm zone="ch-system-xz lzcat"> + <primary sortas="b-lzcat">lzcat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzcmp"> + <term><command>lzcmp</command></term> + <listitem> + <para>Runs <command>cmp</command> on LZMA compressed files</para> + <indexterm zone="ch-system-xz lzcmp"> + <primary sortas="b-lzcmp">lzcmp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzdiff"> + <term><command>lzdiff</command></term> + <listitem> + <para>Runs <command>diff</command> on LZMA compressed files</para> + <indexterm zone="ch-system-xz lzdiff"> + <primary sortas="b-lzdiff">lzdiff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzegrep"> + <term><command>lzegrep</command></term> + <listitem> + <para>Runs <command>egrep</command> on LZMA compressed files</para> + <indexterm zone="ch-system-xz lzegrep"> + <primary sortas="b-lzegrep">lzegrep</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzfgrep"> + <term><command>lzfgrep</command></term> + <listitem> + <para>Runs <command>fgrep</command> on LZMA compressed files</para> + <indexterm zone="ch-system-xz lzfgrep"> + <primary sortas="b-lzfgrep">lzfgrep</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzgrep"> + <term><command>lzgrep</command></term> + <listitem> + <para>Runs <command>grep</command> on LZMA compressed files</para> + <indexterm zone="ch-system-xz lzgrep"> + <primary sortas="b-lzgrep">lzgrep</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzless"> + <term><command>lzless</command></term> + <listitem> + <para>Runs <command>less</command> on LZMA compressed files</para> + <indexterm zone="ch-system-xz lzless"> + <primary sortas="b-lzless">lzless</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzma"> + <term><command>lzma</command></term> + <listitem> + <para>Compresses or decompresses files using the LZMA format</para> + <indexterm zone="ch-system-xz lzma"> + <primary sortas="b-lzma">lzma</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzmadec"> + <term><command>lzmadec</command></term> + <listitem> + <para>A small and fast decoder for LZMA compressed files</para> + <indexterm zone="ch-system-xz lzmadec"> + <primary sortas="b-lzmadec">lzmadec</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzmainfo"> + <term><command>lzmainfo</command></term> + <listitem> + <para>Shows information stored in the LZMA compressed file header</para> + <indexterm zone="ch-system-xz lzmainfo"> + <primary sortas="b-lzmainfo">lzmainfo</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lzmore"> + <term><command>lzmore</command></term> + <listitem> + <para>Runs <command>more</command> on LZMA compressed files</para> + <indexterm zone="ch-system-xz lzmore"> + <primary sortas="b-lzmamore">lzmore</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="unlzma"> + <term><command>unlzma</command></term> + <listitem> + <para>Decompresses files using the LZMA format</para> + <indexterm zone="ch-system-xz unlzma"> + <primary sortas="b-unlzma">unlzma</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="unxz"> + <term><command>unxz</command></term> + <listitem> + <para>Decompresses files using the XZ format</para> + <indexterm zone="ch-system-xz unxz"> + <primary sortas="b-unxz">unxz</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xz"> + <term><command>xz</command></term> + <listitem> + <para>Compresses or decompresses files using the XZ format</para> + <indexterm zone="ch-system-xz xz"> + <primary sortas="b-xz">xz</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xzcat"> + <term><command>xzcat</command></term> + <listitem> + <para>Decompresses to standard output</para> + <indexterm zone="ch-system-xz xzcat"> + <primary sortas="b-xzcat">xzcat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xzcmp"> + <term><command>xzcmp</command></term> + <listitem> + <para>Runs <command>cmp</command> on XZ compressed files</para> + <indexterm zone="ch-system-xz xzcmp"> + <primary sortas="b-xzcmp">xzcmp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xzdec"> + <term><command>xzdec</command></term> + <listitem> + <para>A small and fast decoder for XZ compressed files</para> + <indexterm zone="ch-system-xz xzdec"> + <primary sortas="b-xzdec">xzdec</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xzdiff"> + <term><command>xzdiff</command></term> + <listitem> + <para>Runs <command>diff</command> on XZ compressed files</para> + <indexterm zone="ch-system-xz xzdiff"> + <primary sortas="b-xzdiff">xzdiff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xzegrep"> + <term><command>xzegrep</command></term> + <listitem> + <para>Runs <command>egrep</command> on XZ compressed files</para> + <indexterm zone="ch-system-xz xzegrep"> + <primary sortas="b-xzegrep">xzegrep</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xzfgrep"> + <term><command>xzfgrep</command></term> + <listitem> + <para>Runs <command>fgrep</command> on XZ compressed files</para> + <indexterm zone="ch-system-xz xzfgrep"> + <primary sortas="b-xzfgrep">xzfgrep</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xzgrep"> + <term><command>xzgrep</command></term> + <listitem> + <para>Runs <command>grep</command> on XZ compressed files</para> + <indexterm zone="ch-system-xz xzgrep"> + <primary sortas="b-xzgrep">xzgrep</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xzless"> + <term><command>xzless</command></term> + <listitem> + <para>Runs <command>less</command> on XZ compressed files</para> + <indexterm zone="ch-system-xz xzless"> + <primary sortas="b-xzless">xzless</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xzmore"> + <term><command>xzmore</command></term> + <listitem> + <para>Runs <command>more</command> on XZ compressed files</para> + <indexterm zone="ch-system-xz xzmore"> + <primary sortas="b-xzmore">xzmore</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="liblzma"> + <term><filename class="libraryfile">liblzma</filename></term> + <listitem> + <para>The library implementing lossless, block-sorting data + compression, using the Lempel-Ziv-Markov chain algorithm</para> + <indexterm zone="ch-system-xz liblzma"> + <primary sortas="c-liblzma">liblzma</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter06/zlib.xml b/chapter08/zlib.xml index 2dcc49413..2dcc49413 100644 --- a/chapter06/zlib.xml +++ b/chapter08/zlib.xml diff --git a/chapter06/zstd.xml b/chapter08/zstd.xml index 71e7794b6..71e7794b6 100644 --- a/chapter06/zstd.xml +++ b/chapter08/zstd.xml diff --git a/chapter07/bootscripts.xml b/chapter09/bootscripts.xml index 5c2b28d7c..5c2b28d7c 100644 --- a/chapter07/bootscripts.xml +++ b/chapter09/bootscripts.xml diff --git a/chapter09/chapter09.xml b/chapter09/chapter09.xml index c8deeb388..499e66a6f 100644 --- a/chapter09/chapter09.xml +++ b/chapter09/chapter09.xml @@ -5,15 +5,39 @@ %general-entities; ]> -<chapter id="chapter-finalizing" xreflabel="Chapter 9"> +<chapter id="chapter-config" xreflabel="Chapter 9"> <?dbhtml dir="chapter09"?> <?dbhtml filename="chapter09.html"?> - <title>The End</title> + <title>System Configuration</title> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="theend.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="getcounted.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="reboot.xml"/> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="whatnow.xml"/> + <!-- sysv --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introduction.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="bootscripts.xml"/> + + <!-- systemd --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introductiond.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="networkd.xml"/> + + <!-- common --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="udev.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="symlinks.xml"/> + + <!-- sysv --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="network.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="usage.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="profile.xml"/> + + <!-- systemd --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="clock.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="consoled.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="locale.xml"/> + + <!-- common --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="inputrc.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="etcshells.xml"/> + + <!-- systemd --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="systemd-custom.xml"/> </chapter> diff --git a/chapter07/clock.xml b/chapter09/clock.xml index 872ba677c..872ba677c 100644 --- a/chapter07/clock.xml +++ b/chapter09/clock.xml diff --git a/chapter07/consoled.xml b/chapter09/consoled.xml index bf1fdc8e0..bf1fdc8e0 100644 --- a/chapter07/consoled.xml +++ b/chapter09/consoled.xml diff --git a/chapter07/etcshells.xml b/chapter09/etcshells.xml index 30961c80c..30961c80c 100644 --- a/chapter07/etcshells.xml +++ b/chapter09/etcshells.xml diff --git a/chapter07/inputrc.xml b/chapter09/inputrc.xml index 00d36877f..00d36877f 100644 --- a/chapter07/inputrc.xml +++ b/chapter09/inputrc.xml diff --git a/chapter09/introduction.xml b/chapter09/introduction.xml new file mode 100644 index 000000000..cbc197a7b --- /dev/null +++ b/chapter09/introduction.xml @@ -0,0 +1,225 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-config-introduction" revision="sysv"> + <?dbhtml filename="introduction.html"?> + + <title>Introduction</title> + + <para>Booting a Linux system involves several tasks. The process must + mount both virtual and real file systems, initialize devices, activate swap, + check file systems for integrity, mount any swap partitions or files, set + the system clock, bring up networking, start any daemons required by the + system, and accomplish any other custom tasks needed by the user. This + process must be organized to ensure the tasks are performed in the correct + order but, at the same time, be executed as fast as possible.</para> + +<!-- <para>In the packages that were installed in Chapter 6, there were two + different boot systems installed. LFS provides the ability to easily + select which system the user wants to use and to compare and contrast the + two systems by actually running each system on the local computer. The + advantages and disadvantages of these systems is presented below.</para>--> + + <sect2 id='sysv-desc'> + <title>System V</title> + + <para>System V is the classic boot process that has been used in Unix and + Unix-like systems such as Linux since about 1983. It consists of a small + program, <command>init</command>, that sets up basic programs such as + <command>login</command> (via getty) and runs a script. This script, + usually named <command>rc</command>, controls the execution of a set of + additional scripts that perform the tasks required to initialize the + system.</para> + + <para>The <command>init</command> program is controlled by the + <filename>/etc/inittab</filename> file and is organized into run levels that + can be run by the user:</para> + +<literallayout> +0 — halt +1 — Single user mode +2 — Multiuser, without networking +3 — Full multiuser mode +4 — User definable +5 — Full multiuser mode with display manager +6 — reboot +</literallayout> + + <para>The usual default run level is 3 or 5.</para> + + <bridgehead renderas="sect3">Advantages</bridgehead> + + <itemizedlist> + <listitem> + <para>Established, well understood system.</para> + </listitem> + + <listitem> + <para>Easy to customize.</para> + </listitem> + + </itemizedlist> + + + <bridgehead renderas="sect3">Disadvantages</bridgehead> + + <itemizedlist> + <listitem> + <para>Slower to boot. A medium speed base LFS system + takes 8-12 seconds where the boot time is measured from the + first kernel message to the login prompt. Network + connectivity is typically established about 2 seconds + after the login prompt.</para> + </listitem> + + <listitem> + <para>Serial processing of boot tasks. This is related to the previous + point. A delay in any process such as a file system check, will + delay the entire boot process.</para> + </listitem> + + <listitem> + <para>Does not directly support advanced features like + control groups (cgroups), and per-user fair share scheduling.</para> + </listitem> + + <listitem> + <para>Adding scripts requires manual, static sequencing decisions.</para> + </listitem> + + </itemizedlist> + + </sect2> +<!-- + <sect2 id='sysd-desc'> + <title>Systemd</title> + + <para>Systemd is a group of interconnected programs that handles system and + individual process requests. It provides a dependency system between + various entities called "units". It automatically addresses dependencies + between units and can execute several startup tasks in parallel. It + provides login, inetd, logging, time, and networking services. </para> + + <bridgehead renderas="sect3">Advantages</bridgehead> + + <itemizedlist> + <listitem> + <para>Used on many established distributions by default.</para> + </listitem> + + <listitem> + <para>There is extensive documentation. + See <ulink url="http://www.freedesktop.org/wiki/Software/systemd/"/>.</para> + </listitem> + + <listitem> + <para>Parallel execution of boot processes. A medium speed + base LFS system takes 6-10 seconds from kernel start to a + login prompt. Network connectivity is typically established + about 2 seconds after the login prompt. More complex startup + procedures may show a greater speedup when compared to System V.</para> + </listitem> + + <listitem> + <para>Implements advanced features such as control groups to + manage related processes.</para> + </listitem> + + <listitem> + <para>Maintains backward compatibility with System V programs + and scripts.</para> + </listitem> + </itemizedlist> + + <bridgehead renderas="sect3">Disadvantages</bridgehead> + + <itemizedlist> + <listitem> + <para>There is a substantial learning curve.</para> + </listitem> + + <listitem> + <para>Some advanced features such as dbus or cgroups cannot be + disabled if they are not otherwise needed.</para> + </listitem> + + <listitem> + <para>Although implemented as several executable programs + the user cannot choose to implement only the portions desired.</para> + </listitem> + + <listitem> + <para>Due to the nature of using compiled programs, systemd is + more difficult to debug.</para> + </listitem> + + <listitem> + <para>Logging is done in a binary format. Extra tools must + be used to process logs or additional processes must be implemented + to duplicate traditional logging programs.</para> + </listitem> + + </itemizedlist> + + </sect2> +--> +<!-- + <sect2 id='sysv'> + <title>Selecting a Boot Method</title> + + <para>Selecting a boot method in LFS is relatively easy. + Both systems are installed side-by-side. The only task needed is to + ensure the files that are needed by the system have the correct names. + The following scripts do that.</para> + +<screen><userinput remap="install">cat > /usr/sbin/set-systemd << "EOF" +#! /bin/bash + +ln -svfn init-systemd /sbin/init +ln -svfn init.d-systemd /etc/init.d + +for tool in halt poweroff reboot runlevel shutdown telinit; do + ln -sfvn ${tool}-systemd /sbin/${tool} + ln -svfn ${tool}-systemd.8 /usr/share/man/man8/${tool}.8 +done + +echo "Now reboot with /sbin/reboot-sysv" +EOF + +chmod 0744 /usr/sbin/set-systemd + +cat > /usr/sbin/set-sysv << "EOF" +#! /bin/bash + +ln -sfvn init-sysv /sbin/init +ln -svfn init.d-sysv /etc/init.d + +for tool in halt poweroff reboot runlevel shutdown telinit; do + ln -sfvn ${tool}-sysv /sbin/${tool} + ln -svfn ${tool}-sysv.8 /usr/share/man/man8/${tool}.8 +done + +echo "Now reboot with /sbin/reboot-systemd" +EOF + +chmod 0744 /usr/sbin/set-sysv</userinput></screen> + + <note><para>The comment about the correct command to reboot in the + above scripts is correct. The reboot command for the current boot + system must be used after the script changes the default reboot command. + </para></note> + + <para>Now set the desired boot system. The default is System V:</para> + +<screen><userinput remap="install">/usr/sbin/set-sysv</userinput></screen> + + <para>Changing the boot system can be done at any time by running the + appropriate script above and rebooting.</para> + + </sect2> +--> +</sect1> diff --git a/chapter07/introductiond.xml b/chapter09/introductiond.xml index fa2403edb..fa2403edb 100644 --- a/chapter07/introductiond.xml +++ b/chapter09/introductiond.xml diff --git a/chapter07/locale.xml b/chapter09/locale.xml index 5f473ac72..5f473ac72 100644 --- a/chapter07/locale.xml +++ b/chapter09/locale.xml diff --git a/chapter07/network.xml b/chapter09/network.xml index b527258ee..b527258ee 100644 --- a/chapter07/network.xml +++ b/chapter09/network.xml diff --git a/chapter07/networkd.xml b/chapter09/networkd.xml index 688c315aa..688c315aa 100644 --- a/chapter07/networkd.xml +++ b/chapter09/networkd.xml diff --git a/chapter07/profile.xml b/chapter09/profile.xml index 226dd9fac..226dd9fac 100644 --- a/chapter07/profile.xml +++ b/chapter09/profile.xml diff --git a/chapter07/symlinks.xml b/chapter09/symlinks.xml index 951e6976d..951e6976d 100644 --- a/chapter07/symlinks.xml +++ b/chapter09/symlinks.xml diff --git a/chapter07/systemd-custom.xml b/chapter09/systemd-custom.xml index 787fd4572..787fd4572 100644 --- a/chapter07/systemd-custom.xml +++ b/chapter09/systemd-custom.xml diff --git a/chapter07/udev.xml b/chapter09/udev.xml index 6060849be..6060849be 100644 --- a/chapter07/udev.xml +++ b/chapter09/udev.xml diff --git a/chapter07/usage.xml b/chapter09/usage.xml index 4a4cf6c36..4a4cf6c36 100644 --- a/chapter07/usage.xml +++ b/chapter09/usage.xml diff --git a/chapter10/chapter10.xml b/chapter10/chapter10.xml new file mode 100644 index 000000000..d7236b21c --- /dev/null +++ b/chapter10/chapter10.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<chapter id="chapter-bootable" xreflabel="Chapter 10"> + <?dbhtml dir="chapter10"?> + <?dbhtml filename="chapter10.html"?> + + <title>Making the LFS System Bootable</title> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="introduction.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="fstab.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="kernel.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="grub.xml"/> + +</chapter> diff --git a/chapter08/fstab.xml b/chapter10/fstab.xml index ebfae3aaf..ebfae3aaf 100644 --- a/chapter08/fstab.xml +++ b/chapter10/fstab.xml diff --git a/chapter10/grub.xml b/chapter10/grub.xml new file mode 100644 index 000000000..d6897d5e5 --- /dev/null +++ b/chapter10/grub.xml @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-bootable-grub" role="wrap"> + <?dbhtml filename="grub.html"?> + + <sect1info condition="script"> + <productname>grub</productname> + <productnumber>&grub-version;</productnumber> + <address>&grub-url;</address> + </sect1info> + + <title>Using GRUB to Set Up the Boot Process</title> + + <sect2> + <title>Introduction</title> + + <warning><para>Configuring GRUB incorrectly can render your system + inoperable without an alternate boot device such as a CD-ROM. This + section is not required to boot your LFS system. You may just + want to modify your current boot loader, e.g. Grub-Legacy, GRUB2, or + LILO.</para></warning> + + + <para> Ensure that an emergency boot disk is ready to <quote>rescue</quote> + the computer if the computer becomes unusable (un-bootable). If you do not + already have a boot device, you can create one. In order for the procedure + below to work, you need to jump ahead to BLFS and install + <userinput>xorriso</userinput> from the <ulink + url="&blfs-book;multimedia/libisoburn.html"> + libisoburn</ulink> package.</para> + +<screen role="nodump"><userinput>cd /tmp +grub-mkrescue --output=grub-img.iso +xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso</userinput></screen> + + <note> + <para> + To boot LFS on host systems that have UEFI enabled, the kernel needs to + have been built with the CONFIG_EFI_STUB capabality described in the + previous section. However, LFS can be booted using GRUB2 without such + an addition. To do this, the UEFI Mode and Secure Boot capabilities in + the host system's BIOS need to be turned off. For details, see <ulink + url="&hints-root;lfs-uefi.txt"> + the lfs-uefi.txt hint</ulink> at + &hints-root;lfs-uefi.txt. + </para> + </note> + + </sect2> + + <sect2> + <title>GRUB Naming Conventions</title> + + <para>GRUB uses its own naming structure for drives and partitions in + the form of <emphasis>(hdn,m)</emphasis>, where <emphasis>n</emphasis> + is the hard drive number and <emphasis>m</emphasis> is the partition + number. The hard drive number starts from zero, but the partition number + starts from one for normal partitions and five for extended partitions. + Note that this is different from earlier versions where + both numbers started from zero. For example, partition <filename + class="partition">sda1</filename> is <emphasis>(hd0,1)</emphasis> to + GRUB and <filename class="partition">sdb3</filename> is + <emphasis>(hd1,3)</emphasis>. In contrast to Linux, GRUB does not + consider CD-ROM drives to be hard drives. For example, if using a CD + on <filename class="partition">hdb</filename> and a second hard drive + on <filename class="partition">hdc</filename>, that second hard drive + would still be <emphasis>(hd1)</emphasis>.</para> + + </sect2> + + <sect2> + <title>Setting Up the Configuration</title> + + <para>GRUB works by writing data to the first physical track of the + hard disk. This area is not part of any file system. The programs + there access GRUB modules in the boot partition. The default location + is /boot/grub/.</para> + + <para>The location of the boot partition is a choice of the user that + affects the configuration. One recommendation is to have a separate small + (suggested size is 100 MB) partition just for boot information. That way + each build, whether LFS or some commercial distro, can access the same boot + files and access can be made from any booted system. If you choose to do + this, you will need to mount the separate partition, move all files in the + current <filename class="directory">/boot</filename> directory (e.g. the + linux kernel you just built in the previous section) to the new partition. + You will then need to unmount the partition and remount it as <filename + class="directory">/boot</filename>. If you do this, be sure to update + <filename>/etc/fstab</filename>.</para> + + <para>Using the current lfs partition will also work, but configuration + for multiple systems is more difficult.</para> + + <para>Using the above information, determine the appropriate + designator for the root partition (or boot partition, if a separate + one is used). For the following example, it is assumed that the root + (or separate boot) partition is <filename + class="partition">sda2</filename>.</para> + + <para>Install the GRUB files into <filename + class="directory">/boot/grub</filename> and set up the boot track:</para> + + <warning> + <para>The following command will overwrite the current boot loader. Do not + run the command if this is not desired, for example, if using a third party + boot manager to manage the Master Boot Record (MBR).</para> + </warning> + +<screen role="nodump"><userinput>grub-install /dev/sda</userinput></screen> + + <note> + <para>If the system has been booted using UEFI, + <command>grub-install</command> will try to install files for the + <emphasis>x86_64-efi</emphasis> target, but those files + have not been installed in chapter 6. If this is the case, add + <option>--target i386-pc</option> to the command above.</para> + </note> + +<!-- This does not seem to be true any more + <note><para><application>grub-install</application> is a script and calls another + program, grub-probe, that may fail with a message "cannot stat `/dev/root'". + If so, create a temporary symbolic link from your root partition to /dev/root:</para> + +<screen role="nodump"><userinput>ln -sv /dev/sda2 /dev/root</userinput></screen> + + <para>The symbolic link will only be present until the system is rebooted. + The link is only needed for the installation procedure. + </para></note> +--> + </sect2> + + <sect2 id="grub-cfg"> + <title>Creating the GRUB Configuration File</title> + + <para>Generate <filename>/boot/grub/grub.cfg</filename>:</para> + + <screen revision="sysv"><userinput>cat > /boot/grub/grub.cfg << "EOF" +<literal># Begin /boot/grub/grub.cfg +set default=0 +set timeout=5 + +insmod ext2 +set root=(hd0,2) + +menuentry "GNU/Linux, Linux &linux-version;-lfs-&version;" { + linux /boot/vmlinuz-&linux-version;-lfs-&version; root=/dev/sda2 ro +}</literal> +EOF</userinput></screen> + + <screen revision="systemd"><userinput>cat > /boot/grub/grub.cfg << "EOF" +<literal># Begin /boot/grub/grub.cfg +set default=0 +set timeout=5 + +insmod ext2 +set root=(hd0,2) + +menuentry "GNU/Linux, Linux &linux-version;-lfs-&versiond;" { + linux /boot/vmlinuz-&linux-version;-lfs-&versiond; root=/dev/sda2 ro +}</literal> +EOF</userinput></screen> + + + <note><para>From <application>GRUB</application>'s perspective, the + kernel files are relative to the partition used. If you + used a separate /boot partition, remove /boot from the above + <emphasis>linux</emphasis> line. You will also need to change the + <emphasis>set root</emphasis> line to point to the boot partition. + </para></note> + + <para>GRUB is an extremely powerful program and it provides a tremendous + number of options for booting from a wide variety of devices, operating + systems, and partition types. There are also many options for customization + such as graphical splash screens, playing sounds, mouse input, etc. The + details of these options are beyond the scope of this introduction.</para> + + <caution><para>There is a command, <application>grub-mkconfig</application>, that + can write a configuration file automatically. It uses a set of scripts in + /etc/grub.d/ and will destroy any customizations that you make. These scripts + are designed primarily for non-source distributions and are not recommended for + LFS. If you install a commercial Linux distribution, there is a good chance + that this program will be run. Be sure to back up your grub.cfg file.</para></caution> + + </sect2> + +</sect1> diff --git a/chapter10/introduction.xml b/chapter10/introduction.xml new file mode 100644 index 000000000..5cb40b882 --- /dev/null +++ b/chapter10/introduction.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-bootable-introduction"> + <?dbhtml filename="introduction.html"?> + + <title>Introduction</title> + + <para>It is time to make the LFS system bootable. This chapter + discusses creating an <filename>fstab</filename> file, building a + kernel for the new LFS system, and installing the GRUB boot loader so + that the LFS system can be selected for booting at startup.</para> + +</sect1> diff --git a/chapter08/kernel.xml b/chapter10/kernel.xml index 0033028cf..0033028cf 100644 --- a/chapter08/kernel.xml +++ b/chapter10/kernel.xml diff --git a/chapter11/chapter11.xml b/chapter11/chapter11.xml new file mode 100644 index 000000000..8b4c53a1d --- /dev/null +++ b/chapter11/chapter11.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<chapter id="chapter-finalizing" xreflabel="Chapter 11"> + <?dbhtml dir="chapter11"?> + <?dbhtml filename="chapter11.html"?> + + <title>The End</title> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="theend.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="getcounted.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="reboot.xml"/> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="whatnow.xml"/> + +</chapter> diff --git a/chapter09/getcounted.xml b/chapter11/getcounted.xml index bc0ad8908..bc0ad8908 100644 --- a/chapter09/getcounted.xml +++ b/chapter11/getcounted.xml diff --git a/chapter09/reboot.xml b/chapter11/reboot.xml index c6a857dbd..c6a857dbd 100644 --- a/chapter09/reboot.xml +++ b/chapter11/reboot.xml diff --git a/chapter09/theend.xml b/chapter11/theend.xml index 9f2ca17cc..9f2ca17cc 100644 --- a/chapter09/theend.xml +++ b/chapter11/theend.xml diff --git a/chapter09/whatnow.xml b/chapter11/whatnow.xml index 273eb7740..273eb7740 100644 --- a/chapter09/whatnow.xml +++ b/chapter11/whatnow.xml diff --git a/general.ent b/general.ent index 0ce471efc..a0a3cd90f 100644 --- a/general.ent +++ b/general.ent @@ -1,13 +1,13 @@ -<!ENTITY version "20200603-cross-chap5"> +<!ENTITY version "20200603-cross2"> <!ENTITY short-version "svn"> <!-- Used below in &blfs-book; Change to x.y for release but not -rc releases --> <!ENTITY generic-version "cross-chap5"> <!-- Use "development" or "x.y[-pre{x}]" --> -<!ENTITY versiond "20200603-cross-cp5-systemd"> +<!ENTITY versiond "20200606-cross2-systemd"> <!ENTITY short-versiond "systemd"> <!ENTITY generic-versiond "systemd"> -<!ENTITY releasedate "June 3rd, 2020"> +<!ENTITY releasedate "June 6th, 2020"> <!ENTITY copyrightdate "1999-2020"><!-- jhalfs needs a literal dash, not – --> @@ -23,19 +23,26 @@ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter02/chapter02.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter03/chapter03.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter04/chapter04.xml"/> -<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter05/chapter05.xml"/> </part> <part id="part3"> -<title>Building the LFS System</title> +<title>Building the LFS Cross Toolchain and Temporary Tools</title> <?dbhtml filename="part3.html"?> +<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter05/chapter05.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter06/chapter06.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter07/chapter07.xml"/> +</part> + +<part id="part4"> +<title>Building the LFS System</title> +<?dbhtml filename="part4.html"?> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter08/chapter08.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter09/chapter09.xml"/> +<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter10/chapter10.xml"/> +<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="chapter11/chapter11.xml"/> </part> -<part id="part4"> +<part id="part5"> <title>Appendices</title> <?dbhtml filename="part4.html"?> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="appendices/acronymlist.xml"/> |