#!/bin/bash # $Id$ # #%rlevels: 7:s 0:k #%start: 41 #%stop: 01 #deps #%needs: #%before: #%after: # checks first if the client was already configured and if it has an valid serial # if not it runs the autoconfiguration script # these settings will be used for client setup # # if client was valid it first will check if his settings against the server # if no changes are at server side they will be kept, if yes the get updated. # the server settings has higher priority. source /etc/conf.d/rc source $rc_functions # mysql settings source /etc/alxconfig-ng/config.rc # helper functions source /usr/lib/alxconfig-ng/functions/mysqlfunctions source /usr/lib/alxconfig-ng/functions/serial_functions source /usr/lib/alxconfig-ng/functions/config_modules source /usr/lib/alxconfig-ng/functions/config_network source /usr/lib/alxconfig-ng/functions/config_printers source /usr/lib/alxconfig-ng/functions/config_sessions source /usr/lib/alxconfig-ng/functions/config_x11 source /usr/lib/alxconfig-ng/functions/config_auth source /usr/lib/alxconfig-ng/functions/config_ssh_auth source /usr/lib/alxconfig-ng/functions/config_versions # other needed vars ALX_HW_DETECT=false ALX_FORCED_RECHECK=false ALX_RESET_SETTINGS=false ALX_CONFD_NETWORKING=false # unset vars which may kill us unset ALX_SERIAL ALX_STATE # setup needed directories [ ! -d /etc/alxconfig-ng/state ] && install -d /etc/alxconfig-ng/state # read_cmdline ${item} read_cmdline() { local i for i in $(< /proc/cmdline) do [[ ${i} = $1 ]] && return 0 done return 1 } update_system_settings() { echo -e ${COLMAGENTA}"Checking system setup ..."${COLDEFAULT} # get the modules settings # ! is the first thing that must be configured ! config_modules # imports network settings from db config_networking # imports x11 settings from db config_x11 # imports session settings from db config_sessions # imports printer settings from db config_printing # imports auth settings from db config_auth # exchange ssh rsa keys HOME=/root config_ssh_auth # import version info config_version } get_system_serial() { local CUR_IP CUR_MAC CUR_MTIME ALX_IFACE if [[ ${ALX_CONFD_NETWORKING} = true ]] then ALX_IFACE="$(< ${SETTINGSPATH}/confd-networking)" else ALX_IFACE="eth0" fi # check if serial file exists if [ -f /etc/alxconfig-ng/serial ] && [[ ${ALX_FORCED_RECHECK} = false ]] then source /etc/alxconfig-ng/serial # start preliminary networking (dhcp) preliminary_network start # check if mysql server is reachable # if not abort this script if ! reach_mysql_server then preliminary_network stop exit 1 fi CUR_IP=$(ifconfig ${ALX_IFACE} | sed -n '/addr:/s/ [^r]*..//gp') CUR_MAC=$(ifconfig ${ALX_IFACE} | grep HWaddr | cut -d ' ' -f11) CUR_MTIME=$(date +%s) echo -e ${COLOREDSTAR} "Trying to validate my serial ..." # nice serial output $CURS_UP $SET_WCOL echo "[ SN: ${ALX_SERIAL} ]" if validate_serial "${ALX_SERIAL}" "${ALX_REG_DATE}" "${CUR_MAC}" then ALX_STATE="ok" else # abort on non valid serial ALX_STATE="invalid serial" echo "ALX_STATE=\"${ALX_STATE}\"" > /etc/alxconfig-ng/state/state show_invalid_serial_msg exit 1 fi else # run hardware detection echo if [[ ${ALX_FORCED_RECHECK} = true ]] then echo -e ${COLMAGENTA}"Hardware autodetection forced by system-administrator"${COLDEFAULT} # always disable CONFD_NETWORKING here export ALX_CONFD_NETWORKING="false" else echo -e ${COLMAGENTA}"Preparing system for first boot"${COLDEFAULT} fi ALX_HW_DETECT=true hwsetup # set hostname to alx_default_hostname # use old hostname if this is a forced re-check [[ ${ALX_FORCED_RECHECK} = true ]] && ALX_DEFAULT_HOSTNAME="$(< /etc/hostname)" [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx HOSTNAME="${ALX_DEFAULT_HOSTNAME}" # update the hostname on the system for sure echo "${HOSTNAME}" > /etc/hostname # start preliminary networking (dhcp) preliminary_network start # check if mysql server is reachable # if not abort this script if ! reach_mysql_server then preliminary_network stop exit 1 fi CUR_IP=$(/sbin/ifconfig eth0 | sed -n '/addr:/s/ [^r]*..//gp') CUR_MAC=$(/sbin/ifconfig eth0 | grep HWaddr | cut -d ' ' -f11) CUR_MTIME=$(date +%s) # abort now if this is a forced re-check if [[ ${ALX_FORCED_RECHECK} = true ]] then # but first check the serial source /etc/alxconfig-ng/serial echo -e ${COLOREDSTAR} "Trying to validate my serial ..." # nice serial output $CURS_UP $SET_WCOL echo "[ SN: ${ALX_SERIAL} ]" if validate_serial "${ALX_SERIAL}" "${ALX_REG_DATE}" "${CUR_MAC}" then ALX_STATE="ok" else # abort on non valid serial ALX_STATE="invalid serial" echo "ALX_STATE=${ALX_STATE}" > /etc/alxconfig-ng/state/state show_invalid_serial_msg exit 1 fi # write current state to temp file echo "ALX_STATE=\"${ALX_STATE}\"" > /etc/alxconfig-ng/state/state [ -f /hardware-auto-detection ] && rm /hardware-auto-detection # now export ALX_FORCED_RECHECK=true # that the setting will be updated not inserted ! export ALX_FORCED_RECHECK=true return 0 fi echo -e ${COLOREDSTAR} "Trying to get new serial ..." # request a new serial; one command now (cause must be done in the same session) ALX_SERIAL=$(mysqldo "insert into client_serials (mtime, mac) values('${CUR_MTIME}','${CUR_MAC}'); select last_insert_id();") if [[ ${ALX_SERIAL} != NULL ]] then # nice serial output $CURS_UP $SET_WCOL echo "[ SN: ${ALX_SERIAL} ]" # set ALX_STATE to ok so everybody knows that everything was ok ALX_STATE=ok echo "ALX_SERIAL=\"${ALX_SERIAL}\"" > /etc/alxconfig-ng/serial echo "ALX_REG_DATE=\"${CUR_MTIME}\"" >> /etc/alxconfig-ng/serial evaluate_retval else # print false (works only if this is the first statement here) evaluate_retval # set ALX_STATE to error so everybody sees there was an error ALX_STATE=error # show an error that no new serial was found # nice serial output $CURS_UP $SET_WCOL echo -e "[ SN: ${COLRED}None, 0${COLDEFAULT} ]" fi fi # write current state to temp file echo "ALX_STATE=\"${ALX_STATE}\"" > /etc/alxconfig-ng/state/state echo "ALX_IFACE=\"${ALX_IFACE}\"" >> /etc/alxconfig-ng/state/state } check_is_configured() { if [ -f /etc/alxconfig-ng/state/configured ] then export ALX_CONFIGURED=true else export ALX_CONFIGURED=false fi } # imports current settings to the database resolved by the hardware detection import_settings_to_db() { # note: networking is always 'dhcp' if hw was autodetected # note: default_domain/hostname is set in config.rc # to be safe, we do some sanity checks [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx # vars used by hwsetup local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER local MOUSETYPE XMOUSETYPE FULLNAME DEVICE # get setting from hwsetup source /etc/conf.d/hwsetup/knoppix source /etc/conf.d/hwsetup/mouse echo echo -e ${COLMAGENTA}"Importing detected settings to database"${COLDEFAULT} # network echo -e " Network settings ..." if [[ ${ALX_CONFD_NETWORKING} = true ]] then # get settings #source ${rc_base}/init.d/network &> /dev/null for iface in $(onboot_interface_list ${network_settings}/net.*) do [[ $(< ${SETTINGSPATH}/confd-networking) != ${iface} ]] && continue echo "WARNING: only importing settings for interface [ ${iface} ] !" source ${network_settings}/net.${iface} || exit 1 NETCARD_DRIVER="$(cat /etc/modules.d/net.${iface} | cut -d' ' -f3)" mysqldo "insert into cfg_network( hostname, serial, module, domain, networking, netmask, dns, gateway, broadcast, ip, forcemacto, wireless_bitrate, wireless_channel, wireless_essid, wireless_frequency, wireless_mode, wireless_nick, wireless_auth_mode, wireless_key_length, wireless_key, wireless_key_ascii ) values( '${ALX_DEFAULT_HOSTNAME}', '${ALX_SERIAL}', '${NETCARD_DRIVER}', '${ALX_DEFAULT_DOMAIN}', '${NETWORKING}', '${NETMASK}', '${NAMESERVER}', '${GATEWAY}', '${BROADCAST}', '${IP}', '${FORCE_MAC_TO}', '${WIRELESS_BITRATE}', '${WIRELESS_CHANNEL}', '${WIRELESS_ESSID}', '${WIRELESS_FREQUENCY}', '${WIRELESS_MODE}', '${WIRELESS_NICK}', '${WIRELESS_AUTH_MODE}', '${WIRELESS_KEY_LENGTH}', '${WIRELESS_KEY}', '${WIRELESS_KEY_ASCII}' );" # only insert the *FIRST* iface break done else mysqldo "insert into cfg_network( hostname, serial, module, domain, networking ) values( '${ALX_DEFAULT_HOSTNAME}', '${ALX_SERIAL}', '${NETCARD_DRIVER}', '${ALX_DEFAULT_DOMAIN}', 'dhcp' );" fi evaluate_retval # xserver echo -e " Graphic settings ..." # xserver general ( mysqldo "insert into cfg_graphic( serial, module, resolution, depth, refresh_rate ) values( '${ALX_SERIAL}', '${XMODULE}', '1024x768', '16', '60' );"; ) evaluate_retval # input echo -e " Input settings ..." mysqldo "insert into cfg_input(serial,mouse) values('${ALX_SERIAL}','${XMOUSETYPE}');" evaluate_retval # auth echo -e " Authentification settings ..." mysqldo "insert into client_auth( serial, username, shell, vnc, samba, station ) values( '${ALX_SERIAL}', '${ALX_UNPRIV_USER}', '', '', '', '' );" evaluate_retval # exchange ssh rsa keys - the first boot needs this ! # or no reboot will work via the webadmin echo -e " SSH authentification settings ..." HOME=/root config_ssh_auth evaluate_retval # autostart echo -e " Autostart settings ..." mysqldo "insert into cfg_autostart(serial,session) values('${ALX_SERIAL}','');" # screensaver echo -e " Screensaver settings ..." mysqldo "insert into cfg_screensaver(serial,screensaver) values('${ALX_SERIAL}','')" # version info local alx_os local alx_utils alx_os="$(< /etc/mageversion)" alx_utils="$(magequery -n alxconfig-ng-alx | sed 's:.*\[\ \(.*\)\ \].*:\1:')" alx_utils="${alx_utils/alxconfig-ng-alx-}" mysqldo "insert into client_version(serial,os,utils) values('${ALX_SERIAL}','${alx_os}','${alx_utils}')" evaluate_retval } # imports current settings to the database resolved by the hardware detection update_settings_in_db() { # note: networking is always 'dhcp' if hw was autodetected # note: default_domain/hostname is set in config.rc or exported # note: we updating only hardware settings here ! # to be safe, we do some sanity checks [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx # vars used by hwsetup local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER local MOUSETYPE XMOUSETYPE FULLNAME DEVICE # get setting from hwsetup source /etc/conf.d/hwsetup/knoppix source /etc/conf.d/hwsetup/mouse echo echo -e ${COLMAGENTA}"Updating detected settings in database"${COLDEFAULT} # network echo -e " Network settings ..." if [[ ${ALX_CONFD_NETWORKING} = true ]] then # get settings #source ${rc_base}/init.d/network &> /dev/null for iface in $(onboot_interface_list ${network_settings}/net.*) do [[ $(< ${SETTINGSPATH}/confd-networking) != ${iface} ]] && continue echo "WARNING: only importing settings for interface [ ${iface} ] !" source ${network_settings}/net.${iface} || exit 1 NETCARD_DRIVER="$(cat /etc/modules.d/net.${iface} | cut -d' ' -f3)" mysqldo "update cfg_network set hostname='${ALX_DEFAULT_HOSTNAME}', module='${NETCARD_DRIVER}', domain='${ALX_DEFAULT_DOMAIN}', networking='${NETWORKING}', netmask='${NETMASK}', dns='${NAMESERVER}', gateway='${GATEWAY}', broadcast='${BROADCAST}', ip='${IP}', forcemacto='${FORCE_MAC_TO}', wireless_bitrate='${WIRELESS_BITRATE}', wireless_channel='${WIRELESS_CHANNEL}', wireless_essid='${WIRELESS_ESSID}', wireless_frequency='${WIRELESS_FREQUENCY}', wireless_mode='${WIRELESS_MODE}', wireless_nick='${WIRELESS_NICK}', wireless_auth_mode='${WIRELESS_AUTH_MODE}', wireless_key_length='${WIRELESS_KEY_LENGTH}', wireless_key='${WIRELESS_KEY}', wireless_key_ascii='${WIRELESS_KEY_ASCII}' where serial=${ALX_SERIAL};" # only insert the *FIRST* iface break done else mysqldo "update cfg_network set hostname='${ALX_DEFAULT_HOSTNAME}', module='${NETCARD_DRIVER}', domain='${ALX_DEFAULT_DOMAIN}', networking='dhcp' where serial=${ALX_SERIAL};" fi evaluate_retval # xserver echo -e " Graphic settings ..." # xserver general mysqldo "update cfg_graphic set module='${XMODULE}', resolution='1024x768', depth='16', refresh_rate='60' where serial=${ALX_SERIAL};" evaluate_retval # input echo -e " Input settings ..." mysqldo "update cfg_input set mouse='${XMOUSETYPE}' where serial=${ALX_SERIAL};" evaluate_retval # version info local alx_os local alx_utils alx_os="$(< /etc/mageversion)" alx_utils="$(magequery -n alxconfig-ng-alx | sed 's:.*\[\ \(.*\)\ \].*:\1:')" alx_utils="${alx_utils/alxconfig-ng-alx-}" mysqldo "update client_version set os='${alx_os}', utils='${alx_utils}' where serial=${ALX_SERIAL};" } # imports current settings to the local system resolved by the hardware detection # we only need the network settings import_settings_local() { # note: networking is always 'dhcp' if hw was autodetected # note: default_domain/hostname is set in config.rc # to be safe, we do some sanity checks [ -z "${ALX_DEFAULT_DOMAIN}" ] && ALX_DEFAULT_DOMAIN=localdomain [ -z "${ALX_DEFAULT_HOSTNAME}" ] && ALX_DEFAULT_HOSTNAME=magellan-alx # vars used by hwsetup local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER local MOUSETYPE XMOUSETYPE FULLNAME DEVICE # get setting from hwsetup source /etc/conf.d/hwsetup/knoppix echo echo -e ${COLMAGENTA}"Importing detected settings to local system"${COLDEFAULT} if [[ ${ALX_CONFD_NETWORKING} = false ]] then #[ ! -d ${SETTINGSPATH} ] && install -d ${SETTINGSPATH} #echo "${NETCARD_DRIVER}" > ${SETTINGSPATH}/modules # set an device alias for modprobe.conf and modules.conf [ ! -d /etc/modules.d ] && install -d /etc/modules.d [ ! -d /etc/modprobe.d ] && install -d /etc/modprobe.d echo "alias eth0 ${NETCARD_DRIVER}" > /etc/modules.d/net.eth0 echo "alias eth0 ${NETCARD_DRIVER}" > /etc/modprobe.d/net.eth0 # regenerate modprobe.conf [ -x $(which modules-update) ] && modules-update || echo "cannot regen modprobe.conf" evaluate_retval fi # set system state to 'already configured' touch /etc/alxconfig-ng/state/configured # install slim desktopmanager configuration config_display_manager # if only an recheck was forced than abort now [[ ${ALX_FORCED_RECHECK} = true ]] && return 0 # create a fresh fluxbox directory [ -d ${ALX_UNPRIV_HOME}/.fluxbox ] && rm -rf ${ALX_UNPRIV_HOME}/.fluxbox install -d ${ALX_UNPRIV_HOME}/.fluxbox # now generate fluxbox config files # fluxbox main config cat ${ALX_SKELETONS}/fluxbox/init \ > ${ALX_UNPRIV_HOME}/.fluxbox/init # fluxbox autostart cat ${ALX_SKELETONS}/fluxbox/apps \ > ${ALX_UNPRIV_HOME}/.fluxbox/apps # fluxbox menu header cat ${ALX_SKELETONS}/fluxbox/menu.header \ > ${ALX_UNPRIV_HOME}/.fluxbox/menu # now fix it with proper messages :P local ver="$(< /etc/mageversion)" sed -i "s:@CHANGEME@:alx-${ver} #${ALX_SERIAL}:g" \ ${ALX_UNPRIV_HOME}/.fluxbox/menu # add a newline (maybe there is no crlf in the header) echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu # fluxbox menu footer cat ${ALX_SKELETONS}/fluxbox/menu.footer \ >> ${ALX_UNPRIV_HOME}/.fluxbox/menu # add a newline (maybe there is no crlf in the footer) echo >> ${ALX_UNPRIV_HOME}/.fluxbox/menu # setup some standart icons (sysinfo.lnk) # basic config cat ${ALX_SKELETONS}/xtdesktop/xtdeskrc > ${ALX_UNPRIV_HOME}/.xtdeskrc # clean desktop icon location [ -d ${ALX_UNPRIV_HOME}/.xtdesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.xtdesktop install -d ${ALX_UNPRIV_HOME}/.xtdesktop # last but not least gen a icon with some sys informations local sysinfo local osversion local xres local yres osversion="$(< /etc/mageversion)" sysinfo="Hostname: ${ALX_DEFAULT_HOSTNAME} Serial: #${ALX_SERIAL} OS: alx-${osversion} Kernel: $(uname -r)" # at first boot we got always a resolution of 1024x768-16@60 # middle of the screen # (no txt - length required, xtdesk manage that itself) xres="$((1024 / 2))" # default y pos (full yres -22 !) yres="$((768 - 22 ))" generate_icon \ --name "${sysinfo}" \ --command "exit 0" \ --icon "${ALX_SESSIONS_ICONS}/sysinfo.png" \ --dest "${ALX_UNPRIV_HOME}/.xtdesktop/sysinfo.lnk" \ --xres "${xres}" \ --yres "${yres}" \ --icon-width "1" \ --icon-height "1" # create a xinitrc echo "exec startfluxbox" > ${ALX_UNPRIV_HOME}/.xinitrc # set correct permissions chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME} chown ${ALX_UNPRIV_USER}:${ALX_UNPRIV_GROUP} ${ALX_UNPRIV_HOME}/.fluxbox chmod 0755 ${ALX_UNPRIV_HOME}/.fluxbox chmod 0755 ${ALX_UNPRIV_HOME}/.xtdesktop chmod 0644 ${ALX_UNPRIV_HOME}/.xtdeskrc chmod 0644 ${ALX_UNPRIV_HOME}/.xinitrc } # start|stop preliminary_network() { local module local modulesconf if [ -f /etc/alxconfig-ng/state/configured ] then # compat for old clients if [ -f ${SETTINGSPATH}/modules ] then # get module name module=$(cat ${SETTINGSPATH}/modules) modprobe ${module} fi # check modprobe.conf if [[ $(kernel_major_version) = 2.4 ]] then modulesconf="/etc/modules.conf" else modulesconf="/etc/modprobe.conf" fi if [[ -z $(grep eth0 ${modulesconf}) ]] then modules-update force fi else # vars used by hwsetup local NETCARD_FULLNAME NETCARD_DRIVER MOUSE_FULLNAME MOUSE_DEVICE SOUND_FULLNAME local SOUND_DRIVER XSERVER XMODULE XDESC FLOPPY_FULLNAME FLOPPY_DEVICE FLOPPY_DRIVER # get setting from hwsetup source /etc/conf.d/hwsetup/knoppix modprobe ${NETCARD_DRIVER} fi case $1 in start) # keeping like always safe: # no network should be startet here, # so we can delete all pid files if one exists if ps -A|grep dhcpcd > /dev/null then echo -e ${COLMAGENTA}"Forcing network down"${COLDEFAULT} dhcpcd -k sleep 1 else rm -f /var/run/dhcpcd-eth?.pid fi [[ ${ALX_CONFD_NETWORKING} = true ]] && [[ ${RUNLEVEL} != S ]] && \ ${rc_base}/init.d/network stop echo -e ${COLMAGENTA}"Starting preliminary networking ... "${COLDEFAULT} # start network configured from /etc/conf.d if [[ ${ALX_CONFD_NETWORKING} = true ]] then ${rc_base}/init.d/network start else echo -e ${COLOREDSTAR}"Starting default dhcp based networking ... "${COLDEFAULT} # -t 10 timeout of 10 secs dhcpcd -t 10 &> /dev/null evaluate_retval fi ;; stop) echo -e ${COLMAGENTA}"Stopping preliminary networking ... "${COLDEFAULT} if [[ ${ALX_CONFD_NETWORKING} = true ]] then ${rc_base}/init.d/network stop else echo -e ${COLOREDSTAR}"Stopping default dhcp based networking ... "${COLDEFAULT} ifconfig eth0 down fi if ps -A|grep dhcpcd > /dev/null then dhcpcd -z &> /dev/null sleep 1 fi evaluate_retval ;; *) echo "Usage: preliminary_network {start|stop}" ;; esac } reset_system_settings() { # force load of de kbdkeys loadkeys -q de echo echo -en ${COLRED} echo -n "*** Warning: you are about to reset *all* local settings on this system!" echo -e ${COLDEFAULT} echo "*** Do you really want to continue ?" echo -n "*** Enter 'yes' to continue, anything else to abort: " read kbinsert if [[ ${kbinsert} = yes ]] then echo -en ${COLRED} echo -n "*** OK, you really want it ... killing all settings: " for i in 3 2 1 now do echo -n " ${i}" sleep 1 done echo -e ${COLDEFAULT} ## reset all settings: rm -rf ${SETTINGSPATH}/* rm -f /etc/alxconfig-ng/serial rm -rf /etc/alxconfig-ng/state # clear all printers & net-shares :> /etc/cups/printers.conf :> /etc/samba/smb.conf # remove inetd, cups & smb from init rc-config del inetd &> /dev/null rc-config del cups &> /dev/null rc-config del samba &> /dev/null # remove all user settings [ -d ${ALX_UNPRIV_HOME} ] && rm -rf ${ALX_UNPRIV_HOME} # remove all ica-sessions find ${ALX_ICA_SESSIONS} -type f -name '*.ica' | xargs rm # remove all old nics and modules configs find /etc/conf.d -type f -name 'net.*' | xargs rm find /etc/modules.d -type f -name 'net.*' | xargs rm # restore default networking cat ${ALX_SKELETONS}/net/net.eth0 > /etc/conf.d/net.eth0 echo "I am done now, press [Enter] to reboot system ..." else echo "Aborted, press [Enter] to reboot system ..." fi read reboot } onboot_interface_list() { local file local devices local iface # get list of all devices for file in $@ do if [[ $(read_value ONBOOT ${file}) = yes ]] then iface="$(basename ${file} | sed s/net.//)" # exclude backup files case "${iface}" in *~) ;; *) devices="${devices} $(basename ${file} | sed s/net.//)" ;; esac fi done echo "${devices}" } # read values from net.* files read_value() { local var="$1" local file="$2" local value # local all possible vars # global local ONBOOT local NETWORKING # static local IP local NETMASK local BROADCAST local NETWORKING local FORCE_MAC_TO # dhcp local DHCP_PROG local DHCP_START local DHCP_STOP # default gw local GATEWAY local GATEWAY_IF # wireless extensions local WIRELESS_AP local WIRELESS_AUTH_MODE local WIRELESS_BITRATE local WIRELESS_CHANNEL local WIRELESS_DEFAULT_KEY local WIRELESS_ESSID local WIRELESS_FREQUENCY local WIRELESS_KEY local WIRELESS_KEY_ASCII local WIRELESS_KEY_0 local WIRELESS_KEY_1 local WIRELESS_KEY_2 local WIRELESS_KEY_3 local WIRELESS_KEY_LENGTH local WIRELESS_MODE local WIRELESS_NICK local WIRELESS_NWID local WIRELESS_POWER source ${file} eval value=\$$(echo ${var}) echo "${value}" } case $1 in start) # check for global overrides [ -f ${SETTINGSPATH}/confd-networking ] && ALX_CONFD_NETWORKING=true [ -f /hardware-auto-detection ] && ALX_FORCED_RECHECK=true read_cmdline hardware-auto-detection && ALX_FORCED_RECHECK=true read_cmdline alx-reset-settings && ALX_RESET_SETTINGS=true # kill all settings if requested if [[ ${ALX_RESET_SETTINGS} = true ]] then reset_system_settings fi # retrieve or validate current serial get_system_serial if [[ ${ALX_HW_DETECT} = true ]] then if [[ ${ALX_FORCED_RECHECK} = true ]] then update_settings_in_db else import_settings_to_db fi import_settings_local # here we should also exchange the ssh keys # or the system cannot be rebooted after # the first start via the alx-webadmin config_ssh_auth fi # now setup system configuration # alx_setup_or_whatever_it_will_be_called() [[ ${ALX_HW_DETECT} = false ]] && update_system_settings # stop at last the preliminary networking (dhcp) preliminary_network stop ;; stop) # unset_alx_connected #--> now in alxsetstate-rc6 # ! important !: del systemstate [ -f /etc/alxconfig-ng/state/state ] && rm /etc/alxconfig-ng/state/state sleep 0.1 ;; *) echo "Usage: $0 {start|stop} ..." ;; esac