Chapter07 indentation.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@7230 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
This commit is contained in:
Manuel Canales Esparcia 2005-12-18 18:31:04 +00:00
parent b78c7479d4
commit d781ffbe09
13 changed files with 981 additions and 839 deletions

View File

@ -1,239 +1,302 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-bootscripts" role="wrap">
<title>LFS-Bootscripts-&lfs-bootscripts-version;</title>
<?dbhtml filename="bootscripts.html"?>
<?dbhtml filename="bootscripts.html"?>
<indexterm zone="ch-scripts-bootscripts"><primary sortas="a-Bootscripts">Bootscripts</primary></indexterm>
<title>LFS-Bootscripts-&lfs-bootscripts-version;</title>
<sect2 role="package"><title/>
<para>The LFS-Bootscripts package contains a set of scripts to start/stop the
LFS system at bootup/shutdown.</para>
<indexterm zone="ch-scripts-bootscripts">
<primary sortas="a-Bootscripts">Bootscripts</primary>
</indexterm>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem><seg>0.1 SBU</seg><seg>516 KB</seg></seglistitem>
</segmentedlist>
<sect2 role="package">
<title/>
<segmentedlist>
<segtitle>&dependencies;</segtitle>
<seglistitem><seg>Bash and Coreutils</seg></seglistitem>
</segmentedlist>
</sect2>
<para>The LFS-Bootscripts package contains a set of scripts to start/stop the
LFS system at bootup/shutdown.</para>
<sect2 role="installation">
<title>Installation of LFS-Bootscripts</title>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<para>Install the package:</para>
<seglistitem>
<seg>0.1 SBU</seg>
<seg>516 KB</seg>
</seglistitem>
</segmentedlist>
<segmentedlist>
<segtitle>&dependencies;</segtitle>
<seglistitem>
<seg>Bash and Coreutils</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of LFS-Bootscripts</title>
<para>Install the package:</para>
<screen><userinput>make install</userinput></screen>
</sect2>
</sect2>
<sect2 id="contents-bootscripts" role="content"><title>Contents of LFS-Bootscripts</title>
<sect2 id="contents-bootscripts" role="content">
<title>Contents of LFS-Bootscripts</title>
<segmentedlist>
<segtitle>Installed scripts</segtitle>
<seglistitem><seg>checkfs, cleanfs, console, functions, halt, hotplug, ifdown, ifup,
localnet, mountfs, mountkernfs, network, rc, reboot, sendsignals, setclock, static,
swap, sysklogd, template, and udev</seg></seglistitem>
</segmentedlist>
<segmentedlist>
<segtitle>Installed scripts</segtitle>
<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<seglistitem>
<seg>checkfs, cleanfs, console, functions, halt, hotplug, ifdown, ifup,
localnet, mountfs, mountkernfs, network, rc, reboot, sendsignals,
setclock, static, swap, sysklogd, template, and udev</seg>
</seglistitem>
</segmentedlist>
<varlistentry id="checkfs-bootscripts">
<term><command>checkfs</command></term>
<listitem>
<para>Checks the integrity of the file systems before they are mounted (with the
exception of journal and network based file systems)</para>
<indexterm zone="ch-scripts-bootscripts checkfs-bootscripts"><primary sortas="d-checkfs">checkfs</primary></indexterm>
</listitem>
</varlistentry>
<variablelist>
<bridgehead renderas="sect3">Short Descriptions</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="cleanfs-bootscripts">
<term><command>cleanfs</command></term>
<listitem>
<para>Removes files that should not be
preserved between reboots, such as those in <filename class="directory">/var/run/</filename> and
<filename class="directory">/var/lock/</filename>; it re-creates <filename>/var/run/utmp</filename>
and removes the possibly present <filename>/etc/nologin</filename>,
<filename>/fastboot</filename>, and <filename>/forcefsck</filename> files</para>
<indexterm zone="ch-scripts-bootscripts cleanfs-bootscripts"><primary sortas="d-cleanfs">cleanfs</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="checkfs-bootscripts">
<term><command>checkfs</command></term>
<listitem>
<para>Checks the integrity of the file systems before they are mounted
(with the exception of journal and network based file systems)</para>
<indexterm zone="ch-scripts-bootscripts checkfs-bootscripts">
<primary sortas="d-checkfs">checkfs</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="console-bootscripts">
<term><command>console</command></term>
<listitem>
<para>Loads the correct keymap table for the desired keyboard layout; it also
sets the screen font</para>
<indexterm zone="ch-scripts-bootscripts console-bootscripts"><primary sortas="d-console">console</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="cleanfs-bootscripts">
<term><command>cleanfs</command></term>
<listitem>
<para>Removes files that should not be preserved between reboots, such
as those in <filename class="directory">/var/run/</filename> and
<filename class="directory">/var/lock/</filename>; it re-creates
<filename>/var/run/utmp</filename> and removes the possibly present
<filename>/etc/nologin</filename>, <filename>/fastboot</filename>, and
<filename>/forcefsck</filename> files</para>
<indexterm zone="ch-scripts-bootscripts cleanfs-bootscripts">
<primary sortas="d-cleanfs">cleanfs</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="functions-bootscripts">
<term><command>functions</command></term>
<listitem>
<para>Contains common functions, such as error and status checking, that are
used by several bootscripts</para>
<indexterm zone="ch-scripts-bootscripts functions-bootscripts"><primary sortas="d-functions">functions</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="console-bootscripts">
<term><command>console</command></term>
<listitem>
<para>Loads the correct keymap table for the desired keyboard layout;
it also sets the screen font</para>
<indexterm zone="ch-scripts-bootscripts console-bootscripts">
<primary sortas="d-console">console</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="halt-bootscripts">
<term><command>halt</command></term>
<listitem>
<para>Halts the system</para>
<indexterm zone="ch-scripts-bootscripts halt-bootscripts"><primary sortas="d-halt">halt</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="functions-bootscripts">
<term><command>functions</command></term>
<listitem>
<para>Contains common functions, such as error and status checking,
that are used by several bootscripts</para>
<indexterm zone="ch-scripts-bootscripts functions-bootscripts">
<primary sortas="d-functions">functions</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="hotplug-bootscripts">
<term><command>hotplug</command></term>
<listitem>
<para>Loads modules for system devices</para>
<indexterm zone="ch-scripts-bootscripts hotplug-bootscripts"><primary sortas="d-hotplug">hotplug</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="halt-bootscripts">
<term><command>halt</command></term>
<listitem>
<para>Halts the system</para>
<indexterm zone="ch-scripts-bootscripts halt-bootscripts">
<primary sortas="d-halt">halt</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ifdown-bootscripts">
<term><command>ifdown</command></term>
<listitem>
<para>Assists the network script with stopping network devices</para>
<indexterm zone="ch-scripts-bootscripts ifdown-bootscripts"><primary sortas="d-ifdown">ifdown</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="hotplug-bootscripts">
<term><command>hotplug</command></term>
<listitem>
<para>Loads modules for system devices</para>
<indexterm zone="ch-scripts-bootscripts hotplug-bootscripts">
<primary sortas="d-hotplug">hotplug</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="ifup-bootscripts">
<term><command>ifup</command></term>
<listitem>
<para>Assists the network script with starting network devices</para>
<indexterm zone="ch-scripts-bootscripts ifup-bootscripts"><primary sortas="d-ifup">ifup</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="ifdown-bootscripts">
<term><command>ifdown</command></term>
<listitem>
<para>Assists the network script with stopping network devices</para>
<indexterm zone="ch-scripts-bootscripts ifdown-bootscripts">
<primary sortas="d-ifdown">ifdown</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="localnet-bootscripts">
<term><command>localnet</command></term>
<listitem>
<para>Sets up the system's hostname and local loopback device</para>
<indexterm zone="ch-scripts-bootscripts localnet-bootscripts"><primary sortas="d-localnet">localnet</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="ifup-bootscripts">
<term><command>ifup</command></term>
<listitem>
<para>Assists the network script with starting network devices</para>
<indexterm zone="ch-scripts-bootscripts ifup-bootscripts">
<primary sortas="d-ifup">ifup</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="mountfs-bootscripts">
<term><command>mountfs</command></term>
<listitem>
<para>Mounts all file systems, except ones that are marked
<emphasis>noauto</emphasis> or are network based</para>
<indexterm zone="ch-scripts-bootscripts mountfs-bootscripts"><primary sortas="d-mountfs">mountfs</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="localnet-bootscripts">
<term><command>localnet</command></term>
<listitem>
<para>Sets up the system's hostname and local loopback device</para>
<indexterm zone="ch-scripts-bootscripts localnet-bootscripts">
<primary sortas="d-localnet">localnet</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="mountkernfs-bootscripts">
<term><command>mountkernfs</command></term>
<listitem>
<para>Mounts virtual kernel file systems, such as <systemitem
class="filesystem">proc</systemitem></para>
<indexterm zone="ch-scripts-bootscripts mountkernfs-bootscripts"><primary sortas="d-mountkernfs">mountkernfs</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="mountfs-bootscripts">
<term><command>mountfs</command></term>
<listitem>
<para>Mounts all file systems, except ones that are marked
<emphasis>noauto</emphasis> or are network based</para>
<indexterm zone="ch-scripts-bootscripts mountfs-bootscripts">
<primary sortas="d-mountfs">mountfs</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="network-bootscripts">
<term><command>network</command></term>
<listitem>
<para>Sets up network interfaces, such as network cards, and sets up
the default gateway (where applicable)</para>
<indexterm zone="ch-scripts-bootscripts network-bootscripts"><primary sortas="d-network">network</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="mountkernfs-bootscripts">
<term><command>mountkernfs</command></term>
<listitem>
<para>Mounts virtual kernel file systems, such as <systemitem
class="filesystem">proc</systemitem></para>
<indexterm zone="ch-scripts-bootscripts mountkernfs-bootscripts">
<primary sortas="d-mountkernfs">mountkernfs</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="rc-bootscripts">
<term><command>rc</command></term>
<listitem>
<para>The master run-level control script; it is responsible for running all the
other bootscripts one-by-one, in a sequence determined by the name of the
symbolic links being processed</para>
<indexterm zone="ch-scripts-bootscripts rc-bootscripts"><primary sortas="d-rc">rc</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="network-bootscripts">
<term><command>network</command></term>
<listitem>
<para>Sets up network interfaces, such as network cards, and sets up
the default gateway (where applicable)</para>
<indexterm zone="ch-scripts-bootscripts network-bootscripts">
<primary sortas="d-network">network</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="reboot-bootscripts">
<term><command>reboot</command></term>
<listitem>
<para>Reboots the system</para>
<indexterm zone="ch-scripts-bootscripts reboot-bootscripts"><primary sortas="d-reboot">reboot</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="rc-bootscripts">
<term><command>rc</command></term>
<listitem>
<para>The master run-level control script; it is responsible for
running all the other bootscripts one-by-one, in a sequence determined
by the name of the symbolic links being processed</para>
<indexterm zone="ch-scripts-bootscripts rc-bootscripts">
<primary sortas="d-rc">rc</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="sendsignals-bootscripts">
<term><command>sendsignals</command></term>
<listitem>
<para>Makes sure every process is terminated before the system reboots
or halts</para>
<indexterm zone="ch-scripts-bootscripts sendsignals-bootscripts"><primary sortas="d-sendsignals">sendsignals</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="reboot-bootscripts">
<term><command>reboot</command></term>
<listitem>
<para>Reboots the system</para>
<indexterm zone="ch-scripts-bootscripts reboot-bootscripts">
<primary sortas="d-reboot">reboot</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="setclock-bootscripts">
<term><command>setclock</command></term>
<listitem>
<para>Resets the kernel clock to local time in case the hardware clock
is not set to UTC time</para>
<indexterm zone="ch-scripts-bootscripts setclock-bootscripts"><primary sortas="d-setclock">setclock</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="sendsignals-bootscripts">
<term><command>sendsignals</command></term>
<listitem>
<para>Makes sure every process is terminated before the system reboots
or halts</para>
<indexterm zone="ch-scripts-bootscripts sendsignals-bootscripts">
<primary sortas="d-sendsignals">sendsignals</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="static-bootscripts">
<term><command>static</command></term>
<listitem>
<para>Provides the functionality needed to assign a static Internet
Protocol (IP) address to a network interface</para>
<indexterm zone="ch-scripts-bootscripts static-bootscripts"><primary sortas="d-static">static</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="setclock-bootscripts">
<term><command>setclock</command></term>
<listitem>
<para>Resets the kernel clock to local time in case the hardware clock
is not set to UTC time</para>
<indexterm zone="ch-scripts-bootscripts setclock-bootscripts">
<primary sortas="d-setclock">setclock</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="swap-bootscripts">
<term><command>swap</command></term>
<listitem>
<para>Enables and disables swap files and partitions</para>
<indexterm zone="ch-scripts-bootscripts swap-bootscripts"><primary sortas="d-swap">swap</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="static-bootscripts">
<term><command>static</command></term>
<listitem>
<para>Provides the functionality needed to assign a static Internet
Protocol (IP) address to a network interface</para>
<indexterm zone="ch-scripts-bootscripts static-bootscripts">
<primary sortas="d-static">static</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="sysklogd-bootscripts">
<term><command>sysklogd</command></term>
<listitem>
<para>Starts and stops the system and kernel log daemons</para>
<indexterm zone="ch-scripts-bootscripts sysklogd-bootscripts"><primary sortas="d-sysklogd">sysklogd</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="swap-bootscripts">
<term><command>swap</command></term>
<listitem>
<para>Enables and disables swap files and partitions</para>
<indexterm zone="ch-scripts-bootscripts swap-bootscripts">
<primary sortas="d-swap">swap</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="template-bootscripts">
<term><command>template</command></term>
<listitem>
<para>A template to create custom bootscripts for other
daemons</para>
<indexterm zone="ch-scripts-bootscripts template-bootscripts"><primary sortas="d-template">template</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="sysklogd-bootscripts">
<term><command>sysklogd</command></term>
<listitem>
<para>Starts and stops the system and kernel log daemons</para>
<indexterm zone="ch-scripts-bootscripts sysklogd-bootscripts">
<primary sortas="d-sysklogd">sysklogd</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="udev-bootscripts">
<term><command>udev</command></term>
<listitem>
<para>Prepares the <filename class="directory">/dev</filename> directory and
starts Udev</para>
<indexterm zone="ch-scripts-bootscripts udev-bootscripts"><primary sortas="d-udev">udev</primary></indexterm>
</listitem>
</varlistentry>
</variablelist>
<varlistentry id="template-bootscripts">
<term><command>template</command></term>
<listitem>
<para>A template to create custom bootscripts for other
daemons</para>
<indexterm zone="ch-scripts-bootscripts template-bootscripts">
<primary sortas="d-template">template</primary>
</indexterm>
</listitem>
</varlistentry>
</sect2>
<varlistentry id="udev-bootscripts">
<term><command>udev</command></term>
<listitem>
<para>Prepares the <filename class="directory">/dev</filename>
directory and starts Udev</para>
<indexterm zone="ch-scripts-bootscripts udev-bootscripts">
<primary sortas="d-udev">udev</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>

