Meine Schuld, ich habe das zu sehr zusammengefaßt in meiner Beschreibung ...
Beim Update über das GUI wird das CGI-Binary "firmwarecfg" aufgerufen, das seinerseits das hochgeladene Image in "stdin" zur Verfügung hat und als erstes einmal Platz in der Box schaffen will, damit das Image ausgepackt werden kann. Dazu ruft es "prepare_fwupgrade start" auf (in Deiner ps-Ausgabe oben sieht man diese beiden Prozesse als 1508 und 1513) und dieses ist ein Shell-Skript in /bin.
Ein Blick dort hinein zeigt bei der internationalen Version 06.20 folgenden Inhalt:
Code:
#! /bin/sh
. /etc/term.sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
term_usb()
{
#################################
## USB-HOST: das USB-Subsystem vor dem Runterfahren der Box (z.B. im Kontext eines Firmware-Updates) anhalten.
#################################
## Es wird nach dem Aufruf von /etc/hotplug/usb.pandu stop sofort zum Aufrufer zur.ckgekehrt,
## w.hrend im Hintergrund alle USB-Klienten ein "remove" gesendet bekommen, was dort dann das
## gro.e Aufr.umen ausl.st. Dieser Hintergrundproze. wartet bis zu 5 Sekunden auf
## das Beenden aller USB-Klienten und schie.t dann den OHCI-Treiber ab: Kein USB
## mehr vorhanden.
if [ -e /etc/hotplug/usb.pandu ] ; then
/etc/hotplug/usb.pandu stop
sleep 2
date > /dev/console
fi
}
## the parameter 'downgrade' is used just before /var/install is called with downgrade allowed
if [ "$1" = "downgrade" ]
then
## terminate multid to not write /var/flash/multid.leases after a downgrade with factorydefaults
## is done in /var/install
termavmforcedwait 5 multid
exit 0
fi
## Terminate any scheduled delayed reboot from firmwarecfg-CGI
local REBOOT_PID=`cat /var/run/delayed_reboot.pid`
rm /var/run/delayed_reboot.pid
if [ "$REBOOT_PID" != "" ] ; then
kill -9 $REBOOT_PID
fi
ps > /dev/console
date > /dev/console
if [ "$1" = "start" ] || [ "$1" = "start_from_internet" ] || [ "$1" = "start_tr069" ]
then
## kill everything except websrv,multid and firmwarecfg and sh
## to make room in RAM to store the firmware images before
## flashing them. if we download from the internet dsld is kept running also.
## NOTE that we have to keep the user modules for WLAN running!
## NOTE that voipd, upnpd, dsld and ctlmgr are terminated by
## firmwarecfg before the script is run, to have more free RAM (SL)
#################################
## Media-Subsystem vor dem Runterfahren der Box (z.B. im Kontext eines Firmware-Updates) anhalten.
#################################
if [ -e /etc/init.d/rc.media ] ; then
/etc/init.d/rc.media stop
sleep 2
date > /dev/console
fi
#################################
## Home Automation
#################################
if [ -x /usr/bin/aha ] ; then
/usr/bin/aha -s
fi
#################################
## EWETEL
#################################
if [ -x /bin/smartmeter ] ; then
/bin/smartmeter stop
fi
#################################
#################################
## Chrony stoppen
#################################
if [ -e /etc/init.d/rc.chrony ] ; then
/etc/init.d/rc.chrony stop
date > /dev/console
fi
if [ "$CONFIG_LLTD" = y ] ; then
lltdd -s
killall lltdd
fi
KEEP_USB=no
## due to use of term...forcedwait (may use kill -9) we have to disable the watchdog early
if [ -c /dev/watchdog ] ; then
echo disable watchdog >/dev/console
echo disable > /dev/watchdog
fi
if [ "`pidof touchdisplay`" != "" ] ; then
## Beim NLR wird der ctlmgr noch gebraucht
KEEP_CTLMGR=yes
else
KEEP_CTLMGR=no
if [ "$1" = "start" ] ; then
if [ "`pidof websrv`" = "" ] ; then
if netstat -l -n | grep -q "tcp.*\(0\.0\.0\.0\|::\):80 .*LISTEN" ; then
## active tcp listen on port 80 without websrv running
## --> keep ctlmgr running
KEEP_CTLMGR=yes
fi
fi
else
if [ "$1" = "start_from_internet" ] ; then
## one click update
KEEP_CTLMGR=yes
fi
fi
fi
if [ "$1" != "start" ] ; then
## UMTS-Stick wird beim Update via Internet u.U. noch gebraucht
KEEP_USB=yes
fi
## shutdown-list
## stage 1
## inetd restarts ftpd and smbd on demand, stop it first
PROCESSES="inetd capiotcp_server pbd faxd telefon dtrace printserv smbd nmbd"
## stage 2/3 - telefon & dect_manager have to stop before (at stage 1), configd at least.
## NOTICE: Once, if maild uses configd, it also must stop before configd.
PROCESSES_2="audiod pictured feedd playerd"
PROCESSES_3="configd"
## stage 4
## do not stop UPnP Deamon if running a UPnP-CGI
if [ "$2" != "UPNP" ] ; then
AVMDAEMONS="lltdd maild voipd usermand upnpd mediasrv avmlogd tr069discover contfiltd fritznasdb"
else
AVMDAEMONS="lltdd maild voipd usermand mediasrv avmlogd tr069discover contfiltd fritznasdb"
fi
if [ "$KEEP_CTLMGR" = "no" ] ; then
AVMDAEMONS="$AVMDAEMONS ctlmgr"
fi
if [ "$1" != "start" ] ; then
## we will download the update image from the internet so keep dsld running
echo "" >/dev/null
else
PROCESSES="$PROCESSES mailer"
AVMDAEMONS="$AVMDAEMONS dsld avmike"
fi
if [ "$KEEP_USB" = "no" ] ; then
term_usb
fi
ps > /dev/console
date > /dev/console
echo TERMINATING $PROCESSES > /dev/console
termforcedwait 5 $PROCESSES
date > /dev/console
echo TERMINATING $PROCESSES_2 > /dev/console
termforcedwait 5 $PROCESSES_2
date > /dev/console
echo TERMINATING $PROCESSES_3 > /dev/console
termforcedwait 5 $PROCESSES_3
date > /dev/console
[COLOR="#FF0000"]echo TERMINATING $AVMDAEMONS > /dev/console[/COLOR]
termavmforcedwait 5 $AVMDAEMONS
[COLOR="#008000"]date > /dev/console[/COLOR]
rm -rf /var/dtrace.txt
rm -rf /var/dtrace.tx2
termforcedwait 4 udhcpd dproxy ftpd
rmmod userman_mod
## Make room for update over internet on 7113
rmmod isdn_fbox_fon3
if [ "$1" = "start_tr069" ] ; then
echo "stopping wlan ..." >/dev/console
/etc/init.d/rc.net wlanstop
fi
killall -9 checkservices
[COLOR="#008000"]date > /dev/console[/COLOR]
[COLOR="#0000FF"]rm -f /var/install
rm -f /var/tmp/*.image[/COLOR]
exit 0
fi
if [ "$1" = "end" ]
then
## now kill everything else to avoid access to flash while flashing
/etc/init.d/rc.net wlanstop
if [ -c /dev/watchdog ] ; then
echo disable watchdog >/dev/console
echo disable > /dev/watchdog
fi
termforcedwait 5 mailer wpa_authenticator wstart
## do not stop UPnP Deamon if running a UPnP-CGI
if [ "$2" != "UPNP" ] ; then
termavmforcedwait 5 websrv upnpd usermand contfiltd dsld avmike multid ddnsd upnpdevd ctlmgr tr069discover
else
termavmforcedwait 5 websrv usermand contfiltd dsld avmike multid ddnsd upnpdevd ctlmgr tr069discover
fi
term_usb
exit 0
fi
echo "use: $0 [start|start_from_internet|start_tr069|end] [UPNP]"
exit 1
Der Ausgabe nach ist bei Dir dieses Skript komplett durchgelaufen bis zur rot markierten Stelle und auch die beiden grünen "date"-Aufrufe sind noch zu sehen. Da nach dem zweiten "date" nur noch das Entfernen event. schon vorhandener Update-Teile kommt (die blauen Zeilen), bevor der Aufruf dann mit "exit 0" beendet wird (wir erinnern uns an das "/bin/sh" oben beim Aufruf von "prepare_fwupgrade", es wird also nur diese Instanz beendet), ist dieses Skript komplett abgearbeitet und die folgenden Ausgaben
Code:
[1807]++ ++ do internalflash 'prepare unmount'... ++ ++
[1807]++ ++ ...done ++ ++
müssen von einer anderen Stelle kommen, die dann anschließend auch den Telnet-Daemon (und damit Deine Sitzung) beendet.
Jetzt käme seitens "firmwarecfg" ein (interner) Aufruf des tar-Kommandos, um das Image nach / zu entpacken. Da das Image seinerseits die Dateien unter ./var enthält, landen diese Dateien also unter dem oben blau markierten Zugriffspfad im tmpfs und dort wird - wenn das Image die Signaturprüfung besteht, dazu später mehr - dann die Datei /var/install aufgerufen, ggf. mit dem Parameter "-f", wenn ein Downgrade ausgeführt werden soll. Dieses Skript würde jetzt das vorhandene Shell-Skript /var/post_install (das wird bei jedem Shutdown/Reboot ausgeführt) so modifizieren, daß beim nächsten Reboot zusätzliche Kommandos dort ausgeführt werden, die das neue System in das inaktive Partition-Set schreiben und nach dem erfolgreichen Update auf die alternativen Partitionen umschalten. U.a. ist dort auch die Folge
Code:
##################################################################################
# prepare install
##################################################################################
# do no longer overwrite/remove /var/post_install
if [ ! -f /var/post_install ] ; then
# create, if not present
echo "#! /bin/sh" >/var/post_install
fi
# append sequence to /var/post_install
[COLOR="#008000"]echo 'echo $0: start' >>/var/post_install[/COLOR]
# LED- und Betriebsstundenzaehler- Demon stoppen
echo "sleep 1" >>/var/post_install
echo "killall run_clock" >>/var/post_install
echo "if ps | grep -v grep | grep -q telefon ; then killall telefon ; fi" >>/var/post_install
[COLOR="#0000FF"]echo "if ps | grep -v grep | grep -q telnetd ; then killall telnetd ; fi" >>/var/post_install[/COLOR]
in /var/install enthalten, die bei einem tatsächlich stattfindenden Firmware-Update (das ist bei Dir vermutlich nicht der Fall, soviel will ich vorwegnehmen) den Telnet-Daemon beendet. Diese Kommandofolge kann bei Dir aber eigentlich nicht ausgeführt werden, denn es fehlt die Ausgabe der grün markierten Zeile in Deinem Protokoll.
Und damit kommen wir jetzt zu dem Punkt der Signatur- und Versionsprüfung. Beim Auspacken prüft "firmwarecfg", ab es sich um ein originales Firmware-Image von AVM handelt. Schlägt dieser Test fehl, wird eine entsprechende Seite als Ergebnis des CGI-Aufrufs dem Benutzer präsentiert (/usr/www/avme/html/tools/update_not_signed.html) und der Benutzer erhält die Chance, sich dafür zu entscheiden, dieses Image trotzdem zu starten. Erst im Anschluß (eigentlich sogar erst nach einem weiteren Upload/Auspacken des Images, denn die "Update fortsetzen"-Seite sendet das zu verwendende Image ja erneut) wird /var/install überhaupt aufgerufen.
Deiner Beschreibung ist jetzt nicht zu entnehmen, daß diese Seite überhaupt erscheint und Du dort etwas bestätigen müßtest, dem Protokoll kann man eigentlich auch nichts in dieser Richtung entnehmen. Das gibt Anlaß zu der Vermutung, daß der komplette Schritt mit dem Entpacken des Images aus irgendeinem Grund nicht funktioniert. Hier stellt sich halt die Frage, was da schiefgehen könnte oder ob Deine Beschreibung unvollständig ist.
Wenn seitens der Firmware keine Rückfrage erfolgt, würde ich als erstes mal ein Update mit einer originalen AVM-Firmware (also der 06.30) "unter der Aufsicht" der Telnet-Konsole machen und die dort erscheinende Ausgabe mit der oben stehenden vergleichen. Klappt das problemlos (und enthält das Protokoll dann auch die zusätzlichen Zeilen aus /var/install bzw. /var/post_install für das Updaten der Firmware), ist zumindest mal gesichert, daß es bei signierter Firmware funktioniert und es nicht am Auspacken liegen kann.
Ansonsten (wenn Du die Rückfrage nur "unterschlagen" hast, aber das Protokoll zeigt einen solchen Aufruf eben auch nicht, der aber vorhanden sein müßte, wenn Du ein nicht signiertes Image verwendet hast) würde ich das Image auf die Box per FTP kopieren und dann dort von Hand einmal auspacken. Selbst das /var/install-Skript kann man ausführen lassen (und die Ausgabe beobachten), solange man anschließend nicht "reboot" aufruft bzw. das originale /var/post_install mit einem Aufruf von
Code:
rm -rf /var/post_install ; ( cd / ; tar xf /var.tar ./var/post_install )
wiederherstellt (das macht "firmwarecfg" auch, wenn ein Fehler auftritt).
Am Ende bleibt ansonsten die schon weiter oben gestellte Frage, ob die internationale Version der 7490 ab 06.20 nun unsignierte Updates akzeptiert oder nicht ... erst wenn das geklärt ist (dann müßte eben auch die "firmware_not_signed"-Seite erscheinen), macht es Sinn, die Ursache weiter einzugrenzen.
Wobei mir dabei dann auch sofort wieder einfällt, daß ein Update mit unsignierter Firmware nur dann möglich ist, wenn die FRITZ!Box eingerichtet ist und ein Kennwort gesetzt wurde. Zwar sollte eine andere Fehlerseite (/usr/www/avme/tools/update_not_signed_no_password.html) angezeigt werden, wenn das nicht der Fall ist, aber vielleicht fehlt bei Dir ja tatsächlich aus Bequemlichkeit (mache ich später, wenn das richtige System installiert ist) auch das Kennwort und die passende Fehler-Seite wird aus irgendeinem Grund bei der internationalen Version nicht richtig ausgeliefert.