In vielerlei Hinsicht ist es wichtig,dass Netzwerkgeräte und Server über die gleiche Uhrzeit verfügen. Aufgrund vieler Umstände kommt es immer wieder innerhalb kürzester Zeit vor, dass die Uhrzeiten der einzelnen Teilnehmer „auseinanderlaufen“. Für den Zeitabgleich existiert das Network-Time-Protocol, dass wir uns in diesem Beitrag für den Zeitabgleich zu Nutze machen. Unser NTP-Server, welchen wir Schritt für Schritt einrichten, bezieht seine Uhrzeit via GPS und stellt diese im Netzwerk zur Verfügung.
Eine kleine Anmerkung in eigener Sache: Klenzel.de feiert seinen 100. Beitrag.
Mit Erscheinung dieses Beitrages haben wir nun eine dreistellige Anzahl erreicht.
Falls wir planen, unseren GPS-Empfänger via Bluetooth anzubinden, bereiten wir unser System auf die Verwendung eines Bluetooth-USB-Sticks vor, wie es in diesem Beitrag ausführlich beschrieben wurde. Wir überprüfen anschließend den Status mit
Shell
1
/etc/init.d/bluetooth status
und erhalten im Erfolgsfall folgende Ansicht:
USB-GPS-Maus
Falls wir eine USB-GPS-Maus verwenden, schließen wir diese nun an unserem Raspberry an und prüfen mit
Shell
1
dmesg
als welches Gerät die GPS-Maus in unserem System eingebunden wurde. Standardmäßig entspricht dies dem Gerät „/dev/ttyUSB0„. Das merken wir uns für die spätere Konfiguration.
Bluetooth-GPS-Maus
Setzen wir eine Bluetooth-GPS-Maus ein, müssen wir diese zunächst finden, konfigurieren und verbinden. Falls wir die MAC-Adresse unserer GPS-Maus nicht auswendig kennen, ermitteln wir diese mit
Shell
1
hcitool scan
Dieses Tool scannt die erreichbare Umgebung nach aktiven Bluetooth-Komponenten und listet diese anschließend mitsamt der MAC-Adressen auf.
Anschließend binden wir, zunächst manuell, die GPS-Maus als Gerät in unser System ein:
Shell
1
rfcomm bind/dev/rfcomm000:02:78:AA:BB:CC
Damit die Einbindung künftig automatisch beim Systemstart erfolgt, erstellen wir für die GPS-Maus einen neuen Dienst (ab Raspbian Wheezy mit systemd), indem wir die Datei „/etc/systemd/system/rfcomm.service“ mit folgendem Inhalt erstellen:
Da wir das Gerät zuvor manuell ins System eingebunden haben bzw. sowieso vorhanden ist wenn eine USB-GPS-Maus eingesetzt wird, können wir bereits jetzt prüfen, ob die Verbindung hergestellt werden kann und die GPS-Maus Daten ausgibt. Dazu geben wir einfach den Inhalt der entsprechenden Gerätedatei aus mit
Shell
1
cat/dev/rfcomm0
…für eine Bluetooth-GPS-Maus bzw. mit…
Shell
1
cat/dev/ttyUSB0
…für einen via USB angeschlossenen GPS-Empfänger.
Wie wir an dieser Ausgabe sehen, meldet unser GPS-Empfänger bereits fleißig (NMEA-)Daten. Diese Ausgabe können wir mit der Tastenkombination „STRG+C“ abbrechen.
GPS-Zeit auslesen und zur Verfügung stellen
Nun ist es an der Zeit, unsere GPS-Daten, die auch die aktuelle Uhrzeit enthalten, sinnvoll einzusetzen. Dazu installieren wir einen Dienst, der unseren künftigen NTP-Server mit der Uhrzeit aus den GPS-Daten versorgt:
Shell
1
apt-getinstall gpsd gpsd-clients
Nach der Installation ändern wir die Startparameter des GPSd-Dienstes. Dazu editieren wir die Datei „/etc/default/gpsd“ und passen den Inhalt wie folgt an:
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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="false"
# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/rfcomm0"
# Other options you want to pass to gpsd
GPSD_OPTIONS="-b -n"
Zur Erklärung:
Zunächst geben wir an, dass der Dienst beim Systemstart automatisch geladen werden soll; eine automatische Konfiguration von GPS-Empfänger lehnen wir ab.
Zudem geben wir die Gerätedatei unseres GPS-Empfängers an, die wir in den ersten Schritten dieses Beitrags ermittelt haben.
Wir geben die zusätzliche Startoption „-n“ an. Mit dieser Option wird auf keinen bestimmten Client gewartet, wenn die Zeit vom GPS-Empfänger ausgelesen werden soll. Verwenden wir eine Bluetooth-GPS-Maus, geben wir zusätzlich die Option „-b“ an die besagt, dass eine nur lesende Verbindung zu einem Bluetooth-Gerät hergestellt wird.
Nach dem Bearbeiten und Speichern der Datei sollte der Dienst „gpsd“ mit
Shell
1
systemctl restart gpsd.service
neu gestartet werden und danach können wir mit
Shell
1
cgps
unsere GPS-Daten in formatierter Form anzeigen lassen.
Zeitserver installieren
Der Dienst „gpsd“ stellt nun fortlaufend die Uhrzeit aus den GPS-Daten zur Verfügung. Nun installieren und konfigurieren wir den eigentlichen Zeitserver, der sich dieser Daten bedient. Die Installation führen wir wie gewohnt mit unserem Paketmanager durch:
Shell
1
apt-getinstall ntpntpdate
Vor dem Start des NTP-Dienstes passen wir die Konfiguration unseren Bedürfnissen an. Dazu editieren wir die Datei „/etc/ntp.conf“ und fügen am Ende folgende Zeitquellen ein:
Shell
1
2
3
4
server127.127.28.0minpoll4
fudge127.127.28.0time10.183refid NMEA
server127.127.28.1minpoll4prefer
fudge127.127.28.1refid PPS
Da die IP-Adressen stets auf den eigenen Rechner (localhost) verweisen, müssen diese nicht angepasst werden und sind für jede Installation passend.
Wir verbleiben in dieser Konfigurationsdatei und erlauben nun den Zugriff auf unseren Zeitdienst. Dazu bewegen wir uns zum folgenden Bereich:
Shell
1
2
# Clients from this (example!) subnet have unlimited access, but only if
eine weitere Zeile ein, mit der wir den Zeitabgleich für unser Netzwerk „192.168.1.0/24“ freigeben:
Shell
1
restrict192.168.1.0mask255.255.255.0nomodify
Als letzten Schritt vor dem Start des NTP-Dienstes sorgen wir für einen manuellen Zeitabgleich für den Fall, dass unsere Systemzeit zu stark von der GPS-Zeit abweicht.
Shell
1
ntpdate-uptbtime1.ptb.de
Jetzt können wir unseren Zeitserver mit
Shell
1
/etc/init.d/ntp start
starten.
Wir prüfen, ob sich unser NTP-Server der GPS-Zeit bedient mit:
Shell
1
watch-n1 ntpq-p
Die Ausgabe zeigt, wenn alle bisherigen Schritte erfolgreich verlaufen sind, dass der NTP-Server seine Zeit via GPS (mit dem Protokoll NMEA) bezieht und unsere Systemzeit rund drei Millisekunden abweicht:
Diese Anzeige kann mit der Tastenkombination „STRG+C“ abgebrochen werden.
Einrichtung auf den Clients
Damit unsere Clients nun die Uhrzeit von unserem NTP-Server beziehen können, installieren wir das Paket „ntp“ mittels
Shell
1
apt-getinstall ntp
Anschließend tragen wir die IP unseres eigenen NTP-Servers (also die des Raspberrys, in diesem Beispiel 192.168.1.127) in die NTP-Konfigurationsdatei „/etc/ntp/ntp.conf“ ein und entfernen die während der Installation vorgegebenen Server:
Shell
1
server192.168.1.127iburst
Vor dem Start des NTP-Dienstes führen wir auch hier zunächst einen manuellen Abgleich durch. Dabei geben wir den Schalter „-g“ an, damit auch Zeitdifferenzen von über 1000 Sekunden korrigiert werden.
Shell
1
ntpd-q-g
Nun können wir den NTP-Dienst auf unserem Client starten:
Shell
1
/etc/init.d/ntp start
Verfügt unser Linux-Client im Gegensatz zu einem Raspberry über eine Hardware-Uhr, kann diese mit
Shell
1
hwclock--systohc
an die Systemzeit angeglichen werden.
Letztendlich prüfen wir unser Vorgehen mit
Shell
1
watch-n1 ntpq-p
Unser Client sollte nun die Zeit von unserem NTP-Server beziehen, der wiederum sein „Wissen“ aus den NMEA-Daten bezieht.
Diese Anzeige kann mit der Tastenkombination „STRG+C“ abgebrochen werden.
Eigener GPS-NTP-Server mit dem Raspberry
In vielerlei Hinsicht ist es wichtig,dass Netzwerkgeräte und Server über die gleiche Uhrzeit verfügen. Aufgrund vieler Umstände kommt es immer wieder innerhalb kürzester Zeit vor, dass die Uhrzeiten der einzelnen Teilnehmer „auseinanderlaufen“. Für den Zeitabgleich existiert das Network-Time-Protocol, dass wir uns in diesem Beitrag für den Zeitabgleich zu Nutze machen. Unser NTP-Server, welchen wir Schritt für Schritt einrichten, bezieht seine Uhrzeit via GPS und stellt diese im Netzwerk zur Verfügung.
Inhaltsverzeichnis
Klenzel.de feiert seinen 100. Beitrag.
Mit Erscheinung dieses Beitrages haben wir nun eine dreistellige Anzahl erreicht.
Mehr dazu im Jubiläums-Blogbeitrag.
Bluetooth überprüfen
Falls wir planen, unseren GPS-Empfänger via Bluetooth anzubinden, bereiten wir unser System auf die Verwendung eines Bluetooth-USB-Sticks vor, wie es in diesem Beitrag ausführlich beschrieben wurde. Wir überprüfen anschließend den Status mit
und erhalten im Erfolgsfall folgende Ansicht:
USB-GPS-Maus
Falls wir eine USB-GPS-Maus verwenden, schließen wir diese nun an unserem Raspberry an und prüfen mit
als welches Gerät die GPS-Maus in unserem System eingebunden wurde. Standardmäßig entspricht dies dem Gerät „/dev/ttyUSB0„. Das merken wir uns für die spätere Konfiguration.
Bluetooth-GPS-Maus
Setzen wir eine Bluetooth-GPS-Maus ein, müssen wir diese zunächst finden, konfigurieren und verbinden. Falls wir die MAC-Adresse unserer GPS-Maus nicht auswendig kennen, ermitteln wir diese mit
Dieses Tool scannt die erreichbare Umgebung nach aktiven Bluetooth-Komponenten und listet diese anschließend mitsamt der MAC-Adressen auf.
Anschließend binden wir, zunächst manuell, die GPS-Maus als Gerät in unser System ein:
Damit die Einbindung künftig automatisch beim Systemstart erfolgt, erstellen wir für die GPS-Maus einen neuen Dienst (ab Raspbian Wheezy mit systemd), indem wir die Datei „/etc/systemd/system/rfcomm.service“ mit folgendem Inhalt erstellen:
Dabei ist natürlich die MAC-Adresse an das eigene Gerät anzupassen.
Anschließend aktivieren wir den neuen Dienst mit
und prüfen mit einem Neustart, ob die GPS-Maus beim Systemstart automatisch unter „/dev/rfcomm0“ eingebunden wird:
Die Ausgabe sollte in etwa so aussehen:
GPS-Daten prüfen
Da wir das Gerät zuvor manuell ins System eingebunden haben bzw. sowieso vorhanden ist wenn eine USB-GPS-Maus eingesetzt wird, können wir bereits jetzt prüfen, ob die Verbindung hergestellt werden kann und die GPS-Maus Daten ausgibt. Dazu geben wir einfach den Inhalt der entsprechenden Gerätedatei aus mit
…für eine Bluetooth-GPS-Maus bzw. mit…
…für einen via USB angeschlossenen GPS-Empfänger.
Wie wir an dieser Ausgabe sehen, meldet unser GPS-Empfänger bereits fleißig (NMEA-)Daten. Diese Ausgabe können wir mit der Tastenkombination „STRG+C“ abbrechen.
GPS-Zeit auslesen und zur Verfügung stellen
Nun ist es an der Zeit, unsere GPS-Daten, die auch die aktuelle Uhrzeit enthalten, sinnvoll einzusetzen. Dazu installieren wir einen Dienst, der unseren künftigen NTP-Server mit der Uhrzeit aus den GPS-Daten versorgt:
Nach der Installation ändern wir die Startparameter des GPSd-Dienstes. Dazu editieren wir die Datei „/etc/default/gpsd“ und passen den Inhalt wie folgt an:
Zur Erklärung:
Zunächst geben wir an, dass der Dienst beim Systemstart automatisch geladen werden soll; eine automatische Konfiguration von GPS-Empfänger lehnen wir ab.
Zudem geben wir die Gerätedatei unseres GPS-Empfängers an, die wir in den ersten Schritten dieses Beitrags ermittelt haben.
Wir geben die zusätzliche Startoption „-n“ an. Mit dieser Option wird auf keinen bestimmten Client gewartet, wenn die Zeit vom GPS-Empfänger ausgelesen werden soll. Verwenden wir eine Bluetooth-GPS-Maus, geben wir zusätzlich die Option „-b“ an die besagt, dass eine nur lesende Verbindung zu einem Bluetooth-Gerät hergestellt wird.
Nach dem Bearbeiten und Speichern der Datei sollte der Dienst „gpsd“ mit
neu gestartet werden und danach können wir mit
unsere GPS-Daten in formatierter Form anzeigen lassen.
Zeitserver installieren
Der Dienst „gpsd“ stellt nun fortlaufend die Uhrzeit aus den GPS-Daten zur Verfügung. Nun installieren und konfigurieren wir den eigentlichen Zeitserver, der sich dieser Daten bedient. Die Installation führen wir wie gewohnt mit unserem Paketmanager durch:
Vor dem Start des NTP-Dienstes passen wir die Konfiguration unseren Bedürfnissen an. Dazu editieren wir die Datei „/etc/ntp.conf“ und fügen am Ende folgende Zeitquellen ein:
Da die IP-Adressen stets auf den eigenen Rechner (localhost) verweisen, müssen diese nicht angepasst werden und sind für jede Installation passend.
Wir verbleiben in dieser Konfigurationsdatei und erlauben nun den Zugriff auf unseren Zeitdienst. Dazu bewegen wir uns zum folgenden Bereich:
und fügen unter der auskommentierten Zeile
eine weitere Zeile ein, mit der wir den Zeitabgleich für unser Netzwerk „192.168.1.0/24“ freigeben:
Als letzten Schritt vor dem Start des NTP-Dienstes sorgen wir für einen manuellen Zeitabgleich für den Fall, dass unsere Systemzeit zu stark von der GPS-Zeit abweicht.
Jetzt können wir unseren Zeitserver mit
starten.
Wir prüfen, ob sich unser NTP-Server der GPS-Zeit bedient mit:
Die Ausgabe zeigt, wenn alle bisherigen Schritte erfolgreich verlaufen sind, dass der NTP-Server seine Zeit via GPS (mit dem Protokoll NMEA) bezieht und unsere Systemzeit rund drei Millisekunden abweicht:
Diese Anzeige kann mit der Tastenkombination „STRG+C“ abgebrochen werden.
Einrichtung auf den Clients
Damit unsere Clients nun die Uhrzeit von unserem NTP-Server beziehen können, installieren wir das Paket „ntp“ mittels
Anschließend tragen wir die IP unseres eigenen NTP-Servers (also die des Raspberrys, in diesem Beispiel 192.168.1.127) in die NTP-Konfigurationsdatei „/etc/ntp/ntp.conf“ ein und entfernen die während der Installation vorgegebenen Server:
Vor dem Start des NTP-Dienstes führen wir auch hier zunächst einen manuellen Abgleich durch. Dabei geben wir den Schalter „-g“ an, damit auch Zeitdifferenzen von über 1000 Sekunden korrigiert werden.
Nun können wir den NTP-Dienst auf unserem Client starten:
Verfügt unser Linux-Client im Gegensatz zu einem Raspberry über eine Hardware-Uhr, kann diese mit
an die Systemzeit angeglichen werden.
Letztendlich prüfen wir unser Vorgehen mit
Unser Client sollte nun die Zeit von unserem NTP-Server beziehen, der wiederum sein „Wissen“ aus den NMEA-Daten bezieht.
Diese Anzeige kann mit der Tastenkombination „STRG+C“ abgebrochen werden.
Verwandte Beiträge
Manche Vorgänge am Raspberry Pi führen wir immer und immer wieder durch. Daher möchte ich…
Als ich mich für ein neues Projekt auf die Suche nach der Pin-Belegung der einzelnen…
Für ein neues Projekt wollte ich bei bestimmten Interaktionen mit dem Raspberry eine akustische Rückmeldung…
In einem früheren Beitrag habe ich darüber berichtet, wie man den Temperatur- und Luftfeuchtigkeitssensor DHT22…
Es existieren mehrere Möglichkeiten, die GPIO-Ports eines Raspberry Pi zu steuern oder deren Stati auszulesen. Den…