To main content

Systemzeit mit NetworkManager und ntp aktuell halten (Gentoo)

Veröffentlicht von Benjamin Marwell am

Clock (wie NTP)Auf modernen Desktopsystemen ist es inzwischen eine Selbstverständlichkeit, dass ein Benutzer die Netzwerkverbindungen selbst managen kann - gerade für Laptops mit WLAN unabdinglich. Für Linux-Systeme erledigt oft NetworkManager genau diese Aufgabe.

Gentoos NTP-Daemon

Versucht man nun auf einem Gentoo-Linux, NTP (Network Time Protocol) zur Zusammenarbeit mit dem NetworkManager zu überreden, merkt man alsbald: Der NTPd bzw. ntp-client werden nicht starten. Stattdessen erhält man nur diese Meldung:

* Setting clock via the NTP client 'ntpdate' ...
Error resolving 0.gentoo.pool.ntp.org: Name or service not known (-2)
Error resolving 1.gentoo.pool.ntp.org: Name or service not known (-2)
Error resolving 2.gentoo.pool.ntp.org: Name or service not known (-2)
Error resolving 3.gentoo.pool.ntp.org: Name or service not known (-2)
 * Failed to set clock                                         [ !! ]
 * ERROR: ntp-client failed to start
Hintergrund ist, dass der ntp-client nicht feststellen kann, ob eine Netzwerkverbindung schon besteht - das traditionelle ifup und ifdown wird ja durch den NetworkManager abgelöst. So wird er also zu früh starten. Da also ein auf ein Event vom NetworkManager gewartet werden muss, kann man den ntp-client schon einmal getrost aus dem Boot-Vorgang herausnehmen:
$ rc-update delete ntp-client

Events aus dem NetworkManager

Glücklicherweise lässt sich der NTP-Client dann tatsächlich über den NetworkManager starten. Es werden automatisch Skripte im Verzeichnis /etc/NetworkManager/dispatcher.d  ausgeführt, als positionelle Parameter werden Interfacename (etwa eth0, eth1, wlan0 etc.) und der neue Status (up, down) übergeben. Man legt dort also die Datei /etc/NetworkManager/dispatcher.d/ntp-client.sh  mit folgendem Inhalt an:
#!/bin/bash
IF=$1;
STATE=$2;

if    [ "$IF" = "eth0" ] || [ "$IF" = "wlan0" ]
   && [ "$STATE" = "up" ]; then
    /etc/init.d/ntp-client start
else
    /etc/init.d/ntp-client stop
fi

Ggf. tauscht man hier noch die Interfacenamen aus oder erweitert diese um weitere Einträge. Wer viele verschiedene Interfaces hat, trägt hier am besten den Ausschluss auf "lo" ein. Für Desktops genügt diese Konfiguration aber und verhindert, dass über Tethering (z.B. vom Telefon oder UMTS-Modem) noch zusätzliche NTP-Abfragen verschickt werden.

Nun nicht vergessen, die Datei ausführbar zu machen:
$ chmod +x /etc/NetworkManager/dispatcher.d/ntp-client.sh

Jetzt sollte beim Booten des Systems die Fehlermeldung über den Networkmanager verschwinden, und nach Verbindungsaufbau des NetworkManagers der NTP-Client automatisch starten. Ziel erreicht.

Installation

Falls sich jemand vorab informiert hat: Das benötigte Paket heißt net-misc/ntp .

Quelle: http://paskov.biz/blog/?p=258