NTP

Aus Wiki
Zur Navigation springen Zur Suche springen

Allgemein

Je länger nun die NSLU läuft, desto weiter wird auf dem Gerät die Zeit der korrekten Zeit "davonlaufen". Dies ist relativ einfach zu beheben. Hierzu wird ein NTP-Client (Network Time Protocol) eingerichtet, der von einem Zeitserver im Internet die aktuelle und genaue Zeit mit der NSLU2 synchronisiert.

Als Alternative kann auch ein vollwertiger NTP-Server installiert werden, der ebenfalls die Zeit der NSLU mit Zeitservern im Internet synchronisiert. Darüber hinaus ist es möglich, auch für lokale Clients wie PC's, NAS-Laufwerke usw. als Zeitserver zu dienen. Dadurch haben sämtliche Rechner im lokalen Netz die selbe Zeitbasis. Wenn der NTP-Server zum Einsatz kommt, ist der NTP-Client nicht erforderlich.

NTP-Client

Installiert wird der NTP Client mit folgenden Befehl:

ipkg update
ipkg install ntpclient

Anschließend muss einmal die Zeit manuell synchronisiert werden und dem Timer der NSLU übergeben werden. Dies geschieht mit folgendem Befehl:

/opt/bin/ntpclient -s -p 123 -h 0.pool.ntp.org && hwclock --systohc --utc

Um die Uhrzeit regelmäßig (z.B. alle 6 Stunden) zu synchronisieren wird ein cronjob (siehe → hier) angelegt, der den Update-Prozeß regelmäßig anstößt:

Falls der originale Cron verwendet wird (siehe auch → hier):

vi /etc/crontab

Falls die ipkg-Version von Cron verwendet wird (siehe auch → hier):

vi /opt/etc/crontab

Folgende Zeile ergänzen:

0 */6 * * * root /opt/bin/ntpclient -s -p 123 -h 0.pool.ntp.org > /var/log/ntp.log && hwclock --systohc --utc

Hinweise zur Syntax dieser Datei siehe → Crontab


NTP-Server

Installation

ipkg install ntp

Im Gegensatz zum Client läuft der NTP-Server permanent und muß deshalb nicht regelmäßgig per Cron gestartet werden. Der Server gleicht voll automatisch die Uhrzeit regelmäßig mit Zeitservern im Internet ab. Die Häufigkeit der Updates ermittelt der Server anhand eines heuristischen Algorithmus selbständig, sodass das Intervall zwischen den Updates permanent angepasst wird.

Nach der Installation wird NTPD evtl. sofort gestartet. Dies ist hier nicht erwünscht, da erst noch einige Konfigurationsarbeiten nötig sind, damit der Server fehlerfrei funktioniert. Deshalb wird NTPD hier erst einmal angehalten:

killall NTPD

Startscript editieren:

vi /opt/etc/init.d/S77ntp

Folgenden Befehl vor der letzten Zeile (/opt/bin/ntpd -c ...) einfügen:

/opt/bin/tickadj 10000

Dies ist nötig, um einen Bug in der NSLU-Firmware zu beheben, der dafür sorgt, dass die Uhrzeit relativ schnell wegdriftet.


Konfiguration

Aufgrund eines Bugs im aktuellen NTP-Dämon in Zusammenhang mit dem verwendeten Kernel (2.4.xx), muß das Konfigurationsfile angepaßt werden. Dieser Bug tritt aufgrund einer Kerneländerung ab 2.6.19 nicht mehr zu Tage. Der Bug äußert sich durch Einträge "kernel time sync error 0001" im Logfile. Mittels der angehängten Parameter minpoll und maxpoll wird das erlaubte Intervall der Updatepakete eingeschränkt. Minpoll=6 bedeutet 2^6s=64s bzw. maxpoll=7 bedeutet 2^7s = 128s. Für einen erfolgreichen Synchronisierungsvorgang sind mehrere solcher Updatepakete nötig.

vi /opt/etc/ntp/ntp.conf

In den vorhandenen "Server"-Zeilen minpoll und maxpoll Einträge anhängen:

server 0.pool.ntp.org minpoll 6 maxpoll 7
server 1.pool.ntp.org minpoll 6 maxpoll 7
server 2.pool.ntp.org minpoll 6 maxpoll 7


Anlegen eines sog. Diversion Scriptes, das beim Booten der NSLU zu einem relativ frühen Zeitpunkt im Bootprozeß ausgeführt wird. Dieses Script stellt die Systemzeit mit Hilfe eines Zeitservers im Internet auf die korrekte Zeit, anstatt diese von der internen Hardwareuhr zu ermitteln:

vi /unslung/rc.rstimezone

Folgendes Script einfügen:

#!/bin/sh
# Diversion script to get control of time 

# Extract the GUI timezone from the .conf file
# Copy the corresponding /usr/zoneinfo file over /usr/local/localtime
/usr/sbin/Set_TimeZone >/dev/null

/usr/sbin/hwclock --hctosys --utc
# Do an initial clock set
/opt/bin/ntpd -q \
  -c /opt/etc/ntp/ntp.conf \
  -f /var/spool/ntp/ntp.drift \
  -s /var/spool/ntp \
  -k /opt/etc/ntp \
  -l /var/spool/ntp/ntp.log

