Erstellt vor 8 Jahren

Geschlossen vor 8 Jahren

Zuletzt geändert vor 7 Jahren

#818 closed enhancement (fixed)

OPENDD package

Erstellt von: sf3978 Verantwortlicher:
Priorität: low Meilenstein: freetz-1.2
Komponente: packages Version: devel
Stichworte: opendd Beobachter:
Product Id: Firmware Version:

Beschreibung

Im Anhang ein Patch für opendd (binary only), ein zuverlässiger DynDNS-Client für die FritzBox. Muss nicht als daemon aktiv sein, kann mit rc.custom, onlinechanged, etc. verwendet werden.

Anhänge (28)

new_proper_opendd.patch (10.4 KB) - hinzugefügt von sf3978 vor 8 Jahren.
gui_opendd.patch (15.5 KB) - hinzugefügt von sf3978 vor 8 Jahren.
gui_opendd_proper_240510.patch (15.2 KB) - hinzugefügt von sf3978 vor 8 Jahren.
new_opendd_ports_80_443.patch (16.0 KB) - hinzugefügt von sf3978 vor 8 Jahren.
daemon-gui-opendd.patch (17.2 KB) - hinzugefügt von sf3978 vor 8 Jahren.
rc_opendd.txt (2.1 KB) - hinzugefügt von sf3978 vor 8 Jahren.
sh-x_rc_opendd_start.txt (6.0 KB) - hinzugefügt von sf3978 vor 8 Jahren.
icmptx.patch (3.9 KB) - hinzugefügt von sf3978 vor 8 Jahren.
sh-x_etc_init_d_rc_opendd_start_050610.txt (3.4 KB) - hinzugefügt von sf3978 vor 8 Jahren.
tun_gui_nodaemon_opendd_new.patch (17.6 KB) - hinzugefügt von sf3978 vor 8 Jahren.
matude_0_1.patch (3.9 KB) - hinzugefügt von sf3978 vor 8 Jahren.
matude.patch (1.6 KB) - hinzugefügt von sf3978 vor 8 Jahren.
opendd_matude.patch (17.2 KB) - hinzugefügt von sf3978 vor 8 Jahren.
online_matude.patch (3.9 KB) - hinzugefügt von sf3978 vor 8 Jahren.
wenn nicht aus der Anwendung, dann kann matude auch mit onlinechanged gestartet werden.
matude_with_source_code_307010.patch (8.0 KB) - hinzugefügt von sf3978 vor 8 Jahren.
ssl_y_chmod_755_opendd_matude_050710.patch (25.8 KB) - hinzugefügt von sf3978 vor 8 Jahren.
opendd_get_ip.patch (2.2 KB) - hinzugefügt von oliver vor 8 Jahren.
OpenDD patch to read external ip from /var/tmp/ip
getipad.patch (2.6 KB) - hinzugefügt von sf3978 vor 8 Jahren.
package to read external ip from sbin/showdsldstat
opendd-10_days.patch (3.4 KB) - hinzugefügt von cuma vor 8 Jahren.
170_main_c.patch (388 Byte) - hinzugefügt von sf3978 vor 8 Jahren.
141_opendd_c.patch (2.1 KB) - hinzugefügt von sf3978 vor 8 Jahren.
… von einigen Kommentaren bereinigter Patch.
142_opendd_c.patch (2.7 KB) - hinzugefügt von sf3978 vor 8 Jahren.
… update mit "falscher" IP 127.168.178.1 ist möglich.
142_opendd_c--rc.opendd.patch (1.0 KB) - hinzugefügt von cuma vor 8 Jahren.
jdn.c (1.8 KB) - hinzugefügt von sf3978 vor 8 Jahren.
… für evtl. patchen von opendd (funktionierender/getesteter C-Quellcode für Datum, Julian day number und Dateien)
160_main_c.patch (2.3 KB) - hinzugefügt von sf3978 vor 8 Jahren.
erzeugt die Dateien "opendd.start", "opendd.date" und "opendd.ip"
opendd-ip_by_file.patch (1005 Byte) - hinzugefügt von cuma vor 8 Jahren.
opendd - no_dummyif-get_ip_param-ip_from_file.patch (6.5 KB) - hinzugefügt von cuma vor 8 Jahren.
opendd_no_border_stun_static.patch (30.1 KB) - hinzugefügt von sf3978 vor 6 Jahren.

Alle Anhänge herunterladen als: .zip

Änderungshistorie (121)

Geändert vor 8 Jahren durch sf3978

comment:1 Geändert vor 8 Jahren durch sf3978

Im Anhang der Patch für opendd mit Freetz-WEB-IF (Konfigurieren, Start/Stop/Restart).

Geändert vor 8 Jahren durch sf3978

comment:2 Geändert vor 8 Jahren durch sf3978

mein opendd funktioniert nicht zuverlässig mit dem Freetz-WEB-IF. Ein Image mit trunk 4913 funkioniert ohne Probleme, der Rest will nicht mehr. Wenn ich "modreg cgi 'opendd' 'OpenDD'" manuell aufrufe, erhalte ich im Freetz-WEB-IF die Meldung: Fehler: Kein Skript für das Paket 'opendd'. Aber das Skript "opendd.cgi" ist vorhanden und sieht so aus:

#!/bin/sh

PATH=/bin:/usr/bin:/sbin:/usr/sbin
. /usr/lib/libmodcgi.sh

check "$OPENDD_ENABLED" yes:auto "*":man

sec_begin '$(lang de:"Starttyp" en:"Start type")'

cat << EOF
<p>
<input id="auto" type="radio" name="enabled" value="yes"$auto_chk><label for="auto"> $(lang de:"Automatisch" en:"Automatic")</label>
<input id="manual" type="radio" name="enabled" value="no"$man_chk><label for="manual"> $(lang de:"Manuell" en:"Manual")</label>
</p>
EOF

sec_end
sec_begin '$(lang de:"Konfigurationsdatei" en:"Configuration file")'

cat << EOF
<p>
<textarea id="config" style="width: 500px; " name="config" rows="30" cols="80" wrap="off">$(html "$OPENDD_CONFIG")</textarea>
</p>
EOF

sec_end

Was mache ich flasch? Kann mir jemand helfen? Danke.

comment:3 Geändert vor 8 Jahren durch oliver