View File

@ -1,24 +1,27 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<chapter id="chapter-bootscripts" xreflabel="Chapter 7">
<?dbhtml dir="chapter07"?>
<title>Setting Up System Bootscripts</title>
<?dbhtml filename="chapter07.html"?>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="introduction.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="bootscripts.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="usage.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="udev.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="setclock.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="console.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="sysklogd.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="inputrc.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="profile.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="hostname.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="hosts.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="network.xml"/>
<chapter id="chapter-bootscripts" xreflabel="Chapter 7">
<?dbhtml dir="chapter07"?>
<?dbhtml filename="chapter07.html"?>
<title>Setting Up System Bootscripts</title>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="introduction.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="bootscripts.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="usage.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="udev.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="setclock.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="console.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="sysklogd.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="inputrc.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="profile.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="hostname.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="hosts.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="network.xml"/>
</chapter>

View File

@ -1,70 +1,76 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-console">
<title>Configuring the Linux Console</title>
<?dbhtml filename="console.html"?>
<?dbhtml filename="console.html"?>
<indexterm zone="ch-scripts-console">
<primary sortas="d-console">console</primary>
<secondary>configuring</secondary></indexterm>
<title>Configuring the Linux Console</title>
<para>This section discusses how to configure the <command>console</command>
bootscript that sets up the keyboard map and the console font. If non-ASCII
characters (e.g., the British pound sign and Euro character) will not be used
and the keyboard is a U.S. one, skip this section. Without the configuration
file, the <command>console</command> bootscript will do nothing.</para>
<indexterm zone="ch-scripts-console">
<primary sortas="d-console">console</primary>
<secondary>configuring</secondary>
</indexterm>
<para>The <command>console</command> script reads the
<filename>/etc/sysconfig/console</filename> file for configuration information.
Decide which keymap and screen font will be used. Various language-specific
HOWTO's can also help with this (see <ulink
url="http://www.tldp.org/HOWTO/HOWTO-INDEX/other-lang.html"/>. A pre-made
<filename>/etc/sysconfig/console</filename> file with known settings for several
countries was installed with the LFS-Bootscripts package, so the relevant
section can be uncommented if the country is supported. If still in doubt, look
in the <filename class="directory">/usr/share/kbd</filename> directory for valid
keymaps and screen fonts. Read <filename>loadkeys(1)</filename> and
<filename>setfont(8)</filename> to determine the correct arguments for
these programs. Once decided, create the configuration file with the following
command:</para>
<para>This section discusses how to configure the <command>console</command>
bootscript that sets up the keyboard map and the console font. If non-ASCII
characters (e.g., the British pound sign and Euro character) will not be used
and the keyboard is a U.S. one, skip this section. Without the configuration
file, the <command>console</command> bootscript will do nothing.</para>
<para>The <command>console</command> script reads the
<filename>/etc/sysconfig/console</filename> file for configuration information.
Decide which keymap and screen font will be used. Various language-specific
HOWTO's can also help with this (see <ulink
url="http://www.tldp.org/HOWTO/HOWTO-INDEX/other-lang.html"/>. A pre-made
<filename>/etc/sysconfig/console</filename> file with known settings for several
countries was installed with the LFS-Bootscripts package, so the relevant
section can be uncommented if the country is supported. If still in doubt, look
in the <filename class="directory">/usr/share/kbd</filename> directory for valid
keymaps and screen fonts. Read <filename>loadkeys(1)</filename> and
<filename>setfont(8)</filename> to determine the correct arguments for
these programs. Once decided, create the configuration file with the following
command:</para>
<screen><userinput>cat &gt;/etc/sysconfig/console &lt;&lt;"EOF"
<literal>KEYMAP="<replaceable>[arguments for loadkeys]</replaceable>"
FONT="<replaceable>[arguments for setfont]</replaceable>"</literal>
EOF</userinput></screen>
<para>For example, for Spanish users who also want to use the Euro
character (accessible by pressing AltGr+E), the following settings are
correct:</para>
<para>For example, for Spanish users who also want to use the Euro
character (accessible by pressing AltGr+E), the following settings are
correct:</para>
<screen role="nodump"><userinput>cat &gt;/etc/sysconfig/console &lt;&lt;"EOF"
<literal>KEYMAP="es euro2"
FONT="lat9-16 -u iso01"</literal>
EOF</userinput></screen>
<note><para>The <envar>FONT</envar> line above is correct only for the ISO 8859-15
character set. If using ISO 8859-1 and, therefore, a pound sign
instead of Euro, the correct <envar>FONT</envar> line would be:</para>
<note>
<para>The <envar>FONT</envar> line above is correct only for the ISO 8859-15
character set. If using ISO 8859-1 and, therefore, a pound sign
instead of Euro, the correct <envar>FONT</envar> line would be:</para>
<screen role="nodump"><userinput>FONT="lat1-16"</userinput></screen></note>
<screen role="nodump"><userinput>FONT="lat1-16"</userinput></screen>
</note>
<para>If the <envar>KEYMAP</envar> or <envar>FONT</envar> variable is not set, the
<command>console</command> initscript will not run the corresponding
program.</para>
<para>If the <envar>KEYMAP</envar> or <envar>FONT</envar> variable is not set,
the <command>console</command> initscript will not run the corresponding
program.</para>
<para>In some keymaps, the Backspace and Delete keys send characters different
from ones in the default keymap built into the kernel. This confuses some
applications. For example, Emacs displays its help (instead of erasing the
character before the cursor) when Backspace is pressed. To check if the keymap
in use is affected (this works only for i386 keymaps):</para>
<para>In some keymaps, the Backspace and Delete keys send characters different
from ones in the default keymap built into the kernel. This confuses some
applications. For example, Emacs displays its help (instead of erasing the
character before the cursor) when Backspace is pressed. To check if the keymap
in use is affected (this works only for i386 keymaps):</para>
<screen role="nodump"><userinput>zgrep '\W14\W' <replaceable>[/path/to/your/keymap]</replaceable></userinput></screen>
<para>If the keycode 14 is Backspace instead of Delete, create the
following keymap snippet to fix this issue:</para>
<para>If the keycode 14 is Backspace instead of Delete, create the
following keymap snippet to fix this issue:</para>
<screen role="nodump"><userinput>mkdir -pv /etc/kbd &amp;&amp; cat &gt; /etc/kbd/bs-sends-del &lt;&lt;"EOF"
<literal> keycode 14 = Delete Delete Delete Delete
@ -76,32 +82,31 @@ following keymap snippet to fix this issue:</para>
altgr control alt keycode 111 = Boot</literal>
EOF</userinput></screen>
<para>Tell the <command>console</command> script to load this
snippet after the main keymap:</para>
<para>Tell the <command>console</command> script to load this
snippet after the main keymap:</para>
<screen role="nodump"><userinput>cat &gt;&gt;/etc/sysconfig/console &lt;&lt;"EOF"
<literal>KEYMAP_CORRECTIONS="/etc/kbd/bs-sends-del"</literal>
EOF</userinput></screen>
<para>To compile the keymap directly into the kernel instead of
setting it every time from the <command>console</command> bootscript,
follow the instructions given in <xref linkend="ch-bootable-kernel" role="."/>
Doing this ensures that the keyboard will always work as expected,
even when booting into maintenance mode (by passing
<parameter>init=/bin/sh</parameter> to the kernel), because the
<command>console</command> bootscript will not be run in that
situation. Additionally, the kernel will not set the screen font
automatically. This should not pose many problems because ASCII characters
will be handled correctly, and it is unlikely that a user would need
to rely on non-ASCII characters while in maintenance mode.</para>
<para>To compile the keymap directly into the kernel instead of
setting it every time from the <command>console</command> bootscript,
follow the instructions given in <xref linkend="ch-bootable-kernel" role="."/>
Doing this ensures that the keyboard will always work as expected,
even when booting into maintenance mode (by passing
<parameter>init=/bin/sh</parameter> to the kernel), because the
<command>console</command> bootscript will not be run in that
situation. Additionally, the kernel will not set the screen font
automatically. This should not pose many problems because ASCII characters
will be handled correctly, and it is unlikely that a user would need
to rely on non-ASCII characters while in maintenance mode.</para>
<para>Since the kernel will set up the keymap, it is possible to omit
the <envar>KEYMAP</envar> variable from the
<filename>/etc/sysconfig/console</filename> configuration file. It can
also be left in place, if desired, without consequence. Keeping it
could be beneficial if running several different kernels where it is
difficult to ensure that the keymap is compiled into every one of
them.</para>
<para>Since the kernel will set up the keymap, it is possible to omit
the <envar>KEYMAP</envar> variable from the
<filename>/etc/sysconfig/console</filename> configuration file. It can
also be left in place, if desired, without consequence. Keeping it
could be beneficial if running several different kernels where it is
difficult to ensure that the keymap is compiled into every one of
them.</para>
</sect1>

