NTP GPS: различия между версиями

Материал из Wiren Board
(Более простой способ без сборки ntpq, все из пакетов.)
 
(не показано 7 промежуточных версий 2 участников)
Строка 1: Строка 1:
'''Статья носит рекомендательный характер и не предназначена для конечных пользователей.'''
{{DISPLAYTITLE: Синхронизация времени от GPS модуля}}
Модуль GPS можно использовать в качестве источника точного времени.  


Рабочий вариант от freemanon https://support.wirenboard.com/t/nastrojka-modulya-gps/5353/9
Работает это так: локальный демон '''gpsd''' получает время с GPS-устройства и отдаёт его демону '''ntpd''', который дальше работает с временем стандартным способом.


Варианты с NMEA Reference Clock Driver (с драйвером 20 - 127.127.20.0) так и не заработали, работающее решение нашлось здесь https://blog.rapid7.com/2015/07/27/adding-a-gps-time-source-to-ntpd/. Используется SHM Reference Clock (с драйвером 28 - 127.127.28.0)
Настройка синхронизации времени контроллера с GPS:
#Установите необходимые пакеты
#:<syntaxhighlight lang="bash">
apt install ntp gpsd gpsd-clients
</syntaxhighlight>
#В конфигурационном файле gspd укажите порт к которому подключено устройство. А также установите параметр <code>GPSD_OPTIONS="-n"</code>, это нужно чтобы синхронизация со спутниками начинала выполняться сразу после запуска.
#:<syntaxhighlight lang="bash">
nano /etc/default/gpsd
</syntaxhighlight>
#:<syntaxhighlight lang="bash">
DEVICES="/dev/ttyMOD4"
GPSD_OPTIONS="-n"
</syntaxhighlight>
#Настройте ntpd. Для этого откройте конфигурационный файл:
#:<syntaxhighlight lang="bash">
nano /etc/ntp.conf
</syntaxhighlight>
#:И дополните его следующим образом:
#:<syntaxhighlight lang="bash">
driftfile /var/lib/ntp/ntp.drift
restrict default nomodify notrust
disable auth


У меня получилось следующее:
# local
server 127.127.1.0
fudge 127.127.1.0 stratum 10


1. ставим пакеты
# GPS
server 127.127.28.0 minpoll 4 maxpoll 4
fudge 127.127.28.0 flag1 1 time1 0.35 refid GPS stratum 2
tinker panic 0 stepout 1
# PPS
server 127.127.28.2 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.2 refid PPS stratum 1


  apt install ntp gpsd gpsd-clients
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict 127.127.1.0
restrict 127.127.20.0
restrict 127.127.22.0
restrict 127.127.22.2
restrict 127.127.28.0
restrict 127.127.28.1
restrict 127.127.28.2
</syntaxhighlight>
#Установите запуск '''gpsd''' после '''wb-hwconf-manager.service'''. Это нужно, чтобы '''gpsd''' запускался после перезагрузки контроллера автоматически.
#:Откройте файл <code>/lib/systemd/system/gpsd.service</code> в текстовом редакторе:
#:<syntaxhighlight lang="bash">
nano  /lib/systemd/system/gpsd.service
</syntaxhighlight>
#:И приведите его к следующему виду:
#:<syntaxhighlight lang="bash">
[Unit]
Description=GPS (Global Positioning System) Daemon
Requires=gpsd.socket
# Needed with chrony SOCK refclock
# After=chronyd.service
After=wb-hwconf-manager.service


2. настраиваем gpsd
[Service]
EnvironmentFile=-/etc/default/gpsd
ExecStart=/usr/sbin/gpsd -N $GPSD_OPTIONS $DEVICES


