[INFO] opendd, ein DynDNS-Client

4. Funktioniert der find-Befehl mit diesem Syntax?
Code:
find /tmp/flash/opendd/ -name opendd.ip -mtime +25 -exec rm -rf {} ';'
In der Manpage von find steht: -mtime n File's data was last modified n*24 hours ago.
Ja, das tut er. Um das zu überprüfen, habe ich übrigens den Befehl an der Kommandozeile ausgeführt, das hättest Du auch tun können.

Eleganter wäre es aber, es so zu schreiben:
Code:
find /tmp/flash/opendd/opendd.ip -mtime +25 -exec rm -rf {} ';'
 
OK.

Dann würde ich folgendermassen vorgehen:
1. Da aus der OpenDD GUI kein Cronjob angelegt wurde, werde ich diesen Eintrag in der Crontab manuell anlegen, damit OpenDD täglich ausgeführt wird: 0 4 * * * /etc/init.d/rc.opendd cron
2. Das Coding von /etc/init.d/rc.opendd werde ich manuell anpassen, damit der Syntax des find-Befehls optimiert ist.

Damit stehe ich aber vor dem Problem, dass ich die Datei find /etc/init.d/rc.opendd nicht direkt ändern kann.

Frage:
Wie kann ich diese Datei modifizieren?

THX
 
Wie kann ich diese Datei modifizieren?
Wenn Du sicher bist, dass Du den cronjob richtig konfigurieren kannst, dann musst Du diese Datei in deinem Freetz-Build-System und vor dem Kompilieren des neuen Freetz-Images ändern (Achtung: Scripte müssen ausführbar sein!). Mit dem flashen des neuen Freetz-Images kommt diese geänderte Datei, dann auf deine Box.
 
OK.
Es ist also nicht möglich, die Datei, die geändert werden soll, nach /tmp/flash (oder ähnlich) zu schreiben, dort zu modifizieren, und dann wieder zurück zu schreiben?

Verständnisfrage:
Was bewirkt der Aufruf von /etc/init.d/rc.opendd cron?
"cron" ist an dieser Stelle eine Option?

Welche Codingstelle wird durch diesen Aufruf durchlaufen?

THX
 
Zuletzt bearbeitet:
Verständnisfrage:
Was bewirkt der Aufruf von /etc/init.d/rc.opendd cron?
"cron" ist an dieser Stelle eine Option?
Code:
cron)
		[ "$OPENDD_ENABLED" != "yes" ] && return
		logger -t info Run OpenDD by cron.
 		run
BTW: Wie wäre es (nach bekannt werden des NSA-Skandals) mit einem ddns-Provider (außerhalb der USA) bei dem auch der Free-Account, bei Inaktivität niemals abläuft?
 
Es wird also die Variable $OPENDD_ENABLED gesetzt und ein Einzeiler "Run OpenDD by cron." gelogged.
Wird der Rest des Scripts /etc/init.d/rc.opendd trotzdem durchlaufen?

Welchen ddns-Provider (außerhalb der USA), der niemals abläuft, würdest du empfehlen?

THX
 
EDIT:

Wer Probleme mit opendd und Two-DNS hat, kann auch ein Script mit curl, zum Updaten benutzen. Z. B.:
Code:
#!/bin/sh
IP_ADDRESS="$(curl -B4 -A foobar ip1.dynupdate.no-ip.com)"
curl -k -v -X PUT -u "[color=red]<username>[/color]:[color=red]<api-token>[/color]" -d '{"ip_address":"'$IP_ADDRESS'"}' https://api.twodns.de/hosts/all
Das API-Token bekommt man aus dem account (Website) von Two-DNS. username ist i. d. R. die eMail-Adresse.

Hallo, in welchen Abstand wird das über curl gecheckt ?
da ich bei UM bin und sich da ja nur sporadisch mal die IP ändert. ( bei mir in den letzten 6 Monaten nur ein mal )
 
Hallo, in welchen Abstand wird das über curl gecheckt ?
... ( bei mir in den letzten 6 Monaten nur ein mal )
Dann ist m. E. twodns der richtige ddns-Provider für dich. Das ist ein Script mit curl. Dieses Script kannst Du bei Bedarf manuell ausführen oder in ein Freetz-Paket integrieren, mit dem Freetz-Image flashen und auf der Box durch das onlinechanged-Ereignis ausführen lassen. Der Free-Account von twodns läuft (... lt. FAQ) niemals ab, egal wann das letzte Update gemacht worden ist.
 
supi, Account wurde angelegt,
habe das ganze jetzt zum testen mal in opendd laufen. ( einfach mal die 25 gesetzt ) ;)
aber wenn ich das richtig gelesen, so wie du es auch in der FAG gelesen hast , ist das ja zur Zeit nicht von Nöten.
 