Ist das Skript ausführbar? Ansonsten schau mal in die pkgconf.cgi. Das Skript wird beim Booten in rc.mod nach /mod/… (/mod/usr/lib/cgi-bin/$package.cgi) verlinkt. Ist der Link vorhanden?

comment:4 Geändert vor 8 Jahren durch sf3978

Die Ausführbarkeit der Skripte scheint der Grund zu sein. Auf dem Build-System waren (sind) die 1. Skripte ausführbar. Wenn ich den Ordner "make/opendd" von der 1. trunk-rev. in der ich WEB-IF für opendd erstellt habe, zu einer neueren kopiere, funktioniert es. Wenn ich in einer neuen trunk-rev. das Paket mit einem Patch (für opendd) einfüge, sind die Skripte nicht mehr ausführbar und dann funktioniert es nicht (d. h. die Links sind auch nicht vorhanden). Auch wenn ich die ausführbaren Skripte kopiere und dann etwas abändere und speicher, ist die Ausführbarkeit der Skripte nicht mehr vorhanden (und es funktioniert nicht). OK, das war mein Fehler, weil ich das nicht überprüft habe. Wieder etwas dazu gelernt. Vielen Dank für die Hilfe. Das Ticket kann geschlossen werden.

comment:5 Geändert vor 8 Jahren durch oliver

patch kann leider keine Ausführungsrechte setzen. Daher passiert es auch immer wieder, dass die beim Einchecken vergessen werden…

Das Ticket bleibt natürlich noch auf. Evtl. kommt das Paket ja noch in den trunk.

comment:6 Geändert vor 8 Jahren durch sf3978

Ja, wenn ich nur gepatcht hätte, wäre ich evtl. dahinter gekommen. Aber ich habe auch kopiert & geändert, und dann war die Ausführbarkeit auch weg. D. h. mal ging's, mal ging's nicht und ich konnte mir kein Reim drauf machen, was da los ist.
Den letzten Patch, so wie es jetzt bei mir funktioniert, hänge ich an.

Geändert vor 8 Jahren durch sf3978

comment:7 Geändert vor 8 Jahren durch oliver

Wie war das mit opendd ohne libcrypto? Kannst du das noch einbauen?

comment:8 Geändert vor 8 Jahren durch er13

Ich habe mal eine Frage, was ist denn das in rc.opendd in der start-Funktion, muss es sein?

ifconfig dsl:0 down 1>&2
sleep 1
ifconfig dsl:0 inet $(get_ip -d)
sleep 1

comment:9 Geändert vor 8 Jahren durch sf3978

Ja, ich denke das muss schon sein, denn opendd will bei jedem Updaten/Aktuallisieren/Überprüfen, von einem Interface (hier dsl:0) die AKTUELLE IP-Adresse haben/lesen. Ich denke die start-Funktion ist dafür prädestiniert. Es sei denn jemand kennt eine elegantere Lösung.
Übrigens, opendd kann auch für den Provider "noip" verwendet werden. Evtl. auch für andere dyndns-Provider. Dann braucht man für jeden Provider eine zusätzliche (extra) opendd.conf-Datei.

comment:10 Geändert vor 8 Jahren durch sf3978

@oliver: Z. Zt. aktiviert der Makefile-Patch die libcrypto permanent in der Makefile-Datei. Meines Erachtens wäre die richtige/optimale Lösung, in der opendd.mk-Datei Suboptionen (mit oder ohne libcrypto) einzutragen. Das könnte ich am kommenden Wochenende evtl. realisieren.

comment:11 Geändert vor 8 Jahren durch sf3978

Im Anhang der Patch für opendd, wahlweise ohne und mit libcrypto.

Geändert vor 8 Jahren durch sf3978

comment:12 Geändert vor 8 Jahren durch sf3978

Ich empfehle opendd als nodaemon zu verwenden. Wer onlinechanged auf der Box hat, kann das mit folgendem Eintrag (bei online) im Freetz-Web-IF machen:

ifconfig dsl:0 inet $(get_ip -d);
     sleep 1;
     sh /var/mod/etc/init.d/rc.opendd start;

Konfiguration als nodaemon ist zu beachten.
Wer zwischendurch updaten will, kann das mit einem Klick auf Start, im Freetz-Web-IF machen.

comment:13 Geändert vor 8 Jahren durch oliver

Dann pack doch gleich eine Datei für onlinechanged dazu. Der vsftpd macht das z.B. auch so. Mit dem ifconfig dsl müssen wir erst mal schauen, ob wir das so nehmen können.

edit: siehe source:trunk/make/vsftpd/files/root/etc/onlinechanged/reload_vsftpd

comment:14 Geändert vor 8 Jahren durch sf3978

OK, da muss ich mich noch schlau machen und schauen wie das geht.

comment:15 Geändert vor 8 Jahren durch sf3978

Im Anhang der neue Patch mit "onlinechanged/start_opendd". Danke für die Hilfe.
Eine Frage zu "ifconfig dsl:0 inet $(get_ip -d)". Ist das Problem nur der Name "dsl" oder ist dieser gesamte Eintrag in der "rc.opendd" nicht OK?

Geändert vor 8 Jahren durch sf3978

comment:16 Geändert vor 8 Jahren durch sf3978

Ich habe nachgedacht und nachdem ifconfig nicht in die rc.opendd soll, werde ich versuchen ein Interface für die öffentliche IP-Adresse, mit einem noch zu erstellenden extra Freetz-Paket, z. B. InetIP (analog dem Paket VirtualIP), zu generieren. opendd soll dann von diesem Paket abhängig sein. Mit Hilfe von onlinechanged, soll dieses Paket dem Interface immer die öffentliche IP-Adresse zuordnen. Das Interface werde ich "eth0:13" nennen.

comment:17 Antwort: Geändert vor 8 Jahren durch oliver

Wir hatten gerade das Problem, dass ein solches virtuelles Interafce die ganze Box still gelegt hat. Das müsste also auch erst überprüft werden (7270 Labor IPv6).

comment:18 Geändert vor 8 Jahren durch sf3978

OK, verstanden. Danke für die Mitteilung.

Geändert vor 8 Jahren durch sf3978

comment:19 Geändert vor 8 Jahren durch sf3978

