diff options
Diffstat (limited to 'chapter08')
81 files changed, 19506 insertions, 693 deletions
diff --git a/chapter08/aboutdebug.xml b/chapter08/aboutdebug.xml new file mode 100644 index 000000000..f49618c83 --- /dev/null +++ b/chapter08/aboutdebug.xml @@ -0,0 +1,52 @@ +<?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-aboutdebug"> + <?dbhtml filename="aboutdebug.html"?> + + <title>About Debugging Symbols</title> + + <para>Most programs and libraries are, by default, compiled with + debugging symbols included (with <command>gcc</command>'s + <parameter>-g</parameter> option). This means that when debugging a + program or library that was compiled with debugging information + included, the debugger can provide not only memory addresses, but also + the names of the routines and variables.</para> + + <para>However, the inclusion of these debugging symbols enlarges a + program or library significantly. The following is an example of the + amount of space these symbols occupy:</para> + + <itemizedlist> + <listitem> + <para>A <command>bash</command> binary with debugging symbols: + 1200 KB</para> + </listitem> + <listitem> + <para>A <command>bash</command> binary without debugging symbols: + 480 KB</para> + </listitem> + <listitem> + <para>Glibc and GCC files (<filename class="directory">/lib</filename> + and <filename class="directory">/usr/lib</filename>) with debugging + symbols: 87 MB</para> + </listitem> + <listitem> + <para>Glibc and GCC files without debugging symbols: 16 MB</para> + </listitem> + </itemizedlist> + + <para>Sizes may vary depending on which compiler and C library were used, + but when comparing programs with and without debugging symbols, the + difference will usually be a factor between two and five.</para> + + <para>Because most users will never use a debugger on their system software, + a lot of disk space can be regained by removing these symbols. The next + section shows how to strip all debugging symbols from the programs and + libraries.</para> + +</sect1> diff --git a/chapter08/acl.xml b/chapter08/acl.xml new file mode 100644 index 000000000..f9f2eddbe --- /dev/null +++ b/chapter08/acl.xml @@ -0,0 +1,148 @@ +<?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-acl" role="wrap"> + <?dbhtml filename="acl.html"?> + + <sect1info condition="script"> + <productname>acl</productname> + <productnumber>&acl-version;</productnumber> + <address>&acl-url;</address> + </sect1info> + + <title>Acl-&acl-version;</title> + + <indexterm zone="ch-system-acl"> + <primary sortas="a-Acl">Acl</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Acl package contains utilities to administer Access Control Lists, + which are used to define more fine-grained discretionary access rights for + files and directories.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&acl-ch6-sbu;</seg> + <seg>&acl-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Acl</title> + + <para>Prepare Acl for compilation:</para> + +<screen revision="sysv"><userinput remap="configure">./configure --prefix=/usr \ + --bindir=/bin \ + --disable-static \ + --libexecdir=/usr/lib \ + --docdir=/usr/share/doc/acl-&acl-version;</userinput></screen> + +<screen revision="systemd"><userinput remap="configure"> +./configure --prefix=/usr \ + --disable-static \ + --libexecdir=/usr/lib \ + --docdir=/usr/share/doc/acl-&acl-version;</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>The Acl tests need to be run on a filesystem that supports access + controls after <application>Coreutils</application> has been built with the + Acl libraries. If desired, return to this package and run <command>make + check</command> after <application>Coreutils</application> has been built + later in this chapter.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>The shared library needs to be moved to + <filename class="directory">/lib</filename>, and as a result the + <filename class="extension">.so</filename> file in + <filename class="directory">/usr/lib</filename> will need to be recreated:</para> + +<screen><userinput remap="install">mv -v /usr/lib/libacl.so.* /lib +ln -sfv ../../lib/$(readlink /usr/lib/libacl.so) /usr/lib/libacl.so</userinput></screen> + + </sect2> + + <sect2 id="contents-acl" role="content"> + <title>Contents of Acl</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>chacl, getfacl, and setfacl</seg> + <seg>libacl.so</seg> + <seg>/usr/include/acl and /usr/share/doc/acl-&acl-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="chacl"> + <term><command>chacl</command></term> + <listitem> + <para>Changes the access control list of a file + or directory</para> + <indexterm zone="ch-system-acl chacl"> + <primary sortas="b-chacl">chacl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="getfacl"> + <term><command>getfacl</command></term> + <listitem> + <para>Gets file access control lists</para> + <indexterm zone="ch-system-acl getfacl"> + <primary sortas="b-getfacl">getfacl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="setfacl"> + <term><command>setfacl</command></term> + <listitem> + <para>Sets file access control lists</para> + <indexterm zone="ch-system-acl setfacl"> + <primary sortas="b-setfacl">setfacl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libacl"> + <term><filename class="libraryfile">libacl</filename></term> + <listitem> + <para>Contains the library functions for manipulating Access Control Lists</para> + <indexterm zone="ch-system-acl libacl"> + <primary sortas="c-libacl">libacl</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/adjusting.xml b/chapter08/adjusting.xml new file mode 100644 index 000000000..3e6b49e19 --- /dev/null +++ b/chapter08/adjusting.xml @@ -0,0 +1,126 @@ +<?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-adjusting"> + <?dbhtml filename="adjusting.html"?> + + <title>Adjusting the Toolchain</title> + + <para>Now that the final C libraries have been installed, it is time to adjust + the toolchain so that it will link any + newly compiled program against these new libraries.</para> + + <para>First, backup the <filename class="directory">/tools</filename> linker, + and replace it with the adjusted linker we made in chapter 5. We'll also create + a link to its counterpart in + <filename class="directory">/tools/$(uname -m)-pc-linux-gnu/bin</filename>:</para> + +<screen><userinput>mv -v /tools/bin/{ld,ld-old} +mv -v /tools/$(uname -m)-pc-linux-gnu/bin/{ld,ld-old} +mv -v /tools/bin/{ld-new,ld} +ln -sv /tools/bin/ld /tools/$(uname -m)-pc-linux-gnu/bin/ld</userinput></screen> + + <para>the next command amends the GCC specs file to achieve three goals: + first point GCC to the new dynamic linker. Simply deleting all instances of + <quote>/tools</quote> should leave us with the correct path to the dynamic + linker. Second, let GCC know where to find the Glibc start files. Third, + add the /usr/include directory at the end of the default search path, so + that header files added in chapter 6 are found. + A <command>sed</command> command accomplishes this:</para> + +<screen><userinput>gcc -dumpspecs | sed -e 's@/tools@@g' \ + -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \ + -e '/\*cpp:/{n;s@$@ -idirafter /usr/include@}' > \ + `dirname $(gcc --print-libgcc-file-name)`/specs</userinput></screen> + + <para>It is a good idea to visually inspect the specs file to verify the + intended change was actually made.</para> + + <para>It is imperative at this point to ensure that the basic + functions (compiling and linking) of the adjusted toolchain are working + as expected. To do this, perform the following sanity checks:</para> + +<screen os="a"><userinput>echo 'int main(){}' > dummy.c +cc dummy.c -v -Wl,--verbose &> dummy.log +readelf -l a.out | grep ': /lib'</userinput></screen> + + <para os="b">There should be no errors, + and the output of the last command will be (allowing for + platform-specific differences in dynamic linker name):</para> + +<screen os="c"><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen> + + <para>Note that on 64-bit systems <filename class="directory">/lib</filename> is + the location of our dynamic linker, but is accessed via a symbolic link + in /lib64.</para> + + <note><para>On 32-bit systems the interpreter should be + /lib/ld-linux.so.2.</para></note> + + <para os="d">Now make sure that we're setup to use the correct start files:</para> + +<screen os="e"><userinput>grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log</userinput></screen> + + <para os="f">The output of the last command should be:</para> + +<screen><computeroutput>/usr/lib/../lib/crt1.o succeeded +/usr/lib/../lib/crti.o succeeded +/usr/lib/../lib/crtn.o succeeded</computeroutput></screen> + + <para os="g">Verify that the compiler is searching for the correct header + files:</para> + +<screen><userinput>grep -B4 '^ /usr/include' dummy.log</userinput></screen> + + <para os="h">This command should return the following output:</para> + +<screen><computeroutput>#include <...> search starts here: + /tools/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include + /tools/include + /tools/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include-fixed + /usr/include</computeroutput></screen> + + <note><para>On a 32 bit system, x86_64 is replaced with i686.</para></note> + + <para os="i">Next, verify that the new linker is being used with the correct search paths:</para> + +<screen os="j"><userinput>grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'</userinput></screen> + + <para os="k">References to paths that have components with '-linux-gnu' should + be ignored, but otherwise the output of the last command should be:</para> + +<screen><computeroutput>SEARCH_DIR("/usr/lib") +SEARCH_DIR("/lib")</computeroutput></screen> + + <para os="l">Next make sure that we're using the correct libc:</para> + +<screen os="m"><userinput>grep "/lib.*/libc.so.6 " dummy.log</userinput></screen> + + <para os="n">The output of the last command should be:</para> + +<screen os="o"><computeroutput>attempt to open /lib/libc.so.6 succeeded</computeroutput></screen> + + <para os="p">Lastly, make sure GCC is using the correct dynamic linker:</para> + +<screen os="q"><userinput>grep found dummy.log</userinput></screen> + + <para os="r">The output of the last command should be (allowing for + platform-specific differences in dynamic linker name):</para> + +<screen os="s"><computeroutput>found ld-linux-x86-64.so.2 at /lib/ld-linux-x86-64.so.2</computeroutput></screen> + + <para os="t">If the output does not appear as shown above or is not received + at all, then something is seriously wrong. Investigate and retrace the + steps to find out where the problem is and correct it. The most likely + reason is that something went wrong with the specs file adjustment. Any + issues will need to be resolved before continuing with the process.</para> + + <para os="u">Once everything is working correctly, clean up the test files:</para> + +<screen os="v"><userinput>rm -v dummy.c a.out dummy.log</userinput></screen> + +</sect1> diff --git a/chapter08/attr.xml b/chapter08/attr.xml new file mode 100644 index 000000000..10c6eec53 --- /dev/null +++ b/chapter08/attr.xml @@ -0,0 +1,147 @@ +<?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-attr" role="wrap"> + <?dbhtml filename="attr.html"?> + + <sect1info condition="script"> + <productname>attr</productname> + <productnumber>&attr-version;</productnumber> + <address>&attr-url;</address> + </sect1info> + + <title>Attr-&attr-version;</title> + + <indexterm zone="ch-system-attr"> + <primary sortas="a-Attr">Attr</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The attr package contains utilities to administer the extended + attributes on filesystem objects.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&attr-ch6-sbu;</seg> + <seg>&attr-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Attr</title> + + <para>Prepare Attr for compilation:</para> + +<screen revision="sysv"><userinput remap="configure"> +./configure --prefix=/usr \ + --bindir=/bin \ + --disable-static \ + --sysconfdir=/etc \ + --docdir=/usr/share/doc/attr-&attr-version;</userinput></screen> + +<screen revision="systemd"><userinput remap="configure"> +./configure --prefix=/usr \ + --disable-static \ + --sysconfdir=/etc \ + --docdir=/usr/share/doc/attr-&attr-version;</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>The tests need to be run on a filesystem that supports extended + attributes such as the ext2, ext3, or ext4 filesystems. + 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>The shared library needs to be moved to + <filename class="directory">/lib</filename>, and as a result the + <filename class="extension">.so</filename> file in + <filename class="directory">/usr/lib</filename> will need to be recreated:</para> + +<screen><userinput remap="install">mv -v /usr/lib/libattr.so.* /lib +ln -sfv ../../lib/$(readlink /usr/lib/libattr.so) /usr/lib/libattr.so</userinput></screen> + + </sect2> + + <sect2 id="contents-attr" role="content"> + <title>Contents of Attr</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>attr, getfattr, and setfattr</seg> + <seg>libattr.so</seg> + <seg>/usr/include/attr and /usr/share/doc/attr-&attr-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="attr"> + <term><command>attr</command></term> + <listitem> + <para>Extends attributes on filesystem objects</para> + <indexterm zone="ch-system-attr attr"> + <primary sortas="b-attr">attr</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="getfattr"> + <term><command>getfattr</command></term> + <listitem> + <para>Gets the extended attributes of filesystem objects</para> + <indexterm zone="ch-system-attr getfattr"> + <primary sortas="b-getfattr">getfattr</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="setfattr"> + <term><command>setfattr</command></term> + <listitem> + <para>Sets the extended attributes of filesystem objects</para> + <indexterm zone="ch-system-attr setfattr"> + <primary sortas="b-setfattr">setfattr</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libattr"> + <term><filename class="libraryfile">libattr</filename></term> + <listitem> + <para>Contains the library functions for manipulating extended attributes</para> + <indexterm zone="ch-system-attr libattr"> + <primary sortas="c-libattr">libattr</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/autoconf.xml b/chapter08/autoconf.xml new file mode 100644 index 000000000..6652747fd --- /dev/null +++ b/chapter08/autoconf.xml @@ -0,0 +1,194 @@ +<?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-autoconf" role="wrap"> + <?dbhtml filename="autoconf.html"?> + + <sect1info condition="script"> + <productname>autoconf</productname> + <productnumber>&autoconf-version;</productnumber> + <address>&autoconf-url;</address> + </sect1info> + + <title>Autoconf-&autoconf-version;</title> + + <indexterm zone="ch-system-autoconf"> + <primary sortas="a-Autoconf">Autoconf</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Autoconf package contains programs for producing shell scripts that + can automatically configure source code.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&autoconf-ch6-sbu;</seg> + <seg>&autoconf-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Autoconf</title> + + <para>First, fix a bug generated by Perl 5.28.</para> + +<screen><userinput remap="pre">sed '361 s/{/\\{/' -i bin/autoscan.in</userinput></screen> + + <para>Prepare Autoconf 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>--> + <para>The test suite is currently broken by bash-5 and libtool-2.4.3. + To run the tests anyway, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> +<!-- + <para>This takes a long time, about &autoconf-ch6-sbu-tests; SBUs. In addition, + several tests are skipped that use Automake. For full test coverage, + Autoconf can be re-tested after Automake has been installed. In addition, + two tests fail due to changes in libtool-2.4.3 and later.</para> + + <note><para>The test time for autoconf can be reduced significantly on a + system with multiple cores. To do this, append + <command>TESTSUITEFLAGS=-j<N></command> to the line above. For + instance, using -j4 can reduce the test time by over 60 + percent.</para></note> +--> + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-autoconf" role="content"> + <title>Contents of Autoconf</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate, + and ifnames</seg> + <seg>/usr/share/autoconf</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="autoconf"> + <term><command>autoconf</command></term> + <listitem> + <para>Produces shell scripts that automatically configure software + source code packages to adapt to many kinds of Unix-like systems; + the configuration scripts it produces are independent—running + them does not require the <command>autoconf</command> program</para> + <indexterm zone="ch-system-autoconf autoconf"> + <primary sortas="b-autoconf">autoconf</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="autoheader"> + <term><command>autoheader</command> </term> + <listitem> + <para>A tool for creating template files of C + <emphasis>#define</emphasis> statements for configure to use</para> + <indexterm zone="ch-system-autoconf autoheader"> + <primary sortas="b-autoheader">autoheader</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="autom4te"> + <term><command>autom4te</command></term> + <listitem> + <para>A wrapper for the M4 macro processor</para> + <indexterm zone="ch-system-autoconf autom4te"> + <primary sortas="b-autom4te">autom4te</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="autoreconf"> + <term><command>autoreconf</command></term> + <listitem> + <para>Automatically runs <command>autoconf</command>, + <command>autoheader</command>, <command>aclocal</command>, + <command>automake</command>, <command>gettextize</command>, and + <command>libtoolize</command> in the correct order to save time + when changes are made to <command>autoconf</command> and + <command>automake</command> template files</para> + <indexterm zone="ch-system-autoconf autoreconf"> + <primary sortas="b-autoreconf">autoreconf</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="autoscan"> + <term><command>autoscan</command> </term> + <listitem> + <para>Helps to create a <filename>configure.in</filename> file for a + software package; it examines the source files in a directory tree, + searching them for common portability issues, and creates a + <filename>configure.scan</filename> file that serves as as a + preliminary <filename>configure.in</filename> file for the + package</para> + <indexterm zone="ch-system-autoconf autoscan"> + <primary sortas="b-autoscan">autoscan</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="autoupdate"> + <term><command>autoupdate</command></term> + <listitem> + <para>Modifies a <filename>configure.in</filename> file that still + calls <command>autoconf</command> macros by their old names to use the + current macro names</para> + <indexterm zone="ch-system-autoconf autoupdate"> + <primary sortas="b-autoupdate">autoupdate</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ifnames"> + <term><command>ifnames</command> </term> + <listitem> + <para>Helps when writing <filename>configure.in</filename> files + for a software package; it prints the identifiers that the package + uses in C preprocessor conditionals [If a package has already been set + up to have some portability, this program can help determine what + <command>configure</command> needs to check for. It can also fill in + gaps in a <filename>configure.in</filename> file generated by + <command>autoscan</command>.]</para> + <indexterm zone="ch-system-autoconf ifnames"> + <primary sortas="b-ifnames">ifnames</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/automake.xml b/chapter08/automake.xml new file mode 100644 index 000000000..11dccfad3 --- /dev/null +++ b/chapter08/automake.xml @@ -0,0 +1,155 @@ +<?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-automake" role="wrap"> + <?dbhtml filename="automake.html"?> + + <sect1info condition="script"> + <productname>automake</productname> + <productnumber>&automake-version;</productnumber> + <address>&automake-url;</address> + </sect1info> + + <title>Automake-&automake-version;</title> + + <indexterm zone="ch-system-automake"> + <primary sortas="a-Automake">Automake</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Automake package contains programs for generating Makefiles for use + with Autoconf.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&automake-ch6-sbu;</seg> + <seg>&automake-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Automake</title> + + <para>Fix a failing test:</para> + +<screen><userinput remap="pre">sed -i "s/''/etags/" t/tags-lisp-space.sh</userinput></screen> + + <para>Prepare Automake for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --docdir=/usr/share/doc/automake-&automake-version;</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + +<!--<para>There are a couple of tests that incorrectly link to the + wrong version of the flex library, so we temporarily work around + the problem. Also, using the -j4 make option speeds up the tests, even on + systems with only one processor, due to internal delays in individual + tests. To test the results, issue:</para> + --> + + <para> Using the -j4 make option speeds up the tests, even on systems with + only one processor, due to internal delays in individual tests. To test + the results, issue:</para> + + <!--<screen><userinput remap="test">sed -i "s:./configure:LEXLIB=/usr/lib/libfl.a &:" t/lex-{clean,depend}-cxx.sh + make -j4 check</userinput></screen>--> + +<screen><userinput remap="test">make -j4 check</userinput></screen> + + + <para>One test is known to fail in the LFS environment: + tags-lisp-space.sh.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + + <sect2 id="contents-automake" role="content"> + <title>Contents of Automake</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>aclocal, aclocal-&am-minor-version; (hard linked with aclocal), automake, and + automake-&am-minor-version; (hard linked with automake) </seg> + <seg>/usr/share/aclocal-&am-minor-version;, /usr/share/automake-&am-minor-version;, and + /usr/share/doc/automake-&automake-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="aclocal"> + <term><command>aclocal</command></term> + <listitem> + <para>Generates <filename>aclocal.m4</filename> files based on the + contents of <filename>configure.in</filename> files</para> + <indexterm zone="ch-system-automake aclocal"> + <primary sortas="b-aclocal">aclocal</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="aclocalversion"> + <term><command>aclocal-&am-minor-version;</command></term> + <listitem> + <para>A hard link to <command>aclocal</command></para> + <indexterm zone="ch-system-automake aclocalversion"> + <primary sortas="b-aclocal-&am-minor-version;">aclocal-&am-minor-version;</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="automake"> + <term><command>automake</command></term> + <listitem> + <para>A tool for automatically generating + <filename>Makefile.in</filename> files from + <filename>Makefile.am</filename> files [To create all the + <filename>Makefile.in</filename> files for a package, run this program + in the top-level directory. By scanning the + <filename>configure.in</filename> file, it automatically finds each + appropriate <filename>Makefile.am</filename> file and generates the + corresponding <filename>Makefile.in</filename> file.]</para> + <indexterm zone="ch-system-automake automake"> + <primary sortas="b-automake">automake</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="automake-version"> + <term><command>automake-&am-minor-version;</command></term> + <listitem> + <para>A hard link to <command>automake</command></para> + <indexterm zone="ch-system-automake automake-version"> + <primary sortas="b-automake-&am-minor-version;">automake-&am-minor-version;</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/bc.xml b/chapter08/bc.xml new file mode 100644 index 000000000..d848ad365 --- /dev/null +++ b/chapter08/bc.xml @@ -0,0 +1,129 @@ +<?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-bc" role="wrap"> + <?dbhtml filename="bc.html"?> + + <sect1info condition="script"> + <productname>bc</productname> + <productnumber>&bc-version;</productnumber> + <address>&bc-url;</address> + </sect1info> + + <title>Bc-&bc-version;</title> + + <indexterm zone="ch-system-bc"> + <primary sortas="a-Bc">Bc</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Bc package contains an arbitrary precision numeric processing + language.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&bc-ch6-sbu;</seg> + <seg>&bc-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Bc</title> + + <para>Prepare Bc for compilation:</para> + +<screen><userinput remap="configure">PREFIX=/usr CC=gcc CFLAGS="-std=c99" ./configure.sh -G -O3</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>CC=gcc CFLAGS="-std=c99"</parameter></term> + <listitem> + <para>These parameters specify the compiler and the C standard to use.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-O3</parameter></term> + <listitem> + <para>Specify the optimization to use.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-G</parameter></term> + <listitem> + <para>Omit parts of the test suite that won't work + without a GNU bc present.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To test bc, run:</para> + +<screen><userinput remap="test">make test</userinput></screen> + + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-bc" role="content"> + <title>Contents of Bc</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + + <seglistitem> + <seg>bc and dc</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="bc"> + <term><command>bc</command></term> + <listitem> + <para>A command line calculator</para> + <indexterm zone="ch-system-bc bc"> + <primary sortas="b-bc">bc</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dc"> + <term><command>dc</command></term> + <listitem> + <para>A reverse-polish command line calculator</para> + <indexterm zone="ch-system-bc dc"> + <primary sortas="b-dc">dc</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/binutils.xml b/chapter08/binutils.xml new file mode 100644 index 000000000..04dbd199c --- /dev/null +++ b/chapter08/binutils.xml @@ -0,0 +1,436 @@ +<?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-binutils" role="wrap"> + <?dbhtml filename="binutils.html"?> + + <sect1info condition="script"> + <productname>binutils</productname> + <productnumber>&binutils-version;</productnumber> + <address>&binutils-url;</address> + </sect1info> + + <title>Binutils-&binutils-version;</title> + + <indexterm zone="ch-system-binutils"> + <primary sortas="a-Binutils">Binutils</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Binutils package contains a linker, an assembler, and other + tools for handling object files.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&binutils-ch6-sbu;</seg> + <seg>&binutils-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Binutils</title> + + <para>Verify that the PTYs are working properly inside the chroot + environment by performing a simple test:</para> + +<screen><userinput remap="test">expect -c "spawn ls"</userinput></screen> + + <para>This command should output the following:</para> + +<screen><computeroutput>spawn ls</computeroutput></screen> + + <para>If, instead, the output includes the message below, then the environment + is not set up for proper PTY operation. This issue needs to be resolved before + running the test suites for Binutils and GCC:</para> + +<screen><computeroutput>The system has no more ptys. +Ask your system administrator to create more.</computeroutput></screen> + + <para>Now remove one test that prevents the tests from running + to completion, and fix other tests in the gold test suite, which + need to be adjusted for GCC 10:</para> + +<screen><userinput remap="pre">sed -i '/@\tincremental_copy/d' gold/testsuite/Makefile.in +patch -Np1 -i ../binutils-&binutils-version;-gcc10_gold_test_fix-1.patch</userinput></screen> + + <para>The Binutils documentation recommends building Binutils + in a dedicated build directory:</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 \ + --enable-gold \ + --enable-ld=default \ + --enable-plugins \ + --enable-shared \ + --disable-werror \ + --enable-64-bit-bfd \ + --with-system-zlib</userinput></screen> + <variablelist> + <title>The meaning of the configure parameters:</title> + + <varlistentry> + <term><parameter>--enable-gold</parameter></term> + <listitem> + <para>Build the gold linker and install it as ld.gold (along side the + default linker).</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-ld=default</parameter></term> + <listitem> + <para>Build the original bfd linker and install it as both ld (the + default linker) and ld.bfd.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-plugins</parameter></term> + <listitem> + <para>Enables plugin support for the linker.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-64-bit-bfd</parameter></term> + <listitem> + <para>Enables 64-bit support (on hosts with narrower word sizes). + May not be needed on 64-bit systems, but does no harm.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-system-zlib</parameter></term> + <listitem> + <para>Use the installed zlib library rather than building the + included version.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make tooldir=/usr</userinput></screen> + + <variablelist> + <title>The meaning of the make parameter:</title> + + <varlistentry> + <term><parameter>tooldir=/usr</parameter></term> + <listitem> + <para>Normally, the tooldir (the directory where the executables will + ultimately be located) is set to <filename + class="directory">$(exec_prefix)/$(target_alias)</filename>. For + example, x86_64 machines would expand that to <filename + class="directory">/usr/x86_64-unknown-linux-gnu</filename>. Because this is + a custom system, this target-specific directory in <filename + class="directory">/usr</filename> is not required. <filename + class="directory">$(exec_prefix)/$(target_alias)</filename> would be + used if the system was used to cross-compile (for example, compiling a + package on an Intel machine that generates code that can be executed + on PowerPC machines).</para> + </listitem> + </varlistentry> + + </variablelist> + + <important> + <para>The test suite for Binutils in this section is considered critical. + Do not skip it under any circumstances.</para> + </important> + + <para>Test the results:</para> + +<screen><userinput remap="test">make -k check</userinput></screen> + +<!-- <para>The ver_test_pr16504.sh test is known to fail.</para>--> + + <para>Install the package:</para> + +<screen><userinput remap="install">make tooldir=/usr install</userinput></screen> + + </sect2> + + <sect2 id="contents-binutils" role="content"> + <title>Contents of Binutils</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>addr2line, ar, as, c++filt, dwp, elfedit, gprof, ld, ld.bfd, ld.gold, nm, + objcopy, objdump, ranlib, readelf, size, strings, and strip</seg> + <seg>libbfd.{a,so} and libopcodes.{a,so}</seg> + <seg>/usr/lib/ldscripts</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="addr2line"> + <term><command>addr2line</command></term> + <listitem> + <para>Translates program addresses to file names and line numbers; + given an address and the name of an executable, it uses the debugging + information in the executable to determine which source file and line + number are associated with the address</para> + <indexterm zone="ch-system-binutils addr2line"> + <primary sortas="b-addr2line">addr2line</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ar"> + <term><command>ar</command></term> + <listitem> + <para>Creates, modifies, and extracts from archives</para> + <indexterm zone="ch-system-binutils ar"> + <primary sortas="b-ar">ar</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="as"> + <term><command>as</command></term> + <listitem> + <para>An assembler that assembles the output of <command>gcc</command> + into object files</para> + <indexterm zone="ch-system-binutils as"> + <primary sortas="b-as">as</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="c-filt"> + <term><command>c++filt</command></term> + <listitem> + <para>Used by the linker to de-mangle C++ and Java symbols and to keep + overloaded functions from clashing</para> + <indexterm zone="ch-system-binutils c-filt"> + <primary sortas="b-c++filt">c++filt</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dwp"> + <term><command>dwp</command></term> + <listitem> + <para>The DWARF packaging utility</para> + <indexterm zone="ch-system-binutils dwp"> + <primary sortas="dwp">dwp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="elfedit"> + <term><command>elfedit</command></term> + <listitem> + <para>Updates the ELF header of ELF files</para> + <indexterm zone="ch-system-binutils elfedit"> + <primary sortas="b-elfedit">elfedit</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gprof"> + <term><command>gprof</command></term> + <listitem> + <para>Displays call graph profile data</para> + <indexterm zone="ch-system-binutils gprof"> + <primary sortas="b-gprof">gprof</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ld"> + <term><command>ld</command></term> + <listitem> + <para>A linker that combines a number of object and archive files + into a single file, relocating their data and tying up symbol + references</para> + <indexterm zone="ch-system-binutils ld"> + <primary sortas="b-ld">ld</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ld.gold"> + <term><command>ld.gold</command></term> + <listitem> + <para>A cut down version of ld that only supports the + elf object file format</para> + <indexterm zone="ch-system-binutils ld.gold"> + <primary sortas="b-ld.gold">ld.gold</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ld.bfd"> + <term><command>ld.bfd</command></term> + <listitem> + <para>Hard link to <command>ld</command></para> + <indexterm zone="ch-system-binutils ld.bfd"> + <primary sortas="b-ld.bfd">ld.bfd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="nm"> + <term><command>nm</command></term> + <listitem> + <para>Lists the symbols occurring in a given object file</para> + <indexterm zone="ch-system-binutils nm"> + <primary sortas="b-nm">nm</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="objcopy"> + <term><command>objcopy</command></term> + <listitem> + <para>Translates one type of object file into another</para> + <indexterm zone="ch-system-binutils objcopy"> + <primary sortas="b-objcopy">objcopy</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="objdump"> + <term><command>objdump</command></term> + <listitem> + <para>Displays information about the given object file, with options + controlling the particular information to display; the information + shown is useful to programmers who are working on the compilation + tools</para> + <indexterm zone="ch-system-binutils objdump"> + <primary sortas="b-objdump">objdump</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ranlib"> + <term><command>ranlib</command></term> + <listitem> + <para>Generates an index of the contents of an archive and stores it + in the archive; the index lists all of the symbols defined by archive + members that are relocatable object files</para> + <indexterm zone="ch-system-binutils ranlib"> + <primary sortas="b-ranlib">ranlib</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="readelf"> + <term><command>readelf</command></term> + <listitem> + <para>Displays information about ELF type binaries</para> + <indexterm zone="ch-system-binutils readelf"> + <primary sortas="b-readelf">readelf</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="size"> + <term><command>size</command></term> + <listitem> + <para>Lists the section sizes and the total size for the given + object files</para> + <indexterm zone="ch-system-binutils size"> + <primary sortas="b-size">size</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="strings"> + <term><command>strings</command></term> + <listitem> + <para>Outputs, for each given file, the sequences of printable + characters that are of at least the specified length (defaulting to + four); for object files, it prints, by default, only the strings from + the initializing and loading sections while for other types of files, it + scans the entire file</para> + <indexterm zone="ch-system-binutils strings"> + <primary sortas="b-strings">strings</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="strip"> + <term><command>strip</command></term> + <listitem> + <para>Discards symbols from object files</para> + <indexterm zone="ch-system-binutils strip"> + <primary sortas="b-strip">strip</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libbfd"> + <term><filename class="libraryfile">libbfd</filename></term> + <listitem> + <para>The Binary File Descriptor library</para> + <indexterm zone="ch-system-binutils libbfd"> + <primary sortas="c-libbfd">libbfd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libctf"> + <term><filename class="libraryfile">libctf</filename></term> + <listitem> + <para>The Compat ANSI-C Type Format debugging support library</para> + <indexterm zone="ch-system-binutils libctf"> + <primary sortas="c-libctf">libctf</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libctf-nobfd"> + <term><filename class="libraryfile">libctf-nobfd</filename></term> + <listitem> + <para>A libctf variant which does not use libbfd functionality</para> + <indexterm zone="ch-system-binutils libctf-nobfd"> + <primary sortas="c-libctf-nobfd">libctf-nobfd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libopcodes"> + <term><filename class="libraryfile">libopcodes</filename></term> + <listitem> + <para>A library for dealing with opcodes—the <quote>readable + text</quote> versions of instructions for the processor; + it is used for building utilities like + <command>objdump</command></para> + <indexterm zone="ch-system-binutils libopcodes"> + <primary sortas="c-libopcodes">libopcodes</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/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/chapter08/check.xml b/chapter08/check.xml new file mode 100644 index 000000000..bd4306b28 --- /dev/null +++ b/chapter08/check.xml @@ -0,0 +1,109 @@ +<?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-check" role="wrap"> + <?dbhtml filename="check.html"?> + + <sect1info condition="script"> + <productname>check</productname> + <productnumber>&check-version;</productnumber> + <address>&check-url;</address> + </sect1info> + + <title>Check-&check-version;</title> + + <indexterm zone="ch-system-check"> + <primary sortas="a-Check">Check</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Check is a unit testing framework for C.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&check-ch5-sbu;</seg> + <seg>&check-ch5-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Check</title> + + <para>Prepare Check for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen> + + <para>Build the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Compilation is now complete. To run the Check test suite, issue the + following command:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Note that the Check test suite may take a relatively long + (up to 4 SBU) time.</para> + + <para>Install the package:</para> + + <screen><userinput remap="install">make docdir=/usr/share/doc/check-&check-version; install</userinput></screen> + + </sect2> + + <sect2 id="contents-check" role="content"> + <title>Contents of Check</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>checkmk</seg> + <seg>libcheck.{a,so}</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="checkmk"> + <term><command>checkmk</command></term> + <listitem> + <para>Awk script for generating C unit tests for use with the Check + unit testing framework</para> + <indexterm zone="ch-system-check checkmk"> + <primary sortas="b-checmk">checkmk</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libcheck"> + <term><filename class="libraryfile">libcheck.{a,so}</filename></term> + <listitem> + <para>Contains functions that allow Check to be called from a test + program</para> + <indexterm zone="ch-system-check libcheck"> + <primary sortas="c-libcheck">libcheck</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/dbus.xml b/chapter08/dbus.xml new file mode 100644 index 000000000..bb4bffc76 --- /dev/null +++ b/chapter08/dbus.xml @@ -0,0 +1,241 @@ +<?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-dbus" role="wrap" revision="systemd"> + <?dbhtml filename="dbus.html"?> + + <sect1info condition="script"> + <productname>dbus</productname> + <productnumber>&dbus-version;</productnumber> + <address>&dbus-url;</address> + </sect1info> + + <title>D-Bus-&dbus-version;</title> + + <indexterm zone="ch-system-dbus"> + <primary sortas="a-dbus">D-Bus</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>D-Bus is a message bus system, a simple way for applications to talk + to one another. D-Bus supplies both a system daemon (for events such as + "new hardware device added" or "printer queue changed") and a + per-user-login-session daemon (for general IPC needs among user + applications). Also, the message bus is built on top of a general one-to-one + message passing framework, which can be used by any two applications to + communicate directly (without going through the message bus daemon).</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&dbus-ch6-sbu;</seg> + <seg>&dbus-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of D-Bus</title> + + <para>Prepare D-Bus for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --disable-doxygen-docs \ + --disable-xml-docs \ + --docdir=/usr/share/doc/dbus-&dbus-version; \ + --with-console-auth-dir=/run/console</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--with-console-auth-dir=/run/console</parameter></term> + <listitem> + <para>This specifies the location of the ConsoleKit auth + directory.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>This package does come with a test suite, but it requires several + packages that are not included in LFS. Instructions for running the + test suite can be found in the BLFS book at + <ulink url="&blfs-book;general/dbus.html"/>.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>The shared library needs to be moved to + <filename class="directory">/lib</filename>, and as a result the + <filename class="extension">.so</filename> file in + <filename class="directory">/usr/lib</filename> will need to be recreated:</para> + +<screen><userinput remap="install">mv -v /usr/lib/libdbus-1.so.* /lib +ln -sfv ../../lib/$(readlink /usr/lib/libdbus-1.so) /usr/lib/libdbus-1.so</userinput></screen> + + <para>Create a symlink, so that D-Bus and systemd can use the same + <filename>machine-id</filename> file:</para> + +<screen><userinput remap="install">ln -sfv /etc/machine-id /var/lib/dbus</userinput></screen> + + <para>Move the socket file to /run instead of the deprecated + /var/run:</para> + + <screen><userinput remap="install">sed -i 's:/var/run:/run:' /lib/systemd/system/dbus.socket</userinput></screen> + + </sect2> + + <sect2 id="contents-dbus" role="content"> + <title>Contents of D-Bus</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>dbus-cleanup-sockets, dbus-daemon, dbus-launch, dbus-monitor, + dbus-run-session, dbus-send, dbus-test-tool, + dbus-update-activation-environment, and dbus-uuidgen</seg> + <seg>libdbus-1.{a,so}</seg> + <seg>/etc/dbus-1, /usr/include/dbus-1.0, /usr/lib/dbus-1.0, + /usr/share/dbus-1, /usr/share/doc/dbus-&dbus-version;, + and /var/lib/dbus</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="dbus-cleanup-sockets"> + <term><command>dbus-cleanup-sockets</command></term> + <listitem> + <para>Used to clean up leftover sockets in a directory</para> + <indexterm zone="ch-system-dbus dbus-cleanup-sockets"> + <primary sortas="b-dbus-cleanup-sockets">dbus-cleanup-sockets</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dbus-daemon"> + <term><command>dbus-daemon</command></term> + <listitem> + <para>The D-Bus message bus daemon</para> + <indexterm zone="ch-system-dbus dbus-daemon"> + <primary sortas="b-dbus-daemon">dbus-daemon</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dbus-launch"> + <term><command>dbus-launch</command></term> + <listitem> + <para>Starts <command>dbus-daemon</command> from a shell + script</para> + <indexterm zone="ch-system-dbus dbus-launch"> + <primary sortas="b-dbus-launch">dbus-launch</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dbus-monitor"> + <term><command>dbus-monitor</command></term> + <listitem> + <para>Monitors messages passing through a D-Bus message bus</para> + <indexterm zone="ch-system-dbus dbus-monitor"> + <primary sortas="b-dbus-monitor">dbus-monitor</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dbus-run-session"> + <term><command>dbus-run-session</command></term> + <listitem> + <para>Starts a session bus instance of <command>dbus-daemon</command> + from a shell script and starts a specified program in that + session</para> + <indexterm zone="ch-system-dbus dbus-run-session"> + <primary sortas="b-dbus-run-session">dbus-run-session</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dbus-send"> + <term><command>dbus-send</command></term> + <listitem> + <para>Sends a message to a D-Bus message bus</para> + <indexterm zone="ch-system-dbus dbus-send"> + <primary sortas="b-dbus-send">dbus-send</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dbus-test-tool"> + <term><command>dbus-test-tool</command></term> + <listitem> + <para>A tool to help packages test + <application>D-Bus</application></para> + <indexterm zone="ch-system-dbus dbus-test-tool"> + <primary sortas="b-dbus-test-tool">dbus-test-tool</primary> + </indexterm> + </listitem> + </varlistentry> + + <!-- This is a very long command name. Excuse the long <primary> statement below. --> + <varlistentry id="dbus-update-activation-environment"> + <term><command>dbus-update-activation-environment</command></term> + <listitem> + <para>Updates environment variables that will be set for + <application>D-Bus</application> session services</para> + <indexterm zone="ch-system-dbus dbus-update-activation-environment"> + <primary sortas="b-dbus-update-activation-environment">dbus-update-activation-environment</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dbus-uuidgen"> + <term><command>dbus-uuidgen</command></term> + <listitem> + <para>Generates a universally unique ID</para> + <indexterm zone="ch-system-dbus dbus-uuidgen"> + <primary sortas="b-dbus-uuidgen">dbus-uuidgen</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libdbus-1"> + <term><filename class="libraryfile">libdbus-1</filename></term> + <listitem> + <para>Contains API functions used to communicate with the D-Bus + message bus</para> + <indexterm zone="ch-system-dbus libdbus-1"> + <primary sortas="c-libdbus-1">libdbus-1</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/e2fsprogs.xml b/chapter08/e2fsprogs.xml new file mode 100644 index 000000000..984ba6db9 --- /dev/null +++ b/chapter08/e2fsprogs.xml @@ -0,0 +1,541 @@ +<?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-e2fsprogs" role="wrap"> + <?dbhtml filename="e2fsprogs.html"?> + + <sect1info condition="script"> + <productname>e2fsprogs</productname> + <productnumber>&e2fsprogs-version;</productnumber> + <address>&e2fsprogs-url;</address> + </sect1info> + + <title>E2fsprogs-&e2fsprogs-version;</title> + + <indexterm zone="ch-system-e2fsprogs"> + <primary sortas="a-E2fsprogs">E2fsprogs</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The E2fsprogs package contains the utilities for handling the + <systemitem class="filesystem">ext2</systemitem> file system. It also + supports the <systemitem class="filesystem">ext3</systemitem> and + <systemitem class="filesystem">ext4</systemitem> journaling + file systems.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&e2fsprogs-ch6-sbu;</seg> + <seg>&e2fsprogs-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of E2fsprogs</title> + + <para>The E2fsprogs documentation recommends that the package be built in + a subdirectory of the source tree: </para> + +<screen><userinput remap="pre">mkdir -v build +cd build</userinput></screen> + + <para>Prepare E2fsprogs for compilation:</para> + +<screen><userinput remap="configure">../configure --prefix=/usr \ + --bindir=/bin \ + --with-root-prefix="" \ + --enable-elf-shlibs \ + --disable-libblkid \ + --disable-libuuid \ + --disable-uuidd \ + --disable-fsck</userinput></screen> + + <variablelist> + <title>The meaning of the environment variable and configure options:</title> + + <varlistentry> + <term><parameter>--with-root-prefix=""</parameter> and + <parameter>--bindir=/bin</parameter></term> + <listitem> + <para>Certain programs (such as the <command>e2fsck</command> + program) are considered essential programs. When, for example, + <filename class="directory">/usr</filename> is not mounted, these + programs still need to be available. They belong in directories + like <filename class="directory">/lib</filename> and <filename + class="directory">/sbin</filename>. If this option is not passed + to E2fsprogs' configure, the programs are installed into the + <filename class="directory">/usr</filename> directory.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-elf-shlibs</parameter></term> + <listitem> + <para>This creates the shared libraries which some programs + in this package use.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-*</parameter></term> + <listitem> + <para>This prevents E2fsprogs from building and installing the + <systemitem class="library">libuuid</systemitem> and + <systemitem class="library">libblkid</systemitem> libraries, the + <systemitem class="daemon">uuidd</systemitem> daemon, and the + <command>fsck</command> wrapper, as Util-Linux installs more + recent versions.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>To run the tests, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>One of the E2fsprogs tests will attempt to allocate 256 MB of memory. + If you do not have significantly more RAM than this, be sure to enable + sufficient swap space for the test. See <xref + linkend="ch-partitioning-creatingfilesystem"/> and <xref + linkend="ch-partitioning-mounting"/> + for details on creating and enabling swap space.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Make the installed static libraries writable so debugging symbols can + be removed later:</para> + +<screen><userinput remap="install">chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a</userinput></screen> + + <para>This package installs a gzipped + <filename class="extension">.info</filename> file but doesn't update the + system-wide <filename>dir</filename> file. Unzip this file and then update + the system <filename>dir</filename> file using the following + commands:</para> + +<screen><userinput remap="install">gunzip -v /usr/share/info/libext2fs.info.gz +install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info</userinput></screen> + + <para>If desired, create and install some additional documentation by + issuing the following commands:</para> + +<screen><userinput remap="install">makeinfo -o doc/com_err.info ../lib/et/com_err.texinfo +install -v -m644 doc/com_err.info /usr/share/info +install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info</userinput></screen> + </sect2> + + <sect2 id="contents-e2fsprogs" role="content"> + <title>Contents of E2fsprogs</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>badblocks, chattr, compile_et, debugfs, dumpe2fs, e2freefrag, + e2fsck, e2image, e2label, e2mmpstatus, e2scrub, e2scrub_all, e2undo, + e4crypt, e4defrag, filefrag, fsck.ext2, + fsck.ext3, fsck.ext4, logsave, lsattr, mk_cmds, mke2fs, + mkfs.ext2, mkfs.ext3, mkfs.ext4, mklost+found, + resize2fs, and tune2fs</seg> + <seg>libcom_err.so, libe2p.so, libext2fs.so, and libss.so</seg> + <seg>/usr/include/e2p, /usr/include/et, /usr/include/ext2fs, + /usr/include/ss, /usr/lib/e2fsprogs, /usr/share/et, and + /usr/share/ss</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="badblocks"> + <term><command>badblocks</command></term> + <listitem> + <para>Searches a device (usually a disk partition) for bad + blocks</para> + <indexterm zone="ch-system-e2fsprogs badblocks"> + <primary sortas="b-badblocks">badblocks</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="chattr"> + <term><command>chattr</command></term> + <listitem> + <para>Changes the attributes of files on an <systemitem + class="filesystem">ext2</systemitem> file system; it also + changes <systemitem class="filesystem">ext3</systemitem> + file systems, the journaling version of <systemitem + class="filesystem">ext2</systemitem> file systems</para> + <indexterm zone="ch-system-e2fsprogs chattr"> + <primary sortas="b-chattr">chattr</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="compile_et"> + <term><command>compile_et</command></term> + <listitem> + <para>An error table compiler; it converts a table of error-code + names and messages into a C source file suitable for use with the + <filename class="libraryfile">com_err</filename> library</para> + <indexterm zone="ch-system-e2fsprogs compile_et"> + <primary sortas="b-compile_et">compile_et</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="debugfs"> + <term><command>debugfs</command></term> + <listitem> + <para>A file system debugger; it can be used to examine and change + the state of an <systemitem class="filesystem">ext2</systemitem> + file system</para> + <indexterm zone="ch-system-e2fsprogs debugfs"> + <primary sortas="b-debugfs">debugfs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dumpe2fs"> + <term><command>dumpe2fs</command></term> + <listitem> + <para>Prints the super block and blocks group information for the + file system present on a given device</para> + <indexterm zone="ch-system-e2fsprogs dumpe2fs"> + <primary sortas="b-dumpe2fs">dumpe2fs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e2freefrag"> + <term><command>e2freefrag</command></term> + <listitem> + <para>Reports free space fragmentation information</para> + <indexterm zone="ch-system-e2fsprogs e2freefrag"> + <primary sortas="b-e2freefrag">e2freefrag</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e2fsck"> + <term><command>e2fsck</command></term> + <listitem> + <para>Is used to check, and optionally repair <systemitem + class="filesystem">ext2</systemitem> file systems and <systemitem + class="filesystem">ext3</systemitem> file systems</para> + <indexterm zone="ch-system-e2fsprogs e2fsck"> + <primary sortas="b-e2fsck">e2fsck</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e2image"> + <term><command>e2image</command></term> + <listitem> + <para>Is used to save critical <systemitem + class="filesystem">ext2</systemitem> file system data to a file</para> + <indexterm zone="ch-system-e2fsprogs e2image"> + <primary sortas="b-e2image">e2image</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e2label"> + <term><command>e2label</command></term> + <listitem> + <para>Displays or changes the file system label on the <systemitem + class="filesystem">ext2</systemitem> file system present on a given + device</para> + <indexterm zone="ch-system-e2fsprogs e2label"> + <primary sortas="b-e2label">e2label</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e2mmpstatus"> + <term><command>e2mmpstatus</command></term> + <listitem> + <para>Checks MMP status of an ext4 filesystem</para> + <indexterm zone="ch-system-e2fsprogs e2mmpstatus"> + <primary sortas="b-e2mmpstatus">e2mmpstatus</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e2scrub"> + <term><command>e2scrub</command></term> + <listitem> + <para>Checks the contents of a mounted ext[234] filesystem</para> + <indexterm zone="ch-system-e2fsprogs e2scrub"> + <primary sortas="b-e2scrub">e2scrub</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e2scrub_all"> + <term><command>e2scrub_all</command></term> + <listitem> + <para>Checks all mounted ext[234] filesystems for errors</para> + <indexterm zone="ch-system-e2fsprogs e2scrub_all"> + <primary sortas="b-e2scrub_all">e2scrub_all</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e2undo"> + <term><command>e2undo</command></term> + <listitem> + <para>Replays the undo log undo_log for an ext2/ext3/ext4 filesystem + found on a device [This can be used to undo a failed operation by an + e2fsprogs program.]</para> + <indexterm zone="ch-system-e2fsprogs e2undo"> + <primary sortas="b-e2undo">e2undo</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e4crypt"> + <term><command>e4crypt</command></term> + <listitem> + <para>Ext4 filesystem encryption utility</para> + <indexterm zone="ch-system-e2fsprogs e4crypt"> + <primary sortas="b-e4crypt">e4crypt</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="e4defrag"> + <term><command>e4defrag</command></term> + <listitem> + <para>Online defragmenter for ext4 filesystems</para> + <indexterm zone="ch-system-e2fsprogs e4defrag"> + <primary sortas="b-e4defrag">e4defrag</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="filefrag"> + <term><command>filefrag</command></term> + <listitem> + <para>Reports on how badly fragmented a particular file might be</para> + <indexterm zone="ch-system-e2fsprogs filefrag"> + <primary sortas="b-filefrag">filefrag</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="fsck.ext2"> + <term><command>fsck.ext2</command></term> + <listitem> + <para>By default checks <systemitem class="filesystem">ext2</systemitem> + file systems and is a hard link to <command>e2fsck</command></para> + <indexterm zone="ch-system-e2fsprogs fsck.ext2"> + <primary sortas="b-fsck.ext2">fsck.ext2</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="fsck.ext3"> + <term><command>fsck.ext3</command></term> + <listitem> + <para>By default checks <systemitem class="filesystem">ext3</systemitem> + file systems and is a hard link to <command>e2fsck</command></para> + <indexterm zone="ch-system-e2fsprogs fsck.ext3"> + <primary sortas="b-fsck.ext3">fsck.ext3</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="fsck.ext4"> + <term><command>fsck.ext4</command></term> + <listitem> + <para>By default checks <systemitem class="filesystem">ext4</systemitem> + file systems and is a hard link to <command>e2fsck</command></para> + <indexterm zone="ch-system-e2fsprogs fsck.ext4"> + <primary sortas="b-fsck.ext4">fsck.ext4</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="logsave"> + <term><command>logsave</command></term> + <listitem> + <para>Saves the output of a command in a log file</para> + <indexterm zone="ch-system-e2fsprogs logsave"> + <primary sortas="b-logsave">logsave</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lsattr"> + <term><command>lsattr</command></term> + <listitem> + <para>Lists the attributes of files on a second extended file + system</para> + <indexterm zone="ch-system-e2fsprogs lsattr"> + <primary sortas="b-lsattr">lsattr</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mk_cmds"> + <term><command>mk_cmds</command></term> + <listitem> + <para>Converts a table of command names and help messages into a C + source file suitable for use with the <filename + class="libraryfile">libss</filename> subsystem library</para> + <indexterm zone="ch-system-e2fsprogs mk_cmds"> + <primary sortas="b-mk_cmds">mk_cmds</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mke2fs"> + <term><command>mke2fs</command></term> + <listitem> + <para>Creates an <systemitem class="filesystem">ext2</systemitem> + or <systemitem class="filesystem">ext3</systemitem> file system on + the given device</para> + <indexterm zone="ch-system-e2fsprogs mke2fs"> + <primary sortas="b-mke2fs">mke2fs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mkfs.ext2"> + <term><command>mkfs.ext2</command></term> + <listitem> + <para>By default creates <systemitem class="filesystem">ext2</systemitem> + file systems and is a hard link to <command>mke2fs</command></para> + <indexterm zone="ch-system-e2fsprogs mkfs.ext2"> + <primary sortas="b-mkfs.ext2">mkfs.ext2</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mkfs.ext3"> + <term><command>mkfs.ext3</command></term> + <listitem> + <para>By default creates <systemitem class="filesystem">ext3</systemitem> + file systems and is a hard link to <command>mke2fs</command></para> + <indexterm zone="ch-system-e2fsprogs mkfs.ext3"> + <primary sortas="b-mkfs.ext3">mkfs.ext3</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mkfs.ext4"> + <term><command>mkfs.ext4</command></term> + <listitem> + <para>By default creates <systemitem class="filesystem">ext4</systemitem> + file systems and is a hard link to <command>mke2fs</command></para> + <indexterm zone="ch-system-e2fsprogs mkfs.ext4"> + <primary sortas="b-mkfs.ext4">mkfs.ext4</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mklost-found"> + <term><command>mklost+found</command></term> + <listitem> + <para>Used to create a <filename class="directory">lost+found</filename> + directory on an <systemitem class="filesystem">ext2</systemitem> file + system; it pre-allocates disk blocks to this directory to lighten the + task of <command>e2fsck</command></para> + <indexterm zone="ch-system-e2fsprogs mklost-found"> + <primary sortas="b-mklost+found">mklost+found</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="resize2fs"> + <term><command>resize2fs</command></term> + <listitem> + <para>Can be used to enlarge or shrink an <systemitem + class="filesystem">ext2</systemitem> file system</para> + <indexterm zone="ch-system-e2fsprogs resize2fs"> + <primary sortas="b-resize2fs">resize2fs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="tune2fs"> + <term><command>tune2fs</command></term> + <listitem> + <para>Adjusts tunable file system parameters on an <systemitem + class="filesystem">ext2</systemitem> file system</para> + <indexterm zone="ch-system-e2fsprogs tune2fs"> + <primary sortas="b-tune2fs">tune2fs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libcom_err"> + <term><filename class="libraryfile">libcom_err</filename></term> + <listitem> + <para>The common error display routine</para> + <indexterm zone="ch-system-e2fsprogs libcom_err"> + <primary sortas="c-libcom_err">libcom_err</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libe2p"> + <term><filename class="libraryfile">libe2p</filename></term> + <listitem> + <para>Used by <command>dumpe2fs</command>, <command>chattr</command>, + and <command>lsattr</command></para> + <indexterm zone="ch-system-e2fsprogs libe2p"> + <primary sortas="c-libe2p">libe2p</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libext2fs"> + <term><filename class="libraryfile">libext2fs</filename></term> + <listitem> + <para>Contains routines to enable user-level programs to manipulate an + <systemitem class="filesystem">ext2</systemitem> file system</para> + <indexterm zone="ch-system-e2fsprogs libext2fs"> + <primary sortas="c-libext2fs">libext2fs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libss"> + <term><filename class="libraryfile">libss</filename></term> + <listitem> + <para>Used by <command>debugfs</command></para> + <indexterm zone="ch-system-e2fsprogs libss"> + <primary sortas="c-libss">libss</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/eudev.xml b/chapter08/eudev.xml new file mode 100644 index 000000000..71511c3e7 --- /dev/null +++ b/chapter08/eudev.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-system-eudev" role="wrap" revision="sysv"> + <?dbhtml filename="eudev.html"?> + + <sect1info condition="script"> + <productname>eudev</productname> + <productnumber>&eudev-version;</productnumber> + <address>&eudev-url;</address> + </sect1info> + + <title>Eudev-&eudev-version;</title> + + <indexterm zone="ch-system-eudev"> + <primary sortas="a-Eudev">Eudev</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Eudev package contains programs for dynamic creation of device + nodes.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&eudev-ch6-sbu;</seg> + <seg>&eudev-ch6-du;</seg> + </seglistitem> + </segmentedlist> + </sect2> + + <sect2 role="installation"> + <title>Installation of Eudev</title> +<!-- + <para>First, fix a test script:</para> + +<screen><userinput remap="pre">sed -r -i 's|/usr(/bin/test)|\1|' test/udev-test.pl</userinput></screen> +--> +<!-- + <para>Next, remove an unneeded line that causes a build failure:</para> + +<screen><userinput remap="pre">sed -i '/keyboard_lookup_key/d' src/udev/udev-builtin-keyboard.c</userinput></screen> +--> + + <para>Prepare Eudev for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --bindir=/sbin \ + --sbindir=/sbin \ + --libdir=/usr/lib \ + --sysconfdir=/etc \ + --libexecdir=/lib \ + --with-rootprefix= \ + --with-rootlibdir=/lib \ + --enable-manpages \ + --disable-static</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>Create some directories now that are needed for tests, but + will also be used as a part of installation:</para> + +<screen><userinput remap="test">mkdir -pv /lib/udev/rules.d +mkdir -pv /etc/udev/rules.d</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>Install some custom rules and support files useful in an LFS + environment:</para> + +<screen><userinput remap="install">tar -xvf ../&udev-lfs-version;.tar.xz +make -f &udev-lfs-version;/Makefile.lfs install</userinput></screen> + + </sect2> + + <sect2 id="conf-eudev" role="configuration"> + <title>Configuring Eudev</title> + + <indexterm zone="conf-eudev"> + <primary sortas="a-Eudev">Eudev</primary> + <secondary>configuring</secondary> + </indexterm> + + <indexterm zone="conf-eudev"> + <primary sortas="e-/etc/udev/hwdb.bin">/etc/udev/hwdb.bin</primary> + </indexterm> + + <para>Information about hardware devices is maintained in the + <filename class="directory">/etc/udev/hwdb.d</filename> and + <filename class="directory">/lib/udev/hwdb.d</filename> directories. + <application>Eudev</application> needs that information to be compiled + into a binary database <filename>/etc/udev/hwdb.bin</filename>. Create the + initial database:</para> + +<screen><userinput>udevadm hwdb --update</userinput></screen> + + <para>This command needs to be run each time the hardware information is + updated.</para> + + </sect2> + + <sect2 id="contents-eudev" role="content"> + <title>Contents of Eudev</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg><!-- These are in /lib/udev and not to be called by the user: + accelerometer, ata_id, cdrom_id, collect, mtd_probe, + scsi_id, v4l_id,--> udevadm and udevd</seg> + + <seg>libudev.so</seg> + + <seg>/etc/udev, /lib/udev, and /usr/share/doc/udev-&udev-lfs-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + <varlistentry id="udevadm" revision="sysv"> + <term><command>udevadm</command></term> + <listitem> + <para>Generic udev administration tool: controls the udevd daemon, + provides info from the Udev database, monitors uevents, waits for + uevents to finish, tests Udev configuration, and triggers uevents + for a given device</para> + <indexterm zone="ch-system-eudev udevadm"> + <primary sortas="b-udevadm">udevadm</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="udevd"> + <term><command>udevd</command></term> + <listitem> + <para>A daemon that listens for uevents on the netlink socket, + creates devices and runs the configured external programs in + response to these uevents</para> + <indexterm zone="ch-system-eudev udevd"> + <primary sortas="b-udevd">udevd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libudev"> + <term><filename class="libraryfile">libudev</filename></term> + <listitem> + <para>A library interface to udev device information</para> + <indexterm zone="ch-system-eudev libudev"> + <primary sortas="c-libudev">libudev</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="etc-udev"> + <term><filename class="directory">/etc/udev</filename></term> + <listitem> + <para>Contains Udev configuration files, + device permissions, and rules for device naming</para> + <indexterm zone="ch-system-eudev etc-udev"> + <primary sortas="e-/etc/udev">/etc/udev</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/expat.xml b/chapter08/expat.xml new file mode 100644 index 000000000..df9f709c9 --- /dev/null +++ b/chapter08/expat.xml @@ -0,0 +1,117 @@ +<?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-expat" role="wrap"> + <?dbhtml filename="expat.html"?> + + <sect1info condition="script"> + <productname>expat</productname> + <productnumber>&expat-version;</productnumber> + <address>&expat-url;</address> + </sect1info> + + <title>Expat-&expat-version;</title> + + <indexterm zone="ch-system-expat"> + <primary sortas="a-Expat">Expat</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Expat package contains a stream oriented C library for + parsing XML.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&expat-ch6-sbu;</seg> + <seg>&expat-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Expat</title> + + <para>First fix a problem with the regression tests in the LFS environment:</para> + +<screen><userinput remap="pre">sed -i 's|usr/bin/env |bin/|' run.sh.in</userinput></screen> + + <para>Prepare Expat for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/expat-&expat-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:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>If desired, install the documentation:</para> + +<screen><userinput remap="install">install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-&expat-version;</userinput></screen> + + </sect2> + + <sect2 id="contents-expat" role="content"> + <title>Contents of Expat</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>xmlwf</seg> + <seg>libexpat.so</seg> + <seg>/usr/share/doc/expat-&expat-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="xmlwf"> + <term><command>xmlwf </command></term> + <listitem> + <para>Is a non-validating utility to check whether or not + XML documents are well formed</para> + <indexterm zone="ch-system-expat xmlwf"> + <primary sortas="b-xmlwf">xmlwf</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libexpat"> + <term><filename class="libraryfile">libexpat</filename></term> + <listitem> + <para>Contains API functions for parsing XML</para> + <indexterm zone="ch-system-expat libexpat"> + <primary sortas="c-libexpat">libexpat</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/fstab.xml b/chapter08/fstab.xml deleted file mode 100644 index ebfae3aaf..000000000 --- a/chapter08/fstab.xml +++ /dev/null @@ -1,125 +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-bootable-fstab"> - <?dbhtml filename="fstab.html"?> - - <title>Creating the /etc/fstab File</title> - - <indexterm zone="ch-bootable-fstab"> - <primary sortas="e-/etc/fstab">/etc/fstab</primary> - </indexterm> - - <para>The <filename>/etc/fstab</filename> file is used by some programs to - determine where file systems are to be mounted by default, in which order, and - which must be checked (for integrity errors) prior to mounting. Create a new - file systems table like this:</para> - -<screen revision="sysv"><userinput>cat > /etc/fstab << "EOF" -<literal># Begin /etc/fstab - -# file system mount-point type options dump fsck -# order - -/dev/<replaceable><xxx></replaceable> / <replaceable><fff></replaceable> defaults 1 1 -/dev/<replaceable><yyy></replaceable> swap swap pri=1 0 0 -proc /proc proc nosuid,noexec,nodev 0 0 -sysfs /sys sysfs nosuid,noexec,nodev 0 0 -devpts /dev/pts devpts gid=5,mode=620 0 0 -tmpfs /run tmpfs defaults 0 0 -devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 - -# End /etc/fstab</literal> -EOF</userinput></screen> - -<screen revision="systemd"><userinput>cat > /etc/fstab << "EOF" -<literal># Begin /etc/fstab - -# file system mount-point type options dump fsck -# order - -/dev/<replaceable><xxx></replaceable> / <replaceable><fff></replaceable> defaults 1 1 -/dev/<replaceable><yyy></replaceable> swap swap pri=1 0 0 - -# End /etc/fstab</literal> -EOF</userinput></screen> - - <para>Replace <replaceable><xxx></replaceable>, - <replaceable><yyy></replaceable>, and <replaceable><fff></replaceable> - with the values appropriate for the system, for example, <filename - class="partition">sda2</filename>, <filename - class="partition">sda5</filename>, and <systemitem - class="filesystem">ext4</systemitem>. For details on the six - fields in this file, see <command>man 5 fstab</command>.</para> - - <para>Filesystems with MS-DOS or Windows origin (i.e. vfat, ntfs, smbfs, - cifs, iso9660, udf) need a special option, utf8, in order for non-ASCII - characters in file names to be interpreted properly. For non-UTF-8 locales, - the value of <option>iocharset</option> should be set to be the same as the - character set of the locale, adjusted in such a way that the kernel - understands it. This works if the relevant character set definition (found - under File systems -> Native Language Support when configuring the kernel) - has been compiled into the kernel or built as a module. However, if the - character set of the locale is UTF-8, the corresponding option - <option>iocharset=utf8</option> would make the file system case sensitive. To - fix this, use the special option <option>utf8</option> instead of - <option>iocharset=utf8</option>, for UTF-8 locales. The - <quote>codepage</quote> option is also needed for vfat and smbfs filesystems. - It should be set to the codepage number used under MS-DOS in your country. - For example, in order to mount USB flash drives, a ru_RU.KOI8-R user would - need the following in the options portion of its mount line in - <filename>/etc/fstab</filename>:</para> - -<screen><literal>noauto,user,quiet,showexec,codepage=866,iocharset=koi8r</literal></screen> - - <para>The corresponding options fragment for ru_RU.UTF-8 users is:</para> - -<screen><literal>noauto,user,quiet,showexec,codepage=866,utf8</literal></screen> - - <para>Note that using <option>iocharset</option> is the default for - <literal>iso8859-1</literal> (which keeps the file system case - insensitive), and the <option>utf8</option> option tells - the kernel to convert the file names using UTF-8 so they can be - interpreted in the UTF-8 locale.</para> - - <!--note> - <para>In the latter case, the kernel emits the following message:</para> - -<screen><computeroutput>FAT: utf8 is not a recommended IO charset for FAT filesystems, - filesystem will be case sensitive!</computeroutput></screen> - - <para>This negative recommendation should be ignored, since all other values - of the <quote>iocharset</quote> option result in wrong display of filenames in - UTF-8 locales.</para> - </note--> - - <para>It is also possible to specify default codepage and iocharset values for - some filesystems during kernel configuration. The relevant parameters - are named - <quote>Default NLS Option</quote> (<option>CONFIG_NLS_DEFAULT)</option>, - <quote>Default Remote NLS Option</quote> (<option>CONFIG_SMB_NLS_DEFAULT</option>), - <quote>Default codepage for FAT</quote> (<option>CONFIG_FAT_DEFAULT_CODEPAGE</option>), and - <quote>Default iocharset for FAT</quote> (<option>CONFIG_FAT_DEFAULT_IOCHARSET</option>). - There is no way to specify these settings for the - ntfs filesystem at kernel compilation time.</para> - - <para>It is possible to make the ext3 filesystem reliable across power - failures for some hard disk types. To do this, add the - <option>barrier=1</option> mount option to the appropriate entry in - <filename>/etc/fstab</filename>. To check if the disk drive supports - this option, run - <ulink url="&blfs-book;general/hdparm.html">hdparm</ulink> - on the applicable disk drive. For example, if:</para> - -<screen role="nodump"><userinput>hdparm -I /dev/sda | grep NCQ</userinput></screen> - - <para>returns non-empty output, the option is supported.</para> - - <para>Note: Logical Volume Management (LVM) based partitions cannot use the - <option>barrier</option> option.</para> - -</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/chapter08/gcc.xml b/chapter08/gcc.xml new file mode 100644 index 000000000..9e4c53ec5 --- /dev/null +++ b/chapter08/gcc.xml @@ -0,0 +1,626 @@ +<?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-gcc" role="wrap"> + <?dbhtml filename="gcc.html"?> + + <sect1info condition="script"> + <productname>gcc</productname> + <productnumber>&gcc-version;</productnumber> + <address>&gcc-url;</address> + </sect1info> + + <title>GCC-&gcc-version;</title> + + <indexterm zone="ch-system-gcc"> + <primary sortas="a-GCC">GCC</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The GCC package contains the GNU compiler collection, which includes + the C and C++ compilers.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gcc-ch6-sbu;</seg> + <seg>&gcc-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of GCC</title> + + <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>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 --prefix=/usr \ + LD=ld \ + --enable-languages=c,c++ \ + --disable-multilib \ + --disable-bootstrap \ + --with-system-zlib</userinput></screen> + + <para>Note that for other languages, there are some prerequisites that + are not yet available. See the + <ulink url="&blfs-book;general/gcc.html">BLFS Book</ulink> + for instructions on how to build all of GCC's supported languages.</para> + + <variablelist> + <title>The meaning of the new configure parameter:</title> + + <varlistentry> + <term><parameter>--with-system-zlib</parameter></term> + <listitem> + <para>This switch tells GCC to link to the system installed copy of + the Zlib library, rather than its own internal copy.</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 GCC is considered + critical. Do not skip it under any circumstance.</para> + </important> + + <para>One set of tests in the GCC test suite is known to exhaust the stack, + so increase the stack size prior to running the tests:</para> + +<screen><userinput remap="test">ulimit -s 32768</userinput></screen> + + <para>Test the results as a non-privileged user, but do not stop at errors:</para> + +<screen><userinput remap="test">chown -Rv tester . +su tester -c "PATH=$PATH make -k check"</userinput></screen> + + <para>To receive a summary of the test suite results, run:</para> + +<screen><userinput remap="test">../contrib/test_summary</userinput></screen> + + <para>For only the summaries, pipe the output through + <userinput>grep -A7 Summ</userinput>.</para> + + <para>Results can be compared with those located at <ulink + url="&test-results;"/> and + <ulink url="https://gcc.gnu.org/ml/gcc-testresults/"/>.</para> + + <para>Six tests related to get_time are known to fail. These are + apparently related to the en_HK locale.</para> + + <para>Two tests named lookup.cc and reverse.cc in experimental/net + are known to fail in LFS chroot environment because they require + /etc/hosts and iana-etc.</para> + + <para>A few unexpected failures cannot always be avoided. The GCC developers + are usually aware of these issues, but have not resolved them yet. + Unless the test results are vastly different from those at the above URL, + it is safe to continue.</para> + + <!--note><para> + On some combinations of kernel configuration and AMD processors + there may be more than 1100 failures in the gcc.target/i386/mpx + tests (which are designed to test the MPX option on recent + Intel processors). These can safely be ignored on AMD + processors. These tests will also fail on Intel processors if MPX support + is not enabled in the kernel even though it is present on the CPU. + </para></note--> + + <para>Install the package and remove an unneeded directory:</para> + +<screen><userinput remap="install">make install +rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/&gcc-version;/include-fixed/bits/</userinput></screen> + + <para>The GCC build directory is owned by <systemitem class="username"> + tester</systemitem> now and the ownership of the installed header + directory (and its content) will be incorrect. Change the ownership to + <systemitem class="username">root</systemitem> user and group:</para> + +<screen><userinput remap="install">chown -v -R root:root \ + /usr/lib/gcc/*linux-gnu/&gcc-version;/include{,-fixed}</userinput></screen> + + <para>Create a symlink required by the <ulink + url="https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s09.html">FHS</ulink> + for "historical" reasons.</para> + +<screen><userinput remap="install">ln -sv ../usr/bin/cpp /lib</userinput></screen> + <!-- already done earlier + <para>Many packages use the name <command>cc</command> to call the C + compiler. To satisfy those packages, create a symlink:</para> + +<screen><userinput remap="install">ln -sv gcc /usr/bin/cc</userinput></screen> + --> + <para>Add a compatibility symlink to enable building programs with + Link Time Optimization (LTO):</para> + +<screen><userinput remap="install">install -v -dm755 /usr/lib/bfd-plugins +ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/&gcc-version;/liblto_plugin.so \ + /usr/lib/bfd-plugins/</userinput></screen> + + <para>Now that our final toolchain is in place, it is important to again ensure + that compiling and linking will work as expected. We do this by performing + the same sanity checks as we did earlier in the chapter:</para> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='a'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='b'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='c'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='d'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='e'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='f'])"/> + +<screen><computeroutput>/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crt1.o succeeded +/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crti.o succeeded +/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crtn.o succeeded</computeroutput></screen> + + <para>Depending on your machine architecture, the above may differ slightly, + the difference usually being the name of the directory + after <filename class="directory">/usr/lib/gcc</filename>. The important + thing to look for here is that <command>gcc</command> has found all three + <filename>crt*.o</filename> files under the + <filename class="directory">/usr/lib</filename> directory.</para> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='g'])"/> + +<screen><userinput>grep -B4 '^ /usr/include' dummy.log</userinput></screen> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='h'])"/> + +<screen><computeroutput>#include <...> search starts here: + /usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include + /usr/local/include + /usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include-fixed + /usr/include</computeroutput></screen> + + <para>Again, note that the directory named after your target triplet may be + different than the above, depending on your architecture.</para> + +<!-- This appears to be obsolete + + <note><para>As of version 4.3.0, GCC now unconditionally installs the + <filename>limits.h</filename> file into the private + <filename class="directory">include-fixed</filename> directory, and that + directory is required to be in place.</para></note> +--> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='i'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='j'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='k'])"/> + +<screen><computeroutput>SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64") +SEARCH_DIR("/usr/local/lib64") +SEARCH_DIR("/lib64") +SEARCH_DIR("/usr/lib64") +SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib") +SEARCH_DIR("/usr/local/lib") +SEARCH_DIR("/lib") +SEARCH_DIR("/usr/lib");</computeroutput></screen> + + <para>A 32-bit system may see a few different directories. For example, here + is the output from an i686 machine:</para> + +<screen><computeroutput>SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32") +SEARCH_DIR("/usr/local/lib32") +SEARCH_DIR("/lib32") +SEARCH_DIR("/usr/lib32") +SEARCH_DIR("/usr/i686-pc-linux-gnu/lib") +SEARCH_DIR("/usr/local/lib") +SEARCH_DIR("/lib") +SEARCH_DIR("/usr/lib");</computeroutput></screen> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='l'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='m'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='n'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='o'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='p'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='q'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='r'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='s'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='t'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='u'])"/> + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="adjusting.xml" + xpointer="xpointer(//*[@os='v'])"/> + + <para>Finally, move a misplaced file:</para> + +<screen><userinput remap="install">mkdir -pv /usr/share/gdb/auto-load/usr/lib +mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen> + + </sect2> + + <sect2 id="contents-gcc" role="content"> + <title>Contents of GCC</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>c++, cc (link to gcc), cpp, g++, gcc, + gcc-ar, gcc-nm, gcc-ranlib, gcov, gcov-dump, and gcov-tool</seg> + + <seg>libasan.{a,so}, libatomic.{a,so}, libcc1.so, libgcc.a, libgcc_eh.a, + libgcc_s.so, libgcov.a, libgomp.{a,so}, libitm.{a,so}, + liblsan.{a,so}, liblto_plugin.so, + libquadmath.{a,so}, libssp.{a,so}, libssp_nonshared.a, + libstdc++.{a,so}, libstdc++fs.a, libsupc++.a, libtsan.{a,so}, + and libubsan.{a,so}</seg> + + <seg>/usr/include/c++, /usr/lib/gcc, /usr/libexec/gcc, and + /usr/share/gcc-&gcc-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="c"> + <term><command>c++</command></term> + <listitem> + <para>The C++ compiler</para> + <indexterm zone="ch-system-gcc c"> + <primary sortas="b-c++">c++</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="cc"> + <term><command>cc</command></term> + <listitem> + <para>The C compiler</para> + <indexterm zone="ch-system-gcc cc"> + <primary sortas="b-cc">cc</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="cpp"> + <term><command>cpp</command></term> + <listitem> + <para>The C preprocessor; it is used by the compiler to expand the + #include, #define, and similar statements in the source files</para> + <indexterm zone="ch-system-gcc cpp"> + <primary sortas="b-cpp">cpp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="g"> + <term><command>g++</command></term> + <listitem> + <para>The C++ compiler</para> + <indexterm zone="ch-system-gcc g"> + <primary sortas="b-g++">g++</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gcc"> + <term><command>gcc</command></term> + <listitem> + <para>The C compiler</para> + <indexterm zone="ch-system-gcc gcc"> + <primary sortas="b-gcc">gcc</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gcc-ar"> + <term><command>gcc-ar</command></term> + <listitem> + <para>A wrapper around <command>ar</command> that adds a + plugin to the command line. This program is only used + to add "link time optimization" and is not useful with the + default build options</para> + <indexterm zone="ch-system-gcc gcc-ar"> + <primary sortas="b-gcc-ar">gc-ar</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gcc-nm"> + <term><command>gcc-nm</command></term> + <listitem> + <para>A wrapper around <command>nm</command> that adds a + plugin to the command line. This program is only used + to add "link time optimization" and is not useful with the + default build options</para> + <indexterm zone="ch-system-gcc gcc-nm"> + <primary sortas="b-gcc-nm">gc-nm</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gcc-ranlib"> + <term><command>gcc-ranlib</command></term> + <listitem> + <para>A wrapper around <command>ranlib</command> that adds a + plugin to the command line. This program is only used + to add "link time optimization" and is not useful with the + default build options</para> + <indexterm zone="ch-system-gcc gcc-ranlib"> + <primary sortas="b-gcc-ranlib">gc-ranlib</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gcov"> + <term><command>gcov</command></term> + <listitem> + <para>A coverage testing tool; it is used to analyze programs to + determine where optimizations will have the most effect</para> + <indexterm zone="ch-system-gcc gcov"> + <primary sortas="b-gcov">gcov</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gcov-dump"> + <term><command>gcov-dump</command></term> + <listitem> + <para>Offline gcda and gcno profile dump tool</para> + <indexterm zone="ch-system-gcc gcov-dump"> + <primary sortas="b-gcov-dump">gcov-dump</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gcov-tool"> + <term><command>gcov-tool</command></term> + <listitem> + <para>Offline gcda profile processing tool</para> + <indexterm zone="ch-system-gcc gcov-tool"> + <primary sortas="b-gcov-tool">gcov-tool</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libasan"> + <term><filename class="libraryfile">libasan</filename></term> + <listitem> + <para>The Address Sanitizer runtime library</para> + <indexterm zone="ch-system-gcc libasan"> + <primary sortas="b-libasan">libasan</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libatomic"> + <term><filename class="libraryfile">libatomic</filename></term> + <listitem> + <para>GCC atomic built-in runtime library</para> + <indexterm zone="ch-system-gcc libatomic"> + <primary sortas="b-libatomic">libatomic</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libcc1"> + <term><filename class="libraryfile">libcc1</filename></term> + <listitem> + <para>The C preprocessing library</para> + <indexterm zone="ch-system-gcc libcc1"> + <primary sortas="b-libcc1">libcc1</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libgcc"> + <term><filename class="libraryfile">libgcc</filename></term> + <listitem> + <para>Contains run-time support for <command>gcc</command></para> + <indexterm zone="ch-system-gcc libgcc"> + <primary sortas="c-libgcc">libgcc</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libgcov"> + <term><filename class="libraryfile">libgcov</filename></term> + <listitem> + <para>This library is linked in to a program when GCC is instructed + to enable profiling</para> + <indexterm zone="ch-system-gcc libgcov"> + <primary sortas="c-libgcov">libgcov</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libgomp"> + <term><filename class="libraryfile">libgomp</filename></term> + <listitem> + <para>GNU implementation of the OpenMP API for multi-platform + shared-memory parallel programming in C/C++ and Fortran</para> + <indexterm zone="ch-system-gcc libgomp"> + <primary sortas="c-libgomp">libgomp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="liblsan"> + <term><filename class="libraryfile">liblsan</filename></term> + <listitem> + <para>The Leak Sanitizer runtime library</para> + <indexterm zone="ch-system-gcc liblsan"> + <primary sortas="c-liblsan">liblsan</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="liblto_plugin"> + <term><filename class="libraryfile">liblto_plugin</filename></term> + <listitem> + <para>GCC's Link Time Optimization (LTO) plugin allows GCC to perform + optimizations across compilation units</para> + <indexterm zone="ch-system-gcc liblto_plugin"> + <primary sortas="c-liblto_plugin">liblto_plugin</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libquadmath"> + <term><filename class="libraryfile">libquadmath</filename></term> + <listitem> + <para>GCC Quad Precision Math Library API</para> + <indexterm zone="ch-system-gcc libquadmath"> + <primary sortas="c-libquadmath">libquadmath</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libssp"> + <term><filename class="libraryfile">libssp</filename></term> + <listitem> + <para>Contains routines supporting GCC's stack-smashing protection + functionality</para> + <indexterm zone="ch-system-gcc libssp"> + <primary sortas="c-libssp">libssp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libstdc"> + <term><filename class="libraryfile">libstdc++</filename></term> + <listitem> + <para>The standard C++ library</para> + <indexterm zone="ch-system-gcc libstdc"> + <primary sortas="c-libstdc++">libstdc++</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libstdcfs"> + <term><filename class="libraryfile">libstdc++fs</filename></term> + <listitem> + <para>ISO/IEC TS 18822:2015 Filesystem library</para> + <indexterm zone="ch-system-gcc libstdcfs"> + <primary sortas="c-libstdc++fs">libstdc++fs</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libsupc"> + <term><filename class="libraryfile">libsupc++</filename></term> + <listitem> + <para>Provides supporting routines for the C++ programming + language</para> + <indexterm zone="ch-system-gcc libsupc"> + <primary sortas="c-libsupc++">libsupc++</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libtsan"> + <term><filename class="libraryfile">libtsan</filename></term> + <listitem> + <para>The Thread Sanitizer runtime library</para> + <indexterm zone="ch-system-gcc libtsan"> + <primary sortas="c-libtsan">libtsan</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libubsan"> + <term><filename class="libraryfile">libubsan</filename></term> + <listitem> + <para>The Undefined Behavior Sanitizer runtime library</para> + <indexterm zone="ch-system-gcc libubsan"> + <primary sortas="c-libubsan">libubsan</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/gdbm.xml b/chapter08/gdbm.xml new file mode 100644 index 000000000..f953b63f9 --- /dev/null +++ b/chapter08/gdbm.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-system-gdbm" role="wrap"> + <?dbhtml filename="gdbm.html"?> + + <sect1info condition="script"> + <productname>gdbm</productname> + <productnumber>&gdbm-version;</productnumber> + <address>&gdbm-url;</address> + </sect1info> + + <title>GDBM-&gdbm-version;</title> + + <indexterm zone="ch-system-gdbm"> + <primary sortas="a-Gdbm">GDBM</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The GDBM package contains the GNU Database Manager. It is a library + of database functions that use extensible hashing and work similar to the + standard UNIX dbm. The library provides primitives for storing key/data + pairs, searching and retrieving the data by its key and deleting a key + along with its data. </para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gdbm-ch6-sbu;</seg> + <seg>&gdbm-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of GDBM</title> + + <para>First, fix an issue first identified by gcc-10:</para> + +<screen><userinput remap="pre">sed -r -i '/^char.*parseopt_program_(doc|args)/d' src/parseopt.c</userinput></screen> + + <para>Prepare GDBM for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --disable-static \ + --enable-libgdbm-compat</userinput></screen> + + <variablelist> + <title>The meaning of the configure option:</title> + + <varlistentry> + <term><envar>--enable-libgdbm-compat</envar></term> + <listitem> + <para>This switch enables the libgdbm compatibility library to be + built, as some packages outside of LFS may require the older DBM + routines it provides.</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> + + </sect2> + + <sect2 id="contents-gdbm" role="content"> + <title>Contents of GDBM</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + + <seglistitem> + <seg>gdbm_dump, gdbm_load, and gdbmtool</seg> + <seg>libgdbm.so and libgdbm_compat.so</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="gdbm_dump"> + <term><command>gdbm_dump</command></term> + <listitem> + <para>Dumps a GDBM database to a file</para> + <indexterm zone="ch-system-gdbm gdbm_dump"> + <primary sortas="b-gdbm_dump">gdbm_dump</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gdbm_load"> + <term><command>gdbm_load</command></term> + <listitem> + <para>Recreates a GDBM database from a dump file</para> + <indexterm zone="ch-system-gdbm gdbm_load"> + <primary sortas="b-gdbm_load">gdbm_load</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gdbmtool"> + <term><command>gdbmtool</command></term> + <listitem> + <para>Tests and modifies a GDBM database</para> + <indexterm zone="ch-system-gdbm gdbmtool"> + <primary sortas="b-gdbmtool">gdbmtool</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libgdbm"> + <term><filename class="libraryfile">libgdbm</filename></term> + <listitem> + <para>Contains functions to manipulate a hashed database</para> + <indexterm zone="ch-system-gdbm libgdbm"> + <primary sortas="c-libgdbm">libgdbm</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libgdbm_compat"> + <term><filename class="libraryfile">libgdbm_compat</filename></term> + <listitem> + <para>Compatibility library containing older DBM functions</para> + <indexterm zone="ch-system-gdbm libgdbm_compat"> + <primary sortas="c-libgdbm_compat">libgdbm_compat</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/gmp.xml b/chapter08/gmp.xml new file mode 100644 index 000000000..4bc361a56 --- /dev/null +++ b/chapter08/gmp.xml @@ -0,0 +1,164 @@ +<?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-gmp" role="wrap"> + <?dbhtml filename="gmp.html"?> + + <sect1info condition="script"> + <productname>gmp</productname> + <productnumber>&gmp-version;</productnumber> + <address>&gmp-url;</address> + </sect1info> + + <title>GMP-&gmp-version;</title> + + <indexterm zone="ch-system-gmp"> + <primary sortas="a-GMP">GMP</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The GMP package contains math libraries. These have useful functions + for arbitrary precision arithmetic.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gmp-ch6-sbu;</seg> + <seg>&gmp-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of GMP</title> + + <note> + <para>If you are building for 32-bit x86, but you have a CPU which is + capable of running 64-bit code <emphasis>and</emphasis> you have specified + <envar>CFLAGS</envar> in the environment, the configure script will + attempt to configure for 64-bits and fail. + Avoid this by invoking the configure command below with +<screen role="nodump"><userinput><parameter>ABI=32</parameter> ./configure ...</userinput></screen></para> + </note> + + <note> + <para>The default settings of GMP produce libraries optimized for + the host processor. If libraries suitable for processors less + capable than the host's CPU are desired, generic libraries can be + created by running the following: + +<screen role="nodump"><userinput>cp -v configfsf.guess config.guess +cp -v configfsf.sub config.sub</userinput></screen></para> + </note> + + <para>Prepare GMP for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --enable-cxx \ + --disable-static \ + --docdir=/usr/share/doc/gmp-&gmp-version;</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title> + + <varlistentry> + <term><parameter>--enable-cxx</parameter></term> + <listitem> + <para>This parameter enables C++ support</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--docdir=/usr/share/doc/gmp-&gmp-version;</parameter></term> + <listitem> + <para>This variable specifies the correct place for the + documentation.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package and generate the HTML documentation:</para> + +<screen><userinput remap="make">make +make html</userinput></screen> + + <important> + <para>The test suite for GMP in this section is considered critical. + Do not skip it under any circumstances.</para> + </important> + + <para>Test the results:</para> + +<screen><userinput remap="test">make check 2>&1 | tee gmp-check-log</userinput></screen> + + <caution><para>The code in gmp is highly optimized for the processor where + it is built. Occasionally, the code that detects the processor misidentifies + the system capabilities and there will be errors in the tests or other + applications using the gmp libraries with the message "Illegal + instruction". In this case, gmp should be reconfigured with the option + --build=x86_64-unknown-linux-gnu and rebuilt.</para></caution> + + <para>Ensure that all 197 tests in the test suite passed. + Check the results by issuing the following command:</para> + +<screen><userinput remap="test">awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log</userinput></screen> + + <para>Install the package and its documentation:</para> + +<screen><userinput remap="install">make install +make install-html</userinput></screen> + + </sect2> + + <sect2 id="contents-gmp" role="content"> + <title>Contents of GMP</title> + + <segmentedlist> + <segtitle>Installed Libraries</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>libgmp.so and libgmpxx.so</seg> + <seg>/usr/share/doc/gmp-&gmp-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="libgmp"> + <term><filename class="libraryfile">libgmp</filename></term> + <listitem> + <para>Contains precision math functions</para> + <indexterm zone="ch-system-gmp libgmp"> + <primary sortas="c-libgmp">libgmp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libgmpxx"> + <term><filename class="libraryfile">libgmpxx</filename></term> + <listitem> + <para>Contains C++ precision math functions</para> + <indexterm zone="ch-system-gmp libgmpxx"> + <primary sortas="c-libgmpxx">libgmpxx</primary> + </indexterm> + </listitem> + </varlistentry> + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/gperf.xml b/chapter08/gperf.xml new file mode 100644 index 000000000..d8c5b6594 --- /dev/null +++ b/chapter08/gperf.xml @@ -0,0 +1,95 @@ +<?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-gperf" role="wrap"> + <?dbhtml filename="gperf.html"?> + + <sect1info condition="script"> + <productname>gperf</productname> + <productnumber>&gperf-version;</productnumber> + <address>&gperf-url;</address> + </sect1info> + + <title>Gperf-&gperf-version;</title> + + <indexterm zone="ch-system-gperf"> + <primary sortas="a-Gperf">Gperf</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Gperf generates a perfect hash function from a key set.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gperf-ch6-sbu;</seg> + <seg>&gperf-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Gperf</title> + + <para>Prepare Gperf for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --docdir=/usr/share/doc/gperf-&gperf-version;</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>The tests are known to fail if running multiple + simultaneous tests (-j option greater than 1). To test + the results, issue:</para> + +<screen><userinput remap="test">make -j1 check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-gperf" role="content"> + <title>Contents of Gperf</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>gperf</seg> + <seg>/usr/share/doc/gperf-&gperf-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="gperf"> + <term><command>gperf</command></term> + <listitem> + <para>Generates a perfect hash from a key set</para> + <indexterm zone="ch-system-gperf gperf"> + <primary sortas="b-gperf">gperf</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/groff.xml b/chapter08/groff.xml new file mode 100644 index 000000000..aad0cbf85 --- /dev/null +++ b/chapter08/groff.xml @@ -0,0 +1,607 @@ +<?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-groff" role="wrap"> + <?dbhtml filename="groff.html"?> + + <sect1info condition="script"> + <productname>groff</productname> + <productnumber>&groff-version;</productnumber> + <address>&groff-url;</address> + </sect1info> + + <title>Groff-&groff-version;</title> + + <indexterm zone="ch-system-groff"> + <primary sortas="a-Groff">Groff</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Groff package contains programs for processing and formatting + text.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&groff-ch6-sbu;</seg> + <seg>&groff-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Groff</title> + + <para>Groff expects the environment variable <envar>PAGE</envar> to + contain the default paper size. For users in the United States, + <parameter>PAGE=letter</parameter> is appropriate. Elsewhere, + <parameter>PAGE=A4</parameter> may be more suitable. While the default + paper size is configured during compilation, it can be overridden later + by echoing either <quote>A4</quote> or <quote>letter</quote> to the + <filename>/etc/papersize</filename> file.</para> + + <para>Prepare Groff for compilation:</para> + +<screen><userinput remap="configure">PAGE=<replaceable><paper_size></replaceable> ./configure --prefix=/usr</userinput></screen> + + <para>This package does not support parallel build. Compile the package:</para> + +<screen><userinput remap="make">make -j1</userinput></screen> + + <para>This package does not come with a test suite.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-groff" role="content"> + <title>Contents of Groff</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>addftinfo, afmtodit, chem, eqn, eqn2graph, gdiffmk, glilypond, + gperl, gpinyin, grap2graph, grn, grodvi, groff, groffer, grog, grolbp, + grolj4, gropdf, grops, grotty, hpftodit, indxbib, lkbib, lookbib, + mmroff, neqn, nroff, pdfmom, pdfroff, pfbtops, pic, pic2graph, + post-grohtml, preconv, pre-grohtml, refer, roff2dvi, roff2html, + roff2pdf, roff2ps, roff2text, roff2x, soelim, tbl, tfmtodit, and + troff</seg> + <seg>/usr/lib/groff and /usr/share/doc/groff-&groff-version;, + /usr/share/groff</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="addftinfo"> + <term><command>addftinfo</command></term> + <listitem> + <para>Reads a troff font file and adds some additional font-metric + information that is used by the <command>groff</command> system</para> + <indexterm zone="ch-system-groff addftinfo"> + <primary sortas="b-addftinfo">addftinfo</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="afmtodit"> + <term><command>afmtodit</command></term> + <listitem> + <para>Creates a font file for use with <command>groff</command> and + <command>grops</command></para> + <indexterm zone="ch-system-groff afmtodit"> + <primary sortas="b-afmtodit">afmtodit</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="chem"> + <term><command>chem</command></term> + <listitem> + <para>Groff preprocessor for producing chemical structure diagrams</para> + <indexterm zone="ch-system-groff chem"> + <primary sortas="b-chem">chem</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="eqn"> + <term><command>eqn</command></term> + <listitem> + <para>Compiles descriptions of equations embedded within troff + input files into commands that are understood by + <command>troff</command></para> + <indexterm zone="ch-system-groff eqn"> + <primary sortas="b-eqn">eqn</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="eqn2graph"> + <term><command>eqn2graph</command></term> + <listitem> + <para>Converts a troff EQN (equation) into a cropped image</para> + <indexterm zone="ch-system-groff eqn2graph"> + <primary sortas="b-eqn2graph">eqn2graph</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gdiffmk"> + <term><command>gdiffmk</command></term> + <listitem> + <para>Marks differences between groff/nroff/troff files</para> + <indexterm zone="ch-system-groff gdiffmk"> + <primary sortas="b-gdiffmk">gdiffmk</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="glilypond"> + <term><command>glilypond</command></term> + <listitem> + <para>Transforms sheet music written in the lilypond language into + the groff language</para> + <indexterm zone="ch-system-groff glilypond"> + <primary sortas="b-glilypond">glilypond</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gperl"> + <term><command>gperl</command></term> + <listitem> + <para>Preprocesor for groff, allowing addition of perl code + into groff files</para> + <indexterm zone="ch-system-groff gperl"> + <primary sortas="b-gperl">gperl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gpinyin"> + <term><command>gpinyin</command></term> + <listitem> + <para>Preprocesor for groff, allowing addition of Chinese + European-like language Pinyin into groff files.</para> + <indexterm zone="ch-system-groff gpinyin"> + <primary sortas="b-gpinyin">gpinyin</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grap2graph"> + <term><command>grap2graph</command></term> + <listitem> + <para>Converts a grap diagram into a cropped bitmap image</para> + <indexterm zone="ch-system-groff grap2graph"> + <primary sortas="b-grap2graph">grap2graph</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grn"> + <term><command>grn</command></term> + <listitem> + <para>A <command>groff</command> preprocessor for gremlin files</para> + <indexterm zone="ch-system-groff grn"> + <primary sortas="b-grn">grn</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grodvi"> + <term><command>grodvi</command></term> + <listitem> + <para>A driver for <command>groff</command> that produces TeX dvi + format</para> + <indexterm zone="ch-system-groff grodvi"> + <primary sortas="b-grodvi">grodvi</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="groff"> + <term><command>groff</command></term> + <listitem> + <para>A front-end to the groff document formatting system; normally, it + runs the <command>troff</command> program and a post-processor + appropriate for the selected device</para> + <indexterm zone="ch-system-groff groff"> + <primary sortas="b-groff">groff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="groffer"> + <term><command>groffer</command></term> + <listitem> + <para>Displays groff files and man pages on X and tty terminals</para> + <indexterm zone="ch-system-groff groffer"> + <primary sortas="b-groffer">groffer</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grog"> + <term><command>grog</command></term> + <listitem> + <para>Reads files and guesses which of the <command>groff</command> + options <option>-e</option>, <option>-man</option>, <option>-me</option>, + <option>-mm</option>, <option>-ms</option>, <option>-p</option>, + <option>-s</option>, and <option>-t</option> are required for printing + files, and reports the <command>groff</command> command including those + options</para> + <indexterm zone="ch-system-groff grog"> + <primary sortas="b-grog">grog</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grolbp"> + <term><command>grolbp</command></term> + <listitem> + <para>Is a <command>groff</command> driver for Canon CAPSL printers + (LBP-4 and LBP-8 series laser printers)</para> + <indexterm zone="ch-system-groff grolbp"> + <primary sortas="b-grolbp">grolbp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grolj4"> + <term><command>grolj4</command></term> + <listitem> + <para>Is a driver for <command>groff</command> that produces output + in PCL5 format suitable for an HP LaserJet 4 printer</para> + <indexterm zone="ch-system-groff grolj4"> + <primary sortas="b-grolj4">grolj4</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gropdf"> + <term><command>gropdf</command></term> + <listitem> + <para>Translates the output of GNU <command>troff</command> to + PDF</para> + <indexterm zone="ch-system-groff gropdf"> + <primary sortas="b-gropdf">gropdf</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grops"> + <term><command>grops</command></term> + <listitem> + <para>Translates the output of GNU <command>troff</command> to + PostScript</para> + <indexterm zone="ch-system-groff grops"> + <primary sortas="b-grops">grops</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grotty"> + <term><command>grotty</command></term> + <listitem> + <para>Translates the output of GNU <command>troff</command> into + a form suitable for typewriter-like devices</para> + <indexterm zone="ch-system-groff grotty"> + <primary sortas="b-grotty">grotty</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="hpftodit"> + <term><command>hpftodit</command></term> + <listitem> + <para>Creates a font file for use with <command>groff -Tlj4</command> + from an HP-tagged font metric file</para> + <indexterm zone="ch-system-groff hpftodit"> + <primary sortas="b-hpftodit">hpftodit</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="indxbib"> + <term><command>indxbib</command></term> + <listitem> + <para>Creates an inverted index for the bibliographic databases with a + specified file for use with <command>refer</command>, + <command>lookbib</command>, and <command>lkbib</command></para> + <indexterm zone="ch-system-groff indxbib"> + <primary sortas="b-indxbib">indxbib</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lkbib"> + <term><command>lkbib</command></term> + <listitem> + <para>Searches bibliographic databases for references that contain + specified keys and reports any references found</para> + <indexterm zone="ch-system-groff lkbib"> + <primary sortas="b-lkbib">lkbib</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lookbib"> + <term><command>lookbib</command></term> + <listitem> + <para>Prints a prompt on the standard error (unless the standard input + is not a terminal), reads a line containing a set of keywords from the + standard input, searches the bibliographic databases in a specified file + for references containing those keywords, prints any references found + on the standard output, and repeats this process until the end of + input</para> + <indexterm zone="ch-system-groff lookbib"> + <primary sortas="b-lookbib">lookbib</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mmroff"> + <term><command>mmroff</command></term> + <listitem> + <para>A simple preprocessor for <command>groff</command></para> + <indexterm zone="ch-system-groff mmroff"> + <primary sortas="b-mmroff">mmroff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="neqn"> + <term><command>neqn</command></term> + <listitem> + <para>Formats equations for American Standard Code for Information + Interchange (ASCII) output</para> + <indexterm zone="ch-system-groff neqn"> + <primary sortas="b-neqn">neqn</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="nroff"> + <term><command>nroff</command></term> + <listitem> + <para>A script that emulates the <command>nroff</command> command + using <command>groff</command></para> + <indexterm zone="ch-system-groff nroff"> + <primary sortas="b-nroff">nroff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pdfmom"> + <term><command>pdfmom</command></term> + <listitem> + <para>Is a wrapper around groff that facilitates the production of PDF + documents from files formatted with the mom macros.</para> + <indexterm zone="ch-system-groff pdfmom"> + <primary sortas="b-pdfmom">pdfmom</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pdfroff"> + <term><command>pdfroff</command></term> + <listitem> + <para>Creates pdf documents using groff</para> + <indexterm zone="ch-system-groff pdfroff"> + <primary sortas="b-pdfroff">pdfroff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pfbtops"> + <term><command>pfbtops</command></term> + <listitem> + <para>Translates a PostScript font in <filename + class="extension">.pfb</filename> format to ASCII</para> + <indexterm zone="ch-system-groff pfbtops"> + <primary sortas="b-pfbtops">pfbtops</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pic"> + <term><command>pic</command></term> + <listitem> + <para>Compiles descriptions of pictures embedded within troff or + TeX input files into commands understood by TeX or + <command>troff</command></para> + <indexterm zone="ch-system-groff pic"> + <primary sortas="b-pic">pic</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pic2graph"> + <term><command>pic2graph</command></term> + <listitem> + <para>Converts a PIC diagram into a cropped image</para> + <indexterm zone="ch-system-groff pic2graph"> + <primary sortas="b-pic2graph">pic2graph</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="post-grohtml"> + <term><command>post-grohtml</command></term> + <listitem> + <para>Translates the output of GNU <command>troff</command> to + HTML</para> + <indexterm zone="ch-system-groff post-grohtml"> + <primary sortas="b-post-grohtml">post-grohtml</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="preconv"> + <term><command>preconv</command></term> + <listitem> + <para>Converts encoding of input files to something GNU + <command>troff</command> understands</para> + <indexterm zone="ch-system-groff preconv"> + <primary sortas="b-preconv">preconv</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pre-grohtml"> + <term><command>pre-grohtml </command></term> + <listitem> + <para>Translates the output of GNU <command>troff</command> to + HTML</para> + <indexterm zone="ch-system-groff pre-grohtml"> + <primary sortas="b-pre-grohtml">pre-grohtml</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="refer"> + <term><command>refer</command></term> + <listitem> + <para>Copies the contents of a file to the standard output, except + that lines between <emphasis>.[</emphasis> and <emphasis>.]</emphasis> + are interpreted as citations, and lines between <emphasis>.R1</emphasis> + and <emphasis>.R2</emphasis> are interpreted as commands for how + citations are to be processed</para> + <indexterm zone="ch-system-groff refer"> + <primary sortas="b-refer">refer</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="roff2dvi"> + <term><command>roff2dvi</command></term> + <listitem> + <para>Transforms roff files into DVI format</para> + <indexterm zone="ch-system-groff roff2dvi"> + <primary sortas="b-roff2dvi">roff2dvi</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="roff2html"> + <term><command>roff2html</command></term> + <listitem> + <para>Transforms roff files into HTML format</para> + <indexterm zone="ch-system-groff roff2html"> + <primary sortas="b-roff2html">roff2html</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="roff2pdf"> + <term><command>roff2pdf</command></term> + <listitem> + <para>Transforms roff files into PDFs</para> + <indexterm zone="ch-system-groff roff2pdf"> + <primary sortas="b-roff2pdf">roff2pdf</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="roff2ps"> + <term><command>roff2ps</command></term> + <listitem> + <para>Transforms roff files into ps files</para> + <indexterm zone="ch-system-groff roff2ps"> + <primary sortas="b-roff2ps">roff2ps</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="roff2text"> + <term><command>roff2text</command></term> + <listitem> + <para>Transforms roff files into text files</para> + <indexterm zone="ch-system-groff roff2text"> + <primary sortas="b-roff2text">roff2text</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="roff2x"> + <term><command>roff2x</command></term> + <listitem> + <para>Transforms roff files into other formats</para> + <indexterm zone="ch-system-groff roff2x"> + <primary sortas="b-roff2x">roff2x</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="soelim"> + <term><command>soelim</command></term> + <listitem> + <para>Reads files and replaces lines of the form <emphasis>.so + file</emphasis> by the contents of the mentioned + <emphasis>file</emphasis></para> + <indexterm zone="ch-system-groff soelim"> + <primary sortas="b-soelim">soelim</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="tbl"> + <term><command>tbl</command></term> + <listitem> + <para>Compiles descriptions of tables embedded within troff input + files into commands that are understood by + <command>troff</command></para> + <indexterm zone="ch-system-groff tbl"> + <primary sortas="b-tbl">tbl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="tfmtodit"> + <term><command>tfmtodit</command></term> + <listitem> + <para>Creates a font file for use with <command>groff + -Tdvi</command></para> + <indexterm zone="ch-system-groff tfmtodit"> + <primary sortas="b-tfmtodit">tfmtodit</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="troff"> + <term><command>troff</command></term> + <listitem> + <para>Is highly compatible with Unix <command>troff</command>; it + should usually be invoked using the <command>groff</command> command, + which will also run preprocessors and post-processors in the + appropriate order and with the appropriate options</para> + <indexterm zone="ch-system-groff troff"> + <primary sortas="b-troff">troff</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/iana-etc.xml b/chapter08/iana-etc.xml new file mode 100644 index 000000000..42ab25c34 --- /dev/null +++ b/chapter08/iana-etc.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ + <!ENTITY % general-entities SYSTEM "../general.ent"> + %general-entities; +]> + +<sect1 id="ch-system-iana-etc" role="wrap"> + <?dbhtml filename="iana-etc.html"?> + + <sect1info condition="script"> + <productname>iana-etc</productname> + <productnumber>&iana-etc-version;</productnumber> + <address>&iana-etc-url;</address> + </sect1info> + + <title>Iana-Etc-&iana-etc-version;</title> + + <indexterm zone="ch-system-iana-etc"> + <primary sortas="a-Iana-Etc">Iana-Etc</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Iana-Etc package provides data for network services and + protocols.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&iana-etc-ch6-sbu;</seg> + <seg>&iana-etc-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Iana-Etc</title> + + <para>For this package, we only need to copy the files into place:</para> + +<screen><userinput remap="install">cp services protocols /etc</userinput></screen> + + </sect2> + + <sect2 id="contents-iana-etc" role="content"> + <title>Contents of Iana-Etc</title> + + <segmentedlist> + <segtitle>Installed files</segtitle> + + <seglistitem> + <seg>/etc/protocols and /etc/services</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="protocols"> + <term><filename>/etc/protocols</filename></term> + <listitem> + <para>Describes the various DARPA Internet protocols that are + available from the TCP/IP subsystem</para> + <indexterm zone="ch-system-iana-etc"> + <primary sortas="e-/etc/protocols">/etc/protocols</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="services"> + <term><filename>/etc/services</filename></term> + <listitem> + <para>Provides a mapping between friendly textual names for internet + services, and their underlying assigned port numbers and protocol + types</para> + <indexterm zone="ch-system-iana-etc"> + <primary sortas="e-/etc/services">/etc/services</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/inetutils.xml b/chapter08/inetutils.xml new file mode 100644 index 000000000..c8fdd456f --- /dev/null +++ b/chapter08/inetutils.xml @@ -0,0 +1,249 @@ +<?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-inetutils" role="wrap"> + <?dbhtml filename="inetutils.html"?> + + <sect1info condition="script"> + <productname>inetutils</productname> + <productnumber>&inetutils-version;</productnumber> + <address>&inetutils-url;</address> + </sect1info> + + <title>Inetutils-&inetutils-version;</title> + + <indexterm zone="ch-system-inetutils"> + <primary sortas="a-Inetutils">Inetutils</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Inetutils package contains programs for basic networking.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&inetutils-ch6-sbu;</seg> + <seg>&inetutils-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Inetutils</title> + + <para>Prepare Inetutils for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --localstatedir=/var \ + --disable-logger \ + --disable-whois \ + --disable-rcp \ + --disable-rexec \ + --disable-rlogin \ + --disable-rsh \ + --disable-servers</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--disable-logger</parameter></term> + <listitem> + <para>This option prevents Inetutils from installing the + <command>logger</command> program, which is used by scripts to + pass messages to the System Log Daemon. Do not install it because + Util-linux installs a more recent version.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-whois</parameter></term> + <listitem> + <para>This option disables the building of the Inetutils + <command>whois</command> client, which is out of date. Instructions for + a better <command>whois</command> client are in the BLFS book.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-r*</parameter></term> + <listitem> + <para>These parameters disable building obsolete programs that should not + be used due to security issues. The functions provided by these + programs can be provided by the <application>openssh</application> + package in the BLFS book.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-servers</parameter></term> + <listitem> + <para>This disables the installation of the various network servers + included as part of the Inetutils package. These servers are deemed not + appropriate in a basic LFS system. Some are insecure by nature and are + only considered safe on trusted networks. Note that + better replacements are available for many of these servers.</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> + + <note><para>One test, libls.sh, may fail in the initial chroot + environment but will pass if the test is rerun after the LFS system + is complete. One test, ping-localhost.sh, will fail if the host + system does not have ipv6 capability.</para></note> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Move some programs so they are available if <filename + class='directory'>/usr</filename> is not accessible:</para> + +<screen><userinput remap="install">mv -v /usr/bin/{hostname,ping,ping6,traceroute} /bin +mv -v /usr/bin/ifconfig /sbin</userinput></screen> + + </sect2> + + <sect2 id="contents-inetutils" role="content"> + <title>Contents of Inetutils</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + + <seglistitem> + <seg>dnsdomainname, ftp, ifconfig, hostname, ping, ping6, + talk, telnet, tftp, and traceroute</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="dnsdomainname"> + <term><command>dnsdomainname</command></term> + <listitem> + <para>Show the system's DNS domain name</para> + <indexterm zone="ch-system-inetutils dnsdomainname"> + <primary sortas="b-dnsdomainname">dnsdomainname</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ftp"> + <term><command>ftp</command></term> + <listitem> + <para>Is the file transfer protocol program</para> + <indexterm zone="ch-system-inetutils ftp"> + <primary sortas="b-ftp">ftp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="hostname"> + <term><command>hostname</command></term> + <listitem> + <para>Reports or sets the name of the host</para> + <indexterm zone="ch-system-inetutils hostname"> + <primary sortas="b-hostname">hostname</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ifconfig"> + <term><command>ifconfig</command></term> + <listitem> + <para>Manages network interfaces</para> + <indexterm zone="ch-system-inetutils ifconfig"> + <primary sortas="b-ifconfig">ifconfig</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ping"> + <term><command>ping</command></term> + <listitem> + <para>Sends echo-request packets and reports how long the replies + take</para> + <indexterm zone="ch-system-inetutils ping"> + <primary sortas="b-ping">ping</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ping6"> + <term><command>ping6</command></term> + <listitem> + <para>A version of <command>ping</command> for IPv6 networks</para> + <indexterm zone="ch-system-inetutils ping6"> + <primary sortas="b-ping6">ping6</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="talk"> + <term><command>talk</command></term> + <listitem> + <para>Is used to chat with another user</para> + <indexterm zone="ch-system-inetutils talk"> + <primary sortas="b-talk">talk</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="telnet"> + <term><command>telnet</command></term> + <listitem> + <para>An interface to the TELNET protocol</para> + <indexterm zone="ch-system-inetutils telnet"> + <primary sortas="b-telnet">telnet</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="tftp"> + <term><command>tftp</command></term> + <listitem> + <para>A trivial file transfer program</para> + <indexterm zone="ch-system-inetutils tftp"> + <primary sortas="b-tftp">tftp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="traceroute"> + <term><command>traceroute</command></term> + <listitem> + <para>Traces the route your packets take from the host you are + working on to another host on a network, showing all the intermediate + hops (gateways) along the way</para> + <indexterm zone="ch-system-inetutils traceroute"> + <primary sortas="b-traceroute">traceroute</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/intltool.xml b/chapter08/intltool.xml new file mode 100644 index 000000000..9e9ebad20 --- /dev/null +++ b/chapter08/intltool.xml @@ -0,0 +1,141 @@ +<?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-intltool" role="wrap"> + <?dbhtml filename="intltool.html"?> + + <sect1info condition="script"> + <productname>intltool</productname> + <productnumber>&intltool-version;</productnumber> + <address>&intltool-url;</address> + </sect1info> + + <title>Intltool-&intltool-version;</title> + + <indexterm zone="ch-system-intltool"> + <primary sortas="a-Intltool">Intltool</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Intltool is an internationalization tool used for extracting + translatable strings from source files.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&intltool-ch6-sbu;</seg> + <seg>&intltool-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Intltool</title> + + <para>First fix a warning that is caused by perl-5.22 and later:</para> + +<screen><userinput remap="pre">sed -i 's:\\\${:\\\$\\{:' intltool-update.in</userinput></screen> + + <para>Prepare Intltool 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 +install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-&intltool-version;/I18N-HOWTO</userinput></screen> + + </sect2> + + <sect2 id="contents-intltool" role="content"> + <title>Contents of Intltool</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>intltool-extract, intltool-merge, intltool-prepare, + intltool-update, and intltoolize</seg> + <seg>/usr/share/doc/intltool-&intltool-version; and + /usr/share/intltool</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="intltoolize"> + <term><command>intltoolize</command></term> + <listitem> + <para>Prepares a package to use intltool</para> + <indexterm zone="ch-system-intltool intltoolize"> + <primary sortas="b-intltoolize">intltoolize</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="intltool-extract"> + <term><command>intltool-extract</command></term> + <listitem> + <para>Generates header files that can be read by <command>gettext</command></para> + <indexterm zone="ch-system-intltool intltool-extract"> + <primary sortas="b-intltool-extract">intltool-extract</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="intltool-merge"> + <term><command>intltool-merge</command></term> + <listitem> + <para>Merges translated strings into various file types</para> + <indexterm zone="ch-system-intltool intltool-merge"> + <primary sortas="b-intltool-merge">intltool-merge</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="intltool-prepare"> + <term><command>intltool-prepare</command></term> + <listitem> + <para>Updates pot files and merges them with translation files</para> + <indexterm zone="ch-system-intltool intltool-prepare"> + <primary sortas="b-intltool-prepare">intltool-prepare</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="intltool-update"> + <term><command>intltool-update</command></term> + <listitem> + <para>Updates the po template files and merges them with the translations</para> + <indexterm zone="ch-system-intltool intltool-update"> + <primary sortas="b-intltool-update">intltool-update</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/iproute2.xml b/chapter08/iproute2.xml new file mode 100644 index 000000000..8b868df65 --- /dev/null +++ b/chapter08/iproute2.xml @@ -0,0 +1,322 @@ +<?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-iproute2" role="wrap"> + <?dbhtml filename="iproute2.html"?> + + <sect1info condition="script"> + <productname>iproute2</productname> + <productnumber>&iproute2-version;</productnumber> + <address>&iproute2-url;</address> + </sect1info> + + <title>IPRoute2-&iproute2-version;</title> + + <indexterm zone="ch-system-iproute2"> + <primary sortas="a-IPRoute2">IPRoute2</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The IPRoute2 package contains programs for basic and advanced IPV4-based + networking.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&iproute2-ch6-sbu;</seg> + <seg>&iproute2-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of IPRoute2</title> + + <para>The <command>arpd</command> program included in this package will not + be built since it is dependent on Berkeley DB, which is not installed in + LFS. However, a directory for <command>arpd</command> and a man page will still + be installed. Prevent this by running the commands below. + If the <command>arpd</command> binary is needed, + instructions for compiling Berkeley DB can be found in the BLFS Book at + <ulink url="&blfs-book;server/databases.html#db"/>. + </para> + +<screen><userinput remap="pre">sed -i /ARPD/d Makefile +rm -fv man/man8/arpd.8</userinput></screen> + + <para>It is also necessary to disable building two modules that + requires <ulink url="&blfs-book;postlfs/iptables.html"/>.</para> + +<screen><userinput remap="pre">sed -i 's/.m_ipt.o//' tc/Makefile</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>This package does not have a working test suite.</para> +<!-- currently not useful, no tests actually run + <para>This package comes with a test suite, but due to assumptions it makes, + it is not possible to reliably run these tests from within the chroot + environment. If you wish to run these tests after booting into your new LFS + system, ensure you enable <filename>/proc/config.gz</filename> support + in your kernel ("General setup" -> "Enable access to + .config through /proc/config.gz" [CONFIG_IKCONFIG_PROC]), then run + 'make alltests' from the <filename class="directory">testsuite/</filename> + subdirectory.</para>--> + + <para>Install the package:</para> + +<screen><userinput remap="install">make DOCDIR=/usr/share/doc/iproute2-&iproute2-version; install</userinput></screen> + + </sect2> + + <sect2 id="contents-iproute2" role="content"> + <title>Contents of IPRoute2</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>bridge, ctstat (link to lnstat), genl, ifcfg, ifstat, ip, lnstat, + nstat, routef, routel, rtacct, rtmon, rtpr, rtstat (link to lnstat), ss, + and tc</seg> + <seg>/etc/iproute2, /usr/lib/tc, and /usr/share/doc/iproute2-&iproute2-version;, + </seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="bridge"> + <term><command>bridge</command></term> + <listitem> + <para>Configures network bridges</para> + <indexterm zone="ch-system-iproute2 bridge"> + <primary sortas="b-bridge">bridge</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ctstat"> + <term><command>ctstat</command></term> + <listitem> + <para>Connection status utility</para> + <indexterm zone="ch-system-iproute2 ctstat"> + <primary sortas="b-ctstat">ctstat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="genl"> + <term><command>genl</command></term> + <listitem> + <para>Generic netlink utility frontend</para> + <indexterm zone="ch-system-iproute2 genl"> + <primary sortas="b-genl">genl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ifcfg"> + <term><command>ifcfg</command></term> + <listitem> + <para>A shell script wrapper for the <command>ip</command> command + [Note that it requires the <command>arping</command> and + <command>rdisk</command> programs from the + iputils package found at <ulink url="http://www.skbuff.net/iputils/"/>.]</para> + <indexterm zone="ch-system-iproute2 ifcfg"> + <primary sortas="b-ifcfg">ifcfg</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ifstat"> + <term><command>ifstat</command></term> + <listitem> + <para>Shows the interface statistics, including the amount of + transmitted and received packets by interface</para> + <indexterm zone="ch-system-iproute2 ifstat"> + <primary sortas="b-ifstat">ifstat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ip"> + <term><command>ip</command></term> + <listitem> + <para>The main executable. It has several different functions:</para> + + <para><command>ip link <replaceable><device></replaceable></command> + allows users to look at the state of devices and to make changes</para> + + <para><command>ip addr</command> allows users to look at addresses and + their properties, add new addresses, and delete old ones</para> + + <para><command>ip neighbor</command> allows users to look at neighbor + bindings and their properties, add new neighbor entries, and delete + old ones</para> + + <para><command>ip rule</command> allows users to look at the routing + policies and change them</para> + + <para><command>ip route</command> allows users to look at the routing + table and change routing table rules</para> + + <para><command>ip tunnel</command> allows users to look at the IP + tunnels and their properties, and change them</para> + + <para><command>ip maddr</command> allows users to look at the multicast + addresses and their properties, and change them</para> + + <para><command>ip mroute</command> allows users to set, change, or + delete the multicast routing</para> + + <para><command>ip monitor</command> allows users to continuously monitor + the state of devices, addresses and routes</para> + <indexterm zone="ch-system-iproute2 ip"> + <primary sortas="b-ip">ip</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lnstat"> + <term><command>lnstat</command></term> + <listitem> + <para>Provides Linux network statistics; it is a generalized and more + feature-complete replacement for the old <command>rtstat</command> + program</para> + <indexterm zone="ch-system-iproute2 lnstat"> + <primary sortas="b-lnstat">lnstat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="nstat"> + <term><command>nstat</command></term> + <listitem> + <para>Shows network statistics</para> + <indexterm zone="ch-system-iproute2 nstat"> + <primary sortas="b-nstat">nstat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="routef"> + <term><command>routef</command></term> + <listitem> + <para>A component of <command>ip route</command>. This is for flushing + the routing tables</para> + <indexterm zone="ch-system-iproute2 routef"> + <primary sortas="b-routef">routef</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="routel"> + <term><command>routel</command></term> + <listitem> + <para>A component of <command>ip route</command>. This is for listing + the routing tables</para> + <indexterm zone="ch-system-iproute2 routel"> + <primary sortas="b-routel">routel</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rtacct"> + <term><command>rtacct</command></term> + <listitem> + <para>Displays the contents of + <filename>/proc/net/rt_acct</filename></para> + <indexterm zone="ch-system-iproute2 rtacct"> + <primary sortas="b-rtacct">rtacct</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rtmon"> + <term><command>rtmon</command></term> + <listitem> + <para>Route monitoring utility</para> + <indexterm zone="ch-system-iproute2 rtmon"> + <primary sortas="b-rtmon">rtmon</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rtpr"> + <term><command>rtpr</command></term> + <listitem> + <para>Converts the output of <command>ip -o</command> back into a + readable form</para> + <indexterm zone="ch-system-iproute2 rtpr"> + <primary sortas="b-rtpr">rtpr</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rtstat"> + <term><command>rtstat</command></term> + <listitem> + <para>Route status utility</para> + <indexterm zone="ch-system-iproute2 rtstat"> + <primary sortas="b-rtstat">rtstat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ss"> + <term><command>ss</command></term> + <listitem> + <para>Similar to the <command>netstat</command> command; shows active + connections</para> + <indexterm zone="ch-system-iproute2 ss"> + <primary sortas="b-ss">ss</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="tc"> + <term><command>tc</command></term> + <listitem> + <para>Traffic Controlling Executable; this is for Quality Of Service + (QOS) and Class Of Service (COS) implementations</para> + + <para><command>tc qdisc</command> allows users to setup the queueing + discipline</para> + + <para><command>tc class</command> allows users to setup classes based + on the queuing discipline scheduling</para> + + <para><command>tc estimator</command> allows users to estimate the + network flow into a network</para> + + <para><command>tc filter</command> allows users to setup the QOS/COS + packet filtering</para> + + <para><command>tc policy</command> allows users to setup the QOS/COS + policies</para> + <indexterm zone="ch-system-iproute2 ss"> + <primary sortas="b-tc">tc</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/kbd.xml b/chapter08/kbd.xml new file mode 100644 index 000000000..2f9cfd3f1 --- /dev/null +++ b/chapter08/kbd.xml @@ -0,0 +1,392 @@ +<?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-kbd" role="wrap"> + <?dbhtml filename="kbd.html"?> + + <sect1info condition="script"> + <productname>kbd</productname> + <productnumber>&kbd-version;</productnumber> + <address>&kbd-url;</address> + </sect1info> + + <title>Kbd-&kbd-version;</title> + + <indexterm zone="ch-system-kbd"> + <primary sortas="a-Kbd">Kbd</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Kbd package contains key-table files, console fonts, and keyboard + utilities.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&kbd-ch6-sbu;</seg> + <seg>&kbd-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Kbd</title> + + <para>The behaviour of the Backspace and Delete keys is not consistent + across the keymaps in the Kbd package. The following patch fixes this + issue for i386 keymaps:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&kbd-backspace-patch;</userinput></screen> + + <para>After patching, the Backspace key generates the character with code 127, + and the Delete key generates a well-known escape sequence.</para> + + <para>Remove the redundant <command>resizecons</command> program (it requires + the defunct svgalib to provide the video mode files - for normal use + <command>setfont</command> sizes the console appropriately) together with its + manpage.</para> + +<screen><userinput remap="pre">sed -i 's/\(RESIZECONS_PROGS=\)yes/\1no/g' configure +sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in</userinput></screen> + + <para>Prepare Kbd for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --disable-vlock</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--disable-vlock</parameter></term> + <listitem> + <para>This option prevents the vlock utility from being built, as it + requires the PAM library, which isn't available in the chroot + environment.</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> + + <note> + <para>For some languages (e.g., Belarusian) the Kbd package doesn't + provide a useful keymap where the stock <quote>by</quote> keymap assumes + the ISO-8859-5 encoding, and the CP1251 keymap is normally used. Users of + such languages have to download working keymaps separately.</para> + </note> + + <para>If desired, install the documentation:</para> + +<screen><userinput remap="install">mkdir -v /usr/share/doc/kbd-&kbd-version; +cp -R -v docs/doc/* /usr/share/doc/kbd-&kbd-version;</userinput></screen> + + </sect2> + + <sect2 id="contents-kbd" role="content"> + <title>Contents of Kbd</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, kbdinfo, + kbd_mode, kbdrate, loadkeys, loadunimap, + mapscrn, openvt, psfaddtable (link to psfxtable), psfgettable (link to + psfxtable), psfstriptable (link to psfxtable), psfxtable, <!--resizecons,--> + setfont, setkeycodes, setleds, setmetamode, setvtrgb, + showconsolefont, showkey, unicode_start, and unicode_stop</seg> + <seg>/usr/share/consolefonts, /usr/share/consoletrans, /usr/share/keymaps, + /usr/share/doc/kbd-&kbd-version;, and /usr/share/unimaps</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="chvt"> + <term><command>chvt</command></term> + <listitem> + <para>Changes the foreground virtual terminal</para> + <indexterm zone="ch-system-kbd chvt"> + <primary sortas="b-chvt">chvt</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="deallocvt"> + <term><command>deallocvt</command></term> + <listitem> + <para>Deallocates unused virtual terminals</para> + <indexterm zone="ch-system-kbd deallocvt"> + <primary sortas="b-deallocvt">deallocvt</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="dumpkeys"> + <term><command>dumpkeys</command></term> + <listitem> + <para>Dumps the keyboard translation tables</para> + <indexterm zone="ch-system-kbd dumpkeys"> + <primary sortas="b-dumpkeys">dumpkeys</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="fgconsole"> + <term><command>fgconsole</command></term> + <listitem> + <para>Prints the number of the active virtual terminal</para> + <indexterm zone="ch-system-kbd fgconsole"> + <primary sortas="b-fgconsole">fgconsole</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="getkeycodes"> + <term><command>getkeycodes</command></term> + <listitem> + <para>Prints the kernel scancode-to-keycode mapping table</para> + <indexterm zone="ch-system-kbd getkeycodes"> + <primary sortas="b-getkeycodes">getkeycodes</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="kbdinfo"> + <term><command>kbdinfo</command></term> + <listitem> + <para>Obtains information about the status of a console</para> + <indexterm zone="ch-system-kbd kbdinfo"> + <primary sortas="b-kbdinfo">kbdinfo</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="kbd_mode"> + <term><command>kbd_mode</command></term> + <listitem> + <para>Reports or sets the keyboard mode</para> + <indexterm zone="ch-system-kbd kbd_mode"> + <primary sortas="b-kbd_mode">kbd_mode</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="kbdrate"> + <term><command>kbdrate</command></term> + <listitem> + <para>Sets the keyboard repeat and delay rates</para> + <indexterm zone="ch-system-kbd kbdrate"> + <primary sortas="b-kbdrate">kbdrate</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="loadkeys"> + <term><command>loadkeys</command></term> + <listitem> + <para>Loads the keyboard translation tables</para> + <indexterm zone="ch-system-kbd loadkeys"> + <primary sortas="b-loadkeys">loadkeys</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="loadunimap"> + <term><command>loadunimap</command></term> + <listitem> + <para>Loads the kernel unicode-to-font mapping table</para> + <indexterm zone="ch-system-kbd loadunimap"> + <primary sortas="b-loadunimap">loadunimap</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mapscrn"> + <term><command>mapscrn</command></term> + <listitem> + <para>An obsolete program that used to load a user-defined output + character mapping table into the console driver; this is now done + by <command>setfont</command></para> + <indexterm zone="ch-system-kbd mapscrn"> + <primary sortas="b-mapscrn">mapscrn</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="openvt"> + <term><command>openvt</command></term> + <listitem> + <para>Starts a program on a new virtual terminal (VT)</para> + <indexterm zone="ch-system-kbd openvt"> + <primary sortas="b-openvt">openvt</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="psfaddtable"> + <term><command>psfaddtable</command></term> + <listitem> + <para>Adds a Unicode character table to a console font</para> + <indexterm zone="ch-system-kbd psfaddtable"> + <primary sortas="b-psfaddtable">psfaddtable</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="psfgettable"> + <term><command>psfgettable</command></term> + <listitem> + <para>Extracts the embedded Unicode character table from a console + font</para> + <indexterm zone="ch-system-kbd psfgettable"> + <primary sortas="b-psfgettable">psfgettable</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="psfstriptable"> + <term><command>psfstriptable</command></term> + <listitem> + <para>Removes the embedded Unicode character table from a console + font</para> + <indexterm zone="ch-system-kbd psfstriptable"> + <primary sortas="b-psfstriptable">psfstriptable</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="psfxtable"> + <term><command>psfxtable</command></term> + <listitem> + <para>Handles Unicode character tables for console fonts</para> + <indexterm zone="ch-system-kbd psfxtable"> + <primary sortas="b-psfxtable">psfxtable</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="setfont"> + <term><command>setfont</command></term> + <listitem> + <para>Changes the Enhanced Graphic Adapter (EGA) and Video Graphics + Array (VGA) fonts on the console</para> + <indexterm zone="ch-system-kbd setfont"> + <primary sortas="b-setfont">setfont</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="setkeycodes"> + <term><command>setkeycodes</command></term> + <listitem> + <para>Loads kernel scancode-to-keycode mapping table entries; this is + useful if there are unusual keys on the keyboard</para> + <indexterm zone="ch-system-kbd setkeycodes"> + <primary sortas="b-setkeycodes">setkeycodes</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="setleds"> + <term><command>setleds</command></term> + <listitem> + <para>Sets the keyboard flags and Light Emitting Diodes (LEDs)</para> + <indexterm zone="ch-system-kbd setleds"> + <primary sortas="b-setleds">setleds</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="setmetamode"> + <term><command>setmetamode</command></term> + <listitem> + <para>Defines the keyboard meta-key handling</para> + <indexterm zone="ch-system-kbd setmetamode"> + <primary sortas="b-setmetamode">setmetamode</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="setvtrgb"> + <term><command>setvtrgb</command></term> + <listitem> + <para>Sets the console color map in all virtual terminals</para> + <indexterm zone="ch-system-kbd setvtrgb"> + <primary sortas="b-setvtrgb">setvtrgb</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="showconsolefont"> + <term><command>showconsolefont</command></term> + <listitem> + <para>Shows the current EGA/VGA console screen font</para> + <indexterm zone="ch-system-kbd showconsolefont"> + <primary sortas="b-showconsolefont">showconsolefont</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="showkey"> + <term><command>showkey</command></term> + <listitem> + <para>Reports the scancodes, keycodes, and ASCII codes of the keys + pressed on the keyboard</para> + <indexterm zone="ch-system-kbd showkey"> + <primary sortas="b-showkey">showkey</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="unicode_start"> + <term><command>unicode_start</command></term> + <listitem> + <para>Puts the keyboard and console in UNICODE mode [Don't use this + program unless your keymap file is in the ISO-8859-1 encoding. For + other encodings, this utility produces incorrect results.]</para> + <indexterm zone="ch-system-kbd unicode_start"> + <primary sortas="b-unicode_start">unicode_start</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="unicode_stop"> + <term><command>unicode_stop</command></term> + <listitem> + <para>Reverts keyboard and console from UNICODE mode</para> + <indexterm zone="ch-system-kbd unicode_stop"> + <primary sortas="b-unicode_stop">unicode_stop</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/kernel.xml b/chapter08/kernel.xml deleted file mode 100644 index 0033028cf..000000000 --- a/chapter08/kernel.xml +++ /dev/null @@ -1,403 +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-bootable-kernel" role="wrap"> - <?dbhtml filename="kernel.html"?> - - <sect1info condition="script"> - <productname>kernel</productname> - <productnumber>&linux-version;</productnumber> - <address>&linux-url;</address> - </sect1info> - - <title>Linux-&linux-version;</title> - - <indexterm zone="ch-bootable-kernel"> - <primary sortas="a-Linux">Linux</primary> - </indexterm> - - <sect2 role="package"> - <title/> - - <para>The Linux package contains the Linux kernel.</para> - - <segmentedlist> - <segtitle>&buildtime;</segtitle> - <segtitle>&diskspace;</segtitle> - - <seglistitem> - <seg>&linux-ch8-sbu;</seg> - <seg>&linux-ch8-du;</seg> - </seglistitem> - </segmentedlist> - - </sect2> - - <sect2 role="installation"> - <title>Installation of the kernel</title> - - <para>Building the kernel involves a few steps—configuration, - compilation, and installation. Read the <filename>README</filename> file - in the kernel source tree for alternative methods to the way this book - configures the kernel.</para> - - <para>Prepare for compilation by running the following command:</para> - -<screen><userinput remap="pre">make mrproper</userinput></screen> - - <para>This ensures that the kernel tree is absolutely clean. The - kernel team recommends that this command be issued prior to each - kernel compilation. Do not rely on the source tree being clean after - un-tarring.</para> - - <!-- Support for compiling a keymap into the kernel is deliberately removed --> - - <para>Configure the kernel via a menu-driven interface. For general - information on kernel configuration see <ulink - url="&hints-root;kernel-configuration.txt"/>. BLFS has some information - regarding particular kernel configuration requirements of packages outside - of LFS at <ulink - url="&blfs-book;longindex.html#kernel-config-index"/>. Additional - information about configuring and building the kernel can be found at - <ulink url="http://www.kroah.com/lkn/"/> </para> - - <note> - - <para>A good starting place for setting up the kernel configuration is to - run <command>make defconfig</command>. This will set the base - configuration to a good state that takes your current system architecture - into account.</para> - - <para>Be sure to enable/disable/set the following features or the system might - not work correctly or boot at all:</para> - - <screen role="nodump" revision="sysv"> -Device Drivers ---> - Generic Driver Options ---> - [ ] Support for uevent helper [CONFIG_UEVENT_HELPER] - [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS] - -Kernel hacking ---> - Choose kernel unwinder (Frame pointer unwinder) ---> [CONFIG_UNWINDER_FRAME_POINTER]</screen> - - <screen role="nodump" revision="systemd"> -General setup --> - [*] Control Group support [CONFIG_CGROUPS] - [ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED] - [*] Configure standard kernel features (expert users) [CONFIG_EXPERT] ---> - [*] open by fhandle syscalls [CONFIG_FHANDLE] - [ ] Auditing support [CONFIG_AUDIT] -Processor type and features ---> - [*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP] -Firmware Drivers ---> - [*] Export DMI identification via sysfs to userspace [CONFIG_DMIID] -Networking support ---> - Networking options ---> - <*> The IPv6 protocol [CONFIG_IPV6] -Device Drivers ---> - Generic Driver Options ---> - [ ] Support for uevent helper [CONFIG_UEVENT_HELPER] - [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS] - Firmware Loader ---> - [ ] Enable the firmware sysfs fallback mechanism [CONFIG_FW_LOADER_USER_HELPER] -File systems ---> - [*] Inotify support for userspace [CONFIG_INOTIFY_USER] - <*> Kernel automounter support (supports v3, v4, and v5) [CONFIG_AUTOFS_FS] - Pseudo filesystems ---> - [*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL] - [*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR]</screen> - </note> - - <note revision="systemd"> - <para>While "The IPv6 Protocol" is not strictly - required, it is highly recommended by the systemd developers.</para> - </note> - - <para revision="sysv">There are several other options that may be desired - depending on the requirements for the system. For a list of options needed - for BLFS packages, see the <ulink - url="&lfs-root;blfs/view/&short-version;/longindex.html#kernel-config-index">BLFS - Index of Kernel Settings</ulink> - (&lfs-root;blfs/view/&short-version;/longindex.html#kernel-config-index).</para> - - <note> - <para>If your host hardware is using UEFI, then the 'make defconfig' - above should automatically add in some EFI-related kernel options.</para> - - <para>In order to allow your LFS kernel to be booted from within your - host's UEFI boot environment, your kernel must have this option - selected:</para> - -<screen role="nodump">Processor type and features ---> - [*] EFI stub support [CONFIG_EFI_STUB]</screen> - - <para>A fuller description of managing UEFI environments from within LFS - is covered by the lfs-uefi.txt hint at - <ulink - url="&hints-root;lfs-uefi.txt"/>. - </para> - </note> - - <variablelist> - <title>The rationale for the above configuration items:</title> - - <varlistentry> - <term><parameter>Support for uevent helper</parameter></term> - <listitem> - <para>Having this option set may interfere with device - management when using Udev/Eudev. </para> - </listitem> - </varlistentry> - - <varlistentry> - <term><parameter>Maintain a devtmpfs</parameter></term> - <listitem> - <para>This will create automated device nodes which are populated by the - kernel, even without Udev running. Udev then runs on top of this, - managing permissions and adding symlinks. This configuration - item is required for all users of Udev/Eudev.</para> - </listitem> - </varlistentry> - - </variablelist> - -<screen role="nodump"><userinput>make menuconfig</userinput></screen> - - <variablelist> - <title>The meaning of optional make environment variables:</title> - - <varlistentry> - <term><parameter>LANG=<host_LANG_value> LC_ALL=</parameter></term> - <listitem> - <para>This establishes the locale setting to the one used on the - host. This may be needed for a proper menuconfig ncurses interface - line drawing on a UTF-8 linux text console.</para> - - <para>If used, be sure to replace - <replaceable><host_LANG_value></replaceable> by the value of - the <envar>$LANG</envar> variable from your host. You can - alternatively use instead the host's value of <envar>$LC_ALL</envar> - or <envar>$LC_CTYPE</envar>.</para> - </listitem> - </varlistentry> - - </variablelist> - - <para>Alternatively, <command>make oldconfig</command> may be more - appropriate in some situations. See the <filename>README</filename> - file for more information.</para> - - <para>If desired, skip kernel configuration by copying the kernel - config file, <filename>.config</filename>, from the host system - (assuming it is available) to the unpacked <filename - class="directory">linux-&linux-version;</filename> directory. However, - we do not recommend this option. It is often better to explore all the - configuration menus and create the kernel configuration from - scratch.</para> - - <para>Compile the kernel image and modules:</para> - -<screen><userinput remap="make">make</userinput></screen> - - <para>If using kernel modules, module configuration in <filename - class="directory">/etc/modprobe.d</filename> may be required. - Information pertaining to modules and kernel configuration is - located in <xref linkend="ch-config-udev"/> and in the kernel - documentation in the <filename - class="directory">linux-&linux-version;/Documentation</filename> directory. - Also, <filename>modprobe.d(5)</filename> may be of interest.</para> - - <para>Unless module support has been disabled in the kernel configuration, - install the modules with:</para> - -<screen><userinput remap="install">make modules_install</userinput></screen> - - <para>After kernel compilation is complete, additional steps are - required to complete the installation. Some files need to be copied to - the <filename class="directory">/boot</filename> directory.</para> - - <caution> - <para>If the host system has a separate /boot partition, the files copied - below should go there. The easiest way to do that is to bind /boot on the - host (outside chroot) to /mnt/lfs/boot before proceeding. As the root - user in the <emphasis>host system</emphasis>:</para> - -<screen role="nodump"><userinput>mount --bind /boot /mnt/lfs/boot</userinput></screen> - </caution> - - <para>The path to the kernel image may vary depending on the platform being - used. The filename below can be changed to suit your taste, but the stem of - the filename should be <emphasis>vmlinuz</emphasis> to be compatible with - the automatic setup of the boot process described in the next section. The - following command assumes an x86 architecture:</para> - -<screen revision="sysv"><userinput remap="install">cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version;</userinput></screen> - -<screen revision="systemd"><userinput remap="install">cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&versiond;</userinput></screen> - - <para><filename>System.map</filename> is a symbol file for the kernel. - It maps the function entry points of every function in the kernel API, - as well as the addresses of the kernel data structures for the running - kernel. It is used as a resource when investigating kernel problems. - Issue the following command to install the map file:</para> - -<screen><userinput remap="install">cp -iv System.map /boot/System.map-&linux-version;</userinput></screen> - - <para>The kernel configuration file <filename>.config</filename> - produced by the <command>make menuconfig</command> step - above contains all the configuration selections for the kernel - that was just compiled. It is a good idea to keep this file for future - reference:</para> - -<screen><userinput remap="install">cp -iv .config /boot/config-&linux-version;</userinput></screen> - - <para>Install the documentation for the Linux kernel:</para> - -<screen><userinput remap="install">install -d /usr/share/doc/linux-&linux-version; -cp -r Documentation/* /usr/share/doc/linux-&linux-version;</userinput></screen> - - <para>It is important to note that the files in the kernel source - directory are not owned by <emphasis>root</emphasis>. Whenever a - package is unpacked as user <emphasis>root</emphasis> (like we did - inside chroot), the files have the user and group IDs of whatever - they were on the packager's computer. This is usually not a problem - for any other package to be installed because the source tree is - removed after the installation. However, the Linux source tree is - often retained for a long time. Because of this, there is a chance - that whatever user ID the packager used will be assigned to somebody - on the machine. That person would then have write access to the kernel - source.</para> - - <note> - <para>In many cases, the configuration of the kernel will need to be - updated for packages that will be installed later in BLFS. Unlike - other packages, it is not necessary to remove the kernel source tree - after the newly built kernel is installed.</para> - - <para>If the kernel source tree is going to be retained, run - <command>chown -R 0:0</command> on the <filename - class="directory">linux-&linux-version;</filename> directory to ensure - all files are owned by user <emphasis>root</emphasis>.</para> - </note> - - <warning> - <para>Some kernel documentation recommends creating a symlink from - <filename class="symlink">/usr/src/linux</filename> pointing to the kernel - source directory. This is specific to kernels prior to the 2.6 series and - <emphasis>must not</emphasis> be created on an LFS system as it can cause - problems for packages you may wish to build once your base LFS system is - complete.</para> - </warning> - - <warning> - <para>The headers in the system's <filename - class="directory">include</filename> directory (<filename - class="directory">/usr/include</filename>) should - <emphasis>always</emphasis> be the ones against which Glibc was compiled, - that is, the sanitised headers installed in <xref - linkend="ch-tools-linux-headers"/>. Therefore, they should - <emphasis>never</emphasis> be replaced by either the raw kernel headers - or any other kernel sanitized headers.</para> - </warning> - - </sect2> - - <sect2 id="conf-modprobe" role="configuration"> - <title>Configuring Linux Module Load Order</title> - - <indexterm zone="conf-modprobe"> - <primary sortas="e-/etc/modprobe.d/usb.conf">/etc/modprobe.d/usb.conf</primary> - </indexterm> - - <para>Most of the time Linux modules are loaded automatically, but - sometimes it needs some specific direction. The program that loads - modules, <command>modprobe</command> or <command>insmod</command>, uses - <filename>/etc/modprobe.d/usb.conf</filename> for this purpose. This file - needs to be created so that if the USB drivers (ehci_hcd, ohci_hcd and - uhci_hcd) have been built as modules, they will be loaded in the correct - order; ehci_hcd needs to be loaded prior to ohci_hcd and uhci_hcd in order - to avoid a warning being output at boot time.</para> - - <para>Create a new file <filename>/etc/modprobe.d/usb.conf</filename> by running - the following:</para> - -<screen><userinput>install -v -m755 -d /etc/modprobe.d -cat > /etc/modprobe.d/usb.conf << "EOF" -<literal># Begin /etc/modprobe.d/usb.conf - -install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true -install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true - -# End /etc/modprobe.d/usb.conf</literal> -EOF</userinput></screen> - - </sect2> - - <sect2 id="contents-kernel" role="content"> - <title>Contents of Linux</title> - - <segmentedlist> - <segtitle>Installed files</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - <seg>config-&linux-version;, - <phrase revision="sysv">vmlinuz-&linux-version;-lfs-&version;,</phrase> - <phrase revision="systemd">vmlinuz-&linux-version;-lfs-&versiond;,</phrase> - and System.map-&linux-version;</seg> - <seg>/lib/modules, /usr/share/doc/linux-&linux-version;</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="config"> - <term><filename>config-&linux-version;</filename></term> - <listitem> - <para>Contains all the configuration selections for the kernel</para> - <indexterm zone="ch-bootable-kernel config"> - <primary sortas="e-/boot/config">/boot/config-&linux-version;</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lfskernel"> - <term revision="sysv"><filename>vmlinuz-&linux-version;-lfs-&version;</filename></term> - <term revision="systemd"><filename>vmlinuz-&linux-version;-lfs-&versiond;</filename></term> - <listitem> - <para>The engine of the Linux system. When turning on the computer, - the kernel is the first part of the operating system that gets loaded. - It detects and initializes all components of the computer's hardware, - then makes these components available as a tree of files to the - software and turns a single CPU into a multitasking machine capable - of running scores of programs seemingly at the same time</para> - <indexterm zone="ch-bootable-kernel lfskernel"> - <primary sortas="b-lfskernel">lfskernel-&linux-version;</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="System.map"> - <term><filename>System.map-&linux-version;</filename></term> - <listitem> - <para>A list of addresses and symbols; it maps the entry points and - addresses of all the functions and data structures in the - kernel</para> - <indexterm zone="ch-bootable-kernel System.map"> - <primary sortas="e-/boot/System.map">/boot/System.map-&linux-version;</primary> - </indexterm> - </listitem> - </varlistentry> - - </variablelist> - - </sect2> - -</sect1> diff --git a/chapter08/kmod.xml b/chapter08/kmod.xml new file mode 100644 index 000000000..6cc3eb168 --- /dev/null +++ b/chapter08/kmod.xml @@ -0,0 +1,211 @@ +<?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-kmod" role="wrap"> + <?dbhtml filename="kmod.html"?> + + <sect1info condition="script"> + <productname>kmod</productname> + <productnumber>&kmod-version;</productnumber> + <address>&kmod-url;</address> + </sect1info> + + <title>Kmod-&kmod-version;</title> + + <indexterm zone="ch-system-kmod"> + <primary sortas="a-Kmod">Kmod</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Kmod package contains libraries and utilities for loading kernel + modules</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&kmod-ch6-sbu;</seg> + <seg>&kmod-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Kmod</title> + + <para>Prepare Kmod for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --bindir=/bin \ + --sysconfdir=/etc \ + --with-rootlibdir=/lib \ + --with-xz \ + --with-zlib</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--with-xz, --with-zlib</parameter></term> + <listitem> + <para>These options enable Kmod to handle compressed kernel modules.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-rootlibdir=/lib</parameter></term> + <listitem> + <para>This option ensures different library related files are placed + in the correct directories.</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 that can be run in the + LFS chroot environment. At a minimum the git program is required and + several tests will not run outside of a git repository. </para> + +<!-- + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> +--> + <para>Install the package, and create symlinks for + compatibility with Module-Init-Tools (the package that previously handled + Linux kernel modules):</para> + +<screen><userinput remap="install">make install + +for target in depmod insmod lsmod modinfo modprobe rmmod; do + ln -sfv ../bin/kmod /sbin/$target +done + +ln -sfv kmod /bin/lsmod</userinput></screen> + + </sect2> + + <sect2 id="contents-kmod" role="content"> + <title>Contents of Kmod</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>depmod (link to kmod), insmod (link to kmod), kmod, + lsmod (link to kmod), modinfo (link to kmod), modprobe (link to kmod), + and rmmod (link to kmod)</seg> + <seg>libkmod.so</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="depmod"> + <term><command>depmod</command></term> + <listitem> + <para>Creates a dependency file based on the symbols it finds in the + existing set of modules; this dependency file is used by + <command>modprobe</command> to automatically load the required + modules</para> + <indexterm zone="ch-system-kmod depmod"> + <primary sortas="b-depmod">depmod</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="insmod"> + <term><command>insmod</command></term> + <listitem> + <para>Installs a loadable module in the running kernel</para> + <indexterm zone="ch-system-kmod insmod"> + <primary sortas="b-insmod">insmod</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="kmod"> + <term><command>kmod</command></term> + <listitem> + <para>Loads and unloads kernel modules</para> + <indexterm zone="ch-system-kmod kmod"> + <primary sortas="b-kmod">kmod</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lsmod"> + <term><command>lsmod</command></term> + <listitem> + <para>Lists currently loaded modules</para> + <indexterm zone="ch-system-kmod lsmod"> + <primary sortas="b-lsmod">lsmod</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="modinfo"> + <term><command>modinfo</command></term> + <listitem> + <para>Examines an object file associated with a kernel module and + displays any information that it can glean</para> + <indexterm zone="ch-system-kmod modinfo"> + <primary sortas="b-modinfo">modinfo</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="modprobe"> + <term><command>modprobe</command></term> + <listitem> + <para>Uses a dependency file, created by + <command>depmod</command>, to automatically load relevant modules</para> + <indexterm zone="ch-system-kmod modprobe"> + <primary sortas="b-modprobe">modprobe</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rmmod"> + <term><command>rmmod</command></term> + <listitem> + <para>Unloads modules from the running kernel</para> + <indexterm zone="ch-system-kmod rmmod"> + <primary sortas="b-rmmod">rmmod</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libkmod"> + <term><filename class="libraryfile">libkmod</filename></term> + <listitem> + <para>This library is used by other programs to load and unload kernel + modules</para> + <indexterm zone="ch-system-kmod"> + <primary sortas="c-libkmod">libkmod</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> + diff --git a/chapter08/less.xml b/chapter08/less.xml new file mode 100644 index 000000000..087b2e6a3 --- /dev/null +++ b/chapter08/less.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-less" role="wrap"> + <?dbhtml filename="less.html"?> + + <sect1info condition="script"> + <productname>less</productname> + <productnumber>&less-version;</productnumber> + <address>&less-url;</address> + </sect1info> + + <title>Less-&less-version;</title> + + <indexterm zone="ch-system-less"> + <primary sortas="a-Less">Less</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Less package contains a text file viewer.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&less-ch6-sbu;</seg> + <seg>&less-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Less</title> + + <para>Prepare Less for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --sysconfdir=/etc</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--sysconfdir=/etc</parameter></term> + <listitem> + <para>This option tells the programs created by the package to look + in <filename class="directory">/etc</filename> for the configuration + files.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput 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</userinput></screen> + + </sect2> + + <sect2 id="contents-less" role="content"> + <title>Contents of Less</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + + <seglistitem> + <seg>less, lessecho, and lesskey</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="less"> + <term><command>less</command></term> + <listitem> + <para>A file viewer or pager; it displays the contents of the given + file, letting the user scroll, find strings, and jump to marks</para> + <indexterm zone="ch-system-less less"> + <primary sortas="b-less">less</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lessecho"> + <term><command>lessecho</command></term> + <listitem> + <para>Needed to expand meta-characters, such as <emphasis>*</emphasis> + and <emphasis>?</emphasis>, in filenames on Unix systems</para> + <indexterm zone="ch-system-less lessecho"> + <primary sortas="b-lessecho">lessecho</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lesskey"> + <term><command>lesskey</command></term> + <listitem> + <para>Used to specify the key bindings for <command>less</command></para> + <indexterm zone="ch-system-less lesskey"> + <primary sortas="b-lesskey">lesskey</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/libcap.xml b/chapter08/libcap.xml new file mode 100644 index 000000000..8126dfaae --- /dev/null +++ b/chapter08/libcap.xml @@ -0,0 +1,166 @@ +<?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-libcap" role="wrap"> + <?dbhtml filename="libcap.html"?> + + <sect1info condition="script"> + <productname>libcap</productname> + <productnumber>&libcap-version;</productnumber> + <address>&libcap-url;</address> + </sect1info> + + <title>Libcap-&libcap-version;</title> + + <indexterm zone="ch-system-libcap"> + <primary sortas="a-Libcap">Libcap</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Libcap package implements the user-space interfaces to the POSIX + 1003.1e capabilities available in Linux kernels. These capabilities are a + partitioning of the all powerful root privilege into a set of distinct + privileges.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&libcap-ch6-sbu;</seg> + <seg>&libcap-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Libcap</title> + + <para>Prevent a static library from being installed:</para> + +<screen><userinput remap="pre">sed -i '/install.*STACAPLIBNAME/d' libcap/Makefile</userinput></screen> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make lib=lib</userinput></screen> + + <variablelist> + <title>The meaning of the make option:</title> + + <varlistentry> + <term><parameter>lib=lib</parameter></term> + <listitem> + <para>This parameter sets the library directory to + <filename>/lib</filename> rather than + <filename>/lib64</filename> on x86_64. It has no effect on + x86.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">make test</userinput></screen> + + <para>Install the package and do some cleanup:</para> + +<screen><userinput remap="install">make lib=lib PKGCONFIGDIR=/usr/lib/pkgconfig install +chmod -v 755 /lib/libcap.so.&libcap-version; +mv -v /lib/libpsx.a /usr/lib +rm -v /lib/libcap.so +ln -sfv ../../lib/libcap.so.2 /usr/lib/libcap.so</userinput></screen> + + </sect2> + + <sect2 id="contents-libcap" role="content"> + <title>Contents of Libcap</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>capsh, getcap, getpcaps, and setcap</seg> + <seg>libcap.so and libpsx.a</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="capsh"> + <term><command>capsh</command></term> + <listitem> + <para>A shell wrapper to explore and constrain capability support</para> + <indexterm zone="ch-system-libcap capsh"> + <primary sortas="b-capsh">capsh</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="getcap"> + <term><command>getcap</command></term> + <listitem> + <para>Examines file capabilities</para> + <indexterm zone="ch-system-libcap getcap"> + <primary sortas="b-getcap">getcap</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="getpcaps"> + <term><command>getpcaps</command></term> + <listitem> + <para>Displays the capabilities on the queried process(es)</para> + <indexterm zone="ch-system-libcap getpcaps"> + <primary sortas="b-getpcaps">getpcaps</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="setcap"> + <term><command>setcap</command></term> + <listitem> + <para>Sets file capabilities</para> + <indexterm zone="ch-system-libcap setcap"> + <primary sortas="b-setcap">setcap</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libcap"> + <term><filename class="libraryfile">libcap</filename></term> + <listitem> + <para>Contains the library functions for manipulating POSIX 1003.1e + capabilities</para> + <indexterm zone="ch-system-libcap libcap"> + <primary sortas="c-libcap">libcap</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libpsx"> + <term><filename class="libraryfile">libpsx</filename></term> + <listitem> + <para>Contains functions to support POSIX semantics for syscalls + associated with the pthread library</para> + <indexterm zone="ch-system-libcap libpsx"> + <primary sortas="c-libpsx">libpsx</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/libelf.xml b/chapter08/libelf.xml new file mode 100644 index 000000000..b559e6aa2 --- /dev/null +++ b/chapter08/libelf.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-libelf" role="wrap"> + <?dbhtml filename="libelf.html"?> + + <sect1info condition="script"> + <productname>libelf</productname> + <productnumber>&elfutils-version;</productnumber> + <address>&elfutils-url;</address> + </sect1info> + + <title>Libelf from Elfutils-&elfutils-version;</title> + + <indexterm zone="ch-system-libelf"> + <primary sortas="a-Libelf">Libelf</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Libelf is a library for handling ELF (Executable and Linkable Format) + files.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&elfutils-ch6-sbu;</seg> + <seg>&elfutils-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Libelf</title> + + <para>Libelf is part of elfutils-&elfutils-version; package. Use + the elfutils-&elfutils-version;.tar.bz2 as the source tarball.</para> + + <para>Prepare Libelf for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --disable-debuginfod</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>One test, run-elfclassify.sh, is known to fail.</para>--> + + <para>Install only Libelf:</para> + +<screen><userinput remap="install">make -C libelf install +install -vm644 config/libelf.pc /usr/lib/pkgconfig +rm /usr/lib/libelf.a</userinput></screen> + + </sect2> + + <sect2 id="contents-elfutils" role="content"> + <title>Contents of Libelf</title> + + <segmentedlist> + <segtitle>Installed Library</segtitle> + <segtitle>Installed Directory</segtitle> + + <seglistitem> + <seg> + libelf.so + </seg> + <seg> + /usr/include/elfutils + </seg> + </seglistitem> + </segmentedlist> + + </sect2> + +</sect1> diff --git a/chapter08/libffi.xml b/chapter08/libffi.xml new file mode 100644 index 000000000..6a6f8a458 --- /dev/null +++ b/chapter08/libffi.xml @@ -0,0 +1,133 @@ +<?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-libffi" role="wrap"> + <?dbhtml filename="libffi.html"?> + + <sect1info condition="script"> + <productname>libffi</productname> + <productnumber>&libffi-version;</productnumber> + <address>&libffi-url;</address> + </sect1info> + + <title>Libffi-&libffi-version;</title> + + <indexterm zone="ch-system-libffi"> + <primary sortas="a-libffi">libffi</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Libffi library provides a portable, high level programming + interface to various calling conventions. This allows a programmer to call + any function specified by a call interface description at run time.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&libffi-ch6-sbu;</seg> + <seg>&libffi-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Libffi</title> + + <note> + <para>Similar to GMP, libffi builds with optimizations specific + to the proccesor in use. If building for another system, export + CFLAGS and CXXFLAGS to specify a generic build for your architecture. + If this is not done, all applications that link to libffi will trigger + Illegal Operation Errors.</para> + </note> +<!-- + <para>Modify the Makefile to install headers into the standard + <filename class="directory">/usr/include</filename> directory instead of + <filename class="directory">/usr/lib/libffi-&libffi-version;/include</filename>.</para> + +<screen><userinput remap="pre">sed -e '/^includesdir/ s/$(libdir).*$/$(includedir)/' \ + -i include/Makefile.in + +sed -e '/^includedir/ s/=.*$/=@includedir@/' \ + -e 's/^Cflags: -I${includedir}/Cflags:/' \ + -i libffi.pc.in</userinput></screen> +--> + <para>Prepare libffi for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr --disable-static --with-gcc-arch=native</userinput></screen> + + <variablelist> + <title>The meaning of the configure option:</title> + + <varlistentry> + <term><parameter>--with-gcc-arch=native</parameter></term> + <listitem> + <para>Ensure gcc optimizes for the current system. If this + is not specified, the system is guessed and the code generated + may not be correct for some systems. If the generated code + will be copied from the native system to a less capable + system, use the less capable system as a parameter. For details + about alternative system types, see <ulink + url='https://gcc.gnu.org/onlinedocs/gcc-&gcc-version;/gcc/x86-Options.html'> + the x86 options in the gcc manual</ulink>.</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>Six tests, all related to test-callback.c, are known to fail.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-libffi" role="content"> + <title>Contents of Libffi</title> + + <segmentedlist> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>libffi.so</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="libffi"> + <term><filename class="libraryfile">libffi</filename></term> + <listitem> + <para>contains the libffi API functions.</para> + <indexterm zone="ch-system-libffi"> + <primary sortas="c-libffi">libffi</primary> + </indexterm> + </listitem> + </varlistentry> + </variablelist> + + </sect2> + +</sect1> + diff --git a/chapter08/libpipeline.xml b/chapter08/libpipeline.xml new file mode 100644 index 000000000..eb5a19438 --- /dev/null +++ b/chapter08/libpipeline.xml @@ -0,0 +1,92 @@ +<?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-libpipeline" role="wrap"> + <?dbhtml filename="libpipeline.html"?> + + <sect1info condition="script"> + <productname>libpipeline</productname> + <productnumber>&libpipeline-version;</productnumber> + <address>&libpipeline-url;</address> + </sect1info> + + <title>Libpipeline-&libpipeline-version;</title> + + <indexterm zone="ch-system-libpipeline"> + <primary sortas="a-Libpipeline">Libpipeline</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Libpipeline package contains a library for manipulating pipelines + of subprocesses in a flexible and convenient way.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&libpipeline-ch6-sbu;</seg> + <seg>&libpipeline-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Libpipeline</title> + + <para>Prepare Libpipeline 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-libpipeline" role="content"> + <title>Contents of Libpipeline</title> + + <segmentedlist> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>libpipeline.so</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="libpipeline"> + <term><filename class="libraryfile">libpipeline</filename></term> + <listitem> + <para>This library is used to safely construct pipelines between + subprocesses</para> + <indexterm zone="ch-system-libpipeline"> + <primary sortas="c-libpipeline">libpipeline</primary> + </indexterm> + </listitem> + </varlistentry> + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/libtool.xml b/chapter08/libtool.xml new file mode 100644 index 000000000..3093b4164 --- /dev/null +++ b/chapter08/libtool.xml @@ -0,0 +1,129 @@ +<?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-libtool" role="wrap"> + <?dbhtml filename="libtool.html"?> + + <sect1info condition="script"> + <productname>libtool</productname> + <productnumber>&libtool-version;</productnumber> + <address>&libtool-url;</address> + </sect1info> + + <title>Libtool-&libtool-version;</title> + + <indexterm zone="ch-system-libtool"> + <primary sortas="a-Libtool">Libtool</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Libtool package contains the GNU generic library support script. + It wraps the complexity of using shared libraries in a consistent, portable + interface.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&libtool-ch6-sbu;</seg> + <seg>&libtool-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Libtool</title> + + <para>Prepare Libtool 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<!--(about 11.0 SBU)-->, issue:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <note><para>The test time for libtool can be reduced significantly on a + system with multiple cores. To do this, append + <command>TESTSUITEFLAGS=-j<N></command> to the line above. For + instance, using -j4 can reduce the test time by over 60 + percent.</para></note> + + <para>Five tests are known to fail in the LFS build environment due + to a circular dependency, but all tests pass if rechecked after + automake is installed.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + + <sect2 id="contents-libtool" role="content"> + <title>Contents of Libtool</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>libtool and libtoolize</seg> + <seg>libltdl.so</seg> + <seg>/usr/include/libltdl and /usr/share/libtool</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="libtool"> + <term><command>libtool</command></term> + <listitem> + <para>Provides generalized library-building support services</para> + <indexterm zone="ch-system-libtool libtool"> + <primary sortas="b-libtool">libtool</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libtoolize"> + <term><command>libtoolize</command></term> + <listitem> + <para>Provides a standard way to add <command>libtool</command> + support to a package</para> + <indexterm zone="ch-system-libtool libtoolize"> + <primary sortas="b-libtoolize">libtoolize</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libltdl"> + <term><filename class="libraryfile">libltdl</filename></term> + <listitem> + <para>Hides the various difficulties of dlopening libraries</para> + <indexterm zone="ch-system-libtool libltdl"> + <primary sortas="c-libltdl">libltdl</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/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/chapter08/man-db.xml b/chapter08/man-db.xml new file mode 100644 index 000000000..f2f46b891 --- /dev/null +++ b/chapter08/man-db.xml @@ -0,0 +1,456 @@ +<?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-man-db" role="wrap"> + <?dbhtml filename="man-db.html"?> + + <sect1info condition="script"> + <productname>man-db</productname> + <productnumber>&man-db-version;</productnumber> + <address>&man-db-url;</address> + </sect1info> + + <title>Man-DB-&man-db-version;</title> + + <indexterm zone="ch-system-man-db"> + <primary sortas="a-Man-DB">Man-DB</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Man-DB package contains programs for finding and viewing man + pages.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&man-db-ch6-sbu;</seg> + <seg>&man-db-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Man-DB</title> + + <para>Prepare Man-DB for compilation:</para> + +<screen revision="systemd"><userinput remap="configure">sed -i '/find/s@/usr@@' init/systemd/man-db.service.in + +./configure --prefix=/usr \ + --docdir=/usr/share/doc/man-db-&man-db-version; \ + --sysconfdir=/etc \ + --disable-setuid \ + --enable-cache-owner=bin \ + --with-browser=/usr/bin/lynx \ + --with-vgrind=/usr/bin/vgrind \ + --with-grap=/usr/bin/grap</userinput></screen> + +<screen revision="sysv"><userinput remap="configure">./configure --prefix=/usr \ + --docdir=/usr/share/doc/man-db-&man-db-version; \ + --sysconfdir=/etc \ + --disable-setuid \ + --enable-cache-owner=bin \ + --with-browser=/usr/bin/lynx \ + --with-vgrind=/usr/bin/vgrind \ + --with-grap=/usr/bin/grap \ + --with-systemdtmpfilesdir= \ + --with-systemdsystemunitdir=</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry revision="systemd"> + <term><command>sed -i '/find/s@/usr@@' init/systemd/man-db.service.in</command></term> + <listitem> + <para>This changes a harcoded path to the <command>find</command> + utility, which we install in + <filename class="directory">/bin</filename>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-setuid</parameter></term> + <listitem> + <para>This disables making the <command>man</command> program setuid + to user <systemitem class="username">man</systemitem>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--enable-cache-owner=bin</parameter></term> + <listitem> + <para>This makes the system-wide cache files be owned by user + <systemitem class="username">bin</systemitem>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--with-...</parameter></term> + <listitem> + <para>These three parameters are used to set some default programs. + <command>lynx</command> is a text-based web browser (see + BLFS for installation instructions), <command>vgrind</command> + converts program sources to Groff input, and <command>grap</command> + is useful for typesetting graphs in Groff documents. The + <command>vgrind</command> and <command>grap</command> programs are + not normally needed for viewing manual pages. They are not part of + LFS or BLFS, but you should be able to install them yourself after + finishing LFS if you wish to do so.</para> + </listitem> + </varlistentry> + + <varlistentry revision="sysv"> + <term><parameter>--with-systemd...</parameter></term> + <listitem> + <para>These parameters prevent installing unneeded systemd + directories and files.</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>One test, man-missing-locales, is known to fail in the LFS chroot envirnment.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> +<!-- + <para revision="sysv">Remove an unwanted directory used for service files + which would cause some BLFS packages to also install files there: </para> + +<screen revision="sysv"><userinput remap="install">rm -rfv /lib/systemd</userinput></screen> + + <para revision="systemd">Remove a reference to a non-existent user:</para> + +<screen revision="systemd"><userinput remap="install">sed -i "s:man man:root root:g" /usr/lib/tmpfiles.d/man-db.conf</userinput></screen> +--> + </sect2> + + <sect2> + <title>Non-English Manual Pages in LFS</title> + + <para>The following table shows the character set that Man-DB assumes + manual pages installed under + <filename class="directory">/usr/share/man/<ll></filename> will be + encoded with. In addition to this, Man-DB correctly determines if manual + pages installed in that directory are UTF-8 encoded.</para> + + <!-- Origin: man-db-2.5.9/lib/encodings.c --> + <table> +<title>Expected character encoding of legacy 8-bit manual pages</title> + <?dbfo table-width="6in" ?> + + <tgroup cols="4"> + + <colspec colnum="1" colwidth="1.5in"/> + <colspec colnum="2" colwidth="1in"/> + <colspec colnum="3" colwidth="2.5in"/> + <colspec colnum="4" colwidth="1in"/> + + <thead> + <row> + <entry>Language (code)</entry> + <entry>Encoding</entry> + <entry>Language (code)</entry> + <entry>Encoding</entry> + </row> + </thead> + + <tbody> + <row> + <entry>Danish (da)</entry> + <entry>ISO-8859-1</entry> + <entry>Croatian (hr)</entry> + <entry>ISO-8859-2</entry> + </row> + <row> + <entry>German (de)</entry> + <entry>ISO-8859-1</entry> + <entry>Hungarian (hu)</entry> + <entry>ISO-8859-2</entry> + </row> + <row> + <entry>English (en)</entry> + <entry>ISO-8859-1</entry> + <entry>Japanese (ja)</entry> + <entry>EUC-JP</entry> + </row> + <row> + <entry>Spanish (es)</entry> + <entry>ISO-8859-1</entry> + <entry>Korean (ko)</entry> + <entry>EUC-KR</entry> + </row> + <row> + <entry>Estonian (et)</entry> + <entry>ISO-8859-1</entry> + <entry>Lithuanian (lt)</entry> + <entry>ISO-8859-13</entry> + </row> + <row> + <entry>Finnish (fi)</entry> + <entry>ISO-8859-1</entry> + <entry>Latvian (lv)</entry> + <entry>ISO-8859-13</entry> + </row> + <row> + <entry>French (fr)</entry> + <entry>ISO-8859-1</entry> + <entry>Macedonian (mk)</entry> + <entry>ISO-8859-5</entry> + </row> + <row> + <entry>Irish (ga)</entry> + <entry>ISO-8859-1</entry> + <entry>Polish (pl)</entry> + <entry>ISO-8859-2</entry> + </row> + <row> + <entry>Galician (gl)</entry> + <entry>ISO-8859-1</entry> + <entry>Romanian (ro)</entry> + <entry>ISO-8859-2</entry> + </row> + <row> + <entry>Indonesian (id)</entry> + <entry>ISO-8859-1</entry> + <entry>Russian (ru)</entry> + <entry>KOI8-R</entry> + </row> + <row> + <entry>Icelandic (is)</entry> + <entry>ISO-8859-1</entry> + <entry>Slovak (sk)</entry> + <entry>ISO-8859-2</entry> + </row> + <row> + <entry>Italian (it)</entry> + <entry>ISO-8859-1</entry> + <entry>Slovenian (sl)</entry> + <entry>ISO-8859-2</entry> + </row> + <row> + <entry>Norwegian Bokmal (nb)</entry> + <entry>ISO-8859-1</entry> + <entry>Serbian Latin (sr@latin)</entry> + <entry>ISO-8859-2</entry> + </row> + <row> + <entry>Dutch (nl)</entry> + <entry>ISO-8859-1</entry> + <entry>Serbian (sr)</entry> + <entry>ISO-8859-5</entry> + </row> + <row> + <entry>Norwegian Nynorsk (nn)</entry> + <entry>ISO-8859-1</entry> + <entry>Turkish (tr)</entry> + <entry>ISO-8859-9</entry> + </row> + <row> + <entry>Norwegian (no)</entry> + <entry>ISO-8859-1</entry> + <entry>Ukrainian (uk)</entry> + <entry>KOI8-U</entry> + </row> + <row> + <entry>Portuguese (pt)</entry> + <entry>ISO-8859-1</entry> + <entry>Vietnamese (vi)</entry> + <entry>TCVN5712-1</entry> + </row> + <row> + <entry>Swedish (sv)</entry> + <entry>ISO-8859-1</entry> + <entry>Simplified Chinese (zh_CN)</entry> + <entry>GBK</entry> + </row> + <row> + <entry>Belarusian (be)</entry> + <entry>CP1251</entry> + <entry>Simplified Chinese, Singapore (zh_SG)</entry> + <entry>GBK</entry> + </row> + <row> + <entry>Bulgarian (bg)</entry> + <entry>CP1251</entry> + <entry>Traditional Chinese, Hong Kong (zh_HK)</entry> + <entry>BIG5HKSCS</entry> + </row> + <row> + <entry>Czech (cs)</entry> + <entry>ISO-8859-2</entry> + <entry>Traditional Chinese (zh_TW)</entry> + <entry>BIG5</entry> + </row> + <row> + <entry>Greek (el)</entry> + <entry>ISO-8859-7</entry> + <entry></entry> + <entry></entry> + </row> + + </tbody> + + </tgroup> + + </table> + + <note> + <para>Manual pages in languages not in the list are not supported.</para> + </note> + + </sect2> + + <sect2 id="contents-man-db" role="content"> + <title>Contents of Man-DB</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>accessdb, apropos (link to whatis), catman, lexgrog, man, mandb, + manpath, and whatis</seg> + <seg>libman.so and libmandb.so (both in /usr/lib/man-db)</seg> + <seg>/usr/lib/man-db, /usr/libexec/man-db, + and /usr/share/doc/man-db-&man-db-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="accessdb"> + <term><command>accessdb</command></term> + <listitem> + <para>Dumps the <command>whatis</command> database contents in + human-readable form</para> + <indexterm zone="ch-system-man-db accessdb"> + <primary sortas="b-accessdb">accessdb</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="apropos"> + <term><command>apropos</command></term> + <listitem> + <para>Searches the <command>whatis</command> database and displays + the short descriptions of system commands that contain a given + string</para> + <indexterm zone="ch-system-man-db apropos"> + <primary sortas="b-apropos">apropos</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="catman"> + <term><command>catman</command></term> + <listitem> + <para>Creates or updates the pre-formatted manual pages</para> + <indexterm zone="ch-system-man-db catman"> + <primary sortas="b-catman">catman</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lexgrog"> + <term><command>lexgrog</command></term> + <listitem> + <para>Displays one-line summary information about a given manual + page</para> + <indexterm zone="ch-system-man-db lexgrog"> + <primary sortas="b-lexgrog">lexgrog</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="man"> + <term><command>man</command></term> + <listitem> + <para>Formats and displays the requested manual page</para> + <indexterm zone="ch-system-man-db man"> + <primary sortas="b-man">man</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="mandb"> + <term><command>mandb</command></term> + <listitem> + <para>Creates or updates the <command>whatis</command> database</para> + <indexterm zone="ch-system-man-db mandb"> + <primary sortas="b-mandb">mandb</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="manpath"> + <term><command>manpath</command></term> + <listitem> + <para>Displays the contents of $MANPATH or (if $MANPATH is not set) + a suitable search path based on the settings in man.conf and the + user's environment</para> + <indexterm zone="ch-system-man-db manpath"> + <primary sortas="b-manpath">manpath</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="whatis"> + <term><command>whatis</command></term> + <listitem> + <para>Searches the <command>whatis</command> database and displays + the short descriptions of system commands that contain the given + keyword as a separate word</para> + <indexterm zone="ch-system-man-db whatis"> + <primary sortas="b-whatis">whatis</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libman"> + <term><filename class="libraryfile">libman</filename></term> + <listitem> + <para>Contains run-time support for <command>man</command></para> + <indexterm zone="ch-system-man-db libman"> + <primary sortas="c-libman">libman</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libmandb"> + <term><filename class="libraryfile">libmandb</filename></term> + <listitem> + <para>Contains run-time support for <command>man</command></para> + <indexterm zone="ch-system-man-db libmandb"> + <primary sortas="c-libmandb">libmandb</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/man-pages.xml b/chapter08/man-pages.xml new file mode 100644 index 000000000..3d2c52046 --- /dev/null +++ b/chapter08/man-pages.xml @@ -0,0 +1,80 @@ +<?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-man-pages" role="wrap"> + <?dbhtml filename="man-pages.html"?> + + <sect1info condition="script"> + <productname>man-pages</productname> + <productnumber>&man-pages-version;</productnumber> + <address>&man-pages-url;</address> + </sect1info> + + <title>Man-pages-&man-pages-version;</title> + + <indexterm zone="ch-system-man-pages"> + <primary sortas="a-Man-pages">Man-pages</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Man-pages package contains over 2,200 man pages.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&man-pages-ch6-sbu;</seg> + <seg>&man-pages-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Man-pages</title> + + <para>Install Man-pages by running:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-manpages" role="content"> + <title>Contents of Man-pages</title> + + <segmentedlist> + <segtitle>Installed files</segtitle> + + <seglistitem> + <seg>various man pages</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="man-pages"> + <term><filename>man pages</filename></term> + <listitem> + <para>Describe C programming language functions, important + device files, and significant configuration files</para> + <indexterm zone="ch-system-man-pages man-pages"> + <primary sortas="e-man-pages">man pages</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/meson.xml b/chapter08/meson.xml new file mode 100644 index 000000000..0b49c5441 --- /dev/null +++ b/chapter08/meson.xml @@ -0,0 +1,109 @@ +<?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-meson" role="wrap"> + <?dbhtml filename="meson.html"?> + + <sect1info condition="script"> + <productname>meson</productname> + <productnumber>&meson-version;</productnumber> + <address>&meson-url;</address> + </sect1info> + + <title>Meson-&meson-version;</title> + + <indexterm zone="ch-system-meson"> + <primary sortas="a-Meson">Meson</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Meson is an open source build system meant to be both extremely fast, + and, even more importantly, as user friendly as possible.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + <seglistitem> + <seg>&meson-ch6-sbu;</seg> + <seg>&meson-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Meson</title> +<!-- + <para>Apply a fix from upstream to fix a regression:</para> + +<screen><userinput remap="pre">sed -i "s@isfile(a)@& and not a.startswith('/dev')@" mesonbuild/interpreter.py</userinput></screen> +--> + <para>Compile Meson with the following command:</para> + +<screen><userinput remap="make">python3 setup.py build</userinput></screen> + + <para>This package does not come with a test suite.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">python3 setup.py install --root=dest +cp -rv dest/* /</userinput></screen> + + <variablelist> + <title>The meaning of the install parameters:</title> + + <varlistentry> + <term><parameter>--root=dest</parameter></term> + <listitem> + <para>By default <command>python3 setup.py install</command> + installs various files (such as man pages) into Python Eggs. + With a specified root location, <command>setup.py</command> installs + these files into a standard hierarchy. Then we can just copy + the hierarchy so the files will be in the standard location. + </para> + </listitem> + </varlistentry> + + </variablelist> + </sect2> + + <sect2 id="contents-meson" role="content"> + <title>Contents of Meson</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>meson</seg> + <seg>/usr/lib/python&python-minor;/site-packages/meson-&meson-version;-py&python-minor;.egg-info and /usr/lib/python&python-minor;/site-packages/mesonbuild</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="meson"> + <term><command>meson</command></term> + <listitem> + <para>A high productivity build system</para> + <indexterm zone="ch-system-meson meson"> + <primary sortas="b-meson">meson</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> + diff --git a/chapter08/mpc.xml b/chapter08/mpc.xml new file mode 100644 index 000000000..2d518c8c1 --- /dev/null +++ b/chapter08/mpc.xml @@ -0,0 +1,100 @@ +<?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-mpc" role="wrap"> + <?dbhtml filename="mpc.html"?> + + <sect1info condition="script"> + <productname>mpc</productname> + <productnumber>&mpc-version;</productnumber> + <address>&mpc-url;</address> + </sect1info> + + <title>MPC-&mpc-version;</title> + + <indexterm zone="ch-system-mpc"> + <primary sortas="a-MPC">MPC</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The MPC package contains a library for the arithmetic of complex + numbers with arbitrarily high precision and correct rounding of the + result.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&mpc-ch6-sbu;</seg> + <seg>&mpc-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of MPC</title> + + <para>Prepare MPC for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/mpc-&mpc-version;</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">make check</userinput></screen> + + <para>Install the package and its documentation:</para> + +<screen><userinput remap="install">make install +make install-html</userinput></screen> + + </sect2> + + + <sect2 id="contents-mpc" role="content"> + <title>Contents of MPC</title> + + <segmentedlist> + <segtitle>Installed Libraries</segtitle> + <segtitle>Installed Directory</segtitle> + + <seglistitem> + <seg>libmpc.so</seg> + <seg>/usr/share/doc/mpc-&mpc-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="libmpc"> + <term><filename class="libraryfile">libmpc</filename></term> + <listitem> + <para>Contains complex math functions</para> + <indexterm zone="ch-system-mpc libmpc"> + <primary sortas="c-libmpc">libmpc</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/mpfr.xml b/chapter08/mpfr.xml new file mode 100644 index 000000000..ff8e323b7 --- /dev/null +++ b/chapter08/mpfr.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-system-mpfr" role="wrap"> + <?dbhtml filename="mpfr.html"?> + + <sect1info condition="script"> + <productname>mpfr</productname> + <productnumber>&mpfr-version;</productnumber> + <address>&mpfr-url;</address> + </sect1info> + + <title>MPFR-&mpfr-version;</title> + + <indexterm zone="ch-system-mpfr"> + <primary sortas="a-MPFR">MPFR</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The MPFR package contains functions for multiple precision + math.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&mpfr-ch6-sbu;</seg> + <seg>&mpfr-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of MPFR</title> + + <para>Prepare MPFR for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --disable-static \ + --enable-thread-safe \ + --docdir=/usr/share/doc/mpfr-&mpfr-version;</userinput></screen> + + <para>Compile the package and generate the HTML documentation:</para> + +<screen><userinput remap="make">make +make html</userinput></screen> + + <important> + <para>The test suite for MPFR in this section is considered critical. + Do not skip it under any circumstances.</para> + </important> + + <para>Test the results and ensure that all tests passed:</para> + +<screen><userinput remap="test">make check</userinput></screen> + + <para>Install the package and its documentation:</para> + +<screen><userinput remap="install">make install +make install-html</userinput></screen> + + </sect2> + + + <sect2 id="contents-mpfr" role="content"> + <title>Contents of MPFR</title> + + <segmentedlist> + <segtitle>Installed Libraries</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>libmpfr.so</seg> + <seg>/usr/share/doc/mpfr-&mpfr-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="libmpfr"> + <term><filename class="libraryfile">libmpfr</filename></term> + <listitem> + <para>Contains multiple-precision math functions</para> + <indexterm zone="ch-system-mpfr libmpfr"> + <primary sortas="c-libmpfr">libmpfr</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/ninja.xml b/chapter08/ninja.xml new file mode 100644 index 000000000..e998c64fb --- /dev/null +++ b/chapter08/ninja.xml @@ -0,0 +1,132 @@ +<?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-ninja" role="wrap"> + <?dbhtml filename="ninja.html"?> + + <sect1info condition="script"> + <productname>ninja</productname> + <productnumber>&ninja-version;</productnumber> + <address>&ninja-url;</address> + </sect1info> + + <title>Ninja-&ninja-version;</title> + + <indexterm zone="ch-system-ninja"> + <primary sortas="a-Ninja">Ninja</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Ninja is a small build system with a focus on speed.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&ninja-ch6-sbu;</seg> + <seg>&ninja-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Ninja</title> + + <para>When run, ninja normally runs a maximum number of processes + in parallel. By default this is the number of cores on the system + plus two. In some cases this can overheat a CPU or run a system out + of memory. If run from the command line, passing a -jN parameter + will limit the number of parallel processes, but some packages + embed the execution of ninja and do not pass a -j parameter.</para> + + <para>Using the <emphasis>optional</emphasis> procedure below allows a user to + limit the number of parallel processes via an environment variable, + NINJAJOBS. <command>For example</command>, setting: + + <!--Using <command> here to make the output bold. We really don't want + users setting this now and experience shows that many users blindly + copy/paste anything in a box. --> + + <screen>export NINJAJOBS=4</screen> + + will limit ninja to four parallel processes.</para> + + <para>If desired, add the capability to use the environment variable + NINJAJOBS by running:</para> + +<screen><userinput remap="pre">sed -i '/int Guess/a \ + int j = 0;\ + char* jobs = getenv( "NINJAJOBS" );\ + if ( jobs != NULL ) j = atoi( jobs );\ + if ( j > 0 ) return j;\ +' src/ninja.cc</userinput></screen> + + <para>Build Ninja with:</para> + +<screen><userinput remap="configure">python3 configure.py --bootstrap</userinput></screen> + + <variablelist> + <title>The meaning of the build option:</title> + + <varlistentry> + <term><parameter>--bootstrap</parameter></term> + <listitem> + <para>This parameter forces ninja to rebuild itself for the current + system.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>To test the results, issue:</para> + +<screen><userinput remap="test">./ninja ninja_test +./ninja_test --gtest_filter=-SubprocessTest.SetWithLots</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">install -vm755 ninja /usr/bin/ +install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja +install -vDm644 misc/zsh-completion /usr/share/zsh/site-functions/_ninja</userinput></screen> + + </sect2> + + <sect2 id="contents-ninja" role="content"> + <title>Contents of Ninja</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + + <seglistitem> + <seg>ninja</seg> + </seglistitem> + </segmentedlist> + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="ninja"> + <term><command>ninja</command></term> + <listitem> + <para>is the Ninja build system.</para> + <indexterm zone="ch-system-ninja ninja"> + <primary sortas="b-ninja">ninja</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> + diff --git a/chapter08/openssl.xml b/chapter08/openssl.xml new file mode 100644 index 000000000..f2ff1fa80 --- /dev/null +++ b/chapter08/openssl.xml @@ -0,0 +1,176 @@ +<?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-openssl" role="wrap"> + <?dbhtml filename="openssl.html"?> + + <sect1info condition="script"> + <productname>openssl</productname> + <productnumber>&openssl-version;</productnumber> + <address>&openssl-url;</address> + </sect1info> + + <title>OpenSSL-&openssl-version;</title> + + <indexterm zone="ch-system-openssl"> + <primary sortas="a-OpenSSL">OpenSSL</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The OpenSSL package contains management tools and libraries relating + to cryptography. These are useful for providing cryptographic functions + to other packages, such as OpenSSH, email applications and web browsers + (for accessing HTTPS sites). </para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&openssl-ch6-sbu;</seg> + <seg>&openssl-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of OpenSSL</title> +<!-- + <para>First, fix a problem identified upstream:</para> + +<screen><userinput remap="pre">sed -i '/\} data/s/ =.*$/;\n memset(\&data, 0, sizeof(data));/' \ + crypto/rand/rand_lib.c</userinput></screen> +--> + <para>Prepare OpenSSL for compilation:</para> + +<screen><userinput remap="configure">./config --prefix=/usr \ + --openssldir=/etc/ssl \ + --libdir=lib \ + shared \ + zlib-dynamic</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 test</userinput></screen> + + <para>One test 30-test_afalg.t is known to fail on some kernel + configurations (it apparently assumes certain unspecified crypto + options have been selected).</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile +make MANSUFFIX=ssl install</userinput></screen> + + <para>If desired, install the documentation:</para> + +<screen><userinput remap="install">mv -v /usr/share/doc/openssl /usr/share/doc/openssl-&openssl-version; +cp -vfr doc/* /usr/share/doc/openssl-&openssl-version;</userinput></screen> + + </sect2> + + <sect2 id="contents-openssl" role="content"> + <title>Contents of OpenSSL</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg> + c_rehash and openssl + </seg> + <seg> + libcrypto.{so,a} and libssl.{so,a} + </seg> + <seg> + /etc/ssl, + /usr/include/openssl, + /usr/lib/engines and + /usr/share/doc/openssl-&openssl-version; + </seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="c_rehash"> + <term><command>c_rehash</command></term> + <listitem> + <para> + is a <application>Perl</application> script that scans all files in + a directory and adds symbolic links to their hash values. + </para> + <indexterm zone="ch-system-openssl c_rehash"> + <primary sortas="b-c_rehash">c_rehash</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="openssl-prog"> + <term><command>openssl</command></term> + <listitem> + <para> + is a command-line tool for using the various cryptography functions + of <application>OpenSSL</application>'s crypto library from the + shell. It can be used for various functions which are documented in + <command>man 1 openssl</command>. + </para> + <indexterm zone="ch-system-openssl openssl-prog"> + <primary sortas="b-openssl">openssl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libcrypto"> + <term><filename class="libraryfile">libcrypto.so</filename></term> + <listitem> + <para> + implements a wide range of cryptographic algorithms used in various + Internet standards. The services provided by this library are used + by the <application>OpenSSL</application> implementations of SSL, + TLS and S/MIME, and they have also been used to implement + <application>OpenSSH</application>, + <application>OpenPGP</application>, and other cryptographic + standards. + </para> + <indexterm zone="ch-system-openssl libcrypto"> + <primary sortas="c-libcrypto">libcrypto.so</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libssl"> + <term><filename class="libraryfile">libssl.so</filename></term> + <listitem> + <para> + implements the Transport Layer Security (TLS v1) protocol. + It provides a rich API, documentation + on which can be found by running <command>man 3 ssl</command>. + </para> + <indexterm zone="ch-system-openssl libssl"> + <primary sortas="c-libssl">libssl.so</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/pkgconfig.xml b/chapter08/pkgconfig.xml new file mode 100644 index 000000000..3c311e389 --- /dev/null +++ b/chapter08/pkgconfig.xml @@ -0,0 +1,121 @@ +<?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-pkgconfig" role="wrap"> + <?dbhtml filename="pkg-config.html"?> + + <sect1info condition="script"> + <productname>pkg-config</productname> + <productnumber>&pkgconfig-version;</productnumber> + <address>&pkgconfig-url;</address> + </sect1info> + + <title>Pkg-config-&pkgconfig-version;</title> + + <indexterm zone="ch-system-pkgconfig"> + <primary sortas="a-pkgconfig">Pkgconfig</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para> The pkg-config package contains a tool for passing the include path + and/or library paths to build tools during the configure and make file + execution.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&pkgconfig-ch6-sbu;</seg> + <seg>&pkgconfig-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Pkg-config</title> + + <para>Prepare Pkg-config for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --with-internal-glib \ + --disable-host-tool \ + --docdir=/usr/share/doc/pkg-config-&pkgconfig-version;</userinput></screen> + + <variablelist> + <title>The meaning of the new configure options:</title> + + <varlistentry> + <term><parameter>--with-internal-glib</parameter></term> + <listitem> + <para>This will allow pkg-config to use its internal version of + Glib because an external version is not available in LFS.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>--disable-host-tool</parameter></term> + <listitem> + <para>This option disables the creation of an undesired hard link + to the pkg-config program.</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> + + </sect2> + + <sect2 id="contents-pkgconfig" role="content"> + <title>Contents of Pkg-config</title> + + <segmentedlist> + <segtitle>Installed program</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>pkg-config</seg> + <seg>/usr/share/doc/pkg-config-&pkgconfig-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="pkgconfig"> + <!-- Don't remove the extra space, it prevents a FOP warning. --> + <term><command>pkg-config </command></term> + <listitem> + <para>Returns meta information for the specified library or package + </para> + <indexterm zone="ch-system-pkgconfig pkgconfig"> + <primary sortas="b-pkgconfig">pkg-config</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/pkgmgt.xml b/chapter08/pkgmgt.xml new file mode 100644 index 000000000..d28038467 --- /dev/null +++ b/chapter08/pkgmgt.xml @@ -0,0 +1,291 @@ +<?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-pkgmgt"> + <?dbhtml filename="pkgmgt.html"?> + + <title>Package Management</title> + + <para>Package Management is an often requested addition to the LFS Book. A + Package Manager allows tracking the installation of files making it easy to + remove and upgrade packages. As well as the binary and library files, a + package manager will handle the installation of configuration files. Before + you begin to wonder, NO—this section will not talk about nor recommend + any particular package manager. What it provides is a roundup of the more + popular techniques and how they work. The perfect package manager for you may + be among these techniques or may be a combination of two or more of these + techniques. This section briefly mentions issues that may arise when upgrading + packages.</para> + + <para>Some reasons why no package manager is mentioned in LFS or BLFS + include:</para> + + <itemizedlist> + <listitem> + <para>Dealing with package management takes the focus away from the goals + of these books—teaching how a Linux system is built.</para> + </listitem> + + <listitem> + <para>There are multiple solutions for package management, each having + its strengths and drawbacks. Including one that satisfies all audiences + is difficult.</para> + </listitem> + </itemizedlist> + + <para>There are some hints written on the topic of package management. Visit + the <ulink url="&hints-index;">Hints Project</ulink> and see if one of them + fits your need.</para> + + <sect2> + <title>Upgrade Issues</title> + + <para>A Package Manager makes it easy to upgrade to newer versions when they + are released. Generally the instructions in the LFS and BLFS Book can be + used to upgrade to the newer versions. Here are some points that you should + be aware of when upgrading packages, especially on a running system.</para> + + <itemizedlist> + <listitem> + <para>If Glibc needs to be upgraded to a newer version, (e.g. from + glibc-2.19 to glibc-2.20), it is safer to rebuild LFS. Though you + <emphasis>may</emphasis> be able to rebuild all the packages in their + dependency order, we do not recommend it. </para> + </listitem> + + <listitem> + <para>If a package containing a shared library is updated, and if the + name of the library changes, then all the packages dynamically linked + to the library need to be recompiled to link against the newer library. + (Note that there is no correlation between the package version and the + name of the library.) For example, consider a package foo-1.2.3 that + installs a shared library with name + <filename class='libraryfile'>libfoo.so.1</filename>. Say you upgrade + the package to a newer version foo-1.2.4 that installs a shared library + with name <filename class='libraryfile'>libfoo.so.2</filename>. In this + case, all packages that are dynamically linked to + <filename class='libraryfile'>libfoo.so.1</filename> need to be + recompiled to link against + <filename class='libraryfile'>libfoo.so.2</filename>. Note that you + should not remove the previous libraries until the dependent packages + are recompiled.</para> + </listitem> + </itemizedlist> + + </sect2> + + <sect2> + <title>Package Management Techniques</title> + + <para>The following are some common package management techniques. Before + making a decision on a package manager, do some research on the various + techniques, particularly the drawbacks of the particular scheme.</para> + + <sect3> + <title>It is All in My Head!</title> + + <para>Yes, this is a package management technique. Some folks do not find + the need for a package manager because they know the packages intimately + and know what files are installed by each package. Some users also do not + need any package management because they plan on rebuilding the entire + system when a package is changed.</para> + + </sect3> + + <sect3> + <title>Install in Separate Directories</title> + + <para>This is a simplistic package management that does not need any extra + package to manage the installations. Each package is installed in a + separate directory. For example, package foo-1.1 is installed in + <filename class='directory'>/usr/pkg/foo-1.1</filename> + and a symlink is made from <filename>/usr/pkg/foo</filename> to + <filename class='directory'>/usr/pkg/foo-1.1</filename>. When installing + a new version foo-1.2, it is installed in + <filename class='directory'>/usr/pkg/foo-1.2</filename> and the previous + symlink is replaced by a symlink to the new version.</para> + + <para>Environment variables such as <envar>PATH</envar>, + <envar>LD_LIBRARY_PATH</envar>, <envar>MANPATH</envar>, + <envar>INFOPATH</envar> and <envar>CPPFLAGS</envar> need to be expanded to + include <filename>/usr/pkg/foo</filename>. For more than a few packages, + this scheme becomes unmanageable.</para> + + </sect3> + + <sect3> + <title>Symlink Style Package Management</title> + + <para>This is a variation of the previous package management technique. + Each package is installed similar to the previous scheme. But instead of + making the symlink, each file is symlinked into the + <filename class='directory'>/usr</filename> hierarchy. This removes the + need to expand the environment variables. Though the symlinks can be + created by the user to automate the creation, many package managers have + been written using this approach. A few of the popular ones include Stow, + Epkg, Graft, and Depot.</para> + + <para>The installation needs to be faked, so that the package thinks that + it is installed in <filename class="directory">/usr</filename> though in + reality it is installed in the + <filename class="directory">/usr/pkg</filename> hierarchy. Installing in + this manner is not usually a trivial task. For example, consider that you + are installing a package libfoo-1.1. The following instructions may + not install the package properly:</para> + +<screen role="nodump"><userinput>./configure --prefix=/usr/pkg/libfoo/1.1 +make +make install</userinput></screen> + + <para>The installation will work, but the dependent packages may not link + to libfoo as you would expect. If you compile a package that links against + libfoo, you may notice that it is linked to + <filename class='libraryfile'>/usr/pkg/libfoo/1.1/lib/libfoo.so.1</filename> + instead of <filename class='libraryfile'>/usr/lib/libfoo.so.1</filename> + as you would expect. The correct approach is to use the + <envar>DESTDIR</envar> strategy to fake installation of the package. This + approach works as follows:</para> + +<screen role="nodump"><userinput>./configure --prefix=/usr +make +make DESTDIR=/usr/pkg/libfoo/1.1 install</userinput></screen> + + <para>Most packages support this approach, but there are some which do not. + For the non-compliant packages, you may either need to manually install the + package, or you may find that it is easier to install some problematic + packages into <filename class='directory'>/opt</filename>.</para> + + </sect3> + + <sect3> + <title>Timestamp Based</title> + + <para>In this technique, a file is timestamped before the installation of + the package. After the installation, a simple use of the + <command>find</command> command with the appropriate options can generate + a log of all the files installed after the timestamp file was created. A + package manager written with this approach is install-log.</para> + + <para>Though this scheme has the advantage of being simple, it has two + drawbacks. If, during installation, the files are installed with any + timestamp other than the current time, those files will not be tracked by + the package manager. Also, this scheme can only be used when one package + is installed at a time. The logs are not reliable if two packages are + being installed on two different consoles.</para> + + </sect3> + + <sect3> + <title>Tracing Installation Scripts</title> + + <para>In this approach, the commands that the installation scripts perform + are recorded. There are two techniques that one can use:</para> + + <para>The <envar>LD_PRELOAD</envar> environment variable can be set to + point to a library to be preloaded before installation. During + installation, this library tracks the packages that are being installed by + attaching itself to various executables such as <command>cp</command>, + <command>install</command>, <command>mv</command> and tracking the system + calls that modify the filesystem. For this approach to work, all the + executables need to be dynamically linked without the suid or sgid bit. + Preloading the library may cause some unwanted side-effects during + installation. Therefore, it is advised that one performs some tests to + ensure that the package manager does not break anything and logs all the + appropriate files.</para> + + <para>The second technique is to use <command>strace</command>, which + logs all system calls made during the execution of the installation + scripts.</para> + </sect3> + + <sect3> + <title>Creating Package Archives</title> + + <para>In this scheme, the package installation is faked into a separate + tree as described in the Symlink style package management. After the + installation, a package archive is created using the installed files. + This archive is then used to install the package either on the local + machine or can even be used to install the package on other machines.</para> + + <para>This approach is used by most of the package managers found in the + commercial distributions. Examples of package managers that follow this + approach are RPM (which, incidentally, is required by the <ulink + url="http://refspecs.linuxfoundation.org/lsb.shtml">Linux + Standard Base Specification</ulink>), pkg-utils, Debian's apt, and + Gentoo's Portage system. A hint describing how to adopt this style of + package management for LFS systems is located at <ulink + url="&hints-root;fakeroot.txt"/>.</para> + + <para>Creation of package files that include dependency information is + complex and is beyond the scope of LFS.</para> + + <para>Slackware uses a <command>tar</command> based system for package + archives. This system purposely does not handle package dependencies + as more complex package managers do. For details of Slackware package + management, see <ulink + url="http://www.slackbook.org/html/package-management.html"/>.</para> + </sect3> + + <sect3> + <title>User Based Management</title> + + <para>This scheme, unique to LFS, was devised by Matthias Benkmann, and is + available from the <ulink url="&hints-index;">Hints Project</ulink>. In + this scheme, each package is installed as a separate user into the + standard locations. Files belonging to a package are easily identified by + checking the user ID. The features and shortcomings of this approach are + too complex to describe in this section. For the details please see the + hint at <ulink url="&hints-root;more_control_and_pkg_man.txt"/>.</para> + + </sect3> + + </sect2> + + <sect2> + <title>Deploying LFS on Multiple Systems</title> + + <para>One of the advantages of an LFS system is that there are no files that + depend on the position of files on a disk system. Cloning an LFS build to + another computer with the same architecture as the base system is as + simple as using <command>tar</command> on the LFS partition that contains + the root directory (about 250MB uncompressed for a base LFS build), copying + that file via network transfer or CD-ROM to the new system and expanding + it. From that point, a few configuration files will have to be changed. + Configuration files that may need to be updated include: + <filename>/etc/hosts</filename>, + <filename>/etc/fstab</filename>, + <filename>/etc/passwd</filename>, + <filename>/etc/group</filename>, + <phrase revision="systemd"> + <filename>/etc/shadow</filename>, and + <filename>/etc/ld.so.conf</filename>. + </phrase> + <phrase revision="sysv"> + <filename>/etc/shadow</filename>, + <filename>/etc/ld.so.conf</filename>, + <filename>/etc/sysconfig/rc.site</filename>, + <filename>/etc/sysconfig/network</filename>, and + <filename>/etc/sysconfig/ifconfig.eth0</filename>. + </phrase> + </para> + + <para>A custom kernel may need to be built for the new system depending on + differences in system hardware and the original kernel + configuration.</para> + + <note><para>There have been some reports of issues when copying between + similar but not identical architectures. For instance, the instruction set + for an Intel system is not identical with an AMD processor and later + versions of some processors may have instructions that are unavailable in + earlier versions.</para></note> + + <para>Finally the new system has to be made bootable via <xref + linkend="ch-bootable-grub"/>.</para> + + </sect2> + +</sect1> diff --git a/chapter08/procps.xml b/chapter08/procps.xml new file mode 100644 index 000000000..59bf0864c --- /dev/null +++ b/chapter08/procps.xml @@ -0,0 +1,292 @@ +<?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-procps" role="wrap"> + <?dbhtml filename="procps-ng.html"?> + + <sect1info condition="script"> + <productname>procps-ng</productname> + <productnumber>&procps-ng-version;</productnumber> + <address>&procps-ng-url;</address> + </sect1info> + + <title>Procps-ng-&procps-ng-version;</title> + + <indexterm zone="ch-system-procps"> + <primary sortas="a-Procps">Procps-ng</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Procps-ng package contains programs for monitoring processes.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&procps-ng-ch6-sbu;</seg> + <seg>&procps-ng-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Procps-ng</title> + + <para>Prepare procps-ng for compilation:</para> + +<screen revision="sysv"><userinput remap="configure">./configure --prefix=/usr \ + --exec-prefix= \ + --libdir=/usr/lib \ + --docdir=/usr/share/doc/procps-ng-&procps-ng-version; \ + --disable-static \ + --disable-kill</userinput></screen> + +<screen revision="systemd"><userinput remap="configure">./configure --prefix=/usr \ + --exec-prefix= \ + --libdir=/usr/lib \ + --docdir=/usr/share/doc/procps-ng-&procps-ng-version; \ + --disable-static \ + --disable-kill \ + --with-systemd</userinput></screen> + + <variablelist> + <title>The meaning of the configure options:</title> + + <varlistentry> + <term><parameter>--disable-kill</parameter></term> + <listitem> + <para>This switch disables building the <command>kill</command> + command that will be installed by the Util-linux package.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make</userinput></screen> + + <para>The test suite needs some custom modifications for LFS. + Remove a test that fails when scripting does not use a tty device and + fix two others. + To run the test suite, run the following commands:</para> + +<screen><userinput remap="test">sed -i -r 's|(pmap_initname)\\\$|\1|' testsuite/pmap.test/pmap.exp +sed -i '/set tty/d' testsuite/pkill.test/pkill.exp +rm testsuite/pgrep.test/pgrep.exp +make check</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + +<para>Finally, move essential libraries to a location that can be found if +<filename class="directory">/usr</filename> is not mounted.</para> + +<screen><userinput remap="install">mv -v /usr/lib/libprocps.so.* /lib +ln -sfv ../../lib/$(readlink /usr/lib/libprocps.so) /usr/lib/libprocps.so</userinput></screen> + + </sect2> + + <sect2 id="contents-procps" role="content"> + <title>Contents of Procps-ng</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>free, pgrep, pidof, pkill, pmap, ps, pwdx, slabtop, + sysctl, tload, top, uptime, vmstat, w, and watch</seg> + <seg>libprocps.so</seg> + <seg>/usr/include/proc and /usr/share/doc/procps-ng-&procps-ng-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="free"> + <term><command>free</command></term> + <listitem> + <para>Reports the amount of free and used memory (both physical and + swap memory) in the system</para> + <indexterm zone="ch-system-procps free"> + <primary sortas="b-free">free</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pgrep"> + <term><command>pgrep</command></term> + <listitem> + <para>Looks up processes based on their name and other attributes</para> + <indexterm zone="ch-system-procps pgrep"> + <primary sortas="b-pgrep">pgrep</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pidof"> + <term><command>pidof</command></term> + <listitem> + <para>Reports the PIDs of the given programs</para> + <indexterm zone="ch-system-procps pidof"> + <primary sortas="b-pidof">pidof</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pkill"> + <term><command>pkill</command></term> + <listitem> + <para>Signals processes based on their name and other attributes</para> + <indexterm zone="ch-system-procps pkill"> + <primary sortas="b-pkill">pkill</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pmap"> + <term><command>pmap</command></term> + <listitem> + <para>Reports the memory map of the given process</para> + <indexterm zone="ch-system-procps pmap"> + <primary sortas="b-pmap">pmap</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="ps"> + <term><command>ps</command></term> + <listitem> + <para>Lists the current running processes</para> + <indexterm zone="ch-system-procps ps"> + <primary sortas="b-ps">ps</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pwdx"> + <term><command>pwdx</command></term> + <listitem> + <para>Reports the current working directory of a process</para> + <indexterm zone="ch-system-procps pwdx"> + <primary sortas="b-pwdx">pwdx</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="slabtop"> + <term><command>slabtop</command></term> + <listitem> + <para>Displays detailed kernel slab cache information in real time</para> + <indexterm zone="ch-system-procps slabtop"> + <primary sortas="b-slabtop">slabtop</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="sysctl"> + <term><command>sysctl</command></term> + <listitem> + <para>Modifies kernel parameters at run time</para> + <indexterm zone="ch-system-procps sysctl"> + <primary sortas="b-sysctl">sysctl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="tload"> + <term><command>tload</command></term> + <listitem> + <para>Prints a graph of the current system load average</para> + <indexterm zone="ch-system-procps tload"> + <primary sortas="b-tload">tload</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="top"> + <term><command>top</command></term> + <listitem> + <para>Displays a list of the most CPU intensive processes; it + provides an ongoing look at processor activity in real time</para> + <indexterm zone="ch-system-procps top"> + <primary sortas="b-top">top</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="uptime"> + <term><command>uptime</command></term> + <listitem> + <para>Reports how long the system has been running, how many users are + logged on, and the system load averages</para> + <indexterm zone="ch-system-procps uptime"> + <primary sortas="b-uptime">uptime</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="vmstat"> + <term><command>vmstat</command></term> + <listitem> + <para>Reports virtual memory statistics, giving information about + processes, memory, paging, block Input/Output (IO), traps, and CPU + activity</para> + <indexterm zone="ch-system-procps vmstat"> + <primary sortas="b-vmstat">vmstat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="w"> + <term><command>w</command></term> + <listitem> + <para>Shows which users are currently logged on, where, and since + when</para> + <indexterm zone="ch-system-procps w"> + <primary sortas="b-w">w</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="watch"> + <term><command>watch</command></term> + <listitem> + <para>Runs a given command repeatedly, displaying the first + screen-full of its output; this allows a user to watch the output + change over time</para> + <indexterm zone="ch-system-procps watch"> + <primary sortas="b-watch">watch</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libprocps"> + <term><filename class="libraryfile">libprocps</filename></term> + <listitem> + <para>Contains the functions used by most programs in this + package</para> + <indexterm zone="ch-system-procps libprocps"> + <primary sortas="c-libprocps">libprocps</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/psmisc.xml b/chapter08/psmisc.xml new file mode 100644 index 000000000..b01303131 --- /dev/null +++ b/chapter08/psmisc.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-system-psmisc" role="wrap"> + <?dbhtml filename="psmisc.html"?> + + <sect1info condition="script"> + <productname>psmisc</productname> + <productnumber>&psmisc-version;</productnumber> + <address>&psmisc-url;</address> + </sect1info> + + <title>Psmisc-&psmisc-version;</title> + + <indexterm zone="ch-system-psmisc"> + <primary sortas="a-Psmisc">Psmisc</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Psmisc package contains programs for displaying information about + running processes.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&psmisc-ch6-sbu;</seg> + <seg>&psmisc-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Psmisc</title> + + <para>Prepare Psmisc 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>This package does not come with a test suite.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Finally, move the <command>killall</command> and <command>fuser</command> + programs to the location specified by the FHS:</para> + +<screen><userinput remap="install">mv -v /usr/bin/fuser /bin +mv -v /usr/bin/killall /bin</userinput></screen> + + </sect2> + + <sect2 id="contents-psmisc" role="content"> + <title>Contents of Psmisc</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + + <seglistitem> + <seg>fuser, killall, peekfd, prtstat, pslog, pstree, and pstree.x11 (link to pstree)</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="fuser"> + <term><command>fuser</command></term> + <listitem> + <para>Reports the Process IDs (PIDs) of processes that use the given + files or file systems</para> + <indexterm zone="ch-system-psmisc fuser"> + <primary sortas="b-fuser">fuser</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="killall"> + <term><command>killall</command></term> + <listitem> + <para>Kills processes by name; it sends a signal to all processes + running any of the given commands</para> + <indexterm zone="ch-system-psmisc killall"> + <primary sortas="b-killall">killall</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="peekfd"> + <term><command>peekfd</command></term> + <listitem> + <para>Peek at file descriptors of a running process, given its + PID</para> + <indexterm zone="ch-system-psmisc peekfd"> + <primary sortas="b-peekfd">peekfd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="prtstat"> + <term><command>prtstat</command></term> + <listitem> + <para>Prints information about a process</para> + <indexterm zone="ch-system-psmisc prtstat"> + <primary sortas="b-prtstat">prtstat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pslog"> + <term><command>pslog</command></term> + <listitem> + <para>Reports current logs path of a process</para> + <indexterm zone="ch-system-psmisc pslog"> + <primary sortas="b-pslog">pslog</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pstree"> + <term><command>pstree</command></term> + <listitem> + <para>Displays running processes as a tree</para> + <indexterm zone="ch-system-psmisc pstree"> + <primary sortas="b-pstree">pstree</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pstree.x11"> + <term><command>pstree.x11</command></term> + <listitem> + <para>Same as <command>pstree</command>, except that it waits for + confirmation before exiting</para> + <indexterm zone="ch-system-psmisc pstree.x11"> + <primary sortas="b-pstree.x11">pstree.x11</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/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/chapter08/readline.xml b/chapter08/readline.xml new file mode 100644 index 000000000..87571ea9d --- /dev/null +++ b/chapter08/readline.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-system-readline" role="wrap"> + <?dbhtml filename="readline.html"?> + + <sect1info condition="script"> + <productname>readline</productname> + <productnumber>&readline-version;</productnumber> + <address>&readline-url;</address> + </sect1info> + + <title>Readline-&readline-version;</title> + + <indexterm zone="ch-system-readline"> + <primary sortas="a-Readline">Readline</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Readline package is a set of libraries that offers command-line + editing and history capabilities.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&readline-ch6-sbu;</seg> + <seg>&readline-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Readline</title> + + <para>Reinstalling Readline will cause the old libraries to be moved to + <libraryname>.old. While this is normally not a problem, in some cases + it can trigger a linking bug in <command>ldconfig</command>. This can be + avoided by issuing the following two seds:</para> + +<screen><userinput remap="pre">sed -i '/MV.*old/d' Makefile.in +sed -i '/{OLDSUFF}/c:' support/shlib-install</userinput></screen> + + <para>Prepare Readline for compilation:</para> + +<screen><userinput remap="configure">./configure --prefix=/usr \ + --disable-static \ + --with-curses \ + --docdir=/usr/share/doc/readline-&readline-version;</userinput></screen> + + <variablelist> + <title>The meaning of the configure option:</title> + + <varlistentry> + <term><parameter>--with-curses"</parameter></term> + <listitem> + <para>This option tells Readline that it can find the termcap + library functions in the curses library, rather than a separate + termcap library. It allows generating a correct + <filename>readline.pc</filename> file.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">make SHLIB_LIBS="-lncursesw"</userinput></screen> + + <variablelist> + <title>The meaning of the make option:</title> + + <varlistentry> + <term><parameter>SHLIB_LIBS="-lncursesw"</parameter></term> + <listitem> + <para>This option forces Readline to link against the + <filename class="libraryfile">libncursesw</filename> library.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>This package does not come with a test suite.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make SHLIB_LIBS="-lncursesw" install</userinput></screen> + + <para>Now move the dynamic libraries to a more appropriate location + and fix up some permissions and symbolic links:</para> + +<screen><userinput remap="install">mv -v /usr/lib/lib{readline,history}.so.* /lib +chmod -v u+w /lib/lib{readline,history}.so.* +ln -sfv ../../lib/$(readlink /usr/lib/libreadline.so) /usr/lib/libreadline.so +ln -sfv ../../lib/$(readlink /usr/lib/libhistory.so ) /usr/lib/libhistory.so</userinput></screen> + + <para>If desired, install the documentation:</para> + +<screen><userinput remap="install">install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-&readline-version;</userinput></screen> + + </sect2> + + <sect2 id="contents-readline" role="content"> + <title>Contents of Readline</title> + + <segmentedlist> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>libhistory.so and libreadline.so</seg> + <seg>/usr/include/readline and + /usr/share/doc/readline-&readline-version;</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="libhistory"> + <term><filename class="libraryfile">libhistory</filename></term> + <listitem> + <para>Provides a consistent user interface for recalling lines + of history</para> + <indexterm zone="ch-system-readline libhistory"> + <primary sortas="c-libhistory">libhistory</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libreadline"> + <term><filename class="libraryfile">libreadline</filename></term> + <listitem> + <para>Provides a set of commands for manipulating text entered in an + interactive session of a program.</para> + <indexterm zone="ch-system-readline libreadline"> + <primary sortas="c-libreadline">libreadline</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/revisedchroot.xml b/chapter08/revisedchroot.xml new file mode 100644 index 000000000..0e836d661 --- /dev/null +++ b/chapter08/revisedchroot.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-system-revisedchroot"> + <?dbhtml filename="revisedchroot.html"?> + + <title>Cleaning Up</title> + + <para>Finally, clean up some extra files left around from running tests:</para> + +<screen><userinput>rm -rf /tmp/*</userinput></screen> + + <para>Now log out and reenter the chroot environment with an updated + chroot command. From now on, use this updated chroot command any time + you need to reenter the chroot environment after exiting:</para> + +<screen role="nodump"><userinput>logout + +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</userinput></screen> + + <para>Here the <parameter>+h</parameter> option is not used anymore, since + all the previous programs have been replaced: hashing is therefore + possible.</para> + + <para>If the virtual kernel file systems have been unmounted, either manually + or through a reboot, ensure that the virtual kernel file systems are mounted + when reentering the chroot. This process was explained in <xref + linkend="ch-system-bindmount"/> and <xref + linkend="ch-system-kernfsmount"/>.</para> + + <para>There were several static libraries that were not suppressed earlier + in the chapter in order to satisfy the regression tests in several packages. These + libraries are from binutils, bzip2, e2fsprogs, flex, libtool, and zlib. If desired, + remove them now:</para> + +<screen><userinput>rm -f /usr/lib/lib{bfd,opcodes}.a +rm -f /usr/lib/libctf{,-nobfd}.a +rm -f /usr/lib/libbz2.a +rm -f /usr/lib/lib{com_err,e2p,ext2fs,ss}.a +rm -f /usr/lib/libltdl.a +rm -f /usr/lib/libfl.a +rm -f /usr/lib/libz.a</userinput></screen> + + <para>There are also several files installed in the /usr/lib and /usr/libexec + directories with a file name extention of .la. These are "libtool archive" + files. As already said, they 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. + To remove them, run:</para> + +<screen><userinput>find /usr/lib /usr/libexec -name \*.la -delete</userinput></screen> + + <para>For more information about libtool archive files, see the <ulink + url="&blfs-book;/introduction/la-files.html">BLFS section "About Libtool + Archive (.la) files"</ulink>.</para> + + <para>Finally, remove the temporary 'tester' usr account created at the + beginning of this chapter.</para> + +<screen><userinput>sed -i '/tester/d' /etc/passwd /etc/group +rm -rf /home/tester</userinput></screen> +</sect1> 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/chapter08/shadow.xml b/chapter08/shadow.xml new file mode 100644 index 000000000..425112cbd --- /dev/null +++ b/chapter08/shadow.xml @@ -0,0 +1,608 @@ +<?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-shadow" role="wrap"> + <?dbhtml filename="shadow.html"?> + + <sect1info condition="script"> + <productname>shadow</productname> + <productnumber>&shadow-version;</productnumber> + <address>&shadow-url;</address> + </sect1info> + + <title>Shadow-&shadow-version;</title> + + <indexterm zone="ch-system-shadow"> + <primary sortas="a-Shadow">Shadow</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Shadow package contains programs for handling passwords in a secure + way.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&shadow-ch6-sbu;</seg> + <seg>&shadow-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Shadow</title> + + <note> + <para>If you would like to enforce the use of strong passwords, refer to + <ulink url="&blfs-book;postlfs/cracklib.html"/> for installing + CrackLib prior to building Shadow. Then add + <parameter>--with-libcrack</parameter> to the <command>configure</command> + command below.</para> + </note> + + <para>Disable the installation of the <command>groups</command> program + and its man pages, as Coreutils provides a better version. Also, + prevent the installation of manual pages that were already installed in + <xref linkend="ch-system-man-pages"/>:</para> + +<screen><userinput remap="pre">sed -i 's/groups$(EXEEXT) //' src/Makefile.in +find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \; +find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; +find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \;</userinput></screen> + + <para id="shadow-login_defs">Instead of using the default + <emphasis>crypt</emphasis> method, use the more secure + <emphasis>SHA-512</emphasis> method of password encryption, which also + allows passwords longer than 8 characters. It is also necessary to change + the obsolete <filename class="directory">/var/spool/mail</filename> location + for user mailboxes that Shadow uses by default to the <filename + class="directory">/var/mail</filename> location used currently:</para> + +<screen><userinput remap="pre">sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \ + -e 's@/var/spool/mail@/var/mail@' etc/login.defs</userinput></screen> + + <note> + <para>If you chose to build Shadow with Cracklib support, run the following:</para> + +<screen role="nodump"><userinput>sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' etc/login.defs</userinput></screen> + </note> + + <para>Make a minor change to make the first group number generated + by useradd 1000:</para> + +<screen><userinput remap="pre">sed -i 's/1000/999/' etc/useradd</userinput></screen> + + <para>Prepare Shadow for compilation:</para> + +<screen><userinput remap="configure">touch /usr/bin/passwd +./configure --sysconfdir=/etc \ + --with-group-name-max-length=32</userinput></screen> + + <variablelist> + <title>The meaning of the configure option:</title> + + <varlistentry> + <term><command>touch /usr/bin/passwd</command></term> + <listitem> + <para>The file <filename>/usr/bin/passwd</filename> needs + to exist because its location is harcoded in some programs, and + the default location if it does not exist is not right.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><parameter>--with-group-name-max-length=32</parameter></term> + <listitem> + <para>The maximum user name is 32 characters. Make the maximum + group name the same.</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</userinput></screen> + <!-- + <para>Move a misplaced program to its proper location:</para> + +<screen><userinput remap="install">mv -v /usr/bin/passwd /bin</userinput></screen> + --> + + <!-- <para>Move Shadow's libraries to more appropriate locations:</para> + +<screen><userinput remap="install">mv -v /lib/libshadow.*a /usr/lib +rm -v /lib/libshadow.so +ln -sfv ../../lib/libshadow.so.0 /usr/lib/libshadow.so</userinput></screen> --> + + </sect2> + + <sect2 id="conf-shadow" role="configuration"> + <title>Configuring Shadow</title> + + <indexterm zone="conf-shadow"> + <primary sortas="a-Shadow">Shadow</primary> + <secondary>configuring</secondary> + </indexterm> + + <para>This package contains utilities to add, modify, and delete users and + groups; set and change their passwords; and perform other administrative + tasks. For a full explanation of what <emphasis>password shadowing</emphasis> + means, see the <filename>doc/HOWTO</filename> file within the unpacked + source tree. If using Shadow support, keep in mind that programs which need + to verify passwords (display managers, FTP programs, pop3 daemons, etc.) + must be Shadow-compliant. That is, they need to be able to work with + shadowed passwords.</para> + + <para>To enable shadowed passwords, run the following command:</para> + +<screen><userinput>pwconv</userinput></screen> + + <para>To enable shadowed group passwords, run:</para> + +<screen><userinput>grpconv</userinput></screen> + + <para>Shadow's stock configuration for the <command>useradd</command> + utility has a few caveats that need some explanation. First, the default + action for the <command>useradd</command> utility is to create the user and + a group of the same name as the user. By default the user ID (UID) and + group ID (GID) numbers will begin with 1000. This means if you don't pass + parameters to <command>useradd</command>, each user will be a member of a + unique group on the system. If this behavior is undesirable, you'll need + to pass the <parameter>-g</parameter> parameter to + <command>useradd</command>. The default parameters are stored in the + <filename>/etc/default/useradd</filename> file. You may need to modify two + parameters in this file to suit your particular needs.</para> + + <variablelist> + <title><filename>/etc/default/useradd</filename> Parameter Explanations</title> + + <varlistentry> + <term><parameter>GROUP=1000</parameter></term> + <listitem> + <para>This parameter sets the beginning of the group numbers used in + the /etc/group file. You can modify it to anything you desire. Note + that <command>useradd</command> will never reuse a UID or GID. If the + number identified in this parameter is used, it will use the next + available number after this. Note also that if you don't have a group + 1000 on your system the first time you use <command>useradd</command> + without the <parameter>-g</parameter> parameter, you'll get a message + displayed on the terminal that says: + <computeroutput>useradd: unknown GID 1000</computeroutput>. You may + disregard this message and group number 1000 will be used.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><parameter>CREATE_MAIL_SPOOL=yes</parameter></term> + <listitem> + <para>This parameter causes <command>useradd</command> to create a + mailbox file for the newly created user. <command>useradd</command> + will make the group ownership of this file to the + <systemitem class="groupname">mail</systemitem> group with 0660 + permissions. If you would prefer that these mailbox files are not + created by <command>useradd</command>, issue the following + command:</para> + +<screen><userinput>sed -i 's/yes/no/' /etc/default/useradd</userinput></screen> + </listitem> + </varlistentry> + + </variablelist> + + + </sect2> + + <sect2 role="configuration"> + <title>Setting the root password</title> + + <para>Choose a password for user <emphasis>root</emphasis> and set it + by running:</para> + +<screen role="nodump"><userinput>passwd root</userinput></screen> + + </sect2> + + <sect2 id="contents-shadow" role="content"> + <title>Contents of Shadow</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg>chage, chfn, chgpasswd, chpasswd, chsh, expiry, faillog, gpasswd, + groupadd, groupdel, groupmems, groupmod, grpck, grpconv, grpunconv, + lastlog, login, logoutd, newgidmap, newgrp, newuidmap, newusers, + nologin, passwd, pwck, pwconv, pwunconv, sg (link to newgrp), su, + useradd, userdel, usermod, vigr (link to vipw), and vipw</seg> + <seg>/etc/default</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="chage"> + <term><command>chage</command></term> + <listitem> + <para>Used to change the maximum number of days between obligatory + password changes</para> + <indexterm zone="ch-system-shadow chage"> + <primary sortas="b-chage">chage</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="chfn"> + <term><command>chfn</command></term> + <listitem> + <para>Used to change a user's full name and other information</para> + <indexterm zone="ch-system-shadow chfn"> + <primary sortas="b-chfn">chfn</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="chgpasswd"> + <term><command>chgpasswd</command></term> + <listitem> + <para>Used to update group passwords in batch mode</para> + <indexterm zone="ch-system-shadow chgpasswd"> + <primary sortas="b-chgpasswd">chgpasswd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="chpasswd"> + <term><command>chpasswd</command></term> + <listitem> + <para>Used to update user passwords in batch mode</para> + <indexterm zone="ch-system-shadow chpasswd"> + <primary sortas="b-chpasswd">chpasswd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="chsh"> + <term><command>chsh</command></term> + <listitem> + <para>Used to change a user's default login shell</para> + <indexterm zone="ch-system-shadow chsh"> + <primary sortas="b-chsh">chsh</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="expiry"> + <term><command>expiry</command></term> + <listitem> + <para>Checks and enforces the current password expiration policy</para> + <indexterm zone="ch-system-shadow expiry"> + <primary sortas="b-expiry">expiry</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="faillog"> + <term><command>faillog</command></term> + <listitem> + <para>Is used to examine the log of login failures, to set a maximum + number of failures before an account is blocked, or to reset the + failure count</para> + <indexterm zone="ch-system-shadow faillog"> + <primary sortas="b-faillog">faillog</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="gpasswd"> + <term><command>gpasswd</command></term> + <listitem> + <para>Is used to add and delete members and administrators to + groups</para> + <indexterm zone="ch-system-shadow gpasswd"> + <primary sortas="b-gpasswd">gpasswd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="groupadd"> + <term><command>groupadd</command></term> + <listitem> + <para>Creates a group with the given name</para> + <indexterm zone="ch-system-shadow groupadd"> + <primary sortas="b-groupadd">groupadd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="groupdel"> + <term><command>groupdel</command></term> + <listitem> + <para>Deletes the group with the given name</para> + <indexterm zone="ch-system-shadow groupdel"> + <primary sortas="b-groupdel">groupdel</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="groupmems"> + <term><command>groupmems</command></term> + <listitem> + <para>Allows a user to administer his/her own group membership list + without the requirement of super user privileges.</para> + <indexterm zone="ch-system-shadow groupmems"> + <primary sortas="b-groupmems">groupmems</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="groupmod"> + <term><command>groupmod</command></term> + <listitem> + <para>Is used to modify the given group's name or GID</para> + <indexterm zone="ch-system-shadow groupmod"> + <primary sortas="b-groupmod">groupmod</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grpck"> + <term><command>grpck</command></term> + <listitem> + <para>Verifies the integrity of the group files + <filename>/etc/group</filename> and + <filename>/etc/gshadow</filename></para> + <indexterm zone="ch-system-shadow grpck"> + <primary sortas="b-grpck">grpck</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grpconv"> + <term><command>grpconv</command></term> + <listitem> + <para>Creates or updates the shadow group file from the normal + group file</para> + <indexterm zone="ch-system-shadow grpconv"> + <primary sortas="b-grpconv">grpconv</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="grpunconv"> + <term><command>grpunconv</command></term> + <listitem> + <para>Updates <filename>/etc/group</filename> from + <filename>/etc/gshadow</filename> and then deletes the latter</para> + <indexterm zone="ch-system-shadow grpunconv"> + <primary sortas="b-grpunconv">grpunconv</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="lastlog"> + <term><command>lastlog</command></term> + <listitem> + <para>Reports the most recent login of all users or of a + given user</para> + <indexterm zone="ch-system-shadow lastlog"> + <primary sortas="b-lastlog">lastlog</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="login"> + <term><command>login</command></term> + <listitem> + <para>Is used by the system to let users sign on</para> + <indexterm zone="ch-system-shadow login"> + <primary sortas="b-login">login</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="logoutd"> + <term><command>logoutd</command></term> + <listitem> + <para>Is a daemon used to enforce restrictions on log-on time + and ports</para> + <indexterm zone="ch-system-shadow logoutd"> + <primary sortas="b-logoutd">logoutd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="newgidmap"> + <term><command>newgidmap</command></term> + <listitem> + <para>Is used to set the gid mapping of a user namespace</para> + <indexterm zone="ch-system-shadow newgidmap"> + <primary sortas="b-newgidmap">newgidmap</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="newgrp"> + <term><command>newgrp</command></term> + <listitem> + <para>Is used to change the current GID during a login session</para> + <indexterm zone="ch-system-shadow newgrp"> + <primary sortas="b-newgrp">newgrp</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="newuidmap"> + <term><command>newuidmap</command></term> + <listitem> + <para>Is used to set the uid mapping of a user namespace</para> + <indexterm zone="ch-system-shadow newuidmap"> + <primary sortas="b-newuidmap">newuidmap</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="newusers"> + <term><command>newusers</command></term> + <listitem> + <para>Is used to create or update an entire series of user + accounts</para> + <indexterm zone="ch-system-shadow newusers"> + <primary sortas="b-newusers">newusers</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="nologin"> + <term><command>nologin</command></term> + <listitem> + <para>Displays a message that an account is not available; it is designed + to be used as the default shell for accounts that have been + disabled</para> + <indexterm zone="ch-system-shadow nologin"> + <primary sortas="b-nologin">nologin</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="passwd"> + <term><command>passwd</command></term> + <listitem> + <para>Is used to change the password for a user or group account</para> + <indexterm zone="ch-system-shadow passwd"> + <primary sortas="b-passwd">passwd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pwck"> + <term><command>pwck</command></term> + <listitem> + <para>Verifies the integrity of the password files + <filename>/etc/passwd</filename> and + <filename>/etc/shadow</filename></para> + <indexterm zone="ch-system-shadow pwck"> + <primary sortas="b-pwck">pwck</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pwconv"> + <term><command>pwconv</command></term> + <listitem> + <para>Creates or updates the shadow password file from the normal + password file</para> + <indexterm zone="ch-system-shadow pwconv"> + <primary sortas="b-pwconv">pwconv</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="pwunconv"> + <term><command>pwunconv</command></term> + <listitem> + <para>Updates <filename>/etc/passwd</filename> from + <filename>/etc/shadow</filename> and then deletes the latter</para> + <indexterm zone="ch-system-shadow pwunconv"> + <primary sortas="b-pwunconv">pwunconv</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="sg"> + <term><command>sg</command></term> + <listitem> + <para>Executes a given command while the user's GID + is set to that of the given group</para> + <indexterm zone="ch-system-shadow sg"> + <primary sortas="b-sg">sg</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="su"> + <term><command>su</command></term> + <listitem> + <para>Runs a shell with substitute user and group IDs</para> + <indexterm zone="ch-system-shadow su"> + <primary sortas="b-su">su</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="useradd"> + <term><command>useradd</command></term> + <listitem> + <para>Creates a new user with the given name, or updates the default + new-user information</para> + <indexterm zone="ch-system-shadow useradd"> + <primary sortas="b-useradd">useradd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="userdel"> + <term><command>userdel</command></term> + <listitem> + <para>Deletes the given user account</para> + <indexterm zone="ch-system-shadow userdel"> + <primary sortas="b-userdel">userdel</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="usermod"> + <term><command>usermod</command></term> + <listitem> + <para>Is used to modify the given user's login name, User + Identification (UID), shell, initial group, home directory, etc.</para> + <indexterm zone="ch-system-shadow usermod"> + <primary sortas="b-usermod">usermod</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="vigr"> + <term><command>vigr</command></term> + <listitem> + <para>Edits the <filename>/etc/group</filename> or + <filename>/etc/gshadow</filename> files</para> + <indexterm zone="ch-system-shadow vigr"> + <primary sortas="b-vigr">vigr</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="vipw"> + <term><command>vipw</command></term> + <listitem> + <para>Edits the <filename>/etc/passwd</filename> or + <filename>/etc/shadow</filename> files</para> + <indexterm zone="ch-system-shadow vipw"> + <primary sortas="b-vipw">vipw</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/strippingagain.xml b/chapter08/strippingagain.xml new file mode 100644 index 000000000..fb2a1b55f --- /dev/null +++ b/chapter08/strippingagain.xml @@ -0,0 +1,81 @@ +<?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-strippingagain"> + <?dbhtml filename="strippingagain.html"?> + + <title>Stripping Again</title> + + <para>This section is optional. If the intended user is not a + programmer and does not plan to do + any debugging on the system software, the system size can be decreased + by about 90 MB by removing the debugging symbols from binaries and + libraries. This causes no inconvenience other than not being able to + debug the software fully anymore.</para> + + <para>Most people who use the commands mentioned below do not + experience any difficulties. However, it is easy to make a typo and + render the new system unusable, so before running the + <command>strip</command> commands, it is a good idea to make a + backup of the LFS system in its current state.</para> + + <para>First place the debugging symbols for selected libraries + in separate files. This debugging information is needed if running + regression tests that use <ulink + url='&blfs-book;/general/valgrind.html'>valgrind</ulink> or <ulink + url='&blfs-book;/general/gdb.html'>gdb</ulink> later in BLFS. + </para> + +<!-- also of interest are libgfortan, libgo, libgomp, and libobjc from gcc --> + +<!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"--> +<screen><userinput>save_lib="ld-&glibc-version;.so libc-&glibc-version;.so libpthread-&glibc-version;.so libthread_db-&libthread_db-version;.so" + +cd /lib + +for LIB in $save_lib; do + objcopy --only-keep-debug $LIB $LIB.dbg + strip --strip-unneeded $LIB + objcopy --add-gnu-debuglink=$LIB.dbg $LIB +done + +save_usrlib="libquadmath.so.&libquadmath-version; libstdc++.so.&libstdcpp-version; + libitm.so.&libitm-version; libatomic.so.&libatomic-version;" <!-- libcilkrts.so.&libcilkrts-version;--> + +cd /usr/lib + +for LIB in $save_usrlib; do + objcopy --only-keep-debug $LIB $LIB.dbg + strip --strip-unneeded $LIB + objcopy --add-gnu-debuglink=$LIB.dbg $LIB +done + +unset LIB save_lib save_usrlib</userinput></screen> + +<!-- <para>Before performing the stripping, take special care to ensure that + none of the binaries that are about to be stripped are running:</para> + +<screen role="nodump"><userinput>exec /tools/bin/bash</userinput></screen> + + <para>Now the binaries and libraries can be safely stripped:</para> +--> + <para>Now the binaries and libraries can be stripped:</para> +<screen><userinput>find /usr/lib -type f -name \*.a \ + -exec strip --strip-debug {} ';' + +find /lib /usr/lib -type f -name \*.so* ! -name \*dbg \ + -exec strip --strip-unneeded {} ';' + +find /{bin,sbin} /usr/{bin,sbin,libexec} -type f \ + -exec strip --strip-all {} ';'</userinput></screen> + + <para>A large number of files will be reported as having their file + format not recognized. These warnings can be safely ignored. These + warnings indicate that those files are scripts instead of + binaries.</para> + +</sect1> diff --git a/chapter08/sysklogd.xml b/chapter08/sysklogd.xml new file mode 100644 index 000000000..e96980cb4 --- /dev/null +++ b/chapter08/sysklogd.xml @@ -0,0 +1,136 @@ +<?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-sysklogd" role="wrap" revision="sysv"> + <?dbhtml filename="sysklogd.html"?> + + <sect1info condition="script"> + <productname>sysklogd</productname> + <productnumber>&sysklogd-version;</productnumber> + <address>&sysklogd-url;</address> + </sect1info> + + <title>Sysklogd-&sysklogd-version;</title> + + <indexterm zone="ch-system-sysklogd"> + <primary sortas="a-Sysklogd">Sysklogd</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Sysklogd package contains programs for logging system messages, + such as those given by the kernel when unusual things happen.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&sysklogd-ch6-sbu;</seg> + <seg>&sysklogd-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Sysklogd</title> + + <para>First, fix problems that causes a segmentation fault under + some conditions in klogd and fix an obsolete program construct:</para> + +<screen><userinput remap="pre">sed -i '/Error loading kernel symbols/{n;n;d}' ksym_mod.c +sed -i 's/union wait/int/' syslogd.c</userinput></screen> + + <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 BINDIR=/sbin install</userinput></screen> + + </sect2> + + <sect2 id="conf-sysklogd" role="configuration"> + <title>Configuring Sysklogd</title> + + <indexterm zone="conf-sysklogd"> + <primary sortas="a-Sysklogd">Sysklogd</primary> + <secondary>configuring</secondary> + </indexterm> + + <indexterm zone="conf-sysklogd"> + <primary sortas="e-/etc/syslog.conf">/etc/syslog.conf</primary> + </indexterm> + + <para>Create a new <filename>/etc/syslog.conf</filename> file by running the + following:</para> + +<screen><userinput>cat > /etc/syslog.conf << "EOF" +<literal># Begin /etc/syslog.conf + +auth,authpriv.* -/var/log/auth.log +*.*;auth,authpriv.none -/var/log/sys.log +daemon.* -/var/log/daemon.log +kern.* -/var/log/kern.log +mail.* -/var/log/mail.log +user.* -/var/log/user.log +*.emerg * + +# End /etc/syslog.conf</literal> +EOF</userinput></screen> + + </sect2> + + <sect2 id="contents-sysklogd" role="content"> + <title>Contents of Sysklogd</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + + <seglistitem> + <seg>klogd and syslogd</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="klogd"> + <term><command>klogd</command></term> + <listitem> + <para>A system daemon for intercepting and logging kernel messages</para> + <indexterm zone="ch-system-sysklogd klogd"> + <primary sortas="b-klogd">klogd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="syslogd"> + <term><command>syslogd</command></term> + <listitem> + <para>Logs the messages that system programs offer for logging [Every + logged message contains at least a date stamp and a hostname, and + normally the program's name too, but that depends on how trusting the + logging daemon is told to be.]</para> + <indexterm zone="ch-system-sysklogd syslogd"> + <primary sortas="b-syslogd">syslogd</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/systemd.xml b/chapter08/systemd.xml new file mode 100644 index 000000000..2cf2d1d1b --- /dev/null +++ b/chapter08/systemd.xml @@ -0,0 +1,830 @@ +<?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-systemd" role="wrap" revision="systemd"> + <?dbhtml filename="systemd.html"?> + + <sect1info condition="script"> + <productname>systemd</productname> + <productnumber>&systemd-version;</productnumber> + <address>&systemd-url;</address> + </sect1info> + + <title>Systemd-&systemd-version;</title> + + <indexterm zone="ch-system-systemd"> + <primary sortas="a-systemd">systemd</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The systemd package contains programs for controlling the startup, + running, and shutdown of the system.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&systemd-ch6-sbu;</seg> + <seg>&systemd-ch6-du;</seg> + </seglistitem> + </segmentedlist> + </sect2> + + <sect2 role="installation"> + <title>Installation of systemd</title> + + <para>First, apply a patch to fix the build with GCC-10:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../systemd-&systemd-version;-gcc_10-fixes-1.patch</userinput></screen> + + + <para>Create a symlink to work around missing xsltproc:</para> + +<screen><userinput remap="pre">ln -sf /bin/true /usr/bin/xsltproc</userinput></screen> + + <para>Set up the man pages:</para> + +<screen><userinput remap="pre">tar -xf ../systemd-man-pages-&systemd-version;.tar.xz</userinput></screen> + + <para>Remove tests that cannot be built in chroot:</para> + +<screen><userinput remap="pre">sed '179,$ d' -i src/resolve/meson.build</userinput></screen> + + <para>Remove an unneeded group, + <systemitem class="groupname">render</systemitem>, from the default udev + rules:</para> + +<screen><userinput remap="pre">sed -i 's/GROUP="render", //' rules.d/50-udev-default.rules.in</userinput></screen> + + <para>Prepare systemd for compilation:</para> + +<screen><userinput remap="configure">mkdir -p build +cd build + +LANG=en_US.UTF-8 \ +meson --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + -Dblkid=true \ + -Dbuildtype=release \ + -Ddefault-dnssec=no \ + -Dfirstboot=false \ + -Dinstall-tests=false \ + -Dkmod-path=/bin/kmod \ + -Dldconfig=false \ + -Dmount-path=/bin/mount \ + -Drootprefix= \ + -Drootlibdir=/lib \ + -Dsplit-usr=true \ + -Dsulogin-path=/sbin/sulogin \ + -Dsysusers=false \ + -Dumount-path=/bin/umount \ + -Db_lto=false \ + -Drpmmacrosdir=no \ + -Dhomed=false \ + -Duserdb=false \ + -Dman=true \ + ..</userinput></screen> + + <variablelist> + <title>The meaning of the meson options:</title> + +<!-- + <varlistentry> + <term><parameter>-Dc_args=-Wno-format-overflow</parameter></term> + <listitem> + <para>The defaults flags passed to gcc contain + <parameter>-Werror=format-overflow</parameter>, which generates + an error with GCC 10. Passing this parameter prevents the error + from occuring.</para> + </listitem> + </varlistentry> +--> + + <varlistentry> + <term><parameter>-D*-path=*</parameter></term> + <listitem> + <para>These switches provide location of binaries needed by + systemd at runtime that have not yet been installed.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Ddefault-dnssec=no</parameter></term> + <listitem> + <para>This switch turns off the experimental DNSSEC support.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dfirstboot=false</parameter></term> + <listitem> + <para>This switch prevents installation of systemd + services responsible for setting up the system for + the first time. They are not useful for LFS because + everything is done manually.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dinstall-tests=false</parameter></term> + <listitem> + <para>This switch prevents installation of the compiled tests.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dldconfig=false</parameter></term> + <listitem> + <para>This switch prevents installation of a systemd unit that runs + <command>ldconfig</command> at boot, which is not useful for source + distributions such as LFS and makes the boot time longer. Remove it + if the described feature is desired.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Droot*</parameter></term> + <listitem> + <para>These switches ensure that core programs and + shared libraries are installed in the subdirectories + of the root partition.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dsplit-usr=true</parameter></term> + <listitem> + <para>This switch ensures that systemd will work on + systems where /bin, /lib and /sbin directories are not + symlinks to their /usr counterparts.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Dsysusers=false</parameter></term> + <listitem> + <para>This switch prevents installation of systemd + services responsible for setting up the + <filename>/etc/group</filename> and + <filename>/etc/passwd</filename> files. Both files + were created earlier in this chapter.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-Drpmmacrosdir=no</parameter></term> + <listitem> + <para>This switch disables installation of RPM Macros + for use with systemd because LFS does not support RPM.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><parameter>-D{userdb,homed}=false</parameter></term> + <listitem> + <para>Remove two daemons that have dependencies that do not fit + the scope of LFS.</para> + </listitem> + </varlistentry> + + </variablelist> + + <para>Compile the package:</para> + +<screen><userinput remap="make">LANG=en_US.UTF-8 ninja</userinput></screen> +<!-- + <para>To test the package, execute the following command:</para> + +<screen><userinput remap="test">LANG=en_US.UTF-8 ninja test</userinput></screen> +--> + <para>Install the package:</para> + +<screen><userinput remap="install">LANG=en_US.UTF-8 ninja install</userinput></screen> + + <para>Remove an unnecessary symbolic link:</para> + +<screen><userinput remap="install">rm -f /usr/bin/xsltproc</userinput></screen> + + <para>Create the <filename>/etc/machine-id</filename> file needed by + <command>systemd-journald</command>:</para> + +<screen><userinput remap="adjust">systemd-machine-id-setup</userinput></screen> + + <para>Setup the basic target structure:</para> + +<screen><userinput remap="adjust">systemctl preset-all</userinput></screen> + + <para>Disable a service that is known to cause problems with systems that + use a network configuration other than what is provided by + systemd-networkd:</para> + <!-- Observed halting startup with dhcpcd handling the primary NIC --> + +<screen><userinput remap="adjust">systemctl disable systemd-time-wait-sync.service</userinput></screen> + + <para>Prevent systemd from resetting the maximum PID value which causes + some problems with packages and units in BLFS:</para> + + +<screen><userinput remap="adjust">rm -f /usr/lib/sysctl.d/50-pid-max.conf</userinput></screen> + + <!-- + <para>Prevent systemd from creating <filename>/run/nologin</filename> + to allow unprivileged user logins without + <application>systemd-logind</application>:</para> + +<screen><userinput remap="adjust">rm -f /usr/lib/tmpfiles.d/systemd-nologin.conf</userinput></screen> + --> + </sect2> + + <sect2 id="contents-systemd" role="content"> + <title>Contents of systemd</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed libraries</segtitle> + <segtitle>Installed directories</segtitle> + + <seglistitem> + <seg>bootctl, busctl, coredumpctl, halt (symlink to systemctl), + hostnamectl, init, journalctl, kernel-install, localectl, loginctl, + machinectl, networkctl, portablectl, poweroff (symlink to + systemctl), reboot (symlink to systemctl), resolvconf (symlink to + resolvectl), resolvectl, runlevel (symlink to systemctl), shutdown + (symlink to systemctl), systemctl, systemd-analyze, + systemd-ask-password, systemd-cat, systemd-cgls, systemd-cgtop, + systemd-delta, systemd-detect-virt, systemd-escape, systemd-hwdb, + systemd-id128, systemd-inhibit, systemd-machine-id-setup, + systemd-mount, systemd-notify, systemd-nspawn, systemd-path, + systemd-repart, systemd-resolve (symlink to resolvectl), systemd-run, + systemd-socket-activate, systemd-stdio-bridge, systemd-tmpfiles, + systemd-tty-ask-password-agent, systemd-umount (symlink to + systemd-mount), telinit (symlink to systemctl), timedatectl, and + udevadm</seg> + <seg>libnss_myhostname.so.2, libnss_mymachines.so.2, + libnss_resolve.so.2, libnss_systemd.so.2, + libsystemd.so, libsystemd-shared-&systemd-version;.so (in /lib/systemd), + and libudev.so</seg> + <seg>/etc/binfmt.d, /etc/init.d, /etc/kernel, /etc/modules-load.d, + /etc/sysctl.d, /etc/systemd, /etc/tmpfiles.d, /etc/udev, + /etc/xdg/systemd, /lib/systemd, /lib/udev, /usr/include/systemd, + /usr/lib/binfmt.d, /usr/lib/kernel, /usr/lib/modules-load.d, + /usr/lib/sysctl.d, /usr/lib/systemd, /usr/lib/tmpfiles.d, + /usr/share/doc/systemd-&systemd-version;, /usr/share/factory, + /usr/share/systemd, /var/lib/systemd, and /var/log/journal</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="bootctl"> + <term><command>bootctl</command></term> + <listitem> + <para>Used to query the firmware and boot manager settings</para> + <indexterm zone="ch-system-systemd bootctl"> + <primary sortas="b-bootctl">bootctl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="busctl"> + <term><command>busctl</command></term> + <listitem> + <para>Used to introspect and monitor the D-Bus bus</para> + <indexterm zone="ch-system-systemd busctl"> + <primary sortas="b-busctl">busctl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="coredumpctl"> + <term><command>coredumpctl</command></term> + <listitem> + <para>Used to retrieve coredumps from the systemd journal</para> + <indexterm zone="ch-system-systemd coredumpctl"> + <primary sortas="b-coredumpctl">coredumpctl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="halt"> + <term><command>halt</command></term> + <listitem> + <para>Normally invokes <command>shutdown</command> with the + <parameter>-h</parameter> option, except when already in run-level 0, + then it tells the kernel to halt the system; it notes in the + file <filename>/var/log/wtmp</filename> that the system is being + brought down</para> + <indexterm zone="ch-system-systemd halt"> + <primary sortas="b-halt">halt</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="hostnamectl"> + <term><command>hostnamectl</command></term> + <listitem> + <para>Used to query and change the system hostname and related + settings</para> + <indexterm zone="ch-system-systemd hostnamectl"> + <primary sortas="b-hostnamectl">hostnamectl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="init"> + <term><command>init</command></term> + <listitem> + <para>The first process to be started when the kernel has initialized + the hardware which takes over the boot process and starts all + processes according to its configuration files</para> + <indexterm zone="ch-system-systemd init"> + <primary sortas="b-init">init</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="journalctl"> + <term><command>journalctl</command></term> + <listitem> + <para>Used to query the contents of the systemd journal</para> + <indexterm zone="ch-system-systemd journalctl"> + <primary sortas="b-journalctl">journalctl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="kernel-install"> + <term><command>kernel-install</command></term> + <listitem> + <para>Used to add and remove kernel and initramfs images to and + from /boot</para> + <indexterm zone="ch-system-systemd kernel-install"> + <primary sortas="b-kernel-install">kernel-install</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="localectl"> + <term><command>localectl</command></term> + <listitem> + <para>Used to query and change the system locale and keyboard layout + settings</para> + <indexterm zone="ch-system-systemd localectl"> + <primary sortas="b-localectl">localectl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="loginctl"> + <term><command>loginctl</command></term> + <listitem> + <para>Used to introspect and control the state of the systemd Login + Manager</para> + <indexterm zone="ch-system-systemd loginctl"> + <primary sortas="b-loginctl">loginctl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="machinectl"> + <term><command>machinectl</command></term> + <listitem> + <para>Used to introspect and control the state of the systemd Virtual + Machine and Container Registration Manager</para> + <indexterm zone="ch-system-systemd machinectl"> + <primary sortas="b-machinectl">machinectl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="networkctl"> + <term><command>networkctl</command></term> + <listitem> + <para>Used to introspect the state of the network links as seen by + systemd-networkd</para> + <indexterm zone="ch-system-systemd networkctl"> + <primary sortas="b-networkctl">networkctl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="portablectl"> + <term><command>portablectl</command></term> + <listitem> + <para>Used to attach or detach portable services from the local + system</para> + <indexterm zone="ch-system-systemd portablectl"> + <primary sortas="b-portablectl">portablectl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="poweroff"> + <term><command>poweroff</command></term> + <listitem> + <para>Tells the kernel to halt the system and switch off the computer + (see <command>halt</command>)</para> + <indexterm zone="ch-system-systemd poweroff"> + <primary sortas="b-poweroff">poweroff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="reboot"> + <term><command>reboot</command></term> + <listitem> + <para>Tells the kernel to reboot the system (see + <command>halt</command>)</para> + <indexterm zone="ch-system-systemd reboot"> + <primary sortas="b-reboot">reboot</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="resolvconf"> + <term><command>resolvconf</command></term> + <listitem> + <para>Register DNS server and domain configuration with + <command>systemd-resolved</command></para> + <indexterm zone="ch-system-systemd resolvconf"> + <primary sortas="b-resolvconf">resolvconf</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="resolvectl"> + <term><command>resolvectl</command></term> + <listitem> + <para>Send control commands to the network name resolution + manager, or resolve domain names, IPv4 and IPv6 addresses, + DNS records, and services.</para> + <indexterm zone="ch-system-systemd resolvectl"> + <primary sortas="b-resolvectl">resolvectl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="runlevel"> + <term><command>runlevel</command></term> + <listitem> + <para>Reports the previous and the current run-level, as noted in the + last run-level record in <filename>/var/run/utmp</filename></para> + <indexterm zone="ch-system-systemd runlevel"> + <primary sortas="b-runlevel">runlevel</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="shutdown"> + <term><command>shutdown</command></term> + <listitem> + <para>Brings the system down in a secure way, signaling all processes + and notifying all logged-in users</para> + <indexterm zone="ch-system-systemd shutdown"> + <primary sortas="b-shutdown">shutdown</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemctl"> + <term><command>systemctl</command></term> + <listitem> + <para>Used to introspect and control the state of the systemd system + and service manager</para> + <indexterm zone="ch-system-systemd systemctl"> + <primary sortas="b-systemctl">systemctl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-analyze"> + <term><command>systemd-analyze</command></term> + <listitem> + <para>Used to determine system boot-up performance of the current + boot</para> + <indexterm zone="ch-system-systemd systemd-analyze"> + <primary sortas="b-systemd-analyze">systemd-analyze</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-ask-password"> + <term><command>systemd-ask-password</command></term> + <listitem> + <para>Used to query a system password or passphrase from the user, + using a question message specified on the command line</para> + <indexterm zone="ch-system-systemd systemd-ask-password"> + <primary sortas="b-systemd-ask-password">systemd-ask-password</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-cat"> + <term><command>systemd-cat</command></term> + <listitem> + <para>Used to connect STDOUT and STDERR of a process with the Journal + </para> + <indexterm zone="ch-system-systemd systemd-cat"> + <primary sortas="b-systemd-cat">systemd-cat</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-cgls"> + <term><command>systemd-cgls</command></term> + <listitem> + <para>Recursively shows the contents of the selected Linux control + group hierarchy in a tree</para> + <indexterm zone="ch-system-systemd systemd-cgls"> + <primary sortas="b-systemd-cgls">systemd-cgls</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-cgtop"> + <term><command>systemd-cgtop</command></term> + <listitem> + <para>Shows the top control groups of the local Linux control group + hierarchy, ordered by their CPU, memory and disk I/O load</para> + <indexterm zone="ch-system-systemd systemd-cgtop"> + <primary sortas="b-systemd-cgtop">systemd-cgtop</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-delta"> + <term><command>systemd-delta</command></term> + <listitem> + <para>Used to identify and compare configuration files in + <filename class="directory">/etc</filename> that override default + counterparts in <filename class="directory">/usr</filename></para> + <indexterm zone="ch-system-systemd systemd-delta"> + <primary sortas="b-systemd-delta">systemd-delta</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-detect-virt"> + <term><command>systemd-detect-virt</command></term> + <listitem> + <para>Detects execution in a virtualized environment</para> + <indexterm zone="ch-system-systemd systemd-detect-virt"> + <primary sortas="b-systemd-detect-virt">systemd-detect-virt</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-escape"> + <term><command>systemd-escape</command></term> + <listitem> + <para>Used to escape strings for inclusion in systemd unit + names</para> + <indexterm zone="ch-system-systemd systemd-escape"> + <primary sortas="b-systemd-escape">systemd-escape</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-hwdb"> + <term><command>systemd-hwdb</command></term> + <listitem> + <para>Used to manage hardware database (hwdb)</para> + <indexterm zone="ch-system-systemd systemd-hwdb"> + <primary sortas="b-systemd-hwdb">systemd-hwdb</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-id128"> + <term><command>systemd-id128</command></term> + <listitem> + <para>Generate and print id128 strings</para> + <indexterm zone="ch-system-systemd systemd-id128"> + <primary sortas="b-systemd-id128">systemd-id128</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-inhibit"> + <term><command>systemd-inhibit</command></term> + <listitem> + <para>Used to execute a program with a shutdown, sleep or idle + inhibitor lock taken</para> + <indexterm zone="ch-system-systemd systemd-inhibit"> + <primary sortas="b-systemd-inhibit">systemd-inhibit</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-machine-id-setup"> + <term><command>systemd-machine-id-setup</command></term> + <listitem> + <para>Used by system installer tools to initialize the machine ID + stored in <filename>/etc/machine-id</filename> at install time with a + randomly generated ID</para> + <indexterm zone="ch-system-systemd systemd-machine-id-setup"> + <primary sortas="b-systemd-machine-id-setup">systemd-machine-id-setup</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-mount"> + <term><command>systemd-mount</command></term> + <listitem> + <para>A tool to temporarily mount or auto-mount a drive.</para> + <indexterm zone="ch-system-systemd systemd-mount"> + <primary sortas="b-systemd-mount">systemd-mount</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-notify"> + <term><command>systemd-notify</command></term> + <listitem> + <para>Used by daemon scripts to notify the init system about status + changes</para> + <indexterm zone="ch-system-systemd systemd-notify"> + <primary sortas="b-systemd-notify">systemd-notify</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-nspawn"> + <term><command>systemd-nspawn</command></term> + <listitem> + <para>Used to run a command or OS in a light-weight namespace + container</para> + <indexterm zone="ch-system-systemd systemd-nspawn"> + <primary sortas="b-systemd-nspawn">systemd-nspawn</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-path"> + <term><command>systemd-path</command></term> + <listitem> + <para>Used to query system and user paths</para> + <indexterm zone="ch-system-systemd systemd-path"> + <primary sortas="b-systemd-path">systemd-path</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-repart"> + <term><command>systemd-repart</command></term> + <listitem> + <para>Used go grow and add partitions to a partition table when + systemd is used in an OS image (e.g. a container).</para> + <indexterm zone="ch-system-systemd systemd-repart"> + <primary sortas="b-systemd-repart">systemd-repart</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-resolve"> + <term><command>systemd-resolve</command></term> + <listitem> + <para>Used to resolve domain names, IPV4 and IPv6 addresses, DNS + resource records, and services</para> + <indexterm zone="ch-system-systemd systemd-resolve"> + <primary sortas="b-systemd-resolve">systemd-resolve</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-run"> + <term><command>systemd-run</command></term> + <listitem> + <para>Used to create and start a transient .service or a .scope unit + and run the specified command in it</para> + <indexterm zone="ch-system-systemd systemd-run"> + <primary sortas="b-systemd-run">systemd-run</primary> + </indexterm> + </listitem> + </varlistentry> + + <!-- <varlistentry id="systemd-stdio-bridge"> + <term><command>systemd-stdio-bridge</command></term> + <listitem> + <para>To be completed</para> + <indexterm zone="ch-system-systemd systemd-stdio-bridge"> + <primary sortas="b-systemd-stdio-bridge">systemd-stdio-bridge</primary> + </indexterm> + </listitem> + </varlistentry> --> + + <varlistentry id="systemd-socket-activate"> + <term><command>systemd-socket-activate</command></term> + <listitem> + <para>A tool to listen on socket devices and launch a process upon + connection.</para> + <indexterm zone="ch-system-systemd systemd-socket-activate"> + <primary sortas="b-systemd-socket-activate">systemd-socket-activate</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-tmpfiles"> + <term><command>systemd-tmpfiles</command></term> + <listitem> + <para>Creates, deletes and cleans up volatile and temporary files and + directories, based on the configuration file format and location + specified in + <filename class="directory">tmpfiles.d</filename> directories</para> + <indexterm zone="ch-system-systemd systemd-tmpfiles"> + <primary sortas="b-systemd-tmpfiles">systemd-tmpfiles</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-umount"> + <term><command>systemd-umount</command></term> + <listitem> + <para>Unmount mount points</para> + <indexterm zone="ch-system-systemd systemd-umount"> + <primary sortas="b-systemd-umount">systemd-umount</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="systemd-tty-ask-password-agent"> + <term><command>systemd-tty-ask-password-agent</command></term> + <listitem> + <para>Used to list or process pending systemd password requests</para> + <indexterm zone="ch-system-systemd systemd-tty-ask-password-agent"> + <primary sortas="b-systemd-tty-ask-password-agent">systemd-tty-ask-password-agent</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="telinit"> + <term><command>telinit</command></term> + <listitem> + <para>Tells <command>init</command> which run-level to change + to</para> + <indexterm zone="ch-system-systemd telinit"> + <primary sortas="b-telinit">telinit</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="timedatectl"> + <term><command>timedatectl</command></term> + <listitem> + <para>Used to query and change the system clock and its settings + </para> + <indexterm zone="ch-system-systemd timedatectl"> + <primary sortas="b-timedatectl">timedatectl</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="udevadm"> + <term><command>udevadm</command></term> + <listitem> + <para>Generic udev administration tool: controls the udevd daemon, + provides info from the Udev database, monitors uevents, waits for + uevents to finish, tests udev configuration, and triggers uevents + for a given device</para> + <indexterm zone="ch-system-systemd udevadm"> + <primary sortas="b-udevadm">udevadm</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libsystemd"> + <term><filename class="libraryfile">libsystemd</filename></term> + <listitem> + <para>The main systemd utility library</para> + <indexterm zone="ch-system-systemd libsystemd"> + <primary sortas="c-libsystemd">libsystemd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libudev"> + <term><filename class="libraryfile">libudev</filename></term> + <listitem> + <para>A library to access Udev device information</para> + <indexterm zone="ch-system-systemd libudev"> + <primary sortas="c-libudev">libudev</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/sysvinit.xml b/chapter08/sysvinit.xml new file mode 100644 index 000000000..0c171acf5 --- /dev/null +++ b/chapter08/sysvinit.xml @@ -0,0 +1,220 @@ +<?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-sysvinit" role="wrap" revision="sysv"> + <?dbhtml filename="sysvinit.html"?> + + <sect1info condition="script"> + <productname>sysvinit</productname> + <productnumber>&sysvinit-version;</productnumber> + <address>&sysvinit-url;</address> + </sect1info> + + <title>Sysvinit-&sysvinit-version;</title> + + <indexterm zone="ch-system-sysvinit"> + <primary sortas="a-Sysvinit">Sysvinit</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Sysvinit package contains programs for controlling the startup, + running, and shutdown of the system.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&sysvinit-ch6-sbu;</seg> + <seg>&sysvinit-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Sysvinit</title> + +<!-- + <para>When run-levels are changed (for example, when halting the + system), <command>init</command> sends termination signals to those + processes that <command>init</command> itself started and that should + not be running in the new run-level. While doing this, + <command>init</command> outputs messages like <quote>Sending processes + the TERM signal</quote> which seem to imply that it is sending these + signals to all currently running processes. To avoid this + misinterpretation, modify the source so that these messages read like + <quote>Sending processes configured via /etc/inittab the TERM signal</quote> + instead:</para> + +<screen><userinput remap="pre">sed -i 's@Sending processes@& configured via /etc/inittab@g' src/init.c</userinput></screen> + + <para>Maintained versions of the <command>wall</command>, + <command>mountpoint</command>, <command>last</command>, + <command>mesg</command>, <command>sulogin</command>, and + <command>utmpdump</command> programs were installed earlier by Util-linux. + Suppress the installation of Sysvinit's versions of these programs and + their man pages:</para> + +<screen><userinput remap="make">sed -ri -e '/utmpdump/d' \ + -e '/mountpoint/d' \ + -e '/mesg/d' \ + -e 's/= sulogin(\.8)?/=/' src/Makefile</userinput></screen> +--> + <para>First, apply a patch that removes several programs installed by other + packages, clarifies a message, and fixes a compiler warning:</para> + +<screen><userinput remap="pre">patch -Np1 -i ../&sysvinit-consolidated-patch;</userinput></screen> + + <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</userinput></screen> + + </sect2> + + <sect2 id="contents-sysvinit" role="content"> + <title>Contents of Sysvinit</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + + <seglistitem> + <seg>bootlogd, fstab-decode, halt, init, killall5, + poweroff (link to halt), reboot (link to halt), runlevel, + shutdown, and telinit (link to init)</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="bootlogd"> + <term><command>bootlogd</command></term> + <listitem> + <para>Logs boot messages to a log file</para> + <indexterm zone="ch-system-sysvinit bootlogd"> + <primary sortas="b-bootlogd">bootlogd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="fstab-decode"> + <term><command>fstab-decode</command></term> + <listitem> + <para>Run a command with fstab-encoded arguments</para> + <indexterm zone="ch-system-sysvinit fstab-decode"> + <primary sortas="b-fstab-decode">fstab-decode</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="halt-sysv"> + <term><command>halt</command></term> + <listitem> + <para>Normally invokes <command>shutdown</command> with the + <parameter>-h</parameter> option, except when already in run-level 0, + then it tells the kernel to halt the system; it notes in the + file <filename>/var/log/wtmp</filename> that the system is being + brought down</para> + <indexterm zone="ch-system-sysvinit halt-sysv"> + <primary sortas="b-halt">halt</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="init-sysv"> + <term><command>init</command></term> + <listitem> + <para>The first process to be started when the kernel has initialized + the hardware which takes over the boot process and starts all the + proceses specified in its configuration file</para> + <indexterm zone="ch-system-sysvinit init-sysv"> + <primary sortas="b-init">init</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="killall5"> + <term><command>killall5</command></term> + <listitem> + <para>Sends a signal to all processes, except the processes in its own + session so it will not kill its parent shell</para> + <indexterm zone="ch-system-sysvinit killall5"> + <primary sortas="b-killall5">killall5</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="poweroff-sysv"> + <term><command>poweroff</command></term> + <listitem> + <para>Tells the kernel to halt the system and switch off the computer + (see <command>halt</command>)</para> + <indexterm zone="ch-system-sysvinit poweroff-sysv"> + <primary sortas="b-poweroff">poweroff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="reboot-sysv"> + <term><command>reboot</command></term> + <listitem> + <para>Tells the kernel to reboot the system (see + <command>halt</command>)</para> + <indexterm zone="ch-system-sysvinit reboot-sysv"> + <primary sortas="b-reboot">reboot</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="runlevel-sysv"> + <term><command>runlevel</command></term> + <listitem> + <para>Reports the previous and the current run-level, as noted in the + last run-level record in <filename>/var/run/utmp</filename></para> + <indexterm zone="ch-system-sysvinit runlevel-sysv"> + <primary sortas="b-runlevel">runlevel</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="shutdown-sysv"> + <term><command>shutdown</command></term> + <listitem> + <para>Brings the system down in a secure way, signaling all processes + and notifying all logged-in users</para> + <indexterm zone="ch-system-sysvinit shutdown-sysv"> + <primary sortas="b-shutdown">shutdown</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="telinit-sysv"> + <term><command>telinit</command></term> + <listitem> + <para>Tells <command>init</command> which run-level to change to</para> + <indexterm zone="ch-system-sysvinit telinit-sysv"> + <primary sortas="b-telinit">telinit</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/vim.xml b/chapter08/vim.xml new file mode 100644 index 000000000..263122bd7 --- /dev/null +++ b/chapter08/vim.xml @@ -0,0 +1,319 @@ +<?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-vim" role="wrap"> + <?dbhtml filename="vim.html"?> + + <sect1info condition="script"> + <productname>vim</productname> + <productnumber>&vim-version;</productnumber> + <address>&vim-url;</address> + </sect1info> + + <title>Vim-&vim-version;</title> + + <indexterm zone="ch-system-vim"> + <primary sortas="a-Vim">Vim</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Vim package contains a powerful text editor.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&vim-ch6-sbu;</seg> + <seg>&vim-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + <tip> + <title>Alternatives to Vim</title> + + <para>If you prefer another editor—such as Emacs, Joe, or + Nano—please refer to <ulink + url="&blfs-book;postlfs/editors.html"/> for suggested + installation instructions.</para> + </tip> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Vim</title> + + <para>First, change the default location of the <filename>vimrc</filename> + configuration file to <filename class="directory">/etc</filename>:</para> + +<screen><userinput remap="pre">echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h</userinput></screen> + +<!-- <para>Disable a test that fails:</para> + +<screen><userinput remap="pre">sed -i '/call/{s/split/xsplit/;s/303/492/}' src/testdir/test_recover.vim</userinput></screen> +--> + <para>Prepare Vim 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 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 -c "LANG=en_US.UTF-8 make -j1 test" &> vim-test.log</userinput></screen> + +<!--<screen><userinput remap="test">LANG=en_US.UTF-8 make -j1 test &> vim-test.log</userinput></screen>--> + + <para>The test suite outputs a lot of binary data to the screen. This can + cause issues with the settings of the current terminal. The problem can be + avoided by redirecting the output to a log file as shown above. A + successful test will result in the words "ALL DONE" in the log file + at completion.</para> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + <para>Many users are used to using <command>vi</command> instead of + <command>vim</command>. To allow execution of <command>vim</command> + when users habitually enter <command>vi</command>, create a + symlink for both the binary and the man page in the provided + languages:</para> + +<screen><userinput remap="install">ln -sv vim /usr/bin/vi +for L in /usr/share/man/{,*/}man1/vim.1; do + ln -sv vim.1 $(dirname $L)/vi.1 +done</userinput></screen> + + <para>By default, Vim's documentation is installed in <filename + class="directory">/usr/share/vim</filename>. The following symlink + allows the documentation to be accessed via <filename + class="directory">/usr/share/doc/vim-&vim-version;</filename>, making + it consistent with the location of documentation for other packages:</para> + +<screen><userinput remap="install">ln -sv ../&vim-docdir;/doc /usr/share/doc/vim-&vim-version;</userinput></screen> + + <para>If an X Window System is going to be installed on the LFS + system, it may be necessary to recompile Vim after installing X. Vim + comes with a GUI version of the editor that requires X and some + additional libraries to be installed. For more information on this + process, refer to the Vim documentation and the Vim installation page + in the BLFS book at <ulink + url="&blfs-book;postlfs/vim.html"/>.</para> + + </sect2> + + <sect2 id="conf-vim" role="configuration"> + <title>Configuring Vim</title> + + <indexterm zone="conf-vim"> + <primary sortas="e-/etc/vimrc">/etc/vimrc</primary> + </indexterm> + + <para>By default, <command>vim</command> runs in vi-incompatible mode. + This may be new to users who have used other editors in the past. The + <quote>nocompatible</quote> setting is included below to highlight the + fact that a new behavior is being used. It also reminds those who would + change to <quote>compatible</quote> mode that it should be the first + setting in the configuration file. This is necessary because it changes + other settings, and overrides must come after this setting. Create a default + <command>vim</command> configuration file by running the following:</para> + +<screen><userinput>cat > /etc/vimrc << "EOF" +<literal>" Begin /etc/vimrc + +" Ensure defaults are set before customizing settings, not after +source $VIMRUNTIME/defaults.vim +let skip_defaults_vim=1 + +set nocompatible +set backspace=2 +set mouse= +syntax on +if (&term == "xterm") || (&term == "putty") + set background=dark +endif + +" End /etc/vimrc</literal> +EOF</userinput></screen> + + <para>The <parameter>set nocompatible</parameter> setting makes + <command>vim</command> behave in a more useful way (the default) than the + vi-compatible manner. Remove the <quote>no</quote> to keep the old + <command>vi</command> behavior. The <parameter>set backspace=2</parameter> + setting allows backspacing over line breaks, autoindents, and the start of + insert. The <parameter>syntax on</parameter> parameter enables vim's syntax + highlighting. The <parameter>set mouse=</parameter> setting enables + proper pasting of text with the mouse when working in chroot or over a + remote connection. Finally, the <emphasis>if</emphasis> statement with the + <parameter>set background=dark</parameter> setting corrects + <command>vim</command>'s guess about the background color of some terminal + emulators. This gives the highlighting a better color scheme for use on the + black background of these programs.</para> +<!-- + <para>Creating an empty <filename>~/.vimrc</filename> prevents vim from + overriding settings in <filename>/etc/vimrc</filename> by using + <filename>/usr/share/vim/vim80/defaults.vim</filename>.</para> +--> + <para>Documentation for other available options can be obtained by + running the following command:</para> + +<screen role="nodump"><userinput>vim -c ':options'</userinput></screen> + + <note> + <para>By default, Vim only installs spell files for the English language. + To install spell files for your preferred language, download the + <filename>*.spl</filename> and optionally, the <filename>*.sug</filename> + files for your language and character encoding from <ulink + url="ftp://ftp.vim.org/pub/vim/runtime/spell/"/> and save them to + <filename class='directory'>/usr/share/&vim-docdir;/spell/</filename>.</para> + + <para>To use these spell files, some configuration in + <filename>/etc/vimrc</filename> is needed, e.g.:</para> + +<screen><literal>set spelllang=en,ru +set spell</literal></screen> + + <para>For more information, see the appropriate README file located + at the URL above.</para> + </note> + + </sect2> + + <sect2 id="contents-vim" role="content"> + <title>Contents of Vim</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed directory</segtitle> + + <seglistitem> + <seg> ex (link to vim), rview (link to vim), rvim (link to vim), vi + (link to vim), view (link to vim), vim, vimdiff (link to vim), vimtutor, + and xxd</seg> + <seg>/usr/share/vim</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="ex"> + <term><command>ex</command></term> + <listitem> + <para>Starts <command>vim</command> in ex mode</para> + <indexterm zone="ch-system-vim ex"> + <primary sortas="b-ex">ex</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rview"> + <term><command>rview</command></term> + <listitem> + <para>Is a restricted version of <command>view</command>; no shell + commands can be started and <command>view</command> cannot be + suspended</para> + <indexterm zone="ch-system-vim rview"> + <primary sortas="b-rview">rview</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="rvim"> + <term><command>rvim</command></term> + <listitem> + <para>Is a restricted version of <command>vim</command>; no shell + commands can be started and <command>vim</command> cannot be + suspended</para> + <indexterm zone="ch-system-vim rvim"> + <primary sortas="b-rvim">rvim</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="vi"> + <term><command>vi</command></term> + <listitem> + <para>Link to <command>vim</command></para> + <indexterm zone="ch-system-vim vi"> + <primary sortas="b-vi">vi</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="view"> + <term><command>view</command></term> + <listitem> + <para>Starts <command>vim</command> in read-only mode</para> + <indexterm zone="ch-system-vim view"> + <primary sortas="b-view">view</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="vim"> + <term><command>vim</command></term> + <listitem> + <para>Is the editor</para> + <indexterm zone="ch-system-vim vim"> + <primary sortas="b-vim">vim</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="vimdiff"> + <term><command>vimdiff</command></term> + <listitem> + <para>Edits two or three versions of a file with <command>vim</command> + and shows differences</para> + <indexterm zone="ch-system-vim vimdiff"> + <primary sortas="b-vimdiff">vimdiff</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="vimtutor"> + <term><command>vimtutor</command></term> + <listitem> + <para>Teaches the basic keys and commands of + <command>vim</command></para> + <indexterm zone="ch-system-vim vimtutor"> + <primary sortas="b-vimtutor">vimtutor</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="xxd"> + <term><command>xxd</command></term> + <listitem> + <para>Creates a hex dump of the given file; it can + also do the reverse, so it can be used for binary patching</para> + <indexterm zone="ch-system-vim xxd"> + <primary sortas="b-xxd">xxd</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/xml-parser.xml b/chapter08/xml-parser.xml new file mode 100644 index 000000000..54d5bcb35 --- /dev/null +++ b/chapter08/xml-parser.xml @@ -0,0 +1,92 @@ +<?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-xml-parser" role="wrap"> + <?dbhtml filename="xml-parser.html"?> + + <sect1info condition="script"> + <productname>xml-parser</productname> + <productnumber>&xml-parser-version;</productnumber> + <address>&xml-parser-url;</address> + </sect1info> + + <title>XML::Parser-&xml-parser-version;</title> + + <indexterm zone="ch-system-xml-parser"> + <primary sortas="a-Xml-Parser">XML::Parser</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The XML::Parser module is a Perl interface to James Clark's + XML parser, Expat.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&xml-parser-ch6-sbu;</seg> + <seg>&xml-parser-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of XML::Parser</title> + + <para>Prepare XML::Parser for compilation:</para> + +<screen><userinput remap="configure">perl Makefile.PL</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 test</userinput></screen> + + <para>Install the package:</para> + +<screen><userinput remap="install">make install</userinput></screen> + + </sect2> + + <sect2 id="contents-xml-parser" role="content"> + <title>Contents of XML::Parser</title> + + <segmentedlist> + <segtitle>Installed module</segtitle> + + <seglistitem> + <seg>Expat.so</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="Expat"> + <term><filename class="libraryfile">Expat</filename></term> + <listitem> + <para>provides the Perl Expat interface</para> + <indexterm zone="ch-system-xml-parser Expat"> + <primary sortas="c-Expat">Expat</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> 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/chapter08/zlib.xml b/chapter08/zlib.xml new file mode 100644 index 000000000..2dcc49413 --- /dev/null +++ b/chapter08/zlib.xml @@ -0,0 +1,101 @@ +<?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-zlib" role="wrap"> + <?dbhtml filename="zlib.html"?> + + <sect1info condition="script"> + <productname>zlib</productname> + <productnumber>&zlib-version;</productnumber> + <address>&zlib-url;</address> + </sect1info> + + <title>Zlib-&zlib-version;</title> + + <indexterm zone="ch-system-zlib"> + <primary sortas="a-Zlib">Zlib</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>The Zlib package contains compression and decompression routines used by + some programs.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&zlib-ch6-sbu;</seg> + <seg>&zlib-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Zlib</title> + + <para>Prepare Zlib 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>The shared library needs to be moved to + <filename class="directory">/lib</filename>, and as a result the + <filename class="extension">.so</filename> file in + <filename class="directory">/usr/lib</filename> will need to be recreated:</para> + +<screen><userinput remap="install">mv -v /usr/lib/libz.so.* /lib +ln -sfv ../../lib/$(readlink /usr/lib/libz.so) /usr/lib/libz.so</userinput></screen> + + </sect2> + + <sect2 id="contents-zlib" role="content"> + <title>Contents of Zlib</title> + + <segmentedlist> + <segtitle>Installed libraries</segtitle> + + <seglistitem> + <seg>libz.{a,so}</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="libz"> + <term><filename class="libraryfile">libz</filename></term> + <listitem> + <para>Contains compression and decompression functions used by + some programs</para> + <indexterm zone="ch-system-zlib libz"> + <primary sortas="c-libz">libz</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> diff --git a/chapter08/zstd.xml b/chapter08/zstd.xml new file mode 100644 index 000000000..71e7794b6 --- /dev/null +++ b/chapter08/zstd.xml @@ -0,0 +1,136 @@ +<?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-zstd" role="wrap"> + <?dbhtml filename="zstd.html"?> + + <sect1info condition="script"> + <productname>zstd</productname> + <productnumber>&zstd-version;</productnumber> + <address>&zstd-url;</address> + </sect1info> + + <title>Zstd-&zstd-version;</title> + + <indexterm zone="ch-system-zstd"> + <primary sortas="a-zstd">zstd</primary> + </indexterm> + + <sect2 role="package"> + <title/> + + <para>Zstandard is a real-time compression algorithm, providing high + compression ratios. It offers a very wide range of compression / speed + trade-offs, while being backed by a very fast decoder.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&zstd-ch6-sbu;</seg> + <seg>&zstd-ch6-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of Zstd</title> + + <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 prefix=/usr install</userinput></screen> + + <para>Remove the static library and move the shared library to + <filename class="directory">/lib</filename>. Also, the + <filename class="extension">.so</filename> file in + <filename class="directory">/usr/lib</filename> will need to be recreated:</para> + +<screen><userinput remap="install">rm -v /usr/lib/libzstd.a +mv -v /usr/lib/libzstd.so.* /lib +ln -sfv ../../lib/$(readlink /usr/lib/libzstd.so) /usr/lib/libzstd.so</userinput></screen> + + </sect2> + + <sect2 id="contents-zstd" role="content"> + <title>Contents of Zstd</title> + + <segmentedlist> + <segtitle>Installed programs</segtitle> + <segtitle>Installed library</segtitle> + + <seglistitem> + <seg>zstd, + zstdcat (link to zstd), + zstdgrep, + zstdless, + zstdmt (link to zstd), and + unzstd (link to zstd) + </seg> + + <seg>libzstd.so</seg> + </seglistitem> + </segmentedlist> + + <variablelist> + <bridgehead renderas="sect3">Short Descriptions</bridgehead> + <?dbfo list-presentation="list"?> + <?dbhtml list-presentation="table"?> + + <varlistentry id="zstd"> + <term><command>zstd</command></term> + <listitem> + <para>Compresses or decompresses files using the ZSTD format</para> + <indexterm zone="ch-system-zstd zstd"> + <primary sortas="b-zstd">zstd</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="zstdgrep"> + <term><command>zstdgrep</command></term> + <listitem> + <para>Runs <command>grep</command> on ZSTD compressed files</para> + <indexterm zone="ch-system-zstd zstdgrep"> + <primary sortas="b-zstdgrep">zstdgrep</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="zstdless"> + <term><command>zstdless</command></term> + <listitem> + <para>Runs <command>less</command> on ZSTD compressed files</para> + <indexterm zone="ch-system-zstd zstdless"> + <primary sortas="b-zstdless">zstdless</primary> + </indexterm> + </listitem> + </varlistentry> + + <varlistentry id="libzstd"> + <term><filename class="libraryfile">libzstd</filename></term> + <listitem> + <para>The library implementing lossless data + compression, using the ZSTD algorithm</para> + <indexterm zone="ch-system-zstd libzstd"> + <primary sortas="c-libzstd">libzstd</primary> + </indexterm> + </listitem> + </varlistentry> + + </variablelist> + + </sect2> + +</sect1> |