Magellan Linux

Contents of /trunk/magellan-initscripts/sbin/rc-config

Parent Directory Parent Directory | Revision Log Revision Log


Revision 104 - (show annotations) (download)
Fri Jul 1 18:07:21 2005 UTC (18 years, 10 months ago) by niro
File size: 4535 byte(s)
cleaned

1 #!/bin/bash
2
3 RC_INIT_BASE=/etc/init.d
4 RC_EXCLUDE="rc functions template splash-functions"
5
6 VERSION=0.2
7
8 get_run_levels(){
9 local SCRIPT
10 local ALL_LEVELS
11
12 SCRIPT=${RC_INIT_BASE}/$1
13 ALL_LEVELS=$(grep -i "#%rlevels:" ${SCRIPT} | sed -e 's/#%rlevels://g')
14
15 echo ${ALL_LEVELS}
16
17 return 0
18 }
19
20
21 get_needs() {
22 local SCRIPT
23 local ALL_LEVELS
24
25 SCRIPT=${RC_INIT_BASE}/$1
26 ALL_LEVELS=$(grep -i "#%needs:" ${SCRIPT} | sed -e 's/#%needs://g')
27
28 echo ${ALL_LEVELS}
29
30 return 0
31 }
32
33 get_before() {
34 local SCRIPT
35 local ALL_LEVELS
36
37 SCRIPT=${RC_INIT_BASE}/$1
38 ALL_LEVELS=$(grep -i "#%before:" ${SCRIPT} | sed -e 's/#%before://g')
39
40 echo ${ALL_LEVELS}
41
42 return 0
43 }
44
45 get_after() {
46 local SCRIPT
47 local ALL_LEVELS
48
49 SCRIPT=${RC_INIT_BASE}/$1
50 ALL_LEVELS=$(grep -i "#%after:" ${SCRIPT} | sed -e 's/#%after://g')
51
52 echo ${ALL_LEVELS}
53
54 return 0
55 }
56
57 get_start() {
58 local SCRIPT
59 local ALL_LEVELS
60
61 SCRIPT=${RC_INIT_BASE}/$1
62 ALL_LEVELS=$(grep -i "#%start:" ${SCRIPT} | sed -e 's/#%start://g')
63
64 echo ${ALL_LEVELS}
65
66 return 0
67 }
68
69 get_stop() {
70 local SCRIPT
71 local ALL_LEVELS
72
73 SCRIPT=${RC_INIT_BASE}/$1
74 ALL_LEVELS=$(grep -i "#%stop:" ${SCRIPT} | sed -e 's/#%stop://g')
75
76 echo ${ALL_LEVELS}
77
78 return 0
79 }
80
81
82
83 rc_service_add() {
84 RC_SERVICE=$1
85 RC_START=$(get_start ${RC_SERVICE})
86 RC_STOP=$(get_stop ${RC_SERVICE})
87
88 echo "Adding ${RC_SERVICE} to:"
89 for i in $(get_run_levels ${RC_SERVICE})
90 do
91 case ${i} in
92 # start
93 ?:s)
94 [ "${i}" == "7:s" ] && i="sysinit:s"
95 echo -e "\t\t[rc${i/:s/}.d -> S${RC_START}]"
96 ln -snf ../init.d/${RC_SERVICE} \
97 /etc/rc.d/rc${i/:s/}.d/S${RC_START}${RC_SERVICE}
98 ;;
99 # stop
100 ?:k)
101 [ "${i}" == "7:k" ] && i="sysinit:k"
102 echo -e "\t\t[rc${i/:k/}.d -> K${RC_STOP}]"
103 ln -snf ../init.d/${RC_SERVICE} \
104 /etc/rc.d/rc${i/:k/}.d/K${RC_STOP}${RC_SERVICE}
105 ;;
106 *)
107 echo "error"
108 exit 1
109 ;;
110 esac
111 done
112 }
113
114 rc_service_del(){
115 RC_SERVICE=$1
116
117 echo "Deleting ${RC_SERVICE} from all runlevels:"
118 for i in 0 1 2 3 4 5 6 sysinit
119 do
120 for z in 00 01 02 03 04 05 06 07 08 09 $(seq 10 99)
121 do
122 if [ -L "/etc/rc.d/rc${i}.d/S${z}${RC_SERVICE}" ]
123 then
124 echo -e "\t\t[rc${i}.d <- S${z}]"
125 rm /etc/rc.d/rc${i}.d/S${z}${RC_SERVICE}
126 fi
127
128 if [ -L "/etc/rc.d/rc${i}.d/K${z}${RC_SERVICE}" ]
129 then
130 echo -e "\t\t[rc${i}.d <- K${z}]"
131 rm /etc/rc.d/rc${i}.d/K${z}${RC_SERVICE}
132 fi
133 done
134 done
135 }
136
137 rc_service_show() {
138 RC_SERVICE=$1
139
140 local ALL_RUNLEVELS
141
142 # read'em (single)
143 for i in $(seq 0 7)
144 do
145 if [ ${i} -eq 7 ]
146 then
147 level=sysinit
148 else
149 level=${i}
150 fi
151
152 for script in /etc/rc.d/rc${level}.d/*
153 do
154 x="$(basename ${script})"
155 if [ "${x/???/}" == "${RC_SERVICE}" ]
156 then
157 ALL_RUNLEVELS[${i}]=${x/${RC_SERVICE}/}
158 fi
159 done
160 done
161
162 #show them (single)
163 echo -n "${RC_SERVICE}: "
164 for i in $(seq 0 7)
165 do
166 if [ ! -z "${ALL_RUNLEVELS[${i}]}" ]
167 then
168 echo -n "[${i}:${ALL_RUNLEVELS[${i}]}] "
169 fi
170 done
171 echo
172 }
173
174 check_not_excluded(){
175 local SCRIPT
176 SCRIPT=$1
177
178 for i in ${RC_EXCLUDE}
179 do
180 if [ ${SCRIPT} == ${i} ]
181 then
182 return 1
183 fi
184 done
185
186 return 0
187 }
188
189
190 chg_initdefault() {
191 local newinitdef
192 declare -i newinitdef="$1"
193
194 if [ -z "$newinitdef" ]
195 then
196 echo "You must give an initlevel."
197 exit 1
198 fi
199
200 if [ $newinitdef -le 0 -a $newinitdef -ge 6 ]
201 then
202 echo "You can only choose initlevels between 1-5."
203 exit 1
204 fi
205
206 current=$(cat /etc/inittab|grep initdefault)
207
208 cp /etc/inittab /etc/inittab-orig
209 sed -e "s/${current}/id:${newinitdef}:initdefault:/g" \
210 /etc/inittab-orig > /etc/inittab
211 if [ "$?" == "0" ]
212 then
213 rm -f /etc/inittab-orig
214 echo "Changed default initlevel to ${newinitdef} successfully."
215 exit 0
216 else
217 echo "Error: original inittab was saved to /etc/inittab-orig"
218 exit 1
219 fi
220 }
221
222 usage() {
223 echo "Magellan RC Configurator v${VERSION} -- Niels Rogalla (niro@magellan-linux.de)"
224 echo -e "\nUsage: $(basename $0) [Option] [File] ..."
225 echo -e " add adds script to runlevel"
226 echo -e " del deletes script from runlevel"
227 echo -e " show shows current runlevel settings"
228 echo -e " default x changes default runlevel to x"
229 echo -e "\n"
230 }
231
232 case $1 in
233 add)
234 rc_service_add $2
235 ;;
236 del)
237 rc_service_del $2
238 ;;
239 show)
240 # show all
241 if [ -z "$2" ]
242 then
243 echo "Currently configured Services:"
244 for i in ${RC_INIT_BASE}/*
245 do
246 x=$(basename ${i})
247 if check_not_excluded ${x}
248 then
249 rc_service_show ${x}
250 fi
251 done
252 else
253 echo "Currently configured Services:"
254 rc_service_show $2
255 fi
256 ;;
257 default)
258 chg_initdefault $2
259 ;;
260 *)
261 usage
262 ;;
263 esac

Properties

Name Value
svn:executable *