#!/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 ${ALX_FUNCTIONS}/common source ${ALX_FUNCTIONS}/mysqlfunctions source ${ALX_FUNCTIONS}/serial_functions source ${ALX_FUNCTIONS}/config_modules source ${ALX_FUNCTIONS}/config_plugins source ${ALX_FUNCTIONS}/config_network source ${ALX_FUNCTIONS}/config_printers source ${ALX_FUNCTIONS}/config_sessions source ${ALX_FUNCTIONS}/config_x11 source ${ALX_FUNCTIONS}/config_auth source ${ALX_FUNCTIONS}/config_ssh_auth source ${ALX_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 update_system_settings() { rc_mecho Checking system setup ... # get the modules settings # ! is the first thing that must be configured ! config_modules # install or uninstall plugins config_plugins # 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) rc_print "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 rc_mecho "Hardware autodetection forced by system-administrator" # always disable CONFD_NETWORKING here export ALX_CONFD_NETWORKING="false" else rc_mecho "Preparing system for first boot" 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 ${ALX_IFACE} | sed -n '/addr:/s/ [^r]*..//gp') CUR_MAC=$(/sbin/ifconfig ${ALX_IFACE} | 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 rc_print "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 rc_print "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 rc_mecho "Importing detected settings to database" # network rc_mecho " Network settings ..." if [[ ${ALX_CONFD_NETWORKING} = true ]] then # get settings for iface in $(onboot_interface_list ${network_settings}/net.*) do [[ $(< ${SETTINGSPATH}/confd-networking) != ${iface} ]] && continue rc_echo "WARNING: only importing settings for interface [ ${iface} ] !" source ${network_settings}/net.${iface} || echo "Error: could not read '${network_settings}/net.${iface}'" NETCARD_DRIVER="$(cat /etc/modprobe.d/net.${iface}.conf | 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 rc_mecho " 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 rc_mecho " Input settings ..." mysqldo "insert into cfg_input(serial,mouse) values('${ALX_SERIAL}','${XMOUSETYPE}');" evaluate_retval # auth rc_mecho " 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 rc_mecho " SSH authentification settings ..." HOME=/root config_ssh_auth evaluate_retval # autostart rc_mecho " Autostart settings ..." mysqldo "insert into cfg_autostart(serial,session) values('${ALX_SERIAL}','');" # screensaver rc_mecho " Screensaver settings ..." mysqldo "insert into cfg_screensaver(serial,screensaver) values('${ALX_SERIAL}','')" # version info rc_mecho " OS version info ..." local alx_os local alx_utils alx_os="$(< /etc/mageversion)" alx_utils="$(magequery -n alxconfig-ng | sed 's:.*\[\ \(.*\)\ \].*:\1:')" alx_utils="${alx_utils/alxconfig-ng-}" 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 rc_mecho "Updating detected settings in database" # network rc_mecho " 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 rc_echo "WARNING: only importing settings for interface [ ${iface} ] !" source ${network_settings}/net.${iface} || exit 1 NETCARD_DRIVER="$(cat /etc/modprobe.d/net.${iface}.conf | 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 rc_mecho " 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 rc_mecho " Input settings ..." mysqldo "update cfg_input set mouse='${XMOUSETYPE}' where serial=${ALX_SERIAL};" evaluate_retval # version info rc_mecho " OS 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 rc_mecho "Importing detected settings to local system" if [[ ${ALX_CONFD_NETWORKING} = false ]] then # set an device alias for modprobe.conf [ ! -d /etc/modprobe.d ] && install -d /etc/modprobe.d # update only if not the same (to speed up bootprocess - no depmod) CONFIG="/etc/modprobe.d/net.${ALX_IFACE}.conf" clearconfig addconfig "alias ${ALX_IFACE} ${cfg_network_module}" # update confd-networking default iface [ ! -d ${SETTINGSPATH} ] && install -d ${SETTINGSPATH} CONFIG="${SETTINGSPATH}/confd-networking" clearconfig addconfig "${ALX_IFACE}" # regenerate modprobe.conf [ -x $(which modules-update) ] && modules-update || rc_echo "modules-update not found!" 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 local fbinit if [ -f ${ALX_SKELETONS}/fluxbox/init ] then fbinit="${ALX_SKELETONS}/fluxbox/init" else fbinit="/usr/share/fluxbox/init" fi cat ${fbinit} > ${ALX_UNPRIV_HOME}/.fluxbox/init # fluxbox autostart CONFIG="${ALX_UNPRIV_HOME}/.fluxbox/apps" # do not show decorations on messages generated with xmessage if [ -x /usr/bin/xmessage ] then addconfig '[app] (xmessage)' addconfig ' [Deco] {NONE}' addconfig '[end]' fi # add icon utility [ -x /usr/bin/idesk ] && addconfig '[startup] {nohup idesk > /dev/null &}' # add numlock utility [ -x /usr/bin/numlockx ] && addconfig '[startup] {nohup numlockx on &}' # fluxbox hotkeys local fbkeys if [ -f ${ALX_SKELETONS}/fluxbox/keys ] then fbkeys="${ALX_SKELETONS}/fluxbox/keys" else fbkeys="/usr/share/fluxbox/keys" fi cat ${fbkeys} > ${ALX_UNPRIV_HOME}/.fluxbox/keys # 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) # clean desktop icon location [ -d ${ALX_UNPRIV_HOME}/.idesktop ] && rm -rf ${ALX_UNPRIV_HOME}/.idesktop install -d ${ALX_UNPRIV_HOME}/.idesktop # add shutdown, reboot icons local name # default settings declare -i x=30 declare -i y=30 for i in shutdown reboot do case ${i} in shutdown) name="Herunterfahren" ;; reboot) name="Neustarten" ;; esac generate_icon \ --name "${name}" \ --command "/usr/lib/alxconfig-ng/bin/user_${i}.sh" \ --icon "${ALX_SESSIONS_ICONS}/${i}.png" \ --dest "${dest}/${i}.lnk" \ --xres "${x}" \ --yres "${y}" y=$((${y} + 80)) done # 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}/.idesktop/sysinfo.lnk" \ --xres "${xres}" \ --yres "${yres}" \ --icon-width "1" \ --icon-height "1" # 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}/.idesktop if [ -f ${ALX_UNPRIV_HOME}/.ideskrc ] then chmod 0644 ${ALX_UNPRIV_HOME}/.ideskrc fi } # start|stop preliminary_network() { local module 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 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 [[ ! -z $(pidof $(basename ${ALX_DHCP_PROG})) ]] then rc_mecho "Forcing network down" killall $(basename ${ALX_DHCP_PROG}) &> /dev/null sleep 1 fi [[ ${ALX_CONFD_NETWORKING} = true ]] && ${rc_base}/init.d/network stop rc_mecho "Starting preliminary networking ... " # start network configured from /etc/conf.d if [[ ${ALX_CONFD_NETWORKING} = true ]] then ${rc_base}/init.d/network start else rc_print "Starting default dhcp based networking ... " ${ALX_DHCP_PROG} ${ALX_DHCP_START} ${ALX_IFACE} &> /dev/null evaluate_retval fi ;; stop) rc_mecho "Stopping preliminary networking ... " if [[ ${ALX_CONFD_NETWORKING} = true ]] then ${rc_base}/init.d/network stop else rc_print "Stopping default dhcp based networking ... " ifconfig ${ALX_IFACE} down fi if [[ ! -z $(pidof $(basename ${ALX_DHCP_PROG})) ]] then killall $(basename ${ALX_DHCP_PROG}) &> /dev/null sleep 1 fi evaluate_retval ;; *) echo "Usage: preliminary_network {start|stop}" ;; esac } reset_system_settings() { # force load of de kbdkeys [ -x /usr/bin/loadkeys ] && loadkeys -q de [ -x /sbin/loadkmap ] && loadkmap < /usr/share/busybox/keymaps/de.kmap rc_echo rc_echo -en "${COLRED}" rc_echo -n '--- Warning: you are about to reset *all* local settings on this system!' rc_echo -e "${COLDEFAULT}" rc_echo '--- Do you really want to continue ?' rc_echo -n '--- Enter 'yes' to continue, anything else to abort: ' read kbinsert if [[ ${kbinsert} = yes ]] then rc_echo -en "${COLRED}" rc_echo -n '--- OK, you really want it ... killing all settings: ' for i in 3 2 1 now do rc_echo -n " ${i}" sleep 1 done rc_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/printcap # remove lprng rc-config del lprng &> /dev/null rc-config del nmbd &> /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 --no-run-if-empty rm # remove all old nics and modules configs find /etc/conf.d -type f -name 'net.*' | xargs --no-run-if-empty rm find /etc/modprobe.d -type f -name 'net.*' | xargs --no-run-if-empty rm # restore default networking cat ${ALX_SKELETONS}/net/net.eth0 > /etc/conf.d/net.eth0 rc_echo "I am done now, press [Enter] to reboot system ..." else rc_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