summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/sysvinit/sysvinit/rc
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-08-27 15:14:24 +0100
committerRichard Purdie <rpurdie@linux.intel.com>2010-08-27 15:29:45 +0100
commit29d6678fd546377459ef75cf54abeef5b969b5cf (patch)
tree8edd65790e37a00d01c3f203f773fe4b5012db18 /meta/recipes-core/sysvinit/sysvinit/rc
parentda49de6885ee1bc424e70bc02f21f6ab920efb55 (diff)
downloadpoky-29d6678fd546377459ef75cf54abeef5b969b5cf.tar.gz
Major layout change to the packages directory
Having one monolithic packages directory makes it hard to find things and is generally overwhelming. This commit splits it into several logical sections roughly based on function, recipes.txt gives more information about the classifications used. The opportunity is also used to switch from "packages" to "recipes" as used in OpenEmbedded as the term "packages" can be confusing to people and has many different meanings. Not all recipes have been classified yet, this is just a first pass at separating things out. Some packages are moved to meta-extras as they're no longer actively used or maintained. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'meta/recipes-core/sysvinit/sysvinit/rc')
-rwxr-xr-xmeta/recipes-core/sysvinit/sysvinit/rc179
1 files changed, 179 insertions, 0 deletions
diff --git a/meta/recipes-core/sysvinit/sysvinit/rc b/meta/recipes-core/sysvinit/sysvinit/rc
new file mode 100755
index 0000000000..dce31a5c98
--- /dev/null
+++ b/meta/recipes-core/sysvinit/sysvinit/rc
@@ -0,0 +1,179 @@
1#!/bin/sh
2#
3# rc This file is responsible for starting/stopping
4# services when the runlevel changes.
5#
6# Optimization feature:
7# A startup script is _not_ run when the service was
8# running in the previous runlevel and it wasn't stopped
9# in the runlevel transition (most Debian services don't
10# have K?? links in rc{1,2,3,4,5} )
11#
12# Author: Miquel van Smoorenburg <miquels@cistron.nl>
13# Bruce Perens <Bruce@Pixar.com>
14#
15# Version: @(#)rc 2.78 07-Nov-1999 miquels@cistron.nl
16#
17
18. /etc/default/rcS
19export VERBOSE
20
21startup_progress() {
22 step=$(($step + $step_change))
23 if [ "$num_steps" != "0" ]; then
24 progress=$((($step * $progress_size / $num_steps) + $first_step))
25 else
26 progress=$progress_size
27 fi
28 #echo "PROGRESS is $progress $runlevel $first_step + ($step of $num_steps) $step_change $progress_size"
29 #if type psplash-write >/dev/null 2>&1; then
30 # TMPDIR=/mnt/.psplash psplash-write "PROGRESS $progress" || true
31 #fi
32 if [ -e /mnt/.psplash/psplash_fifo ]; then
33 echo "PROGRESS $progress" > /mnt/.psplash/psplash_fifo
34 fi
35}
36
37
38#
39# Start script or program.
40#
41startup() {
42 # Handle verbosity
43 [ "$VERBOSE" = very ] && echo "INIT: Running $@..."
44
45 case "$1" in
46 *.sh)
47 # Source shell script for speed.
48 (
49 trap - INT QUIT TSTP
50 scriptname=$1
51 shift
52 . $scriptname
53 )
54 ;;
55 *)
56 "$@"
57 ;;
58 esac
59 startup_progress
60}
61
62 # Ignore CTRL-C only in this shell, so we can interrupt subprocesses.
63 trap ":" INT QUIT TSTP
64
65 # Set onlcr to avoid staircase effect.
66 stty onlcr 0>&1
67
68 # Now find out what the current and what the previous runlevel are.
69
70 runlevel=$RUNLEVEL
71 # Get first argument. Set new runlevel to this argument.
72 [ "$1" != "" ] && runlevel=$1
73 if [ "$runlevel" = "" ]
74 then
75 echo "Usage: $0 <runlevel>" >&2
76 exit 1
77 fi
78 previous=$PREVLEVEL
79 [ "$previous" = "" ] && previous=N
80
81 export runlevel previous
82
83 # Is there an rc directory for this new runlevel?
84 if [ -d /etc/rc$runlevel.d ]
85 then
86 # Find out where in the progress bar the initramfs got to.
87 PROGRESS_STATE=0
88 #if [ -f /dev/.initramfs/progress_state ]; then
89 # . /dev/.initramfs/progress_state
90 #fi
91
92 # Split the remaining portion of the progress bar into thirds
93 progress_size=$(((100 - $PROGRESS_STATE) / 3))
94
95 case "$runlevel" in
96 0|6)
97 # Count down from -100 to 0 and use the entire bar
98 first_step=-100
99 progress_size=100
100 step_change=1
101 ;;
102 S)
103 # Begin where the initramfs left off and use 2/3
104 # of the remaining space
105 first_step=$PROGRESS_STATE
106 progress_size=$(($progress_size * 2))
107 step_change=1
108 ;;
109 *)
110 # Begin where rcS left off and use the final 1/3 of
111 # the space (by leaving progress_size unchanged)
112 first_step=$(($progress_size * 2 + $PROGRESS_STATE))
113 step_change=1
114 ;;
115 esac
116
117 num_steps=0
118 for s in /etc/rc$runlevel.d/[SK]*; do
119 case "${s##/etc/rc$runlevel.d/S??}" in
120 gdm|xdm|kdm|reboot|halt)
121 break
122 ;;
123 esac
124 num_steps=$(($num_steps + 1))
125 done
126 step=0
127
128 # First, run the KILL scripts.
129 if [ $previous != N ]
130 then
131 for i in /etc/rc$runlevel.d/K[0-9][0-9]*
132 do
133 # Check if the script is there.
134 [ ! -f $i ] && continue
135
136 # Stop the service.
137 startup $i stop
138 done
139 fi
140
141 # Now run the START scripts for this runlevel.
142 for i in /etc/rc$runlevel.d/S*
143 do
144 [ ! -f $i ] && continue
145
146 if [ $previous != N ] && [ $previous != S ]
147 then
148 #
149 # Find start script in previous runlevel and
150 # stop script in this runlevel.
151 #
152 suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9]}
153 stop=/etc/rc$runlevel.d/K[0-9][0-9]$suffix
154 previous_start=/etc/rc$previous.d/S[0-9][0-9]$suffix
155 #
156 # If there is a start script in the previous level
157 # and _no_ stop script in this level, we don't
158 # have to re-start the service.
159 #
160 [ -f $previous_start ] && [ ! -f $stop ] && continue
161 fi
162 case "$runlevel" in
163 0|6)
164 startup $i stop
165 ;;
166 *)
167 startup $i start
168 ;;
169 esac
170 done
171 fi
172
173#Uncomment to cause psplash to exit manually, otherwise it exits when it sees a VC switch
174#if [ "x$runlevel" != "xS" ]; then
175# if type psplash-write >/dev/null 2>&1; then
176# TMPDIR=/mnt/.psplash psplash-write "QUIT" || true
177# umount /mnt/.psplash
178# fi
179#fi