Raspberry Pi Stratum 1 NTP Server
In Netzwerken ist der Einsatz eines NTP- Servers zur Zeitsynchronisation unabdingbar. Besonders bei der Aufzeichnung und Korrellation von Ereignissen muss eine verlässliche Zeitquelle vorhanden sein. Da es sich bei NTP um ein hierarchisches System handelt, das UDP als Übertragungsprotokoll verwendet, ist ein Hauptaugenmerk auf einen möglichst geringen Stratum- Level und ein fälschungssicheres Signal der Quelle zu legen.
Üblicherweise werden meist mehrere Zeitserver im Internet zum Abgleich verwendet. Zur Erhöhung der Genauigkeit und der Sicherheit sollte man eine weitere unabhängige Quelle einbinden und die Internet-Systeme lediglich als Backup verwenden. Hier bietet sich das GPS System an. Jeder der aktuell 24 aktiven Satelliten ist mit mehreren Cäsium und Rubidium Atomuhren ausgestattet, die für eine hohe Genauigkeit der Zeitsignale Sorge tragen. Wie man diese Signale im Netzwerk unter Verwendung eines Raspberry Pi als NTP Zeitquelle nutzbar machen kann ist Gegenstand dieses Artikels.
Üblicherweise werden meist mehrere Zeitserver im Internet zum Abgleich verwendet. Zur Erhöhung der Genauigkeit und der Sicherheit sollte man eine weitere unabhängige Quelle einbinden und die Internet-Systeme lediglich als Backup verwenden. Hier bietet sich das GPS System an. Jeder der aktuell 24 aktiven Satelliten ist mit mehreren Cäsium und Rubidium Atomuhren ausgestattet, die für eine hohe Genauigkeit der Zeitsignale Sorge tragen. Wie man diese Signale im Netzwerk unter Verwendung eines Raspberry Pi als NTP Zeitquelle nutzbar machen kann ist Gegenstand dieses Artikels.
Vorbereitung der Hard- und Software