View File

@ -1,29 +1,32 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-hostname">
<title>Configuring the localnet Script</title>
<?dbhtml filename="hostname.html"?>
<?dbhtml filename="hostname.html"?>
<indexterm zone="ch-scripts-hostname">
<primary sortas="d-localnet">localnet</primary>
<secondary>configuring</secondary></indexterm>
<title>Configuring the localnet Script</title>
<para>Part of the job of the <command>localnet</command> script is setting the
system's hostname. This needs to be configured in the
<filename>/etc/sysconfig/network</filename> file.</para>
<indexterm zone="ch-scripts-hostname">
<primary sortas="d-localnet">localnet</primary>
<secondary>configuring</secondary>
</indexterm>
<para>Create the <filename>/etc/sysconfig/network</filename> file and enter a
hostname by running:</para>
<para>Part of the job of the <command>localnet</command> script is setting the
system's hostname. This needs to be configured in the
<filename>/etc/sysconfig/network</filename> file.</para>
<para>Create the <filename>/etc/sysconfig/network</filename> file and enter a
hostname by running:</para>
<screen><userinput>echo "HOSTNAME=<replaceable>[lfs]</replaceable>" &gt; /etc/sysconfig/network</userinput></screen>
<para><replaceable>[lfs]</replaceable> needs to be replaced with the name given
to the computer. Do not enter the Fully Qualified Domain Name (FQDN) here. That
information will be put in the <filename>/etc/hosts</filename> file in the next
section.</para>
<para><replaceable>[lfs]</replaceable> needs to be replaced with the name given
to the computer. Do not enter the Fully Qualified Domain Name (FQDN) here. That
information will be put in the <filename>/etc/hosts</filename> file in the next
section.</para>
</sect1>

View File

@ -1,48 +1,53 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-hosts">
<title>Creating the /etc/hosts File</title>
<?dbhtml filename="hosts.html"?>
<?dbhtml filename="hosts.html"?>
<indexterm zone="ch-scripts-hosts"><primary sortas="e-/etc/hosts">/etc/hosts</primary></indexterm>
<title>Creating the /etc/hosts File</title>
<indexterm zone="ch-scripts-hosts">
<primary sortas="d-localnet">localnet</primary>
<secondary>/etc/hosts</secondary></indexterm>
<indexterm zone="ch-scripts-hosts">
<primary sortas="e-/etc/hosts">/etc/hosts</primary>
</indexterm>
<indexterm zone="ch-scripts-hosts">
<primary sortas="d-network">network</primary>
<secondary>/etc/hosts</secondary></indexterm>
<indexterm zone="ch-scripts-hosts">
<primary sortas="d-localnet">localnet</primary>
<secondary>/etc/hosts</secondary></indexterm>
<para>If a network card is to be configured, decide on the IP address,
FQDN, and possible aliases for use in the
<filename>/etc/hosts</filename> file. The syntax is:</para>
<indexterm zone="ch-scripts-hosts">
<primary sortas="d-network">network</primary>
<secondary>/etc/hosts</secondary></indexterm>
<screen>&lt;IP address&gt; myhost.example.org aliases</screen>
<para>If a network card is to be configured, decide on the IP address,
FQDN, and possible aliases for use in the
<filename>/etc/hosts</filename> file. The syntax is:</para>
<para>Unless the computer is to be visible to the Internet (i.e.,
there is a registered domain and a valid block of assigned IP
addresses&mdash;most users do not have this), make sure that the IP
address is in the private network IP address range. Valid ranges
are:</para>
<screen><literal>&lt;IP address&gt; myhost.example.org aliases</literal></screen>
<screen> Class Networks
<para>Unless the computer is to be visible to the Internet (i.e.,
there is a registered domain and a valid block of assigned IP
addresses&mdash;most users do not have this), make sure that the IP
address is in the private network IP address range. Valid ranges
are:</para>
<screen><literal> Class Networks
A 10.0.0.0
B 172.16.0.0 through 172.31.0.255
C 192.168.0.0 through 192.168.255.255</screen>
C 192.168.0.0 through 192.168.255.255</literal></screen>
<para>A valid IP address could be 192.168.1.1. A valid FQDN for this
IP could be www.linuxfromscratch.org (not recommended because this is
a valid registered domain address and could cause domain name server
issues).</para>
<para>A valid IP address could be 192.168.1.1. A valid FQDN for this
IP could be www.linuxfromscratch.org (not recommended because this is
a valid registered domain address and could cause domain name server
issues).</para>
<para>Even if not using a network card, an FQDN is still required.
This is necessary for certain programs to operate correctly.</para>
<para>Even if not using a network card, an FQDN is still required.
This is necessary for certain programs to operate correctly.</para>
<para>Create the <filename>/etc/hosts</filename> file by running:</para>
<para>Create the <filename>/etc/hosts</filename> file by running:</para>
<screen><userinput>cat &gt; /etc/hosts &lt;&lt; "EOF"
<literal># Begin /etc/hosts (network card version)
@ -53,14 +58,14 @@ This is necessary for certain programs to operate correctly.</para>
# End /etc/hosts (network card version)</literal>
EOF</userinput></screen>
<para>The <replaceable>[192.168.1.1]</replaceable> and
<replaceable>[&lt;HOSTNAME&gt;.example.org]</replaceable>
values need to be changed for specific users or requirements (if
assigned an IP address by a network/system administrator and the
machine will be connected to an existing network).</para>
<para>The <replaceable>[192.168.1.1]</replaceable> and
<replaceable>[&lt;HOSTNAME&gt;.example.org]</replaceable>
values need to be changed for specific users or requirements (if
assigned an IP address by a network/system administrator and the
machine will be connected to an existing network).</para>
<para>If a network card is not going to be configured, create the
<filename>/etc/hosts</filename> file by running:</para>
<para>If a network card is not going to be configured, create the
<filename>/etc/hosts</filename> file by running:</para>
<screen role="nodump"><userinput>cat &gt; /etc/hosts &lt;&lt; "EOF"
<literal># Begin /etc/hosts (no network card version)
@ -71,4 +76,3 @@ machine will be connected to an existing network).</para>
EOF</userinput></screen>
</sect1>

View File

@ -1,31 +1,37 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-inputrc">
<title>Creating the /etc/inputrc File</title>
<?dbhtml filename="inputrc.html"?>
<?dbhtml filename="inputrc.html"?>
<indexterm zone="ch-scripts-inputrc"><primary sortas="e-/etc/inputrc">/etc/inputrc</primary></indexterm>
<title>Creating the /etc/inputrc File</title>
<para>The <filename>inputrc</filename> file handles keyboard mapping for
specific situations. This file is the startup file used by Readline &mdash; the
input-related library &mdash; used by Bash and most other shells.</para>
<indexterm zone="ch-scripts-inputrc">
<primary sortas="e-/etc/inputrc">/etc/inputrc</primary>
</indexterm>
<para>Most people do not need user-specific keyboard mappings so the command
below creates a global <filename>/etc/inputrc</filename> used by everyone who
logs in. If you later decide you need to override the defaults on a per-user
basis, you can create a <filename>.inputrc</filename> file in the user's home
directory with the modified mappings.</para>
<para>The <filename>inputrc</filename> file handles keyboard mapping for
specific situations. This file is the startup file used by Readline &mdash; the
input-related library &mdash; used by Bash and most other shells.</para>
<para>For more information on how to edit the <filename>inputrc</filename> file,
see <command>info bash</command> under the <emphasis>Readline Init File</emphasis>
section. <command>info readline</command> is also a good source of information.</para>
<para>Most people do not need user-specific keyboard mappings so the command
below creates a global <filename>/etc/inputrc</filename> used by everyone who
logs in. If you later decide you need to override the defaults on a per-user
basis, you can create a <filename>.inputrc</filename> file in the user's home
directory with the modified mappings.</para>
<para>Below is a generic global <filename>inputrc</filename> along with comments
to explain what the various options do. Note that comments cannot be on the same
line as commands. Create the file using the following command:</para>
<para>For more information on how to edit the <filename>inputrc</filename>
file, see <command>info bash</command> under the <emphasis>Readline Init
File</emphasis> section. <command>info readline</command> is also a good
source of information.</para>
<para>Below is a generic global <filename>inputrc</filename> along with comments
to explain what the various options do. Note that comments cannot be on the same
line as commands. Create the file using the following command:</para>
<screen><userinput>cat &gt; /etc/inputrc &lt;&lt; "EOF"
<literal># Begin /etc/inputrc
@ -74,4 +80,3 @@ set bell-style none
EOF</userinput></screen>
</sect1>

