====== Stratum 1 NTP Setup on Raspberry Pi ====== == By: Bun-Bun & guppy == * This guides uses Uputronics Raspberry Pi+ GPS Expansion Board and a rpi3 or newer * Setup rpi with latest Raspbian, enable ssh, etc... * apt-get install vim * raspi-config #disable linux from trying to access console getty * 5 Interfacing Options * P6 Serial -> Login Shell (no) -> Enable Hardware (yes) * vi /boot/config.txt * Add the following to the bottom * enable_uart=1 dtoverlay=pi3-disable-wifi dtoverlay=pi3-disable-bt #same with rpi4 #dtoverlay=pi3-miniuart-bt #if you want software BT dtoverlay=pps-gpio,gpiopin=18 init_uart_baud=9600 * systemctl disable hciuart #prevents warnings in logfiles * systemctl mask serial-getty@ttyAMA0.service #disables console getty so we can use uart for pps * apt-get install pps-tools ntp dnsutils * reboot * dmesg | grep pps * Look for the following * [ 2.443494] pps_core: LinuxPPS API ver. 1 registered [ 2.446699] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it> [ 2.471796] pps pps0: new PPS source pps.-1 [ 2.471886] pps pps0: Registered IRQ 498 as PPS source [ 6.965166] pps_ldisc: PPS line discipline registered [ 6.966569] pps pps1: new PPS source ttyAMA0 [ 6.966664] pps pps1: source "/dev/ttyAMA0" added * Check receiving stuff from gps module * ppstest /dev/pps0 #pps on gpio * cat /dev/ttyAMA0 #serial from gps module * vi /etc/ntp.conf * Change servers as appropriate, stuff at the bottom is the gpsd and pps link * Can have no servers and only use gps/pps as source, or have more than 1 other. Two sources (yourself and some other server) is bad. * # 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 # You do need to talk to an NTP server or two (or three). #server ntp.your-provider.example #Can have no servers and only use gps/pps as source, or have more than 1 other. Two sources (yourself and some other server) is bad. #server tock.usask.ca #server ntp2.torix.ca #server ntp.zaf.ca # Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for # details. The web page # might also be helpful. # # 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 restrict -6 default kod notrap nomodify nopeer noquery # 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 # Clients from this (example!) subnet have unlimited access, but only if # cryptographically authenticated. #restrict 192.168.123.0 mask 255.255.255.0 notrust # If you want to provide time to your local subnet, change the next line. # (Again, the address is an example only.) #broadcast 192.168.123.255 # If you want to listen to time broadcasts on your local subnet, de-comment the # next lines. Please do this only if you trust everybody on the network! #disable auth #broadcastclient # server 127.127.22.0 minpoll 4 maxpoll 4 fudge 127.127.22.0 flag3 1 refid PPS server 127.127.28.0 minpoll 4 maxpoll 4 iburst prefer fudge 127.127.28.0 time1 +0.105 flag1 1 refid GPSD stratum 1 tos mindist 0.015 #something about accepting a certain amount of jitter from serial sources * apt-get install gpsd gpsd-clients * systemctl enable gpsd * vi /etc/default/gpsd * Edit devices and options as shown below * # Default settings for the gpsd init script and the hotplug wrapper. # Start the gpsd daemon automatically at boot time START_DAEMON="true" # Use USB hotplugging to add new USB devices automatically to the daemon USBAUTO="true" # Devices gpsd should collect to at boot time. # They need to be read/writeable, either by user gpsd or the group dialout. DEVICES="/dev/ttyAMA0 /dev/pps0" # Other options you want to pass to gpsd GPSD_OPTIONS="-n" * {{ntpsetup.tar|gpsControl files and install.sh}} #for stationary mode (Credit to guppy for creating and Bun-Bun for correcting) * Download linked tar * wget -O ntpsetup.tar http://wiki.sktechworks.ca/lib/exe/fetch.php?media=ntpsetup.tar * tar -xvf ntpsetup.tar * cd ntpsetup * ./install.sh * This copies the gpscontrol files and creates/enables its service. Also makes a gpsd requirement for ntp * Disable NTP from dhcp * echo "" > /etc/dhcp/dhclient-exit-hooks.d/ntp echo "" > /var/lib/ntp/ntp.conf.dhcp chattr +i /etc/dhcp/dhclient-exit-hooks.d/ntp chattr +i /var/lib/ntp/ntp.conf.dhcp * reboot * gpsmon #also cgps -s * ntpq -p #wait a bit so everything can get going * More reading * http://www.unixwiz.net/techtips/raspberry-pi3-gps-time.html * https://ava.upuaut.net/?p=951 ====== Optimizations ====== * https://www.ntpsec.org/white-papers/stratum-1-microserver-howto/ * Add nohz=off to the end of the line in /boot/cmdline.txt * configure system to run cpu full speed * apt -y install cpufrequtils echo 'GOVERNOR="performance"' > /etc/default/cpufrequtils systemctl restart cpufrequtils * Remove useless stuff * apt -y purge bluez triggerhappy wpasupplicant alsa-utils systemctl stop avahi-daemon systemctl disable avahi-daemon apt -y autoremove apt clean * Set serial to low latency * crontab -e @reboot setserial /dev/ttyAMA0 low_latency