Introduction
Its always nice to know what you are dealing with so on Wikipedia
you will get some basic info regarding NTP.
RPi NTP client
The latest RPi OS use the
systemd
service systemd-timesyncd
as NTP client and please note that this package will be REMOVED installing the NTP server.
RPi NTP server
The recommendation for a RPi is to use the systemd service chronyd as NTP server. If installed it will also take over as the NTP
client.
The old implementation is NTP and here you can see the differences. If you prefer this package, please check install hints below.
Installation
Install and configure server
Installing the "chrony" NTP server is done in a terminal/ssh session via
sudo apt install chrony
and then edit the config file with
sudo nano /etc/chrony/chrony.conf
allow
local
will create a NTP pseudo server and using the internal clock as reference. Full specification of the settings in the file, and a manual, are found here. If not using a RTC comment the line so it looks like
# rtcsync
Restart, after the changes, with
sudo systemctl restart chronyd
Check status with
sudo systemctl status chronyd
Configure clients
For other RPi:s/devices, acting as clients, in the LAN that has to be synched, edit the config file with
sudo nano /etc/systemd/timesyncd.conf
and after the "[Time]" line just add
NTP=nnn.nn.n.n
which is the IP, or hostname, of your NTP server. Then restart and check with
sudo systemctl restart systemd-timesyncd
sudo systemctl status systemd-timesyncd
Checking
The server
Issue the command
chronyc sources -v
you will see something like
210 Number of sources = 1
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 127.127.1.0 10 6 1 62 +4870ns[+4870ns] +/- 10us
This shows you are up and running off line with your local NTP server.
If you are going online, and wait a little, you will see
chronyc sources
210 Number of sources = 5
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 127.127.1.0 3 6 377 59 -24ms[ +11us] +/- 53ms
^+ 158.69.35.226 2 6 377 28 -5199us[-5199us] +/- 77ms
^- 103.106.65.219 2 6 377 25 +24ms[ +24ms] +/- 219ms
^+ 5.9.113.140 3 6 377 148 -35ms[ +35ms] +/- 80ms
^* 217.168.87.226 2 6 377 28 +1065us[ +29ms] +/- 35ms
There are several nice commands, for example
chronyc clients
which checks which clients that have accessed the server. But there could also be an
501 Not authorised
as a response. If so use the command with "sudo", or as "root".
The client
With command
timedatectl show-timesync
and showing
SystemNTPServers=192.168.254.10
FallbackNTPServers=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
ServerName=192.168.254.10
ServerAddress=192.168.254.10
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=4min 16s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=10, Precision=-20, RootDelay=0, RootDispersion=0, Reference=7F7F0101, OriginateTimestamp=Mon 2021-05-10 18:42:17 CEST, ReceiveTimestamp=Mon 2021-05-10 18:42:17 CEST, TransmitTimestamp=Mon 2021-05-10 18:42:17 CEST, DestinationTimestamp=Mon 2021-05-10 18:42:17 CEST, Ignored=no PacketCount=7, Jitter=18h 10min 56.171885s }
Frequency=-6438843
There are a lot more to be said about NTP so just Google for your use case !
Remarks
Signal K
Using Signal K, as navigation aid, there is a plugin "@signalk/set-system-time" which will update the Raspberry(RPi) clock, or other chosen server HW, with the time information from the satellites.
Upgrade from Buster to Bullseye
After an upgrade the time sync didn't work so installing chrony without any config solved my issue.
NTP install
Hints....with same "local" functions as using "chrony" above.
#config
sudo nano /etc/ntp.conf
# adding
server 127.127.1.1 iburst prefer
fudge 127.127.1.1 stratum 8
# restarting, enable att power on
sudo systemctl restart ntp
sudo systemctl status ntp
sudo systemctl enable ntp
# checking server
ntpq -p
# checking client
timedatectl
Great post! I'd been looking for a way to sync all my devices to the GPS, and since the RPi syncs through SignalK, it became easy to set up the NPT and point everthing else to it. Thanks!
ReplyDeleteThx, yes a nice function.
DeleteThank you - works perfectly
ReplyDeleteNice ! 👍
Delete