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

Имеем:
- 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. Искренне, надеемся, что наш опыт будет кому-то полезен!