/etc/default/gpsd:
[Install]
Also=gpsd.socket
</syntaxhighlight>
#:
#:Создайте ссылку для systemd:
#:<syntaxhighlight lang="bash">
ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/
</syntaxhighlight>
#:Перезапустите systemctl:
#:<syntaxhighlight lang="bash">
systemctl daemon-reload
</syntaxhighlight>
#:Затем перезапустите gpsd:
#:<syntaxhighlight lang="bash">
systemctl restart gpsd
</syntaxhighlight>
#После этого можно проверить работу NTP сервера командой
#:<syntaxhighlight lang="bash">
ntpq -p
</syntaxhighlight>
#:В результате должен получиться такой вывод:
#:<syntaxhighlight lang="bash">
    remote          refid      st t when poll reach  delay  offset  jitter
==============================================================================
LOCAL(0)        .LOCL.          10 l  388  64  100    0.000    0.000  0.002
*SHM(0)          .GPS.            0 l    7  16  377    0.000    9.404  20.126
</syntaxhighlight>


DEVICES="/dev/ttyMOD3"
Посмотреть ошибки и статус GPS-модуля можно командой
GPSD_OPTIONS="-n"
<syntaxhighlight lang="bash">
ntpq -c clockvar
</syntaxhighlight>


3. настраиваем ntpd
Узнать статус демонов gpsd и ntp
на всякий случай оставил локальный сервер со stratum 10
<syntaxhighlight lang="bash">
systemctl status gpsd
systemctl status ntp
</syntaxhighlight>


/etc/ntp.conf:
==Полезные ссылки==
 
