[Erledigt] LCR-Updater unter Fritz OS 6.30 möglich?

Na das sieht doch aber exakt so aus, als wenn meine Vermutung mit dem -15 (aka -TERM) anstelle von -9 (aka -KILL) als Ursache stimmen könnte. Das Disablen des Watchdogs davor könnte doppelt gemoppelt sein - der wird eigentlich schon in "prepare_fwupgrade" abgeschaltet. Wenn AVM das hier später noch einmal macht, könnte das die These, daß da ein Watchdog-Timer verwendet wird, ja noch unterstützen ... den richtet dann eben firmwarecfg erst ein, nachdem prepare_fwupgrade schon durch ist (ein "echo disable >/dev/watchdog" löscht nur aktive Timer, wenn ich das richtig in Erinnerung habe, ist auch ein AVM-eigener Treiber in den OSS-Paketen) und hier wird er "prophylaktisch" schon vorher gelöscht. Wenn man das ganz am Beginn des eigenen install-Skripts macht, wäre das u.U. auch ein Weg, wobei ein "orphaned process" des firmwarecfg sicherlich auf nicht so schön ist und das "kill" schon gemacht werden sollte. Wie sieht es denn in einer "reanimierten" Box bei den anderen per Watchdog gesicherten Prozessen aus? Sind die wieder "komplett"? Das kann man im proc-FS auslesen, da gibt es irgendwo eine "wdt"-Datei.

Wieso Du da ein "wird nie ausgeführt" siehst, kann ich zwar nachvollziehen, aber dann sollte ein ähnlicher Block auch schon früher im Skript auftauchen ... das unten ist dann nur zum Test für die AVM-Entwickler (gibt ja mehrere solcher "Blinddärme") und ich hatte nur nach delayed gegreped.
 
Dachte ich mir auch.
Ohne...
Code:
if [ -e /dev/watchdog ] ; then
    echo "disable" > /dev/watchdog
fi
...legt sie aber noch einen Neustart hin, jetzt kommt der Test mit.

Nein. Kein Erfolg.
Es wird die Update Misserfolgs/Erfolgsseite geöffnet, das ist wieder eine /cgi-bin/firmwarecfg, wie du schon geschrieben hast.
Offenbar wird dann auch wieder ein Timer gesetzt.

Aus Verzweiflung hab ich mal...
TelefonSparbuch schrieb:
Firmware-Update Scripte mussten damals (ältere Firmwares) auch mit exit 1 beendet werden um keine Fehlermeldung zu erzeugen (so habe ich es zumindest noch in Erinnerung).
...den Exitcode auf 8 gesetzt (/var/install)

Ergebnis: /var/install ohne Ausführung von cleanup() und killall firmwarecfg
Kein Neustart, das delay des ctlmgr Neustarts bewirkt Neuladen/Umleitung zu der Loginseite.
Allerdings bleiben aus unerfindlichen Gründen VoIP-Nummern inaktiv und telefon wird nicht gestartet. :noidea:

Mit dem Exitcode 8 beendet sich /var/install und der Elternprozess /cgi-bin/firmwarecfg, richtig?
:gruebel:
...was hat es eigentlich mit /var/post_install auf sich?
Die original /var/install einer AVM Firmware prüft/schreibt da dauernd was.
Wie auch immer, entweder reagiert die firmwarecfg auf den Exitcode? oder irgendein anderer Prozess.
Ich blick da noch nicht durch.
Und alle 128 Exitcodes durchprobieren?
Wäre toll wenn einfach einer in der /var/post_install definiert werden könnte, der nach install den Rest erledigt.
...wer weiss? Vielleicht ist es ja so oder ähnlich einfach?
 
Zuletzt bearbeitet:
Fritzbox 7272:
* Tarball mit Skript aus #4 gerollt
* Änderung (auf blauen Dunst): exit 1 statt exit 0
* über System » Update » Fritz!OS Datei eingespielt
Verlauf:
* erster Versuch fehlgeschlagen
* zweiter Versuch Update Seite hängt
Ergebnis:
* nach Neustart Anmeldung via telnet möglich
* Hinweis wegen vom Hersteller nicht unterstützter Änderungen verschwunden
Der Hinweis war vorher da, weil ich #96*7* gewählt habe, ohne zu wissen, daß Telnet stillgelegt wurde.
Dank euch Helfern! :cool:
 