Um die Probleme mit dem virtuellen Interface (hier dsl:0) zu umgehen/vermeiden, habe ich ein ressourcenschonendes Programm gesucht und gefunden (icmptx, siehe Patch im Anhang), mit dem man u. a. auch ein tun-Interface erstellen kann, dem man die öffentliche IP-Adresse der Box zuweist (iface = tun0), die dann von opendd gelesen werden kann. Ich habe es getestet und es funktioniert (siehe sh-x- und rc.-Datei im Anhang).

comment:20 Geändert vor 8 Jahren durch sf3978

Ergänzung: icmptx darf nicht externalisiert werden, weil es dann zu spät zur Verfügung steht (bei reboot der Box).

Geändert vor 8 Jahren durch sf3978

comment:21 Geändert vor 8 Jahren durch sf3978

Im Anhang der neue Patch mit den Änderungen in "opendd.mk", "Config.in" und "rc.opendd". Eine virtuelle-IP wird nicht mehr benötigt. opendd bekommt die aktuelle öffentliche IP-Adresse, via tun0-Device. Nach der Aktualisierung wird das Programm icmptx und das tun0-Device beendet.

Geändert vor 8 Jahren durch sf3978

comment:22 Geändert vor 8 Jahren durch sf3978

Ich habe icmptx so abgeändert, dass mit der Änderung (matude) nur ein temporäres tun0-device erstellt werden kann. Mehr ist für opendd bzw. für evtl. andere Anwendungen die eine (öffentl.) IP-Adresse von einem interface (hier tun0) haben wollen, auch nicht erforderlich. Ich habe diese neue Anwendung (matude + opendd) auf meiner Box getestet bzw. in Benutzung. Manuell kann man auch testen: "matude &", "ifconfig tun0 inet $(get_ip -d)", "ps", "ifconfig", "kill <pid of matude>°, "ps", "ifconfig".
Bis jetzt funktioniert es einwandfrei. Siehe Patches im Anhang.

Geändert vor 8 Jahren durch sf3978

Geändert vor 8 Jahren durch sf3978

Geändert vor 8 Jahren durch sf3978

Geändert vor 8 Jahren durch sf3978

wenn nicht aus der Anwendung, dann kann matude auch mit onlinechanged gestartet werden.

comment:23 Geändert vor 8 Jahren durch sf3978

Da der Quellcode für matude nicht umfangreich ist, habe ich diesen in das Paket integriert. D. h. ein manuelles Kopieren des tar.gz-Archives (matude-0.1.tar.gz), in das Verzeichnis dl ist nicht erforderlich. Siehe neuen Patch im Anhang (matude_with_source_code_307010.patch):

Geändert vor 8 Jahren durch sf3978

Geändert vor 8 Jahren durch sf3978

comment:24 Geändert vor 8 Jahren durch oliver

Ist der Patch von vor 2 Wochen vollständig? Angesichts der immer wieder auftauchenden Nachfragen wegen inadyn_mt und dem fehlenden Source von tuxdns wäre opendd doch die Lösung.

  1. SSL-Unterstützung ist möglich.
  2. Wie siehts aus, wenn man mehrere Adressen aktualisieren will? Müssen dafür mehrere Instanzen des Daemons gestartet werden?
  3. Ist das Webinterface wie das von inadyn gestaltet?
  4. Wie siehts mit Logging aus?

comment:25 Antwort: Geändert vor 8 Jahren durch cuma

Ein Vorteil sollte noch sein, dass es nicht immer laufen muss sondern nur mit onlinechanged. Anscheinend wird aber in den Skripten versucht beide Arten nutzbar zu machen was ich überflüssig finde.
Gibt es jetzt keinen anderen Weg für die IP als

ifconfig tun0 "$(get_ip -d)" netmask 255.255.255.255 

Die "chmod 755" in make/opendd und make/matude braucht man nicht. Das "cd $(FREETZ_BASE_DIR)" kommt mir als Makefile-Unwissender komisch vor. "modlib_restart" zu nutzen aber kein "modlib_start" passt nicht so ganz ("if [ "$OPENDD_ENABLED" != "yes" ]; then …" fällt dann auch weg)

comment:26 Geändert vor 8 Jahren durch sf3978

Replying to oliver:

Ist der Patch von vor 2 Wochen vollständig?

Ja, aber ich empfehle diesen Patch zu verwenden. Hat den Vorteil das matude (d. h. das tun0-device) aus rc.opendd temporär gestartet und erzeugt wird und nicht als eigener Dienst von einem onlinechanged-Ereignis ausgelöst werden muss.

Angesichts der immer wieder auftauchenden Nachfragen wegen inadyn_mt und dem fehlenden Source von tuxdns wäre opendd doch die Lösung.

  1. SSL-Unterstützung ist möglich.
  2. Wie siehts aus, wenn man mehrere Adressen aktualisieren will? Müssen dafür mehrere Instanzen des Daemons gestartet werden?

Mehrere Adressen können aktualisiert werden. Es müssen nicht mehrere Instanzen des Daemons gestartet werden.

  1. Ist das Webinterface wie das von inadyn gestaltet?

Nein, denn über das Freetz-WEB-IF muss nur eine Konfigurationdatei eingegeben werden und evtl. die Wirkung des onlinechanged-Ereignisses konfiguriert werden. Ich empfehle die Benutzung von opendd im nodaemon-Modus. Auslöser für das updaten/prüfen im nodaemon-Modus, ist das onlinechanged-Ereignis.

  1. Wie siehts mit Logging aus?

Logging erfolgt über syslogd bzw. ich empfehle die Benutzung der eMail-Benachrichtigung.

comment:27 als Antwort auf: ↑ 25 Geändert vor 8 Jahren durch sf3978

Replying to cuma:

Ein Vorteil sollte noch sein, dass es nicht immer laufen muss sondern nur mit onlinechanged. Anscheinend wird aber in den Skripten versucht beide Arten nutzbar zu machen was ich überflüssig finde.

OK, könnte geändert werden wenn erwünscht, aber warum soll der Benutzer nicht auch mal bewusst den daemon starten können?

Gibt es jetzt keinen anderen Weg für die IP als

ifconfig tun0 "$(get_ip -d)" netmask 255.255.255.255 

