source: bootscripts/lfs/init.d/rc@ f874424

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 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 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 f874424 was f874424, checked in by Bruce Dubbs <bdubbs@…>, 13 years ago

Rename /etc/sysconfig/init_params to /etc/sysconfig/rc.site.
Move network services to /lib/services.
Move init-functions to /lib/lsb.
Make /lib/lsb a symlink to /lib/services.
Create convenience symlink /etc/init.d->/etc/rc.d/init.d
Add help and man pages to ifup/ifdown.

Append /run/var/bootlog to /var/log/boot.log at the end of
the boot sequence.

Add capability to step through the boot scripts at boot time.

Optionally allow environment variables in sysconfig directory's
console, network, and clock files to be placed in rc.site.

Add an optional FASTBOOT parameter to set /fastboot when rebooting.

Remove a minor warning message from udev that is triggered
by the udev_retry boot script.

Add SKIPTMPCLEAN as an optional parameter to skip cleaning /tmp at boot time.

Add a page to Chapter 7 documenting rc.site.

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

  • Property mode set to 100644
File size: 4.8 KB
Line 
1#!/bin/bash
2########################################################################
3# Begin rc
4#
5# Description : Main Run Level Control Script
6#
7# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
8# : DJ Lucas - dj@linuxfromscratch.org
9# Update : Bruce Dubbs - bdubbs@linuxfromscratch.org
10#
11# Version : LFS 7.0
12#
13########################################################################
14
15. /lib/lsb/init-functions
16
17function print_error_msg()
18{
19 log_failure_msg
20 # $i is set when called
21 MSG="FAILURE:\n\nYou should not be reading this error message.\n\n"
22 MSG="${MSG}It means that an unforeseen error took place in\n"
23 MSG="${MSG}${i},\n"
24 MSG="${MSG}which exited with a return value of ${error_value}.\n"
25
26 MSG="${MSG}If you're able to track this error down to a bug in one of\n"
27 MSG="${MSG}the files provided by the files provided by\n"
28 MSG="${MSG}the ${DISDRI_MINI} book, please be so kind to inform us at\n"
29 MSG="${MSG}${DISTRO_CONTACT}.\n"
30 log_failure_msg "${MSG}"
31
32 log_info_msg "Press Enter to continue..."
33 wait_for_user
34}
35
36function check_script_status()
37{
38 # $i is set when called
39 if [ ! -f ${i} ]; then
40 log_warning_msg "${i} is not a valid symlink."
41 continue
42 fi
43
44 if [ ! -x ${i} ]; then
45 log_warning_msg "${i} is not executable, skipping."
46 continue
47 fi
48}
49
50function run()
51{
52 if [ -z $interactive ]; then
53 ${1} ${2}
54 return $?
55 fi
56
57 while true; do
58 read -p "Run ${1} ${2} (Yes/no/continue)? " -n 1 runit
59 echo
60
61 case ${runit} in
62 c | C)
63 interactive=""
64 ${i} ${2}
65 ret=${?}
66 break;
67 ;;
68
69 n | N)
70 return 0
71 ;;
72
73 y | Y)
74 ${i} ${2}
75 ret=${?}
76 break
77 ;;
78 esac
79 done
80
81 return $ret
82}
83
84# Read any local settings/overrides
85[ -r /etc/sysconfig/rc.site ] && source /etc/sysconfig/rc.site
86
87DISTRO=${DISTRO:-"Linux From Scratch"}
88DISTRO_CONTACT=${DISTRO_CONTACT:-"lfs-dev@linuxfromscratch.org (Registration required)"}
89DISTRO_MINI=${DISTRO_MINI:-"LFS"}
90
91# These 3 signals will not cause our script to exit
92trap "" INT QUIT TSTP
93
94[ "${1}" != "" ] && runlevel=${1}
95
96if [ "${runlevel}" = "" ]; then
97 echo "Usage: ${0} <runlevel>" >&2
98 exit 1
99fi
100
101previous=${PREVLEVEL}
102[ "${previous}" = "" ] && previous=N
103
104if [ ! -d /etc/rc.d/rc${runlevel}.d ]; then
105 log_info_msg "/etc/rc.d/rc${runlevel}.d does not exist.\n"
106 exit 1
107fi
108
109if [ "$runlevel" == "6" ] || [ "$runlevel" == "0" ]; then IPROMPT="no"; fi
110
111if [ "${IPROMPT}" == "yes" ]; then
112 # dcol and icol are spaces before the message to center the
113 # message on screen.
114
115 wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 ))
116 icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 ))
117
118 echo -e "\\033[${wcol}G${welcome_message}"
119 echo -e "\\033[${icol}G${i_message}${NORMAL}"
120 echo ""
121 read -t "${itime}" -n 1 interactive 2>&1 > /dev/null
122
123 # Make lower case
124 [ "${interactive}" == "I" ] && interactive="i"
125 [ "${interactive}" != "i" ] && interactive=""
126fi
127
128# Attempt to stop all services started by the previous runlevel,
129# and killed in this runlevel
130if [ "${previous}" != "N" ]; then
131 for i in $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null)
132 do
133 check_script_status
134
135 suffix=${i#/etc/rc.d/rc$runlevel.d/K[0-9][0-9]}
136 prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix
137 sysinit_start=/etc/rc.d/rcS.d/S[0-9][0-9]$suffix
138
139 if [ "${runlevel}" != "0" ] && [ "${runlevel}" != "6" ]; then
140 if [ ! -f ${prev_start} ] && [ ! -f ${sysinit_start} ]; then
141 MSG="WARNING:\n\n${i} can't be "
142 MSG="${MSG}executed because it was not "
143 MSG="${MSG}not started in the previous "
144 MSG="${MSG}runlevel (${previous})."
145 log_warning_msg "$MSG"
146 continue
147 fi
148 fi
149
150 run ${i} stop
151 error_value=${?}
152
153 if [ "${error_value}" != "0" ]; then print_error_msg; fi
154 done
155fi
156
157if [ "${previous}" == "N" ]; then export IN_BOOT=1; fi
158
159if [ "$runlevel" == "6" ] && [ -n ${FASTBOOT} ]; then
160 touch /fastboot
161fi
162
163
164# Start all functions in this runlevel
165for i in $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null)
166do
167 if [ "${previous}" != "N" ]; then
168 suffix=${i#/etc/rc.d/rc$runlevel.d/S[0-9][0-9]}
169 stop=/etc/rc.d/rc$runlevel.d/K[0-9][0-9]$suffix
170 prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix
171
172 [ -f ${prev_start} ] && [ ! -f ${stop} ] && continue
173 fi
174
175 check_script_status
176
177 case ${runlevel} in
178 0|6)
179 run ${i} stop
180 ;;
181 *)
182 run ${i} start
183 ;;
184 esac
185
186 error_value=${?}
187
188 if [ "${error_value}" != "0" ]; then print_error_msg; fi
189done
190
191# Copy the boot log on initial boot only
192if [ "${previous}" == "N" ]; then
193 cat /run/var/bootlog >> /var/log/boot.log
194 echo "--------" >> /var/log/boot.log # Mark the end of boot
195fi
196
197# End rc
Note: See TracBrowser for help on using the repository browser.