This process has been complicated and messy, because of the combination of 1) I don't know what I'm doing, and 2) the resources on this are good but complicated. Almost everything I've figured out has come from these three pages:
I had to fill in a few holes here and there, so I am going to try and get a comprehensive guide in place here, because I will forget.
sudo service apparmor stop
sudo update-rc.d -f apparmor remove
# apt-get build-dep ntp
# apt-get install pps-tools ubuntu-dev-tools
# apt-get source ntp
# cd ntp*
# dpkg-buildpackage -uc -us -nc
nano ntpd/refclock_jupiter.c
/* fprintf(stdout, buffer); */
(yes this commenting could be done before the attempted build, but if it works before hand, you save a step. Compiling again after the failure is very fast anyway)
# dpkg-buildpackage -uc -us -nc
# dpkg -i *.deb
(the deb will be up a level)
# Provide a symlink to /dev/ttyS0 and set low_latency for latency improvement KERNEL=="ttyS0", SYMLINK+="gps0", MODE="0666" KERNEL=="ttyS0", RUN+="/bin/setserial /dev/%k low_latency" KERNEL=="ttyS0", RUN+="/usr/sbin/ldattach pps /dev/%k" # Symlink /dev/pps0 to /dev/gpspps0 KERNEL=="pps0", SUBSYSTEM=="pps", DRIVER=="", SYMLINK+="gpspps0" KERNEL=="pps0", GROUP="dialout" KERNEL=="pps0", MODE="0666"
For some reason, the ldattach bit never works for me and I have to run it manually after rebooting. This is a huge pain and I don't know how to fix it yet.
sudo gpasswd -a ntp dialout
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help driftfile /var/lib/ntp/ntp.drift # Enable this if you want statistics to be logged. statsdir /var/log/ntpstats/ statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable # Specify one or more NTP servers. # local mess server 127.127.20.0 mode 18 minpoll 4 iburst prefer true fudge 127.127.20.0 flag1 1 flag2 0 flag3 1 flag4 1 # Use time-a and b ntp servers as a fallback. server time-a.nist.gov server time-b.nist.gov # By default, exchange time with everybody, but don't allow configuration. restrict -4 default kod notrap nomodify nopeer noquery restrict -6 default kod notrap nomodify nopeer noquery # Local users may interrogate the ntp server more closely. restrict 127.0.0.1 restrict ::1 # Clients from this subnet have unlimited access, but only if # cryptographically authenticated. restrict 10.0.0.0 mask 255.0.0.0 notrust
Tweak as necessary. I don't know all the fudge flags yet. This can be improved.
sudo service ntp restart
john@dc7900:~$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== oGPS_NMEA(0) .GPS. 0 l 6 16 377 0.000 0.623 0.072 *time-a.nist.gov .ACTS. 1 u 25 64 373 91.647 36.162 4.774 +time-b.nist.gov .ACTS. 1 u 18 64 165 96.251 41.469 2.220
If anything failed, check journalctl -xe to see if there are any hints. There almost always are.
john@dc7900:~$ ntpq -pcrv remote refid st t when poll reach delay offset jitter ============================================================================== oGPS_NMEA(0) .GPS. 0 l 15 16 377 0.000 0.492 0.044 +time-a.nist.gov .ACTS. 1 u 26 64 337 91.647 36.162 4.632 *time-b.nist.gov .ACTS. 1 u 23 64 257 92.135 38.865 4.538 associd=0 status=041d leap_none, sync_uhf_radio, 1 event, kern, version="ntpd [email protected] Fri Feb 26 13:56:57 UTC 2016 (1)", processor="x86_64", system="Linux/4.2.0-16-generic", leap=00, stratum=1, precision=-21, rootdelay=0.000, rootdisp=0.979, refid=GPS, reftime=da7ae733.9e1ec802 Fri, Feb 26 2016 10:01:07.617, clock=da7ae742.600f0f00 Fri, Feb 26 2016 10:01:22.375, peer=45935, tc=4, mintc=3, offset=0.492, frequency=22.723, sys_jitter=0.044, clk_jitter=0.000, clk_wander=0.145
Right now my offset and jitter can be improved. This can be done by: