Magellan Linux

Annotation of /alx-src/trunk/tinyalxconfig-ng/init.d/alxsettings

Parent Directory Parent Directory | Revision Log Revision Log


Revision 537 - (hide annotations) (download)
Mon Jan 26 17:16:32 2009 UTC (15 years, 3 months ago) by niro
File size: 14064 byte(s)
-fixed header
1 niro 386 #!/bin/bash
2    
3     # <niro@magellan-linux.de>
4    
5 niro 396 #%rlevels: 7:s 0:k
6 niro 386 #%start: 41
7     #%stop: 01
8    
9     #deps
10     #%needs:
11     #%before:
12     #%after:
13    
14 niro 537 # $Id$
15 niro 386
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 niro 502 source /etc/conf.d/rc
25     source ${rc_functions}
26 niro 386
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 niro 489 source /usr/lib/alxconfig-ng/functions/config_driverkits
34 niro 386 source /usr/lib/alxconfig-ng/functions/config_modules
35     source /usr/lib/alxconfig-ng/functions/config_network
36     source /usr/lib/alxconfig-ng/functions/config_printers
37     source /usr/lib/alxconfig-ng/functions/config_sessions
38     source /usr/lib/alxconfig-ng/functions/config_x11
39     source /usr/lib/alxconfig-ng/functions/config_auth
40     source /usr/lib/alxconfig-ng/functions/config_ssh_auth
41    
42     # other needed vars
43     ALX_HW_DETECT=false
44     ALX_FORCED_RECHECK=false
45     ALX_RESET_SETTINGS=false
46    
47     # unset vars which may kill us
48     unset ALX_SERIAL ALX_STATE
49    
50    
51     # setup needed directories
52     [ ! -d /etc/alxconfig-ng/state ] && install -d /etc/alxconfig-ng/state
53    
54    
55     # read_cmdline ${item}
56     read_cmdline()
57     {
58     local i
59    
60     for i in $(< /proc/cmdline)
61     do
62     [[ ${i} = $1 ]] && return 0
63     done
64    
65     return 1
66     }
67    
68     update_system_settings()
69     {
70     echo -e ${COLMAGENTA}"Checking system setup ..."${COLDEFAULT}
71    
72 niro 489 # install neccessary driverkits
73     config_driverkits
74    
75 niro 386 # get the modules settings
76     # ! is the first thing that must be configured !
77     config_modules
78    
79     # imports network settings from db
80     config_networking
81    
82     # imports x11 settings from db
83     config_x11
84    
85     # imports session settings from db
86     config_sessions
87    
88     # imports printer settings from db
89     config_printing
90    
91     # imports auth settings from db
92     config_auth
93    
94     # exchange ssh rsa keys
95     HOME=/root config_ssh_auth
96     }
97    
98     get_system_serial()
99     {
100     local CUR_IP CUR_MAC CUR_MTIME ALX_IFACE
101    
102     # check if serial file exists
103     if [ -f /etc/alxconfig-ng/serial ] && [[ ${ALX_FORCED_RECHECK} = false ]]
104     then
105     source /etc/alxconfig-ng/serial
106    
107     # start preliminary networking (dhcp)
108     preliminary_network start
109    
110     # check if mysql server is reachable
111     # if not abort this script
112     if ! reach_mysql_server
113     then
114     preliminary_network stop
115     exit 1
116     fi
117    
118     CUR_IP=$(/sbin/ifconfig ${ALX_IFACE} | sed -n '/addr:/s/ [^r]*..//gp')
119     CUR_MAC=$(/sbin/ifconfig ${ALX_IFACE} | grep HWaddr | cut -d ' ' -f11)
120     CUR_MTIME=$(date +%s)
121    
122     echo -e ${COLOREDSTAR} "Trying to validate my serial ..."
123    
124     # nice serial output
125     $CURS_UP
126     $SET_WCOL
127     echo "[ SN: ${ALX_SERIAL} ]"
128    
129     if validate_serial "${ALX_SERIAL}" "${ALX_REG_DATE}" "${CUR_MAC}"
130     then
131     ALX_STATE="ok"
132     else
133     # abort on non valid serial
134     ALX_STATE="invalid serial"
135     echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
136     show_invalid_serial_msg
137     exit 1
138     fi
139    
140     else
141     # run hardware detection
142     echo
143     if [[ ${ALX_FORCED_RECHECK} = true ]]
144     then
145     echo -e ${COLMAGENTA}"Hardware autodetection forced by system-administrator"${COLDEFAULT}
146     else
147     echo -e ${COLMAGENTA}"Preparing system for first boot"${COLDEFAULT}
148     fi
149 niro 391 # cleaning up old data-crap
150     if [ -d /etc/sysconfig/hwsetup ]
151     then
152     echo -e ${COLOREDSTAR}"Cleaning up old data ..."
153     rm -f /etc/sysconfig/hwsetup/*
154     fi
155 niro 397 ALX_HW_DETECT=true
156 niro 391 echo -en "${COLOREDSTAR}";hwsetup -p > /dev/null
157 niro 386
158     # set hostname to alx_default_hostname
159     # use old hostname if this is a forced re-check
160     [[ ${ALX_FORCED_RECHECK} = true ]] && ALX_DEFAULT_HOSTNAME="$(< /etc/hostname)"
161     [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx
162     HOSTNAME="${ALX_DEFAULT_HOSTNAME}"
163    
164     # update the hostname on the system for sure
165     echo "${HOSTNAME}" > /etc/hostname
166    
167     # start preliminary networking (dhcp)
168     preliminary_network start
169    
170     # check if mysql server is reachable
171     # if not abort this script
172     if ! reach_mysql_server
173     then
174     preliminary_network stop
175     exit 1
176     fi
177    
178     CUR_IP=$(/sbin/ifconfig eth0 | sed -n '/addr:/s/ [^r]*..//gp')
179     CUR_MAC=$(/sbin/ifconfig eth0 | grep HWaddr | cut -d ' ' -f11)
180     CUR_MTIME=$(date +%s)
181    
182     # abort now if this is a forced re-check
183     if [[ ${ALX_FORCED_RECHECK} = true ]]
184     then
185     # but first check the serial
186     source /etc/alxconfig-ng/serial
187    
188     echo -e ${COLOREDSTAR} "Trying to validate my serial ..."
189    
190     # nice serial output
191     $CURS_UP
192     $SET_WCOL
193     echo "[ SN: ${ALX_SERIAL} ]"
194    
195     if validate_serial "${ALX_SERIAL}" "${ALX_REG_DATE}" "${CUR_MAC}"
196     then
197     ALX_STATE="ok"
198     else
199     # abort on non valid serial
200     ALX_STATE="invalid serial"
201     echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
202     show_invalid_serial_msg
203     exit 1
204     fi
205    
206     # write current state to temp file
207     echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
208     [ -f /hardware-auto-detection ] && rm /hardware-auto-detection
209    
210     # now export ALX_FORCED_RECHECK=true
211     # that the setting will be updated not inserted !
212     export ALX_FORCED_RECHECK=true
213     return 0
214     fi
215    
216     echo -e ${COLOREDSTAR} "Trying to get new serial ..."
217    
218     # request a new serial; one command now (cause must be done in the same session)
219     ALX_SERIAL=$(mysqldo "insert into client_serials (mtime, mac) values('${CUR_MTIME}','${CUR_MAC}');
220     select last_insert_id();")
221    
222     if [[ ${ALX_SERIAL} != NULL ]]
223     then
224     # nice serial output
225     $CURS_UP
226     $SET_WCOL
227     echo "[ SN: ${ALX_SERIAL} ]"
228    
229     # set ALX_STATE to ok so everybody knows that everything was ok
230     ALX_STATE=ok
231    
232     echo "ALX_SERIAL=${ALX_SERIAL}" > /etc/alxconfig-ng/serial
233     echo "ALX_REG_DATE=${CUR_MTIME}" >> /etc/alxconfig-ng/serial
234    
235     evaluate_retval
236     else
237     # print false (works only if this is the first statement here)
238     evaluate_retval
239    
240     # set ALX_STATE to error so everybody sees there was an error
241     ALX_STATE=error
242    
243     # show an error that no new serial was found
244     # nice serial output
245     $CURS_UP
246     $SET_WCOL
247     echo -e "[ SN: ${COLRED}None, 0${COLDEFAULT} ]"
248     fi
249     fi
250    
251     # write current state to temp file
252     echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state
253     echo "ALX_IFACE=${ALX_IFACE}" >> /etc/alxconfig-ng/state/state
254     }
255    
256     # imports current settings to the database resolved by the hardware detection
257     import_settings_to_db()
258     {
259     # note: networking is always 'dhcp' if hw was autodetected
260     # note: default_domain/hostname is set in config.rc
261    
262     # to be safe, we do some sanity checks
263 niro 490 [[ -z ${ALX_DEFAULT_DOMAIN} ]] && ALX_DEFAULT_DOMAIN=localdomain
264     [[ -z ${ALX_DEFAULT_HOSTNAME} ]] && ALX_DEFAULT_HOSTNAME=magellan-alx
265 niro 386
266     # vars used by hwdetect
267     local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
268     local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
269     local MOUSETYPE XMOUSETYPE FULLNAME DEVICE
270    
271     # get setting from hwdetect
272     source /etc/sysconfig/hwsetup/knoppix
273     source /etc/sysconfig/hwsetup/mouse
274    
275     echo
276     echo -e ${COLMAGENTA}"Importing detected settings to database"${COLDEFAULT}
277    
278     # network
279 niro 490 echo " Network settings ..."
280 niro 444 # global settings
281     mysqldo "insert into cfg_network(serial, hostname, domain )
282     values('${ALX_SERIAL}', '${ALX_DEFAULT_HOSTNAME}','${ALX_DEFAULT_DOMAIN}');"
283 niro 386
284 niro 444 # let udev decide which module should be loaded
285     # get all devices from sysfs
286     local i
287     local iface
288     for i in /sys/class/net/eth?
289     do
290     iface=$(basename ${i})
291     NETCARD_DRIVER=$(source /sys/class/net/${iface}/uevent; echo ${PHYSDEVDRIVER})
292     mysqldo "insert into cfg_interfaces(
293     serial,
294     iface,
295     module,
296     networking
297 niro 386 )
298     values(
299     '${ALX_SERIAL}',
300 niro 444 '${iface}',
301 niro 386 '${NETCARD_DRIVER}',
302     'dhcp'
303     );"
304 niro 444 done
305 niro 386 evaluate_retval
306    
307     # xserver
308 niro 490 echo " Graphic settings ..."
309 niro 386 # xserver general
310     ( mysqldo "insert into cfg_graphic(
311     serial,
312     module,
313     resolution,
314     depth,
315     monitorid
316     )
317     values(
318     '${ALX_SERIAL}',
319     '${XMODULE}',
320     '1024x768',
321     '16',
322     '0'
323     );"; )
324     evaluate_retval
325    
326     # input
327 niro 490 echo " Input settings ..."
328 niro 444 mysqldo "insert into cfg_input(serial,mouse,keyboard) values('${ALX_SERIAL}','${XMOUSETYPE}','kbd');"
329 niro 386 evaluate_retval
330    
331     # auth
332 niro 490 echo " Authentification settings ..."
333 niro 386 mysqldo "insert into client_auth(
334     serial,
335     username,
336     shell,
337     vnc,
338     samba,
339     station
340     )
341     values(
342     '${ALX_SERIAL}',
343     '${ALX_UNPRIV_USER}',
344     '',
345     '',
346     '',
347     ''
348     );"
349     evaluate_retval
350    
351     # exchange ssh rsa keys - the first boot needs this !
352     # or no reboot will work via the webadmin
353 niro 490 echo " SSH authentification settings ..."
354 niro 386 HOME=/root config_ssh_auth
355     evaluate_retval
356    
357     # autostart
358 niro 490 echo " Autostart settings ..."
359 niro 386 mysqldo "insert into cfg_autostart(serial,session) values('${ALX_SERIAL}','');"
360    
361     # screensaver
362 niro 490 echo " Screensaver settings ..."
363 niro 386 mysqldo "insert into cfg_screensaver(serial,screensaver) values('${ALX_SERIAL}','')"
364    
365 niro 498 # theme
366     echo " Theme settings ..."
367     mysqldo "insert into cfg_theme(serial,theme) values('${ALX_SERIAL}','${ALX_DEFAULT_THEME}')"
368    
369 niro 386 evaluate_retval
370     }
371    
372     # imports current settings to the database resolved by the hardware detection
373     update_settings_in_db()
374     {
375     # note: networking is always 'dhcp' if hw was autodetected
376     # note: default_domain/hostname is set in config.rc or exported
377     # note: we updating only hardware settings here !
378    
379     # to be safe, we do some sanity checks
380 niro 490 [[ -z ${ALX_DEFAULT_DOMAIN} ]] && ALX_DEFAULT_DOMAIN=localdomain
381     [[ -z ${ALX_DEFAULT_HOSTNAME} ]] && ALX_DEFAULT_HOSTNAME=magellan-alx
382 niro 386
383     # vars used by hwdetect
384     local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME
385     local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER
386     local MOUSETYPE XMOUSETYPE FULLNAME DEVICE
387    
388     # get setting from hwdetect
389     source /etc/sysconfig/hwsetup/knoppix
390     source /etc/sysconfig/hwsetup/mouse
391    
392     echo
393     echo -e ${COLMAGENTA}"Updating detected settings in database"${COLDEFAULT}
394    
395     # network
396 niro 490 echo " Network settings ..."
397 niro 444 mysqldo "update cfg_network set
398     hostname='${ALX_DEFAULT_HOSTNAME}',
399     domain='${ALX_DEFAULT_DOMAIN}';
400     where serial=${ALX_SERIAL};"
401 niro 386
402 niro 444 # let udev decide which module should be loaded
403     # get all devices from sysfs
404     local i
405     local iface
406     for i in /sys/class/net/eth?
407     do
408     iface=$(basename ${i})
409     NETCARD_DRIVER=$(source /sys/class/net/${iface}/uevent; echo ${PHYSDEVDRIVER})
410     mysqldo "update cfg_interfaces set
411     iface='${iface}',
412     module='${NETCARD_DRIVER}',
413     networking='${NETWORKING}',
414     where serial=${ALX_SERIAL};"
415 niro 386
416     # only insert the *FIRST* iface
417     break
418     done
419     evaluate_retval
420    
421     # xserver
422 niro 490 echo " Graphic settings ..."
423 niro 386 # xserver general
424     mysqldo "update cfg_graphic set
425     module='${XMODULE}',
426     resolution='1024x768',
427     depth='16',
428     monitorid='0'
429     where serial=${ALX_SERIAL};"
430     evaluate_retval
431    
432     # input
433 niro 490 echo " Input settings ..."
434 niro 444 mysqldo "update cfg_input set mouse='${XMOUSETYPE}', keyboard='kbd' where serial=${ALX_SERIAL};"
435 niro 386 evaluate_retval
436     }
437    
438     # start|stop
439     preliminary_network()
440     {
441     case $1 in
442     start)
443     # keeping like always safe:
444 niro 388 # no network should be started here
445     ${rc_base}/init.d/network stop
446 niro 386
447     echo -e ${COLMAGENTA}"Starting preliminary networking ... "${COLDEFAULT}
448     # start network configured from /etc/conf.d
449 niro 388 ${rc_base}/init.d/network start
450 niro 386 ;;
451    
452     stop)
453     echo -e ${COLMAGENTA}"Stopping preliminary networking ... "${COLDEFAULT}
454 niro 388 ${rc_base}/init.d/network stop
455 niro 386 ;;
456    
457     *)
458     echo "Usage: preliminary_network {start|stop}"
459     ;;
460     esac
461     }
462    
463     reset_system_settings()
464     {
465     # force load of de kbdkeys
466     loadkeys -q de
467     echo
468     echo -en ${COLRED}
469     echo -n "*** Warning: you are about to reset *all* local settings on this system!"
470     echo -e ${COLDEFAULT}
471     echo "*** Do you really want to continue ?"
472     echo -n "*** Enter 'yes' to continue, anything else to abort: "
473     read kbinsert
474     if [[ ${kbinsert} = yes ]]
475     then
476     echo -en ${COLRED}
477     echo -n "*** OK, you really want it ... killing all settings: "
478     for i in 3 2 1 now
479     do
480     echo -n " ${i}"
481     sleep 1
482     done
483     echo -e ${COLDEFAULT}
484    
485     ## reset all settings:
486     rm -rf ${SETTINGSPATH}/*
487     rm -f /etc/alxconfig-ng/serial
488     rm -rf /etc/alxconfig-ng/state
489    
490 niro 491 # clear all printers
491     :> /etc/printcap
492 niro 499 find /var/spool/lpd/* -type d | xargs rm -rf &> /dev/null
493 niro 386
494     # remove all user settings
495     [ -d ${ALX_UNPRIV_HOME} ] && rm -rf ${ALX_UNPRIV_HOME}
496    
497     # remove all ica-sessions
498     find ${ALX_ICA_SESSIONS} -type f -name '*.ica' | xargs rm
499    
500     # remove all old nics and modules configs
501     find /etc/conf.d -type f -name 'net.*' | xargs rm
502     find /etc/modules.d -type f -name 'net.*' | xargs rm
503    
504     # restore default networking
505     cat ${ALX_SKELETONS}/net/net.eth0 > /etc/conf.d/net.eth0
506    
507     echo "I am done now, press [Enter] to reboot system ..."
508     else
509     echo "Aborted, press [Enter] to reboot system ..."
510     fi
511     read
512     reboot
513     }
514    
515     case $1 in
516     start)
517     # check for global overrides
518     [ -f /hardware-auto-detection ] && ALX_FORCED_RECHECK=true
519     read_cmdline hardware-auto-detection && ALX_FORCED_RECHECK=true
520     read_cmdline alx-reset-settings && ALX_RESET_SETTINGS=true
521    
522     # kill all settings if requested
523     if [[ ${ALX_RESET_SETTINGS} = true ]]
524     then
525     reset_system_settings
526     fi
527    
528     # retrieve or validate current serial
529     get_system_serial
530     if [[ ${ALX_HW_DETECT} = true ]]
531     then
532     if [[ ${ALX_FORCED_RECHECK} = true ]]
533     then
534     update_settings_in_db
535     else
536     import_settings_to_db
537     fi
538    
539     # here we should also exchange the ssh keys
540     # or the system cannot be rebooted after
541     # the first start via the alx-webadmin
542     config_ssh_auth
543     fi
544    
545     # now setup system configuration
546     # alx_setup_or_whatever_it_will_be_called()
547 niro 533 update_system_settings
548 niro 386
549     # stop at last the preliminary networking (dhcp)
550     preliminary_network stop
551     ;;
552    
553     stop)
554     # unset_alx_connected #--> now in alxsetstate-rc6
555     # ! important !: del systemstate
556     [ -f /etc/alxconfig-ng/state/state ] && rm /etc/alxconfig-ng/state/state
557     ;;
558     *)
559     echo "Usage: $0 {start|stop} ..."
560     ;;
561     esac

Properties

Name Value
svn:executable *