Vielleicht kennt ihr das, die System-Uhr verstellt sich in einem Jahr mal eben um 2 Minuten und man wundert sich so manches Mal, dass die Zeit in irssi von der eigentlichen abweicht oder anderswo Probleme auftreten. Ich hatte zum Beispiel mal ein Problem mit Bitlbee und Twitter. Ich habe ewig gerätselt warum die Authentifizierung nicht funktioniert, dabei war Twitter einfach meine Uhrzeitangabe nicht genehm. Dabei ist es eigentlich sehr einfach seine Uhrzeit aktuell zu halten und darum möchte ich es hier in Kürze erklären.
Zunächst müssen wir mindestens 2 Zeitserver für einen Zeitabgleich finden. Man könnte auch nur einen nehmen, verlässt sich dann allerdings auf nur eine Quelle und kann keine Fehler kompensieren. Es gibt verschiedene „Stufen“ an Zeitservern. Das ist ein hierarchisches System, welches bei Stratum 0 beginnt. Als Stratum 0 bezeichnet man das Zeitnormal, beispielsweise eine Atomuhr oder eine Funkuhr (Wiki). Die Server, die direkt von diesen Geräten ihre Zeit beziehen heißen Stratum 1 Server. Danach kommen Stratum 2 Server, die ihre Zeit von Stratum 1 Servern beziehen und so weiter. Für diesen Einsatzzweck reicht es zwar locker einen Stratum 2 Server (Liste) zu nehmen, aber man kann auch einen Stratum 1 (Serverliste) und einen 2 oder 2 Stratum 1 Server nehmen wenn man das möchte. Ich nehme jetzt für diesen Test folgende Server:
- ptbtime1.ptb.de (Physikalisch-Technische Bundesanstalt)
- ntp2.ja.net (University of London Computer Centre)
Dann benötigen wir das Packet ntpdate
apt-get install ntpdate
Um nun manuell einen Abgleich der Systemuhr mit beiden Server durchzuführen führen wir folgenden Command aus:
ntpdate -b ptbtime1.ptb.de ntp2.ja.net
Achtung, die Option -b ändert die Systemzeit sofort wenn die Zeitdifferenz zwischen der Systemuhr und den Zeitservern größer als 128 Milisekunde ist und könnte eventuell laufende Dienste stören, Logs verfälschen etc.
Um nun jede Nacht um 2 die Systemzeit zu aktualisieren legen wir noch einen Cronjob an. Als berechtigter User crontab -e eingeben und folgendes in den Crontab hinzufügen:
0 2 * * * /usr/sbin/ntpdate -b ptbtime1.ptb.de ntp2.ja.net
Und fertig, die Systemuhr sollte nicht wieder abweichen.