Raspberry Pi 3 Stratum 1 NTP Server (Ubuntu)

November 21st, 2016 by rlaager

Hardware:

I’m in the U.S., so I ordered only the GPS board and case from Uputronics to save on shipping.

Other GPS HATs (and cases) can be used. Consult the Stratum-1-Microserver HOWTO for GPIO pin changes in step 12.

1. From Ubuntu Pi Flavour Maker, download the Ubuntu Server Minimal 16.04 image. Note that this is only available using BitTorrent (for bandwidth reasons).

2. Write the image to a Micro SD card.

3. Insert the SD card into the Raspberry Pi. Stick the heatsink to the processor. Assemble the case with the Raspberry Pi in it as you go. Connect the GPS antenna and place it near a window. Connect a keyboard, mouse, and monitor. Power up the Raspberry Pi.

4. Login with “ubuntu” as the username and “ubuntu” as the password. Set your own password:
passwd

5. Become root:
sudo -s

6. Generate the missing locale:
locale-gen en_US.UTF-8

7. Disable a broken service:
systemctl disable ureadahead

8. Resize the partition to fill your Micro SD card:
fdisk /dev/mmcblk0
“Delete the second partition (d, 2), then recreate it using the defaults (n, p, 2, enter, enter), then write and exit (w).” — Ubuntu Pi Flavour Maker FAQ

9. Set your time zone:
dpkg-reconfigure tzdata

10. Set your hostname:
vi /etc/hosts
vi /etc/hostname

11. Disable fake-hwclock, which otherwise breaks PPS in NTP at boot:
systemctl disable fake-hwclock.service

12. Disable Bluetooth, as we need the UART for GPS:
echo dtoverlay=pi3-disable-bt >> /boot/config.txt
echo enable_uart=1 >> /boot/config.txt
echo dtoverlay=pps-gpio,gpiopin=18 >> /boot/config.txt
systemctl disable hciuart
apt -y purge bluez bluez-firmware

13. Set maximum performance for consistent timing:
sed -i "s|$| nohz=off|" /boot/cmdline.txt
systemctl disable ondemand
echo 'GOVERNOR="performance"' > /etc/default/cpufrequtils

14. Install software:
apt update
apt -y dist-upgrade
apt -y install cpufrequtils gpsd gpsd-clients ntp pps-tools

15. Configure gpsd:

sed -i 's|DEVICES="|\0/dev/ttyAMA0 /dev/pps0|' \
    /etc/default/gpsd
sed -i 's|GPSD_OPTIONS="|\0-n|' /etc/default/gpsd
mkdir -p /lib/systemd/system/ntp.service.d
cat >/lib/systemd/system/ntp.service.d/gpsd.conf <<EOF
[Unit]
After=gpsd.service
Wants=gpsd.service
EOF

16. Edit ntp.conf
vi /etc/ntp.conf
to have this content:

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift
leapfile /usr/share/zoneinfo/leap-seconds.list

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.

# Stratum 0 (GPS)
server 127.127.28.2 minpoll 1 maxpoll 1 prefer
fudge 127.127.28.2 refid PPS

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
pool 0.ubuntu.pool.ntp.org iburst preempt
pool 1.ubuntu.pool.ntp.org iburst preempt
pool 2.ubuntu.pool.ntp.org iburst preempt
pool 3.ubuntu.pool.ntp.org iburst preempt

# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com preempt

server 127.127.28.0 noselect
fudge 127.127.28.0 time1 0 refid GPS

# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html
# for details.  This page might also be helpful:
#   http://support.ntp.org/bin/view/Support/AccessRestrictions
#
# Note that "restrict" applies to both servers and clients, so a configuration
# that might be intended to block requests from certain clients could also end
# up blocking replies from your own upstream servers.

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

# Needed for adding pool entries
restrict source notrap nomodify noquery

17. Reboot:
reboot

18. Resize the filesystem:
sudo resize2fs /dev/mmcblk0p2

19. Check that things look right:
ntpq -p

20. Wait ~24 hours for everything to stabilize. You want to allow for the drift to be calculated. Once the PPS offset is tiny (e.g. 0.010 or so), you know things are good.

