Contents of /alx-src/trunk/alxconfig-ng/init.d/alxsettings
Parent Directory | Revision Log
Revision 221 -
(show annotations)
(download)
Tue Mar 8 20:49:14 2005 UTC (19 years, 6 months ago) by niro
File size: 30392 byte(s)
Tue Mar 8 20:49:14 2005 UTC (19 years, 6 months ago) by niro
File size: 30392 byte(s)
new
1 | #!/bin/bash |
2 | |
3 | # <niro@magellan-linux.de> |
4 | |
5 | #%rlevels: 7:s 0:k 6:k |
6 | #%start: 41 |
7 | #%stop: 01 |
8 | |
9 | #deps |
10 | #%needs: |
11 | #%before: |
12 | #%after: |
13 | |
14 | # checks first if the client was already configured and if it has an valid serial |
15 | # if not it runs the autoconfiguration script |
16 | # these settings will be used for client setup |
17 | # |
18 | # if client was valid it first will check if his settings against the server |
19 | # if no changes are at server side they will be kept, if yes the get updated. |
20 | # the server settings has higher priority. |
21 | |
22 | # +-----+ |
23 | # |start| |
24 | # +-----+ |
25 | # | |
26 | # | |
27 | # start_preliminary_network |
28 | # | |
29 | # | n |
30 | # serial_check -------> get_new_serial |
31 | # | | |
32 | # y| | |
33 | # | n | |
34 | # check_is_configured ----> run_hw_detection |
35 | # | | |
36 | # y| | |
37 | # n | | |
38 | # +--------cfg_equal_to_db import_settings_to_db |
39 | # | | | |
40 | # update_from_db y| | |
41 | # | | | |
42 | # set_is_configured | set_is_configured |
43 | # +-----------------| | |
44 | # +----------------------+ |
45 | # | |
46 | # | |
47 | # stop_preliminary_network |
48 | # | |
49 | # | |
50 | # +----+ |
51 | # |done| |
52 | # +----+ |
53 | # | |
54 | # | |
55 | # normal_system_bootup |
56 | # | |
57 | # . |
58 | # . |
59 | # . |
60 | # |
61 | # |
62 | # |
63 | |
64 | source /etc/sysconfig/rc |
65 | source $rc_functions |
66 | |
67 | #mysql settings |
68 | source /etc/alx-config/config.rc |
69 | source /opt/alx-config/functions/mysqlfunctions |
70 | source /opt/alx-config/functions/alx-mysql-functions |
71 | |
72 | #check if mysql is available |
73 | [ -x /usr/bin/mysql ] && MYSQL_ALX=true |
74 | |
75 | #other needed vars |
76 | ALX_HW_DETECT=false |
77 | ALX_NETWORK_SETUP=false |
78 | ALX_XSERVER_SETUP=false |
79 | ALX_SESSION_SETUP=false |
80 | ALX_PRINTER_SETUP=false |
81 | |
82 | #unset vars which may kill us |
83 | unset ALX_SERIAL ALX_STATE |
84 | |
85 | |
86 | #setup needed directories |
87 | [ ! -d /etc/alx-config/state ] && install -d /etc/alx-config/state |
88 | |
89 | |
90 | # still a need to implement this ? |
91 | # #needed to detect usb/livecd boot |
92 | # if [ -e /.bootdev ] |
93 | # then |
94 | # source /.bootdev |
95 | # else |
96 | # echo "Couldn't find /.bootdev. Aborting." |
97 | # exit 1 |
98 | # fi |
99 | |
100 | # still a need to implement this ? --> media-check ? |
101 | settings_import() { |
102 | if [ "${FSTYPE}" == "vfat" ] |
103 | then |
104 | if [ -e /mnt/cdrom/settings/system ] |
105 | then |
106 | echo -e ${COLOREDSTAR}"Importing old alx-settings ..." |
107 | ( cp -R /mnt/cdrom/settings/system/* /etc/alx-config/settings/menu && |
108 | source /etc/alx-config/config.rc && |
109 | source /opt/alx-config/Configurator/config_functions.sh && |
110 | setup_xfree > /dev/null 2>&1 && |
111 | setup_modules > /dev/null 2>&1 && |
112 | setup_network > /dev/null 2>&1 && |
113 | #setup_printers > /dev/null 2>&1 && |
114 | setup_sessions > /dev/null 2>&1 && |
115 | touch /etc/alx-config/imported ) |
116 | evaluate_retval |
117 | fi |
118 | fi |
119 | } |
120 | |
121 | |
122 | # this thingy needs an complete rewrite. |
123 | # first get all settings from db server, |
124 | # than check against local system settings, |
125 | # if there are any differences, update the local settings, |
126 | # as the server has a higher priority. |
127 | # Important: write local settings only if they make sense, |
128 | # to have a fallback in case the server is down! |
129 | #get_settings_from_server(){ |
130 | # #some needed arrays |
131 | # #ARRAY_NETWORK #module domain networking netmask dns gateway |
132 | # #SESSION # |
133 | # #GRAFIK # |
134 | # |
135 | # echo "Importing now old Settings ..." |
136 | # |
137 | # local serial module domain networking netmask dns gateway i x all |
138 | # |
139 | # declare -i i=0 |
140 | # |
141 | # #get hostname from database |
142 | # MY_HOSTNAME=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
143 | # "select hostname from cfg_serial where id='${ALX_SERIAL}'") |
144 | # |
145 | # #get network settings from database |
146 | # all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
147 | # "select module, |
148 | # domain, |
149 | # networking, |
150 | # netmask, |
151 | # dns, |
152 | # gateway, |
153 | # broadcast, |
154 | # ip |
155 | # from cfg_network where serial='${ALX_SERIAL}'") |
156 | # #split'em up and put in array |
157 | # for x in ${all} |
158 | # do |
159 | # ARRAY_NETWORK[${i}]=${x} |
160 | # ((i++)) |
161 | # done |
162 | # echo " Network:" |
163 | # echo " MODULE: ${ARRAY_NETWORK[0]}" |
164 | # echo " IP: ${ARRAY_NETWORK[7]}" |
165 | # echo " HOSTNAME: ${MY_HOSTNAME}" |
166 | # echo " DOMAIN: ${ARRAY_NETWORK[1]}" |
167 | # echo " NETWORKING: ${ARRAY_NETWORK[2]}" |
168 | # echo " NETMASK: ${ARRAY_NETWORK[3]}" |
169 | # echo " DNS: ${ARRAY_NETWORK[4]}" |
170 | # echo " GATEWAY: ${ARRAY_NETWORK[5]}" |
171 | # echo " BROADCAST: ${ARRAY_NETWORK[6]}" |
172 | # echo |
173 | # |
174 | # #get x settings from database |
175 | # local module resolution |
176 | # |
177 | # #reset i |
178 | # declare -i i=0 |
179 | # all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
180 | # "select module, |
181 | # resolution |
182 | # from cfg_grafik where serial='${ALX_SERIAL}'") |
183 | # #split'em up and put in array |
184 | # for x in ${all} |
185 | # do |
186 | # ARRAY_GRAFIK[${i}]=${x} |
187 | # ((i++)) |
188 | # done |
189 | # |
190 | # echo " VGA:" |
191 | # echo " MODULE: ${ARRAY_GRAFIK[0]}" |
192 | # echo " RESOLUTION: ${ARRAY_GRAFIK[1]}" |
193 | # echo |
194 | # |
195 | # #get ica-sessions from database |
196 | # ARRAY_SESSIONS=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
197 | # "select session from cfg_session where serial='${ALX_SERIAL}'") |
198 | # |
199 | # echo " SESSIONS:" |
200 | # declare -i i=0 |
201 | # for x in ${ARRAY_SESSIONS} |
202 | # do |
203 | # ((i++)) |
204 | # echo " SESSION${i}: ${x}" |
205 | # done |
206 | # echo |
207 | # |
208 | # #now write these settings |
209 | # local SETTINGSPATH |
210 | # |
211 | # #network |
212 | # |
213 | # #settings must be also set on system, so we put this to menu |
214 | # SETTINGSPATH=${SETTINGS_TEMPLATE}/menu |
215 | # |
216 | # [ ! -d ${SETTINGSPATH}/modules ] && install -d ${SETTINGSPATH}/modules |
217 | # echo "${ARRAY_NETWORK[0]}" > ${SETTINGSPATH}/modules/modules |
218 | # |
219 | # [ ! -d ${SETTINGSPATH}/network ] && install -d ${SETTINGSPATH}/network |
220 | # echo "${MY_HOSTNAME}" > ${SETTINGSPATH}/network/hostname |
221 | # echo "${ARRAY_NETWORK[1]}" > ${SETTINGSPATH}/network/domain |
222 | # echo "${ARRAY_NETWORK[2]}" > ${SETTINGSPATH}/network/networking |
223 | # [ -n "${ARRAY_NETWORK[3]}" ] && echo "${ARRAY_NETWORK[3]}" > ${SETTINGSPATH}/network/netmask |
224 | # [ -n "${ARRAY_NETWORK[4]}" ] && echo "${ARRAY_NETWORK[4]}" > ${SETTINGSPATH}/network/dns |
225 | # [ -n "${ARRAY_NETWORK[5]}" ] && echo "${ARRAY_NETWORK[5]}" > ${SETTINGSPATH}/network/gateway |
226 | # [ -n "${ARRAY_NETWORK[6]}" ] && echo "${ARRAY_NETWORK[6]}" > ${SETTINGSPATH}/network/broadcast |
227 | # [ -n "${ARRAY_NETWORK[7]}" ] && echo "${ARRAY_NETWORK[7]}" > ${SETTINGSPATH}/network/ip |
228 | |
229 | |
230 | validate_networking(){ |
231 | #source /opt/alx-config/Configurator/config_functions.sh |
232 | |
233 | local x i all LOCAL_NETWORK DB_NETWORK SETTINGSPATH |
234 | |
235 | #all arrays: |
236 | # -> hostname modules domain networking ip netmask dns gateway broadcast |
237 | |
238 | #networking |
239 | #get settings from local system |
240 | SETTINGSPATH=${SETTINGS_TEMPLATE}/system |
241 | declare -i i=0 |
242 | for x in network/hostname \ |
243 | modules/modules \ |
244 | network/domain \ |
245 | network/networking \ |
246 | network/ip \ |
247 | network/netmask \ |
248 | network/dns \ |
249 | network/gateway \ |
250 | network/broadcast |
251 | do |
252 | if [ -f ${SETTINGSPATH}/${x} ] |
253 | then |
254 | #file exist, then use content |
255 | LOCAL_NETWORK[${i}]="$(< ${SETTINGSPATH}/${x})" |
256 | else |
257 | LOCAL_NETWORK[${i}]="" |
258 | fi |
259 | ((i++)) |
260 | done |
261 | |
262 | #get settings from database |
263 | # DB_NETWORK[0]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
264 | # "select hostname from cfg_network where serial='${ALX_SERIAL}'") |
265 | |
266 | all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
267 | "select hostname, |
268 | module, |
269 | domain, |
270 | networking, |
271 | ip, |
272 | netmask, |
273 | dns, |
274 | gateway, |
275 | broadcast |
276 | from cfg_network where serial='${ALX_SERIAL}'") |
277 | |
278 | #split'em up and put in an array |
279 | declare -i i=0 |
280 | for x in ${all} |
281 | do |
282 | DB_NETWORK[${i}]=${x} |
283 | ((i++)) |
284 | done |
285 | |
286 | #needed by the small hotfix |
287 | local FIX_ME |
288 | FIX_ME="${DB_NETWORK[2]}" |
289 | |
290 | |
291 | #now compare this stuff if they are equal |
292 | for ((i=0; i < 9; i++)) |
293 | do |
294 | if [ "${DB_NETWORK[${i}]}" = "${LOCAL_NETWORK[${i}]}" ] |
295 | then |
296 | echo "${i}: ${DB_NETWORK[${i}]} == ${LOCAL_NETWORK[${i}]}" |
297 | |
298 | #delete equal stuff from DB_NETWORK |
299 | DB_NETWORK[${i}]="*NULL*" |
300 | |
301 | else |
302 | echo "${i}: ${DB_NETWORK[${i}]} != ${LOCAL_NETWORK[${i}]}" |
303 | fi |
304 | done |
305 | |
306 | |
307 | #update configs |
308 | SETTINGSPATH=${SETTINGS_TEMPLATE}/menu |
309 | declare -i i=0 |
310 | for x in network/hostname \ |
311 | modules/modules \ |
312 | network/domain \ |
313 | network/networking \ |
314 | network/ip \ |
315 | network/netmask \ |
316 | network/dns \ |
317 | network/gateway \ |
318 | network/broadcast |
319 | do |
320 | #update only staff wich wasn't overwritten |
321 | if [ "${DB_NETWORK[${i}]}" != "*NULL*" ] |
322 | then |
323 | #create directory if not exist |
324 | if [ ! -d $(dirname ${SETTINGSPATH}/${x}) ] |
325 | then |
326 | install -d $(dirname ${SETTINGSPATH}/${x}) |
327 | fi |
328 | echo "${DB_NETWORK[${i}]}" > ${SETTINGSPATH}/${x} |
329 | |
330 | # theses fucking config functions: |
331 | # network gets only updated, |
332 | # if ${SETTINGS_TEMPLATE}/menu/network/networking exist |
333 | # so we force an update here |
334 | if [ ! -f ${SETTINGSPATH}/network/networking ] |
335 | then |
336 | [ ! -d ${SETTINGSPATH}/network ] && install -d ${SETTINGSPATH}/network |
337 | echo "${FIX_ME}" > ${SETTINGSPATH}/network/networking |
338 | fi |
339 | |
340 | #set update flag |
341 | ALX_NETWORK_SETUP=true |
342 | fi |
343 | ((i++)) |
344 | done |
345 | } |
346 | |
347 | |
348 | |
349 | validate_xserver(){ |
350 | #source /opt/alx-config/Configurator/config_functions.sh |
351 | |
352 | local x i all LOCAL_XSERVER DB_XSERVER SETTINGSPATH |
353 | |
354 | #all arrays: |
355 | # -> xmodule resolution depth mouse monvendor monmodel hsync vref |
356 | |
357 | #xserver |
358 | #get settings from local system |
359 | #vga |
360 | SETTINGSPATH=${SETTINGS_TEMPLATE}/system |
361 | declare -i i=0 |
362 | for x in vga/vga \ |
363 | vga/vgares \ |
364 | vga/vgadepth |
365 | do |
366 | if [ -f ${SETTINGSPATH}/${x} ] |
367 | then |
368 | #file exist, then use content |
369 | LOCAL_XSERVER[${i}]="$(< ${SETTINGSPATH}/${x})" |
370 | else |
371 | LOCAL_XSERVER[${i}]="" |
372 | fi |
373 | ((i++)) |
374 | done |
375 | |
376 | #mouse |
377 | if [ -f ${SETTINGSPATH}/mouse/mouse ] |
378 | then |
379 | #file exist, then use content |
380 | LOCAL_XSERVER[3]="$(< ${SETTINGSPATH}/mouse/mouse)" |
381 | else |
382 | LOCAL_XSERVER[3]="" |
383 | fi |
384 | |
385 | #monitor |
386 | local myvendor mymodel hsync vref |
387 | if [ -f ${SETTINGSPATH}/monitor/monitor ] |
388 | then |
389 | source ${SETTINGSPATH}/monitor/monitor |
390 | |
391 | declare -i i=4 |
392 | for x in "${myvendor}" \ |
393 | "${mymodel}" \ |
394 | "${hsync}" \ |
395 | "${vref}" |
396 | do |
397 | LOCAL_XSERVER[${i}]="${x}" |
398 | ((i++)) |
399 | done |
400 | else |
401 | LOCAL_XSERVER[4]="" |
402 | LOCAL_XSERVER[5]="" |
403 | LOCAL_XSERVER[6]="" |
404 | LOCAL_XSERVER[7]="" |
405 | fi |
406 | |
407 | |
408 | #get settings from database |
409 | all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
410 | "select module, |
411 | resolution, |
412 | depth |
413 | from cfg_graphic where serial='${ALX_SERIAL}'") |
414 | |
415 | #split'em up and put in an array |
416 | declare -i i=0 |
417 | for x in ${all} |
418 | do |
419 | DB_XSERVER[${i}]=${x} |
420 | ((i++)) |
421 | done |
422 | |
423 | # read mouse |
424 | DB_XSERVER[3]=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
425 | "select mouse from cfg_input where serial='${ALX_SERIAL}'") |
426 | |
427 | #monitors |
428 | # all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
429 | # "select vendor, |
430 | # model, |
431 | # hsync, |
432 | # vrefresh |
433 | # from cfg_monitor where serial='${ALX_SERIAL}'") |
434 | |
435 | all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
436 | "select vendor, |
437 | model, |
438 | hsync, |
439 | vrefresh |
440 | from list_monitors |
441 | inner join cfg_graphic |
442 | on cfg_graphic.monitorid=list_monitors.id;") |
443 | |
444 | #split'em up and put in an array |
445 | declare -i i=4 |
446 | for x in ${all} |
447 | do |
448 | DB_XSERVER[${i}]=${x} |
449 | ((i++)) |
450 | done |
451 | |
452 | # #now compare this stuff if they are equal |
453 | # for ((i=0; i < 8; i++)) |
454 | # do |
455 | # if [ "${DB_XSERVER[${i}]}" = "${LOCAL_XSERVER[${i}]}" ] |
456 | # then |
457 | # echo "${i}: ${DB_XSERVER[${i}]} == ${LOCAL_XSERVER[${i}]}" |
458 | # |
459 | # #delete equal stuff from DB_NETWORK |
460 | # DB_XSERVER[${i}]="*NULL*" |
461 | # |
462 | # else |
463 | # echo "${i}: ${DB_XSERVER[${i}]} != ${LOCAL_XSERVER[${i}]}" |
464 | # fi |
465 | # done |
466 | # |
467 | # |
468 | # #update configs |
469 | # SETTINGSPATH=${SETTINGS_TEMPLATE}/menu |
470 | # #xserver general |
471 | # declare -i i=0 |
472 | # for x in vga/vga \ |
473 | # vga/vgares \ |
474 | # vga/vgadepth \ |
475 | # mouse/mouse |
476 | # do |
477 | # #update only staff wich wasn't overwritten |
478 | # if [ "${DB_XSERVER[${i}]}" != "*NULL*" ] |
479 | # then |
480 | # #create directory if not exist |
481 | # if [ ! -d $(dirname ${SETTINGSPATH}/${x}) ] |
482 | # then |
483 | # install -d $(dirname ${SETTINGSPATH}/${x}) |
484 | # fi |
485 | # echo "${DB_XSERVER[${i}]}" > ${SETTINGSPATH}/${x} |
486 | # #set update flag |
487 | # ALX_XSERVER_SETUP=true |
488 | # fi |
489 | # ((i++)) |
490 | # done |
491 | # |
492 | # #xserver monitors |
493 | # if [ "${DB_XSERVER[4]}" != "*NULL*" \ |
494 | # -o "${DB_XSERVER[5]}" != "*NULL*" \ |
495 | # -o "${DB_XSERVER[6]}" != "*NULL*" \ |
496 | # -o "${DB_XSERVER[7]}" != "*NULL*" ] |
497 | # then |
498 | # if [ ! -d ${SETTINGSPATH}/monitor ] |
499 | # then |
500 | # install -d ${SETTINGSPATH}/monitor |
501 | # fi |
502 | # echo "myvendor=\"${DB_XSERVER[4]}\"" > ${SETTINGSPATH}/monitor/monitor |
503 | # echo "mymodel=\"${DB_XSERVER[5]}\"" >> ${SETTINGSPATH}/monitor/monitor |
504 | # echo "hsync=\"${DB_XSERVER[6]}\"" >> ${SETTINGSPATH}/monitor/monitor |
505 | # echo "vref=\"${DB_XSERVER[7]}\"" >> ${SETTINGSPATH}/monitor/monitor |
506 | # |
507 | # #set update flag |
508 | # ALX_XSERVER_SETUP=true |
509 | # fi |
510 | |
511 | # - damn fucking setup_xfree routine need to rewrite this fucking stuff - |
512 | # setup_xfree will only run |
513 | # if ${SETTINGS_TEMPLATE}/menu/vga/vga exist |
514 | # so we must *always* update *all* settings if something has changed |
515 | |
516 | #now compare this stuff if they are equal |
517 | for ((i=0; i < 8; i++)) |
518 | do |
519 | if [ "${DB_XSERVER[${i}]}" = "${LOCAL_XSERVER[${i}]}" ] |
520 | then |
521 | echo "${i}: ${DB_XSERVER[${i}]} == ${LOCAL_XSERVER[${i}]}" |
522 | |
523 | #delete equal stuff from DB_NETWORK |
524 | #DB_XSERVER[${i}]="*NULL*" |
525 | |
526 | else |
527 | echo "${i}: ${DB_XSERVER[${i}]} != ${LOCAL_XSERVER[${i}]}" |
528 | fi |
529 | done |
530 | |
531 | SETTINGSPATH=${SETTINGS_TEMPLATE}/menu |
532 | if [ "${DB_XSERVER[0]}" != "*NULL*" \ |
533 | -o "${DB_XSERVER[1]}" != "*NULL*" \ |
534 | -o "${DB_XSERVER[2]}" != "*NULL*" \ |
535 | -o "${DB_XSERVER[3]}" != "*NULL*" \ |
536 | -o "${DB_XSERVER[4]}" != "*NULL*" \ |
537 | -o "${DB_XSERVER[5]}" != "*NULL*" \ |
538 | -o "${DB_XSERVER[6]}" != "*NULL*" \ |
539 | -o "${DB_XSERVER[7]}" != "*NULL*" ] |
540 | then |
541 | [ ! -d ${SETTINGSPATH}/vga ] && install -d ${SETTINGSPATH}/vga |
542 | [ ! -d ${SETTINGSPATH}/mouse ] && install -d ${SETTINGSPATH}/mouse |
543 | [ ! -d ${SETTINGSPATH}/monitor ] && install -d ${SETTINGSPATH}/monitor |
544 | |
545 | echo "${DB_XSERVER[0]}" > ${SETTINGSPATH}/vga/vga |
546 | echo "${DB_XSERVER[1]}" > ${SETTINGSPATH}/vga/vgares |
547 | echo "${DB_XSERVER[2]}" > ${SETTINGSPATH}/vga/vgadepth |
548 | echo "${DB_XSERVER[3]}" > ${SETTINGSPATH}/mouse/mouse |
549 | |
550 | echo "myvendor=\"${DB_XSERVER[4]}\"" > ${SETTINGSPATH}/monitor/monitor |
551 | echo "mymodel=\"${DB_XSERVER[5]}\"" >> ${SETTINGSPATH}/monitor/monitor |
552 | echo "hsync=\"${DB_XSERVER[6]}\"" >> ${SETTINGSPATH}/monitor/monitor |
553 | echo "vref=\"${DB_XSERVER[7]}\"" >> ${SETTINGSPATH}/monitor/monitor |
554 | |
555 | #set update flag |
556 | ALX_XSERVER_SETUP=true |
557 | fi |
558 | } |
559 | |
560 | |
561 | validate_sessions(){ |
562 | #source /opt/alx-config/Configurator/config_functions.sh |
563 | |
564 | local x i all LOCAL_SESSIONS DB_SESSIONS SETTINGSPATH count |
565 | |
566 | #all arrays: |
567 | # -> session1 session2 ... sessionN |
568 | |
569 | |
570 | #no LOCAL_SESSIONS here, needs bubblesort |
571 | |
572 | #get settings from database |
573 | all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
574 | "select session from cfg_sessions where serial='${ALX_SERIAL}'") |
575 | |
576 | #split'em up and put in an array (only if $all not zero) |
577 | declare -i i=0 |
578 | if [ -n "${all}" ] |
579 | then |
580 | for x in ${all} |
581 | do |
582 | DB_SESSIONS[${i}]=${x} |
583 | ((i++)) |
584 | done |
585 | count=${i} |
586 | else |
587 | count=0 |
588 | fi |
589 | |
590 | ## no compare here, can only done with bubblesort or s.th like that |
591 | # shows only the new sessions |
592 | declare -i i=0 |
593 | #count=${#DB_SESSIONS[*]} #---> not working gets always 1, why ? |
594 | |
595 | echo "Number of new sessions: ${count}" |
596 | for ((i=0; i < count; i++)) |
597 | do |
598 | echo "${i} - ${DB_SESSIONS[${i}]}" |
599 | done |
600 | |
601 | #update local configs |
602 | SETTINGSPATH=${SETTINGS_TEMPLATE}/menu |
603 | declare -i i=0 |
604 | |
605 | #count=${#DB_SESSIONS[*]} |
606 | |
607 | if [ ${count} -gt 0 ] |
608 | then |
609 | #create directory if not exist |
610 | [ ! -d ${SETTINGSPATH}/sessions ] && install -d ${SETTINGSPATH}/sessions |
611 | |
612 | #delete old sessions |
613 | echo -n > ${SETTINGSPATH}/sessions/sessions |
614 | |
615 | for ((i=0; i < count; i++)) |
616 | do |
617 | echo "${DB_SESSIONS[${i}]}" >> ${SETTINGSPATH}/sessions/sessions |
618 | done |
619 | |
620 | #set update flag |
621 | ALX_SESSION_SETUP=true |
622 | fi |
623 | } |
624 | |
625 | |
626 | validate_printing(){ |
627 | #source /opt/alx-config/Configurator/config_functions.sh |
628 | |
629 | local x i k all LOCAL_PRINTER DB_PRINTER SETTINGSPATH count |
630 | |
631 | #all arrays: [2 dimensions !] |
632 | # -> name1 name2 ... nameN |
633 | # -> name1 printingport ip share |
634 | |
635 | #later on, for now -> name1 port1 ip1 share1 name2 .... |
636 | # seperator is 4 |
637 | |
638 | #local PRINTERNAME PRINTING IP SHARE |
639 | |
640 | # update *always* printers from database; |
641 | # compare with local settings cannot be done yet |
642 | |
643 | #get settings from database |
644 | all=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
645 | "select printer_name, |
646 | port, |
647 | ip, |
648 | share |
649 | from cfg_printers where serial='${ALX_SERIAL}'") |
650 | |
651 | #split'em up and put in an array |
652 | declare -i i=0 |
653 | declare -i k=0 |
654 | |
655 | if [ -n "${all}" ] |
656 | then |
657 | for x in ${all} |
658 | do |
659 | ((k++)) |
660 | DB_PRINTER[${i}]="${DB_PRINTER[${i}]} ${x}" |
661 | if [ ${k} -eq 4 ] |
662 | then |
663 | ((i++)) |
664 | #reset $k |
665 | declare -i k=0 |
666 | fi |
667 | done |
668 | count=${i} |
669 | else |
670 | count=0 |
671 | fi |
672 | |
673 | #echo settings |
674 | echo "Number of new printers: ${count}" |
675 | for ((i=0; i < count; i++)) |
676 | do |
677 | echo "${i} printer:" |
678 | for x in ${DB_PRINTER[${i}]} |
679 | do |
680 | echo " ${x}" |
681 | done |
682 | done |
683 | |
684 | #import settings (only if counter > 0) |
685 | local prnset |
686 | |
687 | #delete all printers (*always*) |
688 | if [ -d ${SETTINGS_TEMPLATE}/system/printing ] |
689 | then |
690 | SETTINGSPATH=${SETTINGS_TEMPLATE}/menu |
691 | [ -d ${SETTINGSPATH}/delete ] && rm -rf ${SETTINGSPATH}/delete |
692 | install -d ${SETTINGSPATH}/delete |
693 | mv -f ${SETTINGS_TEMPLATE}/system/printing/* ${SETTINGSPATH}/delete |
694 | rm -rf ${SETTINGS_TEMPLATE}/system/printing |
695 | |
696 | #set update flag (*always*) |
697 | ALX_PRINTER_SETUP=true |
698 | fi |
699 | |
700 | if [ ${count} -gt 0 ] |
701 | then |
702 | SETTINGSPATH=${SETTINGS_TEMPLATE}/menu |
703 | |
704 | [ ! -d ${SETTINGSPATH}/printing ] && install -d ${SETTINGSPATH}/printing |
705 | for ((i=0; i < count; i++)) |
706 | do |
707 | declare -i k=0 |
708 | for x in ${DB_PRINTER[${i}]} |
709 | do |
710 | prnset[${k}]=${x} |
711 | ((k++)) |
712 | done |
713 | |
714 | echo "PRINTERNAME=${prnset[0]}" > ${SETTINGSPATH}/printing/${prnset[0]} |
715 | echo "PRINTING=${prnset[1]}" >> ${SETTINGSPATH}/printing/${prnset[0]} |
716 | echo "IP=${prnset[2]}" >> ${SETTINGSPATH}/printing/${prnset[0]} |
717 | echo "SHARE=${prnset[3]}" >> ${SETTINGSPATH}/printing/${prnset[0]} |
718 | done |
719 | |
720 | #set update flag (*always*) |
721 | ALX_PRINTER_SETUP=true |
722 | fi |
723 | |
724 | } |
725 | |
726 | update_system_settings(){ |
727 | source /opt/alx-config/Configurator/config_functions.sh |
728 | |
729 | echo -e ${COLMAGENTA}"Checking system setup ..."${COLDEFAULT} |
730 | |
731 | echo |
732 | echo "network" |
733 | validate_networking |
734 | echo |
735 | echo "xserver" |
736 | validate_xserver |
737 | echo |
738 | echo "sessions" |
739 | validate_sessions |
740 | echo |
741 | #echo "printers" |
742 | #validate_printing |
743 | #echo |
744 | |
745 | if [ "${ALX_NETWORK_SETUP}" == "true" ] |
746 | then |
747 | echo -e ${COLMAGENTA}"Updating network settings"${COLDEFAULT} |
748 | setup_modules |
749 | setup_network |
750 | fi |
751 | |
752 | if [ "${ALX_XSERVER_SETUP}" == "true" ] |
753 | then |
754 | echo -e ${COLMAGENTA}"Updating xserver settings"${COLDEFAULT} |
755 | setup_xfree |
756 | fi |
757 | |
758 | if [ "${ALX_SESSION_SETUP}" == "true" ] |
759 | then |
760 | echo -e ${COLMAGENTA}"Updating session settings"${COLDEFAULT} |
761 | setup_sessions |
762 | fi |
763 | |
764 | #if [ "${ALX_PRINTER_SETUP}" == "true" ] |
765 | #then |
766 | # echo -e ${COLMAGENTA}"Updating printer settings"${COLDEFAULT} |
767 | # setup_printers |
768 | #fi |
769 | |
770 | #clean up temp files |
771 | local SETTINGSPATH |
772 | SETTINGSPATH=${SETTINGS_TEMPLATE}/menu |
773 | #[ -d ${SETTINGSPATH} ] && rm -rf ${SETTINGSPATH} |
774 | } |
775 | |
776 | get_system_serial(){ |
777 | |
778 | local CUR_IP CUR_MAC CUR_MTIME |
779 | |
780 | #check if serial file exists |
781 | if [ -f /etc/alx-config/serial ] |
782 | then |
783 | source /etc/alx-config/serial |
784 | |
785 | # if system is already configured, it *has* a hostname. |
786 | # so we take the hostname of this system here |
787 | source /etc/hostname |
788 | |
789 | #start preliminary networking (dhcp) |
790 | preliminary_network start |
791 | |
792 | CUR_IP=$(/sbin/ifconfig eth0 | sed -n '/addr:/s/ [^r]*..//gp') |
793 | CUR_MAC=$(/sbin/ifconfig eth0 | grep HWaddr | cut -d ' ' -f11) |
794 | CUR_MTIME=$(date +%s) |
795 | |
796 | echo -e ${COLOREDSTAR} "Trying to validate my serial ..." |
797 | |
798 | #nice serial output |
799 | $CURS_UP |
800 | $SET_WCOL |
801 | echo "[ SN: ${ALX_SERIAL} ]" |
802 | |
803 | # #is this system outdated ? |
804 | # #MY_HOSTNAME=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
805 | # # "select hostname from cfg_serial where id='${ALX_SERIAL}'") |
806 | # |
807 | # #we do this now with the date instead of the hostname |
808 | # local MY_ALX_REG_DATE |
809 | # MY_ALX_REG_DATE=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
810 | # "select mtime from client_serial where serial='${ALX_SERIAL}'") |
811 | # |
812 | # #if [ "${MY_HOSTNAME}" == "${HOSTNAME}" ] |
813 | # if [ "${MY_ALX_REG_DATE}" == "${ALX_REG_DATE}" ] |
814 | # then |
815 | # #set ALX_STATE to ok so everybody that everything was ok |
816 | # ALX_STATE=ok |
817 | # |
818 | # evaluate_retval |
819 | # else |
820 | # #print false (works only if this is the first statement here) |
821 | # evaluate_retval |
822 | # |
823 | # #set ALX_STATE to error so everybody sees there was an error |
824 | # ALX_STATE=error |
825 | # fi |
826 | |
827 | if validate_serial "${ALX_SERIAL}" "${ALX_REG_DATE}" "${CUR_MAC}" |
828 | then |
829 | ALX_STATE="ok" |
830 | else |
831 | ALX_STATE="invalid serial" |
832 | fi |
833 | |
834 | else |
835 | #run hardware detection |
836 | echo |
837 | echo -e ${COLMAGENTA}"Preparing system for first boot"${COLDEFAULT} |
838 | ALX_HW_DETECT=true |
839 | /etc/init.d/hwdetect start |
840 | |
841 | #set hostname to alx_default_hostname |
842 | [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx |
843 | HOSTNAME="${ALX_DEFAULT_HOSTNAME}" |
844 | |
845 | #update the hostname on the system for sure |
846 | echo "HOSTNAME=${HOSTNAME}" > /etc/hostname |
847 | |
848 | #start preliminary networking (dhcp) |
849 | preliminary_network start |
850 | |
851 | CUR_IP=$(/sbin/ifconfig eth0 | sed -n '/addr:/s/ [^r]*..//gp') |
852 | CUR_MAC=$(/sbin/ifconfig eth0 | grep HWaddr | cut -d ' ' -f11) |
853 | CUR_MTIME=$(date +%s) |
854 | |
855 | echo -e ${COLOREDSTAR} "Trying to get new serial ..." |
856 | |
857 | #request new serial |
858 | #ALX_REG_DATE="$(date +%F)" |
859 | |
860 | #we're using the mtime now (better for vaildating the serial) |
861 | mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
862 | "insert into client_serials( |
863 | mtime, |
864 | mac |
865 | ) |
866 | values( |
867 | '${CUR_MTIME}', |
868 | '${CUR_MAC}' |
869 | );" |
870 | |
871 | #then validate and retrieve serial |
872 | |
873 | ### warning must be changed that only the LAST ID will be fetched, ### |
874 | ### or you get error if the computer name and date are the same ### |
875 | ### you have more then one serial number than ### |
876 | |
877 | #not 100% working may get more than *one* id |
878 | #ALX_SERIAL=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
879 | # "select id from cfg_serial where datum='${ALX_REG_DATE}' and hostname='${HOSTNAME}'") |
880 | |
881 | #select highest id only (added max) |
882 | ALX_SERIAL=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
883 | "select max(serial) from client_serials where mtime='${CUR_MTIME}' and mac='${CUR_MAC}'") |
884 | |
885 | if [ "${ALX_SERIAL}" != NULL ] |
886 | then |
887 | #nice serial output |
888 | $CURS_UP |
889 | $SET_WCOL |
890 | echo "[ SN: ${ALX_SERIAL} ]" |
891 | |
892 | #set ALX_STATE to ok so everybody that everything was ok |
893 | ALX_STATE=ok |
894 | |
895 | echo "ALX_SERIAL=${ALX_SERIAL}" > /etc/alx-config/serial |
896 | echo "ALX_REG_DATE=${CUR_MTIME}" >> /etc/alx-config/serial |
897 | |
898 | evaluate_retval |
899 | else |
900 | #print false (works only if this is the first statement here) |
901 | evaluate_retval |
902 | |
903 | #set ALX_STATE to error so everybody sees there was an error |
904 | ALX_STATE=error |
905 | |
906 | #show an error that no new serial was found |
907 | #nice serial output |
908 | $CURS_UP |
909 | $SET_WCOL |
910 | echo -e "[ SN: ${COLRED}None, 0${COLDEFAULT} ]" |
911 | fi |
912 | fi |
913 | |
914 | #write current state to temp file |
915 | echo "ALX_STATE=${ALX_STATE}" > /etc/alx-config/state/state |
916 | } |
917 | |
918 | |
919 | check_is_configured() { |
920 | if [ -f /etc/alx-config/state/configured ] |
921 | then |
922 | export ALX_CONFIGURED=true |
923 | else |
924 | export ALX_CONFIGURED=false |
925 | fi |
926 | } |
927 | |
928 | |
929 | # imports current settings to the database resolved by the hardware detection |
930 | import_settings_to_db() { |
931 | #note: networking is always 'dhcp' if hw was autodetected |
932 | #note: default_domain/hostname is set in config.rc |
933 | |
934 | #to be safe, we do some sanity checks |
935 | [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain |
936 | [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx |
937 | |
938 | #vars used by hwdetect |
939 | local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME |
940 | local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER |
941 | local MOUSETYPE XMOUSETYPE FULLNAME DEVICE |
942 | |
943 | #get setting from hwdetect |
944 | source /etc/sysconfig/hwsetup/knoppix |
945 | source /etc/sysconfig/hwsetup/mouse |
946 | |
947 | echo |
948 | echo -e ${COLMAGENTA}"Importing detected settings to database"${COLDEFAULT} |
949 | |
950 | #network |
951 | echo -e " Network settings ..." |
952 | mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
953 | "insert into cfg_network( |
954 | hostname, |
955 | serial, |
956 | module, |
957 | domain, |
958 | networking |
959 | ) |
960 | values( |
961 | '${ALX_DEFAULT_HOSTNAME}', |
962 | '${ALX_SERIAL}', |
963 | '${NETCARD_DRIVER}', |
964 | '${ALX_DEFAULT_DOMAIN}', |
965 | 'dhcp' |
966 | );" |
967 | evaluate_retval |
968 | |
969 | #xserver |
970 | echo -e " Graphic settings ..." |
971 | #xserver general |
972 | ( mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
973 | "insert into cfg_graphic( |
974 | serial, |
975 | module, |
976 | resolution, |
977 | depth |
978 | ) |
979 | values( |
980 | '${ALX_SERIAL}', |
981 | '${XMODULE}', |
982 | '1024x768', |
983 | '16' |
984 | );"; |
985 | #xserver monitor |
986 | mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
987 | "insert into cfg_monitor( |
988 | serial, |
989 | vendor, |
990 | model, |
991 | hsync, |
992 | vrefresh |
993 | ) |
994 | values( |
995 | '${ALX_SERIAL}', |
996 | 'Aamazing', |
997 | 'CM-1528-FS', |
998 | '28-64', |
999 | '47-104' |
1000 | );"; |
1001 | |
1002 | # input |
1003 | mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \ |
1004 | "insert into cfg_input(serial,mouse) values('${ALX_SERIAL}','${XMOUSETYPE}');";) |
1005 | evaluate_retval |
1006 | } |
1007 | |
1008 | # imports current settings to the local system resolved by the hardware detection |
1009 | import_settings_local(){ |
1010 | #note: networking is always 'dhcp' if hw was autodetected |
1011 | #note: default_domain/hostname is set in config.rc |
1012 | |
1013 | #to be safe, we do some sanity checks |
1014 | [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain |
1015 | [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx |
1016 | |
1017 | #vars used by hwdetect |
1018 | local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME |
1019 | local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER |
1020 | local MOUSETYPE XMOUSETYPE FULLNAME DEVICE |
1021 | |
1022 | |
1023 | #get setting from hwdetect |
1024 | source /etc/sysconfig/hwsetup/knoppix |
1025 | source /etc/sysconfig/hwsetup/mouse |
1026 | |
1027 | echo |
1028 | echo -e ${COLMAGENTA}"Importing detected settings to local system"${COLDEFAULT} |
1029 | |
1030 | |
1031 | #allready configured, no update needed so we put it to system |
1032 | SETTINGSPATH=${SETTINGS_TEMPLATE}/system |
1033 | |
1034 | |
1035 | #network |
1036 | echo -e " Network settings ..." |
1037 | |
1038 | [ ! -d ${SETTINGSPATH}/modules ] && install -d ${SETTINGSPATH}/modules |
1039 | echo "${NETCARD_DRIVER}" > ${SETTINGSPATH}/modules/modules |
1040 | |
1041 | [ ! -d ${SETTINGSPATH}/network ] && install -d ${SETTINGSPATH}/network |
1042 | ( echo "${ALX_DEFAULT_HOSTNAME}" > ${SETTINGSPATH}/network/hostname; |
1043 | echo "${ALX_DEFAULT_DOMAIN}" > ${SETTINGSPATH}/network/domain; |
1044 | echo "dhcp" > ${SETTINGSPATH}/network/networking ) |
1045 | evaluate_retval |
1046 | |
1047 | |
1048 | #xserver |
1049 | echo -e " Graphic settings ..." |
1050 | |
1051 | [ ! -d ${SETTINGSPATH}/vga ] && install -d ${SETTINGSPATH}/vga |
1052 | [ ! -d ${SETTINGSPATH}/mouse ] && install -d ${SETTINGSPATH}/mouse |
1053 | [ ! -d ${SETTINGSPATH}/monitor ] && install -d ${SETTINGSPATH}/monitor |
1054 | ( echo "${XMODULE}" > ${SETTINGSPATH}/vga/vga; |
1055 | echo "16" > ${SETTINGSPATH}/vga/vgadepth; |
1056 | echo "1024x768" > ${SETTINGSPATH}/vga/vgares; |
1057 | echo "${XMOUSETYPE}" > ${SETTINGSPATH}/mouse/mouse; |
1058 | echo "myvendor=\"Aamazing\"" > ${SETTINGSPATH}/monitor/monitor; |
1059 | echo "mymodel=\"CM-1528-FS\"" >> ${SETTINGSPATH}/monitor/monitor; |
1060 | echo "hsync=\"28-64\"" >> ${SETTINGSPATH}/monitor/monitor; |
1061 | echo "vref=\"47-104\"" >> ${SETTINGSPATH}/monitor/monitor;) |
1062 | evaluate_retval |
1063 | |
1064 | #set system state to 'already configured' |
1065 | touch /etc/alx-config/state/configured |
1066 | } |
1067 | |
1068 | #start|stop |
1069 | preliminary_network(){ |
1070 | local module |
1071 | |
1072 | if [ -f /etc/alx-config/state/configured ] |
1073 | then |
1074 | #get module name |
1075 | module=$(cat ${SETTINGS_TEMPLATE}/system/modules/modules) |
1076 | modprobe ${module} |
1077 | else |
1078 | #vars used by hwdetect |
1079 | local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME |
1080 | local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER |
1081 | |
1082 | #get setting from hwdetect |
1083 | source /etc/sysconfig/hwsetup/knoppix |
1084 | modprobe ${NETCARD_DRIVER} |
1085 | fi |
1086 | |
1087 | case $1 in |
1088 | start) |
1089 | # keeping like always safe: |
1090 | # no network should be startet here, |
1091 | # so we can delete all pid files if one exists |
1092 | if ps -A|grep dhcpcd > /dev/null |
1093 | then |
1094 | echo -e ${COLMAGENTA}"Forcing network down"${COLDEFAULT} |
1095 | dhcpcd -k |
1096 | sleep 1 |
1097 | else |
1098 | rm -f /var/run/dhcpcd-eth?.pid |
1099 | fi |
1100 | |
1101 | echo -e ${COLMAGENTA}"Starting preliminary network ... "${COLDEFAULT} |
1102 | #dhcpcd &> /dev/null #&& echo "ok" || echo "false" |
1103 | |
1104 | # aka_fix ######################################## |
1105 | ifconfig eth0 128.20.222.222 netmask 255.255.0.0 up |
1106 | route del default gw 128.20.50.13 &> /dev/null |
1107 | route add default gw 128.20.50.21 &> /dev/null |
1108 | echo "nameserver 128.20.50.21" > /etc/resolv.conf |
1109 | ################################################## |
1110 | evaluate_retval |
1111 | ;; |
1112 | stop) |
1113 | echo -e ${COLMAGENTA}"Stopping preliminary network ... "${COLDEFAULT} |
1114 | ifconfig eth0 down |
1115 | if ps -A|grep dhcpcd > /dev/null |
1116 | then |
1117 | #echo -en ${COLMAGENTA}"Stopping preliminary network ... "${COLDEFAULT} |
1118 | dhcpcd -z &> /dev/null |
1119 | fi |
1120 | evaluate_retval |
1121 | ;; |
1122 | *) |
1123 | echo "Usage: preliminary_network {start|stop}" |
1124 | ;; |
1125 | esac |
1126 | } |
1127 | |
1128 | case $1 in |
1129 | start) |
1130 | #retrieve or validate current serial |
1131 | get_system_serial |
1132 | if [ "${ALX_HW_DETECT}" == "true" ] |
1133 | then |
1134 | import_settings_to_db |
1135 | import_settings_local |
1136 | fi |
1137 | |
1138 | #now setup system configuration |
1139 | #alx_setup_or_whatever_it_will_be_called() |
1140 | [ "${ALX_HW_DETECT}" == "false" ] && update_system_settings |
1141 | |
1142 | #stop at last the preliminary networking (dhcp) |
1143 | preliminary_network stop |
1144 | ;; |
1145 | |
1146 | stop) |
1147 | #unset_alx_connected #--> now in alxsetstate-rc6 |
1148 | # ! important !: del systemstate |
1149 | [ -f /etc/alx-config/state/state ] && rm /etc/alx-config/state/state |
1150 | sleep 0.1 |
1151 | ;; |
1152 | *) |
1153 | echo "Usage: $0 {start|stop} ..." |
1154 | ;; |
1155 | esac |
Properties
Name | Value |
---|---|
svn:executable | * |