OpenNTPD auf ds-0.2.9-p8 vs. AVM-NTP für IP-Client

level20peon

Mitglied
Mitglied seit
11 Jul 2007
Beiträge
270
Punkte für Reaktionen
0
Punkte
16
Hallo,

ich habe eine FritzBox 5010 im lokalen Netzwerk hängen, die jedoch keinen Zugriff auf das Internet hat (und auch niemals hatte). In Folge dessen konnte die Box nie ihre Zeit korrekt setzen, da die in der "ar7.cfg" beschriebenen NTP-Server natürlich nicht erreichbar sind.
ntpclient {
server_list = "0.europe.pool.ntp.org";
}

Nun habe ich jedoch im Netzwerk eine FritzBox 7170 angeschlossen, der ich das OpenNTPD Paket des ds-mod spendiert habe. Dieser Dienst holt sich die Zeit aus dem Internet und stellt sie lokal als NTP-Server zur Verfügung. Daraufhin habe ich die "ar7.cfg" der 5010 folgendermaßen modifiziert:

ntpclient {
server_list = "IP_DES_LOKALEN_NTP_SERVERS";
}

Jetzt holt sich die 5010 brav die Zeit vom lokalen NTP-Server der 7170, denn die Ereignisanzeige gibt keine Zeiten wie "01.01.70 00:00:39" mehr wider, sondern beispielsweise "18.08.07 17:21:38". So weit so gut.
Wenn ich jedoch per telnet auf die 5010 zugreife und "date" eingebe wird "Sun Sep 8 14:00:00 CEST 2002" als Datum angezeigt. Wieso wird die Zeit nicht global übernommen ? Was mache ich falsch bzw was habe ich nicht richtig verstanden ? Gibt es eine Möglichkeit das richtige Datum aus dem "AVM-Bereich" der Box zu übernehmen ?

Ich würde mich über jede Information freuen :D
 
Zuletzt bearbeitet von einem Moderator:
Wenn die Box kein richtiges Datum hat, wird das Datum in der Ereignisanzeige aus der aktuellen Zeit des Clients berechnet. Dies kannst Du testen, indem Du auf dem PC einen andere Zeit einstellst.

Das Datum Sep 2002 ist aber seltsam, weil die Box mit dem 01.01.2000 startet. Oder hast Du auf dieser Box schon über zwei Jahre Uptime?
 
RalfFriedl schrieb:
Wenn die Box kein richtiges Datum hat, wird das Datum in der Ereignisanzeige aus der aktuellen Zeit des Clients berechnet. Dies kannst Du testen, indem Du auf dem PC einen andere Zeit einstellst.

Tatsache ! Das heißt, dass die Änderung in der "ar7.cfg" total nutzlos war und sich die Box überhaupt nicht am lokalen NTP-Server synchronisiert :noidea:.


RalfFriedl schrieb:
Das Datum Sep 2002 ist aber seltsam, weil die Box mit dem 01.01.2000 startet. Oder hast Du auf dieser Box schon über zwei Jahre Uptime?

Insgesamt werden es schon zwei Jahre uptime sein, jedoch bezieht sich deine Frage wahrscheinlich auf die Zeit nach dem letzten reboot. Diese ist keinesfalls zwei Jahre, sondern allenfalls ein paar Minuten. Ich bin nach wie vor ratlos. Auch dieser Thread brachte mich bei meinem Problem leider nicht weiter.
 
Beitrag #5 aus dem Thread enthält eine Aussage von AVM zu dem Thema:
Bei Betrieb des AVM-Gerätes an einem ISDN-Anschluss oder bei Aufbau einer DSL-Internetverbindung, wobei das AVM-Gerät für die Betriebsart "DSL-Router" bzw. "Eine Internetverbindung für alle Computer verwenden (Router)" oder "Internetverbindung selbst aufbauen (NAT-Router mit PPPoE oder IP)" eingestellt sein muss.

Wird das AVM-Gerät hingegen in einer anderen Betriebsart oder an einem analogen Telefonanschluss betrieben, so kann eine automatische Ermittlung der Zeitinformationen nicht erfolgen.
Ich vermute, Deine Box läuft als IP-Client. Im ds-mod gibt es dafür ein Paket OpenNTP. Wenn Du nicht gleich den ds-mod verwenden willst, sollte es auch möglich sein, nur das Paket zu erstellen und es auf die Box zu bringen.
 