View File

@ -1,27 +1,28 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-introduction">
<title>Introduction</title>
<?dbhtml filename="introduction.html"?>
<?dbhtml filename="introduction.html"?>
<para>This chapter details how to install and configure the LFS-Bootscripts
package. Most of these scripts will work without modification, but a few require
additional configuration files because they deal with hardware-dependent
information.</para>
<title>Introduction</title>
<para>System-V style init scripts are employed in this book because they are
widely used. For additional options, a hint detailing the BSD style
init setup is available at
<ulink
url="http://www.linuxfromscratch.org/hints/downloads/files/bsd-init.txt"/>.
Searching the LFS mailing lists for <quote>depinit</quote> will also offer
additional choices.</para>
<para>This chapter details how to install and configure the LFS-Bootscripts
package. Most of these scripts will work without modification, but a few require
additional configuration files because they deal with hardware-dependent
information.</para>
<para>If using an alternative style of init scripts, skip this chapter
and move on to <xref linkend="chapter-bootable"/>.</para>
<para>System-V style init scripts are employed in this book because they are
widely used. For additional options, a hint detailing the BSD style init setup
is available at <ulink
url="http://www.linuxfromscratch.org/hints/downloads/files/bsd-init.txt"/>.
Searching the LFS mailing lists for <quote>depinit</quote> will also offer
additional choices.</para>
<para>If using an alternative style of init scripts, skip this chapter
and move on to <xref linkend="chapter-bootable"/>.</para>
</sect1>

View File

@ -1,40 +1,42 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-network">
<title>Configuring the network Script</title>
<?dbhtml filename="network.html"?>
<?dbhtml filename="network.html"?>
<indexterm zone="ch-scripts-network">
<primary sortas="d-network">network</primary>
<secondary>configuring</secondary></indexterm>
<title>Configuring the network Script</title>
<para>This section only applies if a network card is to be
configured.</para>
<indexterm zone="ch-scripts-network">
<primary sortas="d-network">network</primary>
<secondary>configuring</secondary></indexterm>
<para>If a network card will not be used, there is likely no need to
create any configuration files relating to network cards. If that is
the case, remove the <filename class="symlink">network</filename>
symlinks from all run-level directories (<filename
class="directory">/etc/rc.d/rc*.d</filename>).</para>
<para>This section only applies if a network card is to be
configured.</para>
<sect2>
<title>Creating Network Interface Configuration Files</title>
<para>If a network card will not be used, there is likely no need to
create any configuration files relating to network cards. If that is
the case, remove the <filename class="symlink">network</filename>
symlinks from all run-level directories (<filename
class="directory">/etc/rc.d/rc*.d</filename>).</para>
<!-- Edit Me -->
<para>Which interfaces are brought up and down by the network script
depends on the files and directories in the <filename
class="directory">/etc/sysconfig/network-devices</filename> hierarchy.
This directory should contain a sub-directory for each interface to be configured,
such as <filename>ifconfig.xyz</filename>, where <quote>xyz</quote> is a
network interface name. Inside this directory would be files defining
the attributes to this interface, such as its IP address(es), subnet
masks, and so forth.</para>
<sect2>
<title>Creating Network Interface Configuration Files</title>
<para>The following command creates a sample <filename>ipv4</filename> file for
the <emphasis>eth0</emphasis> device:</para>
<para>Which interfaces are brought up and down by the network script
depends on the files and directories in the <filename
class="directory">/etc/sysconfig/network-devices</filename> hierarchy.
This directory should contain a sub-directory for each interface to be
configured, such as <filename>ifconfig.xyz</filename>, where
<quote>xyz</quote> is a network interface name. Inside this directory
would be files defining the attributes to this interface, such as its IP
address(es), subnet masks, and so forth.</para>
<para>The following command creates a sample <filename>ipv4</filename>
file for the <emphasis>eth0</emphasis> device:</para>
<screen><userinput>cd /etc/sysconfig/network-devices &amp;&amp;
mkdir -v ifconfig.eth0 &amp;&amp;
@ -47,45 +49,50 @@ PREFIX=24
BROADCAST=192.168.1.255</literal>
EOF</userinput></screen>
<para>The values of these variables must be changed in every file to match the
proper setup. If the <envar>ONBOOT</envar> variable is set to <quote>yes</quote>
the network script will bring up the Network Interface Card (NIC) during booting
of the system. If set to anything but <quote>yes</quote> the NIC will be ignored
by the network script and not be brought up.</para>
<para>The values of these variables must be changed in every file to match
the proper setup. If the <envar>ONBOOT</envar> variable is set to
<quote>yes</quote> the network script will bring up the Network Interface
Card (NIC) during booting of the system. If set to anything but
<quote>yes</quote> the NIC will be ignored by the network script and not
be brought up.</para>
<para>The <envar>SERVICE</envar> variable defines the method used for obtaining
the IP address. The LFS-Bootscripts package has a modular IP assignment format,
and creating additional files in the <filename
class="directory">/etc/sysconfig/network-devices/services</filename> directory
allows other IP assignment methods. This is commonly used for Dynamic Host
Configuration Protocol (DHCP), which is addressed in the BLFS book.</para>
<para>The <envar>SERVICE</envar> variable defines the method used for
obtaining the IP address. The LFS-Bootscripts package has a modular IP
assignment format, and creating additional files in the <filename
class="directory">/etc/sysconfig/network-devices/services</filename>
directory allows other IP assignment methods. This is commonly used for
Dynamic Host Configuration Protocol (DHCP), which is addressed in the
BLFS book.</para>
<para>The <envar>GATEWAY</envar> variable should contain
the default gateway IP address, if one is present. If not, then comment out
the variable entirely.</para>
<para>The <envar>GATEWAY</envar> variable should contain the default
gateway IP address, if one is present. If not, then comment out the
variable entirely.</para>
<para>The <envar>PREFIX</envar> variable needs to contain the number of bits
used in the subnet. Each octet in an IP address is 8 bits. If the subnet's
netmask is 255.255.255.0, then it is using the first three octets (24 bits) to
specify the network number. If the netmask is 255.255.255.240, it would be using
the first 28 bits. Prefixes longer than 24 bits are commonly used by DSL and
cable-based Internet Service Providers (ISPs). In this example (PREFIX=24), the
netmask is 255.255.255.0. Adjust the <envar>PREFIX</envar> variable according to
your specific subnet.</para>
<para>The <envar>PREFIX</envar> variable needs to contain the number of
bits used in the subnet. Each octet in an IP address is 8 bits. If the
subnet's netmask is 255.255.255.0, then it is using the first three octets
(24 bits) to specify the network number. If the netmask is 255.255.255.240,
it would be using the first 28 bits. Prefixes longer than 24 bits are
commonly used by DSL and cable-based Internet Service Providers (ISPs).
In this example (PREFIX=24), the netmask is 255.255.255.0. Adjust the
<envar>PREFIX</envar> variable according to your specific subnet.</para>
</sect2>
</sect2>
<sect2 id="resolv.conf">
<title>Creating the /etc/resolv.conf File</title>
<indexterm zone="resolv.conf"><primary sortas="e-/etc/resolv.conf">/etc/resolv.conf</primary></indexterm>
<sect2 id="resolv.conf">
<title>Creating the /etc/resolv.conf File</title>
<para>If the system is going to be connected to the Internet, it will
need some means of Domain Name Service (DNS) name resolution to
resolve Internet domain names to IP addresses, and vice versa. This is
best achieved by placing the IP address of the DNS server, available
from the ISP or network administrator, into
<filename>/etc/resolv.conf</filename>. Create the file by running the
following:</para>
<indexterm zone="resolv.conf">
<primary sortas="e-/etc/resolv.conf">/etc/resolv.conf</primary>
</indexterm>
<para>If the system is going to be connected to the Internet, it will
need some means of Domain Name Service (DNS) name resolution to
resolve Internet domain names to IP addresses, and vice versa. This is
best achieved by placing the IP address of the DNS server, available
from the ISP or network administrator, into
<filename>/etc/resolv.conf</filename>. Create the file by running the
following:</para>
<screen><userinput>cat &gt; /etc/resolv.conf &lt;&lt; "EOF"
<literal># Begin /etc/resolv.conf
@ -97,14 +104,13 @@ nameserver <replaceable>[IP address of your secondary nameserver]</replaceable>
# End /etc/resolv.conf</literal>
EOF</userinput></screen>
<para>Replace <replaceable>[IP address of the
nameserver]</replaceable> with the IP address of the DNS most
appropriate for the setup. There will often be more than one entry
(requirements demand secondary servers for fallback capability). If
you only need or want one DNS server, remove the second
<emphasis>nameserver</emphasis> line from the file. The IP address may
also be a router on the local network.</para>
</sect2>
<para>Replace <replaceable>[IP address of the nameserver]</replaceable>
with the IP address of the DNS most appropriate for the setup. There will
often be more than one entry (requirements demand secondary servers for
fallback capability). If you only need or want one DNS server, remove the
second <emphasis>nameserver</emphasis> line from the file. The IP address
may also be a router on the local network.</para>
</sect2>
</sect1>

View File

