## Keep your System's Time in Sync
## Dan Langille <>
Time Travel
I'm sure the following scenario will be familiar to all of you. You're in
a group and someone asks the time. It might go something like this:
It's 9:15.
No, it's 9:14.
Uh uh, it's 9:16.
Actually, it's 9:15:47
I'm sure you've seen these conversations before. They are representative
of competition amongst individuals and of the variance in time pieces.
Everyone has a different opinion and everyone thinks they are right. In
most cases, such differences are not very important. Most people are
happy to have their watches accurate to within a few minutes. Such an
inaccuracy doesn't make a difference with individuals. This is not always
the case with computers.
Most computers do not have accurate time pieces. As an example, try
setting the time on your computer, and then check it a week later. Most
computers will be out by a minute or more. This may not seem like much,
but over a month, the difference will be nearly five minutes, and over a
year, nearly an hour. But there is an easy solution to time drift.
FreeBSD Time
FreeBSD has a good solution for storing time: it stores the time in two
parts. First, it stores the time as the number of seconds since 1 January
1970. This time is known as UTC, which is Universal Coordinated Time, the
international time zone (similar but not quite the same as Greenwich Mean
Time (GMT). FreeBSD also records the time zone in which the computer is
located. Between UTC and the time zone, the computer can determine the
local time.
The time can be changed manually using the date command. An example,
taken from the date man pages, follows:
date 8506131627
sets the date to "June 13, 1985, 4:27 PM".
The time zone can be set using the tzsetup command. Information
about the time zone is stored in /etc/localtime. This file is not an
ASCII file, so please don't try to modify it directly.
Internet time servers
As more and more computers were connected together, the consequences of
inaccurate time became evident. The solution seems simple: create a
super-accurate time piece, connect it to a computer (the server), and let
all the other computers get their time from that server. The problem is
scalability. It is unrealistic to have a single computer service all
other computers. The solution is distribution. Instead of one computer
with an accurate time piece, we have many. And instead of having every
computer talk to one of these servers, we delegate. I will explain this
delegation later in this article.
Internet computers use the ntp (Network Time Protocol) service for
time synchronization. This service uses port 123. There are many
computers around the world which provide an ntp server. I suggest you use
your ISP. If your ISP does not provide such a service, urge them to do
so.
Time synchronization
If you are always connected to the Internet, I recommend you use xntpd.
Otherwise, you should use ntpdate.
xntpd
xntpd is a Network Time Protocol daemon. It comes with FreeBSD and very
little effort is required to get it running. It runs all the time, so it
is best suited to systems which are always connected to the Internet.
In the , I found a message which showed how to install xntpd. In brief,
it outlined the following steps.
Create a file /etc/ntp.conf which contains the following:
server truechimer.waikato.ac.nz
driftfile /etc/ntp.drift
You will not want to use the server listed above unless you are in or near
New Zealand. You should obtain the address of a closer time server from
one of the resources listed later in this article. If you choose a server
that is too far away, the time will not be as accurate as it can be, which
defeats the purpose of this exercise.
The file /etc/ntp.drift is used by the program to record information about
your clock and is used to improve the accuracy of the time.
To ensure that xntpd is started automatically when the system boots, look
for the following lines within /etc/rc.conf and make them look like this:
xntpd_enable="YES" # Run xntpd Network Time Protocol (or NO).
xntpd_program="xntpd" # path to xntpd, if you want a different one.
xntpd_flags="-c /etc/ntp.conf -p /var/run/xntpd.pid" # Flags to xntpd
The flags tell xntpd to use the configuration file we created above and
specifies the name of the file to record the daemon's process id. Note
that xntpd defaults to this configuration file, so this flag is redundant.
To start xntpd manually, just enter the following command:
# xntpd -c /etc/ntp.conf -p /var/run/xntpd.pid
For more information on xntpd, try man xntpd or the
.
ntpdate
ntpdate is similar to xntpd except that it does not run as a daemon. If
you do not have a permanent connection, you should use this application
instead of xntpd (which would probably become annoyed and not keep
accurate time).
To use ntpdate, use the following command:
# ntpdate truechimer.waikato.ac.nz
As with xntpd, you will not want to use the server listed above unless you
are in or near New Zealand. You should obtain the address of a closer
time server from one of the resources listed in the next section. If you
choose a server that is too far away, the time will not be as accurate as
it can be, which defeats the purpose of this exercise.
Use your FreeBSD box as a time server for your subnet
In the above examples, we installed xntpd to run as a client and to use an
external time server. But xntpd can also run as a server at the same
time. This approach makes it very easy to coordinate the time on all of
your machines. If you are running several machines at home, one of
them should act as a server for the others. There is no reason for each
of the machines to individually access a time server. In fact, it's an
inefficient use of resources and it increases network traffic.
I run several NT boxes on my subnet. I installed
on
those machines and they now synchronize with the FreeBSD box. In this
solution, the gateway machine talks to the external time servers and my local
subnet coordinates their time with the gateway.
I admit to not having tried the server side of xntpd, so please treat the
following with a grain of salt. I haven't tested them but I have faith in
what appears below. If you have problems, please contact me and I'll
help as I can.
I have designated the computer which connects directly to my ISP as my
local time server. xntpd has been installed on that machine as described
in the previous sections. This machine operates as a client with respect
to the time server at my ISP. But it runs as a server for the other
machines on my network. The other machines operate xntpd as a client and
use that machine as their time server. The /etc/ntp.conf file on the
client machines refers to my local time server, not my ISP. This
distinction is important.
The Server
For the server, set it up as described in the previous sections but use
the following /etc/xtp.conf file instead:
server truechimer.waikato.ac.nz
driftfile /etc/ntp.drift
broadcast 192.168.0.255
The main difference is the addition of the broadcast command. In my case,
I've used the broadcast address for 192.168.0.0 Class C network. You
should pick the one appropriate to your subnet.
recommends the use of a broadcast address such as the above. However, the
man pages specifies that "The Numbers Czar has assigned the address
224.0.1.1 to NTP; this is presently the only number that should be used".
But my best guess is to go with the configuration provided above, modified
for your local subnet.
The Client
For the server, set it up as described in the previous sections but use
the following /etc/xtp.conf file instead:
server your.local.time.server
driftfile /etc/ntp.drift
Provide the IP address or the hostname of the time server you configured
in the previous section.
Where to find a timeserver
I use my ISP as a time server. You might want to ask your ISP if they
provide such a service. If they do, use them. If they don't, try the one
of the following resources. It's also been pointed out to me that it may
pay to use more than one timer server.
- Good stuff and some sound guidelines.
- �
- Copies of the software you might want. Lots of links to other
information.
- �
- A good resource.
- Dan
Return to Issue #2
|