Annotation of /trunk/initscripts/busybox/sbin/rc-config
Parent Directory | Revision Log
Revision 1410 -
(hide annotations)
(download)
Mon Jun 27 12:05:52 2011 UTC (13 years, 3 months ago) by niro
File size: 4294 byte(s)
Mon Jun 27 12:05:52 2011 UTC (13 years, 3 months ago) by niro
File size: 4294 byte(s)
-fixed runlevel 6 handling
1 | niro | 724 | #!/bin/bash |
2 | niro | 742 | # $Header: /home/cvsd/magellan-cvs/magellan-src/busybox-initscripts/sbin/rc-config,v 1.3 2008-06-19 12:37:36 niro Exp $ |
3 | niro | 724 | |
4 | RC_INIT_BASE=${MROOT}/etc/init.d | ||
5 | niro | 1168 | RC_EXCLUDE="rc functions template splash-functions udev mdev" |
6 | niro | 724 | |
7 | VERSION=0.3 | ||
8 | |||
9 | get_run_levels() | ||
10 | { | ||
11 | local SCRIPT | ||
12 | local ALL_LEVELS | ||
13 | |||
14 | SCRIPT=${RC_INIT_BASE}/$1 | ||
15 | ALL_LEVELS=$(grep -i "#%rlevels:" ${SCRIPT} | sed -e 's/#%rlevels://g') | ||
16 | |||
17 | echo ${ALL_LEVELS} | ||
18 | |||
19 | return 0 | ||
20 | } | ||
21 | |||
22 | |||
23 | get_needs() | ||
24 | { | ||
25 | local SCRIPT | ||
26 | local ALL_LEVELS | ||
27 | |||
28 | SCRIPT=${RC_INIT_BASE}/$1 | ||
29 | ALL_LEVELS=$(grep -i "#%needs:" ${SCRIPT} | sed -e 's/#%needs://g') | ||
30 | |||
31 | echo ${ALL_LEVELS} | ||
32 | |||
33 | return 0 | ||
34 | } | ||
35 | |||
36 | get_before() | ||
37 | { | ||
38 | local SCRIPT | ||
39 | local ALL_LEVELS | ||
40 | |||
41 | SCRIPT=${RC_INIT_BASE}/$1 | ||
42 | ALL_LEVELS=$(grep -i "#%before:" ${SCRIPT} | sed -e 's/#%before://g') | ||
43 | |||
44 | echo ${ALL_LEVELS} | ||
45 | |||
46 | return 0 | ||
47 | } | ||
48 | |||
49 | get_after() | ||
50 | { | ||
51 | local SCRIPT | ||
52 | local ALL_LEVELS | ||
53 | |||
54 | SCRIPT=${RC_INIT_BASE}/$1 | ||
55 | ALL_LEVELS=$(grep -i "#%after:" ${SCRIPT} | sed -e 's/#%after://g') | ||
56 | |||
57 | echo ${ALL_LEVELS} | ||
58 | |||
59 | return 0 | ||
60 | } | ||
61 | |||
62 | get_start() | ||
63 | { | ||
64 | local SCRIPT | ||
65 | local ALL_LEVELS | ||
66 | |||
67 | SCRIPT=${RC_INIT_BASE}/$1 | ||
68 | ALL_LEVELS=$(grep -i "#%start:" ${SCRIPT} | sed -e 's/#%start://g') | ||
69 | |||
70 | echo ${ALL_LEVELS} | ||
71 | |||
72 | return 0 | ||
73 | } | ||
74 | |||
75 | get_stop() | ||
76 | { | ||
77 | local SCRIPT | ||
78 | local ALL_LEVELS | ||
79 | |||
80 | SCRIPT=${RC_INIT_BASE}/$1 | ||
81 | ALL_LEVELS=$(grep -i "#%stop:" ${SCRIPT} | sed -e 's/#%stop://g') | ||
82 | |||
83 | echo ${ALL_LEVELS} | ||
84 | |||
85 | return 0 | ||
86 | } | ||
87 | |||
88 | |||
89 | |||
90 | rc_service_add() | ||
91 | { | ||
92 | RC_SERVICE=$1 | ||
93 | RC_START=$(get_start ${RC_SERVICE}) | ||
94 | RC_STOP=$(get_stop ${RC_SERVICE}) | ||
95 | |||
96 | echo "Adding ${RC_SERVICE} to:" | ||
97 | for i in $(get_run_levels ${RC_SERVICE}) | ||
98 | do | ||
99 | case ${i} in | ||
100 | niro | 1229 | # ignore these runlevels: |
101 | [1245]:[sk]) continue ;; | ||
102 | |||
103 | niro | 724 | # start |
104 | ?:s) | ||
105 | [[ ${i} = 7:s ]] && i="sysinit:s" | ||
106 | [[ ${i} = 3:s ]] && i="boot:s" | ||
107 | [[ ${i} = 0:s ]] && i="shutdown:s" | ||
108 | niro | 1410 | [[ ${i} = 6:s ]] && i="shutdown:s" |
109 | niro | 724 | echo -e "\t\t[rc${i/:s/}.d -> S${RC_START}]" |
110 | ln -snf ../init.d/${RC_SERVICE} \ | ||
111 | ${MROOT}/etc/rc.d/rc${i/:s/}.d/S${RC_START}${RC_SERVICE} | ||
112 | ;; | ||
113 | # stop | ||
114 | ?:k) | ||
115 | [[ ${i} = 7:k ]] && i="sysinit:k" | ||
116 | niro | 727 | [[ ${i} = 3:k ]] && i="boot:k" |
117 | [[ ${i} = 0:k ]] && i="shutdown:k" | ||
118 | niro | 1410 | [[ ${i} = 6:k ]] && i="shutdown:k" |
119 | niro | 724 | echo -e "\t\t[rc${i/:k/}.d -> K${RC_STOP}]" |
120 | ln -snf ../init.d/${RC_SERVICE} \ | ||
121 | ${MROOT}/etc/rc.d/rc${i/:k/}.d/K${RC_STOP}${RC_SERVICE} | ||
122 | ;; | ||
123 | *) | ||
124 | echo "error" | ||
125 | exit 1 | ||
126 | ;; | ||
127 | esac | ||
128 | done | ||
129 | } | ||
130 | |||
131 | rc_service_del() | ||
132 | { | ||
133 | RC_SERVICE=$1 | ||
134 | |||
135 | echo "Deleting ${RC_SERVICE} from all runlevels:" | ||
136 | for i in boot shutdown sysinit | ||
137 | do | ||
138 | for z in 00 01 02 03 04 05 06 07 08 09 $(seq 10 99) | ||
139 | do | ||
140 | if [ -L "${MROOT}/etc/rc.d/rc${i}.d/S${z}${RC_SERVICE}" ] | ||
141 | then | ||
142 | echo -e "\t\t[rc${i}.d <- S${z}]" | ||
143 | rm ${MROOT}/etc/rc.d/rc${i}.d/S${z}${RC_SERVICE} | ||
144 | fi | ||
145 | |||
146 | if [ -L "${MROOT}/etc/rc.d/rc${i}.d/K${z}${RC_SERVICE}" ] | ||
147 | then | ||
148 | echo -e "\t\t[rc${i}.d <- K${z}]" | ||
149 | rm ${MROOT}/etc/rc.d/rc${i}.d/K${z}${RC_SERVICE} | ||
150 | fi | ||
151 | done | ||
152 | done | ||
153 | } | ||
154 | |||
155 | rc_service_show() | ||
156 | { | ||
157 | RC_SERVICE=$1 | ||
158 | |||
159 | local ALL_RUNLEVELS | ||
160 | |||
161 | # read'em (single) | ||
162 | for i in $(seq 0 7) | ||
163 | do | ||
164 | level=${i} | ||
165 | [[ ${i} = 7 ]] && level=sysinit | ||
166 | niro | 742 | [[ ${i} = 3 ]] && level=boot |
167 | [[ ${i} = 0 ]] && level=shutdown | ||
168 | niro | 1410 | [[ ${i} = 6 ]] && level=shutdown |
169 | niro | 724 | |
170 | for script in ${MROOT}/etc/rc.d/rc${level}.d/* | ||
171 | do | ||
172 | x="$(basename ${script})" | ||
173 | [[ ${x/???/} = ${RC_SERVICE} ]] && | ||
174 | ALL_RUNLEVELS[${i}]=${x/${RC_SERVICE}/} | ||
175 | done | ||
176 | done | ||
177 | |||
178 | # show them (single) | ||
179 | echo -n "${RC_SERVICE}: " | ||
180 | for i in $(seq 0 7) | ||
181 | do | ||
182 | [[ ! -z ${ALL_RUNLEVELS[${i}]} ]] && | ||
183 | echo -n "[${i}:${ALL_RUNLEVELS[${i}]}] " | ||
184 | done | ||
185 | echo | ||
186 | } | ||
187 | |||
188 | check_not_excluded() | ||
189 | { | ||
190 | local SCRIPT | ||
191 | SCRIPT=$1 | ||
192 | |||
193 | for i in ${RC_EXCLUDE} | ||
194 | do | ||
195 | [[ ${SCRIPT} = ${i} ]] && return 1 | ||
196 | done | ||
197 | |||
198 | return 0 | ||
199 | } | ||
200 | |||
201 | |||
202 | usage() | ||
203 | { | ||
204 | echo "Magellan RC Configurator v${VERSION} -- Niels Rogalla (niro@magellan-linux.de)" | ||
205 | echo -e "\nUsage: $(basename $0) [Option] [File] ..." | ||
206 | echo -e " add adds script to runlevel" | ||
207 | echo -e " del deletes script from runlevel" | ||
208 | echo -e " show shows current runlevel settings" | ||
209 | echo -e "\n" | ||
210 | } | ||
211 | |||
212 | case $1 in | ||
213 | add) | ||
214 | rc_service_add $2 | ||
215 | ;; | ||
216 | del) | ||
217 | rc_service_del $2 | ||
218 | ;; | ||
219 | show) | ||
220 | # show all | ||
221 | if [[ -z $2 ]] | ||
222 | then | ||
223 | echo "Currently configured Services:" | ||
224 | for i in ${RC_INIT_BASE}/* | ||
225 | do | ||
226 | x=$(basename ${i}) | ||
227 | if check_not_excluded ${x} | ||
228 | then | ||
229 | rc_service_show ${x} | ||
230 | fi | ||
231 | done | ||
232 | else | ||
233 | echo "Currently configured Services:" | ||
234 | rc_service_show $2 | ||
235 | fi | ||
236 | ;; | ||
237 | *) | ||
238 | usage | ||
239 | ;; | ||
240 | esac |