Magellan Linux

Annotation of /branches/unlabeled-1.1.1/magellan-initscripts/sbin/rc-config

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (hide annotations) (download)
Mon Dec 13 22:52:07 2004 UTC (19 years, 4 months ago) by niro
File size: 6455 byte(s)
imported.

1 niro 2 #!/bin/bash
2    
3    
4     #rc-config2
5    
6     #header layout
7    
8     #runlevenumber:start
9     #runlevenumber:stop
10     #%rlevels 1:k 2:s
11    
12     #start number
13     #%start
14    
15     #stop number
16     #%stop
17    
18    
19     #deps; unused yet
20     #%needs
21     #%before
22     #%after
23    
24     RC_INIT_BASE=/etc/init.d
25     RC_EXCLUDE="rc functions template splash-functions"
26    
27     VERSION=0.2
28    
29     get_run_levels(){
30     local SCRIPT
31     local ALL_LEVELS
32    
33     SCRIPT=${RC_INIT_BASE}/$1
34     ALL_LEVELS=$(grep -i "#%rlevels:" ${SCRIPT} | sed -e 's/#%rlevels://g')
35    
36     echo ${ALL_LEVELS}
37    
38     return 0
39     }
40    
41    
42     get_needs() {
43     local SCRIPT
44     local ALL_LEVELS
45    
46     SCRIPT=${RC_INIT_BASE}/$1
47     ALL_LEVELS=$(grep -i "#%needs:" ${SCRIPT} | sed -e 's/#%needs://g')
48    
49     echo ${ALL_LEVELS}
50    
51     return 0
52     }
53    
54     get_before() {
55     local SCRIPT
56     local ALL_LEVELS
57    
58     SCRIPT=${RC_INIT_BASE}/$1
59     ALL_LEVELS=$(grep -i "#%before:" ${SCRIPT} | sed -e 's/#%before://g')
60    
61     echo ${ALL_LEVELS}
62    
63     return 0
64     }
65    
66     get_after() {
67     local SCRIPT
68     local ALL_LEVELS
69    
70     SCRIPT=${RC_INIT_BASE}/$1
71     ALL_LEVELS=$(grep -i "#%after:" ${SCRIPT} | sed -e 's/#%after://g')
72    
73     echo ${ALL_LEVELS}
74    
75     return 0
76     }
77    
78     get_start() {
79     local SCRIPT
80     local ALL_LEVELS
81    
82     SCRIPT=${RC_INIT_BASE}/$1
83     ALL_LEVELS=$(grep -i "#%start:" ${SCRIPT} | sed -e 's/#%start://g')
84    
85     echo ${ALL_LEVELS}
86    
87     return 0
88     }
89    
90     get_stop() {
91     local SCRIPT
92     local ALL_LEVELS
93    
94     SCRIPT=${RC_INIT_BASE}/$1
95     ALL_LEVELS=$(grep -i "#%stop:" ${SCRIPT} | sed -e 's/#%stop://g')
96    
97     echo ${ALL_LEVELS}
98    
99     return 0
100     }
101    
102    
103    
104     rc_service_add() {
105     RC_SERVICE=$1
106     RC_START=$(get_start ${RC_SERVICE})
107     RC_STOP=$(get_stop ${RC_SERVICE})
108    
109     echo "Adding ${RC_SERVICE} to:"
110     for i in $(get_run_levels ${RC_SERVICE})
111     do
112     case ${i} in
113     #start
114     ?:s)
115     [ "${i}" == "7:s" ] && i="sysinit:s"
116     echo -e "\t\t[rc${i/:s/}.d -> S${RC_START}]"
117     ln -snf ../init.d/${RC_SERVICE} \
118     /etc/rc.d/rc${i/:s/}.d/S${RC_START}${RC_SERVICE}
119     ;;
120     #stop
121     ?:k)
122     [ "${i}" == "7:k" ] && i="sysinit:k"
123     echo -e "\t\t[rc${i/:k/}.d -> K${RC_STOP}]"
124     ln -snf ../init.d/${RC_SERVICE} \
125     /etc/rc.d/rc${i/:k/}.d/K${RC_STOP}${RC_SERVICE}
126     ;;
127     *)
128     echo "error"
129     exit 1
130     ;;
131     esac
132     done
133     #echo "."
134     }
135    
136     rc_service_del(){
137     RC_SERVICE=$1
138    
139     echo "Deleting ${RC_SERVICE} from all runlevels:"
140     for i in 0 1 2 3 4 5 6 sysinit
141     do
142     for z in 00 01 02 03 04 05 06 07 08 09 $(seq 10 99)
143     do
144     if [ -L "/etc/rc.d/rc${i}.d/S${z}${RC_SERVICE}" ]
145     then
146     echo -e "\t\t[rc${i}.d <- S${z}]"
147     rm /etc/rc.d/rc${i}.d/S${z}${RC_SERVICE}
148     fi
149    
150     if [ -L "/etc/rc.d/rc${i}.d/K${z}${RC_SERVICE}" ]
151     then
152     echo -e "\t\t[rc${i}.d <- K${z}]"
153     rm /etc/rc.d/rc${i}.d/K${z}${RC_SERVICE}
154     fi
155     done
156     done
157     }
158    
159     rc_service_show_old() {
160     RC_SERVICE=$1
161    
162     local ALL_RUNLEVELS
163    
164     [ -z "${RC_SERVICE}" ] && RC_SERVICE=all
165    
166     if [ "${RC_SERVICE}" != all ]
167     then
168     #read'em (single)
169     for i in $(seq 0 7)
170     do
171     if [ ${i} -eq 7 ]
172     then
173     level=sysinit
174     else
175     level=${i}
176     fi
177    
178     for script in /etc/rc.d/rc${level}.d/*
179     do
180     x="$(basename ${script})"
181     if [ "${x/???/}" == "${RC_SERVICE}" ]
182     then
183     ALL_RUNLEVELS[${i}]=${x/${RC_SERVICE}/}
184     fi
185     done
186     done
187    
188     #show them (single)
189     #echo "Currently configured Services:"
190     echo -n "${RC_SERVICE}: "
191     for i in $(seq 0 7)
192     do
193     if [ ${i} -eq 7 ]
194     then
195     level=sysinit
196     else
197     level=${i}
198     fi
199    
200     if [ ! -z "${ALL_RUNLEVELS[${i}]}" ]
201     then
202     echo -n "[${level}:${ALL_RUNLEVELS[${i}]}] "
203     fi
204     done
205     echo
206     else
207     local MY_RC_SERVICE
208     local initscripts
209    
210     #read'em (all)
211     echo "Currently configured Services:"
212     for initscript in ${RC_INIT_BASE}/*
213     do
214     MY_RC_SERVICE=$(basename ${initscript})
215     unset ALL_RUNLEVELS
216     unset level i x
217    
218     for i in $(seq 0 7)
219     do
220     if [ ${i} -eq 7 ]
221     then
222     level=sysinit
223     else
224     level=${i}
225     fi
226    
227     for script in /etc/rc.d/rc${level}.d/*
228     do
229     x=$(basename ${script})
230     if [ "${x/???/}" == "${MY_RC_SERVICE}" ]
231     then
232     ALL_RUNLEVELS[${i}]=${x/${MY_RC_SERVICE}/}
233     fi
234     done
235     done
236    
237     #show them (all)
238     echo -n "${MY_RC_SERVICE}: "
239     for i in $(seq 0 7)
240     do
241     if [ ${i} -eq 7 ]
242     then
243     level=sysinit
244     else
245     level=${i}
246     fi
247    
248     if [ ! -z "${ALL_RUNLEVELS[${i}]}" ]
249     then
250     echo -n "[${level}:${ALL_RUNLEVELS[${i}]}] "
251     fi
252     done
253     echo
254     done
255     fi
256     }
257    
258     rc_service_show() {
259     RC_SERVICE=$1
260    
261     local ALL_RUNLEVELS
262    
263     #read'em (single)
264     for i in $(seq 0 7)
265     do
266     if [ ${i} -eq 7 ]
267     then
268     level=sysinit
269     else
270     level=${i}
271     fi
272    
273     for script in /etc/rc.d/rc${level}.d/*
274     do
275     x="$(basename ${script})"
276     if [ "${x/???/}" == "${RC_SERVICE}" ]
277     then
278     ALL_RUNLEVELS[${i}]=${x/${RC_SERVICE}/}
279     fi
280     done
281     done
282    
283     #show them (single)
284     # echo "Currently configured Services:"
285     echo -n "${RC_SERVICE}: "
286     for i in $(seq 0 7)
287     do
288     if [ ! -z "${ALL_RUNLEVELS[${i}]}" ]
289     then
290     echo -n "[${i}:${ALL_RUNLEVELS[${i}]}] "
291     fi
292     done
293     echo
294     }
295    
296     check_not_excluded(){
297     local SCRIPT
298     SCRIPT=$1
299    
300     for i in ${RC_EXCLUDE}
301     do
302     if [ ${SCRIPT} == ${i} ]
303     then
304     return 1
305     fi
306     done
307    
308     return 0
309     }
310    
311    
312     chg_initdefault() {
313     local newinitdef
314     declare -i newinitdef="$1"
315    
316     if [ -z "$newinitdef" ]
317     then
318     echo "You must give an initlevel."
319     exit 1
320     fi
321    
322     if [ $newinitdef -le 0 -a $newinitdef -ge 6 ]
323     then
324     echo "You can only choose initlevels between 1-5."
325     exit 1
326     fi
327    
328     current=$(cat /etc/inittab|grep initdefault)
329     #echo "$current"
330    
331     cp /etc/inittab /etc/inittab-orig
332     sed -e "s/${current}/id:${newinitdef}:initdefault:/g" \
333     /etc/inittab-orig > /etc/inittab
334     if [ "$?" == "0" ]
335     then
336     rm -f /etc/inittab-orig
337     echo "Changed default initlevel to ${newinitdef} successfully."
338     exit 0
339     else
340     echo "Error: original inittab was saved to /etc/inittab-orig"
341     exit 1
342     fi
343     }
344    
345    
346     usage() {
347     echo "Magellan RC Configurator v${VERSION} -- Niels Rogalla (niro@magellan-linux.de)"
348     echo -e "\nUsage: $(basename $0) [Option] [File] ..."
349     echo -e " add adds script to runlevel"
350     echo -e " del deletes script from runlevel"
351     echo -e " show shows current runlevel settings"
352     echo -e " default x changes default runlevel to x"
353     echo -e "\n"
354     }
355    
356     case $1 in
357     add)
358     rc_service_add $2
359     ;;
360     del)
361     rc_service_del $2
362     ;;
363     show)
364     #show all
365     if [ -z "$2" ]
366     then
367     echo "Currently configured Services:"
368     for i in ${RC_INIT_BASE}/*
369     do
370     x=$(basename ${i})
371     if check_not_excluded ${x}
372     then
373     rc_service_show ${x}
374     fi
375     done
376     else
377     echo "Currently configured Services:"
378     rc_service_show $2
379     fi
380     ;;
381     default)
382     chg_initdefault $2
383     ;;
384     *)
385     usage
386     ;;
387     esac

Properties

Name Value
svn:executable *