Настройка сервера времени NTPD

Установка

Ставим своим пакетным менеджером:

emerge ntp

Конфигурация

запуск

Параметры строки запуска демона у меня выглядят так:

-p /var/run/ntpd.pid -g -c /etc/ntp.conf

где

  • -p – PID-файл,
  • -g – разрешить переход на большой скачек времени
  • -c – конфиг файл

В Gentoo установить такие параметры можно в файле /etc/conf.d/ntpd, в параметре

NTPD_OPTS=”-g -c /etc/ntp.conf”

конфиг

Вот пример моего рабочего конфига /etc/ntp.conf с комментариями :

# локальный сервер
server          172.22.128.8
# интернет-сервера
server          1.ru.pool.ntp.org
server          0.europe.pool.ntp.org
server          2.europe.pool.ntp.org

# файлы
driftfile       /var/lib/ntp/ntp.drift
logfile         /var/log/ntp

# по умолчанию игнорируем все
restrict        default ignore
# локалхост без параметров – значит разрешено все. Параметры идут только на запреты.
restrict        127.0.0.1
# далее описываются сервера с которых получаем данные. Разрешаем им все кроме трапов и запросов к нам
restrict        172.22.128.8    noquery notrap
restrict        1.ru.pool.ntp.org       noquery notrap
# для локалки так же разрешаем все, кроме трапов и модификаций
restrict        172.22.0.0 mask 255.255.0.0 nomodify notrap nopeer

# а это волшебная штука, которая выставляет уровень доверия серверу (strata) самому себе равный 3
# в двух словах чем выше уровень-тем меньше число. 0 – это атомные часы,
# 1 – это синхронизированные с ними, 2 – с первым, и так далее.
server 127.127.1.1
fudge   127.127.1.1 stratum 3

Проверка

Запускаем

/etc/init.d/ntpd start

Ждем минут 10-15

  • ВАЖНО! Синхронизация происходит не сразу! Надо подождать!

и проверяем статус:

nptq -p

remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
172.22.128.8    93.185.187.89    3 u  142  256  377    3.906  -450.41  61.937
195.200.216.16  .INIT.          16 u    –   64    0    0.000    0.000   0.000
ams1.x31.com    .INIT.          16 u    –   64    0    0.000    0.000   0.000
mail2.mgts.by   .INIT.          16 u    –   64    0    0.000    0.000   0.000
*LOCAL(1)        .LOCL.           3 l   13   64  377    0.000    0.000   3.906

Видим, что он уже доверяет сам себе, это та самая наша волшебная штука.

Проверяем на клиенте, синхронизируясь с сервером

ntpdate 192.168.0.1

Если засинхронизировалось успешно – напишет, на сколько оно подвело время, что-то типа такого:

ntpdate[31021]: adjust time server 172.22.244.4 offset 0.390238 sec

ошибки

Зачастую возникают ошибки типа:

ntpdate[30979]: no server suitable for synchronization found

Тут надо проверять с параметром -d

ntpdate -d 192.168.0.1

Strata too high

Вот пример ошибки:

192.168.0.1: Server dropped: strata too high
server 192.168.0.1, port 123
stratum 16, precision -8, leap 11, trust 000

Означает, что уровень доверия очень мал (stratum=16, самый низкий уровень), то есть сервер сам себе не доверяет, чтобы отдавать время.

Необходимо либо подождать, либо изменить список серверов, с которыми он синхронизируется, а проще сделать ту волшебную штуку с доверием самому себе.

Синхронизация с GPS

Аппаратная часть

Подключаем GPS устройство. К примеру это /dev/ttyUSB0. В правилах UDEV желательно описать, чтобы устройство было /dev/gps0

