Magellan Linux

Annotation of /trunk/initscripts/busybox/sbin/rc-config

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1410 - (hide annotations) (download)
Mon Jun 27 12:05:52 2011 UTC (12 years, 10 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