Der Linuxrechner als Zeitserver
Der Linuxrechner als ZeitserverIm Netzwerk kann es von entscheidender Bedeutung sein, daß die Uhren der PCs im Netz synchron laufen. Außerdem ist es auch so recht angenehm, wenn am Rechner die aktuelle Zeit zur Verfügung steht. Im Internet gibt es eine Reihe von öffentlich zugänglichen Rechnern, die ihrerseits mit Atomuhren verbunden sind. Der folgende Text beschreibt, wie Sie diese Zeitinformationen auf den Linuxserver holen und von da an die Netzwerkrechner weitergeben.
Es gibt verschiedene Niveaus an Genauigkeit, die timeserver im Internet liefern können. Ich beschränke mich im folgenden auf eine "einfache" Genauigkeit (so etwa im Sekundenbereich), wer an exakteren Zeitinformationen interessiert ist muß sich mit dem Thema NTP beschäftigen.
Linuxserver
Um die Zeit des Linuxservers mit einem timeserver im Internet zu synchronisieren, muß der Server logischerweise mit dem Netz verbunden sein. Das ist aber in unserem Netz nur der Fall, wenn eine ISDN-Verbindung zur FH besteht. In regelmäßigen Abständen eine Anfrage an den entsprechenden Rechner zu stellen, würde oft eine kostenpflichtige Verbindung aufbauen. Die Idee ist deshalb, die Zeitsynchronisation an den Einwahlvorgang zu koppeln. Für diesen Zweck wird die Datei ip-up im Verzeichnis /etc/ppp um zwei Befehle ergänzt. Dieses Skript wird vom ISDN-System automatisch gestartet, sobald die ISDN-Verbindung hergestellt ist (Für DOS-Freaks: so etwas wie die autoexec.bat des ISDN-Systems).
Die relevanten Zeilen (der untere Teil ist nur ein Ausschnitt) in meiner ip-up sehen so aus:
...
case "$BASENAME" in
ip-up)
echo -n "starting timesynchronisation ..." > /dev/tty1
/usr/sbin/netdate -v wrzx03.rz.uni-wuerzburg.de
/sbin/clock -wu
echo -n "time synchronisation done." > /dev/tty1
...
Und ab hier der normale Rest der Datei... .
Im obigen Skriptausschnitt sind zwei Zeilen enthalten, die mit echo "..." auf einer der Konsolen eine Ausgabe erzeugen sollen. Normalerweise ist für das Script vorgegeben, daß Ausgaben des echo-Befehls "ins Leere" laufen (technisch: /dev/null; Danke für den Hinweis an Wolfgang Stark). Daher muß im Skript die Ausgabe explizit auf eines der Terminals umgeleitet werden! Bei mir ist das das erste Terminal, da ich normalerweise nicht am Server arbeite. Bei den Standardeinstellungen müßten Sie dort /dev/tty10 eintragen!
Der Befehl netdate fragt den öffentlichen timeserver der Universität Würzburg ab. Suchen Sie sich im Internet möglichst einen wenig frequentierten Rechner in Ihrer Nähe. Netdate setzt nur das Systemdatum, verstellt aber nicht die CMOS-Uhr im Rechner. Das heißt, wenn Sie den Server ausschalten würden, würde er beim Neustart wieder die alte Uhrzeit verwenden. Der nächste Befehl (/sbin/clock -wu) stellt deshalb die interne Uhr auf die korrekte Zeit. Achtung, wenn Sie auf Ihrem Linuxrechner als Zeitzone nicht GMT eingestellt haben, sollten Sie nur /sbin/clock -w aufrufen!
Damit der Rechner als timeserver fungieren kann, muß jetzt noch der entsprechende Service aktiviert werden. Dazu müssen in der Datei /etc/inetd.conf bei vier Zeilen das Kommentarzeichen am Zeilenanfang entfernt werden. Es handelt sich um die Zeilen:
daytime stream tcp nowait root internal
daytime dgram udp wait root internal
time stream tcp nowait root internal
time dgram udp wait root internal
Das war's, beim nächsten Systemstart können andere Rechner die Zeit beim Server abfragen.
Windows Client
Es gibt eine Reihe von Programmen für Windowsrechner, die den Zeitabgleich mit Unixservern ermöglichen und die darüberhinaus noch als freeware angeboten werden. Die Programme finden Sie leicht, wenn Sie eine Suchmaschine nach den Stichworten timesynchronisation + Windows abfragen. Ich benutze z.B. Dimension 4 von Thinking Man Software. Als timeserver muß hier der Linuxserver eingetragen werden (192.168.1.1) und als Protokoll "time/tcp".
Da bei mir der Linuxserver nicht immer läuft, habe ich das Programm so konfiguriert, daß die Zeit einmal abgefragt wird und sich das Programm dann automatisch beendet. Und zudem habe ich mir eine Batchdatei gestrickt, in der zuerst der Webbrowser und dann anschließend die Zeitsynchronisation aufgerufen werden. So kann ich sicher sein, daß der Server läuft, denn nur dann funktioniert der Internetzugriff. Ich empfehle übrigens nicht, die Programme zur Zeitsynchronisation permanent laufen zu lassen, um dann beispielsweise in regelmäßigen Abständen die aktuelle Zeit zu holen. Die meisten Programme belegen unnötig viel Arbeitsspeicher, soweit ich mir das bislang angesehen habe.
Alternativ kann der Abgleich mit dem Server auch mit "Windows-Bordmitteln" geschehen (Danke für den Hinweis an Peter Hinse). Erstellen Sie eine Verknüpfung zu c:\windows\net.exe und geben als Parameter time \\SERVER /set /yes ein. Anstelle von SERVER muß hier natürlich der Name Ihres Linuxservers stehen (das ist der Name, der in der Netzwerumgebung zu sehen ist). In den Eigenschaften der Verknüpfung sollten Sie "Schliessen bei beenden" aktivieren, dann geschieht die Zeitsynchronisation, ohne daß viel auf dem Bildschirm zu sehen ist. Wenn Ihr Linuxserver ständig an ist, kopieren Sie diese Verknüpfung in das Autostart-Verzeichnis.
Linux-Client
Die Zutaten zur Zeitsynchronisation des Linuxclients sind die selben wie für den Server. Sie können also entweder per Hand die Befehle:
/usr/sbin/netdate -v 192.168.1.1
/sbin/clock -wu
eingeben oder ein entsprechendes Skript schreiben. Ich habe meines auch wieder mit dem Start des Webbrowsers gekoppelt.
OS/2-Client
Für OS/2 habe ich ein freeware-Programm namens ntp im Einsatz.
Die letzte Version, die ich gefunden habe, wird als ntp107.zip vertrieben.
Das Programm kann in ein beliebiges Verzeichnis installiert werden. Der
Aufruf erfolgt von der Kommandozeile bzw. in einer Batchdatei in der Form
ntp
192.168.1.1 /SET. Dadurch wird die Zeit des OS/2-Rechners auf die
des Servers gesetzt.