Fritzbox 6490 Cable Firmware Update?

ich besser es im posting aus

nur um sicher zu sein, da es in #645 nicht geändert wurde:

ALT:
Code:
<input type="file" id="uiImport" name="ConfigImportFile" size="40" />
<input type="file" id="uiTakeOver" name="ConfigTakeOverImportFile" size="40" disabled style="display:none;"/>

NEU:
Code:
<input type="file" id="[COLOR=#0000ff][FONT=courier new]uiFile[/FONT][/COLOR]" name="[FONT=courier new][COLOR=#0000ff]UploadFile[/COLOR][/FONT]" size="40" />
<input type="file" id="uiTakeOver" name="ConfigTakeOverImportFile" size="40" disabled style="display:none;"/>

bitte einfach kurz querchecken und Rückinfo.
 
In älterer Firmware war das (nach der Erinnerung) noch ein Radio-Button, mit dem man zwischen zwei getrennten HTML-"Form"-Elementen umschalten konnte und wo das jeweils ungenutzte dann über JavaScript ausgeblendet wurde. Solange man den richtigen "submit"-Button ändert und der resultierende Request die richtigen Elemente im Body des POST-Requests hat (den richtigen Typ (multipart/form-data) hat ein Formular mit einem Datei-Upload i.d.R. bereits), ist es ziemlich egal, welches Formular (so es denn mehrere gibt) man am Ende ändert - es muß halt nur das richtige Ergebnis herauskommen, bevor man den Button zum Senden dann drückt.

Vielleicht erbarmt sich ja auch mal jemand und baut ein passendes Skript (mit "nc" oder "curl", der Vorschlag ist m.W. nicht so ganz neu in diesem Thread), damit irgendwelche "Unwägbarkeiten", ob sich denn jemand nun nur "etwas anstellt" oder ob ein Update wirklich nicht funktioniert, der Vergangenheit angehören?

Eine Vorlage gibt es ja wohl und die sollte nicht so schwer zu modifizieren sein, damit man sie anstelle des Imports einer Konfigurationsdatei auch für den Upload eines Update-Images verwenden kann. Wenn das jemand per Developer-Funktion im Browser schafft, sollte es mit einem Editor in einer Textdatei ja nun noch einfacher sein.

Bliebe noch die Möglichkeit, daß die dazu notwendige Linux-Konsole eine Herausforderung darstellt ... wie schwer kann es sein, ein PowerShell-Skript für einen (im Endeffekt doch ziemlich simplen) HTTP-POST-Request zu erstellen?

Wenn das automatische Login zu herausfordernd ist, dann übergibt man eben eine aus dem GUI ausgelesene SID als Parameter an das Skript zum Upload ... wer am Ende tatsächlich versteht, was die Änderung am HTML-Formular mit den Developer-Funktionen eigentlich bewirkt und nicht nur wie ein dressierter Affe irgendeiner Anleitung folgt und beim geringsten Problem in eine Schockstarre verfällt, der sollte überhaupt keine Probleme damit haben, so ein Skript auf die Schnelle "herunterzuschreiben".

Das wäre doch mal ein Beitrag, der anderen auch etwas bringt - und ich werde das garantiert nicht machen, denn ich kann das tatsächlich auch ohne komplizierte Änderungen an einem HTML-Formular (womit dann auch klar zu erkennen ist, daß ich mich grundsätzlich für schlauer als jeden anderen halte).

Wer da jetzt ablesen kann, daß es tatsächlich so ist, sollte grundsätzlich lieber keine Texte lesen, die ich verfasse ... er könnte einiges falsch verstehen.

Wenn sich jemand zum "Zusammenfassen" berufen fühlt, kann es doch eigentlich nicht so kompliziert sein, einen einzigen "cURL"-Aufruf hier "vorzustellen" (das gibt es auch für Windows), der diesen ganzen Quatsch mit dem Ändern des HTML-Formulars vollkommen überflüssig macht und zumindest die hier ja auch schon "berichteten" Probleme mit "Datei zu groß" (wenig verwunderlich, eine Konfigurationssicherung bringt im Extremfall vielleicht 500 KB auf die Waage, ein Firmware-Update satte 33-34 MB) wären damit Geschichte.
 
NEU:
Code:
<input type="file" id="[COLOR=#0000ff][FONT=courier new]uiFile[/FONT][/COLOR]" name="[FONT=courier new][COLOR=#0000ff]UploadFile[/COLOR][/FONT]" size="40" />
<input type="file" id="uiTakeOver" name="ConfigTakeOverImportFile" size="40" disabled style="display:none;"/>

bitte einfach kurz querchecken und Rückinfo.
ja, genau so ...
 
Zuletzt bearbeitet:
Man kann ja auch einfach hingehen und bereits vorhandene Lösungen etwas modifizieren (der Link zu den Dateien steht irgendwo im Text dort).