@ -1,91 +1,99 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-profile">
<title>The Bash Shell Startup Files</title>
<?dbhtml filename="profile.html"?>
<?dbhtml filename="profile.html"?>
<indexterm zone="ch-scripts-profile"><primary sortas="e-/etc/profile">/etc/profile</primary></indexterm>
<title>The Bash Shell Startup Files</title>
<para>The shell program <command>/bin/bash</command> (hereafter
referred to as <quote>the shell</quote>) uses a collection of startup
files to help create an environment to run in. Each file has a
specific use and may affect login and interactive environments
differently. The files in the <filename
class="directory">/etc</filename> directory provide global settings.
If an equivalent file exists in the home directory, it may override
the global settings.</para>
<indexterm zone="ch-scripts-profile">
<primary sortas="e-/etc/profile">/etc/profile</primary>
</indexterm>
<para>An interactive login shell is started after a successful login,
using <command>/bin/login</command>, by reading the
<filename>/etc/passwd</filename> file. An interactive non-login shell
is started at the command-line (e.g.,
<prompt>[prompt]$</prompt><command>/bin/bash</command>). A
non-interactive shell is usually present when a shell script is
running. It is non-interactive because it is processing a script and
not waiting for user input between commands.</para>
<para>The shell program <command>/bin/bash</command> (hereafter referred to
as <quote>the shell</quote>) uses a collection of startup files to help
create an environment to run in. Each file has a specific use and may affect
login and interactive environments differently. The files in the <filename
class="directory">/etc</filename> directory provide global settings. If an
equivalent file exists in the home directory, it may override the global
settings.</para>
<para>For more information, see <command>info bash</command> under the
<emphasis>Bash Startup Files and Interactive Shells</emphasis> section.</para>
<para>An interactive login shell is started after a successful login, using
<command>/bin/login</command>, by reading the <filename>/etc/passwd</filename>
file. An interactive non-login shell is started at the command-line (e.g.,
<prompt>[prompt]$</prompt><command>/bin/bash</command>). A non-interactive
shell is usually present when a shell script is running. It is non-interactive
because it is processing a script and not waiting for user input between
commands.</para>
<para>The files <filename>/etc/profile</filename> and
<filename>~/.bash_profile</filename> are read when the shell is
invoked as an interactive login shell.</para>
<para>For more information, see <command>info bash</command> under the
<emphasis>Bash Startup Files and Interactive Shells</emphasis> section.</para>
<para>The base <filename>/etc/profile</filename> below sets some
environment variables necessary for native language support. Setting
them properly results in:</para>
<para>The files <filename>/etc/profile</filename> and
<filename>~/.bash_profile</filename> are read when the shell is
invoked as an interactive login shell.</para>
<itemizedlist>
<listitem><para>The output of programs translated into the native
language</para></listitem>
<listitem><para>Correct classification of characters into letters, digits and
other classes. This is necessary for <command>bash</command> to properly accept
non-ASCII characters in command lines in non-English locales</para></listitem>
<listitem><para>The correct alphabetical sorting order for the
country</para></listitem>
<listitem><para>Appropriate default paper size</para></listitem>
<listitem><para>Correct formatting of monetary, time, and date
values</para></listitem>
</itemizedlist>
<para>The base <filename>/etc/profile</filename> below sets some
environment variables necessary for native language support. Setting
them properly results in:</para>
<para>This script also sets the <envar>INPUTRC</envar> environment variable that
makes Bash and Readline use the <filename>/etc/inputrc</filename> file created
earlier.</para>
<itemizedlist>
<listitem>
<para>The output of programs translated into the native language</para>
</listitem>
<listitem>
<para>Correct classification of characters into letters, digits and other
classes. This is necessary for <command>bash</command> to properly accept
non-ASCII characters in command lines in non-English locales</para>
</listitem>
<listitem>
<para>The correct alphabetical sorting order for the country</para>
</listitem>
<listitem>
<para>Appropriate default paper size</para>
</listitem>
<listitem>
<para>Correct formatting of monetary, time, and date values</para>
</listitem>
</itemizedlist>
<para>Replace <replaceable>[ll]</replaceable> below with the
two-letter code for the desired language (e.g., <quote>en</quote>) and
<replaceable>[CC]</replaceable> with the two-letter code for the
appropriate country (e.g., <quote>GB</quote>).
<replaceable>[charmap]</replaceable> should be replaced with the
canonical charmap for your chosen locale.</para>
<para>This script also sets the <envar>INPUTRC</envar> environment variable that
makes Bash and Readline use the <filename>/etc/inputrc</filename> file created
earlier.</para>
<para>The list of all locales supported by Glibc can be obtained by running
the following command:</para>
<para>Replace <replaceable>[ll]</replaceable> below with the two-letter code
for the desired language (e.g., <quote>en</quote>) and
<replaceable>[CC]</replaceable> with the two-letter code for the appropriate
country (e.g., <quote>GB</quote>). <replaceable>[charmap]</replaceable> should
be replaced with the canonical charmap for your chosen locale.</para>
<para>The list of all locales supported by Glibc can be obtained by running
the following command:</para>
<screen role="nodump"><userinput>locale -a</userinput></screen>
<para>Locales can have a number of synonyms, e.g. <quote>ISO-8859-1</quote> is
also referred to as <quote>iso8859-1</quote> and <quote>iso88591</quote>.
Some applications cannot handle the various synonyms correctly, so it is safest
to choose the canonical name for a particular locale. To determine the
canonical name, run the following command, where
<replaceable>[locale name]</replaceable> is the output given by
<command>locale -a</command> for your preferred locale
(<quote>en_GB.iso88591</quote> in our example).</para>
<para>Locales can have a number of synonyms, e.g. <quote>ISO-8859-1</quote>
is also referred to as <quote>iso8859-1</quote> and <quote>iso88591</quote>.
Some applications cannot handle the various synonyms correctly, so it is
safest to choose the canonical name for a particular locale. To determine
the canonical name, run the following command, where <replaceable>[locale
name]</replaceable> is the output given by <command>locale -a</command> for
your preferred locale (<quote>en_GB.iso88591</quote> in our example).</para>
<screen role="nodump"><userinput>LC_ALL=<replaceable>[locale name]</replaceable> locale charmap</userinput></screen>
<para>For the <quote>en_GB.iso88591</quote> locale, the above command
will print:</para>
<para>For the <quote>en_GB.iso88591</quote> locale, the above command
will print:</para>
<screen>ISO-8859-1</screen>
<screen><computeroutput>ISO-8859-1</computeroutput></screen>
<para>This results in a final locale setting of <quote>en_GB.ISO-8859-1</quote>.
It is important that the locale found using the heuristic above is tested prior
to it being added to the Bash startup files:</para>
<para>This results in a final locale setting of <quote>en_GB.ISO-8859-1</quote>.
It is important that the locale found using the heuristic above is tested prior
to it being added to the Bash startup files:</para>
<screen role="nodump"><userinput>LC_ALL=[locale name] locale country
LC_ALL=[locale name] locale language
@ -93,39 +101,40 @@ LC_ALL=[locale name] locale charmap
LC_ALL=[locale name] locale int_curr_symbol
LC_ALL=[locale name] locale int_prefix</userinput></screen>
<para>The above commands should print the country and language names, the
character encoding used by the locale, the local currency and the prefix to dial
before the telephone number in order to get into the country. If any of the
commands above fail with a message similar to the one shown below, this means
that your locale was either not installed in Chapter 6 or is not supported by
the default installation of Glibc.</para>
<para>The above commands should print the country and language names, the
character encoding used by the locale, the local currency and the prefix to dial
before the telephone number in order to get into the country. If any of the
commands above fail with a message similar to the one shown below, this means
that your locale was either not installed in Chapter 6 or is not supported by
the default installation of Glibc.</para>
<screen><computeroutput>locale: Cannot set LC_* to default locale: No such file or directory</computeroutput></screen>
<para>If this happens, you should either install the desired locale using the <command>localedef</command> command, or consider choosing a different locale.
Further instructions assume that there are no such error messages from Glibc.
</para>
<para>If this happens, you should either install the desired locale using the
<command>localedef</command> command, or consider choosing a different locale.
Further instructions assume that there are no such error messages from
Glibc.</para>
<para>Some packages beyond LFS may also lack support for your chosen locale. One
example is the X library (part of the X Window System), which outputs the
following error message:</para>
<para>Some packages beyond LFS may also lack support for your chosen locale. One
example is the X library (part of the X Window System), which outputs the
following error message:</para>
<screen><computeroutput>Warning: locale not supported by Xlib, locale set to C</computeroutput></screen>
<para>Sometimes it is possible to fix this by removing the charmap part of the
locale specification, as long as that does not change the character map that
Glibc associates with the locale (this can be checked by running the
<command>locale charmap</command> command in both locales). For example, one
would have to change &quot;de_DE.ISO-8859-15@euro&quot; to
&quot;de_DE@euro&quot; in order to get this locale recognized by Xlib.</para>
<para>Sometimes it is possible to fix this by removing the charmap part of the
locale specification, as long as that does not change the character map that
Glibc associates with the locale (this can be checked by running the
<command>locale charmap</command> command in both locales). For example, one
would have to change &quot;de_DE.ISO-8859-15@euro&quot; to
&quot;de_DE@euro&quot; in order to get this locale recognized by Xlib.</para>
<para>Other packages can also function incorrectly (but may not necessarily
display any error messages) if the locale name does not meet their expectations.
In those cases, investigating how other Linux distributions support your locale
might provide some useful information.</para>
<para>Other packages can also function incorrectly (but may not necessarily
display any error messages) if the locale name does not meet their expectations.
In those cases, investigating how other Linux distributions support your locale
might provide some useful information.</para>
<para>Once the proper locale settings have been determined, create the
<filename>/etc/profile</filename> file:</para>
<para>Once the proper locale settings have been determined, create the
<filename>/etc/profile</filename> file:</para>
<screen><userinput>cat &gt; /etc/profile &lt;&lt; "EOF"
<literal># Begin /etc/profile
@ -136,18 +145,17 @@ export INPUTRC=/etc/inputrc
# End /etc/profile</literal>
EOF</userinput></screen>
<note><para>The <quote>C</quote> (default) and <quote>en_US</quote>
(the recommended one for United States English users) locales are
different.</para></note>
<note>
<para>The <quote>C</quote> (default) and <quote>en_US</quote> (the
recommended one for United States English users) locales are different.</para>
</note>
<para>Setting the keyboard layout, screen font, and
locale-related environment variables are the only internationalization
steps needed to support locales that use ordinary single-byte
encodings and left-to-right writing direction. More complex cases
(including UTF-8 based locales) require additional steps and
additional patches because many applications tend to not work properly
under such conditions. These steps and patches are not included in
the LFS book and such locales are not yet supported by LFS.</para>
<para>Setting the keyboard layout, screen font, and locale-related environment
variables are the only internationalization steps needed to support locales
that use ordinary single-byte encodings and left-to-right writing direction.
More complex cases (including UTF-8 based locales) require additional steps
and additional patches because many applications tend to not work properly
under such conditions. These steps and patches are not included in the LFS
book and such locales are not yet supported by LFS.</para>
</sect1>

