source: chapter07/rc.xml@ 0b1c478

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 6.0 6.1 6.1.1 6.3 6.4 6.5 6.6 6.7 6.8 7.0 7.1 7.2 7.3 7.4 7.5 7.5-systemd 7.6 7.6-systemd 7.7 7.7-systemd 7.8 7.8-systemd 7.9 7.9-systemd 8.0 8.1 8.2 8.3 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk v3_0 v3_1 v3_2 v3_3 v4_0 v4_1 v5_0 v5_1 v5_1_1 xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 0b1c478 was 0b1c478, checked in by Gerard Beekmans <gerard@…>, 23 years ago

This time got all of them & replaced with &amp; 's

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@256 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 6.8 KB
Line 
1<sect1 id="ch07-rc">
2<title>Creating the rc script</title>
3
4<para>
5The first main bootscript is the <filename>/etc/init.d/rc</filename> script.
6Create a new file <filename>/etc/init.d/rc</filename> containing the
7following: </para>
8
9<literallayout>
10
11<userinput>cat &gt; rc &lt;&lt; "EOF"</userinput>
12#!/bin/sh
13# Begin /etc/init.d/rc
14#
15# By Jason Pearce - jason.pearce@linux.org
16# Modified by Gerard Beekmans - gerard@linuxfromscratch.org
17# print_error_msg based on ideas by Simon Perreault - nomis80@yahoo.com
18
19#
20# Include the functions declared in the /etc/init.d/functions file
21#
22
23source /etc/init.d/functions
24
25#
26# The print_error_msg function prints an error message when an unforseen
27# error occured that wasn't trapped for some reason by a evaluate_retval
28# call or error checking in different ways.
29
30print_error_msg()
31{
32
33 echo
34 $FAILURE
35 echo -n "You should not read this error message. It means "
36 echo "that an unforseen error "
37 echo -n "took place and subscript $i exited with "
38 echo "a return value "
39 echo -n "of $error_value for an unknown reason. If you're able "
40 echo "to trace this error down "
41 echo -n "to a bug in one of the files provided by this book, "
42 echo "please be so kind to "
43 echo -n "inform us at lfs-discuss@linuxfromscratch.org"
44 $NORMAL
45 echo
46 echo
47 echo "Press a key to continue..."
48 read
49}
50
51#
52# If you uncomment the debug variable below none of the scripts will be
53# executed, just the script name and parameters will be echo'ed to the
54# screen so you can see how the scripts are called by rc.
55#
56
57# Un-comment the following for debugging.
58# debug=echo
59
60#
61# Start script or program.
62#
63startup() {
64
65$debug $*
66
67}
68
69#
70# Ignore CTRL-C only in this shell, so we can interrupt subprocesses.
71#
72
73trap ":" INT QUIT TSTP
74
75#
76# Now find out what the current and what the previous runlevel are. The
77# $RUNLEVEL variable is set by init for all it's children. This script
78# runs as a child of init.
79#
80
81runlevel=$RUNLEVEL
82
83#
84# Get first argument. Set new runlevel to this argument. If no runlevel
85# was passed to this script we won't change runlevels.
86#
87
88[ "$1" != "" ] &amp;&amp; runlevel=$1
89if [ "$runlevel" = "" ]
90then
91 echo "Usage: $0 &lt;runlevel&gt;" &gt;&amp;2
92 exit 1
93fi
94
95#
96# The same goes for $PREVLEVEL (see above for $RUNLEVEL). previous will
97# be set to the previous run level. If $PREVLEVEL is not set it means
98# that there is no previous runlevel and we'll set previous to N.
99#
100
101previous=$PREVLEVEL
102[ "$previous" = "" ] &amp;&amp; previous=N
103
104export runlevel previous
105
106#
107# Is there an rc directory for the new runlevel?
108#
109
110if [ -d /etc/rc$runlevel.d ]
111
112then
113
114#
115# If so, first collect all the K* scripts in the new run level.
116#
117
118 if [ $previous != N ]
119 then
120 for i in /etc/rc$runlevel.d/K*
121 do
122 [ ! -f $i ] &amp;&amp; continue
123
124#
125# the suffix variable will contain the script name without the leading
126# Kxxx
127#
128
129 suffix=${i#/etc/rc$runlevel.d/K[0-9][0-9][0-9]}
130#
131# If there is a start script for this K script in the previous runlevel
132# determine what it's full path is
133#
134 previous_start=/etc/rc$previous.d/S[0-9][0-9][0-9]$suffix
135#
136# If there was no previous run level it could be that something was
137# started in rcS.d (sysinit level) so we'll determine the path for that
138# possibility as well.
139#
140
141 sysinit_start=/etc/rcS.d/S[0-9][0-9][0-9]$suffix
142
143#
144# Stop the service if there is a start script in the previous run level
145# or in the sysinit level. If previous_start or sysinit_start do not
146# exist the 'continue' command is run which causes the script to abort
147# this iteration of the for loop and continue with the next iteration.
148# This boils down to that it won't run the commands after the next two
149# lines and start over from the top of this for loop. See man bash for
150# more info on this.
151#
152
153 [ ! -f $previous_start ] &amp;&amp;
154 [ ! -f $sysinit_start ] &amp;&amp; continue
155
156#
157# If we found previous_start or sysinit_start, run the K script
158#
159
160 startup $i stop
161 error_value=$?
162#
163# If the return value of the script is not 0, something went wrong with
164# error checking inside the script. the print_error_msg function will be
165# called and the message plus the return value of the K script will be
166# printed to the screen
167
168#
169
170 if [ $error_value != 0 ]
171 then
172 print_error_msg
173 fi
174
175 done
176 fi
177
178#
179# Now run the START scripts for this runlevel.
180#
181
182 for i in /etc/rc$runlevel.d/S*
183 do
184 [ ! -f $i ] &amp;&amp; continue
185
186 if [ $previous != N ]
187 then
188#
189# Find start script in previous runlevel and stop script in this
190# runlevel.
191#
192
193 suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9][0-9]}
194 stop=/etc/rc$runlevel.d/K[0-9][0-9][0-9]$suffix
195 previous_start=/etc/rc$previous.d/S[0-9][0-9][0-9]$suffix
196#
197# If there is a start script in the previous level and no stop script in
198# this level, we don't have to re-start the service; abort this
199# iteration and start the next one.
200#
201
202 [ -f $previous_start ] &amp;&amp; [ ! -f $stop ] &amp;&amp;
203 continue
204 fi
205
206 case "$runlevel" in
207 0|6)
208
209#
210# levels 0 and 6 are halt and reboot levels. We don't really start
211# anything here so we call with the 'stop' parameter
212#
213
214 startup $i stop
215 error_value=$?
216#
217# If the return value of the script is not 0, something went wrong with
218# error checking inside the script. the print_error_msg function will be
219# called and the message plus the return value of the K script will be
220# printed to the screen
221#
222
223 if [ $error_value != 0 ]
224 then
225 print_error_msg
226 fi
227 ;;
228 *)
229 startup $i start
230 error_value=$?
231#
232# If the return value of the script is not 0, something went wrong with
233# error checking inside the script. the print_error_msg function will be
234# called and the message plus the return value of the K script will be
235# printed to the screen
236#
237
238 if [ $error_value != 0 ]
239 then
240 print_error_msg
241 fi
242 ;;
243 esac
244 done
245fi
246
247# End /etc/init.d/rc
248<userinput>EOF</userinput>
249
250</literallayout>
251
252</sect1>
253
Note: See TracBrowser for help on using the repository browser.