[Info] modfs - SquashFS-Image (AVM-Firmware) ändern für NAND-basierte FRITZ!Boxen

modfs-0.3.1.tgz funktioniert bei mir auch für eine 7490 mit 113.06.35-31050

Mein MT-F meldete ein neues FRITZ!OS,
Update konventionell durchgeführt,
telnetd temporär hinzugefügt (mit dem einfach /var/install),
modfs das System kopieren lassen,
Reboot,
telnetd temporär hinzugefügt (mit dem einfach /var/install),
modfs seine Extra-Features hinzufügen lassen,
fertig.
Es scheint alles in Ordnung zu sein.

Das ganze zweimal - auf einer Reserve-7490 und dann auf meiner Live-7490.
 
Das mit dem Reboot zwischendrin ist eigentlich auch nur noch ein Relikt aus der Zeit, als es unbedingt ein und dieselbe Version in beiden Partitionen sein mußte.

Wenn man das gleich im Update-Modus aktualisieren läßt, bleibt einem auch die vorhergehende Version noch erhalten, falls eine neue doch mal nicht so will ... meiner Meinung nach der bessere Weg.
 
4 Fragen

Wenn man das gleich im Update-Modus aktualisieren läßt, bleibt einem auch die vorhergehende Version noch erhalten, falls eine neue doch mal nicht so will ... meiner Meinung nach der bessere Weg.

Das klingt gut und würde ich auch gerne so machen, aber …

… ich hatte mit den 6.35-er Firmware-Images den Eindruck bekommen, dass modfs irgendwie nicht mit ihnen zurecht kommt,
und eben nur noch aus einer nicht gemoddeten, originalen Version in der einen Partition eine gemoddete in der anderen Partition erzeugen kann:

Ich habe ein Image unter /var/media/ftp abgelegt,
nämlich /var/media/ftp/FRITZ.Box_7490_Labor.113.06.35-31050.image .
Und was sagt modfs dazu:

Code:
Als Ausgangsbasis kann entweder ein komplettes Firmware-Image dienen (firmware.image), aus dem dann
das enthaltene root-Dateisystem extrahiert wird oder es kann auch gleich ein bereits extrahiertes
SquashFS-Image (filesystem_core.squashfs) verwendet werden.

Die angegebenen Dateinamen werden jeweils im Wurzelverzeichnis eines Volumes gesucht. Wenn die Datei
anders benannt sein sollte oder sich nicht im Wurzelverzeichnis des Datenträgers befindet, muss unten
die Option 'p' gewählt werden.

Es gibt mehrere Speicherlaufwerke in dieser Box.
Es wurde keine passende Vorlage unter '/var/media/ftp' gefunden.

(1) Warum wird /var/media/ftp/FRITZ.Box_7490_Labor.113.06.35-31050.image nicht gefunden?

(2) Und wo kommt die Option 'p' ins Spiel?

Jedenfalls:

Code:
Bitte den Dateinamen des Images - entweder ein komplettes Firmware-Image (im tar-Format) oder
ein bereits extrahiertes squashfs-Image (kein komplettes Wrapper-Dateisystem, nur das dort
enthaltene root-Dateisystem) - eingeben, zum Abbrechen ein einzelnes 'q' verwenden : 
/var/media/ftp/FRITZ.Box_7490_Labor.113.06.35-31050.image
Überprüfen, ob die Datei '/var/media/ftp/FRITZ.Box_7490_Labor.113.06.35-31050.image' ein Firmware-Image enthält ... OK
Extrahieren des root-Dateisystems aus dem Firmware-Image ...mount: mounting /dev/loop1 on /var/tmp/3261_278 failed: Invalid argument
 Fehler

Die gefundene Datei '/var/media/ftp/FRITZ.Box_7490_Labor.113.06.35-31050.image' ist kein gültiges Firmware-Image für dieses Gerät.

(3) Und was ist hier passiert?

(4) Hätte ich modfs dazu mit "update" starten müssen?
 