Ein anderer Weg ist mir bis dato nicht bekannt. Evtl. könnte man schauen wie das mit der öffentlichen IP-Adresse bei "noip" gelöst worden ist.

Die "chmod 755" in make/opendd und make/matude braucht man nicht.

"chmod 755" ist nur für die Anwendung als Patch im Build-System gedacht, damit die erforderlichen Skripte nicht mehr ausführbar gemacht werden müssen.;-)

Das "cd $(FREETZ_BASE_DIR)" kommt mir als Makefile-Unwissender komisch vor. "modlib_restart" zu nutzen aber kein "modlib_start" passt nicht so ganz ("if [ "$OPENDD_ENABLED" != "yes" ]; then …" fällt dann auch weg)

OK, hier besteht evtl. noch Optimierungsbedarf.

comment:28 Antwort: Geändert vor 8 Jahren durch cuma

Das mit den 2 Arten ist so eine Sache. Momentan wird im rc-Skript behauptet, dass es im nodaemon-mode läuft wenn pidof leer ist. Könnte allerdings auch sein dass es "normal" läuft aber beendet ist… Es macht die Sache halt vor allem beim Fehlersuchen kompliziert und (ich denke dass) man braucht nur 1 Art
Zum Interface: wäre es nicht besser auf matude komplett zu verzichten und stattdessen "int getifaceaddr(char ip)" in opendd.c so zu patchen dass "get_ip" von Freetz verwendet wird?

comment:29 als Antwort auf: ↑ 28 Geändert vor 8 Jahren durch sf3978

Replying to cuma:

Das mit den 2 Arten ist so eine Sache. Momentan wird im rc-Skript behauptet, dass es im nodaemon-mode läuft wenn pidof leer ist. Könnte allerdings auch sein dass es "normal" läuft aber beendet ist… Es macht die Sache halt vor allem beim Fehlersuchen kompliziert und (ich denke dass) man braucht nur 1 Art

OK, ich bin nun mal nicht der rc-Skript-Spezialist. Änderungen bzw. Verbesserungen die die Benutzung von opendd erleichtern und sicherer machen, sind immer gut und erwünscht.

Zum Interface: wäre es nicht besser auf matude komplett zu verzichten und stattdessen "int getifaceaddr(char ip)" in opendd.c so zu patchen dass "get_ip" von Freetz verwendet wird?

Auch hier, wenn jemand opendd.c so patchen kann, dass auf matude verzichtet werden kann, dann bitte machen. Ich und evtl. Andere werden dankbar sein.

Geändert vor 8 Jahren durch oliver

OpenDD patch to read external ip from /var/tmp/ip

comment:30 Antwort: Geändert vor 8 Jahren durch oliver

Vieleicht würde es auch ein einfaches ifconfig dsl:0 $(get_ip) tun? Tipp kommt von abraxxl

comment:31 Geändert vor 8 Jahren durch cuma

Das würde jedenfalls den Patch für opendd ersparen. Das Interface wird aber wahrscheinlich bei jedem multid-restart verschwinden, was aber egal sein dürft da es immer wieder gesetzt wird.

Sollen wird das dann unabhängig von opendd machen? Dann könnte man get_ip um einen Cache erweitern dass es zuerst die ip von dsl:0 nimmt falls vorhanden, sie sonst ermittelt. Gesetzt würde die ip dann immer mit onlinechanged, also unabhängig von opendd.

Man müsste nur darauf achten dass get_ip-onlinechanged vor opendd-onlinechanged ausgeführt wird

comment:32 als Antwort auf: ↑ 30 Geändert vor 8 Jahren durch sf3978

Replying to oliver:

Vieleicht würde es auch ein einfaches ifconfig dsl:0 $(get_ip) tun? Tipp kommt von abraxxl

Wo kann man diesen Tip von abraxxl nachlesen/einsehen?

comment:33 als Antwort auf: ↑ 17 Geändert vor 8 Jahren durch sf3978

Replying to oliver:

Wir hatten gerade das Problem, dass ein solches virtuelles Interafce die ganze Box still gelegt hat. Das müsste also auch erst überprüft werden (7270 Labor IPv6).

Gibt es seitens der Freetz-Entwickler die Bedenken gegen ein virtuelles Interface (hier dsl:0) nicht mehr? Denn ich hatte ursprünglich (siehe 1. Patch von vor 2 Monaten) die öffentliche IP-Adresse auch über dsl:0 lesen/feststellen lassen. Erst nach den Bedenken von Oliver, habe ich auf dsl:0 verzichtet und matude mit dem temporären tun0-Interface benutzt.

comment:34 Geändert vor 8 Jahren durch oliver

Sorry, da hab ich schon gar nicht mehr dran gedacht. Zur Not könnte man es wie mit matude machen, dass man das Interface gleich wieder löscht. Aber das mit dem Interface gefällt mir besser als das Auslesen aus einer Datei.

comment:35 Antwort: Geändert vor 8 Jahren durch oliver

  1. Welche Adressen kann man damit aktualisieren? Nur dyndns?
  1. Was bringt die sample-conf.conf, wenn man sie nicht nutzen kann? Oder kann man die irgendwie nutzen?
  1. Ich fände eine Oberfläche wie bei inadyn besser. Wir hatten uns mal darauf geeinigt, dass wir Freetz Pakete nicht durch das Kopieren der Konfigurationsdatei konfigurieren wollen. Ist natürlich einfacher für den Paketersteller, aber die DAUs haben wieder das Nachsehen.

comment:36 Antwort: Geändert vor 8 Jahren durch cuma

Durch ein zusätzliches Interface kann allesmögliche durch das AVM-ClosedSource-Zeug geschehen. Mann muss wenn man get_ip verwendet ja keine Zwischendatei anlegen, sondern kann direkt die Ausgabe von get_ip verwenden (meine ursprüngliche Idee)

comment:37 als Antwort auf: ↑ 36 Geändert vor 8 Jahren durch oliver

Replying to cuma:

sondern kann direkt die Ausgabe von get_ip verwenden

Wie genau willst du das anstellen?

comment:38 als Antwort auf: ↑ 35 Geändert vor 8 Jahren durch sf3978

Replying to oliver:

  1. Welche Adressen kann man damit aktualisieren? Nur dyndns?

