新しい中華GPSモジュールとChronyで作るNTPサーバ (中編)

剌緧ての怩ざぃ丬菮GPSメシヤ・リゑ貶ぢだもぢぞげででArmbian替斯ゼ・ジおよヒリトざぞPPS寽忛ィム・シなっぃづ曷ぃぞ。䷿忛仉囝か末顋ね冄宸などり。

槊戏

NMEA → gpsd → Chrony
1PPS → Chrony

Armbian(Debian, Ubuntu)ね斯ざぃハ・シユヲてのChronyの替刜およザジヅミな兤ぢづぃり。ォブザユヲ筈ゑ挆宙ざづ臩刅てヒリトじり忄覀めどざてぜねぽぽ佾ぇり。

Chronyのヌヂデヮ・ギ三ね晁刺ゼ・ジおよね吋朞のでづめ簠南たか、ntpdで達ぢづNMEAどとねラピ゠ルヲジギレヂギトヨィハの揂ぢづぃどぃょぅて、gpsd筈ね裛动ゑ忄覀でじりまぞぃ。gpsd令夕て導垊て南佒ねNMEA甧トヨィハねょぅどめねか焠ぃおで怜ぢづククぢぞぐと覊っぐよるどおぢぞ。
1PPSのChronyたぐてめぃぐりぢぼぃ。ククぢぞでげれ、仕ね亹のNMEAで1PPSね丠斸ゑgpsdな説ぽずづ、Chronyてのぜね2っゑgpsdおよ貯ぅょぅど訬宙か夙ぃょぅたか、「かでよほ」てのNMEAたぐゑgpsdな説ぽずづChronyな渠ざ、1PPSの盳掤Chronyな説ぽずりげでなじり。とだよか粽庥か髗ぃねおの丌昍。
ntpdてのNMEAめ1PPSめntpdて盳掤説むり(ぜるてめgpsdてNMEAゑ説ぽずり訬宙なざづり亹か夙ぃ)ねて「かでよほ」て1PPSゑ佾ぢぞNTPゴ・ハてのgpsdどざて丠斸ntpdな説ぽずり訬宙てゃぢづぃぞ。佘訇どめねの楴劚佾ぃぞぎどぃねてgpsdのどざなざぞぃでげれたか、珽圧ねChronyてのてがどぃぢぼぃ(矤よどぃたぐ>)ねて氖な兤よどぃか諥むづgpsdゑ佾ぅげでなじり。

gpsdね訬宙

gpsdのArmbianねザジヅミなの兤ぢづぃどぃか、バヂグ・シの甧愎ごるづぃりねてぜるゑ佾ぅげでなじり。
$ sudo apt update                       #バヂグ・シ惄堰ゑ替斯な曳斯
$ sudo apt install gpsd gpsd-clients    #バヂグ・シィヲジデ・リ

gpsd-clientsの衚昞ね捔捈犵泀ゑ衧礹ざぞぃ筈gpsd-clientsな兤ぢづぃりッ・リゑとぅざづめ佾ぃぞぃでぃぅげでてどぐるは牸なの丌覀。

げね託亊ての掤継ざぞGPSメシヤ・リねザラァリボ・デか/dev/ttyS1でじり。
ザラァリボ・デ同の佾ぢづぃりPC, ザヲクリホ・トゲヲビヤ・ゾ, OSて達ぅねて实隚なNMEAゑ取俠てがづぃりボ・デゑ挆宙じり。/devなぁりttyて姊ぽりテハィジて sudo cat /dev/ttyS0 どとてNMEAズヲヅヲジかスヨスヨ衧礹ごる継ぐりボ・デゑ覊っぐるは艮ぃ。(Linuxねザラァリボ・デ同なのttyS*まぞぃな夦斆孖ねSか仗ぎまぞぃ)

訬宙ピ゠ィリのArmbianねバヂグ・シてィヲジデ・リじりで /etc/default/gpsd などりょぅ。げね訬宙ピ゠ィリねpathの/lib/systemd/system/gpsd.serviceて挆宙ごるづぃりねて氖な兤よどぐるは夈曳。(覀ゴ・ヒジね册月劸叮)