# Do not execute the Linksys script
return 0

# EOF - include this line

Der NTP Daemon gleicht die Systemzeit der NSLU mit Zeitservern aus dem Internet ab. Damit auch die Hardware Echzeituhr der NSLU nicht zu weit von dieser Zeit abweicht, muß die Hardwareuhr regelmäßig angepasst werden. DIes erfolgt mittels eines Cron-Eintrages:

vi /opt/etc/crontab  (falls "Real" Cron installiert ist)
vi /etc/crontab (falls Original Cron zum Einsatz kommt)

Folgende Zeile einfügen:

1 4 * * * root /usr/sbin/hwclock --systohc --utc &>/dev/null


Start von NTPD

NTPD kann die Uhrzeit nur erfolgreich mit Servern im Internet abgleichen, wenn die eigene Zeit maximal +/-500s von der Internetzeit abweicht. Sollte die Abweichung größer sein, geht NTPD von einem fatalen Fehler aus und beendet sich. Deshalb erst via Weboberfläche die Uhrzeit auf die korrekte Zeit so genau wie möglich einstellen.

Bevor der Daemon seine Arbeit aufnimmt, wird die Uhrzeit einmalig auf die korrekte Zeit mit Hilfe eines Zeitservers gesetzt (Die folgenden beiden Zeilen als einen Befehl in einer Zeile eingeben!):

/opt/bin/ntpd -q -c /opt/etc/ntp/ntp.conf -f /var/spool/ntp/ntp.drift 
          -s /var/spool/ntp -k /opt/etc/ntp -l /var/spool/ntp/ntp.log

Start des NTP-Daemons:

/opt/etc/init.d/S77ntp


Funktionscheck

Die Synchronisierung des Systezeit benötigt einige Zeit. Nach ca 1 Stunde nach dem Start von NTPD sollte das Logfile kontrolliert werden:

vi /var/spool/ntp/ntp.log

Es sollten Einträge in der folgenden Form auftreten (Keine ERROR-Einträge):

1 Nov 20:25:45 ntpd[30775]: logging to file /var/spool/ntp/ntp.log
1 Nov 20:25:45 ntpd[30775]: signal_no_reset: signal 13 had flags 4000000
1 Nov 20:25:45 ntpd[30775]: precision = 42.000 usec
1 Nov 20:25:45 ntpd[30775]: ntp_io: estimated max descriptors: 1024, initial socket boundary: 16
1 Nov 20:25:45 ntpd[30775]: Listening on interface #0 wildcard, 0.0.0.0#123 Disabled
1 Nov 20:25:45 ntpd[30775]: Listening on interface #1 lo, 127.0.0.1#123 Enabled
1 Nov 20:25:45 ntpd[30775]: Listening on interface #2 ixp0, IP_DER_NSLU#123 Enabled
1 Nov 20:25:45 ntpd[30775]: kernel time sync status 0040
1 Nov 20:25:45 ntpd[30775]: frequency initialized 0.000 PPM from /var/spool/ntp/ntp.drift
1 Nov 20:25:45 ntpd[30775]: frequency initialized 0.000 PPM from /var/spool/ntp/ntp.drift
1 Nov 20:30:03 ntpd[30775]: synchronized to 141.40.103.102, stratum 2
1 Nov 20:30:03 ntpd[30775]: kernel time sync status change 0001
1 Nov 20:33:20 ntpd[30775]: synchronized to 81.169.180.21, stratum 2
1 Nov 21:00:09 ntpd[30775]: synchronized to 78.46.73.8, stratum 2
1 Nov 21:23:47 ntpd[30775]: synchronized to 81.169.180.21, stratum 2


Konfiguration der Clients

Windows

Einstellen des Zeitservers:

  • Unter Windows die Uhrzeiteinstellungen öffnen: Systemsteuerung/Datum und Uhrzeit
  • Reiter Internetzeit anwählen
  • Server: IP_DER_NSLU eingeben
  • Button Jetzt aktualisieren anwählen
  • Als Rückmeldung sollte erscheinen: "Zeit wurde erfolgreich synchronisiert..."
  • Uhrzeiteinstellungen mit Button OK abschließen


Einstellen des Aktualisierungsintervalls:

  • Registrierungseditor öffnen:
    • /Start/Ausführen
    • regedit eingeben
    • Mit OK bestätigen
  • Die beiden folgenden Registrierungsschlüssel bearbeiten:
Den Eintrag SpecialPollInterval in den beiden Schlüsseln editieren:
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W32Time\TimeProviders\NtpClient]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\W32Time\TimeProviders\NtpClient]
  • Eintrag SpecialPollInterval markieren
  • Rechte Maustaste betätigen und Menü ändern auswählen
  • Option dezimal anklicken
  • Gewünschten Intervall-Wert eingeben z.B. 7200 für 2h.
  • Mit OK bestätigen
  • Nachdem beide Schlüssel bearbeitet wurden, Regedit schließen
  • Windows neu starten, um die Änderungen zu übernehmen


Linux

TBD