Quelle: Wikipedia |
Lokale PC-Uhren sind gern etwas ungenau; und das oft nicht nur ein paar Millisekunden - sondern gar gleich um etliche Sekunden, Minuten, Stunden. Folgefehler sind somit leider recht unausweichlich.
Was also tun?
Wir bauen uns einen Zeitempfänger.
[ Hier geht's weiter. ]
Man könnte das gute alte DCF77-Signal nutzen, welches in Deutschland die genaue Atom-Zeit via Radiosignal aussendet. Aber auch dieses unterliegt leider immer wieder einmal Änderungen im Protokoll: Neuerdings werden z.B. Wetterinformationen im Signal mit bereit gestellt und viele "alte" Empfänger, die nun jahrelang problemlos ihren Dienst getan haben, laufen nun in Probleme.
Auch kosten solche Zeitempfänger nicht gerade wenig Geld:
Bei einem einiger maßen passablen USB-DCF77-Empfänger geht es los bei 100 € (Stand 2015-06). "Schätzeisen" als Bausätze gibt es schon ab 20 Euro -
doch die sind mit "Frickelei" verbunden: Justieren, ein Gehäuse, die Zeit zum Bauen, etc. pp. - das lohnt kaum.
Zudem hat das DCF77-Signal einen kleinen Nachteil:
Es ist generell nur ~ 1.500 Kilometer um Deutschland herum empfangbar.
Im Normalfall wird niemand einen Server spazieren fahren -
doch vielleicht sollte uns das auf eine Idee bringen.
Denn wie lokalisiert man eigentlich bei beweglichen Systemem die Uhrzeit....?
Genau!
Es gibt doch GPS!
Dort ist im Sendesignal neben den Koordinaten auch die Zeit versteckt.
Fertige GPS-Empfänger die für das Preis-Leistungsverhältnis eine sehr gute Empfangsqualität besitzten, werden z.B. in einem Online-Auktionshaus für keine 20 Euro inkl. Versand angeboten.
Ich persönlich habe mir den GPS/Glonass-Empfänger "U-blox7 G-7020" von "U-blox" genauer angesehen: Dieser wurde im Online-Kaufhaus meiner Wahl für keine 16 € Angeboten -
und dazu habe ich mir noch ein USB-Verlängerungskabel für 2 € dazu bestellt.
Und wie aktiviere ich das ganze nun auf einem CentOS 6.5 Linux?
Nichts einfacher als das....
- Benötigte Quellen: gpsd
Der GPS-deamon entlockt unserem GPS-Empfänger seine Daten.
Das Paket kann auf der gpsd-Projektseite befindet sich unter:
https://savannah.nongnu.org/projects/gpsd/
bzw. kann der Quellcode in Version 3.15 hier herunter geladen werden:
http://download.savannah.gnu.org/releases/gpsd/gpsd-3.15.tar.gz
gpsd ist kompatibel mit folgenden Chipsätzen:
Generic NMEA, Ashtech, San Jose Navigation FV18, Furuno Electric GH-79L4, Garmin Serial, Delorme TripMate, Delorme EarthMate (pre-2003, Zodiac chipset), Zodiac binary, Navcom binary, uBlox UBX, Garmin, USB binary, Garmin Serial binary, SiRF binary, Trimble TSIP, EverMore binary, iTalk binary, RTCM104, Garmin Simple Text
bzw. mit folgenden GPS-Empfängern:
NaviLock NL-202U, NaviLock NL-302U (läuft sofort unter /dev/ttyUSB0), NaviLock NL-402U (starten mit gpsd -b /dev/ttyACM0), NaviLock NL-409TE (läuft sofort unter /dev/ttyUSB0), NaviLock NL-454US (sofort mit gpsd /dev/ttyUSB0), Holux GM210 USB (Modul pl2303), iGPS-M Pro USB (wird als CP2101 erkannt, Modul cp2101, läuft sofort mit /dev/ttyUSB0), QSTARZ BT-Q818, TomTom wireless GPS MkII, No-Name Produkt mit Sirf III Chipsatz (läuft sofort mit /dev/ttyUSB0), GlobalSat BU-353 (läuft sofort mit /dev/ttyUSB0), Garmin eTrex Legend® HCx (Modul garmin_gps, /dev/ttyUSB0), Garmin GPSMap 60CSx (Modul garmin_gps, /dev/ttyUSB0), Mainnav-GPS (über Bluetooth), Fortuna Clip-On (über Bluetooth) - Benötigte Quellen: scons
Scons ist eine Art Builder - denn das gpsd-Team bereitet seine Files nicht mit dem üblichen "make" vor. Die Projektseite von scons lautet:
http://www.scons.org/
Um den Aufwand zu minimieren, kann ein fertiges rpm-paket der Version 2.3.4 herunter geladen werden.
http://prdownloads.sourceforge.net/scons/scons-2.3.4-1.noarch.rpm
Der Quellcode - sofern für Enthusiasten benötigt, die selber compilieren möchten - befindet sich hier:
http://prdownloads.sourceforge.net/scons/scons-2.3.4.zip - Benötigte Quellen: ntpd und ntpdate
Der ntp-deamon synchronisiert die lokale PC-Uhr mit den empfangenen Werten.
Die Projektwebseite befindet sich unter:
http://www.ntp.org/downloads.html
Glücklicher Weise beifnden sich die Pakete für den ntp-deamon bereits in CentOS im Standard-umfang bzw. können über "yum" problemlos installiert werden.
Anderenfalls können die benötigten Pakete hier herunter geladen werden:
http://mirror.centos.org/centos/6/os/x86_64/Packages/ntp-4.2.6p5-1.el6.centos.x86_64.rpm
http://mirror.centos.org/centos/6/os/x86_64/Packages/ntpdate-4.2.6p5-1.el6.centos.x86_64.rpm - Benötigte Quellen: gcc, ncurses ncurses-devel, phyton-devel
Die besagten Pakete sollten - wie der ntpd - wirklich von der CentOS-Community bezogen und nicht wirklich selbst angepasst werden.... das kann nur schief gehen...
- Installation: Vorbereiten der Umgebung; Installation der vorgefertigten Pakete
Pro forma installieren wir Pakete, die eigentlich schon vorhanden sein sollten...yum install gcc ncurses ncurses-devel ntpd
- PPS im Kernel aktivieren
Um das Timing des gpsd auch verarbeiten zu können, benötigen wir das Kernel-Modul pps_core, welches natürlich bei jedem Systemstart auch geladen werden sollte.
Erstellen der Datei /etc/sysconfig/modules/ntp.modules#!/bin/sh
modprobe -b pps_core > /dev/null 2>&1
exit 0
und setzen der Berechtigungenchown root:root /etc/sysconfig/modules/ntp.modules
chmod 755 /etc/sysconfig/modules/ntp.modules - Installation: Scons
Das oben genannte und herunter geladene rpm-Paket scons-2.3.4-1.noarch.rpm wird nun wie üblich über rpm installiert.rpm -ivh scons-2.3.4-1.noarch.rpm
- Compilieren von gpsd
tar -zxvf gpsd-3.15.tar.gz
Nun muss der gpsd noch auf unsere GPS-Maus konfiguriert werden.
cd gpsd-3.15
scons
scons check
scons install
scons udev-install
cp gpsd /usr/sbin/
cp xgpsd /usr/sbin/
cp gpxlogger /usr/sbin/
cp ntpshmmon /usr/sbin/
cp packaging/rpm/gpsd.init /etc/init.d/gpsd
chmod 755 /etc/init.d/gpsd
cp packaging/rpm/gpsd.sysconfig /etc/sysconfig/gpsd
chmod 644 /etc/sysconfig/gpsd - Finden unseres USB-GPS-Gerätes
Mit "dmesg" zeigen wir uns einmal an, was denn aktuell am usb-Port eingesteckt wurde:# dmesg
...
usb 5-1.1.2: new full speed USB device number 4 using ohci_hcd
usb 5-1.1.2: New USB device found, idVendor=1546, idProduct=01a7
usb 5-1.1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 5-1.1.2: Product: u-blox 7 - GPS/GNSS Receiver
usb 5-1.1.2: Manufacturer: u-blox AG - www.u-blox.com
usb 5-1.1.2: configuration #1 chosen from 1 choice
cdc_acm 5-1.1.2:1.0: ttyACM0: USB ACM device
#
Unser Gerät ist angeschlossen und hat also den Gerätenamen /dev/ttyACM0 - Konfigurieren und testen des gpsd-Dienstes.
Editieren wir die Datei /etc/sysconfig/gpsd
Folgende Konfiguration habe ich fpr die GPS-Maus names U-Blox7 gewählt.
vi /etc/sysconfig/gpsd
# OPTIONS="-n"
# USBAUTO="true"
OPTIONS="-b -n"
DEVICE="/dev/ttyACM0"
Wenn wir nun den gpsd mitgpsd -b -n -N -D5 /dev/ttyACM0
starten, sollten kene bösen Fehlermeldungen erscheinen.
Update: Es gibt wohl hin und wieder Probleme von gpsd beim initialisieren der Mouse.
Den deamon unter /etc/rc.d/init.d/gpsd entsprechend erweitern:
Anschließend sind wir mit 9600 Baud 8,n,1 immer gut dabei...[...]
start() {
[ "$EUID" != "0" ] && exit 4
echo -n $"Starting $prog: "
# /dev/ttyACM0 identified as type NMEA0183, 0 sec @ 9600bps
# setserial $DEVICE low_latency
stty -F $DEVICE 9600 raw cs8 parenb -cstopb -clocal
[...] - Konfigurieren von ntpd
Anbei eine sehr sehr rudimentäre Konfiguration der Datei /etc/ntp.conf ...
# files
driftfile /var/lib/ntp/drift
statsdir /var/log/ntpstats/
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
# fw
# ggf. hier noch das lokale Netz frei nehmen...
# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
# GPS_NMEA Type 20
server 127.127.20.0 prefer
# fudge 127.127.20.0 flag1 1 time2 0.400
fudge 127.127.20.0 flag1 1
# Shared Memory Driver (pushed by gpsd) Type 28
server 127.127.28.0 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.0
# ntp-pool
# ggf. andere Server wie nist, uni, btp ergänzen
server 0.de.pool.ntp.org
server 1.de.pool.ntp.org
server 2.de.pool.ntp.org
server 3.de.pool.ntp.org
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
Update:
# GPS_NMEA Type 20
server 127.127.20.0 mode 16 prefer
fudge 127.127.20.0 flag1 1 time2 0.400
# Shared Memory Driver (pushed by gpsd) Type 28
# server 127.127.28.0 prefer
# fudge 127.127.28.0 refid SHM
server 127.127.28.0 minpoll 4 maxpoll 4
fudge 127.127.28.0 time1 0.535
# server 127.127.28.1 minpoll 4 maxpoll 4 prefer
# fudge 127.127.28.1 refid PPS - Fallstricke: SELinux...
Wir erstellen die Datei "ntpd-2015-06-05.te"
module ntpd-2015-06-05 1.1;
require {
type ntpd_t;
type initrc_state_t;
type initrc_t;
class shm { unix_read read write unix_write associate };
class file { read write };
class capability sys_admin;
}
#============= ntpd_t ==============
allow ntpd_t initrc_state_t:file { read write };
allow ntpd_t initrc_t:shm { unix_read read write unix_write associate };
allow ntpd_t self:capability sys_admin;
Und machen diese zu einem festen Regelwerkcheckmodule -M -m -o ntpd-2015-06-05.mod ntpd-2015-06-05.te semodule_package -o ntpd-2015-06-05.pp -m ntpd-2015-06-05.mod semodule -i ntpd-2015-06-05.pp
Sonstig - viel Spaß.... - Dauerhaftes aktivieren von gpsd und ntpd als Systemdienst
chkconfig gpsd on
service gpsd restart
chkconfig ntpd on
service ntpd restart - Das war's....
Am Rande sei erwähnt, dass aber schon jetzt so eine USB-DCF77-Uhr für gute 60 Euro bzw. eine GPS-Uhr für 200 Euro aufwärts eingespart wird.
...natürlich kann man so eine Lösung nicht gerade mit einer Uhr aus Horn Bad-Meinberg vergleichen - aber für den "kleinen Mann" erfüllt diese durchaus die Norm.
Keine Kommentare:
Kommentar veröffentlichen