Nein, bei mir auf der Box funktioniert es mit dyndns und noip. Es sollte aber mit allen dyndns-Provider funktionieren.

  1. Was bringt die sample-conf.conf, wenn man sie nicht nutzen kann? Oder kann man die irgendwie nutzen?

Die sample-conf.conf kann man auch weglassen. Die Konfiguration ist ja ganz einfach.

  1. Ich fände eine Oberfläche wie bei inadyn besser. Wir hatten uns mal darauf geeinigt, dass wir Freetz Pakete nicht durch das Kopieren der Konfigurationsdatei konfigurieren wollen. Ist natürlich einfacher für den Paketersteller, aber die DAUs haben wieder das Nachsehen.

Ich habe eine Oberfläche gewählt, wie sie z. B. für vtun und umurmur, im Freetz auch schon verwendet wird.

comment:39 Antwort: Geändert vor 8 Jahren durch cuma

Replying to oliver:

Wie genau willst du das anstellen?

Ich garnicht, da ich c(pp) wie gesagt nicht gut beherrsche. Stelle mir das aber ähnlich wie opendd_get_ip.patch vor, nur dass get_ip mit exec in opendd aufgerufen wird und die Ausgabe davon ausgewertet wird

comment:40 als Antwort auf: ↑ 39 Geändert vor 8 Jahren durch sf3978

Replying to cuma:

Stelle mir das aber ähnlich wie opendd_get_ip.patch vor, nur dass get_ip mit exec in opendd aufgerufen wird und die Ausgabe davon ausgewertet wird

Ja, und opendd darf dann auch nicht mehr in der Konfigurations-Datei nach einem Interface (zwecks öffentlicher IP-Adresse) suchen.

comment:41 Geändert vor 8 Jahren durch sf3978

Evtl. kann man mit der fgets-Funktion aus der Datei "/sbin/showdsldstat" die IP-Adresse lesen.

comment:42 Geändert vor 8 Jahren durch oliver

Man kann die Ausgabe von showdsldstat und get_ip nicht so einfach parsen. In C bin ich leider auch nicht so fit.

comment:43 Geändert vor 8 Jahren durch oliver

(In [5275]) * Add new package opendd, a inadyn-mt alternative (by sf3978)

  • refs #818
  • Called by onlinechanged on IP change
    • no need to run as a daemon

comment:44 Geändert vor 8 Jahren durch oliver

Ich habs jetzt mal so eingebaut, dass nur der onlinechanged Modus unterstützt wird. In der opendd_pem.def fehlt die deutsche Beschreibung.
Und ein "gescheites" Webinterface würde mir besser gefallen. Aber aus Zeitmangel werde ich mich nicht darum kümmern können.
Als Interface sollte dsl:1 benutzt werden. Funktioniert natürlich nicht für den manuellen Aufruf, weil es nur kurzzeitig angelegt wird.

comment:45 Geändert vor 8 Jahren durch cuma

(In [5278]) opendd (refs #818):

  • removed damon-mode leftover > fixed safing by webinterface
  • removed external.service file, it's not a service

comment:46 Geändert vor 8 Jahren durch cuma

Ich hab etwas aufgeräumt. Am Webinterface hab ich nichts geändert. Falls jemand Lust dazu hat hier eine Vorlage mit den Optionen:

##do not change
cert_path = /tmp/flash/opendd/opendd.pem
iface = dsl:1
runasdaemon = 0
pidfile_path = /var/run/opendd.pid
use_syslog = 1

##depends on make!
use_ssl = 0

##accounts
servername = members.dyndns.org
hostname = test.dyndns.org, test.dnsalias.net, test.dnsalias.org
username = test
password = test

##advanced
#wildcard = 1
#mx = test.dyndns.org
#backupmx = 1
#offline = 0

##email
#mailfrom = polom@example.com
#mailto = toto@example2.com
#smtpservername = localhost
#smtpauthuser = user
#smtpauthpwd = user_pass

comment:47 Geändert vor 8 Jahren durch sf3978

Mit diesem Quelltext (siehe auch das Paket im Anhang) kann man ein binary oder eine Funktion compilieren, um die öffentliche IP-Adresse aus "/sbin/showdsldstat" zu holen bzw. zu lesen;

/* July 23, 2010
by sf3978 */
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    
//  system ("wget -q -O - http://checkip.dyndns.org | grep -Eo '[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+'");
  
  system ("/sbin/showdsldstat | grep '0: ip' | cut -d\\/ -f1 | cut -d ' ' -f3");
    
  return 0;
}
/var/mod/root # ldd /usr/bin/getipad
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2aabe000)
        libc.so.0 => /lib/libc.so.0 (0x2aadc000)
        ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)

/var/mod/root # getipad
##.###.##.50

Mit "http://checkip.dyndns.org" funktioniert es auch.

Geändert vor 8 Jahren durch sf3978

package to read external ip from sbin/showdsldstat

comment:48 Antwort: Geändert vor 8 Jahren durch oliver

Mein Problem war nicht der Aufruf eines anderen Programms. Wie bekommt man die Ausgabe in eine Variable?

comment:49 als Antwort auf: ↑ 48 Geändert vor 8 Jahren durch sf3978

Replying to oliver:

Wie bekommt man die Ausgabe in eine Variable?

Mit diesem Quelltext bekomme ich die Ausgabe in die Variable "ip":

/* July 24, 2010
by sf3978 */

#include <stdio.h>

main()
{
  FILE *fp;
  char ip[16];
   
//  fp = popen("wget -q -O - http://checkip.dyndns.org | grep -Eo '[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+'", "r");
    fp = popen("/sbin/showdsldstat | grep '0: ip' | cut -d\\/ -f1 | cut -d ' ' -f3", "r");

  while ( fgets( ip, sizeof ip, fp))
  {
    fprintf(stdout,"The external IP address is: %s", ip);
  }
  pclose(fp);
}
:~> ./geip
The external IP address is ##.###.###.50

comment:50 Antwort: Geändert vor 8 Jahren durch cuma

Soweit scheint opendd zu funktionieren. Ich frage mich nur was passiert wenn sich meine IP mehr als 30 Tage nicht ändert?

