--- alx-src/trunk/tinyalxconfig-ng/functions/config_network.sh 2008/06/04 18:19:44 394 +++ alx-src/trunk/tinyalxconfig-ng/functions/config_network.sh 2008/06/05 19:10:14 456 @@ -1,217 +1,121 @@ -# $Header: /home/cvsd/alx-cvs/alx-src/tinyalxconfig-ng/functions/config_network.sh,v 1.3 2008-06-04 18:19:44 niro Exp $ +# $Header: /home/cvsd/alx-cvs/alx-src/tinyalxconfig-ng/functions/config_network.sh,v 1.10 2008-06-05 19:10:14 niro Exp $ # configures networkin on the host via mysql db settings -get_network_settings() +# needs exported iface variable! +add_iface_cfg() { - local x i all DB_NETWORK - - # all arrays: - # -> hostname modules domain networking ip netmask dns gateway broadcast - - all=$(mysqldo "select iface, - hostname, - module, - domain, - networking, - ip, - netmask, - dns, - gateway, - broadcast - from cfg_network where serial='${ALX_SERIAL}'") - - # split'em up and put 'em in an array - declare -i i=0 - for x in ${all} - do - DB_NETWORK[${i}]="${x}" - ((i++)) - done - - # and now put in usable var names and export them systemwide - export ALX_IFACE="${DB_NETWORK[0]:=NULL}" - export ALX_HOSTNAME="${DB_NETWORK[1]:=NULL}" - export ALX_MODULE="${DB_NETWORK[2]:=NULL}" - export ALX_DOMAIN="${DB_NETWORK[3]:=NULL}" - export ALX_NETWORKING="${DB_NETWORK[4]:=NULL}" - export ALX_IP="${DB_NETWORK[5]:=NULL}" - export ALX_NETMASK="${DB_NETWORK[6]:=NULL}" - export ALX_DNS="${DB_NETWORK[7]:=NULL}" - export ALX_GATEWAY="${DB_NETWORK[8]:=NULL}" - export ALX_BROADCAST="${DB_NETWORK[9]:=NULL}" - - # the new mac address hack - export ALX_FORCEMACTO=$(mysqldo "select forcemacto from cfg_network where serial='${ALX_SERIAL}'") - - # wireless extensions - export ALX_WIRELESS_BITRATE=$(mysqldo "select wireless_bitrate from cfg_network where serial='${ALX_SERIAL}'") - export ALX_WIRELESS_CHANNEL=$(mysqldo "select wireless_channel from cfg_network where serial='${ALX_SERIAL}'") - export ALX_WIRELESS_ESSID=$(mysqldo "select wireless_essid from cfg_network where serial='${ALX_SERIAL}'") - export ALX_WIRELESS_FREQUENCY=$(mysqldo "select wireless_frequency from cfg_network where serial='${ALX_SERIAL}'") - export ALX_WIRELESS_MODE=$(mysqldo "select wireless_mode from cfg_network where serial='${ALX_SERIAL}'") - export ALX_WIRELESS_NICK=$(mysqldo "select wireless_nick from cfg_network where serial='${ALX_SERIAL}'") - export ALX_WIRELESS_AUTH_MODE=$(mysqldo "select wireless_auth_mode from cfg_network where serial='${ALX_SERIAL}'") - export ALX_WIRELESS_KEY_LENGTH=$(mysqldo "select wireless_key_length from cfg_network where serial='${ALX_SERIAL}'") - export ALX_WIRELESS_KEY=$(mysqldo "select wireless_key from cfg_network where serial='${ALX_SERIAL}'") - export ALX_WIRELESS_KEY_ASCII=$(mysqldo "select wireless_key_ascii from cfg_network where serial='${ALX_SERIAL}'") -} - -check_network_settings() -{ - # sanity checks - [[ ${ALX_IFACE} = NULL ]] && return 1 - [[ ${ALX_HOSTNAME} = NULL ]] && return 1 - [[ ${ALX_NETWORKING} = NULL ]] && return 1 - - # if we get here, everything is ok - return 0 + echo "$@" >> /etc/conf.d/net.${iface} } config_networking() { local iface - # first of all get the vars - get_network_settings - if ! check_network_settings - then - ${WARNING} "Could not retrieve network settings, doing nothing ..." - return 1 - fi - - # get the right nic - if [[ -z ${ALX_IFACE} ]] || [[ ${ALX_IFACE} = NULL ]] - then - # default is 'eth0' - iface="eth0" - else - iface="${ALX_IFACE}" - fi + # retrieve informations about hostname and co + evaluate_table cfg_network + + # configure hostname and domain settings: + echo "${cfg_network_hostname}" > /etc/hostname + echo -e "127.0.0.1\tlocalhost.${cfg_network_domain}\tlocalhost\t${cfg_network_hostname}" > /etc/hosts + +# if ! check_network_settings +# then +# echo -e "${COLYELLOW}Could not retrieve network settings, doing nothing ...${COLDEFAULT}" +# return 1 +# fi # 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 - # update the preliminary network - # set an device alias for modprobe.conf - [ ! -d /etc/modules.d ] && install -d /etc/modules.d - # update only if not the same (to speed up bootprocess - no depmod) - if [ ! -f /etc/modules.d/net.${iface} ] || - [[ ${iface} != $(cat /etc/modules.d/net.${iface} | cut -d' ' -f2) ]] - then - echo "alias ${iface} ${ALX_MODULE}" > /etc/modules.d/net.${iface} - fi - - # update confd-networking default iface - [ ! -d ${SETTINGSPATH} ] && install -d ${SETTINGSPATH} - echo "${iface}" > ${SETTINGSPATH}/confd-networking - - # hostname && hosts - echo "${ALX_HOSTNAME}" > /etc/hostname - echo -e "127.0.0.1\tlocalhost.${ALX_DOMAIN}\tlocalhost\t${ALX_HOSTNAME}" > /etc/hosts - - # network devices - - # always on boot - echo 'ONBOOT="yes"' > /etc/conf.d/net.${iface} - echo "NETWORKING=\"${ALX_NETWORKING}\"" >> /etc/conf.d/net.${iface} - - case ${ALX_NETWORKING} in - dhcp|DHCP) - echo 'DHCP_PROG="/sbin/udhcpc"' >> /etc/conf.d/net.${iface} - # timeout after 10 seconds and quit after retrieving a lease - echo 'DHCP_START="-t 10 -q"' >> /etc/conf.d/net.${iface} - ;; - - static|STATIC) - # add hostname with valid ip to hosts - echo -e "${ALX_IP}\t${ALX_HOSTNAME}.${ALX_DOMAIN}\t${ALX_HOSTNAME}" >> /etc/hosts - echo "IP=\"${ALX_IP}\"" >> /etc/conf.d/net.${iface} - echo "NETMASK=\"${ALX_NETMASK}\"" >> /etc/conf.d/net.${iface} - echo "BROADCAST=\"${ALX_BROADCAST}\"" >> /etc/conf.d/net.${iface} - ;; - esac - - # gateway or gateway overrides - if [[ ${ALX_GATEWAY} != NULL ]] - then - echo "GATEWAY=\"${ALX_GATEWAY}\"" >> /etc/conf.d/net.${iface} - echo "GATEWAY_IF=\"${iface}\"" >> /etc/conf.d/net.${iface} - fi - - # force mac address override - if [[ ${ALX_FORCEMACTO} != NULL ]] - then - echo "FORCE_MAC_TO=\"${ALX_FORCEMACTO}\"" >> /etc/conf.d/net.${iface} - fi - - # nameserver or nameserver overrides - if [[ ${ALX_DNS} != NULL ]] - then - echo "nameserver ${ALX_DNS}" > /etc/resolv.conf - fi - - # setup smb.conf (little sed magic:) - # first get smb version ! - local smbconf - [[ $(smbd --version | cut -d' ' -f2) > 2.999 ]] && smbconf=smb3.conf || smbconf=smb.conf - - cat ${ALX_SKELETONS}/samba/${smbconf} > /etc/samba/smb.conf - sed -i -e "s:\(workgroup = \).*:\1${ALX_DOMAIN}:" /etc/samba/smb.conf - - # wireless extensions - local value - local var - for var in ALX_WIRELESS_BITRATE \ - ALX_WIRELESS_CHANNEL \ - ALX_WIRELESS_ESSID \ - ALX_WIRELESS_FREQUENCY \ - ALX_WIRELESS_MODE \ - ALX_WIRELESS_NICK \ - ALX_WIRELESS_AUTH_MODE \ - ALX_WIRELESS_KEY_LENGTH \ - ALX_WIRELESS_KEY \ - ALX_WIRELESS_KEY_ASCII +# # update confd-networking default iface +# [ ! -d ${SETTINGSPATH} ] && install -d ${SETTINGSPATH} +# echo "${iface}" > ${SETTINGSPATH}/confd-networking + + # configure all available interfaces but activate only the default_iface! + iface_list=$(mysqldo "select iface from cfg_interfaces where serial='${ALX_SERIAL}'") + + for iface in ${iface_list} do - # get the value of $var - eval value=\$$(echo ${var}) + # initialize the config + :> /etc/conf.d/net.${iface} + + # retrieve information from mysql + evaluate_table cfg_interfaces "where serial='${ALX_SERIAL}' and iface='${iface}'" - # write it only if not empty - if [[ -n ${value} ]] && [[ ${value} != NULL ]] + if [[ ${iface} = ${cfg_network_default_iface} ]] then - # remove ALX_ from var - echo "${var/ALX_/}=\"${value}\"" >> /etc/conf.d/net.${iface} + add_iface_cfg "ONBOOT=yes" + else + add_iface_cfg "ONBOOT=no" fi - # clear value - unset value - done + add_iface_cfg NETWORKING=${cfg_interfaces_networking} - # setup wpa-driver (only zydas atm) - [[ ${ALX_MODULE} = zd1211 ]] && \ - echo "WIRELESS_WPA_DRIVER=zydas" >> /etc/conf.d/net.${iface} - - # unset all vars - unset ALX_HOSTNAME - unset ALX_MODULE - unset ALX_DOMAIN - unset ALX_NETWORKING - unset ALX_IP - unset ALX_NETMASK - unset ALX_DNS - unset ALX_GATEWAY - unset ALX_BROADCAST - unset ALX_FORCEMACTO - unset ALX_IFACE - unset ALX_WIRELESS_BITRATE - unset ALX_WIRELESS_CHANNEL - unset ALX_WIRELESS_ESSID - unset ALX_WIRELESS_FREQUENCY - unset ALX_WIRELESS_MODE - unset ALX_WIRELESS_NICK - unset ALX_WIRELESS_AUTH_MODE - unset ALX_WIRELESS_KEY_LENGTH - unset ALX_WIRELESS_KEY - unset ALX_WIRELESS_KEY_ASCII -} + case ${cfg_interfaces_networking} in + dhcp|DHCP) + add_iface_cfg "DHCP_PROG=/sbin/udhcpc" + # timeout after 10 seconds and quit after retrieving a lease + add_iface_cfg 'DHCP_START="-t 10 -q"' + ;; + + static|STATIC) + # add hostname with valid ip to hosts + echo -e "${cfg_interfaces_ip}\t${cfg_interfaces_hostname}.${cfg_interfaces_domain}\t${cfg_interfaces_hostname}" >> /etc/hosts + add_iface_cfg "IP=${cfg_interfaces_ip}" + add_iface_cfg "NETMASK=${cfg_interfaces_netmask}" + add_iface_cfg "BROADCAST=${cfg_interfaces_broadcast}" + ;; + esac + # gateway or gateway overrides + if [[ ${cfg_interfaces_gateway} != NULL ]] + then + add_iface_cfg "GATEWAY=${cfg_interfaces_gateway}" + fi + + # nameserver or nameserver overrides + if [[ ${cfg_interfaces_dns} != NULL ]] + then + add_iface_cfg "NAMESERVER="${cfg_interfaces_dns}"" + fi + + # force mac address override + if [[ ${cfg_interfaces_forcemacto} != NULL ]] + then + add_iface_cfg FORCE_MAC_TO=${cfg_interfaces_forcemacto} + fi + + # wireless extensions + local value + local var + for var in cfg_interfaces_wireless_bitrate \ + cfg_interfaces_wireless_channel \ + cfg_interfaces_wireless_essid \ + cfg_interfaces_wireless_frequency \ + cfg_interfaces_wireless_mode \ + cfg_interfaces_wireless_nick \ + cfg_interfaces_wireless_auth_mode \ + cfg_interfaces_wireless_key_length \ + cfg_interfaces_wireless_key \ + cfg_interfaces_wireless_key_ascii + do + # get the value of $var + eval value=\$$(echo ${var}) + + # write it only if not empty + if [[ -n ${value} ]] && [[ ${value} != NULL ]] + then + # remove cfg_interfaces_from var and convert to upcase + add_iface_cfg "$(echo ${var/cfg_network_/} | tr '[:lower:]' '[:upper:]')=${value}" + fi + + # clear value + unset value + done + + # setup wpa-driver (only zydas atm) + case ${cfg_interfaces_module} in + zd1211) add_iface_cfg "WIRELESS_WPA_DRIVER=zydas" ;; + esac + done +}