Magellan Linux

Contents of /alx-src/branches/alxconf-060/init.d/alxsettings

Parent Directory Parent Directory | Revision Log Revision Log


Revision 313 - (show annotations) (download)
Wed Aug 31 21:31:09 2005 UTC (18 years, 8 months ago) by niro
Original Path: alx-src/trunk/alxconfig-ng/init.d/alxsettings
File size: 17034 byte(s)
- using a better method to fetch new client serials
- abort import_settings_local after hardware stuff when hardware-auto-detection is called
- now creating missing sysinfo icon at the first boot

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.19 2005-08-31 21:31:09 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 # start preliminary networking (dhcp)
92 preliminary_network start
93
94 # check if mysql server is reachable
95 # if not abort this script
96 if ! reach_mysql_server
97 then
98 preliminary_network stop
99 exit 1
100 fi
101
102 CUR_IP=$(/sbin/ifconfig eth0 | sed -n '/addr:/s/ [^r]*..//gp')
103 CUR_MAC=$(/sbin/ifconfig eth0 | grep HWaddr | cut -d ' ' -f11)
104 CUR_MTIME=$(date +%s)
105
106 echo -e ${COLOREDSTAR} "Trying to validate my serial ..."
107
108 # nice serial output
109 $CURS_UP
110 $SET_WCOL
111 echo "[ SN: ${ALX_SERIAL} ]"
112
113 if validate_serial "${ALX_SERIAL}" "${ALX_REG_DATE}" "${CUR_MAC}"
114 then
115 ALX_STATE="ok"
116 else
117 # abort on non valid serial
118 ALX_STATE="invalid serial"
119 echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
120 show_invalid_serial_msg
121 exit 1
122 fi
123
124 else
125 # run hardware detection
126 echo
127 if [ -f /hardware-auto-detection ]
128 then
129 echo -e ${COLMAGENTA}"Hardware autodetection forced by system-administrator"${COLDEFAULT}
130 else
131 echo -e ${COLMAGENTA}"Preparing system for first boot"${COLDEFAULT}
132 fi
133 ALX_HW_DETECT=true
134 /etc/init.d/hwdetect start
135
136 # set hostname to alx_default_hostname
137 # use old hostname if this is a forced re-check
138 [ -f /hardware-auto-detection ] && ALX_DEFAULT_HOSTNAME="$(< /etc/hostname)"
139 [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx
140 HOSTNAME="${ALX_DEFAULT_HOSTNAME}"
141
142 # update the hostname on the system for sure
143 echo "${HOSTNAME}" > /etc/hostname
144
145 # start preliminary networking (dhcp)
146 preliminary_network start
147
148 # check if mysql server is reachable
149 # if not abort this script
150 if ! reach_mysql_server
151 then
152 preliminary_network stop
153 exit 1
154 fi
155
156 CUR_IP=$(/sbin/ifconfig eth0 | sed -n '/addr:/s/ [^r]*..//gp')
157 CUR_MAC=$(/sbin/ifconfig eth0 | grep HWaddr | cut -d ' ' -f11)
158 CUR_MTIME=$(date +%s)
159
160 # abort now if this is a forced re-check
161 if [ -f /hardware-auto-detection ]
162 then
163 # but first check the serial
164 source /etc/alxconfig-ng/serial
165
166 echo -e ${COLOREDSTAR} "Trying to validate my serial ..."
167
168 # nice serial output
169 $CURS_UP
170 $SET_WCOL
171 echo "[ SN: ${ALX_SERIAL} ]"
172
173 if validate_serial "${ALX_SERIAL}" "${ALX_REG_DATE}" "${CUR_MAC}"
174 then
175 ALX_STATE="ok"
176 else
177 # abort on non valid serial
178 ALX_STATE="invalid serial"
179 echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
180 show_invalid_serial_msg
181 exit 1
182 fi
183
184 # write current state to temp file
185 echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
186 rm /hardware-auto-detection
187
188 # now export ALX_FORCED_RECHECK=true
189 # that the setting will be updated not inserted !
190 export ALX_FORCED_RECHECK=true
191 return 0
192 fi
193
194 echo -e ${COLOREDSTAR} "Trying to get new serial ..."
195
196 # request new serial
197 # ALX_REG_DATE="$(date +%F)"
198
199 # we're using the mtime now (better for validating the serial)
200 # mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
201 # "insert into client_serials(
202 # mtime,
203 # mac
204 # )
205 # values(
206 # '${CUR_MTIME}',
207 # '${CUR_MAC}'
208 # );"
209 #
210 # # then validate and retrieve serial
211 #
212 # ### warning must be changed that only the LAST ID will be fetched, ###
213 # ### or you get error if the computer name and date are the same ###
214 # ### you have more than one serial number then ###
215 #
216 # # select highest id only (added max)
217 # ALX_SERIAL=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
218 # "select max(serial) from client_serials where mtime='${CUR_MTIME}' and mac='${CUR_MAC}'")
219
220 # request a new serial; one command now (cause must be done in the same session)
221 ALX_SERIAL=$(mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
222 "insert into client_serials (mtime, mac) values('${CUR_MTIME}','${CUR_MAC}');
223 select last_insert_id() + 1;")
224
225 if [ "${ALX_SERIAL}" != NULL ]
226 then
227 # nice serial output
228 $CURS_UP
229 $SET_WCOL
230 echo "[ SN: ${ALX_SERIAL} ]"
231
232 # set ALX_STATE to ok so everybody that everything was ok
233 ALX_STATE=ok
234
235 echo "ALX_SERIAL=${ALX_SERIAL}" > /etc/alxconfig-ng/serial
236 echo "ALX_REG_DATE=${CUR_MTIME}" >> /etc/alxconfig-ng/serial
237
238 evaluate_retval
239 else
240 # print false (works only if this is the first statement here)
241 evaluate_retval
242
243 # set ALX_STATE to error so everybody sees there was an error
244 ALX_STATE=error
245
246 # show an error that no new serial was found
247 # nice serial output
248 $CURS_UP
249 $SET_WCOL
250 echo -e "[ SN: ${COLRED}None, 0${COLDEFAULT} ]"
251 fi
252 fi
253
254 # write current state to temp file
255 echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
256 }
257
258
259 check_is_configured() {
260 if [ -f /etc/alxconfig-ng/state/configured ]
261 then
262 export ALX_CONFIGURED=true
263 else
264 export ALX_CONFIGURED=false
265 fi
266 }
267
268
269 # imports current settings to the database resolved by the hardware detection
270 import_settings_to_db() {
271 # note: networking is always 'dhcp' if hw was autodetected
272 # note: default_domain/hostname is set in config.rc
273
274 # to be safe, we do some sanity checks
275 [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain
276 [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx
277
278 # vars used by hwdetect
279 local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
280 local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
281 local MOUSETYPE XMOUSETYPE FULLNAME DEVICE
282
283 # get setting from hwdetect
284 source /etc/sysconfig/hwsetup/knoppix
285 source /etc/sysconfig/hwsetup/mouse
286
287 echo
288 echo -e ${COLMAGENTA}"Importing detected settings to database"${COLDEFAULT}
289
290 # network
291 echo -e " Network settings ..."
292 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
293 "insert into cfg_network(
294 hostname,
295 serial,
296 module,
297 domain,
298 networking
299 )
300 values(
301 '${ALX_DEFAULT_HOSTNAME}',
302 '${ALX_SERIAL}',
303 '${NETCARD_DRIVER}',
304 '${ALX_DEFAULT_DOMAIN}',
305 'dhcp'
306 );"
307 evaluate_retval
308
309 # xserver
310 echo -e " Graphic settings ..."
311 # xserver general
312 ( mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
313 "insert into cfg_graphic(
314 serial,
315 module,
316 resolution,
317 depth,
318 monitorid
319 )
320 values(
321 '${ALX_SERIAL}',
322 '${XMODULE}',
323 '1024x768',
324 '16',
325 '0'
326 );"; )
327 evaluate_retval
328
329 # input
330 echo -e " Input settings ..."
331 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
332 "insert into cfg_input(serial,mouse) values('${ALX_SERIAL}','${XMOUSETYPE}');"
333 evaluate_retval
334
335 # auth
336 echo -e " Authentifcation settings ..."
337 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
338 "insert into client_auth(
339 serial,
340 username,
341 shell,
342 vnc,
343 samba,
344 station
345 )
346 values(
347 '${ALX_SERIAL}',
348 '${ALX_UNPRIV_USER}',
349 '',
350 '',
351 '',
352 ''
353 );"
354 evaluate_retval
355
356 # exchange ssh rsa keys - the first boot needs this !
357 # or no reboot will work via the webadmin
358 echo -e " SSH authentifcation settings ..."
359 HOME=/root config_ssh_auth
360 evaluate_retval
361
362 # input
363 echo -e " Autostart settings ..."
364 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
365 "insert into cfg_autostart(serial,session) values('${ALX_SERIAL}','');"
366 evaluate_retval
367 }
368
369 # imports current settings to the database resolved by the hardware detection
370 update_settings_in_db() {
371 # note: networking is always 'dhcp' if hw was autodetected
372 # note: default_domain/hostname is set in config.rc or exported
373 # note: we updating only hardware settings here !
374
375 # to be safe, we do some sanity checks
376 [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain
377 [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx
378
379 # vars used by hwdetect
380 local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
381 local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
382 local MOUSETYPE XMOUSETYPE FULLNAME DEVICE
383
384 # get setting from hwdetect
385 source /etc/sysconfig/hwsetup/knoppix
386 source /etc/sysconfig/hwsetup/mouse
387
388 echo
389 echo -e ${COLMAGENTA}"Updating detected settings in database"${COLDEFAULT}
390
391 # network
392 echo -e " Network settings ..."
393
394 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
395 "update cfg_network set
396 hostname='${ALX_DEFAULT_HOSTNAME}',
397 module='${NETCARD_DRIVER}',
398 domain='${ALX_DEFAULT_DOMAIN}',
399 networking='dhcp'
400 where serial=${ALX_SERIAL};"
401 evaluate_retval
402
403 # xserver
404 echo -e " Graphic settings ..."
405 # xserver general
406 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
407 "update cfg_graphic set
408 module='${XMODULE}',
409 resolution='1024x768',
410 depth='16',
411 monitorid='0'
412 where serial=${ALX_SERIAL};"
413 evaluate_retval
414
415 # input
416 echo -e " Input settings ..."
417 mysql_command ${SQL_USER} ${SQL_PASS} ${SQL_HOST} ${SQL_DB} \
418 "update cfg_input set
419 mouse='${XMOUSETYPE}'
420 where serial=${ALX_SERIAL};"
421 evaluate_retval
422 }
423
424 # imports current settings to the local system resolved by the hardware detection
425 # we only need the network settings
426 import_settings_local(){
427 # note: networking is always 'dhcp' if hw was autodetected
428 # note: default_domain/hostname is set in config.rc
429
430 # to be safe, we do some sanity checks
431 [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain
432 [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx
433
434 # vars used by hwdetect
435 local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
436 local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
437 local MOUSETYPE XMOUSETYPE FULLNAME DEVICE
438
439 # get setting from hwdetect
440 source /etc/sysconfig/hwsetup/knoppix
441
442 echo
443 echo -e ${COLMAGENTA}"Importing detected settings to local system"${COLDEFAULT}
444
445 [ ! -d ${SETTINGSPATH} ] && install -d ${SETTINGSPATH}
446 echo "${NETCARD_DRIVER}" > ${SETTINGSPATH}/modules
447 evaluate_retval
448
449 # set system state to 'already configured'
450 touch /etc/alxconfig-ng/state/configured
451
452 # if only an recheck was forced than abort now
453 [[ ${ALX_FORCED_RECHECK} = true ]] && return 0
454
455 # create a fresh fluxbox directory
456 [ -d ${ALX_UNPRIV_HOME}/.fluxbox ] && rm -rf ${ALX_UNPRIV_HOME}/.fluxbox
457 install -d ${ALX_UNPRIV_HOME}/.fluxbox
458
459 # now generate fluxbox config files
460
461 # fluxbox main config
462 cat ${ALX_SKELETONS}/fluxbox/init \
463 > ${ALX_UNPRIV_HOME}/.fluxbox/init
464
465 # fluxbox menu header
466 cat ${ALX_SKELETONS}/fluxbox/menu.header \
467 > ${ALX_UNPRIV_HOME}/.fluxbox/menu
468
469 # now fix it with proper messages :P
470 local ver="$(< /etc/mageversion)"
471 sed -i "s:@CHANGEME@:alx-${ver} #${ALX_SERIAL}:g" \
472 ${ALX_UNPRIV_HOME}/.fluxbox/menu
473
474 # add a newline (maybe there is no crlf in the header)
475 echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
476
477 # fluxbox menu footer
478 cat ${ALX_SKELETONS}/fluxbox/menu.footer \
479 >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
480
481 # add a newline (maybe there is no crlf in the footer)
482 echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu
483
484
485 # setup some standart icons (sysinfo.lnk)
486 # basic config
487 cat ${ALX_SKELETONS}/xtdesktop/xtdeskrc > ${ALX_UNPRIV_HOME}/.xtdeskrc
488
489 # clean desktop icon location
490 [ -d ${ALX_UNPRIV_HOME}/.xtdesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.xtdesktop
491 install -d ${ALX_UNPRIV_HOME}/.xtdesktop
492
493 # last but not least gen a icon with some sys informations
494 local sysinfo
495 local osversion
496 local xres
497 local yres
498
499 osversion="$(< /etc/mageversion)"
500 sysinfo="Hostname: ${ALX_DEFAULT_HOSTNAME} Serial: #${ALX_SERIAL} OS: alx-${osversion} Kernel: $(uname -r)"
501
502 # at first boot we got always a resolution of 1024x768-16@60
503 # middle of the screen
504 # (no txt - length required, xtdesk manage that itself)
505 xres="$((1024 / 2))"
506 # default y pos (full yres -22 !)
507 yres="$((768 - 22 ))"
508
509 generate_icon \
510 --name "${sysinfo}" \
511 --command "exit 0" \
512 --icon "${ALX_SESSIONS_ICONS}/sysinfo.png" \
513 --dest "${ALX_UNPRIV_HOME}/.xtdesktop/sysinfo.lnk" \
514 --xres "${xres}" \
515 --yres "${yres}" \
516 --icon-width "1" \
517 --icon-height "1"
518
519 # set correct permissions
520 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}
521 chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox
522 chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox
523 chmod 0755 ${ALX_UNPRIV_HOME}/.xtdesktop
524 chmod 0644 ${ALX_UNPRIV_HOME}/.xtdeskrc
525
526 # default passwords are bad
527 #usermod -p $(perl -e "printf(crypt('foobar','AD'))") root
528 #usermod -p $(perl -e "printf(crypt('foobar','AD'))") ${ALX_UNPRIV_USER}
529 #smbpasswd -a root foobar
530 }
531
532 # start|stop
533 preliminary_network(){
534 local module
535
536 if [ -f /etc/alxconfig-ng/state/configured ]
537 then
538 # get module name
539 module=$(cat ${SETTINGSPATH}/modules)
540 modprobe ${module}
541 else
542 # vars used by hwdetect
543 local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
544 local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
545
546 # get setting from hwdetect
547 source /etc/sysconfig/hwsetup/knoppix
548 modprobe ${NETCARD_DRIVER}
549 fi
550
551 case $1 in
552 start)
553 # keeping like always safe:
554 # no network should be startet here,
555 # so we can delete all pid files if one exists
556 if ps -A|grep dhcpcd > /dev/null
557 then
558 echo -e ${COLMAGENTA}"Forcing network down"${COLDEFAULT}
559 dhcpcd -k
560 sleep 1
561 else
562 rm -f /var/run/dhcpcd-eth?.pid
563 fi
564
565 echo -e ${COLMAGENTA}"Starting preliminary network ... "${COLDEFAULT}
566 # -t 10 timeout of 10 secs
567 dhcpcd -t 10 &> /dev/null
568
569 # aka_fix ########################################
570 #ifconfig eth0 128.20.222.222 netmask 255.255.0.0 up
571 #route del default gw 128.20.50.13 &> /dev/null
572 #route add default gw 128.20.50.21 &> /dev/null
573 #echo "nameserver 128.20.50.21" > /etc/resolv.conf
574 ##################################################
575
576 evaluate_retval
577 ;;
578
579 stop)
580 echo -e ${COLMAGENTA}"Stopping preliminary network ... "${COLDEFAULT}
581 ifconfig eth0 down
582 if ps -A|grep dhcpcd > /dev/null
583 then
584 dhcpcd -z &> /dev/null
585 fi
586 evaluate_retval
587 ;;
588
589 *)
590 echo "Usage: preliminary_network {start|stop}"
591 ;;
592 esac
593 }
594
595 case $1 in
596 start)
597 # retrieve or validate current serial
598 get_system_serial
599 if [[ ${ALX_HW_DETECT} = true ]]
600 then
601 if [[ ${ALX_FORCED_RECHECK} = true ]]
602 then
603 update_settings_in_db
604 else
605 import_settings_to_db
606 fi
607 import_settings_local
608
609 # here we should also exchange the ssh keys
610 # or the system cannot be rebooted after
611 # the first start via the alx-webadmin
612 config_ssh_auth
613 fi
614
615 # now setup system configuration
616 # alx_setup_or_whatever_it_will_be_called()
617 [ "${ALX_HW_DETECT}" == "false" ] && update_system_settings
618
619 # stop at last the preliminary networking (dhcp)
620 preliminary_network stop
621 ;;
622
623 stop)
624 # unset_alx_connected #--> now in alxsetstate-rc6
625 # ! important !: del systemstate
626 [ -f /etc/alxconfig-ng/state/state ] && rm /etc/alxconfig-ng/state/state
627 sleep 0.1
628 ;;
629 *)
630 echo "Usage: $0 {start|stop} ..."
631 ;;
632 esac
633

Properties

Name Value
svn:executable *