opendd[14638]: -- running OpenDD 0.7.9 in normal mode
opendd[14638]: main() : getting my ip address : 1.2.3.4
opendd[14638]: getdyndnshostnames() : no need to update abx.ath.cx with 1.2.3.4
opendd[14638]: getdyndnshostnames() : no need to update xyz.homeip.net with 1.2.3.4
opendd[14638]: main() : No hostname(s) to update

comment:51 als Antwort auf: ↑ 50 Geändert vor 8 Jahren durch sf3978

Replying to cuma:

Ich frage mich nur was passiert wenn sich meine IP mehr als 30 Tage nicht ändert?

Mir fallen spontan 4 mögl. Vorgehensweisen ein:

  1. Man benutzt opendd im daemon-Modus:
    domain_lifetime = 30
      It means that if no update has been done for 30 days, a forced update
    will be done in order to prevent your dyndns domains to expire.
    In daemon mode, "opendd" can react to SIGUSR1 signals.
    It is used to force a DynDNS update. Useful, if your hostnames will expire
    because no update has been done.
    
  2. Man sucht sich einen DynDNS-Provider bei dem ein Updaten der nicht geänderten öffentlichen IP-Adresse (nach 30 Tagen) nicht erforderlich ist.
  3. Man entwickelt für die Box ein "30-Tage"-Ereignis, das den update-Prozess von opendd auslösen kann.
  4. Man denkt daran, dass nach 30 Tagen ein Updaten der dyndns-Adresse fällig ist und startet den update-Prozess mit opendd, manuell.;-)

comment:52 Antwort: Geändert vor 8 Jahren durch cuma

Zu blöd. War froh dass das Programm nicht immer wie inadyn im Hintergrund laufen muss. Das domain_lifetime funktioniert natürlich nur im daemon-modus wie du sagst.
Ich werde dann (3) in angriff nehmen

comment:53 als Antwort auf: ↑ 52 Geändert vor 8 Jahren durch sf3978

Replying to cuma:

War froh dass das Programm nicht immer wie inadyn im Hintergrund laufen muss.

Eine andere Lösung wäre ndyndns zu benutzen. ndyndns schreibt das update-Datum in eine Datei. Sollte auch im nodaemon-Modus funktionieren. Ticket (mit Patch) im trac und Thread im Forum sind vorhanden.

comment:54 Geändert vor 8 Jahren durch cuma

Das kann opendd jetzt auch, allerdings noch ungetestet:

Geändert vor 8 Jahren durch cuma

comment:55 Geändert vor 8 Jahren durch cuma

Das Skript muss zwischen 2 Updateversuchen 90 Sekunden wegen der TTL der DNS-Einträge warten. Das ist nicht so toll, sehe sonst aber keine Möglichkeit. Ansonsten sollte es so laufen

comment:56 Geändert vor 8 Jahren durch sf3978

Mit dem Patch aus dem Anhang (170_main_c.patch) und dem Patch von Oliver (160_get_ip.patch), wird das virtuelle Interface (dsl:1) nicht mehr benötigt. Der system-user für opendd (hier nobody) muss Schreib- und Leserechte für die Datei "ip" haben (hier: /var/mod/home/nobody/ip).

Geändert vor 8 Jahren durch sf3978

comment:57 Geändert vor 8 Jahren durch cuma

