mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 19:32:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			524 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			524 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| #
 | |
| # Run xCAT post install
 | |
| #
 | |
| export MASTER_IP="#ENV:MASTER_IP#"
 | |
| export MASTER="#XCATVAR:XCATMASTER#"
 | |
| export NODESTATUS="#XCATVAR:NODESTATUS#"
 | |
| export XCATIPORT=#TABLE:site:key=xcatiport:value#
 | |
| export INSTALLDIR=#TABLE:site:key=installdir:value#
 | |
| export TFTPDIR=#TABLE:site:key=tftpdir:value#
 | |
| export XCATDEBUGMODE="#TABLEBLANKOKAY:site:key=xcatdebugmode:value#"
 | |
| export HTTPPORT="#TABLEBLANKOKAY:site:key=httpport:value#"
 | |
| 
 | |
| #INCLUDE:#ENV:XCATROOT#/share/xcat/install/scripts/scriptlib#
 | |
| 
 | |
| if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|     set -x
 | |
| fi
 | |
| 
 | |
| if [ -z "$XCATIPORT" ]; then
 | |
|     XCATIPORT="3002"
 | |
| fi
 | |
| if [ -z "$INSTALLDIR" ]; then
 | |
|     INSTALLDIR="/install"
 | |
| fi
 | |
| if [ -z "$TFTPDIR" ]; then
 | |
|     TFTPDIR="/tftpboot"
 | |
| fi
 | |
