Magellan Linux

Contents of /alx-src/trunk/alxconfig-ng/init.d/alxsettings

Parent Directory Parent Directory | Revision Log Revision Log


Revision 282 - (show annotations) (download)
Wed Aug 17 21:19:52 2005 UTC (18 years, 8 months ago) by niro
File size: 15163 byte(s)
added to major functions: do not change any settings if mysql server is not reachable and support re-check of the client hardware.
also set dhcp timeout of the preliminary network to 10 seconds

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 # $Header: /home/cvsd/alx-cvs/alx-src/alxconfig-ng/init.d/alxsettings,v 1.15 2005-08-17 21:19:52 niro Exp $
15
16 # checks first if the client was already configured and if it has an valid serial
17 # if not it runs the autoconfiguration script
18 # these settings will be used for client setup
19 #
20 # if client was valid it first will check if his settings against the server
21 # if no changes are at server side they will be kept, if yes the get updated.
22 # the server settings has higher priority.
23
24 source /etc/sysconfig/rc
25 source $rc_functions
26
27 # mysql settings
28 source /etc/alxconfig-ng/config.rc
29
30 # helper functions
31 source /usr/lib/alxconfig-ng/functions/mysqlfunctions
32 source /usr/lib/alxconfig-ng/functions/serial_functions
33 source /usr/lib/alxconfig-ng/functions/config_modules
34 source /usr/lib/alxconfig-ng/functions/config_network
35 source /usr/lib/alxconfig-ng/functions/config_printers
36 source /usr/lib/alxconfig-ng/functions/config_sessions
37 source /usr/lib/alxconfig-ng/functions/config_x11
38 source /usr/lib/alxconfig-ng/functions/config_auth
39 source /usr/lib/alxconfig-ng/functions/config_ssh_auth
40
41 # check if mysql is available
42 [ -x /usr/bin/mysql ] && MYSQL_ALX=true
43
44 # other needed vars
45 ALX_HW_DETECT=false
46 ALX_FORCED_RECHECK=false
47
48 # unset vars which may kill us
49 unset ALX_SERIAL ALX_STATE
50
51
52 # setup needed directories
53 [ ! -d /etc/alxconfig-ng/state ] && install -d /etc/alxconfig-ng/state
54
55
56 update_system_settings(){
57 echo -e ${COLMAGENTA}"Checking system setup ..."${COLDEFAULT}
58
59 # get the modules settings
60 # ! is the first thing that must be configured !
61 config_modules
62
63 # imports network settings from db
64 config_networking
65
66 # imports x11 settings from db
67 config_x11
68
69 # imports session settings from db
70 config_sessions
71
72 # imports printer settings from db
73 config_printing
74
75 # imports auth settings from db
76 config_auth
77
78 # exchange ssh rsa keys
79 HOME=/root config_ssh_auth
80 }
81
82 get_system_serial(){
83
84 local CUR_IP CUR_MAC CUR_MTIME
85
86 # check if serial file exists
87 if [ -f /etc/alxconfig-ng/serial ] && [ ! -f /hardware-auto-detection ]
88 then
89 source /etc/alxconfig-ng/serial
90
91 # doing this now before this function gets called
92 # start preliminary networking (dhcp)
93 # preliminary_network start
94
95 CUR_IP=$(/sbin/ifconfig eth0 | sed -n '/addr:/s/ [^r]*..//gp')
96 CUR_MAC=$(/sbin/ifconfig eth0 | grep HWaddr | cut -d ' ' -f11)
97 CUR_MTIME=$(date +%s)
98
99 echo -e ${COLOREDSTAR} "Trying to validate my serial ..."
100
101 # nice serial output
102 $CURS_UP
103 $SET_WCOL
104 echo "[ SN: ${ALX_SERIAL} ]"
105
106 if validate_serial "${ALX_SERIAL}" "${ALX_REG_DATE}" "${CUR_MAC}"
107 then
108 ALX_STATE="ok"
109 else
110 ALX_STATE="invalid serial"
111 fi
112
113 else
114 # run hardware detection
115 echo
116 if [ -f /hardware-auto-detection ]
117 then
118 echo -e ${COLMAGENTA}"Hardware-Auto-Detection forced by system-administrator"${COLDEFAULT}
119 else
120 echo -e ${COLMAGENTA}"Preparing system for first boot"${COLDEFAULT}
121 fi
122 ALX_HW_DETECT=true
123 /etc/init.d/hwdetect start
124
125 # set hostname to alx_default_hostname
126 # use old hostname if this is a forced re-check
127 [ -f /hardware-auto-detection ] && ALX_DEFAULT_HOSTNAME="$(< /etc/hostname)"
128 [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx
129 HOSTNAME="${ALX_DEFAULT_HOSTNAME}"
130
131 # update the hostname on the system for sure
132 echo "${HOSTNAME}" > /etc/hostname
133
134 # start preliminary networking (dhcp)
135 preliminary_network start
136
137 CUR_IP=$(/sbin/ifconfig eth0 | sed -n '/addr:/s/ [^r]*..//gp')
138 CUR_MAC=$(/sbin/ifconfig eth0 | grep HWaddr | cut -d ' ' -f11)
139 CUR_MTIME=$(date +%s)
140
141 # abort now if this is a forced re-check
142 if [ -f /hardware-auto-detection ]
143 then
144 # but first check the serial
145 source /etc/alxconfig-ng/serial
146
147 echo -e ${COLOREDSTAR} "Trying to validate my serial ..."
148
149 # nice serial output
150 $CURS_UP
151 $SET_WCOL
152 echo "[ SN: ${ALX_SERIAL} ]"
153
154 if validate_serial "${ALX_SERIAL}" "${ALX_REG_DATE}" "${CUR_MAC}"
155 then
156 ALX_STATE="ok"
157 else
158 ALX_STATE="invalid serial"
159 fi
160
161 # write current state to temp file
162 echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
163 rm /hardware-auto-detection
164
165 # now export ALX_FORCED_RECHECK=true
166 # that the setting will be updated not inserted !
167 export ALX_FORCED_RECHECK=true
168 return 0
169 fi
170
171 echo -e ${COLOREDSTAR} "Trying to get new serial ..."
172
173 # request new serial
174 # ALX_REG_DATE="$(date +%F)"
175
176 # we're using the mtime now (better for vaildating the serial)
177 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
178 "insert into client_serials(
179 mtime,
180 mac
181 )
182 values(
183 '${CUR_MTIME}',
184 '${CUR_MAC}'
185 );"
186
187 # then validate and retrieve serial
188
189 ### warning must be changed that only the LAST ID will be fetched, ###
190 ### or you get error if the computer name and date are the same ###
191 ### you have more than one serial number then ###
192
193 # select highest id only (added max)
194 ALX_SERIAL=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
195 "select max(serial) from client_serials where mtime='${CUR_MTIME}' and mac='${CUR_MAC}'")
196
197 if [ "${ALX_SERIAL}" != NULL ]
198 then
199 # nice serial output
200 $CURS_UP
201 $SET_WCOL
202 echo "[ SN: ${ALX_SERIAL} ]"
203
204 # set ALX_STATE to ok so everybody that everything was ok
205 ALX_STATE=ok
206
207 echo "ALX_SERIAL=${ALX_SERIAL}" > /etc/alxconfig-ng/serial
208 echo "ALX_REG_DATE=${CUR_MTIME}" >> /etc/alxconfig-ng/serial
209
210 evaluate_retval
211 else
212 # print false (works only if this is the first statement here)
213 evaluate_retval
214
215 # set ALX_STATE to error so everybody sees there was an error
216 ALX_STATE=error
217
218 # show an error that no new serial was found
219 # nice serial output
220 $CURS_UP
221 $SET_WCOL
222 echo -e "[ SN: ${COLRED}None, 0${COLDEFAULT} ]"
223 fi
224 fi
225
226 # write current state to temp file
227 echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
228 }
229
230
231 check_is_configured() {
232 if [ -f /etc/alxconfig-ng/state/configured ]
233 then
234 export ALX_CONFIGURED=true
235 else
236 export ALX_CONFIGURED=false
237 fi
238 }
239
240
241 # imports current settings to the database resolved by the hardware detection
242 import_settings_to_db() {
243 # note: networking is always 'dhcp' if hw was autodetected
244 # note: default_domain/hostname is set in config.rc
245
246 # to be safe, we do some sanity checks
247 [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain
248 [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx
249
250 # vars used by hwdetect
251 local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
252 local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
253 local MOUSETYPE XMOUSETYPE FULLNAME DEVICE
254
255 # get setting from hwdetect
256 source /etc/sysconfig/hwsetup/knoppix
257 source /etc/sysconfig/hwsetup/mouse
258
259 echo
260 echo -e ${COLMAGENTA}"Importing detected settings to database"${COLDEFAULT}
261
262 # network
263 echo -e " Network settings ..."
264 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
265 "insert into cfg_network(
266 hostname,
267 serial,
268 module,
269 domain,
270 networking
271 )
272 values(
273 '${ALX_DEFAULT_HOSTNAME}',
274 '${ALX_SERIAL}',
275 '${NETCARD_DRIVER}',
276 '${ALX_DEFAULT_DOMAIN}',
277 'dhcp'
278 );"
279 evaluate_retval
280
281 # xserver
282 echo -e " Graphic settings ..."
283 # xserver general
284 ( mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
285 "insert into cfg_graphic(
286 serial,
287 module,
288 resolution,
289 depth,
290 monitorid
291 )
292 values(
293 '${ALX_SERIAL}',
294 '${XMODULE}',
295 '1024x768',
296 '16',
297 '0'
298 );"; )
299 evaluate_retval
300
301 # input
302 echo -e " Input settings ..."
303 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
304 "insert into cfg_input(serial,mouse) values('${ALX_SERIAL}','${XMOUSETYPE}');"
305 evaluate_retval
306
307 # auth
308 echo -e " Authentifcation settings ..."
309 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
310 "insert into client_auth(
311 serial,
312 username,
313 shell,
314 vnc,
315 samba,
316 station
317 )
318 values(
319 '${ALX_SERIAL}',
320 '${ALX_UNPRIV_USER}',
321 '',
322 '',
323 '',
324 ''
325 );"
326 evaluate_retval
327
328 # exchange ssh rsa keys - the first boot needs this !
329 # or no reboot will work via the webadmin
330 echo -e " SSH authentifcation settings ..."
331 HOME=/root config_ssh_auth
332 evaluate_retval
333
334 # input
335 echo -e " Autostart settings ..."
336 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
337 "insert into cfg_autostart(serial,session) values('${ALX_SERIAL}','');"
338 evaluate_retval
339 }
340
341 # imports current settings to the database resolved by the hardware detection
342 update_settings_in_db() {
343 # note: networking is always 'dhcp' if hw was autodetected
344 # note: default_domain/hostname is set in config.rc or exported
345 # note: we updating only hardware settings here !
346
347 # to be safe, we do some sanity checks
348 [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain
349 [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx
350
351 # vars used by hwdetect
352 local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
353 local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
354 local MOUSETYPE XMOUSETYPE FULLNAME DEVICE
355
356 # get setting from hwdetect
357 source /etc/sysconfig/hwsetup/knoppix
358 source /etc/sysconfig/hwsetup/mouse
359
360 echo
361 echo -e ${COLMAGENTA}"Updating detected settings in database"${COLDEFAULT}
362
363 # network
364 echo -e " Network settings ..."
365
366 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
367 "update cfg_network set
368 hostname='${ALX_DEFAULT_HOSTNAME}',
369 module='${NETCARD_DRIVER}',
370 domain='${ALX_DEFAULT_DOMAIN}',
371 networking='dhcp'
372 where serial=${ALX_SERIAL};"
373 evaluate_retval
374
375 # xserver
376 echo -e " Graphic settings ..."
377 # xserver general
378 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
379 "update cfg_graphic set
380 module='${XMODULE}',
381 resolution='1024x768',
382 depth='16',
383 monitorid='0'
384 where serial=${ALX_SERIAL};"
385 evaluate_retval
386
387 # input
388 echo -e " Input settings ..."
389 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
390 "update cfg_input set
391 mouse='${XMOUSETYPE}'
392 where serial=${ALX_SERIAL};"
393 evaluate_retval
394 }
395
396 # imports current settings to the local system resolved by the hardware detection
397 # we only need the network settings
398 import_settings_local(){
399 # note: networking is always 'dhcp' if hw was autodetected
400 # note: default_domain/hostname is set in config.rc
401
402 # to be safe, we do some sanity checks
403 [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain
404 [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx
405
406 # vars used by hwdetect
407 local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
408 local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
409 local MOUSETYPE XMOUSETYPE FULLNAME DEVICE
410
411 # get setting from hwdetect
412 source /etc/sysconfig/hwsetup/knoppix
413
414 echo
415 echo -e ${COLMAGENTA}"Importing detected settings to local system"${COLDEFAULT}
416
417 [ ! -d ${SETTINGSPATH} ] && install -d ${SETTINGSPATH}
418 echo "${NETCARD_DRIVER}" > ${SETTINGSPATH}/modules
419 evaluate_retval
420
421 # set system state to 'already configured'
422 touch /etc/alxconfig-ng/state/configured
423
424 # create a fresh fluxbox directory
425 [ -d ${ALX_UNPRIV_HOME}/.fluxbox ] && rm -rf ${ALX_UNPRIV_HOME}/.fluxbox
426 install -d ${ALX_UNPRIV_HOME}/.fluxbox
427
428 # now generate fluxbox config files
429
430 # fluxbox main config
431 cat ${ALX_SKELETONS}/fluxbox/init \
432 > ${ALX_UNPRIV_HOME}/.fluxbox/init
433
434 # fluxbox menu header
435 cat ${ALX_SKELETONS}/fluxbox/menu.header \
436 > ${ALX_UNPRIV_HOME}/.fluxbox/menu
437
438 # add a newline (maybe there is no crlf in the header)
439 echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
440
441 # fluxbox menu footer
442 cat ${ALX_SKELETONS}/fluxbox/menu.footer \
443 >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
444
445 # add a newline (maybe there is no crlf in the footer)
446 echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
447
448 # set correct permissions
449 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
450 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
451 chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
452 chmod 0755 ${ALX_UNPRIV_HOME}/.idesktop
453 chmod 0644 ${ALX_UNPRIV_HOME}/.ideskrc
454
455 # default passwords are bad
456 #usermod -p $(perl -e "printf(crypt('foobar','AD'))") root
457 #usermod -p $(perl -e "printf(crypt('foobar','AD'))") ${ALX_UNPRIV_USER}
458 #smbpasswd -a root foobar
459 }
460
461 # start|stop
462 preliminary_network(){
463 local module
464
465 if [ -f /etc/alxconfig-ng/state/configured ]
466 then
467 # get module name
468 module=$(cat ${SETTINGSPATH}/modules)
469 modprobe ${module}
470 else
471 # vars used by hwdetect
472 local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
473 local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
474
475 # get setting from hwdetect
476 source /etc/sysconfig/hwsetup/knoppix
477 modprobe ${NETCARD_DRIVER}
478 fi
479
480 case $1 in
481 start)
482 # keeping like always safe:
483 # no network should be startet here,
484 # so we can delete all pid files if one exists
485 if ps -A|grep dhcpcd > /dev/null
486 then
487 echo -e ${COLMAGENTA}"Forcing network down"${COLDEFAULT}
488 dhcpcd -k
489 sleep 1
490 else
491 rm -f /var/run/dhcpcd-eth?.pid
492 fi
493
494 echo -e ${COLMAGENTA}"Starting preliminary network ... "${COLDEFAULT}
495 # -t 10 timeout of 10 secs
496 dhcpcd -t 10 &> /dev/null
497
498 # aka_fix ########################################
499 #ifconfig eth0 128.20.222.222 netmask 255.255.0.0 up
500 #route del default gw 128.20.50.13 &> /dev/null
501 #route add default gw 128.20.50.21 &> /dev/null
502 #echo "nameserver 128.20.50.21" > /etc/resolv.conf
503 ##################################################
504
505 evaluate_retval
506 ;;
507
508 stop)
509 echo -e ${COLMAGENTA}"Stopping preliminary network ... "${COLDEFAULT}
510 ifconfig eth0 down
511 if ps -A|grep dhcpcd > /dev/null
512 then
513 dhcpcd -z &> /dev/null
514 fi
515 evaluate_retval
516 ;;
517
518 *)
519 echo "Usage: preliminary_network {start|stop}"
520 ;;
521 esac
522 }
523
524 case $1 in
525 start)
526 # start preliminary networking (dhcp)
527 preliminary_network start
528
529 # check if mysql server is reachable
530 # if not abort this script
531 if ! reach_mysql_server
532 then
533 preliminary_network stop
534 exit 1
535 fi
536
537 # retrieve or validate current serial
538 get_system_serial
539 if [[ ${ALX_HW_DETECT} = true ]]
540 then
541 if [[ ${ALX_FORCED_RECHECK} = true ]]
542 then
543 update_settings_in_db
544 else
545 import_settings_to_db
546 fi
547 import_settings_local
548
549 # here we should also exchange the ssh keys
550 # or the system cannot be rebooted after
551 # the first start via the alx-webadmin
552 config_ssh_auth
553 fi
554
555 # now setup system configuration
556 # alx_setup_or_whatever_it_will_be_called()
557 [ "${ALX_HW_DETECT}" == "false" ] && update_system_settings
558
559 # stop at last the preliminary networking (dhcp)
560 preliminary_network stop
561 ;;
562
563 stop)
564 # unset_alx_connected #--> now in alxsetstate-rc6
565 # ! important !: del systemstate
566 [ -f /etc/alxconfig-ng/state/state ] && rm /etc/alxconfig-ng/state/state
567 sleep 0.1
568 ;;
569 *)
570 echo "Usage: $0 {start|stop} ..."
571 ;;
572 esac
573

Properties

Name Value
svn:executable *