235 lines
7.0 KiB
Bash
Executable File
235 lines
7.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
|
|
#
|
|
#---------------------------------------------------------------------------
|
|
# setup NTP configuration on the compute nodes
|
|
#
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
if [ "$(uname -s|tr 'A-Z' 'a-z')" = "linux" ];then
|
|
str_dir_name=`dirname $0`
|
|
. $str_dir_name/xcatlib.sh
|
|
fi
|
|
|
|
# if on the Management Node, exit
|
|
if [ -e /etc/xCATMN ]; then
|
|
logger -t xcat -p local4.info "setupntp:Running on the Management Node , exiting "
|
|
exit 0
|
|
fi
|
|
master=$MASTER
|
|
setup=0
|
|
sitemaster=$SITEMASTER
|
|
conf_file="/etc/ntp.conf"
|
|
conf_file_org="/etc/ntp.conf.org"
|
|
conf_file_backup="/etc/ntp.conf.postbackup"
|
|
|
|
# pmatch determines if 1st argument string is matched by 2nd argument pattern
|
|
|
|
pmatch ()
|
|
{
|
|
case $1 in
|
|
$2) return 0;; # zero return code means string matched by pattern
|
|
esac
|
|
|
|
return 1 # non-zero return code means string not matched by pattern
|
|
}
|
|
|
|
# is_lsb_ubuntu exit status indicates whether system appears to be Ubuntu.
|
|
# Using required /etc/lsb-release file, instead of optional lsb_release command.
|
|
|
|
is_lsb_ubuntu ()
|
|
{
|
|
awk '
|
|
(match($0, "^[ \t]*DISTRIB_ID=") == 1) { # A DISTRIB_ID line
|
|
id = substr($0, RLENGTH + 1) # Save its value
|
|
}
|
|
|
|
END {
|
|
# Examine last DISTRIB_ID value to see if Ubuntu indicated
|
|
|
|
if (match(id, "^(Ubuntu|\"Ubuntu\")[ \t]*$") == 1) {
|
|
exit 0 # Ubuntu
|
|
}
|
|
exit 1 # Not Ubuntu
|
|
}
|
|
|
|
' /etc/lsb-release >/dev/null 2>&1
|
|
|
|
# Routine exit status is exit status of the last command -- the awk script.
|
|
#
|
|
# Note: if /etc/lsb-release does not exist, the exit status indicates
|
|
# failure (not Ubuntu), which is the correct outcome.
|
|
}
|
|
|
|
logger -t xcat "Install: Setup NTP"
|
|
# if master is the sitemaster, then use the ntpservers defined in the site
|
|
# table, if they exist. If they don't exist, do not setup ntp
|
|
# else use the master which should be a service node
|
|
if [ "$master" = "$sitemaster" ]; then
|
|
if [ $NTPSERVERS ]; then
|
|
if [ "$NODESETSTATE" = "statelite" ]; then
|
|
cp -a $conf_file $conf_file_org
|
|
echo "" > $conf_file
|
|
else
|
|
if [ ! -f $conf_file_org ]; then
|
|
mv -f $conf_file $conf_file_org
|
|
else
|
|
mv -f $conf_file $conf_file_backup
|
|
fi
|
|
fi
|
|
if [ "$NTPSERVERS" = "<xcatmaster>" ] || [ "$NTPSERVERS" = "<xcatmaster>" ]; then
|
|
echo "server $master" >>$conf_file
|
|
else
|
|
for i in $(echo $NTPSERVERS | tr ',' ' ')
|
|
do
|
|
echo "server $i" >>$conf_file
|
|
master=$i
|
|
done
|
|
fi
|
|
else
|
|
echo "server $master" >$conf_file
|
|
|
|
fi
|
|
else
|
|
if [ "$NODESETSTATE" = "statelite" ]; then
|
|
cp -a $conf_file $conf_file_org
|
|
echo "" > $conf_file
|
|
else
|
|
if [ ! -f $conf_file_org ]; then
|
|
mv -f $conf_file $conf_file_org
|
|
else
|
|
mv -f $conf_file $conf_file_backup
|
|
fi
|
|
fi
|
|
|
|
if [ $NTPSERVERS ]; then
|
|
if [ "$NTPSERVERS" = "<xcatmaster>" ] || [ "$NTPSERVERS" = "<xcatmaster>" ]; then
|
|
echo "server $master" >>$conf_file
|
|
else
|
|
for i in $(echo $NTPSERVERS | tr ',' ' ')
|
|
do
|
|
echo "server $i" >>$conf_file
|
|
master=$i
|
|
done
|
|
fi
|
|
else
|
|
echo "server $master" >$conf_file
|
|
fi
|
|
|
|
fi
|
|
|
|
OS_TYPE=`uname`
|
|
if [ $OS_TYPE = Linux ]; then
|
|
mkdir -p /var/lib/ntp
|
|
chown ntp /var/lib/ntp
|
|
echo "driftfile /var/lib/ntp/drift
|
|
disable auth
|
|
restrict 127.0.0.1" >>$conf_file
|
|
# default service for redhat/fedora
|
|
#SERVICE=ntpd
|
|
#if ( pmatch $OSVER "sles*" ) || ( pmatch $OSVER "suse*" ) || [ -f /etc/SuSE-release ] || ( pmatch $OSVER "ubuntu*" ) || ( is_lsb_ubuntu ); then
|
|
# SERVICE=ntp
|
|
#fi
|
|
|
|
#ntpdate/sntp conflict with ntpd, stop the service first
|
|
# service $SERVICE status
|
|
checkservicestatus ntpserver
|
|
if [ $? -eq 0 ];then
|
|
# service $SERVICE stop
|
|
stopservice ntpserver
|
|
fi
|
|
#ntpdate program is deprecated on SuSE
|
|
if ( pmatch $OSVER "sles*" ) || ( pmatch $OSVER "suse*" ) || [ -f /etc/SuSE-release ]; then
|
|
logger -t xcat "sntp -P no -r $master"
|
|
sntp -P no -r $master
|
|
if [ "$?" != "0" ];then
|
|
echo " sntp -P no -r $master failed"
|
|
logger -t xcat "sntp -P no -r $master failed"
|
|
fi
|
|
else
|
|
logger -t xcat "ntpdate -t5 $master "
|
|
ntpdate -t5 $master
|
|
if [ "$?" != "0" ];then
|
|
echo " ntpdate -t5 $master failed"
|
|
logger -t xcat "ntpdate -t5 $master failed"
|
|
fi
|
|
fi
|
|
|
|
#setup the hardware clock
|
|
hwclock --systohc --utc
|
|
|
|
#setup the RTC is UTC format, which will be used by os
|
|
if ( pmatch $OSVER "sles*" ) || ( pmatch $OSVER "suse*" ) || [ -f /etc/SuSE-release ];then
|
|
sed -i 's/.*HWCLOCK.*/HWCLOCK="-u"/' /etc/sysconfig/clock
|
|
elif [ -f "/etc/debian_version" ];then
|
|
sed -i 's/.*UTC.*/UTC=yes/' /etc/default/rcS
|
|
else
|
|
if [ -f "/etc/sysconfig/clock" ];then
|
|
grep -i "utc" /etc/sysconfig/clock
|
|
if [ $? -eq 0 ];then
|
|
sed -i 's/.*UTC.*/UTC=yes/' /etc/sysconfig/clock
|
|
else
|
|
echo "UTC=yes" >> /etc/sysconfig/clock
|
|
fi
|
|
elif type -P timedatectl >/dev/null 2>&1 ;then
|
|
timedatectl set-local-rtc 0
|
|
fi
|
|
fi
|
|
|
|
#update the hardware clock automaticly
|
|
if [ -f "/etc/sysconfig/ntpd" ];then
|
|
grep -i "SYNC_HWCLOCK" /etc/sysconfig/ntpd
|
|
if [ $? -eq 0 ];then
|
|
sed -i 's/.*SYNC_HWCLOCK.*/SYNC_HWCLOCK=yes/' /etc/sysconfig/ntpd
|
|
else
|
|
echo "SYNC_HWCLOCK=yes" >> /etc/sysconfig/ntpd
|
|
fi
|
|
else
|
|
cron_file="/etc/cron.daily/xcatsethwclock"
|
|
if [ ! -f "$cron_file" ];then
|
|
echo "#!/bin/sh" > $cron_file
|
|
echo "/sbin/hwclock --systohc --utc" >> $cron_file
|
|
chmod a+x $cron_file
|
|
#service cron restart
|
|
restartservice cron
|
|
fi
|
|
fi
|
|
#service $SERVICE start
|
|
startservice ntpserver
|
|
|
|
#start ntp and crontab automaticlly
|
|
#if [ -f "/etc/debian_version" ];then
|
|
# update-rc.d cron defaults
|
|
# update-rc.d $SERVICE defaults
|
|
#else
|
|
# chkconfig --add $SERVICE >/dev/null 2>&1
|
|
# chkconfig --level 345 $SERVICE on >/dev/null 2>&1
|
|
# if ( pmatch $OSVER "sles*" ) || ( pmatch $OSVER "suse*" ) || [ -f /etc/SuSE-release ];then
|
|
# chkconfig --add cron >/dev/null 2>&1
|
|
# chkconfig --level 345 cron on >/dev/null 2>&1
|
|
# fi
|
|
#fi
|
|
enableservice cron
|
|
enableservice ntpserver
|
|
else
|
|
# stop and start AIX ntp
|
|
echo "driftfile /etc/ntp.drift
|
|
tracefile /etc/ntp.trace
|
|
disable auth
|
|
broadcastclient
|
|
restrict 127.0.0.1" >>$conf_file
|
|
|
|
stopsrc -s xntpd
|
|
logger -t xcat "ntpdate -t5 $master "
|
|
ntpdate -t5 $master
|
|
if [ "$?" != "0" ]
|
|
then
|
|
echo " ntpdate -t5 $master failed "
|
|
logger -t xcat "ntpdate -t5 $master failed"
|
|
fi
|
|
/usr/sbin/chrctcp -S -a xntpd
|
|
fi
|
|
exit $?
|