View File

@ -1,42 +1,45 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-setclock">
<title>Configuring the setclock Script</title>
<?dbhtml filename="setclock.html"?>
<?dbhtml filename="setclock.html"?>
<indexterm zone="ch-scripts-setclock">
<primary sortas="d-setclock">setclock</primary>
<secondary>configuring</secondary></indexterm>
<title>Configuring the setclock Script</title>
<para>The <command>setclock</command> script reads the time from the hardware
clock, also known as the BIOS or the Complementary Metal Oxide Semiconductor
(CMOS) clock. If the hardware clock is set to UTC, this script will convert the
hardware clock's time to the local time using the
<filename>/etc/localtime</filename> file (which tells the
<command>hwclock</command> program which timezone the user is in). There is no
way to detect whether or not the hardware clock is set to UTC, so this
needs to be configured manually.</para>
<indexterm zone="ch-scripts-setclock">
<primary sortas="d-setclock">setclock</primary>
<secondary>configuring</secondary></indexterm>
<para>If you cannot remember whether or not the hardware clock is set to UTC,
find out by running the <userinput>hwclock --localtime --show</userinput>
command. This will display what the current time is according to the hardware
clock. If this time matches whatever your watch says, then the hardware clock is
set to local time. If the output from <command>hwclock</command> is not local
time, chances are it is set to UTC time. Verify this by adding or subtracting
the proper amount of hours for the timezone to the time shown by
<command>hwclock</command>. For example, if you are currently in the MST
timezone, which is also known as GMT -0700, add seven hours to the local
time.</para>
<para>The <command>setclock</command> script reads the time from the hardware
clock, also known as the BIOS or the Complementary Metal Oxide Semiconductor
(CMOS) clock. If the hardware clock is set to UTC, this script will convert the
hardware clock's time to the local time using the
<filename>/etc/localtime</filename> file (which tells the
<command>hwclock</command> program which timezone the user is in). There is no
way to detect whether or not the hardware clock is set to UTC, so this
needs to be configured manually.</para>
<para>Change the value of the <envar>UTC</envar> variable below
to a value of <parameter>0</parameter> (zero) if the hardware clock
is <emphasis>not</emphasis> set to UTC time.</para>
<para>If you cannot remember whether or not the hardware clock is set to UTC,
find out by running the <userinput>hwclock --localtime --show</userinput>
command. This will display what the current time is according to the hardware
clock. If this time matches whatever your watch says, then the hardware clock is
set to local time. If the output from <command>hwclock</command> is not local
time, chances are it is set to UTC time. Verify this by adding or subtracting
the proper amount of hours for the timezone to the time shown by
<command>hwclock</command>. For example, if you are currently in the MST
timezone, which is also known as GMT -0700, add seven hours to the local
time.</para>
<para>Create a new file <filename>/etc/sysconfig/clock</filename> by running
the following:</para>
<para>Change the value of the <envar>UTC</envar> variable below
to a value of <parameter>0</parameter> (zero) if the hardware clock
is <emphasis>not</emphasis> set to UTC time.</para>
<para>Create a new file <filename>/etc/sysconfig/clock</filename> by running
the following:</para>
<screen><userinput>cat &gt; /etc/sysconfig/clock &lt;&lt; "EOF"
<literal># Begin /etc/sysconfig/clock
@ -46,9 +49,8 @@ UTC=1
# End /etc/sysconfig/clock</literal>
EOF</userinput></screen>
<para>A good hint explaining how to deal with time on LFS is available
at <ulink url="&hints-root;time.txt"/>. It explains issues such as
time zones, UTC, and the <envar>TZ</envar> environment variable.</para>
<para>A good hint explaining how to deal with time on LFS is available
at <ulink url="&hints-root;time.txt"/>. It explains issues such as
time zones, UTC, and the <envar>TZ</envar> environment variable.</para>
</sect1>

View File

@ -1,22 +1,26 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-sysklogd">
<title>Configuring the sysklogd script</title>
<?dbhtml filename="sysklogd.html"?>
<?dbhtml filename="sysklogd.html"?>
<indexterm zone="ch-scripts-sysklogd">
<primary sortas="d-sysklogd">sysklogd</primary>
<secondary>configuring</secondary></indexterm>
<title>Configuring the sysklogd script</title>
<para>The <filename>sysklogd</filename> script invokes the
<command>syslogd</command> program with the <parameter>-m 0</parameter> option.
This option turns off the periodic timestamp mark that
<command>syslogd</command> writes to the log files every 20 minutes by default.
If you want to turn on this periodic timestamp mark, edit the
<filename>sysklogd</filename> script and make the changes accordingly. See
<userinput>man syslogd</userinput> for more information.</para>
<indexterm zone="ch-scripts-sysklogd">
<primary sortas="d-sysklogd">sysklogd</primary>
<secondary>configuring</secondary>
</indexterm>
<para>The <filename>sysklogd</filename> script invokes the
<command>syslogd</command> program with the <parameter>-m 0</parameter> option.
This option turns off the periodic timestamp mark that
<command>syslogd</command> writes to the log files every 20 minutes by default.
If you want to turn on this periodic timestamp mark, edit the
<filename>sysklogd</filename> script and make the changes accordingly. See
<userinput>man syslogd</userinput> for more information.</para>
</sect1>

View File