@koy:
Ich gebe ehrlich zu, daß ich nicht so richtig weiß, was und worüber Du da eigentlich schreibst.

Ich verstehe schlicht den Ablauf nicht, was Du da getestet hast und was jeweils das Ergebnis war - ist aber hoffentlich auch egal.

Wenn ich da eine Frage nach post_install richtig gelesen habe, dann versuche ich das mal kurz:

- post_install wird über /etc/inittab beim Beenden des Systems aufgerufen
- normalerweise wird da nur die Box heruntergefahren (das "Original" steht in /var.tar und wird von dort beim Systemstart nach /var/post_install ausgepackt - später auch immer wieder "erneuert" von dort)
- bei Update wird die Datei um das Schreiben der geänderten Firmware ergänzt ... damit wird dann beim "shutdown" bzw. "reboot" der Flashvorgang mit erledigt
- bei NOR-Boxen geht das gar nicht anders, denn dort wird ja das aktive System überschrieben und danach ist der Neustart zwingend
 
Ich finde die Diskussion um das Pseudoupdate sehr interessant. Ich hatte in der Vergangenheit schon mal versucht ein Pseudoupdate zum Ändern von DownstreamMarginOffset zu erstellen, habe es aber nicht richtig hinbekommen. Ich habe auch noch keine guten Anleitungen zum Erstellen von Pseudoupdates gefunden.
Auch interessant wären Pseudoupdates um z.B. die VLAN-ID der Internetverbindung manuell umzustellen.

Das wären beides auch grundsätzlich Dinge, wo es nicht schlimm wäre, wenn die Box neugestartet werden müsste (weil nicht alle Dienste starten), aber gerade bei DownstreamMarginOffset wäre es gut, wenn sich DSL wieder verbindet und man im Webinterface das Ergebnis betrachten kann um dann doch einen anderen Wert zu wählen oder die Fritzbox dann manuell neu zu starten.

Auf diese Weise könnte man Usern für verschiedene Eingriffe in die Box Pseudoimages anbietet und die User müssen sich nicht mit der Änderung der Konfigurationsdatei oder dem Telnet-Zugriff rumschlagen.

Das hat jetzt zwar nicht direkt etwas mit dem LCR zu tun, aber der Großteil der Diskussion hier dreht sich ja auch um das Pseudoupdate.
Wenn wir die Diskussion also noch ein bisschen mehr Richtung Pseudoupdate öffnen, bin ich dabei und bereit mich bei der Suche nach einer möglichst allgemeingültigen Lösung zu beteiligen.
 
Dann sollte mal jemand zu diesem Thema in "Modifikationen" einen Thread eröffnen ... hier unterhalb vom "LCR" finden das 95% der Leser ohnehin nicht. Nur die "Unverbesserlichen", die wirklich jedes Thema lesen, kommen hier vorbei, wenn sie nicht gerade selbst den LCR verwenden.

Wenn jemand so ein "universelles Pseudo-Image" bereitstellt (bzw. es ernsthaft in Angriff nimmt), steuere ich meinerseits eine Version zur Benutzung von ShellInABox anstelle von Telnet bei - auch wenn die natürlich ein wenig modellspezifisch sein muß wegen des zusätzlich benötigten Binaries. Ich habe jedenfalls ein Pseudo-Image (für 7490) hier liegen, das genau diesen Weg geht ... allerdings ohne "Reanimation" der AVM-Dienste und im Moment nur dazu geeignet, bereits auf dem NAND oder im tmpfs abgelegte AVM-Firmware-Images per modfs (und nur bei lokalem Zugriff, denn der dsld bleibt bei mir ebenfalls aus) zu installieren.

