After spending quite a bit of time trying to get to the bottom of how to correctly configure Chrony for synchronizing system time to NTP time sources, I would like to share what I've found with the Arch community, and ask for any comments and suggestions.
Naturally, I started out with Arch Linux's excellent as always Wiki page on Chrony.
I ended up with the following initial configuration in /etc/chrony.conf:
server 0.europe.pool.ntp.org server 1.europe.pool.ntp.org server 2.europe.pool.ntp.org server 3.europe.pool.ntp.org driftfile /etc/chrony.drift keyfile /etc/chrony.keys commandkey 1
These are the problems I've run into so far, and the ways in which I (tried to) fix them, with the place for some possible documentation improvements within parentheses:
1. (Wiki) Setting the hardware RTC using
# chronyc trimrtc
didn't work, it gave the error:
513 RTC driver not running
I had to configure the 'rtcfile' option in /etc/chrony.conf to get it to work. This is actually in the Chrony FAQ. It can easily be fixed in the Wiki documentation.
2. (Wiki, config) With my hardware RTC set to UTC, I had to explicitly enable (uncomment) the "rtconutc" option in /etc/chrony.conf for the system time to use the correct time zone.
Unlike any other part of a Linux system that I know of, Chrony assumes that the RTC is set to local time, unless specified otherwise.
The comments in the config file don't (to me at least) make it clear enough that the 'rtconutc' option is not the default, and must be explicitly enabled. Otherwise, strange things can happen to the system time. This was the case for me: my clock kept jumping forward one hour on each boot until I fixed this.
This should definitely be documented on the Wiki page.
3. (timedatectl? Chrony?) Even when fully synchronized to an NTP time source,
$ timedatectl status
... NTP enabled: yes NTP synchronized: no ...
I found this quite disturbing at first, and it took me a lot of research to figure this one out.
I would have expected the value of "NTP synchronized" to indicate whether system time is in fact synchronized to an NTP time source or not, but I found that, in the case of Chrony, it only indicates whether the RTC is being kept updated with the (synchronized) system time.
"NTP synchronized" will remain "no", even when fully synchronized, unless 'rtcsync' is enabled (and rtcfile is disabled!) in /etc/chrony.conf .
Note the dissimilarity between "NTP synchronized" and "rtcsync": in my view, the former deals with NTP, the latter deals with the RTC.
(In more technical detail, "NTP synchronized" only reflects (inversely) whether or not the STA_UNSYNC flag is set in struct timex, see /usr/include/sys/timex.h, /usr/include/bits/timex.h, and the article on the Kernel Discipline linked to above.)
I'm unsure whether this issue is really a bug in Chrony, or simply an ambiguity in the output of timedatectl.
This is the final configuration in /etc/chrony.conf that I ended up with:
server 0.europe.pool.ntp.org server 1.europe.pool.ntp.org server 2.europe.pool.ntp.org server 3.europe.pool.ntp.org driftfile /etc/chrony.drift keyfile /etc/chrony.keys commandkey 1 ! rtcfile /etc/chrony.rtc rtcsync rtconutc
Any comments or suggestions on this are very welcome.
Last edited by ackalker (2012-12-10 23:25:21)
I've noticed that with the rtconutc option chrony tells me its an invalid command: Line 10 in configuration file [/etc/chrony.conf] contains invalid command (line test is the one with rtconutc) has the command been deprecated or something?
I always follow the wiki but I have my own brief notes about chrony. Also if you want to use trimrtc I always go to chronyc as root and then from the command line within chronyc issue a password command first and then issue the trimrtc command (through you can also issue the password in a single line command too) - here are my notes (warts and all) which may help:
For chrony need to check chrony.conf $ cat /etc/chrony.conf|grep .|grep -v "^[#\!;%]" server ntp.xxxx.co.uk server ntp1.xxxx.co.uk server ntp2.xxxx.co.uk driftfile /etc/chrony.drift keyfile /etc/chrony.keys commandkey 1 dumponexit dumpdir /var/log/chrony cmdallow 127.0.0.1 rtcfile /etc/chrony.rtc rtconutc If any settings are missing then add them in - but change the servers as necessary. These are the settings that work. $ cat /etc/chrony.keys 1 mychronypass Put whatever password you like instead of mychronypass - if the file does not exist then create it. Issue the following command to get the system set properly (as root): # chronyc -m "password mychronypass" online makestep 200 OK 200 OK 200 OK To start it issue systemctl start chrony and to make it start at boot systemctl enable chrony To check status can run chrony as root and then password mychronypass tracking trimrtc sources Make sure that tracking shows that it is synchronised before trying to use trimrtc
By the way during any install I always do hwclock --systohc --utc and if it is a dual boot machine with Windows I use the registry hack for Windows to be on UTC - that way I don't have issues with time on either the OSes that are booted. On machines with only arch then the hwclock command is fine anyway - but if your clock is not on UTC and you then use rtconutc for chrony then it may not like it!
Hope this helps.
Last edited by mcloaked (2013-04-14 17:15:54)