Die Aussage von AVM ist mir bekannt. Gerade das wollte ich ja mit der Modifizierung der "ar7.cfg" umgehen, wo ich einen lokalen NTP-Server als Zeitquelle spezifiziert habe. Ist das so wie im ersten Beitrag beschrieben denn nicht möglich ?

RalfFriedl schrieb:
Ich vermute, Deine Box läuft als IP-Client.

Genau.


RalfFriedl schrieb:
Im ds-mod gibt es dafür ein Paket OpenNTP.

Eben dieses Paket habe ich auf einer Box installiert, die im selben Netzwerk hängt wie die "Problem-Box". Besagte Box fungiert im Netzwerk als NTP-Server, welchen ich in der "ar7.cfg" der "Problem-Box" angegeben habe. Ausserdem hat die "Problem-Box" keinen Zugriff auf die Internetverbindung, weshalb OpenNTP hier nicht viel bringen würde, da es eine Verbindung erfordert. Des weiteren wär es ja doppelt gemoppelt zwei NTP Server in ein und das selbe Netzwerk zu packen :D.
 
Meine läuft auch als IP-Client. Das mit der ar7.cfg hatte ich auch schon mal probiert. Der multid von AVM, der auch den NTP-Client enthält, denkt sich wohl, wenn er die Internet-Verbindung nicht selbst aufbaut, kann er auch keine NTP Synchronisation vornehmen.
Das ist zwar unsinnig, weil auch ein IP-Client könnte sich aktualisieren, und die aktuelle Zeit zu haben ist sicher auch sinnvoll, aber das macht das Programm nun mal nicht.

Wenn sonst nichts dagegen spricht, würde ich auf die zweite Box auch ds-mod mit OpenNTP drauf machen.
 
RalfFriedl schrieb:
Der multid von AVM, der auch den NTP-Client enthält, denkt sich wohl, wenn er die Internet-Verbindung nicht selbst aufbaut, kann er auch keine NTP Synchronisation vornehmen.

OK, das muss ich wohl so hinnehmen ;).


RalfFriedl schrieb:
Wenn sonst nichts dagegen spricht, würde ich auf die zweite Box auch ds-mod mit OpenNTP drauf machen.

Dagegen sprechen zwei Dinge. Gravierend hierbei ist, dass die Box wie gesagt keine Internetverbindung hat. Weniger gravierend aber meines Erachtens unschön ist es aus zwei Stellen im Netzwerk die Zeit "im Internet abholen zu wollen". Da eine Box dies ja bereits tut müsste es nur einen Weg geben, um die Zeit von dieser Box "abzuholen". Der DS-Mod mit Rudi-Shell ist auch auf der "Problem-Box" installiert, weshalb ich per Rudi-cgi remote scripte aufrufen kann. Eine Möglichkeit an deren Umsetzung ich wegen meiner kläglichen Linux-Kenntnisse bis jetzt gescheitert bin ist also:

Die synchronisierte Box mit OpenNTPD nenne ich mal "BOX 1", die "Problem-Box" nenne ich "BOX 2".

Auf BOX 1 wird folgendes Script ausgeführt (am besten per Crontab einmal pro Tag aufgerufen):

date > /var/tmp/time.tmp
-wget -q -O - http://user:password@IP_BOX_2:81/cgi-bin/rudi_shellcmd.cgi?script=date /var/tmp/time.tmp (Zeit aus der /var/tmp/time.tmp übertragen)
rm /var/tmp/time.tmp
 
Es ist nicht nötig, daß die Box 2 sich die Zeit aus dem Internet holt. Das macht meine auch nicht.
Die Box 2 kann sich die Zeit von Box 1 holen, bloß nicht mit dem eingebauten NTP-Client von AVM.

Ich weiß nicht, ob die Web-Konfiguration von OpenNTP inzwischen ein Möglichkeit hat, den Zeitserver einzustellen, aber man kann ihn auf jeden Fall in die Konfigurationsdatei eintragen.