| if [[ $TFTPDIR != /* ]]; then
 | |
|     TFTPDIR="/"$TFTPDIR
 | |
| fi
 | |
| if [ -z "$HTTPPORT" ]; then
 | |
|     HTTPPORT="80"
 | |
| fi
 | |
| 
 | |
| NODESTATUS=$(echo "$NODESTATUS"| tr -d \'\"| tr A-Z a-z)
 | |
| 
 | |
| (cat  << 'EOF'
 | |
| #INCLUDE:#TABLE:site:key=installdir:value#/postscripts/updateflag.awk#
 | |
| EOF
 | |
| ) >/tmp/updateflag
 | |
| 
 | |
| chmod 0755 /tmp/updateflag
 | |
| 
 | |
| cd /tmp
 | |
| log_label="xcat.deployment"
 | |
| msgutil_r "$MASTER_IP" "info" "Executing post.xcat to prepare for firstbooting ..." "/var/log/xcat/xcat.log" "$log_label"
 | |
| 
 | |
| RAND=$(perl -e 'print int(rand(50)). "\n"')
 | |
| if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|    msgutil_r "$MASTER_IP" "debug" "sleep $RAND" "/var/log/xcat/xcat.log" "$log_label"
 | |
| fi
 | |
| sleep $RAND
 | |
| 
 | |
| # Stop if no openssl to help the next bit
 | |
| if [ ! -x /usr/bin/openssl ]; then
 | |
|     msgutil_r "$MASTER_IP" "error" "/usr/bin/openssl does not exist, halt ..." "/var/log/xcat/xcat.log" "$log_label"
 | |
|     /tmp/updateflag $MASTER $XCATIPORT "installstatus failed"
 | |
|     sleep 36500d
 | |
| fi
 | |
| 
 | |
| #save to /opt/xcat/xcatinfo file
 | |
| if [ ! -f /opt/xcat/xcatinfo ]; then
 | |
|     mkdir -p /opt/xcat
 | |
|     touch /opt/xcat/xcatinfo
 | |
| fi
 | |
| 
 | |
| grep 'XCATSERVER' /opt/xcat/xcatinfo > /dev/null 2>&1
 | |
| if [ $? -eq 0 ]; then
 | |
|     sed -i "s/XCATSERVER=.*/XCATSERVER=$MASTER_IP/" /opt/xcat/xcatinfo
 | |
| else
 | |
|     echo "XCATSERVER=$MASTER_IP" >> /opt/xcat/xcatinfo
 | |
| fi
 | |
| 
 | |
| grep 'INSTALLDIR' /opt/xcat/xcatinfo > /dev/null 2>&1
 | |
| if [ $? -eq 0 ]; then
 | |
|     sed -i "s/INSTALLDIR=.*/INSTALLDIR=$INSTALLDIR/" /opt/xcat/xcatinfo
 | |
| else
 | |
|     echo "INSTALLDIR=$INSTALLDIR" >> /opt/xcat/xcatinfo
 | |
| fi
 | |
| 
 | |
| grep 'HTTPPORT' /opt/xcat/xcatinfo > /dev/null 2>&1
 | |
| if [ $? -eq 0 ]; then
 | |
|     sed -i "s/HTTPPORT=.*/HTTPPORT=$HTTPPORT/" /opt/xcat/xcatinfo
 | |
| else
 | |
|     echo "HTTPPORT=$HTTPPORT" >> /opt/xcat/xcatinfo
 | |
| fi
 | |
| 
 | |
| if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|     msgutil_r "$MASTER_IP" "debug" "/opt/xcat/xcatinfo generated" "/var/log/xcat/xcat.log" "$log_label"
 | |
| fi
 | |
| 
 | |
| # download the postscripts
 | |
| msgutil_r "$MASTER_IP" "info" "trying to download postscripts from $MASTER_IP..." "/var/log/xcat/xcat.log" "$log_label"
 | |
| 
 | |
| # Stop if no wget to help the next bit
 | |
| if [ ! -x /usr/bin/wget ]; then
 | |
|     msgutil_r "$MASTER_IP" "error" "/usr/bin/wget does not exist, halt ..." "/var/log/xcat/xcat.log" "$log_label"
 | |
|     /tmp/updateflag $MASTER $XCATIPORT "installstatus failed"
 | |
|     sleep 36500d
 | |
| fi
 | |
| 
 | |
| wget -l inf -N -r --waitretry=10 --random-wait --retry-connrefused  -e robots=off -nH --cut-dirs=2 --reject "index.html*" --no-parent -t 20 -T 60 http://${MASTER_IP}:${HTTPPORT}${INSTALLDIR}/postscripts/ -P /xcatpost 2> /tmp/wget.log
 | |
| if [ "$?" != "0" ]; then
 | |
|     msgutil_r "$MASTER_IP" "error" "failed to download postscripts from http://$MASTER_IP$INSTALLDIR/postscripts/,check /tmp/wget.log on the node,  halt ..." "/var/log/xcat/xcat.log" "$log_label"
 | |
|     /tmp/updateflag $MASTER $XCATIPORT "installstatus failed"
 | |
|     sleep 36500d
 | |
| fi
 | |
| chmod -R +x `find /xcatpost/ -maxdepth 1 -print | grep -E -v '^(/xcatpost/|/xcatpost/_xcat|/xcatpost/_ssh|/xcatpost/ca|/xcatpost/hostkeys)$'`
 | |
| msgutil_r "$MASTER_IP" "info" "postscripts downloaded successfully" "/var/log/xcat/xcat.log" "$log_label"
 | |
| 
 | |
| # get the precreated mypostscript file
 | |
| if [ -x /xcatpost/mypostscript ]; then
 | |
|     rm -rf /xcatpost/mypostscript
 | |
| fi
 | |
| export NODE=#TABLE:nodelist:THISNODE:node#
 | |
| 
 | |
| msgutil_r "$MASTER_IP" "info" "trying to get mypostscript from $MASTER_IP..." "/var/log/xcat/xcat.log" "$log_label"
 | |
| 
 | |
| wget -N --waitretry=10 --random-wait --retry-connrefused -t 20 -T 60 http://${MASTER_IP}:${HTTPPORT}${TFTPDIR}/mypostscripts/mypostscript.$NODE  -P /xcatpost 2> /tmp/wget.log
 | |
| if [ "$?" = "0" ]; then
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|         msgutil_r "$MASTER_IP" "debug" "precreated mypostscript downloaded successfully" "/var/log/xcat/xcat.log" "$log_label"
 | |
|     fi
 | |
|     mv /xcatpost/mypostscript.$NODE /xcatpost/mypostscript
 | |
|     chmod 700 /xcatpost/mypostscript
 | |
| fi
 | |
| 
 | |
| USEOPENSSLFORXCAT=1 #Though this is the only method going forward, flag to allow backward compatibility with 2.2 generated netboot images
 | |
| export USEOPENSSLFORXCAT
 | |
| XCATSERVER=$MASTER_IP:3001
 | |
| export XCATSERVER
 | |
| 
 | |
| # If mypostscript doesn't exist, we will get it through getpostscript.awk
 | |
| if [ ! -x /xcatpost/mypostscript ]; then
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|         msgutil_r "$MASTER_IP" "debug" "no pre-generated mypostscript.<nodename>, trying to get it with getpostscript.awk..." "/var/log/xcat/xcat.log" "$log_label"
 | |
|     fi
 | |
| 
 | |
|     # To support the postscripts in the subdirectories under /install/postscripts
 | |
|     # chmod +x /xcatpost/*
 | |
|     # Stop if no getpostscript.awk to help the next bit
 | |
|     if [ ! -x /xcatpost/getpostscript.awk ]; then
 | |
|         msgutil_r "$MASTER_IP" "error" "/xcatpost/getpostscript.awk does not exist, halt ..." "/var/log/xcat/xcat.log" "$log_label"
 | |
|         /tmp/updateflag $MASTER $XCATIPORT "installstatus failed"
 | |
|         sleep 36500d
 | |
|     fi
 | |
|     /xcatpost/getpostscript.awk |egrep '<data>'|sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/</</g' -e 's/>/>/g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /xcatpost/mypostscript
 | |
| 
 | |
|     MYCONT=`grep ^MASTER= /xcatpost/mypostscript`
 | |
|     RETRY=0
 | |
|     while [ -z "$MYCONT" ]; do
 | |
|         RETRY=$(($RETRY+1))
 | |
|         if [ $RETRY -eq "10" ]; then
 | |
|             break
 | |
|         fi
 | |
| 
 | |
|         let SLI=$RANDOM%10+10
 | |
|         sleep $SLI
 | |
|         /xcatpost/getpostscript.awk |egrep '<data>'|sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/</</g' -e 's/>/>/g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /xcatpost/mypostscript
 | |
| 
 | |
|         MYCONT=`grep ^MASTER= /xcatpost/mypostscript`
 | |
|     done
 | |
| fi
 | |
| 
 | |
| TMP=`sed "/^#\s*postscripts-start-here/,/^#\s*postscripts-end-here/ s/\(.*\)/run_ps postscript \1/;s/run_ps postscript\s*#/#/;s/run_ps postscript\s*$//" /xcatpost/mypostscript`
 | |
| echo "$TMP" > /xcatpost/mypostscript
 | |
| TMP=`sed "/^#\s*postbootscripts-start-here/,/^#\s*postbootscripts-end-here/ s/\(.*\)/run_ps postbootscript \1/;s/run_ps postbootscript\s*#/#/;s/run_ps postbootscript\s*$//" /xcatpost/mypostscript`
 | |
| 
 | |
| cd /xcatpost
 | |
| #gunzip xcatpost.tar.gz
 | |
| #tar -xvf xcatpost.tar
 | |
| #/xcatpost/#TABLE:nodelist:THISNODE:node#
 | |
| export PATH=$PATH:/xcatpost
 | |
| 
 | |
| # use the run_ps subroutine to run the postscripts
 | |
| 
 | |
| if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|     echo "set -x" > /xcatpost/mypostscript
 | |
| else
 | |
|     cat /dev/null > /xcatpost/mypostscript
 | |
| fi
 | |
| 
 | |
| echo "
 | |
| 
 | |
| . /xcatpost/xcatlib.sh
 | |
| 
 | |
| # global value to store the running status of the postbootscripts,the value is non-zero if one postbootscript failed
 | |
| return_value=0
 | |
| 
 | |
| # subroutine used to run postscripts
 | |
| # \$1 argument is the script type
 | |
| # rest argument is the script name and arguments
 | |
| run_ps () {
 | |
|     local ret_local=0
 | |
|     mkdir -p "\"/var/log/xcat\""
 | |
|     # On some Linux distro, the rsyslogd daemon write log files with permision
 | |
|     # other than root:root. And in some case, the directory /var/log/xcat was
 | |
|     # created by xCAT, and had root:root ownership. In this way, rsyslogd
 | |
|     # did not have enough permission to write to log files under this directory.
 | |
|     # As a dirty hack, change the ownership of directory /var/log/xcat to the
 | |
|     # same ownership of directory /var/log.
 | |
|     chown `ls -ld /var/log | awk '{ print \$3\":\"\$4 }'` "\"/var/log/xcat\""
 | |
|     local logfile=\"/var/log/xcat/xcat.log\"
 | |
|     local scriptype=\$1
 | |
|     shift;
 | |
| 
 | |
|     if [ -z \"\$scriptype\" ]; then
 | |
|         scriptype=\"postscript\"
 | |
|     fi
 | |
|     log_label=\"xcat.deployment.\"\$scriptype
 | |
|     export LOGLABEL=\$log_label
 | |
|     if [ -f \$1 ]; then
 | |
|         msgutil_r \"\$MASTER_IP\" \"info\" "\"\$scriptype start..: \$1\"" \"\$logfile\" \"\$log_label\"
 | |
|         if [ \"\$XCATDEBUGMODE\" = \"1\" ] || [ \"\$XCATDEBUGMODE\" = \"2\" ]; then
 | |
|             local compt=\$(file \$1)
 | |
|             local reg=\"shell script\"
 | |
|             if [[ \"\$compt\" =~ \$reg ]]; then
 | |
|                 bash -x ./\$@ 2>&1
 | |
|                 ret_local=\$?
 | |
|             else
 | |
|                 ./\$@ 2>&1 | logger -t \$log_label -p debug
 | |
|                 ret_local=\${PIPESTATUS[0]}
 | |
|             fi
 | |
|         else
 | |
|             ./\$@ 2>&1
 | |
|             ret_local=\${PIPESTATUS[0]}
 | |
|         fi
 | |
| 
 | |
|         if [ \"\$ret_local\" -ne \"0\" ]; then
 | |
|             return_value=\$ret_local
 | |
|         fi
 | |
|         msgutil_r \"\$MASTER_IP\" \"info\" "\"\$scriptype end...: \$1 return with \$ret_local\"" \"\$logfile\" \"\$log_label\"
 | |
|     else
 | |
|         msgutil_r \"\$MASTER_IP\" \"error\" "\"\$scriptype \$1 does NOT exist.\"" \"\$logfile\" \"\$log_label\"
 | |
|         return_value=-1
 | |
|     fi
 | |
| 
 | |
| 
 | |
|     return 0
 | |
| }
 | |
| # subroutine end
 | |
| 
 | |
| " >> /xcatpost/mypostscript
 | |
| echo "$TMP" >> /xcatpost/mypostscript
 | |
| 
 | |
| if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|     echo "set +x" >> /xcatpost/mypostscript
 | |
| fi
 | |
| 
 | |
| chmod +x /xcatpost/mypostscript
 | |
| if [ ! -x /xcatpost/mypostscript ]; then
 | |
|     msgutil_r "$MASTER_IP" "error" "failed to generate mypostscript file, halt ..." "/var/log/xcat/xcat.log" "$log_label"
 | |
|     /tmp/updateflag $MASTER $XCATIPORT "installstatus failed"
 | |
|     sleep 36500d
 | |
| else
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|         msgutil_r "$MASTER_IP" "debug" "generate mypostscript file successfully" "/var/log/xcat/xcat.log" "$log_label"
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| 
 | |
| #save the postboot scripts to /xcatpost/mypostscript.post
 | |
| TMP=`sed "/^#\s*postscripts-start-here/,/^#\s*postscripts-end-here/ d" /xcatpost/mypostscript`
 | |
| echo "$TMP" > /xcatpost/mypostscript.post
 | |
| chmod 755 /xcatpost/mypostscript.post
 | |
| 
 | |
| if [ ! -x /xcatpost/mypostscript.post ]; then
 | |
|     msgutil_r "$MASTER_IP" "error" "failed to generate /xcatpost/mypostscript.post" "/var/log/xcat/xcat.log" "$log_label"
 | |
| else
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|         msgutil_r "$MASTER_IP" "debug" "generate mypostscript.post file successfully" "/var/log/xcat/xcat.log" "$log_label"
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| 
 | |
| export OSVER=#TABLE:nodetype:THISNODE:os#
 | |
| #create the post init service as a hook to run PS and PBS, as well as status updating
 | |
| hassystemd=0
 | |
| systemctl --version 2>/dev/null
 | |
| if [ $? -eq 0 ]; then
 | |
|     hassystemd=1
 | |
| fi
 | |
| 
 | |
| if [ $hassystemd -eq 1 ] ; then
 | |
|     if [[ $OSVER =~ sle && $OSVER != sles11* ]]; then
 | |
|         cat >/etc/systemd/system/xcatpostinit1.service <<'EOF'
 | |
| #INCLUDE:/install/postscripts/xcatpostinit1.service.yast2#
 | |
| EOF
 | |
|         cat >/opt/xcat/xcatpostinit1.service.sles <<'EOF'
 | |
| #INCLUDE:/install/postscripts/xcatpostinit1.service#
 | |
| EOF
 | |
|     else
 | |
|         cat >/etc/systemd/system/xcatpostinit1.service <<'EOF'
 | |
| #INCLUDE:/install/postscripts/xcatpostinit1.service#
 | |
| EOF
 | |
|     fi
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|         msgutil_r "$MASTER_IP" "debug" "/etc/systemd/system/xcatpostinit1.service generated" "/var/log/xcat/xcat.log" "$log_label"
 | |
|     fi
 | |
| 
 | |
|     ln -s /etc/systemd/system/xcatpostinit1.service /etc/systemd/system/multi-user.target.wants/xcatpostinit1.service
 | |
| 
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|         msgutil_r "$MASTER_IP" "debug" "xcatpostinit1.service enabled" "/var/log/xcat/xcat.log" "$log_label"
 | |
|     fi
 | |
|     cat >/opt/xcat/xcatpostinit1 << 'EOF'
 | |
| #INCLUDE:/install/postscripts/xcatpostinit1.install#
 | |
| EOF
 | |
|     chmod 755 /opt/xcat/xcatpostinit1
 | |
| else
 | |
|     cat >/etc/init.d/xcatpostinit1 << 'EOF'
 | |
| #INCLUDE:#TABLE:site:key=installdir:value#/postscripts/xcatpostinit1.install#
 | |
| EOF
 | |
|     chmod 755 /etc/init.d/xcatpostinit1
 | |
| 
 | |
|     if [ ! -x /etc/init.d/xcatpostinit1 ]; then
 | |
|         msgutil_r "$MASTER_IP" "error" "failed to generate /etc/init.d/xcatpostinit1" "/var/log/xcat/xcat.log" "$log_label"
 | |
|     else
 | |
|         if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|             msgutil_r "$MASTER_IP" "debug" "/etc/init.d/xcatpostinit1 generated" "/var/log/xcat/xcat.log" "$log_label"
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     if [[ $OSVER == ubuntu* ]]; then
 | |
|         ln -s /etc/init.d/xcatpostinit1 /etc/rc2.d/S84xcatpostinit1
 | |
|     else
 | |
|         ln -s /etc/init.d/xcatpostinit1 /etc/rc.d/rc3.d/S84xcatpostinit1
 | |
|         ln -s /etc/init.d/xcatpostinit1 /etc/rc.d/rc4.d/S84xcatpostinit1
 | |
|         ln -s /etc/init.d/xcatpostinit1 /etc/rc.d/rc5.d/S84xcatpostinit1
 | |
|     fi
 | |
| 
 | |
|     if [[ $OSVER == ubuntu* ]]; then
 | |
|         update-rc.d xcatpostinit1 defaults
 | |
|     else
 | |
|         if [[ $OSVER == sle* ]]; then
 | |
|             if [[ $OSVER == sles10* ]]; then
 | |
|                 /sbin/insserv xcatpostinit1
 | |
|             else
 | |
|                 /sbin/insserv -p /etc/init.d xcatpostinit1
 | |
|             fi
 | |
|         fi
 | |
|         #chkconfig --add xcatpostinit1
 | |
|         chkconfig xcatpostinit1 on
 | |
|         if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|             msgutil_r "$MASTER_IP" "debug" "service xcatpostinit1 enabled" "/var/log/xcat/xcat.log" "$log_label"
 | |
|         fi
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| #create the xcatinstallpost
 | |
| mkdir -p /opt/xcat
 | |
| cat >/opt/xcat/xcatinstallpost << 'EOF'
 | |
| #INCLUDE:#TABLE:site:key=installdir:value#/postscripts/xcatinstallpost#
 | |
| 
 | |
| if [ -f /xcatpost/mypostscript.post ]; then
 | |
|     RUNBOOTSCRIPTS=`grep 'RUNBOOTSCRIPTS=' /xcatpost/mypostscript.post |cut -d= -f2 | tr -d \'\" | tr A-Z a-z`
 | |
| fi
 | |
| 
 | |
| if [[ $OSVER == ubuntu* ]]; then
 | |
|     if [[ ! "$RUNBOOTSCRIPTS" =~ ^(1|yes|y)$ ]]; then
 | |
|         update-rc.d -f xcatpostinit1 remove
 | |
|     fi
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|         msgutil_r "$MASTER_IP" "debug" "update-rc.d -f xcatpostinit1 remove" "/var/log/xcat/xcat.log" "xcat.xcatinstallpost"
 | |
|     fi
 | |
| else
 | |
|     if [[ ! "$RUNBOOTSCRIPTS" =~ ^(1|yes|y)$ ]] && [[ ! "$NODESTATUS" =~ ^(1|yes|y)$ ]]; then
 | |
|         chkconfig xcatpostinit1 off
 | |
|         if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|             msgutil_r "$MASTER_IP" "debug" "service xcatpostinit1 disabled" "/var/log/xcat/xcat.log" "xcat.xcatinstallpost"
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
| fi
 | |
| 
 | |
| EOF
 | |
| chmod 755 /opt/xcat/xcatinstallpost
 | |
| 
 | |
| if [ ! -x /opt/xcat/xcatinstallpost ]; then
 | |
|     msgutil_r "$MASTER_IP" "error" "failed to generate /opt/xcat/xcatinstallpost" "/var/log/xcat/xcat.log" "$log_label"
 | |
| else
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|         msgutil_r "$MASTER_IP" "debug" "/opt/xcat/xcatinstallpost generated" "/var/log/xcat/xcat.log" "$log_label"
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| 
 | |
| #create the dskls post
 | |
| cat >/opt/xcat/xcatdsklspost << 'EOF'
 | |
| #INCLUDE:#TABLE:site:key=installdir:value#/postscripts/xcatdsklspost#
 | |
| EOF
 | |
| chmod 755 /opt/xcat/xcatdsklspost
 | |
| 
 | |
| if [ ! -x /opt/xcat/xcatdsklspost ]; then
 | |
|     msgutil_r "$MASTER_IP" "error" "failed to generate /opt/xcat/xcatdsklspost" "/var/log/xcat/xcat.log" "$log_label"
 | |
| else
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|         msgutil_r "$MASTER_IP" "debug" "/opt/xcat/xcatdsklspost generated" "/var/log/xcat/xcat.log" "$log_label"
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| 
 | |
| #create the preboot script and run here
 | |
| TMP=`sed "/^#\s*postbootscripts-start-here/,/^#\s*postbootscripts-end-here/ d" /xcatpost/mypostscript`
 | |
| echo "$TMP" > /xcatpost/mypostscript
 | |
| 
 | |
| echo "
 | |
| #save bad return code to /opt/xcat/xcatinfo
 | |
| if [ \"\$return_value\" -ne \"0\" ]; then
 | |
|     grep 'POSTSCRIPTS_RC' /opt/xcat/xcatinfo > /dev/null 2>&1
 | |
|     if [ \$? -eq 0 ]; then
 | |
|         sed -i \"s/POSTSCRIPTS_RC=.*/POSTSCRIPTS_RC=1/\" /opt/xcat/xcatinfo
 | |
|     else
 | |
|         echo \"POSTSCRIPTS_RC=1\" >> /opt/xcat/xcatinfo
 | |
|     fi
 | |
| fi
 | |
| " >> /xcatpost/mypostscript
 | |
| 
 | |
| chmod 700 /xcatpost/mypostscript
 | |
| 
 | |
| export ARCH=#TABLE:nodetype:THISNODE:arch#
 | |
| export CONSOLEPORT=#TABLEBLANKOKAY:nodehm:THISNODE:serialport#
 | |
| 
 | |
| #for redhat:
 | |
| #place-holder for the code to save the repo info on compute node,pointing to the "pkgdir" of the osimage
 | |
| #so that the provisioned node has the repo pointed to the distro path on MN
 | |
| #WRITEREPO#
 | |
| 
 | |
| if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|    msgutil_r "$MASTER_IP" "info" "running mypostscript" "/var/log/xcat/xcat.log" "$log_label"
 | |
| fi
 | |
| /xcatpost/mypostscript
 | |
| if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|    msgutil_r "$MASTER_IP" "info" "mypostscript returned" "/var/log/xcat/xcat.log" "$log_label"
 | |
| fi
 | |
| 
 | |
| 
 | |
| if [[ $OSVER == ubuntu* ]]; then
 | |
|     if [[ -r /boot/grub/menu.lst ]]; then
 | |
|         sed -i 's/^serial/#serial/' /boot/grub/menu.lst
 | |
|         sed -i 's/^terminal/#terminal/' /boot/grub/menu.lst
 | |
|     elif [[ -r /boot/grub/grub.cfg ]] ; then
 | |
|         update-grub
 | |
|     fi
 | |
| 
 | |
|     #print the kernel messages and service start messages with systemd on the console during system bootup
 | |
|     [ -f /etc/default/grub ] && sed -i -e '/GRUB_CMDLINE_LINUX_DEFAULT=/s/quiet//;s/splash//' -e '/#GRUB_TERMINAL=/s/#//' -e 's/#GRUB_GFXMODE=.*/GRUB_GFXMODE=text/' /etc/default/grub && update-grub
 | |
| 
 | |
|     if echo "$ARCH" | grep -i 'x86_64'; then
 | |
|         #grab the install-time console configuration from /proc/cmdline inside os installer
 | |
|         CONSOLECFG=$(awk 'BEGIN{RS="[ \n]" ;ORS=" "} $0 ~ /^console=/{print $0}' /proc/cmdline)
 | |
|         #if the console configuration is not applied to the grub configuration,apply it
 | |
|         cat /boot/grub/grub.cfg |grep "$CONSOLECFG" >/dev/null 2>&1 || ([ -f /etc/default/grub ] && sed -i -e "/GRUB_CMDLINE_LINUX_DEFAULT=/s/=\"/=\" $CONSOLECFG /" /etc/default/grub && update-grub)
 | |
|     fi
 | |
|     if echo "$ARCH" | grep -i 'ppc64'; then
 | |
|         if [ -z "$CONSOLEPORT" ] ; then
 | |
|             export CONSOLEPORT=0
 | |
|         fi
 | |
|         CONSOLE="hvc$CONSOLEPORT"
 | |
|         if [[ -r /etc/default/grub ]] ; then
 | |
|             sed -i "s/GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"console=$CONSOLE\"/" /etc/default/grub
 | |
|         else
 | |
|             echo "GRUB_CMDLINE_LINUX_DEFAULT=\"console=$CONSOLE\"" > /etc/default/grub
 | |
|         fi
 | |
|         update-grub
 | |
| 
 | |
| cat >/etc/init/$CONSOLE\.conf << 'EOF'
 | |
| start on stopped rc RUNLEVEL=[2345] and (
 | |
|          not-container or
 | |
|          container CONTAINER=lxc or
 | |
|          container CONTAINER=lxc-libvirt)
 | |
| 
 | |
| stop on runlevel [!2345]
 | |
| respawn
 | |
| #exec /sbin/getty -L 115200 hvc0 vt102
 | |
| script
 | |
|     for i in `cat /proc/cmdline`; do
 | |
|         KEY=`echo $i|cut -d= -f 1`
 | |
|         if [ "$KEY" == "console" -a "$i" != "console=tty0" ]; then
 | |
|             VALUE=`echo $i | awk -F= '{print $2}'`
 | |
|             COTTY=`echo $VALUE|awk -F, '{print $1}'`
 | |
|             COSPEED=`echo $VALUE|awk -F, '{print $2}'|awk -Fn '{print $1}'`
 | |
| 
 | |
|             break
 | |
|         fi
 | |
|     done
 | |
| 
 | |
|     exec /sbin/getty -L $COSPEED $COTTY vt102
 | |
| end script
 | |
| EOF
 | |
|     fi
 | |
|     sed -i '/127.0.1.1/d' /etc/hosts
 | |
| else
 | |
|     [ -f /boot/grub/grub.conf  ] && sed -i 's/^serial/#serial/' /boot/grub/grub.conf
 | |
|     [ -f /boot/grub/grub.conf  ] && sed -i 's/^terminal/#terminal/' /boot/grub/grub.conf
 | |
|     if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|        msgutil_r "$MASTER_IP" "debug" "/boot/grub/grub.conf updated" "/var/log/xcat/xcat.log" "$log_label"
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| 
 | |
| msgutil_r "$MASTER_IP" "info" "finished firstboot preparation, sending request to $MASTER:3002 for changing status..." "/var/log/xcat/xcat.log" "$log_label"
 | |
| #the following command should always be run to prevent infinite installation loops
 | |
| updateflag.awk $MASTER 3002
 | |
| 
 | |
| cd /
 | |
| 
 | |
| # fix the issue#929@github, the "service network restart" in <sles post scripts>
 | |
| # makes the 'network' service in start status, then it causes the
 | |
| # services YaST2-Second-Stage.service and xcatpostinit1 services to be run in parallel.
 | |
| # But the YaST2-Second-Stage.service calls the Yast2 which conflics with the zypper
 | |
| # which is called in xcatpostinit1->otherpkgs.
 | |
| # The correct services start order is 'YaST2-Second-Stage.service'->'network'->'xcatpostinit1' in serial.
 | |
| # To skip the conflict, the network service should be stoped in the yast first stage. Then base on the service
 | |
| # dependency, the service start order will be 'YaST2-Second-Stage.service'->'network'->'xcatpostinit1' in serial.
 | |
| # Then the Yast2 will be stopped before running the zypper in otherpkgs.
 | |
| if [[ $OSVER =~ sle && $OSVER != sles11* ]]; then
 | |
|     service network stop
 | |
| fi
 | |
| 
 | |
| if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
 | |
|     set +x
 | |
| fi
 |