Standardmäßig sucht der wohl nach dem Namen "firmware.image", wie auch in der Beschreibung steht. Ich habe einfach auf einer externen Festplatte ein Verzeichnis "fw", wo ich immer die aktuelle Labor unter dem Namen "labor.image" reinlege. Ich starte modfs dann mit dem Update-Parameter und dem kompletten Pfad. Das hat bisher immer funktioniert.
Code:
./modfs update /var/media/ftp/Samsung-S2Portable-01/fw/labor.image

Nachtrag: Am besten die aktuelle Version von modfs vorher frisch aus dem Netz auf die Box laden:
Code:
mkdir -p /var/mod;cd /var/mod;wget -qO- http://yourfritz.de/modfs-0.3.1.tgz | gunzip -c | tar x

PeterPawn hat die Version auf dem Server nämlich öfter geändert, obwohl sie immer noch 0.3.1 heißt ;)
 
Zuletzt bearbeitet:
PeterPawn hat die Version auf dem Server nämlich öfter geändert, obwohl sie immer noch 0.3.1 heißt
Das ist wohl wahr ... entweder ich packe davor noch eine "Landing-Page", auf der dann der aktuelle Dateiname zu finden ist (das will ich im Moment nicht) oder ich ändere hier bei jeder winzigen Änderung den Link oder ich verlasse mich darauf, daß die Leute die aktuelle Version vom Server zumindest mit ihrer vorhandenen vergleichen.

Ich habe mich beim Ausführen kleinerer Korrekturen (die keine Funktion verändern, sondern nur Fehler korrigieren - z.B. die falschen Permissions, die den Aufruf per "sh" erforderlich machten anstelle des direkten Ausführens) für die Variante mit dem Ersetzen des Archivs unter demselben Namen entschieden. Ein "current"-Link wäre auch nicht so viel anders (auch den müßte man ja prüfen, auch wenn man ggf. dann schon am Namen Abweichungen erkennt) und das schnell noch durch ein "md5sum" zu jagen um einen Unterschied zu erkennen, ist nun kein wirklicher Aufwand.

@lp10000:
Genau der "update"-Modus macht da den Unterschied ... einmal ohne Image-Namen, dann wird die aktuellste Variante vom AVM-Server geladen oder mit dem Namen einer Datei, dann gibt es gar keine Versionsprüfung und es geht auch ein "Downgrade". Daß ich das "unzip" direkt aus den Labor-Dateien da nicht mit aufgenommen habe, liegt am Ende nur daran, daß ich dafür selbst schon passende Skripte hatte.
 
beim nächsten neuen FRITZ!OS dann

Genau der "update"-Modus macht da den Unterschied ... einmal ohne Image-Namen, dann wird die aktuellste Variante vom AVM-Server geladen oder mit dem Namen einer Datei, dann gibt es gar keine Versionsprüfung und es geht auch ein "Downgrade". Daß ich das "unzip" direkt aus den Labor-Dateien da nicht mit aufgenommen habe, liegt am Ende nur daran, daß ich dafür selbst schon passende Skripte hatte.

Na, beim nächsten neuen FRITZ!OS werde ich das doch mal genau so durchführen.
(Einen Downgrade durchführen, nur um es mal auszuprobieren – nein, das ist nicht mein Ding.)
(Und wenn ich dann unter Neustart zwischen zwei gemoddeten Versionen hin- und herswitchen kann – dann ist das ja auch nicht übel.)
 
Hallo,
bei mir hat das Skript auch für eine 6.30 geklappt und mir den telnet sowie die debug.cfg wieder aktiviert.
Benutzt habe ich ebenfalls das Pseudo Image hier aus dem Thread.
Hat erst funktioniert als ich einen ext3 USB Stick angeschlossen hatte. Vielen Dank an PeterPawn!

Eine Frage noch: nach dem reboot war telnet nun zunächst aktiviert , mit dem üblichen Telefoncode liess es sich
auch deaktivieren. Wieder aktivieren lässt es sich per Telefoncode allerdings nicht mehr.
Woran kann das liegen?
P.S. benutze die Methode mit Wählhilfe und Telnet an #96*7* sowie Telnet aus #96*8*
 