Wenn /tmp/flash/openntpd_conf nicht existiert, dann /mod/etc/default.openntpd/openntpd_conf nach /tmp/flash/openntpd_conf kopieren.
In /tmp/flash/openntpd_conf pool.ntp.org durch die Adresse der Box 1 ersetzten.
modsave aufrufen.
Schon sollte das Ganze funktionieren.
 
Zuletzt bearbeitet:
Das klingt nach einer guten Idee.

RalfFriedl schrieb:
Ich weiß nicht, ob die Web-Konfiguration von OpenNTP inzwischen ein Möglichkeit hat, den Zeitserver einzustellen, aber man ihn auf jeden Fall in die Konfigurationsdatei eintragen.

Nein, die Möglichkeit gibt es nicht.


Auf meiner 5010 läuft ds-0.2.9-p8, also Kernel 2.4. In der menuconfig gibt es kein OpenNTPD. Ich müsste also das Paket manuell einpflegen und bin mir unsicher, ob OpenNTPD überhaupt mit dem Kernel 2.4 funktioniert. Da ich mir zwei Tage lang ein Bein ausgerissen habe bevor ich das letzte Addon eingefügt habe frage ich lieber vorher nach. Deshalb war ich auch auf die Skript-Variante aus, weil sie sehr viel einfacher funktioniert hätte (Wenn es überhaupt so möglich ist).
 
Ich vermute nicht, daß es das große Abhängigkeiten vom Kernel gibt. Die wichtigen Systemaufrufe sind ja schon seit langer Zeit unverändert.

Eher könnte es ein Problem mit den verschiedenen Versionen der uClibc geben. Bei den älteren Kernels soll auch eine ältere uClibc dabei gewesen sein.

Fang mal damit an, das verzeichnis /make/openntpd vom neuen ds-mod in den alten herein zu kopieren und dann "make openntpd-precompiled" aufzurufen.

Wenn Du Glück hast, kommt dabei eine ausführbare Datei heraus, die Du auf der Box testen kannst. Als Konfigurationsdatei brauchst Du nur eine Zeile mit der IP der Box 1.
Code:
servers 192.168.X.Y
Dann aufrufen mit
Code:
ntpd -d -s -f /var/ntpd.conf
Wenn es funktioniert, dann später die Option -d weglassen.
 
OK, ich habe das "/make/openntpd" wie von dir beschrieben kopiert und "make openntpd-precompiled" aufgerufen.

RalfFriedl schrieb:
Eher könnte es ein Problem mit den verschiedenen Versionen der uClibc geben. Bei den älteren Kernels soll auch eine ältere uClibc dabei gewesen sein.

Wie von dir vermutet scheint es bei der uClibc ein Problem zu geben. Am Ende des precompiles wird nach dem Verzeichnis "/home/bofg/ds-0.2.9/source/toolchain/uClibc-0.9.26" gefragt, was jedoch nicht vorhanden ist.

In der menuconfig gibt es unter "Advanced options" -> "Shared libraries" diverse "uClibc" Einträge mit dem Suffix "0.9.26.so". Dies scheint also die verwendete library-Version zu sein.
In dem menuconfig der 7170 mit Kernel 2.6 ist das Suffix "0.9.28.so" zu finden.
Es bestätigt sich also der Verdacht, dass die Version eine andere ist.

Gibt es eine Möglichkeit diese Libraries zu patchen ?:noidea:
 
Mit dem alten ds-mod habe ich mich nie beschäftigt.
Im Prinzip ist es wohl auch egal, welche Library verwendet wird, Hauptsache es ist die, die auch auf der Box ist.

Bevor Du lange herumprobierst, schau erstmal, ob das mit dem neuen ds-mod erstelle ntpd auch auf der alten Box funktioniert.
Wenn nicht, versuch beim alten ds-mod "make source/openntpd-3.9p1/ntpd"

Den alten ds-mod hast Du doch ansonsten funktionsfähig? Das Verzeichnis uClibc-0.9.26 muß dort irgendwo existieren, wenn es die Version ist, die dort verwendet wird.
 
RalfFriedl schrieb:
Den alten ds-mod hast Du doch ansonsten funktionsfähig? Das Verzeichnis uClibc-0.9.26 muß dort irgendwo existieren, wenn es die Version ist, die dort verwendet wird.

Ja, der funktioniert und das Verzeichnis ist auch vorhanden.


