Dieses Paket wurde initial von Albert Steiner (E-MAIL albert.steiner.dw@gmx.at) zusammengestellt und später von Jürgen Edner (E-MAIL juergen@eisfair.org) überarbeitet.
NTP ist das Network Time Protocol, der Server funktioniert damit auch als NTP Server/Client d.h. man kann mit Hilfe von NTP-Server/Clientprogrammen den Linux Rechner als NTP Server/Client im LAN verwenden.
Das NTP-Paket besteht aus folgenden Komponenten:
Dieses Paket benötigt zur korrekten Funktion ein installierten Perl-Paket und einige andere Perl-Funktionspakete.
Das NTP-Paket wird über das Setup-Menü installiert. Wird eine ältere Paketversion vorgefunden, so wird deren Konfiguration gesichert und das alte Paket deinstalliert bevor die neuen Programmdateien installiert und die Konfiguration übernommen wird. Danach wird direkt der Konfigurations-Editor gestartet um die Konfiguration eventuell anpassen zu können. Nach Beendigung dieses Schrittes werden die Konfigurationsdateien generiert und das benötigte Programm gestartet.
Das Menü im Setup-Programm ist wie folgt aufgebaut:
Die Menüpunkte dürften selbsterklärend sein, da sie keinerlei weitere Eingaben erwarten. Aus diesem Grund wird auf deren Funktion nicht weiter eingegangen.
Für den Betrieb braucht man nicht zwingend einen eigenen Empfänger!
Es gibt 3 Varianten, die Zeitinformation für eisfair zu erhalten:
Wenn man einen eigenen Empfänger verwenden möchte, so muss man ein Gerät aus der Liste der unterstützten Geräte auswählen oder eines selber bauen.
Für den Bau eines eigenen DCF77 Empfängers gibt es eine Anleitung bei:
http://www.obbl-net.de/dcf77.html
Ich habe diese Anleitung benutzt und es funktioniert super, nur sollte man den Empfänger mit 5V versorgen, da die Schnittstellen manchmal zu wenig liefern, mit einem Asus TUV4X ging es nicht ohne!
Es müssen mindestens zwei Zeitquellen (time sources) definiert werden. Mehr als drei Zeitquellen bringen keine erhöhte Genauigkeit. Aus Gründen der Redundanz können jedoch mehrere angegeben werden. Das Intervall für den Abgleich verwaltet der ntpd selbstständig in Abhängigkeit von der Zeitdifferenz und weiteren Faktoren.
Nr. 1 - Type 1 Undisciplined Local Clock (LOCAL) Nr. 2 - ein Zeitserver, der per Netzwerk erreichbar ist. (LAN oder WAN)
Die Zeitserver im Internet sind hierarchisch organisiert. Es gibt sog. Primary Time Sources, Secondary Time Sources etc. (siehe www.ntp.org Public Time Server List)
In vielen Dokumentationen wird ein Zeitserver der PTB (siehe http://www.ptb.de) angegeben. Das ist ein stratum 1 Server.
Für ein Heimnetzwerk oder ein Firmennetz, das nicht eine auf die Millisekunde genaue Zeit benötigt, kann zur Entlastung o.a. Server 'de.pool.ntp.org' genutzt werden. (siehe http://www.pool.ntp.org/zone/europe)
Zumeist ist es von Vorteil, im eigenen Netz eine 'Zeithierachie' zu etablieren. Ein oder zwei Server holen die Zeit von einer externen Quelle. Alle Rechner im Hausnetz holen die Zeit von diesen ein oder zwei Servern. (alle haben identische Zeit, ggf. alle die 'falsche'!)
NTP wurde mit allen möglichen Referenzuhren kompiliert!
Genauere Informationen: http://www.eecis.udel.edu/~mills/ntp/html/refclock.html
Die Konfiguration kann über den Menüpunkt 'Edit configuration' geändert werden. Standardmäßig wird der Editor aufgerufen, der in der Environment- Konfiguration über die Variable 'EDITOR' festgelegt wurde. Nachdem der Editor beendet wurde wird abgefragt, ob die Konfiguration aktiviert werden soll. Wird dies bestätigt, werden über ein Skript die Anpassungen umgehend wirksam gemacht
In der Konfigurationsdatei, welche über das Menü zugänglich ist, sind folgende Parameter vorhanden; wer sie von Hand editieren will findet die Konfigurationsdatei unter /etc/config.d/ntp.
Gültige Werte: yes, no
Standardeinstellung: START_NTP='no'
Gültige Werte: Zahl
Beispiel:
# # Type 1 Undisciplined Local Clock (LOCAL) vordefiniert! # NTP\_CLOCK\_1\_TYPE='1' NTP\_CLOCK\_1\_MODE=” NTP\_CLOCK\_1\_DEVICE=” NTP\_CLOCK\_1\_LINK\_DEVICE=” NTP\_CLOCK\_1\_LINK\_DEVICE\_N=” NTP\_CLOCK\_1\_STRATUM='10'
Standardeinstellung: NTP_CLOCK_N='0'
Gültige Werte: Zahl
Standardeinstellung: NTP_CLOCK_1_TYPE='1'
Gültige Werte: Zahl
Standardeinstellung: NTP_CLOCK_1_MODE=”
Gültige Werte: Gerätename
Standardeinstellung: NTP_CLOCK_1_DEVICE=”
Gültige Werte: LinkDevice-Name
Standardeinstellung: NTP_CLOCK_1_LINK_DEVICE=”
Gültige Werte: Zahl
Standardeinstellung: NTP_CLOCK_x_LINK_DEVICE_N=”
Gültige Werte: Zahl
Standardeinstellung: NTP_CLOCK_1_STRATUM=”
Gültige Werte: durch Leerzeichen getrennte Ziffern bzw. Wertepaare
Beispiel: NTP_CLOCK_1_FLAGS='2 1'
Gültige Werte: 4 Zeichen langer Text in Großbuchstaben
Beispiel: NTP_CLOCK_1_REFID='GUDE'
Gültige Werte: Zahl
Standardeinstellung: NTP_SERVER_N='0'
Gültige Werte: NTP Server
Beispiel: NTP_SERVER_1='de.pool.ntp.org'
Gültige Werte: gultige Kommandozeilenschalter
Beispiel: NTP_SERVER_OPTIONS='-4'
Gültige Werte: Zahl
Standardeinstellung: NTP_SET_SERVER_N='0'
Gültige Werte: NTP Server
Beispiel: NTP_SET_SERVER_1='de.pool.ntp.org'
#---------------------------------------------------------------- # Zusaetzliche Parameter for NTP # # Damit kann man die ntp.conf nach seinen Wuenschen gestalten # *** Fuer Benutzer die wissen was Sie tun !!! *** # # Fuer moegliche Parameter siehe : http://ntp.org #---------------------------------------------------------------- NTP_ADD_PARAM_N='0' (Zahl): Gibt die Anzahl der Parameter an. Standardeinstellung: 0 NTP_ADD_PARAM_1='statsdir /var/log/ntp/' (Parameter) : Wird in ntp.conf eingefuegt!
Das NTP-Paket verwendet Logdateien, um Meldungen über seinen laufenden Betrieb zu speichern. Um zu verhindern, dass diese Dateien zu groß und unübersichtlich werden, kann man einstellen wie das System mit den Dateien umgehen soll.
all : Alle Informationen syncstatus : Informationen über den Synchronisationsstatus sysevents : Informationen über Synchronisationssystemereignisse syncall : Alle Informationen über den Synchronisationsaufruf clockall : Informationen über alle Uhren
Beispiel: syncstatus + sysevents + clockall
Standardeinstellung: NTP_LOG_CONFIG='all'
Gültige Werte: Zahl
Standardeinstellung: NTP_LOG_COUNT='10'
Gültige Werte: daily, weekly, monthly
Standardeinstellung: NTP_LOG_INTERVALL='weekly'
Schließen Sie den Empfänger an dem ComPort den Sie in NTP_CLOCK_x_DEVICE definiert haben an. Der symbolischen Link NTP_CLOCK_x_LINK_DEVICE + NTP_CLOCK_x_LINK_DEVICE_N, welcher auf das NTP_CLOCK_x_DEVICE zeigt wurde beim Konfigurieren erzeugt.
Beispiel DCF77 Empfänger:
NTP_CLOCK_2_DEVICE='/dev/ttyS1' NTP_CLOCK_2_LINK_DEVICE='/dev/refclock-' NTP_CLOCK_2_LINK_DEVICE_N='1' /dev/ttyS1 an /dev/refclock-1 # also an com2
Nun gilt es eine gute Position für den Empfänger ausfindig zu machen. Das im Quellcode enthaltene Werkzeug `testdcf' ermöglicht dies auf sehr bequeme Art. NTP muss vor dem Start von testdcf beendet werden, genauso umgekehrt testdcf muss vor dem Start von NTP beendet werden! Starten Sie es mit dem Kommando: testdcf /dev/refclock-1. Die LED sollte nun gleichmäßig einmal pro Sekunde blinken. Haben Sie eine gute Position ausfindig machen können (das serielle Kabel der Uhr kann bis auf 100m verlängert werden!), so sollte etwa 3 Minuten nach den Aufruf von 'testdcf' eine Uhrzeit empfangen worden sein (hier : Sa, 22:46:07, 24.01.04).
testdcf /dev/refclock-1 DCF77 monitor - Copyright (C) 1993-1996, Frank Kardel RADMLSMin....PHour..PMDay..DayMonthYear....P RADMLS1248124P124812P1248121241248112481248P \ #-###------#------.......................... *** INCOMPLETE / ............................................ Sa, 22:46:07, 24.01.04, <____>
Zu erwähnen ist hier nur, dass die Uhr mindestens eine Minute braucht, um ein erstes Mal die korrekte Zeit zu liefern, da ein kompletter Datensatz bei DCF77 eine ganze Minute einnimmt. Die zahlreichen Meldungen nach Starten des NTP-Daemons sind also kein Grund zur Beunruhigung. Nach ein paar Minuten sollte sich das Problem mit dem Auftauchen der Logmeldung clk_okay selber lösen:
Nach einer erfolgreichen Synchronisation taucht im NTP-Logfile folgende Nachricht auf:
24 Jan 20:57:02 ntpd[3260]: system event 'event_restart' (0x01) status 'sync_alarm, sync_unspec, 1 event, event_unspec' (0xc010) 24 Jan 20:57:12 ntpd[3260]: peer LOCAL(1) event 'event_reach' (0x84) status 'unreach, conf, 1 event, event_reach' (0x8014) 24 Jan 20:58:00 ntpd[3260]: parse: convert_rawdcf: BAD DATA - no conversion for "---------------R-D--s12-81--p--48--P--4-121------1------4" 24 Jan 20:58:00 ntpd[3260]: PARSE receiver #1: conversion status "CONVERSION FAILED; DATE ILLEGAL" 24 Jan 20:58:00 ntpd[3260]: PARSE receiver #1: interval for following error message class is at least 00:01:00 24 Jan 20:58:00 ntpd[3260]: PARSE receiver #1: FAILED TIMECODE: "---------------R-D--s12-81--p--48--P--4-121------1------" (check receiver configuration / cableling) 24 Jan 20:58:00 ntpd[3260]: clock GENERIC(1) event 'clk_baddate' (0x05) 24 Jan 20:58:00 ntpd[3260]: peer GENERIC(1) event 'event_peer_clock' (0x85) status 'unreach, conf, 1 event, event_peer_clock' (0x8015) 24 Jan 20:58:00 ntpd[3260]: system event 'event_clock_excptn' (0x07) status 'sync_alarm, sync_unspec, 2 events, event_restart' (0xc021) 24 Jan 20:59:00 ntpd[3260]: PARSE receiver #1: packet format "RAW DCF77 Timecode" 24 Jan 20:59:00 ntpd[3260]: PARSE receiver #1: STATE CHANGE: -> TIME CODE; (LEAP INDICATION; ANTENNA) 24 Jan 20:59:00 ntpd[3260]: PARSE receiver #1: SYNCHRONIZED 24 Jan 20:59:00 ntpd[3260]: clock GENERIC(1) event 'clk_okay' (0x00)
Wie man hier sehr schön sieht, hat es zwei Minuten gedauert.
Der Benutzer root kann den Status mit dem Kommando 'ntpq -p' überprüfen. Änderungen erfolgen jedoch langsam. Das Intervall legt der ntpd selbst anhand der Zeitdifferenz etc. fest. Einige Minuten Geduld sind hier erforderlich.
Hinweis
Diese Informationen erhalten Sie wenn Sie Im Menü Info anwählen
Um eine genaue Aussage über die Empfangsqualität des Empfängers zu erhalten, kann das Programm ntpq mit dem Befehl 'ntpq -c clocklist' verwendet werden.
Mit dem Shell-Befehl 'ntpq' kann der Status eines laufenden NTP-Servers abgefragt werden. Wird ntpq ohne weiter Optionen aufgerufen, so wird der Localhost als NTP-Server angenommen, die Steuerung von ntpq erfolgt dann über die Kommandozeile:
ntpq -c clocklist status=0005 clk_okay, last_clk_baddate, device="RAW DCF77 CODE (Conrad DCF77 receiver module)", timecode="------------------M-S1--8--4P1----2p--4--2-241------4-----p", poll=49, noreply=0, badformat=5, baddata=0, fudgetime1=292.000, fudgetime2=0.000, stratum=0, refid=DCFa, flags=0, refclock_time="c3bd58e1.00000000 Sat, Jan 24 2004 20:49:37.000 UTC", refclock_status="TIME CODE; (LEAP INDICATION; ANTENNA)", refclock_format="RAW DCF77 Timecode", refclock_states="*NOMINAL: 00:50:37 (96.29%); NO RESPONSE: 00:00:57 (1.80%); ILLEGAL DATE: 00:01:00 (1.90%); running time: 00:52:34"
In diesem Beispiel hat die Uhr bei einer Gesamtlaufzeit von ca. 52 Minuten (siehe running time) etwa 50 Minuten lang guten Empfang. Dies entspricht 96.29 Mit dem Kommando 'peers' werden in einer Tabelle die aktiven Referenzuhren zeilenweise angezeigt. Ein der Zeile vorangestellter Stern '*' zeigt an, dass dieser Peer die aktuelle Zeitreferenz ist:
tpq -c peers localhost remote refid st t when poll reach delay offset jitter ===================================================================== *GENERIC(1) .DCFa. 0 l 47 64 377 0.000 -0.728 0.015 LOCAL(1) LOCAL(1) 10 l 58 64 377 0.000 0.000 0.015
Folgende Informationen werden u.a. angezeigt:
- remote: Auflistung aller verfügbaren Zeit-Server (ntp.conf)
- refid: Referenznummer
- when: wann die letzte Abfrage stattgefunden hat (in Sekunden)
- poll: in welchem Intervall der Zeitserver abgefragt wird
- offset: Differenz zwischen Systemzeit und Referenzzeit (in Millisekunden)
Will man die Zeit seines Windows-PCs mit einem zentralen Zeitserver synchronisieren, so kann man entweder auf mitgelieferte Programme des Betriebssystems zurückgreifen oder auch eine kostenlose Windows-Version des originalen NTP-Programms http://www.ntp.org verwenden, welches man z.B. von folgender Seite herunter laden kann:
http://www.meinberg.de/german/sw/ntp.htm
Wer den Status seines Zeitservers bequem überwachen möchte, findet auf folgende Seite auch ein kostenloses NTP Monitorprogramm:
http://www.meinberg.de/german/sw/time-server-monitor.htm
Dieser Dienst ist auch für Windows NT erhältlich und ersetzt den alten Zeitdienst aus dem NT Resource-Kit
Windows 2000 bietet mit dem integrierten Dienst 'w32time.exe' die
Möglichkeit als NTP Server oder Client zu fungieren. Zur Aktivierung
des NTP-Client/Servers unter Windows 2000 müssen dem System die
erforderlichen Parameter bekannt und der entsprechende Zeitdienst
dauerhaft gestartet sein. Der Zeitdienst findet sich unter
'Verwaltung/Dienste' als 'Windows-Zeitgeber' (engl.: 'Windows Time').
Er sollte nach Einstellung der Parameter mit dem Autostarttyp
'Automatisch' gestartet werden. (Starts und Stopps dieses Dienstes
sind auch mit den Command-Line-Befehlen 'net start w32time'
beziehungsweise 'net stop w32time' möglich.) Die für den Zeitdienst
relevanten Parameter finden sich alle in der Registry und lassen
sich dort bei Bedarf auch editieren:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters.Eine Dokumentation der einzelnen Registry-Einträge finden Sie bei Microsoft.
Damit Windows 2000 als NTP-Client fungieren kann ist die Adresse des
Zeit-Servers, der bei jeder Synchronisation abgefragt werden soll,
einzutragen. Der oder die ausgewählten NTP-Server lassen sich
entweder in der Registry unter dem Eintrag 'ntpserver' editieren oder
mit dem Command-Line-Befehl 'net time /setsntp[:NTP-Serverliste]'.
(Wird eine ganze Liste eingegeben, so sind die einzelnen Adressen
durch Leerzeichen abzutrennen und die Liste beim net-Befehl in
Anführungszeichen zu setzen.) Beim nächsten Start des Zeitdienstes
werden die Einträge übernommen und die Zeit synchronisiert.
Standardmäßig geschieht dies dann in Folge alle acht Stunden. Die
Frequenz versteckt sich unter dem Eintrag 'Period' und ist
standardmäßig als REG_SZ mit dem Wert 'SpecialSkew' abgelegt.
Um beispielsweise 24-mal am Tag zu synchronisieren, muss dieser
'Period'-Eintrag durch einen entsprechenden REG_DWORD mit dem
Dezimalwert 24 ersetzt werden (das heißt: den alten Eintrag komplett
löschen oder umbenennen und einen Neueintrag zur Eingabe numerischer
Werte anlegen). Die aktuell gesetzten Zeit-Server lassen sich
übrigens auch via Command-Line mit dem Befehl 'net time /querysntp'
anzeigen.
Damit Windows 2000 nicht nur als NTP-Client, sondern auch als Server
fungiert, ist in der Registry folgender Eintrag nötig:
'LocalNTP' muss von standardmäßig '0' auf '1' gesetzt werden.
Nach anschließendem Neustart des Dienstes können jetzt auch beliebige
NTP/SNTP-Clients von diesem Windows-2000-Rechner die Zeit abfragen.
Ein weiterer Parameter in der Registry könnte gegebenenfalls interessant
werden: die Frequenz, mit der die Zeit-Server von Windows 2000 abgefragt
werden.
Eventuelle Fehlermeldungen des Zeitdienstes werden im Systemprotokoll
der Ereignisanzeige eingetragen. Zu Diagnosezwecken lässt sich übrigens
auch das Kommandozeilenwerkzeug 'w32tm.exe' nutzen, der Zeitdienst muss
dabei deaktiviert sein. Eine Übersicht der Aufrufvarianten bietet der
Hilfe-Befehl 'w32tm /?'. Beispielsweise kann mit 'w32tm -once' eine
einmalige Synchronisation mit detaillierter Anzeige ausgelöst werden.
Windows XP kann bereits selbständig einen NTP Server abfragen und die Zeit angleichen. Die Einstellungen können in der Systemsteuerung unter 'Datum/Uhrzeit' vorgenommen werden. Damit Windows XP auch als NTP-Server fungiert, ist in der Registry, wie auch bei Windows 2000, folgender Eintrag nötig: 'LocalNTP' = '1'.