Zum Einsatz kommt bei mir ein Raspberry Pi 2 auf dessen SD-Card die Raspbian Version 9.6 (stretch) installiert wird (2018-11-13-raspbian-stretch), sowie ein GPS- Empfänger mit NEO-7M Chipsatz, der ein PPS Signal bereitstellt und einen externen Antennenanschluss besitzt.
Abhängig vom verwendeten Empfänger muss dieser mit dem Raspberry verbunden werden. Da der o.g. Empfänger seine GPS Daten auch seriell zur Verfügung stellen kann, wurde er über die RxD/TxD Anschlüsse und der PPS Ausgang mit dem GPIO18 des Raspberry verbunden. Die Spannungsversorgung des Empfängermoduls kann ebenfalls vom Raspberry bezogen werden.
Nach dem Aufbau der Hardware und der Grundinstallation des Betriebssystems erfolgt die Anpassung.
1. Netzwerkparameter und Hostname festlegen
2. Location, Zeitzone und Tastaturlayout über raspi-config anpassen
3. Ausgabe von Shell Nachrichten über die serielle Schnittstelle in raspi-config deaktivieren
Weiter geht es mit den Vorbereitungen für das PPS Signal. Hierzu muss in der Datei /boot/config.txt folgende Zeile hinzugefügt werden:
dtoverlay=pps-gpio,gpiopin=18
Um diese Änderung zu aktivieren ist nun ein Neustart notwendig.
Abhängig vom verwendeten Empfänger muss dieser mit dem Raspberry verbunden werden. Da der o.g. Empfänger seine GPS Daten auch seriell zur Verfügung stellen kann, wurde er über die RxD/TxD Anschlüsse und der PPS Ausgang mit dem GPIO18 des Raspberry verbunden. Die Spannungsversorgung des Empfängermoduls kann ebenfalls vom Raspberry bezogen werden.
Nach dem Aufbau der Hardware und der Grundinstallation des Betriebssystems erfolgt die Anpassung.
1. Netzwerkparameter und Hostname festlegen
2. Location, Zeitzone und Tastaturlayout über raspi-config anpassen
3. Ausgabe von Shell Nachrichten über die serielle Schnittstelle in raspi-config deaktivieren
Weiter geht es mit den Vorbereitungen für das PPS Signal. Hierzu muss in der Datei /boot/config.txt folgende Zeile hinzugefügt werden:
dtoverlay=pps-gpio,gpiopin=18
Um diese Änderung zu aktivieren ist nun ein Neustart notwendig.
Installation und Konfiguration der Software
Grundsätzlich sollte das System vor der Installation von Software aktualisiert werden. Dies erfolgt über die bekannte Kombination aus
apt update
und
apt upgrade
Nachdem nun die installierten Pakete und die Paketliste aktualisiert sind, kann es mit der eigentlichen Softwareinstallation losgehen.
apt update
und
apt upgrade
Nachdem nun die installierten Pakete und die Paketliste aktualisiert sind, kann es mit der eigentlichen Softwareinstallation losgehen.
Software für den GPS Empfänger
Neben der Software für den GPS Empfänger selbst wird in diesem Schritt auch gleich die Schnittstelle für das PPS System mit installiert:
apt install gpsd
apt install gps-utils
apt install pps-tools
Die Konfiguration des gpsd erfolgt in der Datei /etc/default/gpsd. Diese sollte folgende Zeilen enthalten:
START_DAEMON="true"
USBAUTO="false"
DEVICES="/dev/ttyAMA0"
GPSD_OPTIONS="-n"
Zur Aktivierung der PPS Funktionalität muss die Zeile
pps-gpio
zur Datei /etc/modules hinzugefügt werden.
Nach einem Neustart des Systems sollten die PPS Module geladen sein:
lsmod | grep pps
pps_ldisc 2413 2
pps_gpio 3089 0
pps_core 8606 3 pps_gpio,pps_ldisc
Zudem sollte das PPS Device gefunden werden was besagt, dass der Kernel auch eine Unterstützung dafür
eingebaut hat:
dmesg|grep pps
[ 4.414249] pps_core: LinuxPPS API ver. 1 registered
[ 4.422411] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 4.503273] pps pps0: new PPS source pps@12.-1
[ 4.511611] pps pps0: Registered IRQ 163 as PPS source
[ 6844.328489] pps_ldisc: PPS line discipline registered
[ 6844.332769] pps pps1: new PPS source ttyAMA0
[ 6844.332878] pps pps1: source "/dev/ttyAMA0" added
Ob das PPS Device ordnungsgemäß funktioniert kann man mit dem Befehl
ppstest /dev/pps0
testen:
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1549207946.001432222, sequence: 16948 - clear 0.000000000, sequence: 0
source 0 - assert 1549207947.001432641, sequence: 16949 - clear 0.000000000, sequence: 0
source 0 - assert 1549207948.001433060, sequence: 16950 - clear 0.000000000, sequence: 0
Abgebrochen wird die Ausgabe mit STRG+C.
Das GPS sollte nun funktionsbereit sein. Kontrollieren kann man das mittels des Befehls
cgps -s
der eine Ausgabe ähnlich der folgenden zeigen sollte:
apt install gpsd
apt install gps-utils
apt install pps-tools
Die Konfiguration des gpsd erfolgt in der Datei /etc/default/gpsd. Diese sollte folgende Zeilen enthalten:
START_DAEMON="true"
USBAUTO="false"
DEVICES="/dev/ttyAMA0"
GPSD_OPTIONS="-n"
Zur Aktivierung der PPS Funktionalität muss die Zeile
pps-gpio
zur Datei /etc/modules hinzugefügt werden.
Nach einem Neustart des Systems sollten die PPS Module geladen sein:
lsmod | grep pps
pps_ldisc 2413 2
pps_gpio 3089 0
pps_core 8606 3 pps_gpio,pps_ldisc
Zudem sollte das PPS Device gefunden werden was besagt, dass der Kernel auch eine Unterstützung dafür
eingebaut hat:
dmesg|grep pps
[ 4.414249] pps_core: LinuxPPS API ver. 1 registered
[ 4.422411] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 4.503273] pps pps0: new PPS source pps@12.-1
[ 4.511611] pps pps0: Registered IRQ 163 as PPS source
[ 6844.328489] pps_ldisc: PPS line discipline registered
[ 6844.332769] pps pps1: new PPS source ttyAMA0
[ 6844.332878] pps pps1: source "/dev/ttyAMA0" added
Ob das PPS Device ordnungsgemäß funktioniert kann man mit dem Befehl
ppstest /dev/pps0
testen:
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1549207946.001432222, sequence: 16948 - clear 0.000000000, sequence: 0
source 0 - assert 1549207947.001432641, sequence: 16949 - clear 0.000000000, sequence: 0
source 0 - assert 1549207948.001433060, sequence: 16950 - clear 0.000000000, sequence: 0
Abgebrochen wird die Ausgabe mit STRG+C.
Das GPS sollte nun funktionsbereit sein. Kontrollieren kann man das mittels des Befehls
cgps -s
der eine Ausgabe ähnlich der folgenden zeigen sollte:
![]() |
Wichtig ist hierbei, dass der Status "3D FIX" anzeigt, was besagt, dass der GPS Empfänger ein sogenanntes Lock der Satelliten erreicht hat.
NTP
Die Installation von ntp kann, im Gegensatz zu früheren Raspbian Versionen, bei denen ntp aus den Sources kompiliert werden musste, direkt aus den Repositories erfolgen:
apt install ntp
Was nun noch fehlt ist die Anpassung der Konfigurationsdatei.
apt install ntp
Was nun noch fehlt ist die Anpassung der Konfigurationsdatei.
/etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift
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
server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
restrict 127.0.0.1
restrict ::1
restrict source notrap nomodify noquery
tinker step 0.4 stepback 0.4 stepfwd 0.4
server 127.127.22.0 minpoll 4 maxpoll 4
fudge 127.127.22.0 refid PPS stratum 0 flag3 1 flag4 1
server 127.127.28.0 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.0 time1 +0.130 refid GPS stratum 2
Nach einem Neustart des ntp Dienstes sollte nach dem Befehl
ntpq -c peers -c rv
eine Ausgabe ähnlich der folgenden sichtbar werden:
ntpq -c peers -c rv
eine Ausgabe ähnlich der folgenden sichtbar werden:

Das war es auch schon. Der Raspberry Pi kann nun im Netzwerk als Stratum 1 Zeitserver verwendet werden.
Ach ja...

und das ganze passt dann in ein herkömmliches Gehäuse für einen Raspberry Pi.