RalfFriedl schrieb:
Bevor Du lange herumprobierst, schau erstmal, ob das mit dem neuen ds-mod erstelle ntpd auch auf der alten Box funktioniert.
Wenn nicht, versuch beim alten ds-mod "make source/openntpd-3.9p1/ntpd"

Ich finde keinerlei Informationen darüber, wie ich das ntpd kopieren kann. Muss ich das vor dem Kompilieren noch kopieren, oder aus der FritzBox exportieren ? Das "make source/openntpd-3.9p1/ntpd" wirft leider auch einen Fehler aus. :confused:
 
Oben schreibst Du, daß /home/bofg/ds-0.2.9/source/toolchain/uClibc-0.9.26 nicht vorhanden ist. Jetzt schreibst Du, daß uClibc-0.9.26 vorhanden ist.
Anscheinend dann ja irgendwo anders. Dann schau mal, wo der Pfad drinsteht und änder ihne entsprechend ab.

Im neuen ds-mod ist unter packages/openntpd-3.9p1/root/usr/sbin/ntpd das ntpd Programm. Dieses kannst Du auf die Box 2 kopieren und schauen, ob es funktioniert.

Du kannst auch versuchen, im neuen ds-mod ntpd statisch zu erstellen, das sollte dann überall funktionieren.
 
RalfFriedl schrieb:
Oben schreibst Du, daß /home/bofg/ds-0.2.9/source/toolchain/uClibc-0.9.26 nicht vorhanden ist. Jetzt schreibst Du, daß uClibc-0.9.26 vorhanden ist.
Anscheinend dann ja irgendwo anders. Dann schau mal, wo der Pfad drinsteht und änder ihne entsprechend ab.

Das "uClibc-0.9.26" Verzeichnis befindet sich nach der Ausführung von "make openntpd-precompiled" in "\source\avm-gpl-04.06\fritzbox_opensrc\base_ohio-8mb_build", wird jedoch wegen eines Fehlers nicht nach "\source\toolchain" kopiert. Nachdem ich dies nun manuell gemacht habe läuft das "make openntpd-precompiled" ein ganzes Stück weiter, wirft jedoch dann Fehler wie "mipsel-unknown-linux-gnu-gcc: Command not found" aus.


RalfFriedl schrieb:
Im neuen ds-mod ist unter packages/openntpd-3.9p1/root/usr/sbin/ntpd das ntpd Programm. Dieses kannst Du auf die Box 2 kopieren und schauen, ob es funktioniert.

Ich habe besagte Datei auf die 2.4er Box kopiert. Des weiteren habe ich noch eine Datei mit dem Inhalt "servers 192.168.X.Y" in auf die Box kopiert und sie "openntpd.conf" genannt. Ich hoffe mal dass das Verzeichnis aus dem ich das Programm testweise ausführe egal ist. Versucht habe ich es in "/var/tmp" und "/var/flash" mit "ntpd -d -s -f /var/tmp/openntpd.conf" (bzw /var/flash...). Beide Male erhielt ich "-sh: ntpd: not found" zurück.


RalfFriedl schrieb:
Du kannst auch versuchen, im neuen ds-mod ntpd statisch zu erstellen, das sollte dann überall funktionieren.

Ich verstehe ohnehin nur noch Bahnhof :D.
 
level20peon schrieb:
Ich habe besagte Datei auf die 2.4er Box kopiert. Des weiteren habe ich noch eine Datei mit dem Inhalt "servers 192.168.X.Y" in auf die Box kopiert und sie "openntpd.conf" genannt. Ich hoffe mal dass das Verzeichnis aus dem ich das Programm testweise ausführe egal ist. Versucht habe ich es in "/var/tmp" und "/var/flash" mit "ntpd -d -s -f /var/tmp/openntpd.conf" (bzw /var/flash...). Beide Male erhielt ich "-sh: ntpd: not found" zurück.
Die "besagte Datei" ist die Datei ntpd. Angenommen, Du hast sie nach /var/ntpd kopiert. Dann mußt Du sicherstellen, daß sie ausführbar ist und den Pfad mit angeben. Wo die Konfigurationsdatei steht, ist egal, es wird ja der komplette Pfadname angegeben.
Code:
# Ausführbar machen
$ chmod a+x /var/ntpd
# Voraussetzungen für ntpd
echo "ntp:x:123:123::/mod/home/ntp:/bin/false" >> /etc/passwd
mkdir -p /mod/home/ntp
chown root /mod/home/ntp
chmod 700 /mod/home/ntp
# Konfigurationsdatei
echo "servers 192.168.X.Y" > /var/ntpd.conf
# Start
/var/ntpd -d -s -f /var/ntpd.conf
Damit funktioniert es entweder, oder es kommt eine Meldung, die besagt, daß irgendeine Datei nicht gefunden wurde und das Programm nicht gestartet werden konnte.