*[https://support.wirenboard.com/t/nastrojka-modulya-gps/5353 Обсуждение настройки GPS-модуля на портале тех. поддержки]
# local
*[https://www.rapid7.com/blog/post/2015/07/27/adding-a-gps-time-source-to-ntpd/ Статья про настройку gpsd (англ.)]
server 127.127.1.0
*[https://www.lammertbies.nl/comm/info/gps-time Полезная статья про синхронизацию времени по GPS (англ.)]
fudge 127.127.1.0 stratum 10
*[http://www.ntp.org/ Официальный сайт протокола NTP]
# GPS
server 127.127.28.0 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.0 time1 0.0 refid GPS
 
driftfile /var/lib/ntp/ntp.drift
restrict default nomodify notrust
disable auth
 
4. проверяем работу
 
root@wirenboard-AP2OY26Z:~# ntpq -p
      remote          refid      st t when poll reach  delay  offset  jitter
==============================================================================
  LOCAL(0)        .LOCL.          10 l  388  64  100    0.000    0.000  0.002
*SHM(0)          .GPS.            0 l    7  16  377    0.000    9.404  20.126
 
 
 
 
'''Устаревшее'''
Инструкция от пользователя.
Что сделать для сборки правильного нтп:
 
Поставить libcap-dev – без него не будет работать нтп с настройками, которые по умолчанию в системе и после ребута все сломается и придется через дебаг консоль убирать из загрузки нтп.
Через apt-get не получилось – ставил через dpkg брал тут: https://packages.debian.org/wheezy/armel/libcap-dev/download
Качаем отсюда нпт http://www.ntp.org/downloads.html (Production 4.2.8p6)
tar zxvf ntp-4.2.8p6.tar.gz
cd ntp-4.2.8p6
./configure —enable-linuxcaps # для этого и нужен libcap-dev
make
make install
service ntp stop
cp /usr/local/bin/ntp* /usr/bin/ && sudo cp /usr/local/sbin/ntp* /usr/sbin/  #заменяем системный нтп новым улучшенным
 
Далее настраиваем нтп – надо создать алиалсы для драйвера 20 (https://www.eecis.udel.edu/~mills/ntp/html/drivers/driver20.html)
 
vi /etc/udev/rules.d/10-gps.rules
 
KERNEL=="ttyAPP2",NAME="%k",SYMLINK+="gps0",MODE="0660",GROUP="ntp"
 
KERNEL==“pps0",NAME="%k",SYMLINK+="gpspps0",MODE="0660",GROUP="ntp"
 
Можно еще использовать драйвер 22 – нтп + драйвер 20 (нмеа) или 28 (гпсд)
Но 20 и так умеет ппс (flag1 1) и экспериментально я остановился на нем. (https://www.eecis.udel.edu/~mills/ntp/html/refclock.html)
 
Правим /etc/ntp.conf:
 
server 127.127.20.0 mode 17 minpoll 4 maxpoll 4 iburst prefer
fudge 127.127.20.0 flag1 1 flag2 0 time2 1.0 refid GPSP
 
time2 1.0 - это смещение времени гпс от ппс тк гпс и ппс асинхронны и если нет смещения то нтп отбранкует драйвер 20 – подбирается экспериментально по методике ниже (но думаю что для всех виренбордов 5 будет 1.0 (для пи2 у меня получилось 0.7)) https://support.ntp.org/bin/view/Support/ConfiguringNMEARefclocks
 
if you want a good estimation for fudge time2 (perhaps because PPS is not an option for you) you could use the following procedure:
 
Switch off the PPS processing for the NMEA driver and mark the clock as noselect. Set the fudge time2 to zero. Add a few good public time servers or another clock; here in Germany I can use my DCF77 radio clock for that purpose. Disable all output sentences of the GPS18x LVC but the GPRMC sentence.
Restart the daemon and watch the offset for the NMEA clock. When the value gets stable, use the absolute value of the offset as fudge time2 for the NMEA driver.
Optionally restart ntpd and verify that the offset remains small. Note the jitter, which is probably in the order of 5-10msec. If the offset is small enough (better than 2ms is doable, but takes a long time to stabilise), go to the next step. Otherwise fine-tune fudge time2 and repeat this step.
Enable PPS processing again if you can. After restarting ntpd jitter and offset should decrease rather fast.
 
Finally, remove the noselect statement and enjoy your fast-locking NMEA clock with a Garmin GPS18x LVC!
 
Перезагружаемся и смотрим что есть наши алиасы
 
root@wirenboard:~# ls /dev/gps*  
/dev/gps0  /dev/gpspps0
 
Далее ждем минут 10 и ntpq -nc peer -c as -c rl
Буква о у 127.127.20.0 – значит что последняя синхронизации с ппс (http://citrin.ru/net:ntpq)
 
root@wirenboard:~#  ntpq -nc peer -c as -c rl
 
remote          refid      st t when poll reach  delay  offset  jitter
==============================================================================
o127.127.20.0    .GPSP.          0 l    8  16  377    0.000    0.000  0.008
*185.22.60.71    212.20.50.208    2 u  21  64  377    3.510  -0.048  0.132
+95.104.192.10  194.190.168.1    2 u  55  64  377  18.911  -1.880  0.093
-144.76.115.197  131.188.3.221    2 u    4  64  377  51.630  -6.302  0.509
+89.111.54.85    194.29.130.252  2 u  46  64  377  25.978    0.225  0.088
ind assid status  conf reach auth condition  last_event cnt
===========================================================
1 30454  974a  yes  yes  none  pps.peer    sys_peer  4
2 30455  963a  yes  yes  none  sys.peer    sys_peer  3
3 30456  9424  yes  yes  none candidate  reachable  2
4 30457  933d  yes  yes  none  outlier              3
5 30458  943a  yes  yes  none candidate    sys_peer  3
 
associd=0 status=0415 leap_none, sync_uhf_radio, 1 event, clock_sync,
version="ntpd 4.2.8p6@1.3265 Wed Apr  6 16:13:39 UTC 2016 (2)",
processor="armv5tejl", system="Linux/4.1.15-imxv5-x0.1", leap=00,
stratum=1, precision=-17, rootdelay=0.000, rootdisp=1.120, refid=GPSP,
reftime=dab9e00e.9c7d01b8  Thu, Apr 14 2016  9:23:26.611,
clock=dab9e016.a2b1d422  Thu, Apr 14 2016  9:23:34.635, peer=30454, tc=4,
mintc=3, offset=0.000121, frequency=91.858, sys_jitter=0.007629,
clk_jitter=0.008, clk_wander=0.000
 
Это чтобы посмотреть ошибки и что выдает гпс
 
root@wirenboard:~# ntpq -c clockvar
associd=0 status=0011 1 event, clk_no_reply,
device="NMEA GPS Clock",
timecode="$GNRMC,092359.000,A,5549.0526,N,03735.1798,E,0.00,172.16,140416,,,A*78",
poll=3426, noreply=1, badformat=0, baddata=0, fudgetime2=1000.000,
stratum=0, refid=GPSP, flags=1
 
Дальше настраиваем нтп как нам надо – кому что можно откуда и так далее.

Текущая версия на 13:34, 12 мая 2023

Модуль GPS можно использовать в качестве источника точного времени.

Работает это так: локальный демон gpsd получает время с GPS-устройства и отдаёт его демону ntpd, который дальше работает с временем стандартным способом.

Настройка синхронизации времени контроллера с GPS:

  1. Установите необходимые пакеты
    apt install ntp gpsd gpsd-clients
    
  2. В конфигурационном файле gspd укажите порт к которому подключено устройство. А также установите параметр GPSD_OPTIONS="-n", это нужно чтобы синхронизация со спутниками начинала выполняться сразу после запуска.
    nano /etc/default/gpsd
    
    DEVICES="/dev/ttyMOD4"
    GPSD_OPTIONS="-n"
    
  3. Настройте ntpd. Для этого откройте конфигурационный файл:
    nano /etc/ntp.conf
    
    И дополните его следующим образом:
    driftfile /var/lib/ntp/ntp.drift
    restrict default nomodify notrust
    disable auth
    
    # local
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10
    
    # GPS
    server 127.127.28.0 minpoll 4 maxpoll 4
    fudge 127.127.28.0 flag1 1 time1 0.35 refid GPS stratum 2
    tinker panic 0 stepout 1
    # PPS
    server 127.127.28.2 minpoll 4 maxpoll 4 prefer
    fudge 127.127.28.2 refid PPS stratum 1
    
    # Local users may interrogate the ntp server more closely.
    restrict 127.0.0.1
    restrict 127.127.1.0
    restrict 127.127.20.0
    restrict 127.127.22.0
    restrict 127.127.22.2
    restrict 127.127.28.0
    restrict 127.127.28.1
    restrict 127.127.28.2
    
  4. Установите запуск gpsd после wb-hwconf-manager.service. Это нужно, чтобы gpsd запускался после перезагрузки контроллера автоматически.
    Откройте файл /lib/systemd/system/gpsd.service в текстовом редакторе:
    nano  /lib/systemd/system/gpsd.service
    
    И приведите его к следующему виду:
    [Unit]
    Description=GPS (Global Positioning System) Daemon
    Requires=gpsd.socket
    # Needed with chrony SOCK refclock
    # After=chronyd.service
    After=wb-hwconf-manager.service
    
    [Service]
    EnvironmentFile=-/etc/default/gpsd
    ExecStart=/usr/sbin/gpsd -N $GPSD_OPTIONS $DEVICES
    
    [Install]
    Also=gpsd.socket
    
    Создайте ссылку для systemd:
    ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/
    
    Перезапустите systemctl:
    systemctl daemon-reload
    
    Затем перезапустите gpsd:
    systemctl restart gpsd
    
  5. После этого можно проверить работу NTP сервера командой
    ntpq -p
    
    В результате должен получиться такой вывод:
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
     LOCAL(0)        .LOCL.          10 l  388   64  100    0.000    0.000   0.002
    *SHM(0)          .GPS.            0 l    7   16  377    0.000    9.404  20.126
    

Посмотреть ошибки и статус GPS-модуля можно командой

ntpq -c clockvar

Узнать статус демонов gpsd и ntp

systemctl status gpsd
systemctl status ntp

Полезные ссылки