186 lines
6.8 KiB
Bash
Executable File
186 lines
6.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
|
|
#(C)IBM Corp
|
|
# This scripts transfers the cfgloc files and the xCAT credentials from
|
|
# the Management Node to the Service Node on Linux.
|
|
# It only does something, if called with the -d flag.
|
|
# The -d flag was implemented when the call to the routine was moved
|
|
# from the postscript table into the servicenode postscript.
|
|
#
|
|
if [ ! $1 ]; then
|
|
logger -t xcat -p local4.err "xcatserver call without -d, doing nothing."
|
|
#echo "xcatserver call without -d, doing nothing."
|
|
#echo $1
|
|
exit 0
|
|
fi
|
|
if [ $1 != "-d" ]; then
|
|
logger -t xcat -p local4.err "xcatserver call without -d, doing nothing."
|
|
#echo "xcatserver call without -d, doing nothing."
|
|
#echo $1
|
|
exit 0
|
|
fi
|
|
logger -t xcat -p local4.info "xcatserver call with -d. getting credentials and cfgloc "
|
|
#echo "xcatserver call with -d, getting credentials and cfgloc."
|
|
#echo $1
|
|
|
|
if [ ! -x /usr/bin/openssl ]; then
|
|
logger -t xcat -p local4.err "$0: /usr/bin/openssl is not executable"
|
|
exit -1
|
|
fi
|
|
USEOPENSSLFORXCAT=1
|
|
export USEOPENSSLFORXCAT
|
|
# are we using xcat flow control
|
|
useflowcontrol=0
|
|
if [ $USEFLOWCONTROL = "YES" ] || [ $USEFLOWCONTROL = "yes" ] || [ $USEFLOWCONTROL = "1" ]; then
|
|
useflowcontrol=1
|
|
fi
|
|
|
|
xcatpost="xcatpost"
|
|
master=$MASTER
|
|
|
|
allowcred.awk &
|
|
CREDPID=$!
|
|
sleep 1
|
|
|
|
# setup and get the xCAT SSL credentials down to the service node
|
|
# create SSL certificate directory and then get them
|
|
mkdir -p /etc/xcat/cert
|
|
if [ $useflowcontrol = "1" ]; then
|
|
#first contact daemon xcatflowrequest <server> 3001
|
|
logger -t xCAT -p local4.info "xcatserver: sending xcatflowrequest $master 3001"
|
|
/$xcatpost/xcatflowrequest $master 3001
|
|
rc=$?
|
|
logger -t xCAT -p local4.info "xcatserver:xcatflowrequest received response return=$rc"
|
|
if [ $rc -ne 0 ]; then
|
|
logger -t xCAT -p local4.info "xcatserver: error from xcatflowrequest, will not use flow control"
|
|
useflowcontrol=0
|
|
fi
|
|
|
|
|
|
fi
|
|
getcredentials.awk xcat_server_cred | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /etc/xcat/cert/server-cred.pem
|
|
|
|
#check the message is an error or not
|
|
grep -E '<error>' /etc/xcat/cert/server-cred.pem
|
|
if [ $? -ne 0 ]; then
|
|
#the message received is the data
|
|
logger -t xCAT -p local4.info "xcatserver: getting server-cred.pem"
|
|
MAX_RETRIES=10
|
|
RETRY=0
|
|
MYCONT=`cat /etc/xcat/cert/server-cred.pem`
|
|
|
|
while [ -z "$MYCONT" ]; do
|
|
# not using flow control , need to sleep
|
|
if [ $useflowcontrol = "0" ]; then
|
|
let SLI=$RANDOM%10
|
|
let SLI=SLI+10
|
|
sleep $SLI
|
|
fi
|
|
|
|
RETRY=$(($RETRY+1))
|
|
if [ $RETRY -eq $MAX_RETRIES ]
|
|
then
|
|
break
|
|
fi
|
|
if [ $useflowcontrol = "1" ]; then
|
|
#first contact daemon xcatflowrequest <server> 3001
|
|
logger -t xCAT -p local4.info "xcatserver: sending xcatflowrequest $master 3001"
|
|
/$xcatpost/xcatflowrequest $master 3001
|
|
rc=$?
|
|
logger -t xCAT -p local4.info "xcatserver:xcatflowrequest return=$rc"
|
|
if [ $rc -ne 0 ]; then
|
|
logger -t xCAT -p local4.info "xcatserver: error from xcatflowrequest, will not use flow control"
|
|
useflowcontrol=0
|
|
fi
|
|
fi
|
|
getcredentials.awk xcat_server_cred | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /etc/xcat/cert/server-cred.pem
|
|
MYCONT=`cat /etc/xcat/cert/server-cred.pem`
|
|
done
|
|
|
|
chmod 600 /etc/xcat/cert/*
|
|
# do not assume working directory, use the full path
|
|
cp /xcatpost/_xcat/ca.pem /etc/xcat/cert/ca.pem
|
|
else # error from first getcredential call
|
|
#the message received is an error from credentials.pm, so parse it
|
|
ERR_MSG=`sed -n 's%.*<error>\(.*\)</error>.*%\1%p' /etc/xcat/cert/server-cred.pem`
|
|
logger -t xCAT -p local4.err xcatserver: $ERR_MSG
|
|
rm /etc/xcat/cert/server-cred.pem
|
|
fi
|
|
|
|
# get the xcat cfgloc file
|
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
#first contact daemon xcatflowrequest <server> 3001
|
|
logger -t xCAT -p local4.info "xcatserver: sending xcatflowrequest $master 3001"
|
|
/$xcatpost/xcatflowrequest $master 3001
|
|
rc=$?
|
|
logger -t xCAT -p local4.info "xcatserver:xcatflowrequest received response return=$rc"
|
|
if [ $rc -ne 0 ]; then
|
|
logger -t xCAT -p local4.info "xcatserver: error from xcatflowrequest, will not use flow control"
|
|
useflowcontrol=0
|
|
fi
|
|
|
|
fi
|
|
getcredentials.awk xcat_cfgloc | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /etc/xcat/cfgloc
|
|
|
|
#check the message is an error or not
|
|
grep -E '<error>' /etc/xcat/cfgloc
|
|
if [ $? -ne 0 ]; then
|
|
#the message received is the data
|
|
logger -t xCAT -p local4.info "xcatserver: getting cfgloc"
|
|
MAX_RETRIES=10
|
|
RETRY=0
|
|
MYCONT=`cat /etc/xcat/cfgloc`
|
|
|
|
while [ -z "$MYCONT" ]; do
|
|
# not using flow control , need to sleep
|
|
if [ $useflowcontrol = "0" ]; then
|
|
let SLI=$RANDOM%10
|
|
let SLI=SLI+10
|
|
sleep $SLI
|
|
fi
|
|
|
|
RETRY=$(($RETRY+1))
|
|
if [ $RETRY -eq $MAX_RETRIES ]
|
|
then
|
|
break
|
|
fi
|
|
if [ $useflowcontrol = "1" ]; then
|
|
#first contact daemon xcatflowrequest <server> 3001
|
|
logger -t xCAT -p local4.info "xcatserver: sending xcatflowrequest $master 3001"
|
|
/$xcatpost/xcatflowrequest $master 3001
|
|
rc=$?
|
|
logger -t xCAT -p local4.info "xcatserver:xcatflowrequest return=$rc"
|
|
if [ $rc -ne 0 ]; then
|
|
logger -t xCAT -p local4.info "xcatserver: error from xcatflowrequest, will not use flow control"
|
|
useflowcontrol=0
|
|
fi
|
|
fi
|
|
getcredentials.awk xcat_cfgloc | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /etc/xcat/cfgloc
|
|
MYCONT=`cat /etc/xcat/cfgloc`
|
|
done
|
|
# if we successfully got cfgloc
|
|
if [ -f /etc/xcat/cfgloc ]; then
|
|
# if not DB2
|
|
grep "DB2" /etc/xcat/cfgloc 2>&1 1> /dev/null
|
|
if [ $? -ne 0 ]; then
|
|
sed s/host=[^\|]*/host=$MASTER/ /etc/xcat/cfgloc > /etc/xcat/cfgloc.new
|
|
mv /etc/xcat/cfgloc.new /etc/xcat/cfgloc
|
|
else # DB2 cfgloc has different format
|
|
if [ -n "$UPDATENODE" ] && [ $UPDATENODE -eq 1 ]; then
|
|
cp /etc/xcat/cfgloc /etc/xcat/cfgloc.db2
|
|
else
|
|
mv /etc/xcat/cfgloc /etc/xcat/cfgloc.db2
|
|
fi
|
|
fi
|
|
chmod 600 /etc/xcat/cfgloc*
|
|
fi
|
|
else # error from first getcredentials call
|
|
#the message received is an error from credentials.pm, so parse it
|
|
ERR_MSG=`sed -n 's%.*<error>\(.*\)</error>.*%\1%p' /etc/xcat/cfgloc`
|
|
logger -t xCAT -p local4.err xcatserver: $ERR_MSG
|
|
rm /etc/xcat/cfgloc
|
|
fi
|
|
|
|
kill -9 $CREDPID
|