Ich verstehe ohnehin nur noch Bahnhof :D.
Statisch linken ist der Gegensatz zu dynamisch linken. Wenn Du Windows etwas besser kennst, hast Du vielleicht schon von DDLs gehört (Dynamic Link Library). Ein dynamisch gelinktes Programm braucht auf den Zielsystem die dynamischen Libraries. Bei einem statisch gelinkten Programm wird alles in eine Datei gepackt. Das ist dann zwar größer, aber einfacher.

Um diese Datei zu erstellen, gehts Du bei einem fertig erstellten ds-mod ins Verzeichnis source/openntpd-3.9p1. Dort führst Du diese Kommandos aus:
Code:
make
rm ntpd
make CFLAGS="-static -s"
Die dabei entstandene Datei ntpd kopierst Du auf die Box 2 und versuchst das Ganze damit noch einmal.
 
Zunächst einmal danke, dass du dich mit meinem Problem befasst :D, muss ich an dieser Stelle einfach mal los werden.

RalfFriedl schrieb:
Code:
Ausführbar machen...
Damit funktioniert es entweder, oder es kommt eine Meldung, die besagt, daß irgendeine Datei nicht gefunden wurde und das Programm nicht gestartet werden konnte.

Ich musste das "$" vor dem "chmod" weglassen, weil mit dem Zeichen ein Fehler auftauchte. Am Ende erscheint ein "/var/ntpd: can't load library 'libgcc_s.so.1'".


RalfFriedl schrieb:
Statisch linken ist der Gegensatz zu dynamisch linken. Wenn Du Windows etwas besser kennst, hast Du vielleicht schon von DDLs gehört (Dynamic Link Library). Ein dynamisch gelinktes Programm braucht auf den Zielsystem die dynamischen Libraries. Bei einem statisch gelinkten Programm wird alles in eine Datei gepackt. Das ist dann zwar größer, aber einfacher.

Ja, das Prinzip ist mir klar, nur die Vorgehensweise in Linux nicht. Bei Windows könnte man fehlende Libraries wenn nicht allzu viele Abhängigkeiten bestehen einfach kopieren und per "regsvr32" nachregistrieren. Funktioniert etwas Ähnliches hier mit der "libgcc_s.so.1" ?


RalfFriedl schrieb:
Um diese Datei zu erstellen, gehts Du bei einem fertig erstellten ds-mod ins Verzeichnis source/openntpd-3.9p1. Dort führst Du diese Kommandos aus:
Code:
make...
Die dabei entstandene Datei ntpd kopierst Du auf die Box 2 und versuchst das Ganze damit noch einmal.

Das "make" am Anfang wurde mit "make: Für das Ziel >>all<< ist nichts zu tun." zurückgewiesen. Ich habe dann mal mit den nächsten Zeilen weitergemacht und eine "ntpd" erhalten, die statt 99,6KB nun 145KB groß ist. Ich nehme also an, dass der Prozess funktioniert hat. Mit dieser neuen "ntpd" erhalte ich nach Kopieren auf die Box und der oben beschriebenen Prozedur "# Ausführbar machen" den Fehler

Code:
fatal: getserverbyname: Input/output error
dispatch_imsg in main: pipe closed
Lost child: child exited
Terminating
 
Tut mir leid mit dem $-Zeichen. Das ist der Standard Prompt der Shell.
Es sollte heißen, daß danach ein Kommando kommt, aber in den anderen Zeilen habe ich das auch nicht mehr davor gesetzt. Die Zeilen nach dem #-Zeichen sind Kommentare, ich denke mal, daß ist klar geworden.