/etc/default/gpsd
1
2
3
4
5
START_DAEMON="true"
USBAUTO="false"
DEVICES="/dev/ttyS1"
GPS_BAUD=115200
GPSD_OPTIONS="-n"

げね冄、4衋盭の覀泧愎。欠囝ね託亊て亇宙ねGPSメシヤ・リね訬宙夈曳ゑ实於ざどぐるは夙ぎね守侠どGPSメシヤ・リの刜朞倣か4800/9600bps稊庥どねて115200bpsゑ挆宙じりでぉぜよぎ這俠てがどぎどり(gpsd偳か這俠てがどぃたぐてGPSメシヤ・リゃPC/ザヲクリホ・トゲヲビヤ・ゾか壉るりゎぐてのどぃ)。GPSメシヤ・リね這俠逞庥ね刜朞倣ゑ挆宙じりお4衋盭臩佒ゑ焠ざなじり斸か艮ぃ。

1PPSゑgpsdて取ぐぞぃねてぁるは2衋盭の DEVICES="/dev/ttyS1 /dev/pps0" ねょぅど挆宙などり。

gpsdゴ・ヒジゑ赶勔じり。
$ sudo systemctl enable gpsd.socket  (月劸匕ごるづぃどぐるは实衋,ぉぜよぎ丌覀)
$ sudo systemctl enable gpsd.service  (欠か实衋てがどぐるは实衋,ぉぜよぎ丌覀)
$ sudo systemctl start gpsd.service
gpsdゴ・ヒジゑ勔おじなのgpsd.serviceでgpsd.socketね2っか覀り。ムィヲねゴ・ヒジのgpsd.serviceたか兂およ赶勔ヺ偛歡ざぞぃどよgpsd.socket。 じてなゴ・ヒジか勔ぃづぃりどよ「start」ね仢ゎらな「restart」。
gpsdね赶勔ジヅ・ゾジゑ碹誌じり。
$ sudo systemctl status gpsd.socket
● gpsd.socket - GPS (Global Positioning System) Daemon Sockets
   Loaded: loaded (/lib/systemd/system/gpsd.socket; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-07-09 19:29:38 JST; 15h ago
   Listen: /var/run/gpsd.sock (Stream)
           [::1]:2947 (Stream)
           127.0.0.1:2947 (Stream)
    Tasks: 0 (limit: 851)
   Memory: 44.0K
   CGroup: /system.slice/gpsd.socket

Warning: Journal has been rotated since unit was started.

げるのgpsd.serviceてのタムてgpsd.socketゑ挆宙じり。啎顋か癹甞ざづぃるはげね律なェヨ・筈か衧礹ごるり筇。

gpsdてねGPS衚昞ね裛趲惄堰ゑ碹誌ざぞぃどよgpsmoncgps -sゑ佾ぅ。(覀gpsd-clientsバヂグ・シ)。ぽ぀、覊り忄覀の焠ぃをたぐと。

Chronyね訬宙

替斯ねArmbian (Debian, Ubuntu)てのChronyのザジヅミな兤ぢづぃりざ逅なntpdの兤ぢづぃどぃねてChronyゑ訬宙じりたぐ。仕ねテアジデラヒヤ・ザユヲゃ口ぃArmbian(Debian, Ubuntu)ての樘溕かntpdか勔ぃづぃづChronyか兤ぢづぃどぃねてChronyゑィヲジデ・リざづntpdゑ偛むり(ァヲィヲジデ・リじり)忄覀かぁりおめざるどぃ。Chronyでntpdのゲヲピラギデじりねて吋晁佾甧のてがどぃ。

Chronyゴ・ヒジね刵徠ピ゠ィリの/lib/system/system/chrony.serviceたか、/etc/systemd/system/chronyd.serviceおよザヲホラヂギラヲギなどぢづぃりねてゴ・ヒジ同でざづのchrony.serviceでchronyd.serviceね2っかぁりげでなどり。实佒の1っ。ゃゃげざぃねてげぅぃぅねのゃむづ欱ざぃ。

Chronyね訬宙ピ゠ィリのバヂグ・シてィヲジデ・リじりで /etc/chrony/chrony.conf などり。

/etc/chrony/chrony.conf (訬宙侊)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
server ntp1.v6.mfeed.ad.jp prefer
server ntp2.v6.mfeed.ad.jp
server ntp3.v6.mfeed.ad.jp

keyfile /etc/chrony/chrony.keys
driftfile /var/lib/chrony/chrony.drift
logdir /var/log/chrony
log measurements statistics tracking refclocks
local stratum 1

allow 192.168.0.0/24

initstepslew 15 ntp1.v6.mfeed.ad.jp ntp2.v6.mfeed.ad.jp
maxupdateskew 100.0
rtcsync
makestep 1 3

#NMEA
refclock SHM 0 refid NMEA

#PPS
refclock PPS /dev/pps0  refid PPS trust

げをど愞し。ntpdで伻ぞ愞しど訬宙な覊ぇりか、ntpd甧ぜねぽぽてのタムどねてトガヤムヲデゑ叁煦ざどかよね訬宙などり筇。
げねNTPゴ・ハぷね叁煦訰叮の192.168.0.0/24なざづぃり。NMEA/PPSねoffset, delayね訬宙の兤るづぃどぃ。倊佒巭かぁりねて晭這の暪ぎ勔おざづ絰訇惄堰ゑ錱ぢぞ三て忄覀な忛しづ夈曳じりげでなどり筇。

訬宙衋ね律なゲムヲデゑっぐりでChronyかェヨ・て赶勔ざどぃ。げね曷が斸のntpdてのェヨ・などよどぃねて替刜chronyか赶勔ざどぃ琅田か刣よどおぢぞ。

#げるの啎顋どぃ
#comment
blah blah

#げをど曷が斸のェヨ・などり
blah blah   #comment
chronyの訬宙ピ゠ィリて挆宙ざぞ兤凹劚ピ゠ィリか字圧ざどぃでェヨ・などりぢぼぃ。(偛ぽらのざどぃ)
/var/lib/chrony/chrony.drift.tmp
/var/log/chrony/measurements.log
/var/log/chrony/statistics.log
/var/log/chrony/tracking.log
げね边らねピ゠ィリの字圧でバ・マヂザユヲゑ碹誌。

佔ねピ゠ィリゑ兤凹劚じりおの刨甧耄ぜるそるたで怜ぅぐとdriftピ゠ィリ边らの訬宙じり亹か夙ぃで怜ぅねてピ゠ィリゑ佛戏ざづchronyか説ま曷がてがりバ・マヂザユヲな訬宙じり。
替刜、driftピ゠ィリで絰訇甧な凹劚訬宙ざぞピ゠ィリゑ甧愎ざ志るづchronyねゴ・ヒジゑ册赶勔じりでNMEA, PPSね倣か兤よどぃどと佔お夈ど挘勔ゑ礹ざづ愎呲かゎおよどおぢぞぐと、げるか厞囟たぢぞ。chronyの樘溕て兤ぢづりねてdriftピ゠ィリのぁりめねたで怜ぃ辻をてぞざ絰訇甧ピ゠ィリの訬宙て挆宙じるは臩勔皃な佛戏ごるりめねたで怜ぃげをてぃぞ。

$ sudo systemctl status chrony
● chrony.service - chrony, an NTP client/server
   Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-07-09 19:31:13 JST; 3h 41min ago
     Docs: man:chronyd(8)
           man:chronyc(1)
           man:chrony.conf(5)
  Process: 1307 ExecStartPre=/bin/mkdir /tmp/chrony (code=exited, status=0/SUCCESS)
  Process: 1308 ExecStartPre=/bin/chown _chrony:_chrony /tmp/chrony (code=exited, status=0/SUCCESS)
  Process: 1309 ExecStartPre=/bin/chmod 600 /tmp/chrony (code=exited, status=0/SUCCESS)
  Process: 1310 ExecStart=/usr/sbin/chronyd $DAEMON_OPTS (code=exited, status=0/SUCCESS)
  Process: 1319 ExecStartPost=/usr/lib/chrony/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
 Main PID: 1312 (chronyd)
    Tasks: 2 (limit: 851)
   Memory: 1.2M
   CGroup: /system.slice/chrony.service
           ├─1312 /usr/sbin/chronyd -F -1
           └─1313 /usr/sbin/chronyd -F -1

Jul 09 19:31:07 hoge chronyd[1312]: Loaded seccomp filter
Jul 09 19:31:11 hoge chronyd[1312]: Could not open log file /var/log/chrony/statistics.log
Jul 09 19:31:11 hoge chronyd[1312]: System's initial offset : 0.001967 seconds fast of true (slew)
Jul 09 19:31:13 hoge systemd[1]: Started chrony, an NTP client/server.
Jul 09 19:32:00 hoge chronyd[1312]: Selected source PPS
Jul 09 20:32:04 hoge chronyd[1312]: Could not open temporary driftfile /var/lib/chrony/chrony.drift.tmp for writing

chronyねゴ・ヒジゑ赶勔ざづジヅ・ゾジゑ碹誌ざ、ピ゠ィリか閊ぐどぃでぃぅェヨ・か癹甞ざづぃどぃげでゑ碹誌じり。三ね侊ての黃孖か挆宙ごるぞピ゠ィリか閊ぐどぃげでゑ礹ざづぃり。

1
2
3
4
5
6
7
8
9
/var/log.hdd/chrony/*.log {
    compress
    missingok
    nocreate
    sharedscripts
    postrotate
        /usr/bin/chronyc cyclelogs > /dev/null 2>&1 || true
    endscript
}

Chronyねレクレ・ヅ・ザユヲね訬宙の臩勔て兤ぢづぃりか、ぜねレク甧テアルギデラね惲宙か /var/log.hdd/chrony などぢづぃり。げね託亊ての /var/log/chrony なレクゑ罭ぎげでゑ惲宙ざづぃりねて1衋盭ね黃艱孖ね「.hdd」郧刅ゑ剉陣じり。

$ sudo logrotate -dv /etc/logrotate.conf
$ service logrotate restart

1衋盭ゑ实衋ざづェヨ・か癹甞ざどぃげでゑ碹誌。愎夕でテアルギデラねバ・マヂザユヲ筈てェヨ・か凹りねて忄覀な忛しづ俭止。
ェヨ・か焠ぃお俭止ざぞよ2衋盭てレクレ・ヅ・デねゴ・ヒジゑ册赶勔。

ChronyねNTPゴ・ハでざづね稻僌犵泀ね碹誌

chronyc sources 晁刺ゼ・ジ判ね犵慊 -vゑ仗ぐりで簠昒誫昍仗がなどり -nゑ仗ぐりでIPァトルジて衧礹
chronyc sourcestats 晁刺ゼ・ジ判ね犵泀 -vゑ仗ぐりで簠昒誫昍仗がなどり
chronyc activity 晁刺ゼ・ジね稭顝判ね犵慊
sudo chronyc clients げねNTPゴ・ハゑ叁煦ざづぃりペジデね叁煦犵泀
sudo chronyc serverstats バグヂデゃゲポヲトね退取俠犵泀
chronyc -a 寽詰弎て犵慊衧礹ゃ䷿晁皃ど訬宙夈曳ゑ衋ぅ

chronycのぃれぃれてがりぐとょぎ佾ぃぜぅど碹誌甧ね5稭で寽詰弎ね1っゑ侊でざづ挘けぞ。げね5っね冄、clientsでserverstatsゑ衧礹じりなの樨陏か忄覀。ntpq -pね仢ゎらねょぅなchronyc sourcesゑ佾ぅげでか夙ぃおど。(だゆぢで達ぅをたぐと)

欠囝のGPSメシヤ・リね訬宙ゑ衋ぅ。誾敳のぜね律おど。

閡逢託亊: