Синхронизация времени в linux через windows с GPS-приемником

24 мая 2010

Как известно в любой компании часто остро ставится вопрос о синхронизации времени в сети офиса. Все бы хорошо работало через интернет. Но если вашим компьютерам нельзя давать выход в интернет. Тогда как? Можно воспользоваться временнЫм GPS-приемником. Мы воспользовались тем, что имели под рукой: GPS-приемник ET-301, для которого быстро нашлись драйвера, но только под windows.

Синхронизация времени: windows+GPS и Linux

Имеем:

  • windows XP (будущий сервер времени),
  • GPS-приемник ET-301 (довольно старая модель),
  • Linux (в нашем случае не очень популярный DragLinux — аудио-сервер для записи телефонных переговоров, также не самая новая версия). Офис на 5 этаже 8-го этажного здания. Домена нет.

Адреса:

windows xp = 192.168.0.95
linux = 192.168.0.93
#uname -a
Linux Foton 2.6.22.9-smp #1 SMP PREEMPT Mon Jun 9 17:42:51 MSD 2008 i686 i686 i386 
GNU/Linux
  • Перепаиваем проводок для подключения к USB, если будет интересно — покажем.
  • Находим, качаем, ставим утилиту NMEATime (она позволяет синхронизировать системные часы с указанных GPS-приемником)

После настройки времени через приемник первым делом пытаемся получить время в линуксе от виндовс

# ntpdate -q 192.168.0.95
server 192.168.0.95, stratum 16, offset 35.192635, delay 0.04132
6 May 13:51:43 ntpdate[2883]: no server suitable for synchronization found

На нашем аудиосервере

# ntpq -p
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
192.168.0.95    LOCAL(0)         6 u   14   64   77    0.155  8424.26  88.345

Так stratum сервера = 16, то есть с ним не будет синхронизироваться ни один PC.

Правим следующие конфиги в надежде, что пока правим виндовс выпрямится и будет отдавать правильное время:

  • /etc/ntp.conf
server 192.168.0.95
  • /etc/sysconfig/ntpd
# Drop root to id 'ntp:ntp' by default.  Requires kernel >= 2.2.18.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid"
NTPSERVER=192.168.0.95

Для настройки GPS под виндой стоит почитать эту статейку - для тех кто не в курсе.

На практике в GPS-приемниках используются обычные кварцевые часы, широко применяемые в разнообразной электронной аппаратуре. Их точность несравнима с атомными часами, но для вычисления местоположения используется измерение дальности до еще одного, четвертого спутника. При этом, даже не зная разницы между часами спутников и приемника, определяется диапазон координат, в котором предположительно располагается приемник. А поскольку он не может находиться одновременно в нескольких местах, приемник просто начинает последовательно перебирать величину поправки к своим часам, пока не находит такую, при которой данные четырех спутников указывают точно на одну точку. Автоматически при этом часы приемника синхронизируются с часами спутников.

Предположение:

Проблема в том, что не удается приемнику зафиксировать все координаты (они «гуляют» по крыше, думаю понятно почему). В результате мы имеем не синхронизированный сервер времени, отсюда имеем stratum 16.

Мы пришли к такому решению: вынести GPS-антенну подальше от стены. Сделали аккуратно дырочку и продели проводок.

Если сервер имеет достаточное количество серверов синхронизации, то для домена он становится "авторитетным" поставщиком NTP.

По идее в том же могучем гугле можно найти упоминание о том, что при подключении GPS-приемника компьютер становиться авторитетным сервером ntp 1 уровня.

Однако никакие наши подвижки не привели к нужному результату. Win ни под каким предлогом не хотел отдавать время для синхронизации.

Решения, которые пришли с ходу в наши светлые головы:

  • обновить ntpd на линуксе, но это потянуло слишком много обновлений
  • поднять samba-сервер и подключиться к win напрямую, не лучший вариант
  • воспользоваться сторонней утилитой под win, чтобы она отдавала время по запросу

Пришли к выводу, что NMEA подводит часы на мат плате, но не синхронизирует системное время? Точнее виндовс не может стать авторитетным ntp-сервером без доп. помощи.

Гугление указывает на то, что под win синхронизация времени, мягко говоря, делается непонятно как. Да и описаны везде случаи, когда win синхронизируется с кем-то.

Далее могучий и великий google.com дает наводку на очень даже приятную статейку о синхронизации времени в комплексах телемеханики. На этой страничке и находим подсказку: поставить на win ntpd сервер + где скачать.

Пробуем настроить его на локальное время, ставим stratum = 5 для меньшей подозрительности. Линукс не захотел синхронизировать время с виндовс, у которой stratum = 2

Читаем для примера частные cтандарты синхронизации времени на рабочих станциях. Получаем представление и начинаем действовать в следующем ключе.

Настройки на win C:\Program Files\NTP\etc\ntp.conf

# NTP Network Time Protocol
# **** ATTENTION ****: *You have to restart the NTP service when you change this file to activate the changes*
# PLEASE CHECK THIS FILE CAREFULLY AND MODIFY IT IF REQUIRED
# Configuration File created by Windows Binary Distribution Installer Rev.: 1.26  mbg
# please check http://www.ntp.org for additional documentation and background information
# Use drift file
driftfile "C:\Program Files\NTP\etc\ntp.drift"

# your local system clock, should be used as a backup
# (this is only useful if you need to distribute time no matter how good or bad it is)
server 127.127.1.0
# but it operates at a high stratum level to let the clients know and force them to
# use any other timesource they may have.
fudge 127.127.1.0 stratum 5

# End of generated ntp.conf --- Please edit this to suite your needs

Оставляем все это добро на время праздников.

После пьянки праздников видим чудесную картинку. Все работает как надо! Ура!!! Визуально один в один!

Проверяем точнее:

#ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*192.168.0.95    LOCAL(0)         6 u  196 1024  377    0.329  -24.604  42.114

Разница в 24 мс не такая уж и существенная.

PS. Искренне, надеемся, что наш опыт будет кому-то полезен!

Оставить комментарий
Не публикуется
Начиная с http://
Пожалуйста, введите результат операции.
* Обязательно для заполнения.