Du kannst alle benötigten Libraries nach /mod/lib kopieren, aber das statische Binary hast Du ja schon, und damit geht es einfacher.

Die Meldung "make: Für das Ziel >>all<< ist nichts zu tun." ist kein Fehler, sondern eine Feststellung. Wenn der ds-mod vorher komplett erstellt wurde, ist das auch zu erwarten, kann aber zur Sicherheit nicht schaden.

Was anscheinend noch fehlt, ist die Datei /etc/services. Du findest sie im neuen ds-mod unter packages/openntpd-3.9p1/root/etc/services. Diese muß ins Dateisystem der Box 2. Also zum Beispiel im alten ds-mod nach root/etc/services kopieren und ds-mod neu erstellen und flashen. Dann sollte die Datei in der Box 2 als /etc/services zu finden sein. Bei der Gelegenheit kannst DU auch gleich das ntpd-Binary ins Flash unterbringen.
 
RalfFriedl schrieb:
Was anscheinend noch fehlt, ist die Datei /etc/services. Du findest sie im neuen ds-mod unter packages/openntpd-3.9p1/root/etc/services. Diese muß ins Dateisystem der Box 2. Also zum Beispiel im alten ds-mod nach root/etc/services kopieren und ds-mod neu erstellen und flashen. Dann sollte die Datei in der Box 2 als /etc/services zu finden sein. Bei der Gelegenheit kannst DU auch gleich das ntpd-Binary ins Flash unterbringen.

OK, bevor ich jetzt dreimal flashe, die "services" habe ich kopiert. Wohin sollte ich die "ntpd" kopieren ? Ist es danach einfach ausführbar, ohne es nach jedem reboot ausführbar zu machen ? Sollte ich am Ende die Datei per crontab einmal pro Tag ausführen lassen, oder wird sie dann automatisch geladen ? Wenn letzteres der Fall ist müsste ich doch noch irgendwo eine config ablegen, oder ? Sollte dies dann nicht auch vor dem flashen noch eingebaut werden ?
 
Im neuen ds-mod wird die Datei in /usr/sbin/ntpd abgelegt.
Ob eine Datei ausführbar ist, siehst Du mit
Code:
$ [B]ls -l /usr/sbin/ntpd[/B]
-rw[B]x[/B]------    1 root     root        63568 Jul 25 23:41 /usr/sbin/ntpd
Dabei wird "ls -l /usr/sbin/ntpd" nach dem Prompt eingegeben, die nächste Zeile ist die Ausgabe des Befehls. Wichtig ist das markierte "x" in der vierten Spalte.

Wenn die Datei mit make erstellt worden ist, ist sie schon ausführbar. Nachdem die Datei im Flash ist, kann man nichts mehr daran ändern, auch nicht die Zugriffsrechte. kriegaex empfiehlt immer wieder mal einen Linux/Unix Einsteigerkurs. Ich habe den Link gerade nicht greifbar, aber wenn Du mal sowas siehst, solltest Du es Dir mal durchlesen.

Du hattest mal geschrieben, daß ntpd nicht gestartet werden konnte. Dafür gibt es zwei mögliche Gründe: Die Datei ist nicht ausführbar, oder die Datei ist nicht vorhanden. Daher habe ich geschrieben, Du sollst die Datei ausführbar machen (das schadet nicht, auch wenn sie schon ausführbar ist) und die Datei mit vollem Pfadnamen aufrufen.
Die Datei wird unter Linux immer ausführbar erstellt, aber je nachdem, wie Du sie kopierst hast, kann es sein, daß die Kopie nicht mehr ausführbar ist.

Rufe im neuen ds-mod aus dem Basis-Verzeichnis "make openntpd-precompiled" auf. Das sollte die vorhin erstellt statische ntpd Datei und alles andere nach packages/openntpd-3.9p1 kopieren.
Kopiere dann das Verzeichnis packages/openntpd-3.9p1 vom neuen ds-mod nach addon/openntpd-3.9p1 im alten ds-mod und füge dann eine Zeile "openntpd-3.9p1" in der Datei addon/static.pkg ein. Dann sollte das komplette Paket in den alten ds-mod kommen.
 
Kostenlos!

Statistik des Forums

Themen
248,541
Beiträge
2,293,838
Mitglieder
378,047
Neuestes Mitglied
PetraH65