152 lines
4.5 KiB
Bash
Executable File
152 lines
4.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# pmatch determines if 1st argument string is matched by 2nd argument pattern
|
|
|
|
pmatch ()
|
|
{
|
|
case $1 in
|
|
$2) return 0;; # zero return code means string matched by pattern
|
|
esac
|
|
|
|
return 1 # non-zero return code means string not matched by pattern
|
|
}
|
|
# converts netmask CIDR fromat to x.x.x.x mask value
|
|
maskfromprefix ()
|
|
{
|
|
prefixlen=$1
|
|
maskval=$((0xffffffff>>(32-prefixlen)<<(32-prefixlen)))
|
|
mask1=$((maskval >> 24))
|
|
mask2=$((maskval >> 16 & 0xff))
|
|
mask3=$((maskval >> 8 & 0xff))
|
|
mask4=$((maskval & 0xff))
|
|
echo $mask1.$mask2.$mask3.$mask4
|
|
NETMASK=$mask1.$mask2.$mask3.$mask4
|
|
}
|
|
|
|
network_ipv4calc ()
|
|
{
|
|
# Returns the network value needed for Ubuntu /etc/network/interface file
|
|
# $1 must be the IP Address
|
|
# $2 must be the Netmask value
|
|
IP_1=`echo $1 | cut -d . -f 1`
|
|
IP_2=`echo $1 | cut -d . -f 2`
|
|
IP_3=`echo $1 | cut -d . -f 3`
|
|
IP_4=`echo $1 | cut -d . -f 4`
|
|
|
|
NETM_1=`echo $2 | cut -d . -f 1`
|
|
NETM_2=`echo $2 | cut -d . -f 2`
|
|
NETM_3=`echo $2 | cut -d . -f 3`
|
|
NETM_4=`echo $2 | cut -d . -f 4`
|
|
|
|
NET_1=$(($IP_1 & $NETM_1))
|
|
NET_2=$(($IP_2 & $NETM_2))
|
|
NET_3=$(($IP_3 & $NETM_3))
|
|
NET_4=$(($IP_4 & $NETM_4))
|
|
|
|
NETWORK="$NET_1.$NET_2.$NET_3.$NET_4"
|
|
echo $NETWORK
|
|
}
|
|
|
|
defgw=`ip route | grep default | awk '{print $3}'`
|
|
if ( pmatch $OSVER "ubuntu*" )
|
|
then
|
|
echo `hostname` >/etc/hostname
|
|
mv /etc/network/interfaces /etc/network/interfaces.old # this file will be filled up next
|
|
elif [ -f /etc/SuSE-release ]
|
|
then
|
|
#SLES9 and SLES10, uses /etc/sysconfig/network/ifcfg-eth-id-<mac>
|
|
#SLES11, uses /etc/sysconfig/network/ifcfg-eth<x>
|
|
NICFILEPRE="/etc/sysconfig/network/ifcfg-"
|
|
echo `hostname` > /etc/HOSTNAME
|
|
if [ ! -z "$defgw" ]; then
|
|
echo "default $defgw - -" > /etc/sysconfig/routes
|
|
fi
|
|
else
|
|
#RedHat uses /etc/sysconfig/network-scripts/ifcfg-eth<x>
|
|
NICFILEPRE="/etc/sysconfig/network-scripts/ifcfg-"
|
|
if [ -f "/etc/hostname" ]; then # for rh7
|
|
echo `hostname` >/etc/hostname
|
|
else
|
|
sed -i "s/HOSTNAME.*/HOSTNAME=`hostname`/" /etc/sysconfig/network
|
|
fi
|
|
if [ ! -z "$defgw" ]; then
|
|
echo "GATEWAY=$defgw" >> /etc/sysconfig/network
|
|
fi
|
|
fi
|
|
for nic in `ip link |grep "BROADCAST" |awk '{print $2}' | sed s/://`; do
|
|
IPADDRMASK=`ip addr show dev $nic | grep inet | grep -v inet6 | awk '{print $2}' | head -n 1`
|
|
IPADDR=`echo $IPADDRMASK | awk -F'/' '{print $1}'`
|
|
[ -z $IPADDR ] && continue
|
|
PREFIXMASK=`echo $IPADDRMASK | awk -F'/' '{print $2}'`
|
|
# converts to x.x.x.x mask value
|
|
maskfromprefix $PREFIXMASK
|
|
if ( pmatch $OSVER "ubuntu*" )
|
|
then
|
|
NETWORK=`network_ipv4calc $IPADDR $NETMASK`
|
|
#BROADCAST=`ifconfig $nic | grep Bcast | awk '{print $3}' | awk -F: '{print $2}'`
|
|
BROADCAST=`ip -4 -oneline addr show $nic|grep brd| awk -F ' ' '{print $6}'`
|
|
|
|
if [ ! -z "$defgw" ]; then
|
|
gateway_line="gateway $defgw"
|
|
else
|
|
gateway_line=""
|
|
fi
|
|
# add info to interfaces file on ubuntu, TBD does unbuntu change to systemd, this will not exist
|
|
cat >>/etc/network/interfaces <<EOF
|
|
auto $nic
|
|
iface $nic inet static
|
|
address $IPADDR
|
|
network $NETWORK
|
|
netmask $NETMASK
|
|
broadcast $BROADCAST
|
|
$gateway_line
|
|
|
|
|
|
EOF
|
|
# not ubuntu
|
|
else
|
|
if [ -f ${NICFILEPRE}${nic} ]
|
|
then
|
|
NICFILE=${NICFILEPRE}${nic}
|
|
else
|
|
#mac=`ifconfig $nic|grep HWaddr|awk '{print $5}'|tr "[A-Z]" "[a-z]"`
|
|
mac=`ip link show $nic | grep "ether\|infiniband" | awk '{print $2}'`
|
|
[ -z $mac ] && continue
|
|
NICFILE=${NICFILEPRE}eth-id-${mac}
|
|
fi
|
|
sed -i s/BOOTPROTO=dhcp/BOOTPROTO=static/ $NICFILE
|
|
sed -i s/BOOTPROTO=\'dhcp\'/BOOTPROTO=static/ $NICFILE
|
|
sed -i s/BOOTPROTO=\"dhcp\"/BOOTPROTO=static/ $NICFILE
|
|
grep ^IPADDR= $NICFILE >/dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
sed -i '/IPADDR=/d' $NICFILE
|
|
fi
|
|
echo IPADDR=$IPADDR >> $NICFILE
|
|
grep ^NETMASK= $NICFILE >/dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
sed -i '/NETMASK=/d' $NICFILE
|
|
fi
|
|
echo NETMASK=$NETMASK >> $NICFILE
|
|
fi
|
|
|
|
#for netboot/statelite case, restart the network interface. For diskful installation, it is not necessary because the restart of the network will happen at the first boot.
|
|
if [ "$NODESETSTATE" = "netboot" ] || [ "$NODESETSTATE" = "statelite" ]
|
|
then
|
|
ifdown $nic
|
|
ifup $nic
|
|
fi
|
|
done
|
|
|
|
if ( pmatch $OSVER "ubuntu*")
|
|
then
|
|
cat >>/etc/network/interfaces <<EOF
|
|
auto lo
|
|
iface lo inet loopback
|
|
|
|
|
|
EOF
|
|
fi
|
|
|
|
exit 0
|