Das Problem ist nicht, eine Aktualisierung mit curl (oder wget) auszuführen, sondern dass die meisten Anbieter keine Updates wollen, die die Adressen nicht ändern. Sie wollen auch nicht, dass man vorher die Adresse abfragt, so dass man sich merken muss, welche Adresse man zuletzt gesetzt hat.
 
..., ist das ja zur Zeit nicht von Nöten.
Das ist richtig.
Mit curl kannst Du auch von Rechner hinter der Box bzw. von fremden Internetanschlüssen, Informationen über deinen twodns-Account erfragen. Z. B.:
Code:
curl -v -kN --no-keepalive -X GET -u "<Email-Addresse>:<API-Token>" https://api.twodns.de/users/me
 
Ich versuch ja auch immer erst zu lesen und zu verstehen ( wobei das nicht immer einfach hier ist :bahnhof: )
ich lass das jetzt mal mit opendd durchlaufen, sollten doch Probleme auf tauchen, muss ich euch nochmal Fragen.
Curl ins Image bauen wird ja noch gehen, aber dann brauch ich denke mal einen Guttenberg aller copy and paste ;)
um so ein Scrip ausführen zu lassen.
 
...
um so ein Scrip ausführen zu lassen.
Das Script könntest Du auch von
Code:
/var/tmp/flash/onlinechanged-cgi
ausführen lassen, wenn z. B.:
Code:
dig @resolver1.opendns.com myip.opendns.com +short != dig +short <host_fqdn>
(... oder das Script gleichwertig ergänzen).

EDIT:

Code:
#!/bin/sh
##
# twodns_update.sh
##
HOSTFQDN=<host_fqdn>
API=<api-token>
EMAIL=<eMail-Address>
LOGPATH=/var/media/ftp/uStor01/twodns
##
IP_ADDRESS=$(dig +short $HOSTFQDN)
IP_ADDRESS_AKT=$(get_ip)
#IP_ADDRESS_AKT=$(dig @resolver1.opendns.com myip.opendns.com +short)
##
sleep 2
if [ "$IP_ADDRESS" != "$IP_ADDRESS_AKT" ]; then
  {
curl -4skN --no-keepalive --trace-time --trace-ascii $LOGPATH/twodns_trace.log -o $LOGPATH/twodns.log -X PUT -u "$EMAIL:$API" -d '{"ip_address":"'$IP_ADDRESS_AKT'"}' https://api.twodns.de/hosts/all
sleep 3
echo `date` >> $LOGPATH/twodns.log
email -s "Status Report from TwoDNS: `date`" $EMAIL < $LOGPATH/twodns.log
logger "$0 - TwoDNS: The update was successful, and the hostname is now updated:  `date`"
}
else
echo "Nothing to update:  `date`" >> $LOGPATH/twodns.log
logger "$0 - TwoDNS: Nothing to update:  `date`"
fi
curl, bind und email werden auf der Box benötigt.
 
Zuletzt bearbeitet:
Hallo!

Mittels Cron-Job wird der Befehl
/etc/init.d/rc.opendd cron
regelmäßig abgesetzt.

Im Syslog finde ich diesen Eintrag:
Code:
root@FB7570:/var/mod/root# cat /var/log/syslog | grep open
Aug 30 14:22:01 FB7570 daemon.info opendd[8349]: -- running OpenDD 0.7.9 in normal mode
Aug 30 14:22:01 FB7570 daemon.info opendd[8349]: main() : getting my ip address : 91.89.xxx.xxx
Aug 30 14:22:01 FB7570 daemon.info opendd[8349]: getdyndnshostnames() : no need to update <mydyndns>.selfip.com with 91.89.xxx.xxx
Aug 30 14:22:01 FB7570 daemon.err opendd[8349]: main() : No hostname(s) to update

Dies interpretiere ich so, dass OpenDD richtig erkennt, dass sich meine Public-IP nicht geändert hat und folglich auch keine Aktualisierung meines DynDNS-Accounts notwendig ist.

Von DynDNS.com die Infomail bekomme, dass mein Account deaktiviert wird, wenn ich nicht selbigen nicht (manuell) aktualisiere.
Ich dachte, OpenDD genau diese Aktivierung übernehmen.

Anmerkung:
Die Option "Spätestens nach 25 Tagen updaten (hierfür sollte crond aktiviert sein)." ist aktiviert.
Die Datei /tmp/flash/opendd/opendd.ip ist zuletzt am 21.08. geändert worden.
Code:
root@FB7570:/var/mod# ls -l /tmp/flash/opendd
-rw-r--r--    1 root     root            14 Aug 21 04:00 opendd.ip
-rw-r--r--    1 root     root             0 Jan  1  2000 opendd.pem

Ich habe mittels dem Befehl
Code:
root@FB7570:/var/mod#echo 127.168.178.1 >/tmp/flash/opendd/opendd.ip
root@FB7570:/var/mod#modsave flash
den Inhalt der Datei /tmp/flash/opendd/opendd.ip manuell editiert und damit auf einen Wert gesetzt, der ungleich meiner aktuellen Public-IP ist.
Dennoch wird nach Aufruf von /etc/init.d/rc.opendd cron im Syslog geschrieben, dass OpenDD meine aktuelle Public-IP richtig erkannt hat und deshalb keine Aktualisierung macht.

Hier mal der (nach meinem Verständnis) relevante Abschnitt des Scripts /etc/init.d/rc.opendd:
Code:
run() {
	echo -n "Running $DAEMON_LONG_NAME ... "
	if modlib_check_running; then
		echo 'already running.'
		exit 0
	fi
	if [ "$OPENDD_ENABLED" != "yes" ]; then
		echo 'is disabled.'
		exit 0
	fi
	if [ ! -x "$(which $DAEMON_BIN)" ]; then
		echo "binary not found, skipped."
		exit 1
	fi

	modlib_config
	chmod 600 /mod/etc/$DAEMON.conf

	NEW_IP=$(get_ip)
	if [ -z "$NEW_IP" ]; then
		echo 'failed.'
		exit 1
	fi

	if [ "$OPENDD_FORCE_UPDATE" == "yes" ]; then
		OLD_IP="$(cat /tmp/flash/opendd/opendd.ip 2>/dev/null)"
		if [ "$OLD_IP" != "$NEW_IP" ]; then
			rm -rf /tmp/flash/opendd/opendd.ip
		else
			find /tmp/flash/opendd/ -name opendd.ip -mtime +25 -exec rm -rf {} ';'
			if [ ! -e /tmp/flash/opendd/opendd.ip ]; then
				update_ip 127.168.178.1
				sleep 90
			fi
		fi
		if [ ! -e /tmp/flash/opendd/opendd.ip ]; then
			echo "$NEW_IP" >/tmp/flash/opendd/opendd.ip
			modsave flash >/dev/null
		fi
	fi
	update_ip $NEW_IP

	# return-value of opendd is always 0
	echo 'done.'
}

Die Variablen
"$OPENDD_ENABLED" und
"$OPENDD_FORCE_UPDATE"
steuern den Ablauf des Scripts?
Mit anderen Worten:
Falls "$OPENDD_FORCE_UPDATE" nicht auf "yes" gesetzt ist, dann wird die Public-IP auch nicht aktualisiert.

Frage:
Wo werden diese Variablen gesetzt?

Der Aufruf von
Code:
root@FB7570:/var/mod# echo $OPENDD_ENABLED

root@FB7570:/var/mod# echo $OPENDD_FORCE_UPDATE
zeigt, dass die Variablen keinen Wert enthalten.

THX
 
Zuletzt bearbeitet:
Frage:
Wo werden diese Variablen gesetzt?
Der Aufruf von
Code:
root@FB7570:/var/mod# echo $OPENDD_ENABLED
root@FB7570:/var/mod# echo $OPENDD_FORCE_UPDATE
zeigt, dass die Variablen keinen Wert enthalten.
THX
Siehe:
Code:
http://svn.freetz.org/trunk/make/opendd/files/root/etc/default.opendd/opendd.cfg
http://svn.freetz.org/trunk/make/opendd/files/root/usr/lib/cgi-bin/opendd.cgi
 
@c.monty:
Das Dein Account deaktiviert wird/ wurde dürfte wohl eher daran liegen, dass man sich bei DynDNS neuerdings monatlich "auf deren Webseite" anmelden muss, um den Account aktiv zu halten!
Aber auch dafür gibt es eine Lösung:
http://www.ip-phone-forum.de/showthread.php?t=260356
 
Siehe:
Code:
http://svn.freetz.org/trunk/make/opendd/files/root/etc/default.opendd/opendd.cfg
http://svn.freetz.org/trunk/make/opendd/files/root/usr/lib/cgi-bin/opendd.cgi

Da steht das drin:
Code:
root@FB7570:/var/mod/root# cat /etc/default.opendd/opendd.cfg
export OPENDD_ENABLED='no'
export OPENDD_FORCE_UPDATE='no'

root@FB7570:/var/mod/root# cat /usr/lib/cgi-bin/opendd.cgi | grep OPENDD_ENABLE
check "$OPENDD_ENABLED" yes:auto "*":man

root@FB7570:/var/mod/root# cat /usr/lib/cgi-bin/opendd.cgi | grep OPENDD_FORCE
check "$OPENDD_FORCE_UPDATE" yes:force_update

Damit steht fest, dass die Variablen nicht den Wert haben, der für eine automatische Aktualisierung notwendig ist.

Frage:
Wie / wo wird diese Variable gesetzt?

THX
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.