FRITZ.Box_7490_Labor.113.06.36-31135.image

Auch diese neue Beta-Firmware erfolgreich auf zwei 7490-s gemoddet:
Code:
./modfs-0.3.1/modfs update FRITZ.Box_7490_Labor.113.06.36-31135.image

Von den zweien bekam nur die etwas mehr unter Last stehende 7490 dieses Kommando im Voraus:

Code:
prepare_fwupgrade start_tr069
 
FRITZ.Box_7490_Labor.113.06.36-31135.image

Mod von 6.30 auf die o.g. Labor erfolgreich. Telnet und rc.user funktionieren.
Mit der neuen Firmware werden endlich auch die angeschlossenen USB Datenträger mit dem Label gemountet. Allerdings muss dafür vorher auf Werkseinstellung zurückgesetzt werden.

Danke PeterPawn!
 
Auch von mir ein herzliches DANKE für diese Arbeit!

Evtl. für diejenigen, die schon auf der 6.30 sind, in den ersten Beitrag einen Link zu dem Pseudo-Image einbauen,
damit man überhaupt wieder telnet Zugriff hat um diese Prozedur durchzuführen.

Ist nach dem Prozedere die debug.cfg (namentlich) wieder da oder nur die rc.user.
Hintergrund: FritzLoad schreibt seinen autostart in die debug.cfg oder rc.custom (soweit ich den code richtig verstanden habe)
http://sourceforge.net/p/avmload/code/HEAD/tree/
(in bin/install.sh)
Ich musste allerdings feststellen, dass nach dem Neustart kein autostart erfolgt.
Was passt hier nicht?
Danke hierfür im Voraus!
 
Wie von PeterPawn im ersten Post beschrieben:
Wenn man die Fragen nach den zusätzlichen Modifikationen alle mit 'n' beantwortet, wird nur die Abarbeitung der Kommandos in der 'alten debug.cfg' wieder aktiviert.

Der Fehler liegt mit ziemlicher Sicherheit an deinen verwendeten Befehlen in der debug.cfg.
Das ist aber hier Off-Topic, mach doch dazu im Fritz!Load Forum einen Thread auf.
 
Danke für die schnelle Antwort.
Ich habe nochmal die readme aus dem modfs-0.3.1 ausgepackt.

"Das erste Skript aktiviert die Abarbeitung der Kommandos in der
Datei 'rc.user' (das ist ziemlich genau dasselbe, wie die Datei
'debug.cfg' in der Version von AVM) am Ende des Startprozesses,
wenn in dieser Datei irgendwelche Kommandos enthalten sind.
Das ist auch das einzige der mitgelieferten ModScripts, das ohne
Nachfrage abgearbeitet wird."

Wenn ich alle Optionen mit "j" aktiviert habe sollte das doch trotzdem funktionieren.

Ich denke, dass das nur bedingt ein FL-spezifisches Problem ist.
Die FL-Installationsroutine hat lange funktioniert - wenn eine debug.cfg
vorhanden ist.
Wenn diese allerdings nur "rc.user" heißt, könnte ich mir vorstellen, dass das
Installationsskript damit probleme hat.
Deshalb die Frage ob es die debug.cfg nach dem modfs überhaupt mit diesem Namen gibt
oder nur die, im Funktionsumfang äquivalente, rc.user?

Auf jeden Fall suggeriert der Auszug aus der readme, dass es keine debug.cfg gibt.
 
Habe u.A. Fritz!Load mit Autostart aus der debug.cfg heraus am Laufen - funktioniert einwandfrei.
 
Tja, dann kapier' ich wohl was nicht.
Hab mir mal die mod_rc_tail_sh angesehen.
Außer in den Kommentaren wird dort nirgends die debug.cfg erwähnt.
Ich weiß jetzt nicht, ob die standardmäßig in der Fritzbox irgendwie gelinkt sind.

Hast Du für die FritzLoad Installation "install -i" verwendet?
Keine anderen manuellen Eingriffe?
 