@ -1,213 +1,237 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-udev">
<title>Device and Module Handling on an LFS System</title>
<?dbhtml filename="udev.html"?>
<?dbhtml filename="udev.html"?>
<indexterm zone="ch-scripts-udev">
<primary sortas="a-Udev">Udev</primary>
<secondary>usage</secondary></indexterm>
<title>Device and Module Handling on an LFS System</title>
<para>In <xref linkend="chapter-building-system"/>, we installed the Udev
package. Before we go into the details regarding how this works,
a brief history of previous methods of handling devices is in
order.</para>
<indexterm zone="ch-scripts-udev">
<primary sortas="a-Udev">Udev</primary>
<secondary>usage</secondary>
</indexterm>
<para>Linux systems in general traditionally use a static device creation
method, whereby a great many device nodes are created under <filename
class="directory">/dev</filename> (sometimes literally thousands of nodes),
regardless of whether the corresponding hardware devices actually exist. This is
typically done via a <command>MAKEDEV</command> script, which contains a number
of calls to the <command>mknod</command> program with the relevant major and
minor device numbers for every possible device that might exist in the world.
Using the Udev method, only those devices which are detected by the kernel get
device nodes created for them. Because these device nodes will be created each
time the system boots, they will be stored on a <systemitem
class="filesystem">tmpfs</systemitem> file system (a virtual file system that
resides entirely in system memory). Device nodes do not require much space, so
the memory that is used is negligible.</para>
<para>In <xref linkend="chapter-building-system"/>, we installed the Udev
package. Before we go into the details regarding how this works,
a brief history of previous methods of handling devices is in
order.</para>
<sect2>
<title>History</title>
<para>Linux systems in general traditionally use a static device creation
method, whereby a great many device nodes are created under <filename
class="directory">/dev</filename> (sometimes literally thousands of nodes),
regardless of whether the corresponding hardware devices actually exist. This is
typically done via a <command>MAKEDEV</command> script, which contains a number
of calls to the <command>mknod</command> program with the relevant major and
minor device numbers for every possible device that might exist in the world.
Using the Udev method, only those devices which are detected by the kernel get
device nodes created for them. Because these device nodes will be created each
time the system boots, they will be stored on a <systemitem
class="filesystem">tmpfs</systemitem> file system (a virtual file system that
resides entirely in system memory). Device nodes do not require much space, so
the memory that is used is negligible.</para>
<para>In February 2000, a new filesystem called <systemitem
class="filesystem">devfs</systemitem> was merged into the 2.3.46
kernel and was made available during the 2.4 series of
stable kernels. Although it was present in the kernel source itself,
this method of creating devices dynamically never received
overwhelming support from the core kernel developers.</para>
<sect2>
<title>History</title>
<para>The main problem with the approach adopted by <systemitem
class="filesystem">devfs</systemitem> was the way it handled
device detection, creation, and naming. The latter issue, that of
device node naming, was perhaps the most critical. It is generally
accepted that if device names are allowed to be configurable, then
the device naming policy should be up to a system administrator, not
imposed on them by any particular developer(s). The <systemitem
class="filesystem">devfs</systemitem> file system also suffers from race
conditions that are inherent in its design and cannot be fixed
without a substantial revision to the kernel. It has also been marked
as deprecated due to a lack of recent maintenance.</para>
<para>In February 2000, a new filesystem called <systemitem
class="filesystem">devfs</systemitem> was merged into the 2.3.46 kernel
and was made available during the 2.4 series of stable kernels. Although
it was present in the kernel source itself, this method of creating devices
dynamically never received overwhelming support from the core kernel
developers.</para>
<para>With the development of the unstable 2.5 kernel tree, later released as
the 2.6 series of stable kernels, a new virtual filesystem called <systemitem
class="filesystem">sysfs</systemitem> came to be. The job of <systemitem
class="filesystem">sysfs</systemitem> is to export a view of the system's
hardrware configuration to userspace processes. With this userspace-visible
representation, the possibility of seeing a userspace replacement for
<systemitem class="filesystem">devfs</systemitem> became much more
realistic.</para>
<para>The main problem with the approach adopted by <systemitem
class="filesystem">devfs</systemitem> was the way it handled device
detection, creation, and naming. The latter issue, that of device node
naming, was perhaps the most critical. It is generally accepted that if
device names are allowed to be configurable, then the device naming policy
should be up to a system administrator, not imposed on them by any
particular developer(s). The <systemitem class="filesystem">devfs</systemitem>
file system also suffers from race conditions that are inherent in its design
and cannot be fixed without a substantial revision to the kernel. It has also
been marked as deprecated due to a lack of recent maintenance.</para>
</sect2>
<para>With the development of the unstable 2.5 kernel tree, later released as
the 2.6 series of stable kernels, a new virtual filesystem called <systemitem
class="filesystem">sysfs</systemitem> came to be. The job of <systemitem
class="filesystem">sysfs</systemitem> is to export a view of the system's
hardrware configuration to userspace processes. With this userspace-visible
representation, the possibility of seeing a userspace replacement for
<systemitem class="filesystem">devfs</systemitem> became much more
realistic.</para>
<sect2>
<title>Udev Implementation</title>
</sect2>
<para>The <systemitem class="filesystem">sysfs</systemitem> filesystem was
mentioned briefly above. One may wonder how <systemitem
class="filesystem">sysfs</systemitem> knows about the devices present on a
system and what device numbers should be used for them. Drivers that have been
compiled into the kernel directly register their objects with <systemitem
class="filesystem">sysfs</systemitem> as they are detected by the kernel. For
drivers compiled as modules, this registration will happen when the module is
loaded. Once the <systemitem class="filesystem">sysfs</systemitem> filesystem is
mounted (on <filename class="directory">/sys</filename>), data which the
built-in drivers registered with <systemitem
class="filesystem">sysfs</systemitem> are available to userspace processes and
to <command>udev</command> for device node creation.</para>
<sect2>
<title>Udev Implementation</title>
<para>The <command>S10udev</command> initscript takes care of creating these
device nodes when Linux is booted. This script starts by registering
<command>/sbin/udevsend</command> as a hotplug event handler. Hotplug events
(discussed below) are not usually generated during this stage, but
<command>udev</command> is registered just in case they do occur. The
<command>udevstart</command> program then walks through the <systemitem
class="filesystem">/sys</systemitem> filesystem and creates devices under
<filename class="directory">/dev</filename> that match the descriptions. For
example, <filename>/sys/class/tty/vcs/dev</filename> contains the string
<quote>7:0</quote> This string is used by <command>udevstart</command> to create
<filename>/dev/vcs</filename> with major number <emphasis>7</emphasis> and minor
<emphasis>0</emphasis>. The names and permissions of the nodes created under
the <filename class="directory">/dev</filename> directory are configured
according to the rules specified in the files within the <filename
class="directory">/etc/udev/rules.d/</filename> directory. These are numbered in
a similar fashion to the LFS-Bootscripts package. If <command>udev</command>
can't find a rule for the device it is creating, it will default permissions to
<emphasis>660</emphasis> and ownership to <emphasis>root:root</emphasis>.</para>
<para>The <systemitem class="filesystem">sysfs</systemitem> filesystem was
mentioned briefly above. One may wonder how <systemitem
class="filesystem">sysfs</systemitem> knows about the devices present on
a system and what device numbers should be used for them. Drivers that have
been compiled into the kernel directly register their objects with
<systemitem class="filesystem">sysfs</systemitem> as they are detected by
the kernel. For drivers compiled as modules, this registration will happen
when the module is loaded. Once the <systemitem
class="filesystem">sysfs</systemitem> filesystem is mounted (on <filename
class="directory">/sys</filename>), data which the built-in drivers
registered with <systemitem class="filesystem">sysfs</systemitem> are
available to userspace processes and to <command>udev</command> for device
node creation.</para>
<para>Once the above stage is complete, all devices that were already present
and have compiled-in drivers will be available for use. This leads us to the
devices that have modular drivers.</para>
<para>The <command>S10udev</command> initscript takes care of creating
these device nodes when Linux is booted. This script starts by registering
<command>/sbin/udevsend</command> as a hotplug event handler. Hotplug events
(discussed below) are not usually generated during this stage, but
<command>udev</command> is registered just in case they do occur. The
<command>udevstart</command> program then walks through the <systemitem
class="filesystem">/sys</systemitem> filesystem and creates devices under
<filename class="directory">/dev</filename> that match the descriptions.
For example, <filename>/sys/class/tty/vcs/dev</filename> contains the
string <quote>7:0</quote> This string is used by <command>udevstart</command>
to create <filename>/dev/vcs</filename> with major number
<emphasis>7</emphasis> and minor <emphasis>0</emphasis>. The names and
permissions of the nodes created under the <filename
class="directory">/dev</filename> directory are configured according to the
rules specified in the files within the <filename
class="directory">/etc/udev/rules.d/</filename> directory. These are
numbered in a similar fashion to the LFS-Bootscripts package. If
<command>udev</command> can't find a rule for the device it is creating,
it will default permissions to <emphasis>660</emphasis> and ownership to
<emphasis>root:root</emphasis>.</para>
<para>Earlier, we mentioned the concept of a <quote>hotplug event
handler.</quote> When a new device connection is detected by the kernel, the
kernel will generate a hotplug event and look at the file
<filename>/proc/sys/kernel/hotplug</filename> to determine the userspace program
that handles the device's connection. The <command>udev</command> bootscript
registered <command>udevsend</command> as this handler. When these hotplug
events are generated, the kernel will tell <command>udev</command> to check the
<filename class="directory">/sys</filename> filesystem for the information
pertaining to this new device and create the <filename
class="directory">/dev</filename> entry for it.</para>
<para>Once the above stage is complete, all devices that were already present
and have compiled-in drivers will be available for use. This leads us to the
devices that have modular drivers.</para>
<para>This brings us to one problem that exists with <command>udev</command>,
and likewise with <systemitem class="filesystem">devfs</systemitem> before it.
It is commonly referred to as the <quote>chicken and egg</quote> problem. Most
Linux distributions handle loading modules via entries in
<filename>/etc/modules.conf</filename>. Access to a device node causes the
appropriate kernel module to load. With <command>udev</command>, this method
will not work because the device node does not exist until the module is loaded.
To solve this, the <command>S05modules</command> bootscript was added to the
LFS-Bootscripts package, along with the
<filename>/etc/sysconfig/modules</filename> file. By adding module names to the
<filename>modules</filename> file, these modules will be loaded when the
computer starts up. This allows <command>udev</command> to detect the devices
and create the appropriate device nodes.</para>
<para>Earlier, we mentioned the concept of a <quote>hotplug event
handler.</quote> When a new device connection is detected by the kernel,
the kernel will generate a hotplug event and look at the file
<filename>/proc/sys/kernel/hotplug</filename> to determine the userspace
program that handles the device's connection. The <command>udev</command>
bootscript registered <command>udevsend</command> as this handler. When
these hotplug events are generated, the kernel will tell
<command>udev</command> to check the <filename
class="directory">/sys</filename> filesystem for the information pertaining
to this new device and create the <filename class="directory">/dev</filename>
entry for it.</para>
<para>Note that on slower machines or for drivers that create a lot
of device nodes, the process of creating devices may take a few
seconds to complete. This means that some device nodes may not be
immediately accessible.</para>
</sect2>
<para>This brings us to one problem that exists with <command>udev</command>,
and likewise with <systemitem class="filesystem">devfs</systemitem> before it.
It is commonly referred to as the <quote>chicken and egg</quote> problem. Most
Linux distributions handle loading modules via entries in
<filename>/etc/modules.conf</filename>. Access to a device node causes the
appropriate kernel module to load. With <command>udev</command>, this method
will not work because the device node does not exist until the module is loaded.
To solve this, the <command>S05modules</command> bootscript was added to the
LFS-Bootscripts package, along with the
<filename>/etc/sysconfig/modules</filename> file. By adding module names to the
<filename>modules</filename> file, these modules will be loaded when the
computer starts up. This allows <command>udev</command> to detect the devices
and create the appropriate device nodes.</para>
<sect2>
<title>Handling Hotpluggable/Dynamic Devices</title>
<para>Note that on slower machines or for drivers that create a lot of device
nodes, the process of creating devices may take a few seconds to complete.
This means that some device nodes may not be immediately accessible.</para>
<para>When you plug in a device, such as a Universal Serial Bus (USB) MP3 player, the kernel
recognizes that the device is now connected and generates a hotplug
event. If the driver is already loaded (either because it was compiled
into the kernel or because it was loaded via the
<command>S05modules</command> bootscript), <command>udev</command> will
be called upon to create the relevant device node(s) according to the
<systemitem class="filesystem">sysfs</systemitem> data available in
<filename class="directory">/sys</filename>.</para>
</sect2>
<para>If the driver for the just plugged in device is available as a module but
currently unloaded, the Hotplug package will load the appropriate module
and make this device available by creating the device node(s) for it.</para>
</sect2>
<sect2>
<title>Handling Hotpluggable/Dynamic Devices</title>
<sect2>
<title>Problems with Creating Devices</title>
<para>When you plug in a device, such as a Universal Serial Bus (USB) MP3
player, the kernel recognizes that the device is now connected and generates
a hotplug event. If the driver is already loaded (either because it was
compiled into the kernel or because it was loaded via the
<command>S05modules</command> bootscript), <command>udev</command> will be
called upon to create the relevant device node(s) according to the
<systemitem class="filesystem">sysfs</systemitem> data available in
<filename class="directory">/sys</filename>.</para>
<para>There are a few known problems when it comes to automatically creating
device nodes:</para>
<para>If the driver for the just plugged in device is available as a module but
currently unloaded, the Hotplug package will load the appropriate module
and make this device available by creating the device node(s) for it.</para>
<para>1) A kernel driver may not export its data to <systemitem
class="filesystem">sysfs</systemitem>.</para>
</sect2>
<para>This is most common with third party drivers from outside the kernel tree.
Udev will be unable to automatically create device nodes for such drivers. Use
the <filename>/etc/sysconfig/createfiles</filename> configuration file to
manually create the devices. Consult the <filename>devices.txt</filename> file
inside the kernel documentation or the documentation for that driver to find the
proper major/minor numbers.</para>
<sect2>
<title>Problems with Creating Devices</title>
<para>2) A non-hardware device is required. This is most common with
the Advanced Linux Sound Architecture (ALSA) project's Open Sound
System (OSS) compatibility module. These types of devices can be
handled in one of two ways:</para>
<para>There are a few known problems when it comes to automatically creating
device nodes:</para>
<itemizedlist>
<para>1) A kernel driver may not export its data to <systemitem
class="filesystem">sysfs</systemitem>.</para>
<listitem><para>Adding the module names to
<filename>/etc/sysconfig/modules</filename></para></listitem>
<listitem><para>Using an
<quote>install</quote> line in
<filename>/etc/modprobe.conf</filename>. This tells the
<command>modprobe</command> command <quote>when loading this module,
also load this other module, at the same time.</quote> For example:</para>
<para>This is most common with third party drivers from outside the kernel
tree. Udev will be unable to automatically create device nodes for such
drivers. Use the <filename>/etc/sysconfig/createfiles</filename>
configuration file to manually create the devices. Consult the
<filename>devices.txt</filename> file inside the kernel documentation or
the documentation for that driver to find the proper major/minor
numbers.</para>
<para>2) A non-hardware device is required. This is most common with
the Advanced Linux Sound Architecture (ALSA) project's Open Sound
System (OSS) compatibility module. These types of devices can be
handled in one of two ways:</para>
<itemizedlist>
<listitem>
<para>Adding the module names to
<filename>/etc/sysconfig/modules</filename></para>
</listitem>
<listitem>
<para>Using an <quote>install</quote> line in
<filename>/etc/modprobe.conf</filename>. This tells the
<command>modprobe</command> command <quote>when loading this module,
also load this other module, at the same time.</quote>
For example:</para>
<screen role="nodump"><userinput>install snd-pcm modprobe -i snd-pcm ; modprobe \
snd-pcm-oss ; true</userinput></screen>
<para>This will cause the system to load both the
<emphasis>snd-pcm</emphasis> and <emphasis>snd-pcm-oss</emphasis>
modules when any request is made to load the driver
<emphasis>snd-pcm</emphasis>.</para></listitem>
</itemizedlist>
</sect2>
<para>This will cause the system to load both the
<emphasis>snd-pcm</emphasis> and <emphasis>snd-pcm-oss</emphasis>
modules when any request is made to load the driver
<emphasis>snd-pcm</emphasis>.</para>
</listitem>
<sect2>
<title>Useful Reading</title>
</itemizedlist>
<para>Additional helpful documentation is available at the following
sites:</para>
</sect2>
<itemizedlist>
<listitem><para>A Userspace Implementation of <systemitem class="filesystem">devfs</systemitem>
<ulink url="http://www.kroah.com/linux/talks/ols_2003_udev_paper/Reprint-Kroah-Hartman-OLS2003.pdf"/></para></listitem>
<sect2>
<title>Useful Reading</title>
<listitem><para>udev FAQ
<ulink url="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev-FAQ"/></para></listitem>
<para>Additional helpful documentation is available at the following
sites:</para>
<listitem><para>The Linux Kernel Driver Model
<ulink url="http://public.planetmirror.com/pub/lca/2003/proceedings/papers/Patrick_Mochel/Patrick_Mochel.pdf"/></para></listitem>
</itemizedlist>
</sect2>
<itemizedlist>
<listitem>
<para>A Userspace Implementation of <systemitem class="filesystem">devfs</systemitem>
<ulink url="http://www.kroah.com/linux/talks/ols_2003_udev_paper/Reprint-Kroah-Hartman-OLS2003.pdf"/></para>
</listitem>
<listitem>
<para>udev FAQ
<ulink url="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev-FAQ"/></para>
</listitem>
<listitem>
<para>The Linux Kernel Driver Model
<ulink url="http://public.planetmirror.com/pub/lca/2003/proceedings/papers/Patrick_Mochel/Patrick_Mochel.pdf"/></para>
</listitem>
</itemizedlist>
</sect2>
</sect1>

