xcat-core/xCAT/postscripts/xcatdsklspost

199 lines
6.1 KiB
Bash
Executable File

#!/bin/sh
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
#####################################################
#
# Generic xCAT post script for diskless nodes
# This script is called in the following different palces:
# updatenode -P ... --> xcatdsklspost 1 ...
# updatenode -S --> xcatdsklspost 2 otherpkgs
# moncfg rmcmon --> xcatdsklspost 3 configrmcnodes
# node deployment --> xcatdsklspost
#
#####################################################
if [ ! `uname` == Linux ]; then
MYDIR=`dirname $0`
exec $MYDIR/xcatdsklspost.aix
exit
fi
let SLI=$RANDOM%10
sleep $SLI
#setup $OSVER ,for SLES11
if [ -e '/etc/SuSE-release' ]; then
OSVER=`grep -h VERSION /etc/SuSE-release |awk '{print $3}'`
fi
SIPS=`grep -h dhcp-server-identifier /var/lib/dhclient/dhclient*.leases 2> /dev/null|awk '{print $3}'|sed -e 's/;//'`
if [ -z "$SIPS" ]; then
SIPS=`grep -h DHCPSID /var/lib/dhcpcd/*.info 2> /dev/null|awk -F= '{print $2}'|sed -e s/\'//g`
fi
SIP=`echo $SIPS|tail -n 1` #Pick one for wget
#open the xcatinfo file to look for the master if it is not set
frominfofile=0
if [ -z $SIP ]; then
if [ -f /opt/xcat/xcatinfo ]; then
SIP=`grep 'XCATSERVER' /opt/xcat/xcatinfo |cut -d= -f2`
frominfofile=1
fi
fi
#no hope, now let's get out here.
if [ -z $SIP ]; then
hn=`hostname`
echo "Cannot find the xCAT server for node $hn"
exit
fi
if grep 'rw /rw tmpfs ' /proc/mounts >& /dev/null; then
touch /var/lock/subsys/xcatmounts
echo '#!/bin/bash' > /etc/rc6.d/K10xcatmounts
echo umount -l /ro >> /etc/rc6.d/K10xcatmounts
echo umount -l /rw >> /etc/rc6.d/K10xcatmounts
chmod 755 /etc/rc6.d/K10xcatmounts
ln -sf /etc/rc6.d/K10xcatmounts /etc/rc0.d/K10xcatmounts
fi
if [ -x /usr/bin/openssl ]; then
XCATSERVER="$SIP:3001"
export XCATSERVER
USEOPENSSLFORXCAT=1 #Though this is the only method going forward, flag to allow backward compatibility with 2.2 generated netboot images
export USEOPENSSLFORXCAT
fi
mkdir -p /xcatpost;
mkdir -p /tmp/postage
rm -R -f /xcatpost/*
rm -R -f /tmp/postage/*
#here we get all the postscripts. Please do not change this behaviour because some scripts depend on others
cd /tmp/postage
#wget -l inf -N -r --waitretry=10 --random-wait --retry-connrefused -t 0 -T 60 ftp://$SIP/install/postscripts 2> /tmp/wget.log
wget -l inf -N -r --waitretry=10 --random-wait --retry-connrefused -t 0 -T 60 ftp://$SIP/postscripts 2> /tmp/wget.log
#mv $SIP/install/postscripts/* /xcatpost;
mv $SIP/postscripts/* /xcatpost;
rm -rf $SIP
cd /xcatpost;
PATH=/xcatpost:$PATH
export PATH
chmod +x /xcatpost/*;
#echo "PATH=$PATH"
/xcatpost/getpostscript.awk | sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' > /tmp/mypostscript;
MYCONT=`grep MASTER /tmp/mypostscript`
#echo "MYCONT=$MYCONT"
#if getpostscript.awk fails, the postscript will fall into infinit loop
#so one retry_number is added to avoid sunc a condition
MAX_RETRIES=10
RETRY=0
while [ -z "$MYCONT" ]; do
RETRY=$(($RETRY+1))
if [ $RETRY -eq $MAX_RETRIES ]
then
break
fi
let SLI=$RANDOM%10
let SLI=10+$SLI
sleep $SLI
for SIP in $SIPS; do #Attempt against several candidates
if [ -x /usr/bin/openssl ]; then
XCATSERVER="$SIP:3001"
export XCATSERVER
USEOPENSSLFORXCAT=1 #Though this is the only method going forward, flag to allow backward compatibility with 2.2 generated netboot images
export USEOPENSSLFORXCAT
fi
/xcatpost/getpostscript.awk | sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' > /tmp/mypostscript;
MYCONT=`grep MASTER /tmp/mypostscript`
if [ ! -z "$MYCONT" ]; then
break;
fi
done
# echo "MYCONT=$MYCONT"
done
#save the SIP into the xcatinfo file
if [ $frominfofile -eq 0 ]; then
if [ ! -f /opt/xcat/xcatinfo ]; then
mkdir -p /opt/xcat
touch /opt/xcat/xcatinfo
fi
grep 'XCATSERVER' /opt/xcat/xcatinfo 2>&1 > /dev/null
if [ $? -eq 0 ]; then
sed -i "s/XCATSERVER=.*/XCATSERVER=$SIP/" /opt/xcat/xcatinfo
else
echo "XCATSERVER=$SIP" >> /opt/xcat/xcatinfo
fi
fi
# when called by the updatenode command
#modify the UPDATENODE flag to 1
if [ $# -gt 0 ]; then
TMP=`sed -e 's/UPDATENODE=0/UPDATENODE=1/g' /tmp/mypostscript`;
echo "$TMP" > /tmp/mypostscript;
fi
if [ $# -gt 1 ]; then
POSTS=$2
#remove all the postscripts
TMP=`sed "/postscripts-start-here/,/postscripts-end-here/ d" /tmp/mypostscript`
echo "$TMP" > /tmp/mypostscript
echo "# postscripts-start-here\n" >> /tmp/mypostscript
#add requested postscripts in
echo "$POSTS" | tr "," "\n" >> /tmp/mypostscript
echo "# postscripts-end-here\n" >> /tmp/mypostscript
fi
#ADDSITEYUM is set by post.rh and post.rh.iscsi for full installtion
if [[ "$ADDSITEYUM" = "1" ]]; then
TMP=`sed "/postscripts-start-here/ a addsiteyum" /tmp/mypostscript`
echo "$TMP" > /tmp/mypostscript
fi
#MYCONT=`cat /tmp/mypostscript`
#echo "$MYCONT"
# use the run_ps subroutine to run the postscripts
TMP=`sed "/postscripts-start-here/,/postscripts-end-here/ s/\(.*\)/run_ps \1/;s/run_ps\s*#/#/;s/run_ps\s*$//" /tmp/mypostscript`
echo "
# subroutine used to run postscripts
run_ps () {
if [[ -f \$1 ]]; then
echo \"Running postscript: \$1\"
OUTPUT=\`\$1 2>&1\`
if [[ -n \$OUTPUT ]]; then
echo \"\$OUTPUT\"
fi
else
echo \"Postscript \$1 does NOT exist.\"
fi
}
# subroutine end
" > /tmp/mypostscript
echo "$TMP" >> /tmp/mypostscript
if [ $# -eq 0 ]; then
#notify the server that we are done with netbooting
CNS=`grep NODESTATUS= /tmp/mypostscript |awk -F = '{print $2}'`
if [ -z "$CNS" ] || [ "$CNS" != "'0'" -a "$CNS" != "'N'" -a "$CNS" != "'n'" ]; then
echo "updateflag.awk \$MASTER 3002 \"installstatus booted\"" >> /tmp/mypostscript
fi
fi
DHCP_TMP=`sed 's/\(DHCPINTERFACES=\)\(.*\)$/\1"\2"/' /tmp/mypostscript`
echo "$DHCP_TMP" > /tmp/mypostscript
chmod +x /tmp/mypostscript
if [ -x /tmp/mypostscript ];then
/tmp/mypostscript
fi
#rm -f /tmp/mypostscript
#tell user it is done when this is called by updatenode command
if [ $# -gt 0 ]; then
echo "returned from postscript"
fi