Die README-Datei im Archiv ist leider veraltet, mir fehlt die Zeit für eine Aktualisierung.

Die "debug.cfg" ist ja nur ein Name für ein Character-Device und wird (absichtlich) so nicht wiederbelebt, um Side-Effects zu vermeiden.

Wenn die FritzLoad-Installation die notwendigen Kommandos automatisch dort eintragen soll, einfach vor dem Aufruf der Installationsroutine das notwendige File mit dem Kommando
Code:
mkconfigfile /var/flash/debug.cfg 98
manuell anlegen.

Bei einer 7490 (bzw. m.W. auch bei anderen NAND-Modellen) bleibt dieses char-Device (mkconfigfile legt nur mit mknod ein solches an, nachdem die Major-ID des TFFS ermittelt wurde) zwar auch über einen Neustart hinaus erhalten, vom entsprechenden modscript wird sie aber weiterhin nur als TFFS/98 angesprochen (unter dem Namen /var/tmp/rc.user für die Ausführung kopiert) und nicht als "debug.cfg". Aber im TFFS sind diese Dateinamen eben ohnehin nur Schall und Rauch, das Ding kann man nennen, wie man will und sogar unter mehreren Namen gleichzeitig zugreifen.

EDIT: Dieser Charakter eines TFFS-Nodes als Character-Device ist auch der Grund, warum ein
Code:
rm /var/flash/debug.cfg
zwar den Inode-Eintrag für das Device löscht, aber nicht den Inhalt dieser "Datei".
 
Zuletzt bearbeitet:
Danke Peter,
ich habe versucht zu verstehen, was TTFS ist und habe heraus gefunden, dass die major und minor ID's sozusagen die Adressen in diesem Dateisystem darstellen.
Die Namen rc.user/debug.cfg sind nur "Links" auf diese ID's. (Hab nicht viel Infos zu dem TTFS ergoogeln können)
Dann habe ich wieder die install.sh studiert und denke das Prozedere dahinter einigermaßen nachvollziehen zu können.
Das Skript schreibt über ein tempfile in die debug.cfg. (bin Laie in Sachen programmieren und das Ding ist voll mit Variablen)
Wenn diese als character device noch nicht existiert kann's wohl nicht klappen?
Fehlermeldung kam allerdings, soweit ich mich erinnern kann, nicht.

Wenn die debug.cfg nicht "wiederbelebt" werden soll, was wäre die bessere Alternative?
Es gilt zu bedenken, dass auf den älteren Boxen, die debug.cfg vorhanden ist und eine Änderung in der Installationsroutine dann nur über eine "Erkennung der Box", also Fallunterscheidung erfolgen müsste.
Das Reaktivieren der debug.cfg wäre also eine sehr einfache Lösung.

Was noch Fragen aufwirft, ist die Rolle des Bootloaders in dieser Sache.
Es gibt im Skript Funktionen die sich damit beschäftigen.
Keine Ahnung was dahinter steckt.
(ich knalle mal den code hier rein - bitte nicht gleich steinigen)
Code:
#!/bin/ash
# Installieren/Deinstallieren von Fritz!Load GUI in debug.cfg oder rc.custom

################################ Einstellungen ANFANG ################################
##
#

# Installationstyp:
# default:  Installieren: USB-Speicher"
# small  :  Installieren: RAM-SMALL  (nur GUI)"
# medium :  Installieren: RAM-MEDIUM (GUI+CURL)"
# large  :  Installieren: RAM-LARGE  (GUI+CURL+BIN)"
itype=default

# Freetz-Mod installiert (0=Nein/Auto, 1=Ja)
freetz=0

# Welche Dateien sollen nicht bei itype=medium im RAM abgelegt werden:
remove_medium="gocr pngtopnm smbclient tcpdump unrar null.bin wget"

#
##
################################# Einstellungen ENDE #################################

# bootloader-version
blver=3

# debug.cfg
filed=/var/flash/debug.cfg

# backup_debug.cfg
filedbk=/var/tmp/backup_debug.cfg

exit=0


