Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > e8b50dfb90c74cd1b3ca8828fba4ac66 > files > 24

ntp-4.2.4-15.4mdv2008.1.src.rpm

#!/bin/bash
#
# ntpd		This shell script takes care of starting and stopping
#		ntpd (NTPv4 daemon).
#
# chkconfig: - 56 10
# description: ntpd is the NTPv4 daemon.
#
### BEGIN INIT INFO
# Provides: ntpd
# Required-Start: $network
# Should-Start: $named
# Required-Stop: $network
# Should-Stop: $named
# Default-Start: 2 3 4 5
# Short-Description: Synchronizes system time using the Network Time Protocol (NTP)
# Description: The Network Time Protocol (NTP) is used to synchronize a computer's time
#              with another reference time source.
### END INIT INFO

# Source function library.
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 0

if [ -f /etc/sysconfig/ntpd ];then
        . /etc/sysconfig/ntpd
fi

ntpconf=/etc/ntp.conf
ntpstep=/etc/ntp/step-tickers


RETVAL=0
prog="ntpd"

sync_hwclock() {
	ARC=0
	SRM=0
	UTC=0

	if [ -f /etc/sysconfig/clock ]; then
	   . /etc/sysconfig/clock

	   # convert old style clock config to new values
	   if [ "${CLOCKMODE}" = "GMT" ]; then
	      UTC=true
	   elif [ "${CLOCKMODE}" = "ARC" ]; then
	      ARC=true
	   fi
	fi

	CLOCKFLAGS="$CLOCKFLAGS --systohc"

	case "$UTC" in
	    yes|true)	CLOCKFLAGS="$CLOCKFLAGS --utc";;
	    no|false)	CLOCKFLAGS="$CLOCKFLAGS --localtime";;
	esac
	case "$ARC" in
	    yes|true)	CLOCKFLAGS="$CLOCKFLAGS --arc";;
	esac
	case "$SRM" in
	    yes|true)	CLOCKFLAGS="$CLOCKFLAGS --srm";;
	esac

	action $"Syncing hardware clock to system time" /sbin/hwclock $CLOCKFLAGS
}

readconf() {
	dostep=''
	dropstr=''
	OPTIND=1
	while getopts ":46aAbc:dD:f:gi:k:l:LnN:p:P:qr:s:t:u:v:V:x" args $OPTIONS;
	do 
	  case "$args" in
	    x) dostep=yes;;
	    c) ntpconf="$OPTARG";;
	    u) dropstr="-U $(echo $OPTARG | sed 's/:.*//')";;
	  esac
	done

	[ -x /usr/sbin/ntpd -a -f $ntpconf ] || exit 0

	tickers=''
	if [ -s "$ntpstep" ]; then
	    tickers=$(sed 's/#.*//' $ntpstep)
	    echo "$tickers" | grep -qi '[a-z0-9]' && dostep=yes || tickers=''
	fi
	if [ -n "$dostep" -a -z "$tickers" ]; then
	    # -x option is used, but step-tickers doesn't exist or contain
	    # anything useful, use servers from ntp.conf instead
	    tickers=$(awk '$1=="peer"||$1=="server"{print $2}' $ntpconf | \
	        fgrep -v 127.127.1.0)
	fi
}

start() {
	readconf;

	if [ -n "$dostep" ]; then
	    gprintf $"Syncing time for ntpd: "
	    # try hard, some networks/slow machines/... take a while to have DNS
	    local triesleft=7
	    while [ $triesleft -gt 0 ]; do
	        /usr/sbin/ntpdate -s -b $NTPDATE_OPT $tickers
	        RETVAL=$?
	        [ $RETVAL -eq 0 ] && break
	        triesleft=$(($triesleft-1))
	        sleep 1
	    done
	    unset triesleft
	    [ $RETVAL -eq 0 ] && success || failure
	    echo
	    if [ $RETVAL -eq 0 ]; then
	        [ "$SYNC_HWCLOCK" = "yes" ] && sync_hwclock
	    else
	        OPTIONS="$OPTIONS -g"
	    fi
	else
	    # -g can replace the grep for time servers
	    # as it permits ntpd to violate its 1000s limit once.
	    OPTIONS="$OPTIONS -g"
	fi
        # Start daemons.
        gprintf $"Starting $prog: "
        daemon ntpd $OPTIONS
	RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ntpd
	return $RETVAL
}

stop() {
        gprintf $"Shutting down $prog: "
	killproc ntpd
	RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ntpd
	return $RETVAL
}

# See how we were called.
case "$1" in
  start)
	start
        ;;
  stop)
	stop
        ;;
  status)
	status ntpd
	RETVAL=$?
	;;
  restart|reload)
	stop
	start
	RETVAL=$?
	;;
  condrestart)
	if [ -f /var/lock/subsys/ntpd ]; then
	    stop
	    start
	    RETVAL=$?
	fi
	;;
  *)
        gprintf $"Usage: %s {start|stop|restart|condrestart|status}\n"
        exit 1
esac

exit $RETVAL