197 lines
5.6 KiB
Bash
197 lines
5.6 KiB
Bash
#!/bin/sh
|
|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Sample xCAT post script for configuring hfi settings and some conventions.
|
|
# This scripts works for both diskfull installs, diskless boots on AIX or Linux.
|
|
# Input:
|
|
# IP address: Each hfi interface should be assigned its hostname and IP address.
|
|
# hostname should be resolable from either /etc/hosts or name
|
|
# resolution, with format: <nodename>-hfx
|
|
# netmask: Netmask is hardcoded in this script. You have to manually modify it
|
|
# if it doesn't meet your requirement.
|
|
#-------------------------------------------------------------------------------
|
|
PLTFRM=`uname`
|
|
NETMASK=255.0.0.0
|
|
|
|
RETURNVAL=0
|
|
|
|
# bond-mld binary is shipped seperately, admin should adjust the following PATH
|
|
# to where bond-mld binary is.
|
|
PATH=$PATH:/usr/local/sbin/
|
|
export PATH
|
|
|
|
name=`echo $NODE | awk -F-hf '{print $1}'`
|
|
if [ -z $name ]
|
|
then
|
|
name=$NODE
|
|
fi
|
|
|
|
if [[ $PLTFRM != AIX ]] && [[ $PLTFRM != aix ]]
|
|
then
|
|
|
|
# A difference between service node and compute node is that service node is booted from
|
|
# ethernet, all the HFI interfaces should be configured. Compute node is booted from hf0
|
|
# so hf0 on compute node should not be re-configured on compute node.
|
|
if [[ $NTYPE = service ]]
|
|
then
|
|
|
|
CLIENT_IP=`ping -c 3 $name-hf0 -I hf0 2>/dev/null | grep "data" | sed 's/.* (\([0-9.]*\)).*/\1/' | uniq 2>&1`
|
|
|
|
if [ -n "$CLIENT_IP" ]
|
|
then
|
|
echo "DEVICE=hf0
|
|
NM_CONTROLLED=yes
|
|
IPADDR=$CLIENT_IP
|
|
NETMASK=$NETMASK
|
|
ONBOOT=yes
|
|
" >/etc/sysconfig/network-scripts/ifcfg-hf0
|
|
|
|
ifdown hf0
|
|
ifup hf0
|
|
else
|
|
logger -t xcat -p local4.err "confighfi: cannot resolve hostname $name-hf0"
|
|
RETURNVAL=-1
|
|
fi
|
|
elif [[ -z "$NTYPE" ]]
|
|
then
|
|
logger -t xcat -p local4.err "confighfi: cannot read node type definition"
|
|
RETURNVAL=-1
|
|
fi
|
|
|
|
# Configure hf0-hf<n> interfaces one by one.
|
|
for i in 1 2 3 4 5 6 7
|
|
do
|
|
|
|
CLIENT_IP=`ping -c 3 $name-hf$i -I hf$i 2>/dev/null | grep "data" | sed 's/.* (\([0-9.]*\)).*/\1/' | uniq 2>&1`
|
|
|
|
if [ -n "$CLIENT_IP" ]
|
|
then
|
|
echo "DEVICE=hf$i
|
|
NM_CONTROLLED=yes
|
|
IPADDR=$CLIENT_IP
|
|
NETMASK=$NETMASK
|
|
ONBOOT=yes
|
|
" >/etc/sysconfig/network-scripts/ifcfg-hf$i
|
|
|
|
ifdown hf$i
|
|
ifup hf$i
|
|
else
|
|
logger -t xcat -p local4.err "confighfi: cannot resolve hostname $name-hf$i"
|
|
RETURNVAL=-1
|
|
fi
|
|
done
|
|
|
|
# Configure bond0 on Linux
|
|
if lsmod | grep bonding
|
|
then
|
|
rmmod bonding
|
|
fi
|
|
|
|
modprobe bonding mode=multi-link miimon=100 xmit_hash_policy=layer3+4
|
|
|
|
CLIENT_IP=`ping -c 3 $name-bond0 -I bond0 2>/dev/null | grep "data" | sed 's/.* (\([0-9.]*\)).*/\1/' | uniq 2>&1`
|
|
if [ -n "$CLIENT_IP" ]
|
|
then
|
|
echo "DEVICE=bond0
|
|
NM_CONTROLLED=yes
|
|
IPADDR=$CLIENT_IP
|
|
NETMASK=$NETMASK
|
|
ONBOOT=yes
|
|
" >/etc/sysconfig/network-scripts/ifcfg-bond0
|
|
fi
|
|
|
|
if [[ $NTYPE != service ]]
|
|
then
|
|
if echo $MASTER | egrep '^([0-9]+.){3}[0-9]+$'
|
|
then
|
|
XCATMASTER=`grep "$MASTER " /etc/hosts | grep -v "^#" | awk '{print $2}' | awk -F '.' '{print $1}' | sed 's/-hf.*//g'`
|
|
GATEWAY_IP=`ping -c 3 $XCATMASTER-bond0 -I hf0 2>/dev/null | grep "data" | sed 's/.* (\([0-9.]*\)).*/\1/' | uniq 2>&1`
|
|
|
|
elif [ -n "$MASTER" ]
|
|
then
|
|
XCATMASTER=`echo $MASTER | awk -F-hf '{print $1}'`
|
|
GATEWAY_IP=`ping -c 3 $XCATMASTER-bond0 -I hf0 2>/dev/null | grep "data" | sed 's/.* (\([0-9.]*\)).*/\1/' | uniq 2>&1`
|
|
fi
|
|
|
|
if [ -n "$GATEWAY_IP" ]
|
|
then
|
|
sed -i "/GATEWAY.*/d" /etc/sysconfig/network
|
|
echo "GATEWAY=$GATEWAY_IP" >> /etc/sysconfig/network
|
|
fi
|
|
fi
|
|
|
|
x=0
|
|
while [ $x -le $i ]; do
|
|
ip link set dev hf${x} down
|
|
sleep 2
|
|
echo +hf${x} > /sys/class/net/bond0/bonding/slaves
|
|
x=$((x+1))
|
|
done
|
|
|
|
ip link set dev bond0 mtu 65536
|
|
|
|
ifdown bond0
|
|
ifup bond0
|
|
|
|
bond-mld > m.out 2>&1 &
|
|
|
|
else
|
|
# Configurartion for AIX
|
|
if [[ $NTYPE = service ]]
|
|
then
|
|
|
|
CLIENT_IP=`ping -q -n -c 1 -w 1 $name-hf0 | grep PING |awk '{print $3}' | sed 's/(\(.*\)):/\1/' `
|
|
|
|
if [ -n "$CLIENT_IP" ]
|
|
then
|
|
mkhfi -i hf0 -a $CLIENT_IP -m $NETMASK
|
|
else
|
|
logger -t xcat -p local4.err "confighfi: cannot resolve hostname $name-hf0"
|
|
RETURNVAL=-1
|
|
fi
|
|
elif [[ -z "$NTYPE" ]]
|
|
then
|
|
logger -t xcat -p local4.err "confighfi: cannot read node type definition"
|
|
RETURNVAL=-1
|
|
fi
|
|
|
|
for i in 1 2 3
|
|
do
|
|
CLIENT_IP=`ping -q -n -c 1 -w 1 $name-hf$i | grep PING |awk '{print $3}' | sed 's/(\(.*\)):/\1/' `
|
|
|
|
if [ -n "$CLIENT_IP" ]
|
|
then
|
|
mkhfi -i hf$i -a $CLIENT_IP -m $NETMASK
|
|
else
|
|
logger -t xcat -p local4.err "confighfi: cannot resolve hostname $name-hf$i"
|
|
RETURNVAL=-1
|
|
fi
|
|
|
|
done
|
|
|
|
# Configure ml0 for AIX.
|
|
CLIENT_IP=`ping -q -n -c 1 -w 1 $name-ml0 | grep PING |awk '{print $3}' | sed 's/(\(.*\)):/\1/' `
|
|
|
|
if [ -n "$CLIENT_IP" ]
|
|
then
|
|
#Check whether the mlt0 is available
|
|
`lsdev -C | grep mlt0 | grep Available 2>&1 >/dev/null`
|
|
|
|
chdev -l ml0 -a state=detach
|
|
|
|
# Reconfig ml0 since HFx are configured after ml0 is available
|
|
rmdev -l mlt0
|
|
mkdev -l mlt0
|
|
|
|
sleep 2
|
|
chdev -l ml0 -a netaddr=$CLIENT_IP -a netmask=$NETMASK -a state=up
|
|
else
|
|
logger -t xcat -p local4.err "confighfi: cannot resolve hostname $name-ml0"
|
|
RETURNVAL=-1
|
|
fi
|
|
|
|
fi
|
|
|
|
exit $RETURNVAL
|