Unterabschnitte

Das NTP-Paket

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.

Die Einleitung

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.

Die Funktionen

Das NTP-Paket besteht aus folgenden Komponenten:

Die Voraussetzungen

Dieses Paket benötigt zur korrekten Funktion ein installierten Perl-Paket und einige andere Perl-Funktionspakete.

Die Installation

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

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.

Die Hardware

Für den Betrieb braucht man nicht zwingend einen eigenen Empfänger!

Es gibt 3 Varianten, die Zeitinformation für eisfair zu erhalten:

Zu Variante 1:

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!

Zu Variante 2:

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'!)

Die Software

NTP wurde mit allen möglichen Referenzuhren kompiliert!

Genauere Informationen: http://www.eecis.udel.edu/~mills/ntp/html/refclock.html

Die Änderung der Konfiguration

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

Die Konfigurationsdatei

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.

Die Parameter

START_NTP

Über diesen Parameter wird mit den Werten yes bzw. no gesteuert, ob NTP beim Boot des Rechners automatisch gestartet werden soll.

Gültige Werte: yes, no

Standardeinstellung: START_NTP='no'

NTP_CLOCK_N

Gibt die Anzahl der Uhren an. Diesen Parameter sollte man unbedingt erhöhen!

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'

NTP_CLOCK_x_TYPE

Type der Uhr siehe Referenzuhren.

Gültige Werte: Zahl

Standardeinstellung: NTP_CLOCK_1_TYPE='1'

NTP_CLOCK_x_MODE

Modus der Uhr, siehe Referenzuhren. Falls kein Mode gebraucht wird, einfach leer lassen.

Gültige Werte: Zahl

Standardeinstellung: NTP_CLOCK_1_MODE=

NTP_CLOCK_x_DEVICE

Gerät der Uhr, siehe Referenzuhren. Falls kein Gerät gebraucht wird einfach leer lassen. Von Uhr zu Uhr verschieden, je nachdem wo sie angeschlossen wird z.B. /dev/ttyS0 = Com1

Gültige Werte: Gerätename

Standardeinstellung: NTP_CLOCK_1_DEVICE=

NTP_CLOCK_x_LINK_DEVICE

LinkDevice der Uhr, siehe Referenzuhren. Falls kein LinkDevice gebraucht wird einfach leer lassen. Von Uhr zu Uhr verschieden, z.B. /dev/refclock- für die serielle Conrad Uhr

Gültige Werte: LinkDevice-Name

Standardeinstellung: NTP_CLOCK_1_LINK_DEVICE=

NTP_CLOCK_x_LINK_DEVICE_N

LinkDeviceNumber der Uhr, siehe Referenzuhren. Falls kein LinkDeviceNumber gebraucht wird einfach leer lassen. Von Uhr zu Uhr verschieden, z.B. 0 bis 3 für die serielle Conrad Uhr.

Gültige Werte: Zahl

Standardeinstellung: NTP_CLOCK_x_LINK_DEVICE_N=

NTP_CLOCK_x_STRATUM

Stratum der Uhr, siehe Referenzuhren. Falls kein Stratum gebraucht wird einfach leer lassen.

Gültige Werte: Zahl

Standardeinstellung: NTP_CLOCK_1_STRATUM=

NTP_CLOCK_x_FLAGS (Optionaler Parameter)

Flags welche bei Bedarf einem Uhrentreiber mitgegeben werden können um bestimmte Einstellungen zu beeinflussen. Standardmäßig werden die Flags `flag1' bis `flag4' unterstützt, welchen jeweils die Werte `0' oder `1' mitgegeben werden können.
Die Eingabe erfolgt dabei über Wertepaare bei denen die erste Ziffer die Flag-Nummer und die zweite Ziffer den gewünschten Wert festlegt. Will man z.B. `flag2' auf den Wert `1' setzen, so muss die im Beispiel vorgenommene Eingabe erfolgen.

Gültige Werte: durch Leerzeichen getrennte Ziffern bzw. Wertepaare

Beispiel: NTP_CLOCK_1_FLAGS='2 1'

NTP_CLOCK_x_REFID (Optionaler Parameter)

Reference Identifier der Uhr, welcher zur Identifikation der Zeitquelle dient. Bei einer Expert MouseCLOCK USB II lautet dieser z.B. 'GUDE'.

Gültige Werte: 4 Zeichen langer Text in Großbuchstaben

Beispiel: NTP_CLOCK_1_REFID='GUDE'

NTP_SERVER_N

Gibt die Anzahl der NTP Server an, die in das Peer inkludiert werden!

Gültige Werte: Zahl

Standardeinstellung: NTP_SERVER_N='0'

NTP_SERVER_x

Ein NTP Server im eigenen Netz oder außerhalb.

Gültige Werte: NTP Server

Beispiel: NTP_SERVER_1='de.pool.ntp.org'

NTP_SERVER_OPTIONS (Optionaler Parameter)

Über diesen Parameter konnen auf Wunsch optionale Startparameter angegeben werden, wie z.B. `-4', um den NTP-Dienst nur auf IPv4-Adressen lauschen zu lassen.

Gültige Werte: gultige Kommandozeilenschalter

Beispiel: NTP_SERVER_OPTIONS='-4'

NTP_SET_SERVER_N

Gibt die Anzahl der NTP Server an über die die Zeit per Menü gesetzt wird falls der Zeitunterschied zu groß ist!

Gültige Werte: Zahl

Standardeinstellung: NTP_SET_SERVER_N='0'

NTP_SET_SERVER_x

Ein NTP Server im eigenen Netz oder außerhalb.

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.

NTP_LOG_CONFIG

Über diesen Parameter kann man festlegen welche Informationen in die Logdatei geschrieben werden sollen. Es kann zwischen folgenden Optionen gewählt werden. Einzelne Optionen können mit Hilfe eines '+'-Zeichens kombiniert werden!

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'

NTP_LOG_COUNT

Über diesen Parameter wird eingestellt, wie viele Logdateien vorgehalten werden sollen. Wird dieser Wert überschritten, so wird die älteste Logdatei gelöscht.

Gültige Werte: Zahl

Standardeinstellung: NTP_LOG_COUNT='10'

NTP_LOG_INTERVAL

Dieser Parameter bestimmt in welchen Intervallen die Logdateien archiviert werden sollen. Zur Auswahl stehen die Schlüsselwörter 'daily' - täglich, 'weekly' - wöchentlich und 'monthly - monatlich.

Gültige Werte: daily, weekly, monthly

Standardeinstellung: NTP_LOG_INTERVALL='weekly'

Serielle Empfänger testen

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.

Den Zeitempfang per Netzwerk überprüfen

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.

Die NTP-Empfangsqualität

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)

Windows als NTP Client / Server

Allgemeines

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

Windows NT

Dieser Dienst ist auch für Windows NT erhältlich und ersetzt den alten Zeitdienst aus dem NT Resource-Kit

Windows 2000

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

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'.