mirror of
https://github.com/xcat2/xcat-core.git
synced 2026-10-22 23:58:13 +00:00
a987cfbd10
Embed one helper in the legacy and systemd postboot runners. Keep each caller policy and disable the service before running postscripts.
516 lines
19 KiB
Bash
Executable File
516 lines
19 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# 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
|
|
|
|
xcat_download_postscripts "${MASTER_IP}:${HTTPPORT}" "$INSTALLDIR" "/xcatpost" "/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
|
|
|
|
if [ -z "$MYCONT" ]; then
|
|
msgutil_r "$MASTER_IP" "error" "failed to get mypostscript from $MASTER_IP, halt ..." "/var/log/xcat/xcat.log" "$log_label"
|
|
/tmp/updateflag $MASTER $XCATIPORT "installstatus failed"
|
|
sleep 36500d
|
|
fi
|
|
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'
|
|
#!/bin/bash
|
|
#INCLUDE:#ENV:XCATROOT#/share/xcat/install/scripts/postinit.sh#
|
|
[ -f /xcatpost/xcatlib.sh ] && . /xcatpost/xcatlib.sh
|
|
# Disable the service before a postscript can reboot the node.
|
|
xcat_disable_postinit legacy
|
|
|
|
#INCLUDE:#TABLE:site:key=installdir:value#/postscripts/xcatinstallpost#
|
|
|
|
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
|