Die Möglichkeit der "Umschaltung" bei Dual-Boot mit solch einem Image habe ich im 06.35-30804-Thread (oder in seinem Nachfolger) ja bereits einmal angetextet - wenn man das noch mit einer Sicherung der Daten verbindet, kann man sogar die AVM-Information "Rückweg von 06.35 nur über Recovery" ignorieren - ich bin jetzt mehrfach von 06.35 auf 06.24 zurück (sogar ohne Werksreset, habe aber auch in der 06.35 keine Neueinrichtung vorgenommen und die Einstellungen der 06.24 praktisch nicht manuell(!) geändert) und habe dabei noch nicht ein einziges Mal zum Recovery-Programm greifen müssen. Wenn AVM hier den sicheren Weg wählt (und es u.U. Versionspfade gibt, wo das wirklich notwendig ist), kann ich das aber auch nachvollziehen ... ich würde eben nicht beim AVM-Support mit einer Frage zu einem Problem nach so einem "eigenmächtigen Vorgehen" aufschlagen, andere vielleicht schon und das würde ich als Hersteller auch nicht wollen.
 
Moins

"Universel", bedeutet, dass die Pseudoflash mit MIPS/MIPSEL und DualBoot und auch mit EoS/EoL Boxen zusammenarbeitet.
Was das alleine für eine Abfragekette mit Bedingungsverzweigungen und Fehlerbehandlung bedeutet... :shock:

Nicht dass ich das nicht gutheissen würde, aber die Aktuelle macht nichts in dieser Richtung.
...bin ja schon froh, dass es überhaupt positive Rückmeldungen gibt.

Denn selbst kann ich es ja nur auf einen Boxmodell testen, meine Anderen sind ja schon EoS/EoL.
 
Jetzt habe ich ein Problem, was mich veranlasste, auf die 84.06.23 zurückzugehen.

Mein Drucker ist an der USB-Buchse der Fritz!Box angeschlossen. Die Ansteuerung erfolgt per Fritz!Box-Fernanschluss. Nach dem Update auf 84.06.30 habe ich zwar noch einen Drucker, aber keinen LCR. Nach Einspielen der install_telnet.tar habe ich zwar den LCR wieder, aber keinen Drucker. Fritz!Box-Fernanschluss findet keine Fritz!Box mehr.

Kann man da noch was drehen?
 
"Universel", bedeutet, dass die Pseudoflash mit MIPS/MIPSEL und DualBoot und auch mit EoS/EoL Boxen zusammenarbeitet.
Nö ...

Das meint (nach meiner Lesart) nur, daß es das eine - von mir als Idee beschriebene - Image gibt, welches mehrere Funktionen erfüllen kann. Dabei spielt die Frage LE vs. BE, NAND-Flash ja/nein, usw. nur dann ein Rolle, wenn es darum geht, ob eine bestimmte Funktion überhaupt Sinn ergibt. Das sind auch keine endlosen Ketten von Abfragen (die CONFIG-Variablen sind auch schon vorhanden) und warum willst Du Dir über Firmware vor 06.30 überhaupt Gedanken machen? Die kann doch problemlos noch auf den Telnet-Daemon "out of the box" zurückgreifen.

Solange das alles nur Skript- und HTML-"Code" ist, was da zum Einsatz kommt (selbst Lua ginge ja noch), ist das alles von sich aus universell ... bei Binärdateien sieht es dann schon wieder anders aus, obwohl auch da problemlos eine Symlink-Liste für das jeweilige Modell (das muß ja kein einzelner alles testen) auf "shared binaries" ausreichen würde und man dann eben LE- und BE-Binaries in das Image mit hineinpacken und nur das richtige anhand von Boxtyp oder HWRevision auswählen könnte (habe ich in modfs auch so angelegt, bisher bloß noch nie wirklich gebraucht, weil die veröffentlichte Version ja NOR-Boxen nicht unterstützt).

Aber selbst wenn man das "nur" für ein bestimmtes Modell macht ... schon die Suche nach der richtigen Befehlsfolge für ein bestimmtes Problem und Modell setzt derzeit der Anwendung dieser Pseudo-Images eine recht deutliche Grenze, da es keine "zentrale Stelle" gibt und die Angaben in WHMF sind an dieser Stelle nun wirklich Asbach.

