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">
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>
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
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>
48 <indexterm zone="conf-sysvinit">
49 <primary sortas="e-/etc/inittab">/etc/inittab</primary>
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 > /etc/inittab << "EOF"
58 <literal># Begin /etc/inittab
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>
110 <sect2 id="init-levels" >
111 <title>Changing Run Levels</title>
113 <para>Changing run-levels is done with <command>init
114 <replaceable><runlevel></replaceable></command>, where
115 <replaceable><runlevel></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>
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—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
160 <term><parameter>start</parameter></term>
162 <para>The service is started.</para>
167 <term><parameter>stop</parameter></term>
169 <para>The service is stopped.</para>
174 <term><parameter>restart</parameter></term>
176 <para>The service is stopped and then started again.</para>
181 <term><parameter>reload</parameter></term>
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>
190 <term><parameter>status</parameter></term>
192 <para>Tells if the service is running and with which PIDs.</para>
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>