xntpd (UNIXовый сервер NTP - network time protocol)

Автор: Сергей Богомолов
оригинал статьи лежит на сервере: http://www.bog.pp.ru/work/

источник

Брал версию 5.90, полная реализация RFC-1305 (NTP, версия 3) с дополнительными возможностями предполагаемыми к включению в версию 4. Последняя реализация: xntp3-5.93e (на 6 октября 1999). Версия для использования в США с шифровкой и экспортный вариант. Готовится версия 4.

Где взять: ftp://ftp.udel.edu/pub/ntp

Установка

Руководство по установке: http://www.eecis.udel.edu/~ntp/database/html_xntp3-5.90/build.html а также файл INSTALL

Solaris 2.5. Установка из исходников (5.90).

Сначала надо выполнить
./configure --disable-all-clock --enable-LOCAL-CLOCK -делает config.h и Makefile  в каждой поддиректории, драйверы аппаратных часов отключить
make (не забудь добавить /usr/ccs/bin к PATH)
make check
make install (из-под суперпользователя)
make clean

Red Hat Linux 6.0 / 6.2 (xntp3-5.93-12.rpm / xntp3-5.93-14.rpm).

Приходит в готовом виде (/etc/ntp.conf, /etc/ntp/, /etc/rc.d/init.d/xntpd, /usr/doc/xntp3-5.93/, /usr/sbin/{ntpdate, ntpq, ntptime, ntptrace, tickadj, xntpd, xntpdc}). В /etc/ntp/step-tickers положить список опорных NTP-серверов. Для автоматического запуска/остановки /etc/rc.d/rc{2,3}.d сделать линки с {K,S}31xntpd на ../init.d/xntpd. Настроить /etc/ntp.conf. Подстроить часы вручную (лучше дождаться завершения ntpdate -B).

Перед запуском местное время не должно ошибаться больше, чем на 1000 секунд (CLOCK_WAYTOOBIG), round-trip delay д.б. меньше 1 секунды, ошибка частоты д.б. меньше 390 ppm.

Конфигурация (по умолчанию /etc/ntp.conf):

Местные настройки

Не забудь разрешить вход на порты ntp (UDP/123) для всех хостов, на которых работает ntp-сервера, питаемые снаружи.

Для тех компьютеров, на которых точное (30мс) время не так важно, можно не занимать ОЗУ громадным xntpd (2 MB), а запускать каждый час:
ntpdate -B ntp ntp2 ntp3

Надо сделать tickadj -s (оторвать системные часы от батареечных) перед запуском xntpd.

Запуск (Solaris 2.5):

/etc/rc2.d/S99xntpd

#!/bin/sh
if [ $1 = "start" ]; then
        if [ -x /usr/local/bin/xntpd ]; then
                echo "Starting NTP daemon, takes about 1 minute... "
                # The following line is unnecessary if you turn off 
                # dosynctodr in /etc/system.
                /usr/local/bin/tickadj -s  
                /usr/local/bin/ntpdate -v server1 server2
                sleep 60
                /usr/local/bin/xntpd
        fi
else
        if [ $1 = "stop" ]; then
                pid=`/usr/bin/ps -e | /usr/bin/grep xntpd | /usr/bin/sed -e 's/^*//' -e 's/ .*//'`   
                if [ "${pid}" != "" ]; then
                        echo "Stopping Network Time Protocol daemon "
                        /usr/bin/kill ${pid}
                fi     
        fi
fi

Проблема. Время от времени опорные NTP-сервера перестают нас обслуживать. xntpd переводит их при этом в стратум-0 и синхронизуется черт знает с чем. Необходим автоматический отлов этой ситуации.