sizeDir(){
    if [ ! -e "$1" -o -z "$BBox" ];then
        echo -n 0
        return 1
    fi
    local size="$(${BBox} du -ks $1 | sed -e 's,[^0-9]*\([0-9]*\).*,\1,')"
    [ -z "$size" ] && size=0
    echo -n $size
}
helpmsg(){
    sizeLarge=0 sizeSmall=0 sizeMedium=0
    for f in bin cgi html lib; do
        s=$(sizeDir $pdir/$f)
        sizeLarge=$(($sizeLarge+$s))
    done
    for f in bin/busybox24; do
        s=$(sizeDir $pdir/$f)
        sizeLarge=$(($sizeLarge-$s))
    done
    sizeSmall=$sizeLarge
    sizeMedium=$sizeLarge

    for f in bin; do
        s=$(sizeDir $pdir/$f)
        sizeSmall=$(($sizeSmall-$s))
    done

    sizeMedium=$sizeLarge
    for f in $remove_medium; do
        s=$(sizeDir $pdir/bin/$f)
        sizeMedium=$(($sizeMedium-$s))
    done

    [ "$sizeSmall" = 0 ] && sizeSmall="?"
    [ "$sizeMedium" = 0 ] && sizeMedium="?"
    [ "$sizeLarge" = 0 ] && sizeLarge="?"

    echo "Aufruf: $0 PFAD [-g|-u|-i|-iRS|-iRM|-iRL|-d|-cu|-?] [-freetz]"
    echo
    echo "  PFAD        - Die Pfadangabe ist optional, falls nicht angegeben:"
    echo "                $(pwd)"
    echo
    echo "  -g          - Starte GUI (Fritz!Load funktioniert nur bis zum naechsten Neustart,"
    echo "                            kein Eintrag in debug.cfg -> Prima zum Testen)."
    echo "  -u          - Halte GUI an (Fritz!Load wird aus dem Speicher entfernt)."
    echo "  -i          - Installieren  : USB-Speicher"
    echo "  -iRS        - Installieren  : RAM-SMALL  (nur GUI ca. $sizeSmall Kbyte)"
    echo "  -iRM        - Installieren  : RAM-MEDIUM (GUI+CURL ca. $sizeMedium Kbyte)"
    echo "  -iRL        - Installieren  : RAM-LARGE  (GUI+CURL+BIN ca. $sizeLarge Kbyte)"
    echo "  -d          - Deinstallieren: Eintrag aus debug.cfg / rc.custom entfernen."
    echo "  -cu         - Den Bootloader aktualisieren - wenn noetig."
    echo "  -freetz     - Erzwinge Installation in freetz mod."
    echo "  -?          - Diese Hilfe anzeigen, dann beenden."
    echo
    echo "  Beispiele:"
    echo "   $0 -i -freetz  (Installiere Fritz!Load im freetz mod)"
    echo "   $0 -d -freetz  (Deinstalliere Fritz!Load im freetz mod)"
    echo "   $0 -iRS        (Installiere im Ram-Small)"
    echo
}

check(){
    #Pruefe ob freetz-mod auf der FritzBox drauf ist, falls ja, dann wird /var/tmp/flash/rc.custom  statt ins debug.cfg eingetragen
    if [ -e "/var/tmp/flash/rc.custom" ]; then 
        filed=/var/tmp/flash/rc.custom
        filedbk=/var/tmp/backup_rc.custom
        freetz=1
    elif [ -e /var/tmp/flash/mod -o "$freetz" = 1 ]; then 
        filed=/var/tmp/flash/mod/rc.custom
        filedbk=/var/tmp/backup_rc.custom
        freetz=1
    fi
    # Datei existiert noch nicht?
    [ ! -e "$filed" ] && echo -n >$filed
    return 0
}

