mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-08-21 18:50:28 +00:00
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
if [ "$(uname -s|tr 'A-Z' 'a-z')" = "linux" ];then
|
||||
str_dir_name=`dirname $0`
|
||||
#!/bin/bash
|
||||
if [ "$(uname -s|tr '[:upper:]' '[:lower:]')" = "linux" ];then
|
||||
str_dir_name=$(dirname $0)
|
||||
. $str_dir_name/xcatlib.sh
|
||||
fi
|
||||
#written in bash for fewest prerequisites
|
||||
@@ -9,35 +9,35 @@ function get_def_interface {
|
||||
#are in bash, the best alternative is to use ping to get at it
|
||||
#don't want to grep in /etc/hosts or presume DNS
|
||||
#we are, however, presuming ipv4 for the moment
|
||||
retval=$(ping -c 1 `hostname`|head -n 1|cut -d\( -f 2|cut -d\) -f 1)
|
||||
retval=$(ping -c 1 "$(hostname)"|head -n 1|cut -d\( -f 2|cut -d\) -f 1)
|
||||
if [ -z "$retval" -o "127.0.0.1" = "$retval" ]; then #ok, that didn't pan out, now we grab the first address that looks sane
|
||||
#retval=`ifconfig|grep inet" " |grep -v addr:127.0.0.1|grep -v 'addr:169.254'|head -n 1|cut -d: -f 2|cut -d' ' -f 1`
|
||||
retval=`ip -4 -oneline addr show|grep -v "127.0.0.1"|grep -v '169.254'|head -n 1|awk -F 'inet ' '{print $2}'|awk -F '/' '{print $1}'`
|
||||
retval=$(ip -4 -oneline addr show|grep -v "127.0.0.1"|grep -v '169.254'|head -n 1|awk -F 'inet ' '{print $2}'|awk -F '/' '{print $1}')
|
||||
fi
|
||||
if [ -z "$retval" ]; then
|
||||
echo "ERROR: Unable to reasonably guess the 'default' interface" >&2
|
||||
exit 1
|
||||
fi
|
||||
#iface=`ifconfig|grep -v inet6|egrep '(Link|inet)'|grep -B1 'addr:'$retval |head -n 1|awk '{print $1}'`
|
||||
iface=`ip -4 -oneline addr show|grep -i $retval|awk -F ':' '{print $2}'|awk -F ' ' '{print $1}'|grep -o "[^ ]\+\( \+[^ ]\+\)*"`
|
||||
iface=$(ip -4 -oneline addr show|grep -i $retval|awk -F ':' '{print $2}'|awk -F ' ' '{print $1}'|grep -o "[^ ]\+\( \+[^ ]\+\)*")
|
||||
if [ -z "$iface" ]; then
|
||||
echo "ERROR: Unable to reasonably guess the default interface" >&2
|
||||
exit 1
|
||||
fi
|
||||
if brctl show | grep ^$iface >& /dev/null; then #
|
||||
if brctl show | grep ^$iface &> /dev/null; then #
|
||||
OIFS=$IFS
|
||||
IFS=$'\n'
|
||||
INMATCH=0
|
||||
for brline in $(brctl show); do
|
||||
IFS=$OIFS
|
||||
if [ $(expr match "$brline" $iface) == $(expr length $iface) ]; then
|
||||
if [ "$(expr match "$brline" $iface)" == ${#iface} ]; then
|
||||
INMATCH=1
|
||||
elif [ $(expr match "$brline" " ") != 1 ]; then
|
||||
elif [ "$(expr match "$brline" " ")" != 1 ]; then
|
||||
INMATCH=0
|
||||
fi
|
||||
if [ "$INMATCH" == 1 ]; then
|
||||
if ! ethtool -i `echo $brline|awk '{print $NF}'`|grep "driver: tun" >& /dev/null; then
|
||||
iface=`echo $brline|awk '{print $NF}'`
|
||||
if ! ethtool -i "$(echo $brline|awk '{print $NF}')"|grep "driver: tun" >& /dev/null; then
|
||||
iface=$(echo $brline|awk '{print $NF}')
|
||||
echo "$iface"
|
||||
IFS=$OFIS
|
||||
return
|
||||
@@ -60,7 +60,7 @@ function debianpreconf(){
|
||||
mkdir -p "/etc/network/interfaces.d"
|
||||
fi
|
||||
#search xcat flag
|
||||
XCATFLAG=`grep "#XCAT_CONFIG" /etc/network/interfaces`
|
||||
XCATFLAG=$(grep "#XCAT_CONFIG" /etc/network/interfaces)
|
||||
if [ -n "$XCATFLAG" ];then
|
||||
return
|
||||
fi
|
||||
@@ -77,8 +77,7 @@ function debianpreconf(){
|
||||
CONFFILE=''
|
||||
|
||||
#read the backfile
|
||||
cat /etc/network/interfaces.bak | while read LINE
|
||||
do
|
||||
while read LINE; do
|
||||
if [ ! "$LINE" ];then
|
||||
continue
|
||||
fi
|
||||
@@ -87,7 +86,7 @@ function debianpreconf(){
|
||||
continue
|
||||
fi
|
||||
|
||||
CONFTYPE=`echo $LINE | cut -d" " -f1`
|
||||
CONFTYPE=$(echo $LINE | cut -d" " -f1)
|
||||
if [ $CONFTYPE = 'auto' -o $CONFTYPE = 'allow-hotplug' ];then
|
||||
LINE=${LINE#$CONFTYPE}
|
||||
for NICNAME in $LINE; do
|
||||
@@ -95,7 +94,7 @@ function debianpreconf(){
|
||||
done
|
||||
elif [ $CONFTYPE = 'iface' -o $CONFTYPE = 'mapping' ];then
|
||||
#find out the nic name, should think about the eth0:1
|
||||
NICNAME=`echo $LINE | cut -d" " -f 2 | cut -d":" -f 1`
|
||||
NICNAME=$(echo $LINE | cut -d" " -f 2 | cut -d":" -f 1)
|
||||
CONFFILE="/etc/network/interfaces.d/$NICNAME"
|
||||
if [ ! -e $CONFFILE ];then
|
||||
echo "auto $NICNAME" > $CONFFILE
|
||||
@@ -107,13 +106,13 @@ function debianpreconf(){
|
||||
echo $LINE >> $CONFFILE
|
||||
fi
|
||||
|
||||
done
|
||||
done </etc/network/interfaces.bak
|
||||
}
|
||||
|
||||
if [ "storageprereq" = "$1" ]; then
|
||||
MOUNTURI="$2"
|
||||
DIRNAME=`echo $MOUNTURI|sed -e 's!nfs://!nfs_!'`
|
||||
MOUNTPATH=`echo $DIRNAME|sed -e 's!nfs_!!'|sed -e 's!/!:/!'`
|
||||
DIRNAME=$(echo $MOUNTURI|sed -e 's!nfs://!nfs_!')
|
||||
MOUNTPATH=$(echo $DIRNAME|sed -e 's!nfs_!!'|sed -e 's!/!:/!')
|
||||
if mount|grep $MOUNTPATH > /dev/null; then
|
||||
exit 0;
|
||||
fi
|
||||
@@ -124,64 +123,54 @@ elif [ "bridgeprereq" = "$1" ]; then
|
||||
modprobe bridge
|
||||
|
||||
NETDESC="$2"
|
||||
# get the port for installation
|
||||
if [ -n "$INSTALLNIC" ]; then
|
||||
INSPORT=$INSTALLNIC
|
||||
elif [ -n "$PRIMARYNIC" ]; then
|
||||
INSPORT=$PRIMARYNIC
|
||||
fi
|
||||
|
||||
if [ -z "$INSPORT" ] || [[ "$INSPORT" =~ ^(mac|MAC)$ ]]; then
|
||||
if [ -n "$MACADDRESS" ] ; then
|
||||
INSPORT=$MACADDRESS;
|
||||
else
|
||||
echo "should configure mac in $NODE definition."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$INSPORT" =~ ^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$ ]] ; then
|
||||
INSPORT=`ip -oneline link show|grep -i ether|grep -i $INSPORT |awk -F ':' '{print $2}'|grep -o "[^ ]\+\( \+[^ ]\+\)*"`
|
||||
fi
|
||||
|
||||
if [ -z "$NETDESC" ]; then
|
||||
if [ -n "$INSPORT" ]; then
|
||||
NETDESC=$INSPORT:default
|
||||
else
|
||||
echo "Incorrect usage"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
if echo "$NETDESC"|grep ':'> /dev/null; then
|
||||
PORTS=`echo "$NETDESC"|cut -d: -f 1`
|
||||
BNAME=`echo "$NETDESC"|cut -d: -f 2`
|
||||
PORTS=$(echo "$NETDESC"|cut -d: -f 1)
|
||||
BNAME=$(echo "$NETDESC"|cut -d: -f 2)
|
||||
else
|
||||
if [ -n "$INSTALLNIC" ]; then
|
||||
PORTS=$INSPORT
|
||||
if [ -n "$NETDESC" ]; then
|
||||
BNAME=$NETDESC
|
||||
else
|
||||
BNAME=default
|
||||
fi
|
||||
BNAME=$NETDESC
|
||||
|
||||
# get the port for installation
|
||||
if [ -n "$INSTALLNIC" ]; then
|
||||
PORTS=$INSTALLNIC
|
||||
elif [ -n "$PRIMARYNIC" ]; then
|
||||
PORTS=$PRIMARYNIC
|
||||
else
|
||||
PORTS=$(get_def_interface)
|
||||
fi
|
||||
|
||||
if [ -z "$PORTS" ] || [[ "$PORTS" =~ ^(mac|MAC)$ ]]; then
|
||||
if [ -n "$MACADDRESS" ] ; then
|
||||
PORTS=$(ip -oneline link show|grep -i ether|grep -i $MACADDRESS |awk -F ':' '{print $2}'|grep -o "[^ ]\+\( \+[^ ]\+\)*")
|
||||
else
|
||||
echo "should configure mac in $NODE definition."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# To check whether the brctl have been installed
|
||||
if ! which brctl > /dev/null; then
|
||||
if ! which brctl &> /dev/null; then
|
||||
echo "No bridge-utils installed, pls install it first"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if brctl showstp "$BNAME" > /dev/null; then
|
||||
echo "$BNAME"
|
||||
if brctl showstp "$BNAME" &> /dev/null; then
|
||||
echo "$BNAME already exists"
|
||||
exit 0
|
||||
fi
|
||||
#Still here, that means we must build a bridge
|
||||
if [ -z "$PORTS" ]; then #No ports specified, default to whatever looks up
|
||||
PORTS=$(get_def_interface)
|
||||
fi
|
||||
|
||||
if [ -z "$PORTS" ]; then #This has been checked many times before in theory, check again just in case
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#TO check whether the NIC had been attached to another bridge
|
||||
bridgename=`brctl show |grep $PORTS`
|
||||
bridgename=$(brctl show |grep $PORTS)
|
||||
if [ ! -z "$bridgename" ]; then
|
||||
echo "Device $PORTS is already a member of another bridge"
|
||||
exit 1
|
||||
@@ -195,15 +184,15 @@ elif [ "bridgeprereq" = "$1" ]; then
|
||||
if echo "$PORTS"|grep '&'; then #we have bonding... fun to be had
|
||||
#To be slack, going to just support one bond for now..
|
||||
modprobe bonding miimon=100 mode=4
|
||||
PORTS=`echo $PORTS |sed -e 's/&/ /'`
|
||||
PORTS="${PORTS//&/ }"
|
||||
ip link set bond0 up
|
||||
for p in $PORTS; do
|
||||
#TODO: we are only going to manage the default
|
||||
#route for now
|
||||
saveroutes=`ip route | grep default| grep "dev $p"|grep via|sed -e 's/dev .*//'`
|
||||
saveroutes=$(ip route | grep default| grep "dev $p"|grep via|sed -e 's/dev .*//')
|
||||
OIFS=$IFS
|
||||
IFS=$'\n'
|
||||
saveip=`ip addr show dev $p scope global|grep inet|grep -v dynamic|sed -e 's/inet.//'|sed -e 's/[^ ]*$//'`
|
||||
saveip=$(ip addr show dev $p scope global|grep inet|grep -v dynamic|sed -e 's/inet.//'|sed -e 's/[^ ]*$//')
|
||||
if [ ! -z "$saveip" ]; then
|
||||
for line in $saveip; do
|
||||
ip addr add dev bond0 $line
|
||||
@@ -235,16 +224,12 @@ elif [ "bridgeprereq" = "$1" ]; then
|
||||
brctl addbr $BNAME
|
||||
brctl setfd $BNAME 0 #fast forwarding
|
||||
ip link set $BNAME up
|
||||
saveroutes=`ip route | grep default| grep "dev $PORTS"|grep via|sed -e 's/dev .*//'`
|
||||
OIFS=$IFS
|
||||
IFS=$'\n'
|
||||
saveip=`ip addr show dev $PORTS scope global|grep inet|sed -e 's/inet.//'|sed -e 's/[^ ]*$//'`
|
||||
saveroutes="$(ip route | grep default| grep "dev $PORTS"|grep via|sed -e 's/dev .*//')"
|
||||
saveip="$(ip -4 -o addr show dev $PORTS scope global | sed 's/.*inet //'| sed 's/\( global \).*/\1/')"
|
||||
if [ ! -z "$saveip" ]; then
|
||||
for line in $saveip; do
|
||||
IFS=$OIFS
|
||||
newline=`echo $line|sed 's/dynamic//g'`
|
||||
ip addr add dev $BNAME $newline
|
||||
done
|
||||
while read line; do
|
||||
ip addr add dev $BNAME ${line//dynamic}
|
||||
done <<<"$saveip"
|
||||
else
|
||||
if [ ! -z "$3" ]; then
|
||||
ip addr add dev $BNAME $3
|
||||
@@ -252,16 +237,10 @@ elif [ "bridgeprereq" = "$1" ]; then
|
||||
fi
|
||||
brctl addif $BNAME $PORTS
|
||||
if [ ! -z "$saveip" ]; then
|
||||
OIFS=$IFS
|
||||
IFS=$'\n'
|
||||
for line in $saveip; do
|
||||
IFS=$OIFS
|
||||
newline=`echo $line|sed 's/dynamic//g'`
|
||||
ip addr del dev $PORTS $newline
|
||||
done
|
||||
IFS=$OIFS
|
||||
while read line; do
|
||||
ip addr del dev $PORTS ${line//dynamic}
|
||||
done <<<"$saveip"
|
||||
fi
|
||||
IFS=$OIFS
|
||||
if [ ! -z "$saveroutes" ]; then
|
||||
ip route add $saveroutes
|
||||
fi
|
||||
@@ -284,19 +263,19 @@ elif [ "bridgeprereq" = "$1" ]; then
|
||||
|
||||
#write into the network configuration file
|
||||
if [[ $isSLES -eq 1 ]]; then
|
||||
cat >$nwdir/ifcfg-$PORTS <<EOF
|
||||
{ cat <<EOF
|
||||
DEVICE='$PORTS'
|
||||
ONBOOT='yes'
|
||||
BRIDGE='$BNAME'
|
||||
EOF
|
||||
mac=`ip addr show dev $PORTS scope global|grep link|sed -e 's/link\/ether//'|sed -e 's/brd.*$//'|sed -e 's/[ ]*//'`
|
||||
mac=$(ip addr show dev $PORTS scope global|grep link|sed -e 's/link\/ether//'|sed -e 's/brd.*$//'|sed -e 's/[ ]*//')
|
||||
if [ ! -z "$mac" ]; then
|
||||
echo "HWADDR='$mac'" >> $nwdir/ifcfg-$PORTS
|
||||
echo "HWADDR='$mac'"
|
||||
fi
|
||||
if [ ! -z "$vlan" ]; then
|
||||
echo "VLAN='yes'" >> $nwdir/ifcfg-$PORTS
|
||||
fi
|
||||
cat >$nwdir/ifcfg-$BNAME <<EOF
|
||||
echo "VLAN='yes'"
|
||||
fi; } >"$nwdir/ifcfg-$PORTS"
|
||||
{ cat <<EOF
|
||||
DEVICE='$BNAME'
|
||||
TYPE='Bridge'
|
||||
ONBOOT='yes'
|
||||
@@ -304,13 +283,13 @@ PEERDNS='yes'
|
||||
DELAY='0'
|
||||
EOF
|
||||
if [ ! -z "$3" ]; then
|
||||
echo "IPADDR='$3'" >> $nwdir/ifcfg-$BNAME
|
||||
echo "IPADDR='$3'"
|
||||
if [ ! -z "$4" ]; then
|
||||
echo "NETMASK='$4'" >> $nwdir/ifcfg-$BNAME
|
||||
echo "NETMASK='$4'"
|
||||
fi
|
||||
else
|
||||
echo "BOOTPROTO=dhcp" >> $nwdir/ifcfg-$BNAME
|
||||
fi
|
||||
echo "BOOTPROTO=dhcp"
|
||||
fi; } >$nwdir/ifcfg-$BNAME
|
||||
elif [ $isDebian ];then
|
||||
#ubuntu/debian
|
||||
echo "auto $PORTS" >$nwdir/$PORTS
|
||||
@@ -320,46 +299,48 @@ EOF
|
||||
echo " vlan-raw-device $PORTORG"
|
||||
fi
|
||||
|
||||
echo "auto $BNAME" > $nwdir/$BNAME
|
||||
{ echo "auto $BNAME"
|
||||
if [ ! -z "$3" ];then
|
||||
echo "iface $BNAME inet static" >> $nwdir/$BNAME
|
||||
echo " address $3" >> $nwdir/$BNAME
|
||||
echo "iface $BNAME inet static"
|
||||
echo " address $3"
|
||||
if [ ! -z "$4" ];then
|
||||
echo " netmask $4" >> $nwdir/$BNAME
|
||||
echo " netmask $4"
|
||||
else
|
||||
echo " netmask 255.255.255.0" >> $nwdir/$BNAME
|
||||
echo " netmask 255.255.255.0"
|
||||
fi
|
||||
else
|
||||
my_subnet=`ip addr show dev $BNAME scope global|grep inet|grep -v dynamic|sed -e 's/inet.//'| awk '{print $1}'`
|
||||
my_subnet=$(ip -4 -o addr show dev "$BNAME" scope global | awk '!/dynamic/{print $4}' )
|
||||
if [ ! -z "$my_subnet" ]; then
|
||||
bridge_ip=`echo "$my_subnet"|cut -d\/ -f 1`
|
||||
bridge_mask=`echo "$my_subnet"|cut -d\/ -f 2`
|
||||
bridge_mask=`v4prefix2mask $bridge_mask`
|
||||
echo "iface $BNAME inet static" >> $nwdir/$BNAME
|
||||
echo " address $bridge_ip" >> $nwdir/$BNAME
|
||||
echo " netmask $bridge_mask" >> $nwdir/$BNAME
|
||||
bridge_ip="${my_subnet//\/*}"
|
||||
bridge_mask="${my_subnet##*\/}"
|
||||
bridge_mask=$(v4prefix2mask "$bridge_mask")
|
||||
echo "iface $BNAME inet static"
|
||||
echo " address $bridge_ip"
|
||||
echo " netmask $bridge_mask";
|
||||
else
|
||||
echo "iface $BNAME inet dhcp" >> $nwdir/$BNAME
|
||||
echo "iface $BNAME inet dhcp"
|
||||
fi
|
||||
fi
|
||||
echo " bridge_ports $PORTS" >> $nwdir/$BNAME
|
||||
echo " bridge_stp off" >> $nwdir/$BNAME
|
||||
echo " bridge_fd 0" >> $nwdir/$BNAME
|
||||
echo " bridge_maxwait 0" >> $nwdir/$BNAME
|
||||
echo " bridge_ports $PORTS"
|
||||
echo " bridge_stp off"
|
||||
echo " bridge_fd 0"
|
||||
echo " bridge_maxwait 0"; } > "$nwdir/$BNAME"
|
||||
else
|
||||
cat >$nwdir/ifcfg-$PORTS <<EOF
|
||||
# Migrate some PORTS configuration to Bridge:
|
||||
ATTRS="$(egrep '^BOOTPROTO|^IPADDR|^NETMASK|^NETWORK|^GATEWAY' $nwdir/ifcfg-$PORTS)"
|
||||
{ cat <<EOF
|
||||
DEVICE=$PORTS
|
||||
ONBOOT=yes
|
||||
BRIDGE=$BNAME
|
||||
EOF
|
||||
mac=`ip addr show dev $PORTS scope global|grep link|sed -e 's/link\/ether//'|sed -e 's/brd.*$//'|sed -e 's/[ ]*//'`
|
||||
mac=$(ip -0 -o addr show dev "$PORTS" scope global|awk '{print $(NF-2)}')
|
||||
if [ ! -z "$mac" ]; then
|
||||
echo "HWADDR=$mac" >> $nwdir/ifcfg-$PORTS
|
||||
echo "HWADDR=$mac"
|
||||
fi
|
||||
if [ ! -z "$vlan" ]; then
|
||||
echo "VLAN=yes" >> $nwdir/ifcfg-$PORTS
|
||||
fi
|
||||
cat >$nwdir/ifcfg-$BNAME <<EOF
|
||||
echo "VLAN=yes"
|
||||
fi; } >"$nwdir/ifcfg-$PORTS"
|
||||
{ cat <<EOF
|
||||
DEVICE=$BNAME
|
||||
TYPE=Bridge
|
||||
ONBOOT=yes
|
||||
@@ -367,16 +348,14 @@ PEERDNS=yes
|
||||
DELAY=0
|
||||
EOF
|
||||
if [ ! -z "$3" ]; then
|
||||
echo "IPADDR=$3" >> $nwdir/ifcfg-$BNAME
|
||||
echo "IPADDR=$3"
|
||||
if [ ! -z "$4" ]; then
|
||||
echo "NETMASK=$4" >> $nwdir/ifcfg-$BNAME
|
||||
echo "NETMASK=$4"
|
||||
fi
|
||||
else
|
||||
echo "BOOTPROTO=dhcp" >> $nwdir/ifcfg-$BNAME
|
||||
fi
|
||||
echo "$ATTRS"
|
||||
fi ; } > "$nwdir/ifcfg-$BNAME"
|
||||
fi
|
||||
|
||||
ifdown $BNAME;ifup $BNAME
|
||||
ifdown "$BNAME"; ifup "$BNAME"
|
||||
fi #END bridge config.
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user