From 217798eebbcdc9bf4a681a4a5737e6e22bb8ed39 Mon Sep 17 00:00:00 2001 From: jbjohnso Date: Wed, 31 Aug 2011 20:04:21 +0000 Subject: [PATCH] -Refresh bmcsetup -Have bmcsetup theoretically support dhcp ipmi devices -add getipmi with cert support when available git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@10421 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-nbroot2/bmcsetup | 117 ++++++++++++++++++++++++------------------ xCAT-nbroot2/getipmi | 38 ++++++++++++++ xCAT-nbroot2/install | 1 + 3 files changed, 107 insertions(+), 49 deletions(-) create mode 100755 xCAT-nbroot2/getipmi diff --git a/xCAT-nbroot2/bmcsetup b/xCAT-nbroot2/bmcsetup index 81cf9a2df..db3d4d846 100755 --- a/xCAT-nbroot2/bmcsetup +++ b/xCAT-nbroot2/bmcsetup @@ -17,31 +17,36 @@ CREDPID=$! sleep 2 modprobe ipmi_si modprobe ipmi_devintf -while [ -z "$BMCIP" ]; do +IPCFGMETHOD=static +while [ -z "$BMCIP" -a $IPCFGMETHOD="static" ]; do while ! getipmi do echo "Retrying retrieval of IPMI settings from server" done TIMEOUT=15 - BMCIP=`grep bmcip /tmp/ipmi.data |awk -F\> '{print $2}'|awk -F\< '{print $1}'` - BMCGW=`grep gateway /tmp/ipmi.data |awk -F\> '{print $2}'|awk -F\< '{print $1}'` - BMCNM=`grep netmask /tmp/ipmi.data |awk -F\> '{print $2}'|awk -F\< '{print $1}'` - BMCUS=`grep username /tmp/ipmi.data |awk -F\> '{print $2}'|awk -F\< '{print $1}'` - BMCPW=`grep password /tmp/ipmi.data |awk -F\> '{print $2}'|awk -F\< '{print $1}'` - if [ -z "$BMCIP" ]; then + BMCIP=`grep bmcip /tmp/ipmicfg.xml |awk -F\> '{print $2}'|awk -F\< '{print $1}'` + BMCGW=`grep gateway /tmp/ipmicfg.xml |awk -F\> '{print $2}'|awk -F\< '{print $1}'` + BMCNM=`grep netmask /tmp/ipmicfg.xml |awk -F\> '{print $2}'|awk -F\< '{print $1}'` + BMCUS=`grep username /tmp/ipmicfg.xml |awk -F\> '{print $2}'|awk -F\< '{print $1}'` + BMCPW=`grep password /tmp/ipmicfg.xml |awk -F\> '{print $2}'|awk -F\< '{print $1}'` + IPCFGMETHOD=`grep ipcfgmethod /tmp/ipmicfg.xml|awk -F\> '{print $2}'|awk -F\< '{print $1}'` + if [ -z "$IPCFGMETHOD" ]; then + IPCFGMETHOD="static" + fi + if [ -z "$BMCIP" -a $IPCFGMETHOD="static" ]; then echo "FAILED TO RETRIEVE SETTINGS, RETRYING in 15 seconds" sleep 15 fi done kill $CREDPID -NUMBMCS=`grep bmcip /tmp/ipmi.data |awk -F\> '{print $2}'|awk -F\< '{print $1}'|wc -l` +NUMBMCS=`grep bmcip /tmp/ipmicfg.xml |awk -F\> '{print $2}'|awk -F\< '{print $1}'|wc -l` IPMIVER=`ipmitool mc info|grep ^IPMI|awk '{print $4}'` IPMIMFG=`ipmitool mc info|grep "^Manufacturer ID"|awk '{print $4}'` if [ "$IPMIMFG" == 2 ]; then #IBM XPROD=`ipmitool mc info|grep "^Product ID"|awk '{print $4}'` if [ "$XPROD" == "220" ]; then LOCKEDUSERS=1 - BMCPORT=`grep bmcport /tmp/ipmi.data |awk -F\> '{print $2}'|awk -F\< '{print $1}'` + BMCPORT=`grep bmcport /tmp/ipmicfg.xml |awk -F\> '{print $2}'|awk -F\< '{print $1}'` if [ ! -z "$BMCPORT" ]; then let idev=NUMBMCS-1 for p in $BMCPORT; do @@ -53,7 +58,7 @@ if [ "$IPMIMFG" == 2 ]; then #IBM else IBMFAM=`ipmitool raw 0x3a 0x50 |head -n 1| awk '{print $1 $2 $3 $4}'` if [ "$IBMFAM" == "59554f4f" ]; then - BMCPORT=`grep bmcport /tmp/ipmi.data |awk -F\> '{print $2}'|awk -F\< '{print $1}'` + BMCPORT=`grep bmcport /tmp/ipmicfg.xml |awk -F\> '{print $2}'|awk -F\< '{print $1}'` if [ ! -z "$BMCPORT" ]; then let idev=NUMBMCS-1 for p in $BMCPORT; do @@ -67,7 +72,7 @@ elif [ "$IPMIMFG" == 20301 ] ; then XPROD=`ipmitool mc info|grep "^Product ID"|awk '{print $4}'` if [ "$XPROD" == "220" ]; then LOCKEDUSERS=1 - BMCPORT=`grep bmcport /tmp/ipmi.data |awk -F\> '{print $2}'|awk -F\< '{print $1}'` + BMCPORT=`grep bmcport /tmp/ipmicfg.xml |awk -F\> '{print $2}'|awk -F\< '{print $1}'` if [ ! -z "$BMCPORT" ]; then let idev=NUMBMCS-1 for p in $BMCPORT; do @@ -88,49 +93,63 @@ done echo "Detected LAN channel $LANCHAN" let idev=NUMBMCS -while [ $idev -gt 0 ]; do - let idev=idev-1 - TRIES=0 - while ! ipmitool -d $idev lan set $LANCHAN ipsrc static; do - sleep 1 - let TRIES=TRIES+1 - if [ $TRIES -gt $TIMEOUT ]; then break; fi +if [ $IPCFGMETHOD="static" ]; then + while [ $idev -gt 0 ]; do + let idev=idev-1 + TRIES=0 + while ! ipmitool -d $idev lan set $LANCHAN ipsrc static; do + sleep 1 + let TRIES=TRIES+1 + if [ $TRIES -gt $TIMEOUT ]; then break; fi + done done -done -let idev=NUMBMCS-1 -for b in $BMCIP; do - TRIES=0 - while ! ipmitool -d $idev lan set $LANCHAN ipaddr $b; do - sleep 1 - let TRIES=TRIES+1 - if [ $TRIES -gt $TIMEOUT ]; then break; fi + let idev=NUMBMCS-1 + for b in $BMCIP; do + TRIES=0 + while ! ipmitool -d $idev lan set $LANCHAN ipaddr $b; do + sleep 1 + let TRIES=TRIES+1 + if [ $TRIES -gt $TIMEOUT ]; then break; fi + done + let idev=idev-1 done - let idev=idev-1 -done -let idev=NUMBMCS-1 -for m in $BMCNM; do - TRIES=0 - while ! ipmitool -d $idev lan set $LANCHAN netmask $m; do - sleep 1 - let TRIES=TRIES+1 - if [ $TRIES -gt $TIMEOUT ]; then break; fi + let idev=NUMBMCS-1 + for m in $BMCNM; do + TRIES=0 + while ! ipmitool -d $idev lan set $LANCHAN netmask $m; do + sleep 1 + let TRIES=TRIES+1 + if [ $TRIES -gt $TIMEOUT ]; then break; fi + done + let idev=idev-1 done - let idev=idev-1 -done -TRIES=0 -if [ ! -z "$BMCGW" ]; then - let idev=NUMBMCS-1 - for g in $BMCGW; do - TRIES=0 - while ! ipmitool -d $idev lan set $LANCHAN defgw ipaddr $g; do - sleep 1 - let TRIES=TRIES+1 - if [ $TRIES -gt $TIMEOUT ]; then break; fi + TRIES=0 + if [ ! -z "$BMCGW" ]; then + let idev=NUMBMCS-1 + for g in $BMCGW; do + TRIES=0 + while ! ipmitool -d $idev lan set $LANCHAN defgw ipaddr $g; do + sleep 1 + let TRIES=TRIES+1 + if [ $TRIES -gt $TIMEOUT ]; then break; fi + done + let idev=idev-1 done - let idev=idev-1 - done - TRIES=0 + TRIES=0 + fi +else + let idev=NUMBMCS-1 + while [ $idev -gt 0 ]; do + let idev=idev-1 + TRIES=0 + while ! ipmitool -d $idev lan set $LANCHAN ipsrc $IPCFGMETHOD; do + sleep 1 + let TRIES=TRIES+1 + if [ $TRIES -gt $TIMEOUT ]; then break; fi + done + done fi + let idev=NUMBMCS-1 for bmcu in $BMCUS; do DISABLEUSERS="1 2 3 4" diff --git a/xCAT-nbroot2/getipmi b/xCAT-nbroot2/getipmi new file mode 100755 index 000000000..5beb1e56a --- /dev/null +++ b/xCAT-nbroot2/getipmi @@ -0,0 +1,38 @@ +#!/bin/bash +allowcred.awk & +CREDPID=$! +if [ -z "$XCATDEST" ]; then + XCATDEST=$1 +fi +for LANCHAN in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do + if ipmitool channel info $LANCHAN 2> /dev/null | grep 802.3 > /dev/null 2>&1 && ipmitool raw 0xc 2 $LANCHAN 5 0 0 > /dev/null 2>&1; + then break; + fi; +done +BMCMAC=`ipmitool lan print $LANCHAN|grep ^MAC|awk '{print $4}'` #bmcconfig may opt to use DHCP, if so we need to feed up the mac address +#TODO: need a way to get the DUID the service processor may use, perhaps reserve that for 'ibmsetup' since spec doesn't touch ipv6? + +echo " +getbmcconfig +300 +$BMCMAC +" > /tmp/bmcreq.xml +rm /tmp/ipmicfg.xml +while [ ! -f /tmp/ipmicfg.xml ] || grep error /tmp/ipmicfg.xml; do + if [ -f /tmp/ipmicfg.xml ]; then + echo -n "Retrying in 60 seconds..."; + timer=60 + while [ $timer -gt 0 ]; do + sleep 1 + echo -n . + timer=$(($timer-1)); + done + fi + if [ -f /etc/xcat/cert.pem -a -f /etc/xcat/certkey.pem ]; then #use client cert if available + cat /tmp/bmcreq.xml | openssl s_client -key /etc/xcat/certkey.pem -cert /etc/xcat/cert.pem -connect $XCATDEST -quiet 2> /dev/null > /tmp/ipmicfg.xml + else + cat /tmp/bmcreq.xml | openssl s_client -connect $XCATDEST -quiet 2> /dev/null > /tmp/ipmicfg.xml + fi +done +rm /tmp/bmcreq.xml +kill $CREDPID diff --git a/xCAT-nbroot2/install b/xCAT-nbroot2/install index a820c19e8..ea47f8770 100755 --- a/xCAT-nbroot2/install +++ b/xCAT-nbroot2/install @@ -588,6 +588,7 @@ inst "$moddir/udpcat.awk" "/bin/udpcat.awk" inst "$moddir/minixcatd.awk" "/bin/minixcatd.awk" inst "$moddir/bmcsetup" "/bin/bmcsetup" inst "$moddir/allowcred.awk" "/bin/allowcred.awk" +inst "$moddir/getipmi" "/bin/getipmi" inst "$moddir/getcert" "/bin/getcert" inst "$moddir/dhclient.conf" "/etc/dhclient.conf" inst "$moddir/dhclient-script" "/sbin/dhclient-script"