2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-08-14 15:20:29 +00:00

fix issue linux orderly shutdown not noticed by xcat. #1939;replace xcatpostinit1 sysvinit service with xcatpostinit1.service systemd service unit as the hook to run PS&PBS and report status for redhat;report node status on system <reboot/shutdown> command

This commit is contained in:
immarvin
2016-10-31 09:21:15 -04:00
parent 596af4c440
commit 6f735b0e8d
7 changed files with 200 additions and 42 deletions

View File

@@ -34,6 +34,8 @@ fi
EOF
) >/tmp/updateflag
chmod 0755 /tmp/updateflag
cd /tmp
RAND=$(perl -e 'print int(rand(50)). "\n"')
if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
@@ -266,50 +268,69 @@ else
fi
#create the post init
cat >/etc/init.d/xcatpostinit1 << 'EOF'
#INCLUDE:#TABLE:site:key=installdir:value#/postscripts/xcatpostinit1#
EOF
chmod 755 /etc/init.d/xcatpostinit1
if [ ! -x /etc/init.d/xcatpostinit1 ]; then
if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
msgutil_r "$MASTER_IP" "debug" "failed to generate /etc/init.d/xcatpostinit1" "/var/log/xcat/xcat.log"
fi
else
if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
msgutil_r "$MASTER_IP" "debug" "/etc/init.d/xcatpostinit1 generated" "/var/log/xcat/xcat.log"
fi
fi
export OSVER=#TABLE:nodetype:THISNODE:os#
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
#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 [[ $OSVER == ubuntu* ]]; then
update-rc.d xcatpostinit1 defaults
if [ $hassystemd -eq 1 ] ; then
cat >/etc/systemd/system/xcatpostinit1.service <<'EOF'
#INCLUDE:/install/postscripts/xcatpostinit1.service#
EOF
msgutil_r "$MASTER_IP" "debug" "/etc/systemd/system/xcatpostinit1.service generated" "/var/log/xcat/xcat.log"
ln -s /etc/systemd/system/xcatpostinit1.service /etc/systemd/system/multi-user.target.wants/xcatpostinit1.service
msgutil_r "$MASTER_IP" "debug" "xcatpostinit1.service enabled" "/var/log/xcat/xcat.log"
cat >/opt/xcat/xcatpostinit1 << 'EOF'
#INCLUDE:/install/postscripts/xcatpostinit1.install#
EOF
chmod 755 /opt/xcat/xcatpostinit1
else
if [[ $OSVER == sles* ]]; then
if [[ $OSVER == sles10* ]]; then
/sbin/insserv xcatpostinit1
else
/sbin/insserv -p /etc/init.d xcatpostinit1
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
if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
msgutil_r "$MASTER_IP" "debug" "failed to generate /etc/init.d/xcatpostinit1" "/var/log/xcat/xcat.log"
fi
else
if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
msgutil_r "$MASTER_IP" "debug" "/etc/init.d/xcatpostinit1 generated" "/var/log/xcat/xcat.log"
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"
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 == sles* ]]; 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"
fi
fi
fi
#create the xcatinstallpost
mkdir -p /opt/xcat
cat >/opt/xcat/xcatinstallpost << 'EOF'
@@ -327,12 +348,13 @@ if [[ $OSVER == ubuntu* ]]; then
msgutil_r "$MASTER_IP" "debug" "update-rc.d -f xcatpostinit1 remove" "/var/log/xcat/xcat.log"
fi
else
if [ "$RUNBOOTSCRIPTS" != "'yes'" ]; then
if [ "$RUNBOOTSCRIPTS" != "'yes'" ] && [ "$NODESTATUS" = "'n'" ]; then
chkconfig xcatpostinit1 off
if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
msgutil_r "$MASTER_IP" "debug" "service xcatpostinit1 disabled" "/var/log/xcat/xcat.log"
fi
fi
if [ "$XCATDEBUGMODE" = "1" ] || [ "$XCATDEBUGMODE" = "2" ]; then
msgutil_r "$MASTER_IP" "debug" "service xcatpostinit1 disabled" "/var/log/xcat/xcat.log"
fi
fi
EOF
@@ -373,6 +395,7 @@ chmod 755 /xcatpost/mypostscript
export ARCH=#TABLE:nodetype:THISNODE:arch#
export CONSOLEPORT=#TABLEBLANKOKAY:nodehm:THISNODE:serialport#
if [[ $OSVER != ubuntu* ]]; then
addsiteyum
fi

View File

@@ -1988,9 +1988,21 @@ sub generic_post { #This function is meant to leave the image in a state approxi
system("cd $rootimg_dir/etc/rc3.d; ln -sf ../init.d/gettyset S60gettyset");
}
copy("$installroot/postscripts/xcatpostinit", "$rootimg_dir/etc/init.d/xcatpostinit");
chmod(0755, "$rootimg_dir/etc/init.d/xcatpostinit");
system("cd $rootimg_dir/etc/rc3.d; ln -sf ../init.d/xcatpostinit S61xcatpostinit");
if(-e "$rootimg_dir/usr/lib/systemd/"){
#if systemd is the service management framework for the diskless image
#enable the xcatpostinit1.service
copy("/install/postscripts/xcatpostinit1.netboot","$rootimg_dir/opt/xcat/xcatpostinit1");
chmod(0755,"$rootimg_dir/opt/xcat/xcatpostinit1");
copy("/install/postscripts/xcatpostinit1.service","$rootimg_dir/etc/systemd/system/xcatpostinit1.service");
symlink("$rootimg_dir/etc/systemd/system/xcatpostinit1.service","$rootimg_dir/etc/systemd/system/multi-user.targ
et.wants/xcatpostinit1.service") ;
}else{
#for traditional sysvinit
copy("$installroot/postscripts/xcatpostinit1.netboot", "$rootimg_dir/etc/init.d/xcatpostinit");
chmod(0755, "$rootimg_dir/etc/init.d/xcatpostinit");
system("cd $rootimg_dir/etc/rc3.d; ln -sf ../init.d/xcatpostinit S61xcatpostinit");
}
}
}