(In [5344]) opendd: added option to force update every 25 days (refs #818)

comment:58 Geändert vor 8 Jahren durch sf3978

Mit dem Patch "141_opendd_c.patch" (siehe Anhang), wird die öffentliche IP Adresse, aus der Ausgabe von "/sbin/showdsldstat" ermittelt. Die Patches "140_opendd_c.patch, 160_get_ip.patch und 170_main_c.patch" werden nicht mehr benötigt. In der "opendd.conf" muss man das Interface nicht mehr eintragen. In der "rc.opendd" werden die Eintragungen zum temporären Interface, auch nicht mehr benötigt.

Aug  8 10:41:13 fritz daemon.info opendd[1312]: -- running OpenDD 0.7.9 in normal mode
Aug  8 10:41:13 fritz daemon.info opendd[1312]: dyndns() : '''established external ip address : ##.###.##.154'''
Aug  8 10:41:13 fritz daemon.info opendd[1312]: main() : getting my ip address : ##.###.##.154
Aug  8 10:41:14 fritz daemon.info opendd[1312]: getdyndnshostnames() : no need to update ####.####.nu with ##.###.##.154
Aug  8 10:41:14 fritz daemon.info opendd[1312]: getdyndnshostnames() : no need to update ######.###.cx with ##.###.##.154
Aug  8 10:41:14 fritz daemon.info opendd[1312]: getdyndnshostnames() : no need to update ######.####.nu with ##.###.##.154
Aug  8 10:41:14 fritz daemon.info opendd[1312]: getdyndnshostnames() : no need to update ######.####.nu with ##.###.##.154
Aug  8 10:41:14 fritz daemon.info opendd[1312]: getdyndnshostnames() : no need to update ########.###.cx with ##.###.##.154
Aug  8 10:41:14 fritz daemon.err opendd[1312]: main() : No hostname(s) to update

Geändert vor 8 Jahren durch sf3978

… von einigen Kommentaren bereinigter Patch.

comment:59 Geändert vor 8 Jahren durch cuma

(In [5669]) opendd: options to webinterface added (refs #818)

comment:60 Geändert vor 8 Jahren durch cuma

  • Meilenstein von freetz-1.3 nach freetz-1.2 geändert

Jetzt bleibt nur noch die Frage, ob wie die IP mit dem Patch von sf3978 ermitteln oder evtl beide nutzen (heute spinnt checkip.dyndns.org…)

comment:61 Geändert vor 8 Jahren durch oliver

Wenn es funktioniert warum nicht.

comment:62 Geändert vor 8 Jahren durch cuma

@sf3978: Gibt es eine Möglichkeit, opendd eine falsch IP unterzuschieben, damit man ein Zwangsupdate nach 25 Tagen machen kann?

comment:63 Geändert vor 8 Jahren durch sf3978

Ich denke man könnte opendd evtl. so patchen, dass z. B. nach 25 Tagen, der Vergleich nicht mit der "/sbin/showdsldstat", sondern mit einer Datei die eine falsche IP beinhaltet, machen. Ich muss mir das am Wochenende mal anschauen.

comment:64 Geändert vor 8 Jahren durch sf3978

@cuma: Mit dem Patch "124_opendd_c.patch" aus dem Anhang, kann man opendd jetzt auch eine falsche IP unterschieben. Die Bedingung ist:

file = fopen("/tmp/ip_dummy", "rt");
if ( file != NULL && (b=getc(file)) == '1')

Geändert vor 8 Jahren durch sf3978

… update mit "falscher" IP 127.168.178.1 ist möglich.

comment:65 Antwort: Geändert vor 8 Jahren durch cuma

Hier ein Patch für das Skript. Was mir aber noch nicht gefällt ist, dass jeweils in rc.opemdd und opennd die öffentliche IP ermittelt wird. Ideen?

Geändert vor 8 Jahren durch cuma

comment:66 Geändert vor 8 Jahren durch sf3978

Sollte es im Patch nicht "echo 1 > /tmp/ip_dummy", statt "touch /tmp/ip_dummy", heißen? Geht es darum, die öffentliche IP in die Datei "opendd.ip" zu schreiben? Das könnte opendd auch machen. Meine Frage ist, zu welchem Zeitpunkt bzw. an welcher Stelle, soll opendd die öffentliche IP in die Datei "opendd.ip" schreiben?

comment:67 Geändert vor 8 Jahren durch sf3978

Mit dem Patch "160_main_c.patch" aus dem Anhang, erzeugt opendd beim Start, die Datei "/tmp/flash/opendd/opendd.ip" mit der (aktuellen) öffentlichen IP Adresse (… wenn http://checkip.dyndns.org funktioniert und aktualisiert worden ist).

comment:68 Geändert vor 8 Jahren durch cuma

Die /tmp/flash/opendd/opendd.ip legt das Skript nur an, wenn man nach 25 Tagen ohne Änderung ein Update erzwingen will (checkbox im webif). Da opendd das selbst nicht kann, müsse dies im Skript bleiben. Darin wird geprüft wie alt die Datei ist. '160_main_c.patch hilft' also nicht weiter.

comment:69 als Antwort auf: ↑ 65 Geändert vor 8 Jahren durch sf3978

Replying to cuma:

…, dass jeweils in rc.opemdd und opennd die öffentliche IP ermittelt wird. Ideen?

Warum muss in rc.opendd die öffentliche IP Adresse ermittelt werden?

comment:70 Geändert vor 8 Jahren durch cuma

Um zu wissen ob ein "falsches" Update gestartet werden soll, damit nach 25 Tagen die IP neu gesetzt wird. Dyndns will 1x im Monat ein Update, bei zB Kabel Deustchaland ändert sich die IP nicht so oft

comment:71 Geändert vor 8 Jahren durch sf3978

Man könnte doch nach 25 Tagen opendd (aus rc.opendd) starten und feststellen, ob opendd ein Update durchgeführt hat oder nicht (weil keine Änderung der IP). Und wenn kein Update, dann soll rc.opendd ein "falsches" Update starten. Die öffentliche IP ist dann für rc.opendd nicht erforderlich.

comment:72 Antwort: Geändert vor 8 Jahren durch cuma

Nur wann sind die 25 Tage vorbei? Falls sich die IP geändert hat ist es dann eh hinfällig. Für diesen Vergleich brauch das Skript momentan die IP die im Flash gespeichert wird.

Opendd verhält sich ohne Modifikation so, dass es die öffentlich IP mit der IP des dynamischen DNS-Namens vergleicht und nur updatet wenn diese verschieden sind (sieht man im Syslog). Aus diesem Grund werden in rc.opendd momentan nach 25 Tagen 2 Updates gestartet: das 1. mit einer localhost-IP und das 2. dann "normal". Opendd gibt übrigens immer einen Retunwert von "0" zurück.

Vorteil für mich von opendd ist, dass es nicht als daemon laufen muss. Nur dann funktioniert das "domain_lifetime" nicht..

:-/

comment:73 als Antwort auf: ↑ 72 Geändert vor 8 Jahren durch sf3978

Replying to cuma:

Nur wann sind die 25 Tage vorbei?

Ich denke das mit den 25 Tagen, hast Du in rc.opendd doch gelöst. Wenn nicht bzw. wenn nicht optimal, dann könnte man das von opendd feststellen lassen (z. B. mit den "Julian day numbers").

Geändert vor 8 Jahren durch sf3978

… für evtl. patchen von opendd (funktionierender/getesteter C-Quellcode für Datum, Julian day number und Dateien)

comment:74 Geändert vor 8 Jahren durch cuma

Gelöst ist es im Skript schon, durch die IP die mit get_ip gelesen wird, was nun doppelt ist. Wie das mit "Julian day numbers" ist muss ich mir mal anschauen

Geändert vor 8 Jahren durch sf3978

erzeugt die Dateien "opendd.start", "opendd.date" und "opendd.ip"

comment:75 Geändert vor 8 Jahren durch oliver

Blickt hier noch jemand durch? Was genau ist noch zu tun?

comment:76 Geändert vor 8 Jahren durch sf3978

Ja, ich blicke noch durch.;-) Es wäre noch festzulegen, was rc.opendd und was opendd machen soll. Und dann könnte opendd gezielt gepatcht werden. Oder es wird weiter gebastelt.;-)

comment:77 Antwort: Geändert vor 8 Jahren durch cuma

Ich halbwegs :)

Aktuell im Trunk:
Funktioniert alles. Das rc-Skript prüft ob die 25 Tage vorbei sind, die Binary updatet die IP die es vom temporären Interface liest und vom Skript gesetzt wurde. Diese Interface soll nun vermieden werden

@sd3978: Wie wäre es, wenn die Binary aus einer Datei die IP liest. Dann muss man das rc-Skript nur anpassen, dass es statt dem Interface eine Datei anlegt? Dann braucht der SourceCode nicht so viel geändert zu werden und der Patch ist in einer neuen Versionen leichter anpassbar

comment:78 als Antwort auf: ↑ 77 Geändert vor 8 Jahren durch sf3978

Replying to cuma:

@sd3978: Wie wäre es, wenn die Binary aus einer Datei die IP liest.