View File

@ -1,29 +1,33 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-scripts-usage">
<title>How Do These Bootscripts Work?</title>
<?dbhtml filename="usage.html"?>
<?dbhtml filename="usage.html"?>
<indexterm zone="ch-scripts-usage">
<primary sortas="a-Bootscripts">Bootscripts</primary>
<secondary>usage</secondary></indexterm>
<title>How Do These Bootscripts Work?</title>
<para>Linux uses a special booting facility named SysVinit that is based on a
concept of <emphasis>run-levels</emphasis>. It can be quite different from one
system to another, so it cannot be assumed that because things worked in one
particular Linux distribution, they should work the same in LFS too. LFS has its
own way of doing things, but it respects generally accepted standards.</para>
<indexterm zone="ch-scripts-usage">
<primary sortas="a-Bootscripts">Bootscripts</primary>
<secondary>usage</secondary>
</indexterm>
<para>SysVinit (which will be referred to as <quote>init</quote> from now on)
works using a run-levels scheme. There are seven (numbered 0 to 6) run-levels
(actually, there are more run-levels, but they are for special cases and are
generally not used. See <filename>init(8)</filename> for more details), and each one
of those corresponds to the actions the computer is supposed to perform when it
starts up. The default run-level is 3. Here are the descriptions of the
different run-levels as they are implemented:</para>
<para>Linux uses a special booting facility named SysVinit that is based on a
concept of <emphasis>run-levels</emphasis>. It can be quite different from one
system to another, so it cannot be assumed that because things worked in one
particular Linux distribution, they should work the same in LFS too. LFS has its
own way of doing things, but it respects generally accepted standards.</para>
<para>SysVinit (which will be referred to as <quote>init</quote> from now on)
works using a run-levels scheme. There are seven (numbered 0 to 6) run-levels
(actually, there are more run-levels, but they are for special cases and are
generally not used. See <filename>init(8)</filename> for more details), and
each one of those corresponds to the actions the computer is supposed to
perform when it starts up. The default run-level is 3. Here are the
descriptions of the different run-levels as they are implemented:</para>
<literallayout>0: halt the computer
1: single-user mode
@ -33,83 +37,93 @@ different run-levels as they are implemented:</para>
5: same as 4, it is usually used for GUI login (like X's <command>xdm</command> or KDE's <command>kdm</command>)
6: reboot the computer</literallayout>
<para>The command used to change run-levels is <command>init
<replaceable>[runlevel]</replaceable></command>, where
<replaceable>[runlevel]</replaceable> is the target run-level. For example, to
reboot the computer, a user could issue the <command>init 6</command> command,
which is an alias for the <command>reboot</command> command. Likewise,
<command>init 0</command> is an alias for the <command>halt</command>
command.</para>
<para>The command used to change run-levels is <command>init
<replaceable>[runlevel]</replaceable></command>, where
<replaceable>[runlevel]</replaceable> is the target run-level. For example, to
reboot the computer, a user could issue the <command>init 6</command> command,
which is an alias for the <command>reboot</command> command. Likewise,
<command>init 0</command> is an alias for the <command>halt</command>
command.</para>
<para>There are a number of directories under <filename
class="directory">/etc/rc.d</filename> that look like <filename
class="directory">rc?.d</filename> (where ? is the number of the run-level) and
<filename class="directory">rcsysinit.d</filename>, all containing a number of
symbolic links. Some begin with a <emphasis>K</emphasis>, the others begin with
an <emphasis>S</emphasis>, and all of them have two numbers following the
initial letter. The K means to stop (kill) a service and the S means to start a
service. The numbers determine the order in which the scripts are run, from 00
to 99&mdash;the lower the number the earlier it gets executed. When
<command>init</command> switches to another run-level, the appropriate services
are either started or stopped, depending on the runlevel chosen.</para>
<para>There are a number of directories under <filename
class="directory">/etc/rc.d</filename> that look like <filename
class="directory">rc?.d</filename> (where ? is the number of the run-level) and
<filename class="directory">rcsysinit.d</filename>, all containing a number of
symbolic links. Some begin with a <emphasis>K</emphasis>, the others begin with
an <emphasis>S</emphasis>, and all of them have two numbers following the
initial letter. The K means to stop (kill) a service and the S means to start a
service. The numbers determine the order in which the scripts are run, from 00
to 99&mdash;the lower the number the earlier it gets executed. When
<command>init</command> switches to another run-level, the appropriate services
are either started or stopped, depending on the runlevel chosen.</para>
<para>The real scripts are in <filename
class="directory">/etc/rc.d/init.d</filename>. They do the actual
work, and the symlinks all point to them. Killing links and starting
links point to the same script in <filename
class="directory">/etc/rc.d/init.d</filename>. This is because the
scripts can be called with different parameters like
<parameter>start</parameter>, <parameter>stop</parameter>,
<parameter>restart</parameter>, <parameter>reload</parameter>, and
<parameter>status</parameter>. When a K link is encountered, the
appropriate script is run with the <parameter>stop</parameter>
argument. When an S link is encountered, the appropriate script is run
with the <parameter>start</parameter> argument.</para>
<para>The real scripts are in <filename
class="directory">/etc/rc.d/init.d</filename>. They do the actual work, and
the symlinks all point to them. Killing links and starting links point to
the same script in <filename class="directory">/etc/rc.d/init.d</filename>.
This is because the scripts can be called with different parameters like
<parameter>start</parameter>, <parameter>stop</parameter>,
<parameter>restart</parameter>, <parameter>reload</parameter>, and
<parameter>status</parameter>. When a K link is encountered, the appropriate
script is run with the <parameter>stop</parameter> argument. When an S link
is encountered, the appropriate script is run with the
<parameter>start</parameter> argument.</para>
<para>There is one exception to this explanation. Links that start
with an <emphasis>S</emphasis> in the <filename
class="directory">rc0.d</filename> and <filename
class="directory">rc6.d</filename> directories will not cause anything
to be started. They will be called with the parameter
<parameter>stop</parameter> to stop something. The logic behind this
is that when a user is going to reboot or halt the system, nothing
needs to be started. The system only needs to be stopped.</para>
<para>There is one exception to this explanation. Links that start
with an <emphasis>S</emphasis> in the <filename
class="directory">rc0.d</filename> and <filename
class="directory">rc6.d</filename> directories will not cause anything
to be started. They will be called with the parameter
<parameter>stop</parameter> to stop something. The logic behind this
is that when a user is going to reboot or halt the system, nothing
needs to be started. The system only needs to be stopped.</para>
<para>These are descriptions of what the arguments make the scripts
do:</para>
<para>These are descriptions of what the arguments make the scripts
do:</para>
<variablelist>
<varlistentry>
<term><parameter>start</parameter></term>
<listitem><para>The service is started.</para></listitem>
</varlistentry>
<variablelist>
<varlistentry>
<term><parameter>stop</parameter></term>
<listitem><para>The service is stopped.</para></listitem>
</varlistentry>
<varlistentry>
<term><parameter>start</parameter></term>
<listitem>
<para>The service is started.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>restart</parameter></term>
<listitem><para>The service is stopped and then started again.</para></listitem>
</varlistentry>
<varlistentry>
<term><parameter>stop</parameter></term>
<listitem>
<para>The service is stopped.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>reload</parameter></term>
<listitem><para>The configuration of the service is updated.
This is used after the configuration file of a service was modified, when
the service does not need to be restarted.</para></listitem>
</varlistentry>
<varlistentry>
<term><parameter>restart</parameter></term>
<listitem>
<para>The service is stopped and then started again.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>status</parameter></term>
<listitem><para>Tells if the service is running and with which PIDs.</para></listitem>
</varlistentry>
</variablelist>
<varlistentry>
<term><parameter>reload</parameter></term>
<listitem>
<para>The configuration of the service is updated.
This is used after the configuration file of a service was modified, when
the service does not need to be restarted.</para>
</listitem>
</varlistentry>
<para>Feel free to modify the way the boot process works (after all,
it is your own LFS system). The files given here are an example of how
it can be done.</para>
<varlistentry>
<term><parameter>status</parameter></term>
<listitem>
<para>Tells if the service is running and with which PIDs.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Feel free to modify the way the boot process works (after all,
it is your own LFS system). The files given here are an example of how
it can be done.</para>
</sect1>