На написание этой заметки меня натолкнул хабраюзер
BarsMonster со своим топиком
«О точном времени».
В своей статье он призывал хабраюзеров «Давать больше Stratum-1 серверов», но не сказал как (:
Выбор источника точного времени
Я проделывал эту работу примерно три года назад, когда в сети информации по этой теме было гораздо меньше. Основным источником моих познаний была документация из пакета ntp-doc (/usr/share/doc/ntp-doc/html/refclock.html), также её можно найти в
сети.
Само название Stratum-1 означает, что наш NTP-сервер непосредственно подключен к источнику точного времени.
Давайте посмотрим какие у нас есть варианты этих источников:
- Радиостанции точного времени
Ничего сложного, берём подходящую частоту из справочника, паяем приёмник и преобразователь в удобный для компьютера интерфейс. ^_^
Я забросил этот вариант, т.к. напротив моей старой работы стояло здание то ли ФАПСИ, то ли ещё какой-то службы, в общем эфир был довольно зашумлён (-:
- Телефон GSM или CDMA
Как-то я им не доверяю, хотя не самый плохой вариант.
- Приёмник GPS или ГЛОНАСС
Этот вариант мне показался самым реальным.
Подключаем
Приёмник ГЛОНАСС тогда было сложно достать, поэтому я пошел в магазин и купил GPS-приёмник с RS232-м интерфейсом и внешней антенной. Антенну прилепил на металлический подоконник за окном, а приёмник соответственно подключил к COM-порту одного из серверов.
Первым делом нам нужно убедиться что приёмник «видит» спутники. Мой, например, в этом случае начинает весело подмигивать светодиодом.
Более универсальный способ — посмотреть что он отдаёт в COM-порт:
cat /dev/ttyS0
Тут мы должны увидеть дамп протокола NMEA.
Настраиваем
Для работы ntpd нам нужно сделать символические ссылки:
/dev/gps0 -> /dev/ttyS0
Если вы используете udev, то полезно будет создать правило /etc/udev/rules.d/10-gps.rules следующего содержания:
KERNEL==«ttyS0», NAME="%k", SYMLINK+=«gps0», MODE=«0660», GROUP=«uucp»
Модифицируем ntp.conf:
# Local Clock — если теряем спутники, то снижаем stratum до 10
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# NMEA GPS driver
server 127.127.20.0 prefer
driftfile /var/lib/ntp/ntp.drift
restrict default nomodify notrust # Отдаём время всем
restrict 127.0.0.1 # Разрешаем себе всё
disable auth
logfile /var/log/ntp/messages
В строке server 127.127.20.0 число 20 — это
ответ на «главный вопрос жизни, вселенной и вообще» номер соответствующего
драйвера источника точного времени.
Перезапускаем NTPD и смотрим статус. Должно быть что-то подобное:
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
LOCAL(0) LOCAL(0) 10 l 52 64 377 0.000 0.000 0.002
*GPS_NMEA(0) .GPS. 0 l 15 64 377 0.000 -0.018 0.004
Всё, сервер можно
пиарить регистрировать в
списке stratum-1 серверов.
Надеюсь эта статья поможет увеличить количество хороших NTP-серверов в рунете (-;
[Важный UPD]
Мне тут человек постучался в IM, у него нет аккаунта на Хабре, просил меня прояснить ситуацию с переходниками COM-USB. Цитирую:
brn:
Так вот, так как в приёмниках часто один из служебных пинов COM разъёма заведён на 1PPS сигнал, который обозначает начало очередной секунды, в случае USB этот сигнал будет потерян
А, так сигнал NMEA без PPS даёт точность порядка 50-100 миллисекунд, а для сервера точного времени это неприемлимо
Это как раз проясняет почему у меня был такой разбег с коллегой из Новосибирска — мой приёмник PPS не поддерживал.
Чтобы использовать PPS, нужно в конфиг ntp заменить NMEA на PPS:
# PPS driver
server 127.127.22.0 prefer
enable pps