21. At this point, wait for midnight to roll around so the stats are rotated. Then wait at least another 4 hours.

22. Calculate the correct offset for the GPS serial data:
awk '/127\.127\.28\.0/ { sum += $5 ; cnt++; } END { print sum / cnt; }' /var/log/ntpstats/peerstats

23. Subtract that value from the GPS’s time1 in /etc/ntp.conf. If this is the first time you’re doing it, the existing value is zero, so just flip the sign.

24. Restart ntp:
sudo systemctl ntpd restart

25. The offset on the GPS line should now be less than 3 or so. You can repeat steps 21 through 24 if want to try to get closer.

26. Remove noselect from the GPS line in /etc/ntp.conf:
sudo vi /etc/ntp.conf

27. Restart ntp:
sudo systemctl ntpd restart

Sources:

Posted in Computers, Open Source | No Comments »

My tcpdump Idiom

September 22nd, 2013 by rlaager

This is how I like to run tcpdump these days:
sudo tcpdump -U -s 0 -w - port 80 | tee DESCRIPTION-$(date +%s).pcap | tcpdump -lvvnr -

This dumps out a .pcap file I can open in Wireshark later, but also shows the tcpdump human-readable representation in real-time.

Posted in Computers, Open Source | No Comments »

Ubuntu Maverick Release Party

October 8th, 2010 by rlaager

What: Ubuntu Maverick Release Party
Where: rlaager’s House
When: Sunday, October 10, 2010 @ 2:00-5:00

Please respond to rlaager@wiktel.com by 1:00 Sunday if you’re coming. I don’t want to sit around waiting if nobody is coming. 🙂

Of course, bring your computer (if portable) for the install/upgrade to Maverick.

Posted in Open Source | No Comments »

Windows Paravirtual (virtio) Drivers

April 25th, 2010 by rlaager

After a whole lot of struggling, I’ve finally figured out the best way to install a Windows virtual machine under KVM, using the paravirtual (virtio) drivers. The basic idea is to use the virtio devices from the initial installation to avoid all the work and hassles involved with changing the drivers later. This avoids mistakes which can lead to an unbootable guest or “Local Area Connection 2” annoyances.

Thanks to Stefan Skotte and Andy for updates to simplify this procedure.

  1. Download the latest virtio drivers (in ISO format).
  2. Create a new virtual machine as you normally would for a Windows guest, stopping just before clicking Finish.
  3. If you have a new enough version of virt-manager, you can check the “Customize configuration before install” checkbox. Otherwise, click Finish, stop the virtual machine, open the details, reconnect the CD (or other installation media) if necessary, and reconfigure the guest to boot off the CD (or other installation media).
  4. Delete the IDE disk device and re-add the storage as a Virtio disk.
  5. Change the NIC’s device model to virtio.
  6. Switch to the console view, run the virtual machine, and start the installation as normal.
  7. When the disk configuration step comes up, no disk will be detected. This is normal.
  8. Click Load driver…
  9. Switch to the details view, disconnect the Windows installation CD, and connect the virtio ISO image.
  10. Switch back to the console view and click Rescan.
  11. Select the virtio block storage and virtio network drivers for the Windows version being installed, using the control key to select multiple items as always.
  12. Click Next.
  13. Switch to the details view, disconnect the drivers CD, and connect the Windows installation CD again.
  14. Proceed with the installation as normal.
  15. Reconfigure the boot options, if necessary, as desired.
  16. Disconnect the CD device, if necessary and desired.

Posted in Open Source, Windows | 7 Comments »

Ubuntu Window Buttons

April 6th, 2010 by rlaager

So Ubuntu Lucid is changing the window title bar button placement. I’m not sure why…other than Mark Shuttleworth seems to love copying Apple. 😉A colleague pointed out Mark Shuttleworth’s Window indicators post as the reason for this change.

However, this change made me realize one thing… I never use the menu from the title bar. I use it on the task bar a lot (for “Close”, “Always On Top”, “Move to Another Workspace”, and “Always on Visible Workspace”, in that order of frequency), but not from the title bar. This is a random observation, nothing more.

Posted in Open Source | No Comments »

« Previous Entries