Mit dem Patch "142_opendd_c.patch" ist das ja schon realisiert. Das binary holt die aktuelle _öffentliche_ IP aus der Datei "/sbin/showdsldstat". Wenn Du mit dem rc-Skript die aktuelle IP in eine andere (neue) Datei schreiben willst, dann kann das binary auch aus dieser Datei die IP lesen. Aber warum eine andere Datei als "/sbin/showdsldstat"" oder meinst Du die _konstante_ falsche IP? Dafür bräuchte man aber keine Datei.

comment:79 Geändert vor 8 Jahren durch cuma

Ich meinte eine Datei in der die IP ist, die die Binary nutzt. Darin kann die richtige oder einer falsche stehen

comment:80 Geändert vor 8 Jahren durch sf3978

opendd kann so gepatcht werden, dass das binary eine IP aus einer Datei holt. Musst nur sagen aus welcher Datei, inkl. dem Pfad.

comment:81 Geändert vor 8 Jahren durch cuma

Der Dateiname ist eigentlich egal. Findest du es besser, wenn die IP mit showdsldstat ermittelt wird? Dann könnte man den Parameter von get_ip über das Webif konfigurierbar machen

Geändert vor 8 Jahren durch cuma

comment:82 Geändert vor 8 Jahren durch sf3978

OK, und wie kommt die IP (falsch oder öffentlich) in diese Datei? Ich finde es besser wenn opendd, die öffentliche IP, mit showdsldstat ermittelt. Dafür wird get_ip nicht benötigt.

comment:83 Geändert vor 8 Jahren durch cuma

Dann war ja das 25-Tage Problem (siehe oben). get_ip kann übrigens auch mit showdsldstat die ip ermittelen, deshalb die Frage mit dem konfigurierbaren Parameter

comment:84 Geändert vor 8 Jahren durch sf3978

Ich weiss, dass get_ip die IP u. a. auch aus showdsldstat ermitteln kann. Die IP muss aber bei opendd landen. Und opendd kann die IP direkt aus showdsldstat lesen, deshalb verstehe ich nicht warum get_ip die IP aus showdsldstat ermitteln soll, und dann über eine Datei (oder über ein Interface) an opendd weiterleiten soll. Eine Konfiguration (-w, -d, -e) für get_ip wird doch nur dann benötigt, wenn get_ip die IP _nicht_ _nur_ aus showdsldstat ermitteln soll. Oder sehe ich das falsch?

comment:85 Geändert vor 8 Jahren durch cuma

Ohne IP kann das rc-Skript nicht feststellen ob die IP sich geändert hat. Und da das rc-Skript dann schon die aktuelle Ip hat kann es sie auch "irgendwie" der Binary mitteilen.
get_ip zu nutzen finde ich schon sinvoller, da bei Änderungen an der Ermittlung der externen IP nicht jedes Package geändert werden muss, sonder nur get_ip

comment:86 Geändert vor 8 Jahren durch sf3978

OK, das ist Alles schon realisiert. An opendd muss dann bzw. jetzt, nichts mehr gepatcht werden.

comment:87 Geändert vor 8 Jahren durch cuma

Also doch das temporäre Interface lassen?

comment:88 Geändert vor 8 Jahren durch sf3978

Es gibt von Oliver ein Patch (http://trac.freetz.org/attachment/ticket/818/opendd_get_ip.patch), für die IP aus einer Datei. Mir ist es egal wie es gemacht wird, denn "mein" opendd ermittelt die IP aus showdsldstat.

Geändert vor 8 Jahren durch cuma

comment:89 Antwort: Geändert vor 8 Jahren durch cuma

Wie wäre es so? Man kann einstellen womit man die IP ermittelt, es wird keine dummy-Interface angelegt und die Binary liest die IP aus einer temporären Datei

comment:90 als Antwort auf: ↑ 89 Geändert vor 8 Jahren durch sf3978

Replying to cuma:

… Man kann einstellen womit man die IP ermittelt, es wird keine dummy-Interface angelegt und die Binary liest die IP aus einer temporären Datei

Ja, finde ich schon etwas besser, denn "http://checkip.dyndns.org" stellt nicht immer _sofort_ nach einem onlinechanged, die _aktuelle_ öffentliche IP-Adresse zur Verfügung bzw. ist manchmal auch _nicht_ erreichbar. Weiß jemand wie schnell und wie oft, "checkip.dyndns.org" updatet wird (auch wenn man einen anderen dyndns-Provider hat)?

comment:91 Geändert vor 8 Jahren durch cuma

Cool, haben wir doch noch eine Lösung gefunden!

Wenn du "checkip.dyndns.org" abfragst wir die DNS Antwort vond er Webseite gecacht. Es wird dann erst eine neu von dieser angefragt wenn der TTL erreicht ist. Es hängt also davon ab wie es dein anderen dyndns-Provider handhabt. Bei dyndns.org sind es per default 60 Sekunden. Deshalb auch das "sleep 90" wenn man 2x für das 25-Tage-Update updatet!

"extquery" ist bei meiner Box, die nicht direkt am Modem hängt, übrigens die einzigste Möglichkeit die IP zu ermitteln!

comment:92 Geändert vor 8 Jahren durch cuma

  • Lösung auf fixed gesetzt
  • Status von new nach closed geändert

(In [5814]) opendd:

  • add webif-option for get_ip
  • don't create dummy-interface
  • read ip from file

(closes #818)

comment:93 Geändert vor 7 Jahren durch sf3978

OpenDD ist nur für den Provider DynDNS geeignet. 

@Oliver: Diese Aussage im Wiki stimmt nicht. opendd funktioniert auch mit anderen Providern und ist multiproviderfähig. Ich benutze opendd mit NOIP und DynDNS und zwar mit 2 Konfigurationsdateien _gleichzeitig_ (eine für NOIP und eine für DynDNS).

comment:94 Geändert vor 7 Jahren durch oliver

Dann füge bitte Beispiele im Wiki hinzu. Ich konnte das im Source so nicht sehen.

comment:95 Geändert vor 7 Jahren durch sf3978

Das kann ich am WE versuchen, wenn ich mit dem Wiki klar komme.;-) Wer nicht bis zum WE warten will, siehe als Beispiel für NOIP, die Datei "make/opendd/files/var.tar/var/tmp/flash/opendd/opendd_1.conf" aus dem Patch im Beitrag #83 im IPPF.

Geändert vor 6 Jahren durch sf3978

Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.