Table of Contents

Chrony

Chrony has some advantages over old NTPd.

However, the version packaged for Debian/Ubuntu seems to be broken in that SOCKs don't work. If you manually compile and install it you'll be good.

Compile & Install

This assumes a brand new debian-based install.

sudo apt install git bison build-essential asciidoctor -y
git clone https://github.com/mlichvar/chrony
cd chrony
./configure
make ; make docs
sudo make install

chronyd.service

A systemd service file is not included, here's a very simple one.

[Unit]
Description=chrony, an NTP client/server
Documentation=man:chronyd(8) man:chronyc(1) man:chrony.conf(5)
Conflicts=openntpd.service ntp.service ntpsec.service
Wants=time-sync.target
Before=time-sync.target
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/sbin/chronyd -f /etc/chrony.conf

[Install]
Alias=chronyd.service
WantedBy=multi-user.target

Install:

cp chronyd.service /lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable chronyd
Make sure After=chronyd.service is in the [Unit] section of gpsd.service. Chronyd must be started first because it creates the sock that gpsd writes to.

chrony.conf

Note! Change ttyAMA0 to whatever your UART is coming in on!

server time-a.nist.gov
server time-a-wwv.nist.gov
server time-a-b.nist.gov

refclock SOCK /run/chrony.ttyAMA0.sock refid GPS

rtcsync

logchange 0.5

local stratum 10

makestep 1.0 3

logdir /var/log/chrony
log statistics tracking

dumpdir /var/log/chrony
driftfile /chrony.drift

allow