View File

@@ -1,5 +1,6 @@
#!/bin/sh
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
# this script is deprecated,please use xcatpostinit1.netboot instead
# chkconfig: 345 84 59
# description: service node postboot script hack
# processname: xcatpostinit

View File

@@ -1,5 +1,6 @@
#!/bin/sh
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
# This script is deprecated, please use xcatpostinit1.install instead
# chkconfig: 345 84 59
# description: service node postboot script hack
# processname: xcatpostinit

View File

@@ -0,0 +1,38 @@
#!/bin/sh
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
# chkconfig: 345 84 59
# description: the hook for systemd service unit to run PB and report node status on diskful node
# processname: xcatpostinit1
# Source function library.
if [ -x /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
fi
[ -f /opt/xcat/xcatinfo ] && XCATSERVER=`grep 'XCATSERVER' /opt/xcat/xcatinfo |cut -d= -f2 2>/dev/null`
[ -f /xcatpost/mypostscript ] && NODESTATUS=`grep 'NODESTATUS=' /xcatpost/mypostscript |awk -F = '{print $2}' 2>/dev/null`
[ -f /xcatpost/mypostscript ] && RUNBOOTSCRIPT=`grep 'RUNBOOTSCRIPT=' /xcatpost/mypostscript |awk -F = '{print $2}' 2>/dev/null`
case $1 in
stop)
[ "$NODESTATUS" != "n" ] && /xcatpost/updateflag.awk $XCATSERVER 3002 "installstatus powering-off"
;;
start)
# check for the REBOOT specified in xcatinfo to run post boot scripts on reboot
if [ -f /opt/xcat/xcatinfo ]; then
REBOOT=`grep 'REBOOT' /opt/xcat/xcatinfo |cut -d= -f2`
fi
# if the xcatdsklspost file exists and this is a reboot - run xcatdsklspost with a mode of 6
if [ "$REBOOT" = "TRUE" -a -r /opt/xcat/xcatdsklspost -a "$RUNBOOTSCRIPT" = "1"]; then
/opt/xcat/xcatdsklspost 6
elif [ "$REBOOT" = "TRUE" -a "NODESTATUS" != "n" ]; then
/xcatpost/updateflag.awk $XCATSERVER 3002 "installstatus booted"
else
# run /opt/xcat/xcatinstallpost
if [ -r /opt/xcat/xcatinstallpost ]; then
/opt/xcat/xcatinstallpost
fi
fi
;;
esac

View File

@@ -0,0 +1,71 @@
#!/bin/sh
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
# chkconfig: 345 84 59
# description: the hook in systemd service unit to run PB or report node status on diskless & statelite node
# processname: xcatpostinit1
### BEGIN INIT INFO
# Provides: xcatpostinit
# Default-Start: 3 4 5
# Default-stop: 0 1 2 6
# Required-Start: gettyset
# Required-Stop:
# Short-Description: xCATpost
# Description: xCAT post boot script
### END INIT INFO
# Source function library.
if [ -x /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
fi
XCATSERVER=$(grep --only-matching "\<XCAT=[^ ]*\>" /proc/cmdline |cut -d= -f2 |cut -d: -f1 2>/dev/null)
logger -t xcat -p local4.info "$0: action is $1"
case $1 in
restart)
$0 stop
$0 start
;;
status)
echo -n "xcatpostinit runs only at boot, runs additional post scripts"
logger -t xcat -p local4.info "xcatpostinit runs only at boot, runs additional post scripts"
;;
stop)
echo -n "nothing to stop "
logger -t xcat -p local4.info "nothing to stop"
grep nonodestatus /proc/cmdline 2>/dev/null || [ -n "$XCATSERVER" ] && /xcatpost/updateflag.awk $XCATSERVER 3002 "installstatus powering-off"
;;
start)
# Node is stateless by default
STATELITE=0
# Node is statelite if /proc/cmdline have flag `STATEMNT='
STATELITE_FLAG="STATEMNT="
# Script to direct further actions
SCRIPT="/opt/xcat/xcatdsklspost"
# Usefull information passed as kernel arguments
if [ -f "/proc/cmdline" ]; then
if grep --quiet --no-messages "$STATELITE_FLAG" "/proc/cmdline"; then
STATELITE=1
fi
fi
# Test for script existance
if ! [ -x "$SCRIPT" ]; then
msg "can't locate executable $SCRIPT"
exit -1
fi
# Run $SCRIPT according to node type
if [ $STATELITE -ne 0 ]; then
logger -t xcat -p local4.info "Call $SCRIPT for statelite mode"
"$SCRIPT" 4
else
logger -t xcat -p local4.info "Call $SCRIPT for stateless mode"
"$SCRIPT"
fi
;;
esac

View File

@@ -0,0 +1,12 @@
[Unit]
Description=xcat service on compute node, the framework to run postbootscript and update node status
After=network.target rsyslog.service
[Service]
Type=oneshot
ExecStart=/opt/xcat/xcatpostinit1 start
ExecStop=/opt/xcat/xcatpostinit1 stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target