Wenn man z.B. das dort enthaltene Skript etwas abändert:
Code:
#! /bin/bash
cleanup()
{
        cleanup_file()
        {
                while [ $# -gt 0 ]; do
                        [ ${#1} -lt 6 ] && return # /tmp/. is min valid length
                        [ -d $1 -o -f $1 ] && rm -f $([ -d $1 ] && echo -n "-r") $1 2>/dev/null
                        shift
                done
        }
        cleanup_file $configfile $envfile $boxconfig $postdata $request $cfgdir $form $output
        exit $1
}

CALL_FB="/bin/bash ./fritzbox"
CALL_MPFD="/bin/bash ./multipart_form"

configfile=$(mktemp)

if [ -z "$1" ]; then
        echo "FRITZ_BOX=fritz.box\nFRITZ_USER=\nFRITZ_PASSWD=\n" >$configfile
else
        cat $1 >$configfile
        if [ $? -ne 0 ]; then
                echo "Configuration file '$1' is not usable." 1>&2
                exit $(cleanup 127)
        fi
fi

envfile=$(mktemp)
$CALL_FB login --config-file=$configfile --environment-file=$envfile
rc=$?
if [ $rc -ne 0 ]; then
        echo "Unable to login to your device." 1>&2
        exit $(cleanup $rc)
fi

boxinfo="$($CALL_FB get --config-file=$configfile --environment-file=$envfile /jason_boxinfo.xml)"
rc=$?
if [ $rc -ne 0 ]; then
        $CALL_FB logout --config-file=$configfile --environment-file=$envfile
        echo "Error $rc reading box info file." 1>&2
        exit $(cleanup $rc)
else
        echo "$boxinfo" >boxinfo
fi

. $envfile
model=$(echo "$boxinfo" | sed -n -e 's|.*<j:Name>\(.*\)</j:Name>.*|\1|p')
hwrev=$(echo "$boxinfo" | sed -n -e 's|.*<j:HW>\(.*\)</j:HW>.*|\1|p')
version=$(echo "$boxinfo" | sed -n -e 's|.*<j:Version>\(.*\)</j:Version>.*|\1|p')
revision=$(echo "$boxinfo" | sed -n -e 's|.*<j:Revision>\(.*\)</j:Revision>.*|\1|p')
oem=$(echo "$boxinfo" | sed -n -e 's|.*<j:OEM>\(.*\)</j:OEM>.*|\1|p')
lang=$(echo "$boxinfo" | sed -n -e 's|.*<j:Lang>\(.*\)</j:Lang>.*|\1|p')
annex=$(echo "$boxinfo" | sed -n -e 's|.*<j:Annex>\(.*\)</j:Annex>.*|\1|p')
country=$(echo "$boxinfo" | sed -n -e 's|.*<j:Country>\(.*\)</j:Country>.*|\1|p')

echo -e "Address\t\t$FRITZ_ADDR" 1>&2
echo -e "Model\t\t$model" 1>&2
echo -e "HWRevision\t$hwrev" 1>&2
echo -e "Firmware\t$version-$revision" 1>&2
echo -e "Branding\t$oem" 1>&2
echo -e "Annex\t\t$annex" 1>&2
echo -e "Language\t$lang" 1>&2
echo -e "Country\t\t$country\n" 1>&2

echo "Uploading the image file to your device ..." 1>&2
form=$($CALL_MPFD new)
$CALL_MPFD addfield $form sid $FRITZ_SID
$CALL_MPFD addfile $form UploadFile "$1" application/octet-stream
$CALL_MPFD addfield $form apply
postdata=$($CALL_MPFD postfile $form)
request=$(mktemp)
echo -e -n "POST /cgi-bin/firmwarecfg HTTP/1.0\r\n" >$request
echo -e -n "Host: $FRITZ_ADDR\r\n" >>$request
echo -e -n "User-Agent: Pimp_my_FRITZBox 1.0\r\n" >>$request
echo -e -n "Connection: keep-alive\r\n" >>$request
cat $postdata >>$request
output=$(mktemp)
nc -q 120 $FRITZ_ADDR 80 <$request >$output
rc=$?
$CALL_MPFD cleanup $form
if ! grep -q '<button type="submit" name="install">Update fortsetzen</button>' $output; then
        echo "Unexpected response received from your device." 1>&2
        cat $output
        exit $(cleanup $rc)
fi

echo "Upload done, executing install script ..." 1>&2
form=$($CALL_MPFD new)
$CALL_MPFD addfield $form sid $FRITZ_SID
$CALL_MPFD addfield $form install
postdata=$($CALL_MPFD postfile $form)
echo -e -n "POST /cgi-bin/firmwarecfg HTTP/1.0\r\n" >$request
echo -e -n "Host: $FRITZ_ADDR\r\n" >>$request
echo -e -n "User-Agent: Pimp_my_FRITZBox 1.0\r\n" >>$request
echo -e -n "Connection: keep-alive\r\n" >>$request
cat $postdata >>$request
output=$(mktemp)
nc -q 120 $FRITZ_ADDR 80 <$request >$output
echo "All done."

$CALL_MPFD cleanup $form
if [ $rc -ne 0 ]; then
        $CALL_FB logout --config-file=$configfile --environment-file=$envfile
        echo "Error $rc uploading new box configuration file." 1>&2
        exit $(cleanup $rc)
fi

rm $envfile 2>/dev/null
exit $(cleanup 0)
dann sollte das (mangels passender Box ist das nicht getestet, aber die Idee sollte klar werden) schon fast funktionieren. Ob die Felder im Request so stimmen, kann ich aber nicht selbst überprüfen.

PS: Ich habe mir natürlich für die Änderung (genauer für die Veröffentlichung des geänderten Skripts) die Erlaubnis des ursprünglichen Autoren zuvor eingeholt.
 
Hallo erst_nachdenken,
wäre es auch möglich, die Pseudo-Image Datei einfach im "Update Fenster"
http://www.ip-phone-forum.de/attachment.php?attachmentid=87427&d=1472991301

nochmal eingibt und dann den Firmware-Update, sprich Pseudo-Image installiert ?

oder bringt das nichts ?

Gruß
Pokemon20021

probiert hab ich es natürlich... bringt nichts.

- - - Aktualisiert - - -

ich hab mit den fritzboxtools von http://www.mengelke.de/Projekte/FritzBoxTools dort mit
Code:
fb_tools <password>@192.168.178.1 sd Support/
 
Zuletzt bearbeitet:
ich hab mit den fritzboxtools [...] mal die supportdatei(n) geholt
Funktioniert das bei der installierten 06.24 in der Geschmacksrichtung "wilhelm.tel" nicht über das GUI? Das wäre auch ein vollkommen neues Ergebnis ... was hat AVM denn da noch alles geändert? In den Quelltexten (die sind ja bei den DSL-Boxen und der 6490 weitgehend gleich, was die Lua-Dateien für das GUI angeht) ist gar nichts davon zu sehen, daß es dort noch weitere Unterschiede (abseits der "capture.lua") gibt.
 
Funktioniert das bei der installierten 06.24 in der Geschmacksrichtung "wilhelm.tel" nicht über das GUI?.
doch. funktioniert. warum den einfachen weg, wenn's auch kompliziert geht? ;) nee, im ernst, keine ahnung, warum ich nicht auf den bolzen mit support.lua selber gekommen bin
hab vorher mit yourfritz eva_get_envoirment versucht, das failt aber mit unbekanntem parameter -u in zeile 31. davon versteh ich leider nur bahnhof.
 
Zuletzt bearbeitet:
hab vorher mit yourfritz eva_get_envoirment versucht, das failt aber mit unbekanntem parameter -u in zeile 31. davon versteh ich leider nur bahnhof.

Frage: Verwendest Du "dash" statt "bash" ?
Kontrolle "ls -la /bin/sh"

ich denke die Skripte sind für Nutzung mit "/bin/bash" oder "/bin/busybox" vorgesehen.
 
Zuletzt bearbeitet:
So eine gesicherte Provider-Konfiguration bei einer 6490 könnte sich noch als recht nützlich erweisen in der Zukunft ... es wäre schade, wenn diese einfach so "geopfert" würde.

hab vorher mit yourfritz eva_get_envoirment versucht

hallo noob_noob,
so wie ich "erst_nachdenken" verstanden habe, kann mittels eva_get_environment die providers-additive.tar (Minor-C-Node DEC 29) nicht restauriert werden, m.W. ist ein Überschreiben/Inhalt-Löschen dieser Datei mittels eva_get_environment, build_tffs_image und eva_store_tffs möglich.

Da die providers-additive.tar zuerst per telnet gesichert werden soll
Code:
mkconfigfile /var/tmp/additive.tar 29
cat /var/tmp/additive.tar > /var/media/flash/wilhelm-tel-provider-additive.tar

ist der Vorschlag von "erst_nachdenken" mit dem Skript Pimp_my_FRITZBox_v1.0 aus #652 der nächste Schritt;
einfach Datei http://yourfritz.de/telnet_DOCSIS.tgz downloaden, auspacken,
das Skript Pimp_my_FRITZBox_v1.0 hinzufügen, configfile Pimp_my_FRITZBox_v1.0.cfg erstellen
Code:
FRITZ_BOX=192.168.xxx.1
FRITZ_USER=<username>
FRITZ_PASSWD=<password>
und Skript ausführen
"bash Pimp_my_FRITZBox_v1.0 Pimp_my_FRITZBox_v1.0.cfg".

Gruß
Pokemon20021

PS: als Skriptname habe ich den neuen User-Agent-Namen ("User-Agent: Pimp_my_FRITZBox 1.0") gewählt ;-)
natürlich kann der ursprüngliche Skriptname "telnet_on_via_hostname" auch beibehalten werden.
 
Zuletzt bearbeitet:
der Vorschlag von "erst_nachdenken" mit dem Skript Pimp_my_FRITZBox_v1.0 aus #652 der nächste Schritt;
einfach Datei http://yourfritz.de/telnet_DOCSIS.tgz downloaden, auspacken,
das Skript Pimp_my_FRITZBox_v1.0 hinzufügen, configfile Pimp_my_FRITZBox_v1.0.cfg erstellen und Skript ausführen

das das in #652 nen fertiges script sein soll, mit nem weiteren versuch telnet zu ermöglichen, hab ich nicht geschnallt.
mit dir als "übersetzer" kam es aber bei mir an. ;) danke!
leider kommt beim ausfühen: unable to login to your device. ( .config hab ich entdeckt und angepasst )
 
leider kommt beim ausfühen: unable to login to your device. ( .config hab ich entdeckt und angepasst )
Daß da noch ein paar Dateien dazugehören (aus dem Archiv von yourfritz.de) hast Du auch mitbekommen?

Was ergibt denn der Aufruf mittels "bash -x script_file"? Ist eine längere Ausgabe, also korrekte "CODE"-Box verwenden.

Das Skript hat auch ein Problem, wie ich gerade sehe ... einmal soll $1 der Name der Konfigurationsdatei sein und einmal der Name des "Pseudo-Images" ... das kann natürlich nicht klappen.

Also bei "UploadFile" auf $2 ändern und dann mit den zwei Dateinamen als Parameter aufrufen ... erst dann macht das Ansehen der Ausgabe Sinn.
 
Zuletzt bearbeitet:
leider kommt beim ausfühen: unable to login to your device. ( .config hab ich entdeckt und angepasst )

bei Trockentest ist mir aufgefallen, dass das README aus Tarball so nicht 1:1 passt;

es wird Configfile nicht als Option eingelesen, sondern dynamisch aus $1 erstellt
und als $2 dann das Pseudo-Imagefile eingelesen


in diesem Fall wäre die Zeile
"$CALL_MPFD addfile $form UploadFile "$1" application/octet-stream"
noch auf $2 umzustellen
"$CALL_MPFD addfile $form UploadFile "$2" application/octet-stream"

dies ergibt neuer Aufruf:
bash Pimp_my_FRITZBox_v1.0 "FRITZ_BOX=fritz.box\nFRITZ_USER=\nFRITZ_PASSWD=\n" ./telnet-1.tar
bash Pimp_my_FRITZBox_v1.0 Pimp_my_FRITZBox_v1.0.cfg ./telnet-1.tar

mir geht's wie "erst_nachdenken", hab gerade keine Box mit passender FW greifbar, muß schauen wie ich dies testen kann.

EDIT: da war "erst_nachdenken" wohl schneller mit Feedback
EDIT2: Text bzgl. Configfile angepasst, Inputs von PeterPawn #662
 
Zuletzt bearbeitet:
@Pokemon20021:
Und Du hast Dich vertan beim ersten Parameter ... da das ein "cat $1" mit Umleitung ist, gehört an die Stelle des ersten Parameters nur der Name der Konfigurationsdatei - sonst mußt Du aus dem "cat" ein "echo" machen (wenig sinnvoll, zu kompliziert beim Aufruf).

EDIT: Das README stimmt tatsächlich nicht (mehr) ... ich ändere jetzt trotzdem nichts, das ganze Zeug war ja auch zum "Mitdenken" gemacht und nicht nur zum "Nachmachen".
 
Zuletzt bearbeitet:
Daß da noch ein paar Dateien dazugehören (aus dem Archiv von yourfritz.de) hast Du auch mitbekommen?
Was ergibt denn der Aufruf mittels "bash -x script_file"? Ist eine längere Ausgabe, also korrekte "CODE"-Box verwenden.

hab das komplette tgz in nen verzeichnis entpackt, dann das script aus #652 mit UploadFile = $2 dort ins verzeichnis geworfen. korrekt soweit, oder fehlt noch was?
Code:
bash -x pimp
+ CALL_FB='/bin/bash ./fritzbox'
+ CALL_MPFD='/bin/bash ./multipart_form'
++ mktemp
+ configfile=/tmp/tmp.D6BB7J4UhT
+ '[' -z '' ']'
+ echo 'FRITZ_BOX=fritz.box\nFRITZ_USER=\nFRITZ_PASSWD=\n'
++ mktemp
+ envfile=/tmp/tmp.d0DVtHCKbF
+ /bin/bash ./fritzbox login --config-file=/tmp/tmp.D6BB7J4UhT --environment-file=/tmp/tmp.d0DVtHCKbF
+ rc=1
+ '[' 1 -ne 0 ']'
+ echo 'Unable to login to your device.'
Unable to login to your device.
++ cleanup 1
++ cleanup_file /tmp/tmp.D6BB7J4UhT /tmp/tmp.d0DVtHCKbF
++ '[' 2 -gt 0 ']'
++ '[' 19 -lt 6 ']'
++ '[' -d /tmp/tmp.D6BB7J4UhT -o -f /tmp/tmp.D6BB7J4UhT ']'
+++ '[' -d /tmp/tmp.D6BB7J4UhT ']'
++ rm -f /tmp/tmp.D6BB7J4UhT
++ shift
++ '[' 1 -gt 0 ']'
++ '[' 19 -lt 6 ']'
++ '[' -d /tmp/tmp.d0DVtHCKbF -o -f /tmp/tmp.d0DVtHCKbF ']'
+++ '[' -d /tmp/tmp.d0DVtHCKbF ']'
++ rm -f /tmp/tmp.d0DVtHCKbF
++ shift
++ '[' 0 -gt 0 ']'
++ exit 1
+ exit

kommt zurück
 
Ich würde ja jede Wette eingehen, daß inzwischen mind. zwei Beiträge etwas davon schreiben, daß man zwei Parameter angeben muß (eigentlich sogar drei (Beiträge, nicht Parameter)).
 
@noob_noob:
der Aufruf sollte doch "bash -x pimp ./pimp.cfg ./telnet-1.tar" sein,
und vorher $2 im pimp skript anpassen.
 
Zuletzt bearbeitet:
Code:
#! /bin/bash
cleanup()
{
        cleanup_file()
        {
                while [ $# -gt 0 ]; do
                        [ ${#1} -lt 6 ] && return # /tmp/. is min valid length
                        [ -d $1 -o -f $1 ] && rm -f $([ -d $1 ] && echo -n "-r") $1 2>/dev/null
                        shift
                done
        }
        cleanup_file $configfile $envfile $boxconfig $postdata $request $cfgdir $form $output
        exit $1
}

CALL_FB="/bin/bash ./fritzbox"
CALL_MPFD="/bin/bash ./multipart_form"

configfile=$(mktemp)

if [ -z "$1" ]; then
        echo "FRITZ_BOX=fritz.box\nFRITZ_USER=\nFRITZ_PASSWD=\n" >$configfile
else
        cat $1 >$configfile
        if [ $? -ne 0 ]; then
                echo "Configuration file '$1' is not usable." 1>&2
                exit $(cleanup 127)
        fi
fi

envfile=$(mktemp)
$CALL_FB login --config-file=$configfile --environment-file=$envfile
rc=$?
if [ $rc -ne 0 ]; then
        echo "Unable to login to your device." 1>&2
        exit $(cleanup $rc)
fi

boxinfo="$($CALL_FB get --config-file=$configfile --environment-file=$envfile /jason_boxinfo.xml)"
rc=$?
if [ $rc -ne 0 ]; then
        $CALL_FB logout --config-file=$configfile --environment-file=$envfile
        echo "Error $rc reading box info file." 1>&2
        exit $(cleanup $rc)
else
        echo "$boxinfo" >boxinfo
fi

. $envfile
model=$(echo "$boxinfo" | sed -n -e 's|.*<j:Name>\(.*\)</j:Name>.*|\1|p')
hwrev=$(echo "$boxinfo" | sed -n -e 's|.*<j:HW>\(.*\)</j:HW>.*|\1|p')
version=$(echo "$boxinfo" | sed -n -e 's|.*<j:Version>\(.*\)</j:Version>.*|\1|p')
revision=$(echo "$boxinfo" | sed -n -e 's|.*<j:Revision>\(.*\)</j:Revision>.*|\1|p')
oem=$(echo "$boxinfo" | sed -n -e 's|.*<j:OEM>\(.*\)</j:OEM>.*|\1|p')
lang=$(echo "$boxinfo" | sed -n -e 's|.*<j:Lang>\(.*\)</j:Lang>.*|\1|p')
annex=$(echo "$boxinfo" | sed -n -e 's|.*<j:Annex>\(.*\)</j:Annex>.*|\1|p')
country=$(echo "$boxinfo" | sed -n -e 's|.*<j:Country>\(.*\)</j:Country>.*|\1|p')

echo -e "Address\t\t$FRITZ_ADDR" 1>&2
echo -e "Model\t\t$model" 1>&2
echo -e "HWRevision\t$hwrev" 1>&2
echo -e "Firmware\t$version-$revision" 1>&2
echo -e "Branding\t$oem" 1>&2
echo -e "Annex\t\t$annex" 1>&2
echo -e "Language\t$lang" 1>&2
echo -e "Country\t\t$country\n" 1>&2

echo "Uploading the image file to your device ..." 1>&2
form=$($CALL_MPFD new)
$CALL_MPFD addfield $form sid $FRITZ_SID
$CALL_MPFD addfile $form UploadFile "$2" application/octet-stream
$CALL_MPFD addfield $form apply
postdata=$($CALL_MPFD postfile $form)
request=$(mktemp)
echo -e -n "POST /cgi-bin/firmwarecfg HTTP/1.0\r\n" >$request
echo -e -n "Host: $FRITZ_ADDR\r\n" >>$request
echo -e -n "User-Agent: Pimp_my_FRITZBox 1.0\r\n" >>$request
echo -e -n "Connection: keep-alive\r\n" >>$request
cat $postdata >>$request
output=$(mktemp)
nc -q 120 $FRITZ_ADDR 80 <$request >$output
rc=$?
$CALL_MPFD cleanup $form
if ! grep -q '<button type="submit" name="install">Update fortsetzen</button>' $output; then
        echo "Unexpected response received from your device." 1>&2
        cat $output
        exit $(cleanup $rc)
fi
ergibt:
Code:
bash -x pimp .config ./telnet.tar 
+ CALL_FB='/bin/bash ./fritzbox'
+ CALL_MPFD='/bin/bash ./multipart_form'
++ mktemp
+ configfile=/tmp/tmp.dILhmvlx8M
+ '[' -z .config ']'
+ cat .config
+ '[' 0 -ne 0 ']'
++ mktemp
+ envfile=/tmp/tmp.9UIkbiLRQL
+ /bin/bash ./fritzbox login --config-file=/tmp/tmp.dILhmvlx8M --environment-file=/tmp/tmp.9UIkbiLRQL
+ rc=0
+ '[' 0 -ne 0 ']'
++ /bin/bash ./fritzbox get --config-file=/tmp/tmp.dILhmvlx8M --environment-file=/tmp/tmp.9UIkbiLRQL /jason_boxinfo.xml
+ boxinfo='
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial></j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
+ rc=0
+ '[' 0 -ne 0 ']'
+ echo '
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial></j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
+ . /tmp/tmp.9UIkbiLRQL
++ FRITZ_BOX=192.168.178.1
++ FRITZ_ADDR=192.168.178.1
++ FRITZ_USER=xyz
++ FRITZ_SID=cee580c02a3ecf16
++ FRITZ_SID_TIME=1473016030
++ FRITZ_ACCESS=Phone:rw,Dial:rw,HomeAuto:rw,BoxAdmin:rw
++ FRITZ_LOGIN=0
++ sed -n -e 's|.*<j:Name>\(.*\)</j:Name>.*|\1|p'
++ echo '
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial>C80E140890F9</j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
+ model='FRITZ!Box 6490 Cable'
++ echo '
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial></j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
++ sed -n -e 's|.*<j:HW>\(.*\)</j:HW>.*|\1|p'
+ hwrev=213
++ echo '
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial></j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
++ sed -n -e 's|.*<j:Version>\(.*\)</j:Version>.*|\1|p'
+ version=141.06.24
++ sed -n -e 's|.*<j:Revision>\(.*\)</j:Revision>.*|\1|p'
++ echo '
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial></j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
+ revision=30308
++ sed -n -e 's|.*<j:OEM>\(.*\)</j:OEM>.*|\1|p'
++ echo '
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial></j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
+ oem=avm
++ echo '
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial></j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
++ sed -n -e 's|.*<j:Lang>\(.*\)</j:Lang>.*|\1|p'
+ lang=de
++ echo '
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial></j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
++ sed -n -e 's|.*<j:Annex>\(.*\)</j:Annex>.*|\1|p'
+ annex=Kabel
++ echo '
<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box 6490 Cable</j:Name>
<j:HW>213</j:HW>
<j:Version>141.06.24</j:Version>
<j:Revision>30308</j:Revision>
<j:Serial></j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>Kabel</j:Annex>
<j:Lab></j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag>
<j:UpdateConfig>1</j:UpdateConfig></j:BoxInfo>'
++ sed -n -e 's|.*<j:Country>\(.*\)</j:Country>.*|\1|p'
+ country=049
+ echo -e 'Address\t\t192.168.178.1'
Address        192.168.178.1
+ echo -e 'Model\t\tFRITZ!Box 6490 Cable'
Model        FRITZ!Box 6490 Cable
+ echo -e 'HWRevision\t213'
HWRevision    213
+ echo -e 'Firmware\t141.06.24-30308'
Firmware    141.06.24-30308
+ echo -e 'Branding\tavm'
Branding    avm
+ echo -e 'Annex\t\tKabel'
Annex        Kabel
+ echo -e 'Language\tde'
Language    de
+ echo -e 'Country\t\t049\n'
Country        049

+ echo 'Uploading the image file to your device ...'
Uploading the image file to your device ...
++ /bin/bash ./multipart_form new
+ form=/tmp/tmp.rpa5Mng9T3
+ /bin/bash ./multipart_form addfield /tmp/tmp.rpa5Mng9T3 sid cee580c02a3ecf16
+ /bin/bash ./multipart_form addfile /tmp/tmp.rpa5Mng9T3 UploadFile ./telnet.tar application/octet-stream
+ /bin/bash ./multipart_form addfield /tmp/tmp.rpa5Mng9T3 apply
++ /bin/bash ./multipart_form postfile /tmp/tmp.rpa5Mng9T3
+ postdata=/tmp/tmp.rpa5Mng9T3/formdata
++ mktemp
+ request=/tmp/tmp.Y2LY2mC1ma
+ echo -e -n 'POST /cgi-bin/firmwarecfg HTTP/1.0\r\n'
+ echo -e -n 'Host: 192.168.178.1\r\n'
+ echo -e -n 'User-Agent: Pimp_my_FRITZBox 1.0\r\n'
+ echo -e -n 'Connection: keep-alive\r\n'
+ cat /tmp/tmp.rpa5Mng9T3/formdata
++ mktemp
+ output=/tmp/tmp.JdZMaXRs2g
+ nc -q 120 192.168.178.1 80
+ rc=0
+ /bin/bash ./multipart_form cleanup /tmp/tmp.rpa5Mng9T3
+ grep -q '<button type="submit" name="install">Update fortsetzen</button>' /tmp/tmp.JdZMaXRs2g
+ echo 'Unexpected response received from your device.'
Unexpected response received from your device.
+ cat /tmp/tmp.JdZMaXRs2g
HTTP/1.0 200 OK
Connection: close
Content-type: text/html; charset=utf-8

<!DOCTYPE html>
<html>
<head>
<meta http-equiv=content-type content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>FRITZ!Box</title>
<link rel="stylesheet" type="text/css" href="/css/default/main.css"/>
<link rel="stylesheet" type="text/css" href="/css/default/static.css"/>
<!--[if lte IE 8]>
<link rel="stylesheet" type="text/css" href="/css/default/ie_fix.css"/>
<![endif]-->

</head>
<body>
<div id="main_page_all">
<div id="intro_bar_box">
<div id="intro_bar">
<div id="intro_bar_left" class="oemlogo_avm"></div>
<div id="intro_bar_middle"></div>
</div>
</div>
<div class="clear_float"></div>
<div id="page_content_no_menu_box">

<div class="blue_bar_back">
<h2>FRITZ!Box Update</h2>
</div>
<div id="page_content" class="page_content">
<div class="formular">
<p>Das Update ist fehlgeschlagen:</p>
<p class="ErrorMsg">Es trat ein nicht näher spezifizierter Fehler während des Updates auf. (0)</p>
<p>Wiederholen Sie das Update oder starten Sie die FRITZ!Box neu.</p>
<h4>
<input type="radio" name="action" id="uiChooseUpdate" checked>
<label for="uiChooseUpdate">Update wiederholen</label>
</h4>
<div id="uiUpdatePart" class="formular">
<form method="POST" action="/cgi-bin/firmwarecfg" enctype="multipart/form-data" id="uiMainForm">
<input type="hidden" name="sid" value="cee580c02a3ecf16">
<ol>
<li>
<p>Geben Sie die Datei mit dem Update an:</p>
<input type="file" name="UploadFile" size="40">
</li>
<li>
<p>Starten Sie das Update mit der Schaltfläche "Update".</p>
<button type="submit" name="upgrade" id="uiUpdate">Update</button>
</li>
</ol>
</form>
</div>
<h4>
<input type="radio" name="action" id="uiChooseReboot">
<label for="uiChooseReboot">FRITZ!Box neu starten</label>
</h4>
<div id="uiRebootPart" class="formular">
<p>Klicken Sie auf die Schaltfläche "Neu starten", um mit dem bisherigen FRITZ!OS weiterzuarbeiten.</p>
<form method="POST" action="/cgi-bin/firmwarecfg" enctype="multipart/form-data">
<div>
<input type="hidden" name="sid" value="cee580c02a3ecf16">
<button type="submit" name="reboot" id="uiReboot">Neu starten</button>
</div>
</form>
</div>
<div id="uiStatus">&nbsp;</div>
</div>
</div>
<script type="text/javascript" src="/js/jxl.js"></script>
<script type="text/javascript" src="/js/ajax.js"></script>
<script type="text/javascript">
function init() {
var form = jxl.get("uiMainForm");
if (form) {
form.onsubmit = uiDoOnMainFormSubmit;
}
uiDoOnActionChoice();
jxl.addEventHandler("uiChooseUpdate", "click", uiDoOnActionChoice);
jxl.addEventHandler("uiChooseReboot", "click", uiDoOnActionChoice);
}
function uiDoOnMainFormSubmit() {
jxl.setHtml("uiStatus", "Die Anlage wird aktualisiert. Bitte warten...");
jxl.disable("uiUpdate");
jxl.disable("uiReboot");
jxl.setStyle("uiMainForm", "cursor", "wait");
return true;
}
function uiDoOnActionChoice() {
jxl.display("uiUpdatePart", jxl.getChecked("uiChooseUpdate"));
jxl.display("uiRebootPart", jxl.getChecked("uiChooseReboot"));
}
window.onload = init;
</script>
<div class="clear_float"></div>
</div>
</div>
</div>
</body>
</html>

++ cleanup 0
++ cleanup_file /tmp/tmp.dILhmvlx8M /tmp/tmp.9UIkbiLRQL /tmp/tmp.rpa5Mng9T3/formdata /tmp/tmp.Y2LY2mC1ma /tmp/tmp.rpa5Mng9T3 /tmp/tmp.JdZMaXRs2g
++ '[' 6 -gt 0 ']'
++ '[' 19 -lt 6 ']'
++ '[' -d /tmp/tmp.dILhmvlx8M -o -f /tmp/tmp.dILhmvlx8M ']'
+++ '[' -d /tmp/tmp.dILhmvlx8M ']'
++ rm -f /tmp/tmp.dILhmvlx8M
++ shift
++ '[' 5 -gt 0 ']'
++ '[' 19 -lt 6 ']'
++ '[' -d /tmp/tmp.9UIkbiLRQL -o -f /tmp/tmp.9UIkbiLRQL ']'
+++ '[' -d /tmp/tmp.9UIkbiLRQL ']'
++ rm -f /tmp/tmp.9UIkbiLRQL
++ shift
++ '[' 4 -gt 0 ']'
++ '[' 28 -lt 6 ']'
++ '[' -d /tmp/tmp.rpa5Mng9T3/formdata -o -f /tmp/tmp.rpa5Mng9T3/formdata ']'
++ shift
++ '[' 3 -gt 0 ']'
++ '[' 19 -lt 6 ']'
++ '[' -d /tmp/tmp.Y2LY2mC1ma -o -f /tmp/tmp.Y2LY2mC1ma ']'
+++ '[' -d /tmp/tmp.Y2LY2mC1ma ']'
++ rm -f /tmp/tmp.Y2LY2mC1ma
++ shift
++ '[' 2 -gt 0 ']'
++ '[' 19 -lt 6 ']'
++ '[' -d /tmp/tmp.rpa5Mng9T3 -o -f /tmp/tmp.rpa5Mng9T3 ']'
++ shift
++ '[' 1 -gt 0 ']'
++ '[' 19 -lt 6 ']'
++ '[' -d /tmp/tmp.JdZMaXRs2g -o -f /tmp/tmp.JdZMaXRs2g ']'
+++ '[' -d /tmp/tmp.JdZMaXRs2g ']'
++ rm -f /tmp/tmp.JdZMaXRs2g
++ shift
++ '[' 0 -gt 0 ']'
++ exit 0
+ exit
 
Dann ist ja zumindest mal klar, daß das Problem nicht in der manuellen Änderung des HTML-Formulars liegt (und daß das Skript so funktionieren sollte, was einige Fehlerquellen ausschließt, wenn man es benutzt und natürlich auch die ständigen manuellen Änderungen im Browser obsolet werden läßt, wenn man ein Image testen will).

Bleibt noch das verwendete Image-File selbst ... zusätzlich zum Inhalt der /var/install spielt es ja auch noch eine Rolle, wie die Pfade im Tarball angegeben wurden - diese sollten mit "./var/" beginnen - und was da sonst noch an Dateien enthalten ist. Irgendwelche Mätzchen in der Datei (komische Attribute oder Pfade) führen dazu, daß da von "firmwarecfg" die Dateinamen durch /var/ignored_tar_content ersetzt werden und dann fehlt am Ende vielleicht sogar die /var/install-Datei.

Ich würde jetzt nach dem nicht erfolgreichen Upload des Firmware-Images (bzw. der "Pseudo-Firmware") erst einmal hingehen und (ohne Neustart, daher muß man sich etwas ranhalten, denn der kommt sicherlich dann unweigerlich von alleine innerhalb von max. drei Minuten nach dem fehlgeschlagenen Upload) noch einmal die Support-Daten direkt ausgeben lassen.

Dort sollte man dann den Inhalt der Verzeichnisse "/var" und "/var/tmp" sehen können und zumindest anhand der Existenz oder des Fehlens einer passenden Datei (es werden auch noch Protokoll-Dateien geschrieben, aber an deren Inhalt kommt man erst einmal nicht heran) darauf schließen können, was da nun am Image-File faul sein könnte und wo in etwa dieser ominöse Fehler 0 nun auftreten mag.

Wo kommt das Image gleich noch mal genau her?
 
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.