BTW: Hast Du mal den Unterschied zwischen "killall" und "kill" mit einem Trace untersucht? Irgendwie fehlt mir da "der Schlußpunkt" in dieser Diskussion, auch wenn ich sie nicht unbedingt unterhalb von "LCR" führen würde. Wenn das Abschalten der aktiven Watchdog-Timer notwendig sein sollte, kann man das ja problemlos schon vor dem "Wiedererwecken" der anderen Dienste machen, dann sollte ein watchdog-basierter Neustart seitens der firmwarecfg-Instanz ja auch erledigt sein. Da ich bei mir ja keine weiteren Services starten will (s. #46), habe ich das "disable" für aktive Watchdogs tatsächlich auch noch einmal nach dem "prepare_fwupgrade" von AVM in meinen Skripten an anderer Stelle drin, gut möglich, daß das tatsächlich ein entscheidender Unterschied ist.

Andererseits wird das vom "install"-Skript von AVM auch erst in "post_install" erledigt, unmittelbar vor dem Flashen einer neuen Version. Wenn dann aus irgendeinem Grund die davor in der "post_install"-Datei stehenden Aktionen (das install-Skript hängt seine Sachen dort ja nur an) mal etwas länger dauern sollten, schlägt wohl auch das Update fehl, wenn das über einen Watchdog läuft.

Nun gut, die "dismounts" sind bei lokalem Update tatsächlich schon durch, aber beileibe nicht in jedem anderen Update-Verlauf ebenfalls, das "USB-Stoppen" ist optional in "prepare_fwupgrade" und so ein Herunterfahren kann sich auch bei hängenden AVM-Daemons zäh gestalten, meiner Erinnerung nach wird da von termforcewait (oder wie das heißt) bis zu 999 Sekunden gewartet bei einigen Diensten.

Vielleicht ist also der entscheidende Punkt weniger das "kill" für den "delayed reboot process", sondern eher das Löschen eines weiteren Watchdogs. Der kann dann ja nur nach dem Löschen in "prepare_fwupgrade" erneut aufgesetzt worden sein, wäre aber ebenfalls eine plausible Erklärung ... eigentlich sogar die plausiblere. Wobei dann die Frage nach dem Signal beim "kill" immer noch bleibt ... auch ein "killall" mit "SIGTERM" anstelle von "SIGKILL" dürfte dann nichts helfen. Wenn das "normale kill" des Prozesses den Watchdog auch nicht abräumt, warum sollte es dann ein "killall" machen? Das ist auch nichts anderes als ein "kill" anhand des Prozessnamens anstelle der PID, ansonsten sind die weitgehend identisch. Nur kann eben beim "normalen kill" kein Name doppelt auftreten (ist ja die PID), bei einem "killall" eben schon.

Wenn es am Ende tatsächlich bei der 7360SL so sein sollte, wie Du es nach dem Test annimmst, stünde ja in der PID-Datei offenbar der falsche Prozess. Das ist zwar sicherlich auch nicht vollkommen auszuschließen, aber ich würde sogar tippen (und den AVM-Programmierern solche Überlegungen auch unterstellen), daß da anhand der Datei delayed_reboot.pid entschieden wird, ob nicht schon ein anderer Prozess auf ein solches Timeout wartet und man selbst (also die eigene Instanz) das gar nicht noch einmal gesondert tun muß (oder man den ggf. dort wartenden Prozess sogar killt, bevor man selbst ein solches Timeout initiiert). Das ließe sich ja durch ein einfaches "echo $$ >/var/run/delayed_reboot.pid" vor dem Upload eines Images (natürlich auf einer Box mit einem anderen Zugang) problemlos testen, ob das vielleicht tatsächlich so gemacht wird. Steht hinterher in der Datei immer noch die originale PID, wird das wohl getestet von firmwarecfg. Macht auch in gewisser Weise Sinn, ansonsten könnte man ja mit ständigen weiteren Requests für firmwarecfg, die rechtzeitig innerhalb der Timeout-Spanne erfolgen, den Reboot-Zeitpunkt immer weiter hinausschieben.

Ich habe bloß im Moment weder Zeit noch Muße für eigene Tests an dieser Stelle ... daher auch nur Kommentare/Meinungen von mir dazu und keine eigenen systematischen Ergebnisse auf der Basis aktueller Firmware. Alles was ich dazu hier herumliegen habe, basiert auf älterer Firmware, im günstigsten Falle auf 06.20 für 7390/7490 und ist max. aus dem Okt. 2014 - auch die Infos, was da von wem abhängt und wie man dieses "prepare_fwupgrade" wieder "rückgängig" machen kann durch das gezielte Starten von Diensten, stammen eigentlich alle aus diesem Zeitraum ... das muß also für aktuelle Firmware nicht mehr alles gelten.
 
Zuletzt bearbeitet:
@Dabbelju39: Klar, da bin ich zuversichtlich.
Allerdings kann ich das nicht selber testen.
Deswegen ist es ja auch so wichtig das solche Rückmeldungen, wie deine, kommen.
Die Pseudofirmware ist ja noch im Entwicklungsstadium. Also BETA.
...ich frag mich wie AVM Rückmeldungen handhabt? Aber eigentlich ist mir das auch egal. :D

@PeterPawn: Das killall erledigt jede weitere /cgi-bin/firmwarecfg
Und damit mit an Sicherheit grenzender Wahrscheinlichkeit auch den aktuellen watchdog Timer.
...anders kann ich mir das Verhalten nicht erklären.

1. firmwarecfg wird von prepare_fwupgrade gestartet = timer läuft
2. firmwarecfg zeigt nicht unterstützte Firmware/Version, hat 1. firmwarecfg beendet(?) und dessen Timer(?), aber setzt einen Neuen? Oder ist das noch: 1. firmwarecfg ?
3. firmwarecfg kommt mit der Ergebnismeldung, oder aber mit übermounteter Ergebnisseite. Wieder ein neuer Timer(?)

Das macht das Ganze doch schon ein wenig kompliziert, und ein killall* an der richtigen Stelle** erledigt das.


* Der ctlmgr Neustart bewirkt als Mutter der Webinterfaceseiten dasselbe, firmwarecfg's werden alle beendet.

** Vorallem was das Timing angeht, damit alle Dienste starten können, am Besten mit delay.
Selbst wenn ich das delay am Ende der Dienste aufrufe, kann es passieren das Einige nicht starten.
Das ist gerade auch das Problem welches mich am Meisten plagt.
 
Zuletzt bearbeitet:
Kann man da noch was drehen?
Noch ein "/etc/hotplug/aura start" vor dem "/etc/init.d/rc.usbhost start" könnte da schon viel bewirken ... meine Frage zum "capiotcp_server" ist vermutlich auch noch offen oder ich habe die Antwort überlesen.
 
Oups, ähem, nee, vergessen ich wohl das hab.

Wie war die Frage nochmal?
F: (Was ist bei TSB und Dir eigentlich mit "capiotcp_server"? Wird der mitgestartet?)

Ah,ja. Nicht bewusst, wenn der bei mir aktiv ist, dann wahrscheinlich über die fx_conf?
...und wenn nicht, kann er über telefon angeschaltet werden? Nach Pseudoflash?
Wenn er dann in der fx_conf landen sollte, wird er beim nächsten Flash gestartet?

Also, du siehst, ich muss die Frage mit Fragen entgegnen.
 
Zuletzt bearbeitet:
1. firmwarecfg wird von prepare_fwupgrade gestartet = timer läuft
Schon mal Ursache und Wirkung (nach meinen Tests, ggf. hast Du andere gemacht) vertauscht ... prepare_fwupgrade wird von firmwarecfg gestartet, nicht umgekehrt.

Danach hast Du mich mit Deinen Beschreibungen dann wieder abgehangen, da blicke ich nicht durch, was Du da meinst.

Der Ablauf noch einmal aus meiner Sicht ... da CS, auch nur deduktiv - kann also "Spuren von Fehlern/Spekulationen" enthalten und ist für "Ganz-Genau-Wisser" eher ungeeignet (soll eher zum Testen anregen):

  • Upload-Request für neues Firmware-Image startet die erste firmwarecfg-Instanz als CGI-Handler, dabei wird dann auch prepare_fwupgrade aufgerufen, wenn man dem Prozessbaum Glauben schenken will. Man kann das ja wunderbar testen, dazu muß nur das Skript-File prepare_fwupgrade "übermountet" werden (so verhindert man auch prinzipiell das teilweise Herunterfahren, für einen Reboot wird das nicht gebraucht, da macht das post_install schon selbst).
  • Entweder noch diese oder auch eine zusätzliche Instanz (diesmal dann nicht als CGI-Handler) entpackt das Image ins /var-Verzeichnis und prüft dabei die Signatur (ist vereinfacht dargestellt, das sind mehrere Vorgänge).
  • Eine firmwarecfg-Instanz (ich vermute die erste, könnte man leicht testen mit sekündlichem "ps w" in einen Debug-FIFO, s. weiter oben) startet zusammen mit dem Auspacken eines Images (es gibt ja weitere Funktionen in firmwarecfg, die ggf. keinen Restart auslösen, z.B. der Settings-Export) den Timer für einen Neustart der Box. Den Vergleich der in delayed_reboot.pid stehenden PID mit der Liste der Prozesse habe ich damals versäumt und finde gerade auch kein Protokoll mit einem passenden Inhalt.
  • Die Signaturprüfung schlägt fehl, die erste firmwarecfg-Instanz meldet den "nicht freigebene Firmware"-Fehler an den Browser und bleibt mit aktiviertem Timeout stehen. Das ist deshalb anzunehmen, weil auch eine Box, bei der man auf die Seite mit der Fehlermeldung nicht reagiert, einen Neustart nach einiger Zeit hinlegt und zwar auch dann, wenn man den Browser schließt. Da ist also auch keine "Javascript-Verzögerung" o.ä. im Spiel, das macht die Box schön von alleine.
  • Ruft man jetzt aus der Fehlerseite über einen der Formular-Buttons firmwarecfg erneut auf und wählt dafür "neu starten", bootet die Box eben umgehend.
  • Wählt man hingegen "Update fortsetzen", wird jetzt (und erst jetzt tatsächlich) das "install"-Skript gestartet. Das muß dann eben den "hängenden Prozess" für den Neustart eliminieren, sonst erfolgt der trotzdem, denn die erste firmwarecfg-Instanz interessiert sich nicht für eine weitere.

Wo Du da jetzt mehrere Timer oder eine dritte firmwarecfg-Instanz siehst (wenn Entpacken/Signaturprüfung nicht als dritte Instanz laufen, aber so hast Du das nach Deinem Text wohl eher auch nicht gemeint), blicke ich nicht ...

Ah,ja. Nicht bewusst, wenn der bei mir aktiv ist, dann wahrscheinlich über die fx_conf?
...und wenn nicht, kann er über telefon angeschaltet werden? Nach Pseudoflash?
Ja und nein. Er kann ein- und ausgeschaltet werden über das Telefon, wird aber über die ar7.cfg konfiguriert (und nicht über die fx_conf) und muß (theoretisch, deshalb fragte ich ja) gesondert gestartet werden ... schau mal ins /etc/init.d-Verzeichnis, da ist vermutlich sogar ein gesondertes Skript für die CAPI vorhanden.
 
Der Ablauf noch einmal aus meiner Sicht ... da CS, auch nur deduktiv - kann also "Spuren von Fehlern/Spekulationen" enthalten und ist für "Ganz-Genau-Wisser" eher ungeeignet (soll eher zum Testen anregen):

Frage: Gibt es ein static-binary strace für die Fritz!Box 7490 ?
dann könnte man den Ablauf bei Pseudo-Firmware-Update einfach per Pseudo-Image Befehl "strace -eopen -o /var/tmp/strace.txt -f -p $(ps | grep firmwarecfg | grep -v grep)" ermitteln
 
Frage: Gibt es ein static-binary strace für die Fritz!Box 7490 ?
Warum muß das statisch gelinkt sein? Ansonsten findest Du in Freetz (irgendwo bei debug-tools - vermutlich nur bei "expert mode") auch ein strace und ein ltrace. Wenn Du es statisch linken willst, mußt Du eben das Makefile modifizieren. Ansonsten mußt Du noch ein paar Libs mitnehmen (u.a. libelf.so, wenn ich mich recht erinnere) und den Aufruf eben so machen, daß diese Libs beim Suchen gefunden werden.

Die Frage, warum Du da anstelle von ps+grep nicht einfach "pidof" benutzen willst, spare ich mir ... solche Diskussionen bringen wenig.

Das Hauptproblem, daß ja genau der Ablauf vor der Ausführung von "install" zu überwachen wäre, löst das aber auch nicht (oder ich verstehe den Ansatz nicht). Das install-Skript läuft eben erst nach "Update fortsetzen" überhaupt an ... kann man leicht mit einem LED-Befehl als "Trace-Hilfe" nachweisen, einfach als erstes Kommando in das Skript packen.

Wenn Du das allerdings auf einer Box mit funktionierendem Telnet-Zugang schon vor dem Upload des Images starten willst bzw. /usr/www/cgi-bin/firmwarecfg in einen passenden Wrapper packen willst (da ist ja noch nichts mit "attach to PID"), dann wäre das kein "Pseudo-Image-Befehl" mehr.
 
Moins

Problem ist ja auch das unberechenbare Verhalten, beziehungsweise timings, der einzelnen Aufrufe.
Denn obwohl ich dieses hier am Ende laufen lasse...
Code:
do_later() {
/sbin/delay -D 5 WWMTCMD 'echo "clear_id 87" > /proc/tffs'
/sbin/delay -D 7 LEDTCMD '/bin/update_led_off'
/sbin/delay -D 11 WDTCMD 'echo "disabled" > /dev/watchdog'
/sbin/delay -D 13 FCFTCMD '/bin/kill -9 $(pidof firmwarecfg)'
/sbin/delay -D 17 CTLTCMD '/usr/bin/ctlmgr -s ; /usr/bin/ctlmgr'
}
...scheinen immernoch Aufrufe aus der vorangegangenen Funktion zu laufen, nicht fertig zu sein.

Die Kunst dabei ist momentan die Sekunden der delay Aufrufe so zu wählen das es passt.
Momentan gehts mit dieser Wahl, wenn die vorangegangene Funktion diese Aufrufe macht...
Code:
rst_sys() {
/bin/sh /etc/hotplug/aura start
/bin/sh /etc/init.d/rc.usbhost start
/sbin/udevadm trigger
/bin/sh /etc/init.d/rc.net
/bin/sh /etc/init.d/S73-capitcp
/bin/sh /etc/init.d/S75-inetd
/bin/sh /etc/init.d/S78-aha
/usr/bin/pbd
/usr/bin/faxd -a
/bin/voipd
/usr/bin/telefon -a127.0.0.1
}

Aber das ist mir irgendwie noch zu Schwammig.
Da hätte ich gerne ein Quäntchen mehr "Sicherheit".
 
Zuletzt bearbeitet:
Ich habe gerade mal das mit dem wrapper für strace probiert. Dafür habe ich per Freetz in /usr/www/cgi-bin die Datei firmwarecfg in firmwarecfg.orig umbenannt und eine neue ausführbare Datei mit folgendem Inhalt angelegt:
Code:
#! /bin/sh
strace -f -ff -o /var/media/ftp/strace/strace.out /usr/www/cgi-bin/firmwarecfg.orig "$@"

Wenn ich /usr/www/cgi-bin/firmwarecfg per SSH/Telnet aufrufe, legt er auch eine Datei mit dem strace an. Wenn ich aber im Webinterface die Firmware-Update-Seite aufrufe und dort (als erster Schritt) die Konfiguration speichern muss, erhalte ich eine leere Seite und es wird keine strace-Datei angelegt.

Irgendetwas scheine ich noch nicht ganz verstanden zu haben...
 
@koy:
Ich will nicht den "Besserwisser" spielen, aber - wenn ich Dich richtig verstehe - für meine Begriffe gehst Du genau falsch herum an die Sache ran.

Anstatt gleich alle Dienst wieder neu zu starten, solltest Du erst einmal die zusätzlich zu bereinigenden Dienste beenden und dann langsam - Schritt für Schritt - die notwendigen Dienst wieder starten.

Wenn Du das dann jeweils aufeinander aufbauen läßt und nicht verschiedene "genau getimete" Befehle per "delay" ausführen läßt, sondern lediglich einen einzelnen erneuten Aufruf Deines Skripts mit passendem Parameter (oder erzeugst das Skript selbst erst, wie ich es mal gemacht hatte), dann kannst Du da eine ganz normale "Ablaufsteuerung" verwenden wie in jedem anderen Skript auch.

Als erstes den eigenen verzögerten Aufruf per "delay" sicherstellen (das mit dem "nohup" sollte eine Alternative sein, da ggf. auch der multid mal nicht laufen könnte) und den ganzen Rest eben ignorieren.

Wenn dann diese unabhängige Instanz des Skripts läuft (die ist m.W. auch nicht mehr vom Beenden des ctlmgr zu beeindrucken), dann kannst Du in diesem Skript schalten und walten, ohne Dir selbst die Füße wegzuhauen. Im Prinzip genauso, wie ich es weiter oben gezeigt habe. Dann brauchst Du nicht mehrere "abgestimmte" delay-Aufrufe und kannst abhängige Aktionen auch erst genau dann starten, wenn die vorherige - als Voraussetzung benötigte - beendet ist.

Ich habe gerade mal das mit dem wrapper für strace probiert.
Was hältst Du denn davon, wenn Du den Aufruf des Skripts irgendwohin protokollierst ... dann siehst Du schon mal, ob und wie es aufgerufen wird, CGI ist ja schon eine "spezielle Umgebung".

Ansonsten kann man nur raten ... ob das in der von Dir verwendeten Form schon ausreichend ist, damit firmwarecfg den Aufruf als CGI-Request wahrnimmt und behandelt, weiß ich nicht. Das hängt u.a. auch davon ab, wie dort das Environment aussieht (ebenfalls protokollieren) und ob/wie firmwarecfg nach seinem Parent-Prozess sucht. Aber in dieser Form fehlt vermutlich schon STDIN für firmwarecfg ... dort wird der Inhalt des HTTP-Formulars ja für CGIs übergeben und das müßte dann hier vom Skript (dort liegt das ja vor auf stdin, wenn das Skript als CGI aufgerufen wird) an den debuggee des strace weitergereicht werden.

Ich habe auch noch nicht so ganz bis zum Ende verstanden, was das finale Ergebnis sein soll ... wenn es sich um eine Klärung der Frage handelt, wie dort der gesamte Ablauf genau ist, braucht man sicherlich das strace, was erst auf eine laufende Instanz losgelassen werden muß oder sie - wie hier von Dir beabsichtigt - erst selbst starten muß (dann natürlich mit der richtigen Umgebung).

Wenn es Dir z.B. nur darum geht, welche Dateien dort in welcher Reihenfolge geöffnet und geladen werden (das "-eopen" aus einem anderen Beitrag deutet darauf hin), dann wäre ggf. "inotifywait" mit entsprechender Protokollierung sogar der bessere Weg, da für dessen "Einrichtung" noch kein Prozess laufen muß, der später auf diese Dateien zugreift. Beim strace werden ja nur die Bibliotheksaufrufe und Syscalls mit entsprechenden Funktionen "überlagert", die zusätzlich noch protokollieren, was da jeweils in den Parametern steht. Damit das funktioniert, muß eben der debuggee geladen (sein) und modifiziert werden - ob das im Kontext des ctlmgr als CGI-Aufruf so ohne weiteres klappt, weiß ich nicht ... aber es sollte trotzdem möglich sein, notfalls nicht mit einem Skript, sondern mit einem Wrapper in C. Aber der Aufwand steht m.E. in keinem Verhältnis zum Nutzen ... kommt eben darauf an, was die eigenen Motive an dieser Stelle sind und das blicke ich eben noch nicht.

PS: Ich bleibe dabei, das ist eigentlich das falsche Unterforum für diese Diskussion ... ich ziehe mich hier zurück, gerne können wir das unter "Modifikationen" fortsetzen.
 
PS: Ich bleibe dabei, das ist eigentlich das falsche Unterforum für diese Diskussion ... ich ziehe mich hier zurück, gerne können wir das unter "Modifikationen" fortsetzen.
Das kann ich nur unterstützen, allerdings fehlt mir hier noch eine klare Antwort zur Eingangsfrage: " LCR-Updater unter Fritz OS 6.30 möglich?"

Soweit ich es bislang verstanden habe, geht es mit Freetz, Pseudo-Image führt dagegen in ein Labyrinth aus Rätselspaß und unbekannten Fehlfunktionen.

Für Menschen, die ihre Fritz!Box nur zum Basteln verwenden, mag das ja spannend sein. Für die, die eine stabile Lösung für das Problem brauchen, ist aus meiner Sicht derzeit vom Update auf 6.30 dringen abzuraten.

Kleiner Tip am Rande: Es wäre nett, wenn der aktuelle Stand der Diskussion (geht / geht nicht) direkt als erster Beitrag eingeblendet würde, damit man Laien und Nur-Nutzern das Lesen von 56 Beiträgen (Fach)-Simpelei erspart, Danke.
 
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.