binblog

Как настроить ntp сервер для синхронизации с эталонным источником

Для этого нам потребуется восем немного вещей:

Компьютер. Эталонный источник (например специальный GPS приемник Acutime 2000, эстеты и сотрудники ЦУП могут поставить себе цезиевые часы) Горячее сердце, пылающее желанием знать точное время и холодная голова, которая может это все обеспечить. Итак приступим, будем считать, что у нас уже установлен Debian (желательно stable, но testing тоже подойдет), настроена сеть, провода, относящиеся к компьютеру подключены и все в общем-то работает. Кроме службы точного времени.

Шаг первый, самый простой, но интересный. Распаковываем GPS приемник, внимательно читаем инструкцию и терпеливо подсоединяем проводки в нужной последовательности до состояния полной работоспособности. После чего, подключаем приемник к свободному com-порту (если ваша версия приемника имеет выход только на USB, то не беда, тыкаем ее в ближайший USB порт на компьютере, определится приемник как /dev/ttyUSBx, а не как /dev/ttySx)

Шаг второй, не менее простой, и не менее интересный. Приступим к настройке компьютера. Устанавливаем сервер точного времени командой aptitude install ntp-refclock вглядываемся внимательно в выводимые строчки, и если не было ошибок продолжаем дальше. Теперь, надо указать серверу точного времени где ему брать это самое точное время (обычно, ввиду отсутствия эталонных источников указывают какой-нибудь сервер в сети, например pool.ntp.org, но это для нас уже пройденный этап). Самое время вспомнить, к какому же таки порту мы подключили GPS приемник, пусть это будет первый com-порт, он же /dev/ttyS0. Для работы с сервером, устройство должно иметь особое имя, по которому сервер будет определять алгоритм работы с ним. После внимательного изучения документации можно выяснить что наше устройство носит романтичное имя palisade и имеет некий номер 29, запомним это число, оно нам пригодится чуть позже. Так как приемник подключен у нас к com-порту, то создаем символическую ссылку командой: ln -s /dev/ttyS0 /dev/palisade0. Нолик в palisade0 стоит не просто так, а имеет важное стратегические значение, о котором тоже немного позже. Все, можно переходить собственно к настройкам сервера. Отредактируем файл /etc/ntp.conf (конечно же сдалав прежде его резервную копию). Выкинем оттуда все лишнее и добавим следующие строки:

server 127.127.29.0
fudge  127.127.29.0 stratum 0   // ;)
fudge  127.127.29.0 refid GPS   // имя нашего устройства, можно указать произвольное
fudge  127.127.29.0 flag2 1
fudge  127.127.29.0 time1 0.020 //значение зависит от длины провода, идущего от антенны.

Сохраним файл. Как видите тут-то нам и пригодилось то самое число 29, это фактически имя драйвера, который будет использовать ntp-сервер для работы с устройством. А 0 в 127.127.29.0 соответствует нулю в palisade0 о котором упоминалось ранее. К примеру у вас может быть несколько GPS приемников (нет, исключительно для надежности) тогда им можно дать имена /dev/palisade0, /dev/palisade1, /dev/palisade2 и т.д. до /dev/palisade3 и в ntp.conf указать их как server 127.127.29.0, server 127.127.29.1, server 127.127.29.2, server 127.127.29.3.

Шаг третий, самый волнующий. Теперь можно переходить к полевым испытаниям. Причем к полевым в буквальном смысле, для надежной работы GPS необходимо чистое небо над головой, спутники в общем-то никто не оснастил ядерными реакторами для обеспечения работы передатчиков, которые передавали бы сигнал через железобетон. Поэтому высовываем антенну приемника в окно, включаем питание и запускаем ntp-сервер на компьютере командой /etc/init.d/ntp-server start. Смотрим в /var/log/syslog, если все было проведено верно, то там должны появится строки, похожие на приведенные ниже:

ntpd[18249]: ntpd 4.2.0a@1:4.2.0a+stable-2-r Fri Aug 26
ntpd[18249]: signal_no_reset: signal 13 had flags 4000000
ntpd[18249]: precision = 2.000 usec
ntpd[18249]: Listening on interface wildcard, 0.0.0.0#123
ntpd[18249]: Listening on interface lo, 127.0.0.1#123
ntpd[18249]: Listening on interface eth0, 10.20.30.1#123
ntpd[18249]: kernel time sync status 0040
ntpd[18249]: Palisade(0) fd: 8 dev: /dev/palisade0

Проверим работоспособность соединения запустив ntpq:

ntpq> pe
remote           refid      st t when poll reach   delay   offset jitter
==============================================================================

*GPS_PALISADE(1) .GPS.            0 l   27   64  377    0.000    0.581   6.499

Как можно высислить из вышеприведенного, наше устройство подключилось, определилось и даже подает признаки жизни. Собственно дальнейшее от нас больше не зависит, можно на полчасика заняться другими полезными делами (кофе там попить), за это время устаканится вся инфраструктура, GPS-приемник нащупает все доступные спутники и допросит их с пристрастием на предмет эфемерид, ntp-сервер осознает себя как сервер точного времени, договорится с GPS-приемником об обмене информацией и заступит на боевое дежурство. После этого можно опрашивать наш свеженастроенный сервер, пусть он имеет IP 10.20.30.1. На какой-нибудь машине в нашей сети выполним команду ntpdate.

ntpdate -q 10.20.30.1
server 10.20.30.1, stratum 1, offset -109.732890, delay 0.02589

Что отсюда видно, во-первых, сервер у нас страшно замечателен тем, что имеет stratum 1, т.е. обладает собственным источником эталонного времени (ну да, мы это и так знали, но лишний раз напомнить себе об этом все равно приятно), во-вторых, часы на нашей машине отстают аж почти на 110 секунд. Для исправления этого этого вопиющего факта выполним команду ntpdate без -q:

ntpdate 10.20.30.1
step time server 10.20.30.1 offset -109.732788 sec

И проверим корректность работы:

ntpdate -q 10.20.30.1
server 10.20.30.1, stratum 1, offset 0.000006, delay 0.02576

Все, можно поздравить себя с успешной настройкой сервера точного времени и наградить внеочередной печенюшкой.

comments powered by Disqus