checkBlUpdate() {
    echo "Pruefe Fritz!Load-Bootloader..."
    inst_fl=$(grep "#>> \(Apache-\)\?Fritzload" $filed)
    [ -z "$inst_fl" ] && echo "Fritz!Load ist nicht installiert." && return 1

    inst_blver=$(grep "fritzload_blver=" $filed | sed 's,.*fritzload_blver=\([^;]*\).*,\1,')
    [ -z "$inst_blver" ] && inst_blver=0
    if [ "${blver:-0}" -gt $inst_blver ]; then
        # update bootloader
        echo "Aktualisiere den Fritz!Load-Bootloader v$inst_blver -> v$blver ..."
        itype=$(grep "fritzload_itype=" $filed | sed 's,.*fritzload_itype=\([^;]*\).*,\1,')
        exit=1
        install
        return $?
    fi
    echo "Der Fritz!Load-Bootloader ist auf dem neuesten Stand."
    return 0
}

delete() {
    echo "Entferne Zeilen aus $filed..."

    # NEUE FORMAT
    echo -n >$filedbk
    sed -n '/^#>> \(Apache-\)\?Fritzload/,/^#<< \(Apache-\)\?Fritzload/!p' $filed >$filedbk

    # ALTES FORMAT
    grep -v "\(/var/tmp/apache\|# Apache-1\)" $filedbk >$filedbk.2
    cat $filedbk.2 >$filed
    [ "${freetz:-0}" -eq 1 ] && modsave flash
    rm -f $filedbk*
    echo "Eintraege wurden aus $filed entfernt."
    return 0
}

is_installed(){
    if [ $(grep -c "\(# Apache\|#>> Fritzload\|#>> Apache\)" $filed) -eq 1 ]; then
        echo "Der Installations-Eintrag ist bereits vorhanden!"
        return 0
    fi
    return 1
}


add_debug(){
    add_file=$1
    cat $filed >$filedbk
    cat $add_file >>$filedbk
    cat $filedbk >$filed
    [ "${freetz:-0}" -eq 1 ] && modsave flash
    echo -n >$signaldir/flblupdated
    echo "Eintraege in $filed gespeichert."
    echo "--------------------------------------"
    if [ "$exit" = 1 ];then
        exit 0
    fi

    echo "Starte die Einrichtung von Fritz!Load..."
    # Background Installation entfernen und Installer ausfuehren:
    sed -e '/^\(    {\|    } &\)$/d' $add_file >$add_file.exe
    rm -f $add_file
    sh $add_file.exe -exit
    rm -f $add_file.exe
}


install() {
    is_installed && delete

cat <<'EOF' >/var/install.tmp
#>> Fritzload
EOF

echo "fritzload_blver=$blver; USB_dir=$pdir; fritzload_itype=$itype; remove_medium=\"$remove_medium\";" >>/var/install.tmp

cat <<'EOF' >>/var/install.tmp
while !($USB_dir/bin/install.sh $USB_dir -g); do 
sleep 5 
done
#<< Fritzload
EOF
    add_debug /var/install.tmp
}

unload() {
    if [ -e /var/fritzload ];then
        echo "Entferne die GUI-Verzeichnisstruktur..."
        /var/fritzload/bin/guiinit.sh /var/fritzload -u

        echo "Entferne Fritz!Load..."    
        killall autorunfl.sh 2>/dev/null
        
        #kill FritzLoad Webserver
        kill $(ps ww | grep 'h /var/tmp/www-fritzload/' | grep -v 'grep' | awk '{print $1}') 2>/dev/null
        
        # kill stunnel
        kill $(ps ww | grep 'stunnel.*config/stunnel_conf' | grep -v 'grep' | awk '{print $1}') 2>/dev/null
        
        if [ -L /var/fritzload ];then
            # remove default install
            rm -f /var/fritzload
        else
            # remove non-default install
            rm -rf /var/fritzload
        fi
    fi
}

