- Mitglied seit
- 7 Feb 2007
- Beiträge
- 674
- Punkte für Reaktionen
- 0
- Punkte
- 16
Hallo,
Fertige Lösung siehe Ende des Posts
ich habe mich heute ein bisschen damit beschäftigt, wie man mittels wget und curl aus der Linux-Shell ein Firmware-Update machen kann, und bin dabei auf ein Problem gestoßen, aus dem ich nicht ganz schlau werde. Vielleicht fällt ja jemandem was dazu ein. Wenn das Ganze funktioniert, kann man daraus ein Script bauen, was das Ganze mit einem einzigen Befehl erledigt - vor allem praktisch, wenn man seine Firmware auf einer Linux-Kiste ohne GUI baut.
Hier mal meine Vorgehensweise:
Ich fürchte, dass ich irgendwas übersehe. Sieht jemand vielleicht das Problem oder hat eine Erklärung, oder will es selbst mal probieren? Wenn man bei den Kommandos jeweils das /dev/null durch einen Dateinamen ersetzt, wird das Ergebnis der Abfrage in dieser Datei gespeichert. So kann man sich den Ablauf ansehen.
Fertige Lösung:
Script aus dem Anhang auspacken und ausführen.
Ich selbst habe es nur mit meiner 7170 getestet. Mit einem funktionierenden Image funktioniert es ohne Probleme. Es gibt auch eine Behandlung des Fehlers, der auftritt, wenn die angebene Datei kein korrektes Image ist, dies funktioniert aber nicht immer korrekt, zumindest bei mir. Ich bekomme das gleiche Ergebnis raus, wie bei einem richtigen Image. Wer eine Lösung weiss, bitte her damit.
Weiters ist der Codeteil ungetestet, der auf einer Box ohne Hash-Prüfung die letzte Bestätigung überspringen sollte. Wenn wer mag, kann er das ja auch mal ausprobieren.
Gruss, Nico
PS: Natürlich alles wie üblich auf eigene Gefahr.
Fertige Lösung siehe Ende des Posts
ich habe mich heute ein bisschen damit beschäftigt, wie man mittels wget und curl aus der Linux-Shell ein Firmware-Update machen kann, und bin dabei auf ein Problem gestoßen, aus dem ich nicht ganz schlau werde. Vielleicht fällt ja jemandem was dazu ein. Wenn das Ganze funktioniert, kann man daraus ein Script bauen, was das Ganze mit einem einzigen Befehl erledigt - vor allem praktisch, wenn man seine Firmware auf einer Linux-Kiste ohne GUI baut.
Hier mal meine Vorgehensweise:
- Anmelden am Webinterface der Fritzbox
Hier muss das Web-Passwort angegeben werden. So weit kein Problem.Code:wget -O /dev/null --post-data=login%3Acommand%2Fpassword=<password> http://fritz.box/cgi-bin/webcm - Upload des Firmware-Images
Mit wget könnte man zwar auch eine Datei hochladen, aber leider kann wget anscheinend nicht automatisch eine Datei in ein entsprechendes multipart/form-data umwandeln, man müsste das von Hand oder mit einem anderen Tool machen. Curl macht das automatisch, wenn man den Dateinamen angibt. Das filename=\\firmware.image ist *nicht* der eigentliche Dateiname, sondern der, der dem CGI-Script übergeben wird. Hier fängt das Problem an. Wenn es sich um eine Original-FW handelt (nicht getestet), oder wenn die Box noch keine Überprüfung macht (ältere Boxen), dann sollte jetzt das Update schon durchlaufen. Zumindest werden in jedem Fall die Dienste gestoppt und das Image hochgeladen und entpackt. Andrenfalls:Code:curl -o /dev/null -F "upgrade=Update" -F "UploadFile=@<path_to_image_file>;filename=\\firmware.image" http://fritz.box/cgi-bin/firmwarecfg - Update bestätigen (wenn keine Original-AVM-FW)
Theoretisch sollte mit diesem Befehl das Update bestätigt werden, wenn die Box nachfragt, weil es sich nicht um eine Original-FW handelt. Bei mir gab es jetzt verschiedene Probleme. Manchmal ist der DNS-Server schon nicht mehr erreichbar. Dann wird fritz.box nicht mehr aufgelöst. Man kann es dann durch die IP-Adresse ersetzen. Trotzdem funktioniert es bei mir dann nicht. Es dauert eine Zeit lang, dann gibt es den Fehler "Internal communication error (login -1). Exiting.".Code:wget -O /dev/null --post-data="install=Update%20fortsetzen" http://fritz.box/cgi-bin/firmwarecfg
Ich fürchte, dass ich irgendwas übersehe. Sieht jemand vielleicht das Problem oder hat eine Erklärung, oder will es selbst mal probieren? Wenn man bei den Kommandos jeweils das /dev/null durch einen Dateinamen ersetzt, wird das Ergebnis der Abfrage in dieser Datei gespeichert. So kann man sich den Ablauf ansehen.
Fertige Lösung:
Script aus dem Anhang auspacken und ausführen.
Ich selbst habe es nur mit meiner 7170 getestet. Mit einem funktionierenden Image funktioniert es ohne Probleme. Es gibt auch eine Behandlung des Fehlers, der auftritt, wenn die angebene Datei kein korrektes Image ist, dies funktioniert aber nicht immer korrekt, zumindest bei mir. Ich bekomme das gleiche Ergebnis raus, wie bei einem richtigen Image. Wer eine Lösung weiss, bitte her damit.
Weiters ist der Codeteil ungetestet, der auf einer Box ohne Hash-Prüfung die letzte Bestätigung überspringen sollte. Wenn wer mag, kann er das ja auch mal ausprobieren.
Gruss, Nico
PS: Natürlich alles wie üblich auf eigene Gefahr.
Anhänge
Zuletzt bearbeitet: