1 |
# $Header: /home/cvsd/alx-cvs/alx-src/tinyalxconfig-ng/functions/config_network.sh,v 1.6 2008-06-04 20:37:50 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 $ |
2 |
# configures networkin on the host via mysql db settings |
# configures networkin on the host via mysql db settings |
3 |
|
|
4 |
get_network_settings() |
# needs exported iface variable! |
5 |
|
add_iface_cfg() |
6 |
{ |
{ |
7 |
local x i all DB_NETWORK |
echo "$@" >> /etc/conf.d/net.${iface} |
|
|
|
|
# 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 |
|
8 |
} |
} |
9 |
|
|
10 |
config_networking() |
config_networking() |
11 |
{ |
{ |
12 |
local iface |
local iface |
13 |
|
|
14 |
# first of all get the vars |
# retrieve informations about hostname and co |
15 |
get_network_settings |
evaluate_table cfg_network |
16 |
if ! check_network_settings |
|
17 |
then |
# configure hostname and domain settings: |
18 |
echo -e "${COLYELLOW}Could not retrieve network settings, doing nothing ...${COLDEFAULT}" |
echo "${cfg_network_hostname}" > /etc/hostname |
19 |
return 1 |
echo -e "127.0.0.1\tlocalhost.${cfg_network_domain}\tlocalhost\t${cfg_network_hostname}" > /etc/hosts |
20 |
fi |
|
21 |
|
# if ! check_network_settings |
22 |
# get the right nic |
# then |
23 |
if [[ -z ${ALX_IFACE} ]] || [[ ${ALX_IFACE} = NULL ]] |
# echo -e "${COLYELLOW}Could not retrieve network settings, doing nothing ...${COLDEFAULT}" |
24 |
then |
# return 1 |
25 |
# default is 'eth0' |
# fi |
|
iface="eth0" |
|
|
else |
|
|
iface="${ALX_IFACE}" |
|
|
fi |
|
26 |
|
|
27 |
# remove all old nics and modules configs |
# remove all old nics and modules configs |
28 |
find /etc/conf.d -type f -name 'net.*' | xargs rm |
find /etc/conf.d -type f -name 'net.*' | xargs rm |
29 |
|
|
30 |
# update confd-networking default iface |
# # update confd-networking default iface |
31 |
[ ! -d ${SETTINGSPATH} ] && install -d ${SETTINGSPATH} |
# [ ! -d ${SETTINGSPATH} ] && install -d ${SETTINGSPATH} |
32 |
echo "${iface}" > ${SETTINGSPATH}/confd-networking |
# echo "${iface}" > ${SETTINGSPATH}/confd-networking |
33 |
|
|
34 |
# hostname && hosts |
# configure all available interfaces but activate only the default_iface! |
35 |
echo "${ALX_HOSTNAME}" > /etc/hostname |
iface_list=$(mysqldo "select iface from cfg_interfaces where serial='${ALX_SERIAL}'") |
36 |
echo -e "127.0.0.1\tlocalhost.${ALX_DOMAIN}\tlocalhost\t${ALX_HOSTNAME}" > /etc/hosts |
|
37 |
|
for iface in ${iface_list} |
|
# 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 |
|
|
|
|
|
# have no samba anymore |
|
|
# # 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 |
|
38 |
do |
do |
39 |
# get the value of $var |
# initialize the config |
40 |
eval value=\$$(echo ${var}) |
:> /etc/conf.d/net.${iface} |
41 |
|
|
42 |
|
# retrieve information from mysql |
43 |
|
evaluate_table cfg_interfaces "where serial='${ALX_SERIAL}' and iface='${iface}'" |
44 |
|
|
45 |
# write it only if not empty |
if [[ ${iface} = ${cfg_network_default_iface} ]] |
|
if [[ -n ${value} ]] && [[ ${value} != NULL ]] |
|
46 |
then |
then |
47 |
# remove ALX_ from var |
add_iface_cfg "ONBOOT=yes" |
48 |
echo "${var/ALX_/}=\"${value}\"" >> /etc/conf.d/net.${iface} |
else |
49 |
|
add_iface_cfg "ONBOOT=no" |
50 |
fi |
fi |
51 |
|
|
52 |
# clear value |
add_iface_cfg NETWORKING=${cfg_interfaces_networking} |
|
unset value |
|
|
done |
|
53 |
|
|
54 |
# setup wpa-driver (only zydas atm) |
case ${cfg_interfaces_networking} in |
55 |
[[ ${ALX_MODULE} = zd1211 ]] && \ |
dhcp|DHCP) |
56 |
echo "WIRELESS_WPA_DRIVER=zydas" >> /etc/conf.d/net.${iface} |
add_iface_cfg "DHCP_PROG=/sbin/udhcpc" |
57 |
|
# timeout after 10 seconds and quit after retrieving a lease |
58 |
# unset all vars |
add_iface_cfg 'DHCP_START="-t 10 -q"' |
59 |
unset ALX_HOSTNAME |
;; |
60 |
unset ALX_MODULE |
|
61 |
unset ALX_DOMAIN |
static|STATIC) |
62 |
unset ALX_NETWORKING |
# add hostname with valid ip to hosts |
63 |
unset ALX_IP |
echo -e "${cfg_interfaces_ip}\t${cfg_interfaces_hostname}.${cfg_interfaces_domain}\t${cfg_interfaces_hostname}" >> /etc/hosts |
64 |
unset ALX_NETMASK |
add_iface_cfg "IP=${cfg_interfaces_ip}" |
65 |
unset ALX_DNS |
add_iface_cfg "NETMASK=${cfg_interfaces_netmask}" |
66 |
unset ALX_GATEWAY |
add_iface_cfg "BROADCAST=${cfg_interfaces_broadcast}" |
67 |
unset ALX_BROADCAST |
;; |
68 |
unset ALX_FORCEMACTO |
esac |
|
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 |
|
|
} |
|
69 |
|
|
70 |
|
# gateway or gateway overrides |
71 |
|
if [[ ${cfg_interfaces_gateway} != NULL ]] |
72 |
|
then |
73 |
|
add_iface_cfg "GATEWAY=${cfg_interfaces_gateway}" |
74 |
|
fi |
75 |
|
|
76 |
|
# nameserver or nameserver overrides |
77 |
|
if [[ ${cfg_interfaces_dns} != NULL ]] |
78 |
|
then |
79 |
|
add_iface_cfg "NAMESERVER="${cfg_interfaces_dns}"" |
80 |
|
fi |
81 |
|
|
82 |
|
# force mac address override |
83 |
|
if [[ ${cfg_interfaces_forcemacto} != NULL ]] |
84 |
|
then |
85 |
|
add_iface_cfg FORCE_MAC_TO=${cfg_interfaces_forcemacto} |
86 |
|
fi |
87 |
|
|
88 |
|
# wireless extensions |
89 |
|
local value |
90 |
|
local var |
91 |
|
for var in cfg_interfaces_wireless_bitrate \ |
92 |
|
cfg_interfaces_wireless_channel \ |
93 |
|
cfg_interfaces_wireless_essid \ |
94 |
|
cfg_interfaces_wireless_frequency \ |
95 |
|
cfg_interfaces_wireless_mode \ |
96 |
|
cfg_interfaces_wireless_nick \ |
97 |
|
cfg_interfaces_wireless_auth_mode \ |
98 |
|
cfg_interfaces_wireless_key_length \ |
99 |
|
cfg_interfaces_wireless_key \ |
100 |
|
cfg_interfaces_wireless_key_ascii |
101 |
|
do |
102 |
|
# get the value of $var |
103 |
|
eval value=\$$(echo ${var}) |
104 |
|
|
105 |
|
# write it only if not empty |
106 |
|
if [[ -n ${value} ]] && [[ ${value} != NULL ]] |
107 |
|
then |
108 |
|
# remove cfg_interfaces_from var and convert to upcase |
109 |
|
add_iface_cfg "$(echo ${var/cfg_network_/} | tr '[:lower:]' '[:upper:]')=${value}" |
110 |
|
fi |
111 |
|
|
112 |
|
# clear value |
113 |
|
unset value |
114 |
|
done |
115 |
|
|
116 |
|
# setup wpa-driver (only zydas atm) |
117 |
|
case ${cfg_interfaces_module} in |
118 |
|
zd1211) add_iface_cfg "WIRELESS_WPA_DRIVER=zydas" ;; |
119 |
|
esac |
120 |
|
done |
121 |
|
} |