instWait() {
    itype=$(grep "fritzload_itype=" $filed | sed 's,.*fritzload_itype=\([^;]*\).*,\1,')
    echo -n >/var/tmp/flInstWait.exe
    echo "USB_dir=$pdir; fritzload_itype=$itype; d1=$1; d2=$2;" >>/var/tmp/flInstWait.exe
    cat <<-'EOF' >>/var/tmp/flInstWait.exe
        USB_dir="${USB_dir%/${USB_dir#/var/media/ftp/*/}}"
        installed=0
        {
        while true; do
            if mount | grep " on $USB_dir" >/dev/null; then
                echo "Warte auf das Aushaengen des USB-Speichers..."
                while true; do
                    sleep 11
                    if mount | grep " on $USB_dir" >/dev/null; then
                        continue
                    fi
                    echo "Der USB-Speicher wurde ausgehaengt."
                    sleep 3
                    break
                done
            fi
            while true; do
                if mount | grep " on /var/media/ftp/" >/dev/null; then
                    echo "Der USB-Speicher wurde gefunden."
                    sleep 3
                    break
                fi
                sleep 11
            done
        
            for USBDEVICE in $(mount | grep /var/media/ftp/ | sed -e "s,^.*ftp/,,g" -e "s/ .*$//"); do
                # Verzeichnis vorhanden?
                for fldir in "fritzload|FritzLoad|Fritzload"; do
                    pdir=/var/media/ftp/$USBDEVICE/$fldir
                    if [ -d "$pdir" ];then
                        break
                    fi
                done
                if [ -f "$pdir/bin/install.sh" ];then
                    echo "Fritz!Load wurde in $pdir gefunden."
                    #cd $pdir/bin
                    ./install.sh $pdir -i$fritzload_itype $d1 $d2
                    installed=1
                    break
                fi
            done
            [ "$installed" = 1 ] && break
    
            echo "Fritz!Load wurde nicht gefunden!"
        done
        } &
    EOF
    echo "Start der Warteschleife fuer die Fritz!Load-Installation."
    chmod 0777 /var/tmp/flInstWait.exe
    /var/tmp/flInstWait.exe
}

# Pfad vom Fritz!Load-Root Verzeichnis
pdir="$1"
# Erster Parameter ist Pfadangabe oder Kommando?
if [ -z "${pdir##-*}" ];then
    pdir="$(pwd)"
else
    shift
    [ "$pdir" = "." -o ! -d "$pdir" ] && pdir="$(pwd)"
fi
pdir="${pdir%/bin}"
[ "$pdir" = "/var/fritzload" -a -L /var/fritzload ] && pdir=$(ls -l /var/fritzload | sed 's,.*-> \(.*\),\1,')
if [ ! -d "$pdir/bin/" -o ! -d "$pdir/html/" -o ! "$pdir/cgi/" ];then
    echo "!!!!!!"
    echo "Der ermittelte Pfad ist nicht Fritz!Load-Root."
    echo "Die Unterverzeichnisse /bin, /html oder /cgi wurden nicht"
    echo "in $pdir gefunden."
    echo "Bitte in das Verzeichnis /fritzload/bin wechseln"
    echo "und den Installer erneut starten."
    echo "!!!!!!"
    helpmsg
    exit 0
fi
if [ "${pdir#/var/media/ftp}" = "$pdir" ];then
    echo "!!!!!!"
    echo "Fehler! Der Pfad ist kein absoluter Pfad zum USB-Speicher."
    echo "Der Pfad muss auf den USB-Speicher ueber /var/media/ftp/... verweisen - und nicht ueber einen Link!"
    echo "Bitte in das Fritz!Load-Verzeichnis auf dem USB-Speicher wechseln!"
    cd /var/media/ftp
    echo "/var/media/ftp/$(ls)"
    echo
    echo "Und von dort ./install.sh erneut aufrufen."
    echo "!!!!!!"
    helpmsg
    exit 0
fi
. $pdir/bin/BBox

if [ "$2" = "-freetz" ];then
    freetz=1
fi

if [ "$3" = 'exit' ];then
    exit=1
fi

case "$1" in 
    -d|--del)
        check
        delete
    ;;
    -p|-i|--ins|-ideafult)
        check
        itype=default
        install
    ;;
    -iRS|-ismall)
        check
        itype=small
        install
    ;;
    -iRM|-imedium)
        check
        itype=medium
        install
    ;;
    -iRL|-ilarge)
        check
        itype=large
        install
    ;;
    -A) # AUTO: via Installations-TAR!
        check
        install
    ;;
    -g)
        $pdir/bin/guiinit.sh $pdir install
        [ ! -e /var/fritzload ] && ln -s $pdir /var/fritzload
    ;;
    -u)
        unload
    ;;
    -cu)
        check
        checkBlUpdate
    ;;
    -?|--help)
        helpmsg
        exit 0
    ;;
    *)
        helpmsg >&2
        exit 1
    ;;
