186 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			5.4 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
 | |
| 
 | |
| # 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 "confighfi: cannot resolve hostname $name-hf0"
 | |
|         fi
 | |
|     elif [[ -z "$NTYPE" ]]
 | |
|     then
 | |
|         logger -t xcat "confighfi: cannot read node type definition"
 | |
|     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 "confighfi: cannot resolve hostname $name-hf$i"
 | |
|         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 "confighfi: cannot resolve hostname $name-hf0"
 | |
|         fi
 | |
|     elif [[ -z "$NTYPE" ]]
 | |
|     then
 | |
|         logger -t xcat "confighfi: cannot read node type definition"
 | |
|     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 "confighfi: cannot resolve hostname $name-hf$i"
 | |
|         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 "confighfi: cannot resolve hostname $name-ml0"
 | |
|     fi
 | |
| 
 | |
| fi
 |