cat > /etc/udev/rules.d/99-gpsd-usb.rules <<EOF
SUBSYSTEM!=”tty”, GOTO=”gpsd-usb_rules_end”
ENV{ID_VENDOR_ID}==”067b”, ENV{ID_MODEL_ID}==”2303″, SUBSYSTEM==”tty”, ACTION==”add”, KERNEL==”ttyUSB[0-9]*”,  SYMLINK=”gps0″, RUN+=”/etc/hotplug/usb/gpsd.hotplug add /%k”
ENV{ID_VENDOR_ID}==”067b”, ENV{ID_MODEL_ID}==”2303″, SUBSYSTEM==”tty”, ACTION==”remove”, KERNEL==”ttyUSB[0-9]*”,    RUN+=”/etc/hotplug/usb/gpsd.hotplug remove /%k”
ENV{ID_VENDOR_ID}==”0403″, ENV{ID_MODEL_ID}==”6001″, SUBSYSTEM==”tty”, ACTION==”add”, KERNEL==”ttyUSB[0-9]*”,  SYMLINK=”gps0″, RUN+=”/etc/hotplug/usb/gpsd.hotplug add /%k”
ENV{ID_VENDOR_ID}==”0403″, ENV{ID_MODEL_ID}==”6001″, SUBSYSTEM==”tty”, ACTION==”remove”, KERNEL==”ttyUSB[0-9]*”, RUN+=”/etc/hotplug/usb/gpsd.hotplug remove /%k”
ENV{ID_VENDOR_ID}==”1163″, ENV{ID_MODEL_ID}==”0100″, SUBSYSTEM==”tty”, ACTION==”add”, KERNEL==”ttyUSB[0-9]*”,  SYMLINK=”gps0″, RUN+=”/etc/hotplug/usb/gpsd.hotplug add /%k”
ENV{ID_VENDOR_ID}==”1163″, ENV{ID_MODEL_ID}==”0100″, SUBSYSTEM==”tty”, ACTION==”remove”, KERNEL==”ttyUSB[0-9]*”, RUN+=”/etc/hotplug/usb/gpsd.hotplug remove /%k”
ENV{ID_VENDOR_ID}==”067b”, ENV{ID_MODEL_ID}==”aaa0″, SUBSYSTEM==”tty”, ACTION==”add”, KERNEL==”ttyUSB[0-9]*”, SYMLINK=”gps0″, RUN+=”/etc/hotplug/usb/gpsd.hotplug add /%k”
ENV{ID_VENDOR_ID}==”067b”, ENV{ID_MODEL_ID}==”aaa0″, SUBSYSTEM==”tty”, ACTION==”remove”, KERNEL==”ttyUSB[0-9]*”, RUN+=”/etc/hotplug/usb/gpsd.hotplug remove /%k”
ENV{ID_VENDOR_ID}==”091e”, ENV{ID_MODEL_ID}==”0003″, SUBSYSTEM==”tty”, ACTION==”add”, KERNEL==”ttyUSB[0-9]*”, SYMLINK=”gps0″, RUN+=”/etc/hotplug/usb/gpsd.hotplug add /%k”
ENV{ID_VENDOR_ID}==”091e”, ENV{ID_MODEL_ID}==”0003″, SUBSYSTEM==”tty”, ACTION==”remove”,  KERNEL==”ttyUSB[0-9]*”, RUN+=”/etc/hotplug/usb/gpsd.hotplug remove /%k”
LABEL=”gpsd-usb_rules_end”
EOF

Конфиг

в /etc/ntpd.conf дописываем строки:

server 127.127.20.0 minpoll 4 maxpoll 4 prefer
fudge 127.127.20.0 time1 0.420
enable auth monitor

Перезапускаем

/etc/ntpd restart

Проверяем:

ntpq -p

Должно быть что-то типа:

remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*GPS_NMEA(0)     .GPS.            0 l    5   16  357    0.000   -8.362  12.404

Если колонка reach = 0, в течении большого времени – см. ошибки.

Ошибки

  • К строке запуска ntpd добавьте параметр -g, позволяющий сделать большую коррекцию времени. Возможно ваше системное время сильно отличается от того, что отдает спутник.

cat /etc/conf.d/ntpd
NTPD_OPTS=”-g”

При желании можно добавить и параметр -d, показывающий отладку (если ntpd собран с флагом debug).

  • В /etc/ntpd.conf дописываем строку для записи логов:

logconfig +all
logfile /var/log/ntp.log

перезапускаем

  • Если валят ошибки:

clock GPS_NMEA(0) event ‘clk_noreply’ (0x01)
peer GPS_NMEA(0) event ‘event_peer_clock’ (0x85) status ‘unreach, conf, 2 events, event_peer_clock’ (0x8025)

Проверьте, не запущен ли gpsd или кто-то, кто может использовтаь /dev/gps0. Проверьте, чтобы gps использовал только ntpd:

lsof /dev/gps0

COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME
ntpd    20768 root    5u   CHR  188,0      4821 /dev/ttyUSB0

  • Если ошибки типа:

clock GPS_NMEA(0) event ‘clk_fault’ (0x03)

Проверьте уровень сигнала, возможно прием неуверенный. Попробуйте переместить устройство в другое место (к примеру за окно).

  • Так же можно проверить скорость и настройки порта

stty -F /dev/gps0

Как правило должно быть 4800 8N1

Запустите

minicom -s

Подключитесь к этому порту, и посмотрите идут ли данные.

GPSD

Проверить работоспособность можно используя GPSD

emerge gpsd
gpsd -n /dev/gps0
telnet localhost 2947

> i
GPSD,I=SiRF binary
> d
GPSD,D=2009-03-10T07:40:09.00Z

Так же управлять устройством можно через gpsctl

gpsctl
gpsctl -n /dev/gps0 # переключить в NMEA
gpsctl -b /dev/gps0 # переключить в SiRF binary

Взято отсюда

Запись опубликована в рубрике FreeBSD. Добавьте в закладки постоянную ссылку.