esac
 
Zuletzt bearbeitet:
@Fireball3:
Wir sind doch auf der 7490, oder?

Dann lege doch einfach mal die "debug.cfg" an (s. #255) und lasse das "install" noch einmal laufen. Anschließend kannst Du mit "edit_rcuser" (wenn Du das mit integrieren läßt vom modfs) den Inhalt der "Datei" kontrollieren und ggf. hier einstellen, wenn da etwas hineingeschrieben wurde und trotzdem der Start von FritzLoad nicht funktionieren will.

EDIT: Das "TFFS" von AVM ist nichts weiter als ein Treiber für den Zugriff auf einen Flash-Bereich (der LowLevel-Zugriff gehört da eigentlich gar nicht dazu, die Verwaltung der Threads zum Schreiben von neuen Werten schon), der seinerseits eine eigene "major device ID" hat und für jede dort per "character device access" angesprochene "minor device ID" einen (mit zlib komprimierten) "Datenstrom" verwaltet, der ausgelesen und geschrieben werden kann (allerdings nicht mit "random access" wegen der Komprimierung). Um eine Transaktionssicherheit zu gewährleisten (das Schreiben eines neuen Streams muß erfolgreich beendet werden oder der alte bleibt erhalten), werden dafür zwei getrennte Flash-Partitionen verwendet. Welche das sind, verrät ein "cat /proc/tffs".
 
Zuletzt bearbeitet:
Ja, wir sind auf der 7490.
Ich schätze, dass mit Deiner Ergänzung
Code:
mkconfigfile /var/flash/debug.cfg 98
die Installation dann schon funktionieren wird.

Mit welchen "side-effects" muss ich rechnen?

Und dann würde mich noch Interessieren, wie TomTom FL zum Laufen bekommen hat.

(mkconfigfile legt nur mit mknod ein solches an, nachdem die Major-ID des TFFS ermittelt wurde)
Ist das hier ein Hinweis, dass ich evtl. mehr machen muss (Major-ID ermitteln)?

Nebenfrage:
Wenn ich die zu integrierenden Optionen von modfs ändern möchte, einfach nochmal ausführen oder muss ich da
erst ein "sauberes" Image flashen?
 
1.
Du kannst auch folgende Änderung (ungetestet) am FritzLoad-install-Skript vornehmen:
Code:
106	  	        filedbk=/var/tmp/backup_rc.custom
107	  	        freetz=1
=======
108	<!	    else
109	<!	        [ -c $filed ] || mkconfigfile $filed 98
=======
110	  	    fi
111	  	    # Datei existiert noch nicht?

2. Kein Hinweis, mkconfigfile ermittelt die "major ID" alleine.

3. "side effects" zu vermeiden war nur eine Vorsichtsmaßnahme aus den Kinderzeiten von modfs, als es noch viele Tools gab, die auf die "debug.cfg" zugegriffen haben und mit dem Fehlen der Datei (die wird von AVM eben bei NOR-Boxen nicht mehr angelegt in der rc.tail.sh) nicht klarkommen. Damit die den "Unterschied" verstehen, habe ich einen anderen (von TI schon viel früher benutzten) Namen wiederverwendet.

4. Lies #1 und/oder die Konsolenausgaben von modfs, dann erledigt sich die letzte Frage von alleine ... sie ist auch nur mit "sowohl als auch" oder "kommt ganz drauf an" zu beantworten.
 
Hi, ich habe die debug.cfg ganz einfach angelegt und starte so:

Code:
/var/media/ftp/WD-Elements1023-01/FritzLoad/bin/install.sh /var/media/ftp/WD-Elements1023-01/FritzLoad -g
 
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.