Rewrite bootscripts and Chaper 7
[linux_from_scratch.git] / chapter07 / usage.xml
bloba679381c58be21b06ae5daf66e5e1319b9743257
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4   <!ENTITY % general-entities SYSTEM "../general.ent">
5   %general-entities;
6 ]>
8 <sect1 id="ch-scripts-usage">
9   <?dbhtml filename="usage.html"?>
11   <title>How Do These Bootscripts Work?</title>
13   <indexterm zone="ch-scripts-usage">
14     <primary sortas="a-Bootscripts">Bootscripts</primary>
15     <secondary>usage</secondary>
16   </indexterm>
18   <para>Linux uses a special booting facility named SysVinit that is based on a
19   concept of <emphasis>run-levels</emphasis>. It can be quite different from one
20   system to another, so it cannot be assumed that because things worked in one
21   particular Linux distribution, they should work the same in LFS too. LFS has its
22   own way of doing things, but it respects generally accepted standards.</para>
24   <para>SysVinit (which will be referred to as <quote>init</quote> from now on)
25   works using a run-levels scheme. There are seven (numbered 0 to 6) run-levels
26   (actually, there are more run-levels, but they are for special cases and are
27   generally not used. See <filename>init(8)</filename> for more details), and
28   each one of those corresponds to the actions the computer is supposed to
29   perform when it starts up. The default run-level is 3. Here are the
30   descriptions of the different run-levels as they are implemented:</para>
32 <literallayout>0: halt the computer
33 1: single-user mode
34 2: multi-user mode without networking
35 3: multi-user mode with networking
36 4: reserved for customization, otherwise does the same as 3
37 5: same as 4, it is usually used for GUI login (like X's <command>xdm</command> or KDE's <command>kdm</command>)
38 6: reboot the computer</literallayout>
40   <sect2 id="conf-sysvinit" role="configuration">
41   <title>Configuring Sysvinit</title>
43   <indexterm zone="conf-sysvinit">
44     <primary sortas="a-Sysvinit">Sysvinit</primary>
45     <secondary>configuring</secondary>
46   </indexterm>
48   <indexterm zone="conf-sysvinit">
49     <primary sortas="e-/etc/inittab">/etc/inittab</primary>
50   </indexterm>
52   <para>During the kernel initialization, the first program that is run
53   is either specified on the command line or, by default 
54   <command>init</command>.  This program reads the initialization file
55   <filename>/etc/inittab</filename>.  Create this file with:</para>
57 <screen><userinput>cat &gt; /etc/inittab &lt;&lt; "EOF"
58 <literal># Begin /etc/inittab
60 id:3:initdefault:
62 si::sysinit:/etc/rc.d/init.d/rc sysinit
64 l0:0:wait:/etc/rc.d/init.d/rc 0
65 l1:S1:wait:/etc/rc.d/init.d/rc 1
66 l2:2:wait:/etc/rc.d/init.d/rc 2
67 l3:3:wait:/etc/rc.d/init.d/rc 3
68 l4:4:wait:/etc/rc.d/init.d/rc 4
69 l5:5:wait:/etc/rc.d/init.d/rc 5
70 l6:6:wait:/etc/rc.d/init.d/rc 6
72 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
74 su:S016:once:/sbin/sulogin
76 1:2345:respawn:/sbin/agetty tty1 9600
77 2:2345:respawn:/sbin/agetty tty2 9600
78 3:2345:respawn:/sbin/agetty tty3 9600
79 4:2345:respawn:/sbin/agetty tty4 9600
80 5:2345:respawn:/sbin/agetty tty5 9600
81 6:2345:respawn:/sbin/agetty tty6 9600
83 # End /etc/inittab</literal>
84 EOF</userinput></screen>
86   <para>An explanation of this initialization file is in the man page for
87   <emphasis>inittab</emphasis>.  For LFS, the key command that is run is
88   <command>rc</command>. The intialization file above will instruct
89   <command>rc</command> to run all the scripts starting with an S in the
90   <filename class="directory">/etc/rc.d/rcsysinit.d</filename> directory
91   followed by all the scripts starting with an S in the <filename
92   class="directory">/etc/rc.d/rc?.d</filename> directory where the question
93   mark is specified by the initdefault value.</para>
95   <para>As a convenience, the <command>rc</command> script reads a library of
96   functions in <filename class="directory">/lib/boot/functions</filename>.
97   This library also reads an optional configuration file,
98   <filename>/etc/sysconfig/init_params</filename>.  Any of the system
99   configuration file parameters described in subsequent sections can be
100   alternatively placed in this file allowing consolidation of all system
101   parameters in thsi one file.</para>
103   <para>As a debugging convenience, the functions script also logs all output
104   to <filename>/run/var/bootlog</filename>.  Since the <filename
105   class="directory">/run</filename> directory is a tmpfs, this file is not
106   persistent across boots.</para>
108   </sect2>
110   <sect2 id="init-levels" >
111   <title>Changing Run Levels</title>
113   <para>Changing run-levels is done with <command>init
114   <replaceable>&lt;runlevel&gt;</replaceable></command>, where
115   <replaceable>&lt;runlevel&gt;</replaceable> is the target run-level. For example, to
116   reboot the computer, a user could issue the <command>init 6</command> command,
117   which is an alias for the <command>reboot</command> command. Likewise,
118   <command>init 0</command> is an alias for the <command>halt</command>
119   command.</para>
121   <para>There are a number of directories under <filename
122   class="directory">/etc/rc.d</filename> that look like <filename
123   class="directory">rc?.d</filename> (where ? is the number of the run-level) and
124   <filename class="directory">rcsysinit.d</filename>, all containing a number of
125   symbolic links. Some begin with a <emphasis>K</emphasis>, the others begin with
126   an <emphasis>S</emphasis>, and all of them have two numbers following the
127   initial letter. The K means to stop (kill) a service and the S means to start a
128   service. The numbers determine the order in which the scripts are run, from 00
129   to 99&mdash;the lower the number the earlier it gets executed. When
130   <command>init</command> switches to another run-level, the appropriate services
131   are either started or stopped, depending on the runlevel chosen.</para>
133   <para>The real scripts are in <filename
134   class="directory">/etc/rc.d/init.d</filename>. They do the actual work, and
135   the symlinks all point to them. K links and S links point to
136   the same script in <filename class="directory">/etc/rc.d/init.d</filename>.
137   This is because the scripts can be called with different parameters like
138   <parameter>start</parameter>, <parameter>stop</parameter>,
139   <parameter>restart</parameter>, <parameter>reload</parameter>, and
140   <parameter>status</parameter>. When a K link is encountered, the appropriate
141   script is run with the <parameter>stop</parameter> argument. When an S link
142   is encountered, the appropriate script is run with the
143   <parameter>start</parameter> argument.</para>
145   <para>There is one exception to this explanation. Links that start
146   with an <emphasis>S</emphasis> in the <filename
147   class="directory">rc0.d</filename> and <filename
148   class="directory">rc6.d</filename> directories will not cause anything
149   to be started. They will be called with the parameter
150   <parameter>stop</parameter> to stop something. The logic behind this
151   is that when a user is going to reboot or halt the system, nothing
152   needs to be started.  The system only needs to be stopped.</para>
154   <para>These are descriptions of what the arguments make the scripts
155   do:</para>
157   <variablelist>
159     <varlistentry>
160       <term><parameter>start</parameter></term>
161       <listitem>
162         <para>The service is started.</para>
163       </listitem>
164     </varlistentry>
166     <varlistentry>
167       <term><parameter>stop</parameter></term>
168       <listitem>
169         <para>The service is stopped.</para>
170       </listitem>
171     </varlistentry>
173     <varlistentry>
174       <term><parameter>restart</parameter></term>
175       <listitem>
176         <para>The service is stopped and then started again.</para>
177       </listitem>
178     </varlistentry>
180     <varlistentry>
181       <term><parameter>reload</parameter></term>
182       <listitem>
183         <para>The configuration of the service is updated.
184         This is used after the configuration file of a service was modified, when
185         the service does not need to be restarted.</para>
186       </listitem>
187     </varlistentry>
189     <varlistentry>
190       <term><parameter>status</parameter></term>
191       <listitem>
192         <para>Tells if the service is running and with which PIDs.</para>
193       </listitem>
194     </varlistentry>
196   </variablelist>
198   <para>Feel free to modify the way the boot process works (after all,
199   it is your own LFS system). The files given here are an example of how
200   it can be done.</para>
202   </sect2>
204 </sect1>