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

Ich denke mal das Problem liegt hier

./check_update: line 225: nc: not found


Schon mal nachgeschaut?
 
Von der 06.80 aus, wird die 06.83 nicht als neue Version von AVM gesehen. Daran kann auch "check_update" nichts ändern und der (nur beim direkten Aufruf auftretende) Fehler des fehlenden "nc"-Kommandos sollte bei der Verwendung aus "modfs" heraus keine Rolle spielen (da wird - mit ziemlichem Aufwand - eine andere BusyBox verwendet, damit alle notwendigen Kommandos auch da sind).

Wer also von der 06.80 auf die 06.83 will, muß vorher die Firmware von Hand von AVM laden ... ein "juis_check" (anderes Repository) mit "Version=113.06.60" als zusätzlichem Parameter sollte die notwendige URL für ein eigenes "wget" auch ausspucken, wenn man sich nicht durch den FTP-Server hangeln will.
 
Zuletzt bearbeitet:
Wenn ich hiermit teste, wird auf Basis einer 6.80-12345 die 6.83 nicht gefunden. Nimmt man als Basis 06.69-12345 wird die 6.83 gefunden. Da modfs ähnlich nach updates sucht, wird es wohl an den AVM-Servern liegen und/oder dem eingestellten Update-Verhalten der "befragten FB" ?

LG und ich bin kein Experte

P.S.: #1102 übersehen ohne Preview
 
Zuletzt bearbeitet:
@remoter3406: Bitte nimm doch die Serien-Nr aus dem SOAP-Envelop #1100 heraus:
Code:
5..........8
 
SIAB statisch gelinkt in custom image einbauen

Ich dachte, das hätte ich in meinem Freetz-Fork schon drin ... bzw. das hätte @er13 dann sogar schon übernommen aus dem Fork.

Ich schaue es mir bei Gelegenheit noch einmal an ... es sollte (theoretisch) aber auch jetzt schon möglich sein, mit der Freetz-Toolchain das statisch gelinkte "Shell-in-a-Box" inkl. Unterstützung für das AVM-Zertifikat zu erzeugen (das ist ja das mit "privatekeypassword"-Support) und dann einfach das Binary aus dem Build-Verzeichnis von Freetz in ein eigenes Image (z.B. im Rahmen von "copy_binaries") zu kopieren, wobei es ggf. noch irgendwo ein rc-Skript für den Start braucht, wenn man es nicht wie AVM als CGI aufrufen will (was auch Nachteile haben kann, wenn man z.B. den "ctlmgr" aus so einer Sitzung neu starten will, weil mit etwas Pech (ich weiß nicht genau, wie die "Vererbung" dort aussieht) das Beenden von "ctlmgr" den CGI-Prozess auch abräumt).

Wenn das gar nicht statisch gelinkt ist, braucht man halt noch die passenden Libs und muß im Start-Skript "LD_LIBRARY_PATH" entsprechend setzen ... wenn ich mir mein Skript aus "modfs-Starter" ansehe, ist es wohl eher nicht statisch gelinkt. Welche Libs das Programm bräuchte, kriegt man mit dem "ldd" aus der Freetz-Toolchain heraus.
Ich habe das ganze gestern einmal durchgespielt.
@er13 hat in der Tat Deine Sourcen schon übernommen und in Freetz eingepflegt. Man sollte auch genau wie Du es vorgeschlagen hat, die statisch gelinkte "Shell-in-a-Box" inkl. Unterstützung für das AVM-Zertifikat zu erzeugen, denn sonst muss man diverse Libs mit kopieren/integrieren, was insbesondere bei OpenSSL "etwas unschön" ist, denn Freetz bietet die nicht mehr unterstütze Version 0.9.8 und 1.0.2 wobei AVM selbst noch auf Version 1.0.0 setzt. Die OpenSSL Libs in der original Firmware passen dann als nicht zu shellinaboxd, so dass man mehrere Version der OpenSSL Libs bräuchte. Die statische Variante hat diese Problematik dann nicht, allerdings muss man bei neuen Bugs in OpenSSL sich wieder selbst um die Erstellung eines neuen Binaries kümmern und kann sich nicht auf AVM verlassen.

Ein rc.Skript zum starten (hattest Du mir hier schon mal erklärt, "Danke dafür") würde ich hier gerne anhängen, allerdings funktioniert bei meinem Firefox (wie bei zahlreichen anderen hier im Forum) die Funktion zum Anhängen einer Datei nicht. Ich bekomme immer nur ein leeres neues Fenster.

Ich poste den Inhalt der Datei E47-siab, die hinterher unter /etc/init.d/ liegen muss einfach inline:
Code:
#!/bin/sh
#
# start ShellInABox instance on Port 8010 only supporting TLS connections to establish a secure handling from LAN
#
/usr/bin/shellinaboxd --port=8010 --user=0 --group=0 --cert-from-box --background --pidfile=/var/run/shellinaboxd.pid --no-sni --disable-ssl-menu --service=/:0:0:/var/media/ftp:/sbin/ar7login

@PeterPawn
Mir ist übrigens aufgefallen, dass Du Deine Meinung hinsichtlich der Integration von SIAB in modfs schon einige mal "angepasst hast", so dass ich die Frage von xanderzone durchaus nachvollziehen kann. Wenn ich mich recht zurück erinnere wolltest Du initial nie irgendwelche Binaries in modfs integrieren. Da viele Nutzer aber immer auf das unsichere Telnet ausweichen hattest Du hier am 16.02.2016 mal geschrieben, dass Du Dich "nun (vermutlich endgültig) doch durchgerungen, [hast] ein "modscript" für die Integration von SIAB [...] "anzubieten"" :) Ein gutes Jahr später (19.02.2017) hast Du Dich dann hier wieder dagegen ausgesprochen ;)

Ich habe jetzt allerdings noch kein Script für modfs gebaut (das kann jemand machen, der sich schon mehr damit beschäftigt hat, der Code für das Starten steht da ja), sondern das statisch gelinkte Binary (und das rc-Skript) einfach über fwmod_custom aus der freetz toolchain in eine originale AVM FW integriert.


EDIT: Danke für den Hinweis von koyaanisqatsi, dass man eine Datei über "Grafik einfügen" statt "Anhänge" einfügen kann.

Anhang anzeigen E47-siab.sh.txt
 
Zuletzt bearbeitet:
Moins

"Bild einfügen" Button benutzen
Anhang anzeigen invade.sh.txt
Erlaubte Dateierweiterungen: 7z bmp bz2 doc gif gz jpe jpeg jpg pdf png psd swf tar tar.gz tgz txt xls zip
 
@KingTutt:
Bisher habe ich die Integration von (von mir erstellten) Binaries tatsächlich aber immer noch nicht vollzogen. Da, wo "modfs" Binärdateien enthält (in bin/$HWRevision), ist es immer noch dem "modfs"-Anwender überlassen, ob er "copy_binaries" mit einer entsprechenden Quelldatei (ist ja ein komprimiertes tar-File) verwenden will oder nicht. Ansonsten werden die von mir bereitgestellten Binärdateien m.W. bei keinem (von mir bereitgestellten) Skript dauerhaft in das erzeugte Image eingebaut.

Das ist eben der Punkt, der (für mich) den Unterschied macht ... es sind alles nur "kurzlebige" Anwendungsfälle. Ist dann so ein Programm erst einmal für den dauerhaften Einbau in ein Image "offiziell" bereitgestellt, übernimmt man eben auch eine gewisse Verantwortung, das beim Bekanntwerden von Problemen mit einer neuen Version zu ersetzen und das heißt dann in der Konsequenz, das bereitgestellte "modfs"-Archiv mit solchen Updates zu versehen.

Wenn man sich so anschaut, wieviele Benutzer aber immer noch sehr, sehr alte Binaries aus anderen Quellen verwenden (der "dropbear" geht da mit schlechtem Beispiel voran), dann existiert praktisch auch kein "Bewußtsein", daß hier Sicherheit (und "Selbermachen") deutlichen Vorrang vor "Bequemlichkeit" haben sollten und daß man so alte Software einfach nicht verwenden sollte, wenn der Autor nichts Neues bereitstellt.

Ich stelle sofort freiwillig ein Paket für die Verwendung von SIAB mittels E99-custom bereit, das ist nicht die Frage. Dabei kann man dann nämlich das gesamte "SIAB-Image" bei Problemen einfach abschalten und hat die Binärversionen irgendwelcher Dateien auch deutlich vom eigentlichen Firmware-Image getrennt ... das ist ja die Idee hinter "E99-custom". Unter der URL http://www.yourfritz.de/shellinaboxd_tmpfs.image kann man so ein Image gerne laden (Stand 04.04.2016) - das ist in etwa das gewesen, was ich mit dem von Dir zitierten "Breitschlagen" meinte.

Aber man sieht eben auch am Alter der dort enthaltenen Dateien, daß ich selbst für meine eigenen Boxen bei jedem bekanntwerdenden Problem im OpenSSL eine Bewertung treffe, ob ich den Austausch gegen eine gefixte Version für notwendig halte oder nicht. Das kann ich aber nur für mich selbst (und nicht für andere "modfs"-Anwender) entscheiden, genauso wie AVM so etwas eben nicht automatisch für alle Kunden entscheiden kann bzw. sollte. Ich habe am Ende allerdings bei mir nicht dieses "Einzelpaket" am Start, sondern ein größeres, das neben zusätzlichen Binärdateien auch die Services für SSH und ShellInABox bereitstellt:
Code:
 $ find /var/custom
/var/custom
/var/custom/bin
/var/custom/bin/avm_decoder
/var/custom/bin/bash
/var/custom/bin/decode_passwords
/var/custom/bin/decode_secrets
/var/custom/etc
/var/custom/etc/init.d
/var/custom/etc/init.d/rc.alive
/var/custom/etc/init.d/rc.dropbear
/var/custom/etc/init.d/rc.shellinaboxd
/var/custom/etc/init.d/rc.startup
/var/custom/etc/motd
/var/custom/etc/onlinechanged
/var/custom/etc/profile
/var/custom/lib
/var/custom/lib/ld-uClibc-0.9.33.2.so
/var/custom/lib/ld-uClibc.so.0
/var/custom/lib/libc.so.0
/var/custom/lib/libcrypt-0.9.33.2.so
/var/custom/lib/libcrypt.so.0
/var/custom/lib/libcrypto.so
/var/custom/lib/libcrypto.so.1.0.0
/var/custom/lib/libdl-0.9.33.2.so
/var/custom/lib/libdl.so.0
/var/custom/lib/libelf.so
/var/custom/lib/libelf.so.0
/var/custom/lib/libelf.so.0.8.13
/var/custom/lib/libexslt.so
/var/custom/lib/libexslt.so.0
/var/custom/lib/libexslt.so.0.8.17
/var/custom/lib/libform.so
/var/custom/lib/libform.so.5
/var/custom/lib/libform.so.5.9
/var/custom/lib/libgcc_s.so
/var/custom/lib/libgcc_s.so.1
/var/custom/lib/libgmp.so
/var/custom/lib/libgmp.so.10
/var/custom/lib/libgmp.so.10.3.0
/var/custom/lib/libhistory.so
/var/custom/lib/libhistory.so.6
/var/custom/lib/libhistory.so.6.3
/var/custom/lib/liblua.so
/var/custom/lib/liblua.so.5.1
/var/custom/lib/liblua.so.5.1.5
/var/custom/lib/liblzma.so
/var/custom/lib/liblzma.so.5
/var/custom/lib/liblzma.so.5.2.2
/var/custom/lib/liblzo2.so
/var/custom/lib/liblzo2.so.2
/var/custom/lib/liblzo2.so.2.0.0
/var/custom/lib/libm-0.9.33.2.so
/var/custom/lib/libm.so.0
/var/custom/lib/libmenu.so
/var/custom/lib/libmenu.so.5
/var/custom/lib/libmenu.so.5.9
/var/custom/lib/libmpc.so
/var/custom/lib/libmpc.so.3
/var/custom/lib/libmpc.so.3.0.0
/var/custom/lib/libmpfr.so
/var/custom/lib/libmpfr.so.4
/var/custom/lib/libmpfr.so.4.1.4
/var/custom/lib/libncurses.so
/var/custom/lib/libncurses.so.5
/var/custom/lib/libncurses.so.5.9
/var/custom/lib/libpanel.so
/var/custom/lib/libpanel.so.5
/var/custom/lib/libpanel.so.5.9
/var/custom/lib/libpcap.so
/var/custom/lib/libpcap.so.1.1
/var/custom/lib/libpcap.so.1.1.1
/var/custom/lib/libpopt.so
/var/custom/lib/libpopt.so.0
/var/custom/lib/libpopt.so.0.0.0
/var/custom/lib/libprivatekeypassword.so
/var/custom/lib/libpthread-0.9.33.2.so
/var/custom/lib/libpthread.so.0
/var/custom/lib/libreadline.so
/var/custom/lib/libreadline.so.6
/var/custom/lib/libreadline.so.6.3
/var/custom/lib/librt-0.9.33.2.so
/var/custom/lib/librt.so.0
/var/custom/lib/libsqlite3.so
/var/custom/lib/libsqlite3.so.0
/var/custom/lib/libsqlite3.so.0.8.6
/var/custom/lib/libssl.so
/var/custom/lib/libssl.so.1.0.0
/var/custom/lib/libthread_db-0.9.33.2.so
/var/custom/lib/libthread_db.so.1
/var/custom/lib/libuClibc-0.9.33.2.so
/var/custom/lib/libubacktrace-0.9.33.2.so
/var/custom/lib/libubacktrace.so.0
/var/custom/lib/libutil-0.9.33.2.so
/var/custom/lib/libutil.so.0
/var/custom/lib/libwrap.so
/var/custom/lib/libwrap.so.0
/var/custom/lib/libwrap.so.0.7.6
/var/custom/lib/libxml2.so
/var/custom/lib/libxml2.so.2
/var/custom/lib/libxml2.so.2.9.4
/var/custom/lib/libxslt.so
/var/custom/lib/libxslt.so.1
/var/custom/lib/libxslt.so.1.1.29
/var/custom/lib/libz.so
/var/custom/lib/libz.so.1
/var/custom/lib/libz.so.1.2.8
/var/custom/sbin
/var/custom/sbin/blkid-util-linux
/var/custom/usr
/var/custom/usr/bin
/var/custom/usr/bin/bmore
/var/custom/usr/bin/btmngr
/var/custom/usr/bin/bvi
/var/custom/usr/bin/check_signed_image
/var/custom/usr/bin/gdb
/var/custom/usr/bin/gdbserver
/var/custom/usr/bin/generate_signing_key
/var/custom/usr/bin/getsect
/var/custom/usr/bin/htop
/var/custom/usr/bin/iftop
/var/custom/usr/bin/image_signing_files.inc
/var/custom/usr/bin/lua
/var/custom/usr/bin/mc
/var/custom/usr/bin/mcdiff
/var/custom/usr/bin/mcedit
/var/custom/usr/bin/mcview
/var/custom/usr/bin/minicom
/var/custom/usr/bin/mksquashfs3
/var/custom/usr/bin/mksquashfs4
/var/custom/usr/bin/openssl
/var/custom/usr/bin/privatekeypassword
/var/custom/usr/bin/queries.lua
/var/custom/usr/bin/resetsigned
/var/custom/usr/bin/rsync
/var/custom/usr/bin/scp
/var/custom/usr/bin/set.lua
/var/custom/usr/bin/sfk
/var/custom/usr/bin/sftp-server
/var/custom/usr/bin/shellinaboxd
/var/custom/usr/bin/sign_image
/var/custom/usr/bin/socat
/var/custom/usr/bin/sqlite3
/var/custom/usr/bin/ssh
/var/custom/usr/bin/tbackup
/var/custom/usr/bin/tcat
/var/custom/usr/bin/tdel
/var/custom/usr/bin/tffs.files
/var/custom/usr/bin/tinstall
/var/custom/usr/bin/tlist
/var/custom/usr/bin/tvi
/var/custom/usr/bin/unique_id
/var/custom/usr/bin/unsquashfs
/var/custom/usr/bin/unsquashfs3
/var/custom/usr/bin/unsquashfs4
/var/custom/usr/bin/waitconnected
/var/custom/usr/bin/waittimeset
/var/custom/usr/bin/xsltproc
/var/custom/usr/bin/xz_comp
/var/custom/usr/sbin
/var/custom/usr/sbin/dnsmasq
/var/custom/usr/sbin/dropbear
/var/custom/usr/sbin/dropbearmulti
/var/custom/usr/sbin/e2fsck
/var/custom/usr/sbin/fsck.ext2
/var/custom/usr/sbin/fsck.ext3
/var/custom/usr/sbin/fsck.ext4
/var/custom/usr/sbin/ltrace
/var/custom/usr/sbin/mke2fs
/var/custom/usr/sbin/mkfs.ext2
/var/custom/usr/sbin/mkfs.ext3
/var/custom/usr/sbin/openvpn
/var/custom/usr/sbin/strace
/var/custom/usr/sbin/stunnel
/var/custom/usr/sbin/tcpdump
/var/custom/usr/share
/var/custom/usr/share/ltrace
/var/custom/usr/share/ltrace/libacl.so.conf
/var/custom/usr/share/ltrace/libc.so-types.conf
/var/custom/usr/share/ltrace/libc.so.conf
/var/custom/usr/share/ltrace/libm.so.conf
/var/custom/usr/share/ltrace/libpthread.so-types.conf
/var/custom/usr/share/ltrace/libpthread.so.conf
/var/custom/usr/share/ltrace/syscalls.conf
/var/custom/usr/share/mc
/var/custom/usr/share/mc/edit.indent.rc
/var/custom/usr/share/mc/filehighlight.ini
/var/custom/usr/share/mc/help
/var/custom/usr/share/mc/help/mc.hlp
/var/custom/usr/share/mc/hints
/var/custom/usr/share/mc/hints/mc.hint
/var/custom/usr/share/mc/mc.charsets
/var/custom/usr/share/mc/mc.default.keymap
/var/custom/usr/share/mc/mc.emacs.keymap
/var/custom/usr/share/mc/mc.ext
/var/custom/usr/share/mc/mc.keymap
/var/custom/usr/share/mc/mc.lib
/var/custom/usr/share/mc/mc.menu
/var/custom/usr/share/mc/mcedit.menu
/var/custom/usr/share/mc/sfs.ini
/var/custom/usr/share/mc/skins
/var/custom/usr/share/mc/skins/dark.ini
/var/custom/usr/share/mc/skins/darkfar.ini
/var/custom/usr/share/mc/skins/default.ini
/var/custom/usr/share/mc/skins/double-lines.ini
/var/custom/usr/share/mc/skins/featured.ini
/var/custom/usr/share/mc/skins/gotar.ini
/var/custom/usr/share/mc/skins/gray-green-purple256.ini
/var/custom/usr/share/mc/skins/gray-orange-blue256.ini
/var/custom/usr/share/mc/skins/mc46.ini
/var/custom/usr/share/mc/skins/modarcon16-defbg.ini
/var/custom/usr/share/mc/skins/modarcon16.ini
/var/custom/usr/share/mc/skins/modarcon16root-defbg.ini
/var/custom/usr/share/mc/skins/modarcon16root.ini
/var/custom/usr/share/mc/skins/modarin256-defbg.ini
/var/custom/usr/share/mc/skins/modarin256.ini
/var/custom/usr/share/mc/skins/modarin256root-defbg.ini
/var/custom/usr/share/mc/skins/modarin256root.ini
/var/custom/usr/share/mc/skins/nicedark.ini
/var/custom/usr/share/mc/skins/sand256.ini
/var/custom/usr/share/mc/skins/xoria256.ini
/var/custom/usr/share/mc/syntax
/var/custom/usr/share/mc/syntax/PKGBUILD.syntax
/var/custom/usr/share/mc/syntax/Syntax
/var/custom/usr/share/mc/syntax/ada95.syntax
/var/custom/usr/share/mc/syntax/as.syntax
/var/custom/usr/share/mc/syntax/aspx.syntax
/var/custom/usr/share/mc/syntax/assembler.syntax
/var/custom/usr/share/mc/syntax/awk.syntax
/var/custom/usr/share/mc/syntax/c.syntax
/var/custom/usr/share/mc/syntax/cabal.syntax
/var/custom/usr/share/mc/syntax/changelog.syntax
/var/custom/usr/share/mc/syntax/cmake.syntax
/var/custom/usr/share/mc/syntax/cs.syntax
/var/custom/usr/share/mc/syntax/css.syntax
/var/custom/usr/share/mc/syntax/cxx.syntax
/var/custom/usr/share/mc/syntax/cython.syntax
/var/custom/usr/share/mc/syntax/d.syntax
/var/custom/usr/share/mc/syntax/debian-changelog.syntax
/var/custom/usr/share/mc/syntax/debian-control.syntax
/var/custom/usr/share/mc/syntax/debian-description.syntax
/var/custom/usr/share/mc/syntax/debian-sources-list.syntax
/var/custom/usr/share/mc/syntax/diff.syntax
/var/custom/usr/share/mc/syntax/dlink.syntax
/var/custom/usr/share/mc/syntax/dos.syntax
/var/custom/usr/share/mc/syntax/ebuild.syntax
/var/custom/usr/share/mc/syntax/eiffel.syntax
/var/custom/usr/share/mc/syntax/erlang.syntax
/var/custom/usr/share/mc/syntax/f90.syntax
/var/custom/usr/share/mc/syntax/filehighlight.syntax
/var/custom/usr/share/mc/syntax/fortran.syntax
/var/custom/usr/share/mc/syntax/go.syntax
/var/custom/usr/share/mc/syntax/haskell.syntax
/var/custom/usr/share/mc/syntax/html.syntax
/var/custom/usr/share/mc/syntax/idl.syntax
/var/custom/usr/share/mc/syntax/ini.syntax
/var/custom/usr/share/mc/syntax/j.syntax
/var/custom/usr/share/mc/syntax/jal.syntax
/var/custom/usr/share/mc/syntax/java.syntax
/var/custom/usr/share/mc/syntax/js.syntax
/var/custom/usr/share/mc/syntax/latex.syntax
/var/custom/usr/share/mc/syntax/lisp.syntax
/var/custom/usr/share/mc/syntax/lkr.syntax
/var/custom/usr/share/mc/syntax/lsm.syntax
/var/custom/usr/share/mc/syntax/lua.syntax
/var/custom/usr/share/mc/syntax/m4.syntax
/var/custom/usr/share/mc/syntax/mail.syntax
/var/custom/usr/share/mc/syntax/makefile.syntax
/var/custom/usr/share/mc/syntax/ml.syntax
/var/custom/usr/share/mc/syntax/named.syntax
/var/custom/usr/share/mc/syntax/nemerle.syntax
/var/custom/usr/share/mc/syntax/nroff.syntax
/var/custom/usr/share/mc/syntax/octave.syntax
/var/custom/usr/share/mc/syntax/pascal.syntax
/var/custom/usr/share/mc/syntax/perl.syntax
/var/custom/usr/share/mc/syntax/php.syntax
/var/custom/usr/share/mc/syntax/po.syntax
/var/custom/usr/share/mc/syntax/povray.syntax
/var/custom/usr/share/mc/syntax/procmail.syntax
/var/custom/usr/share/mc/syntax/properties.syntax
/var/custom/usr/share/mc/syntax/puppet.syntax
/var/custom/usr/share/mc/syntax/python.syntax
/var/custom/usr/share/mc/syntax/ruby.syntax
/var/custom/usr/share/mc/syntax/sh.syntax
/var/custom/usr/share/mc/syntax/slang.syntax
/var/custom/usr/share/mc/syntax/smalltalk.syntax
/var/custom/usr/share/mc/syntax/spec.syntax
/var/custom/usr/share/mc/syntax/sql.syntax
/var/custom/usr/share/mc/syntax/strace.syntax
/var/custom/usr/share/mc/syntax/swig.syntax
/var/custom/usr/share/mc/syntax/syntax.syntax
/var/custom/usr/share/mc/syntax/tcl.syntax
/var/custom/usr/share/mc/syntax/texinfo.syntax
/var/custom/usr/share/mc/syntax/tt.syntax
/var/custom/usr/share/mc/syntax/unknown.syntax
/var/custom/usr/share/mc/syntax/verilog.syntax
/var/custom/usr/share/mc/syntax/vhdl.syntax
/var/custom/usr/share/mc/syntax/xml.syntax
/var/custom/usr/share/mc/syntax/yum-repo.syntax
/var/custom/usr/share/mc/syntax/yxx.syntax
/var/custom/usr/share/tabset
/var/custom/usr/share/tabset/std
/var/custom/usr/share/terminfo
/var/custom/usr/share/terminfo/a
/var/custom/usr/share/terminfo/a/ansi
/var/custom/usr/share/terminfo/k
/var/custom/usr/share/terminfo/k/konsole
/var/custom/usr/share/terminfo/l
/var/custom/usr/share/terminfo/l/linux
/var/custom/usr/share/terminfo/p
/var/custom/usr/share/terminfo/p/putty
/var/custom/usr/share/terminfo/r
/var/custom/usr/share/terminfo/r/rxvt
/var/custom/usr/share/terminfo/s
/var/custom/usr/share/terminfo/s/screen
/var/custom/usr/share/terminfo/v
/var/custom/usr/share/terminfo/v/vt220
/var/custom/usr/share/terminfo/x
/var/custom/usr/share/terminfo/x/xterm
/var/custom/usr/share/terminfo/x/xterm-256color
/var/custom/usr/share/terminfo/x/xterm-color
/var/custom/usr/share/terminfo/x/xterm-xfree86
Bisher tue ich mich außerdem (neben dem "Update-Aspekt") noch etwas schwer, solche Pakete "offiziell" zur Verfügung zu stellen ... es gibt zwar inzwischen die Möglichkeit, so etwas auch zu signieren (dann muß man es aber noch einmal anders "verpacken", als es E99-custom im Moment kennt), aber die ist noch nicht bis zum Ende umgesetzt (für die "Installation" solcher Pakete sollte mal die in "signimage" ebenfalls eingebaute Möglichkeit, so ein Paket direkt für eine einzelne Box zu signieren, nachdem man die Signatur vom Autoren geprüft hatte, herhalten).

Damit kann aber wieder ein Angreifer solche Erweiterungen relativ einfach bereitstellen (ggf. durch einfaches Kopieren in die NAS-Wurzel und da war eben AVM-Firmware bis 06.80 noch extrem anfällig) und im Endeffekt macht das dann die FRITZ!Box sogar wieder unsicherer. Die Feststellung, daß der Besitzer es ja so wollte (und es nicht automatisch alle Boxen betrifft, wie bei einem Problem in AVM-Firmware), kann da nur ein schwacher Trost sein - es ist eben blöd, Wasser zu predigen und Wein zu saufen ... auch wenn es um die Sicherheit von Funktionen und Erweiterungen geht. Bei anderen den Finger in eine Wunde hinsichtlich der Sicherheit zu legen und dann selbst unüberlegt neue Lücken aufzureißen (solange das auch andere benutzen, um sich selbst in den Fuß zu schießen), paßt eben nicht so ganz zusammen.
 
Zuletzt bearbeitet:
Ich will ja nicht nerven, nur mal als Rückmeldung:

Auf einer FB7272.06.83 sieht der Neustart so aus:
Neustart von 06.83-06.50.PNGNeustart von 06.83-06.50inakt.PNG
und hier die gewünschte Datei dazu:Anhang anzeigen Neustart7272.06.83_v0.3.txt

In der anderen Partition mit FB7272.06.50 ist alles OK.
Ist aber mit einem älteren modfs erstellt worden.
 
@eisbaerin:
Mach mal ein "ls -la /sys/block/loop0/loop" und ein "cat /sys/block/loop0/loop/backing_file". Es sieht so aus, als fände er die Image-Datei nicht, die als Wurzelverzeichnis gemountet wurde ... das sollte eigentlich bei "komplettem Inhalt" des SysFS nicht passieren.

Man kann das natürlich auch noch "abfangen", indem man das (derzeit eingebettete) "get_image_name" gesondert ausführt und das Ergebnis auf Fehler prüft - aber diese Situation hatte ich auch noch nicht und so plagt mich die Frage, was/warum AVM da geändert haben mag. Wenn das wirklich so ist, würde ich das auch wieder bei allen VR9-Modellen erwarten - allerdings habe ich die 06.83 bei der 7490 noch nicht mit "modfs" getestet (also nach der Modifikation, nicht die Frage, ob "modfs" selbst dort läuft).

Ist jedenfalls komisch ... ich würde halt gerne das Datum der Image-Datei ermitteln und anzeigen. Wird eigentlich nicht gebraucht (die Umschaltung sollte trotzdem funktionieren), aber der fehlschlagende "stat"-Aufruf krankt am Ende daran, daß da der Name der Datei fehlt und das ergibt diese unschöne Fehlermeldung im Text der Seite. Die ist zwar auch problemlos zu unterdrücken, aber das habe ich absichtlich nicht gemacht (da, wo kein Fehler zu erwarten war), weil man so bei wirklichen Problemen eher sehen kann, was da wohl passiert.
 
Da ist nix:
7272:$(pwd)# ls -la /sys/block/loop0/loop
ls: /sys/block/loop0/loop: No such file or directory
7272:$(pwd)# cat /sys/block/loop0/loop/backing_file
cat: can't open '/sys/block/loop0/loop/backing_file': No such file or directory

Ich muß noch dazu sagen, daß ich das modfs immer auf der FB7490 mache und dann mit install_inactive_rootfs in die FB7272 einspiele. Vorher natürlich ein normales Update in diese Partition, damit der Kernel auch dazu paßt.

Da die Datei dazu bei der FB7272 sehr groß ist und einmal nicht nach /var/media/ftp paßte, habe ich noch 2 andere Varianten ausprobiert:

aus /var/tmp
und aus einem angesteckten Stick mit FAT32 (das sollte aber hier kein Problem sein), oder doch?

Alle 3 Varianten hatten das gleiche Bild.

BTW: Die Box zeigt an einigen Stellen komisches Verhalten:

- sie wirft mich aus einer Putty Sitzung raus, ohne Grund, und läßt erst mal keine neue zu, nach 1-2 Stunden geht es dann wieder
- ich wollte gerade eine 2. Putty Sitzung aufbauen, da kommt:
Using username "root".
Server refused our key
(Ich mach das mit rsa key)

- und dann noch die Zeile in der environment und /var/env:
crash [0]3918784f,58caedde,3[1]0,0,0[2]0,0,0[3]0,0,0
die kommt mit unterschiedlichsten Zahlen vor, also wird sie immer mal wieder überschrieben.
Und das auch sofort nach einem recover!
qwertz.asdfgh hat auch in 2 FB7272 geschaut, genau das selbe.
IMO gibt es keine FB7272 ohne diesen Eintrag.
Bei einer "originalen" auch in der Supportdatei zu sehen.
Und war auch schon so mit der FW120.06.50 ohne modfs.
 
Zuletzt bearbeitet:
Dann muß ich erst einmal in einer laufenden anderen Version der 06.83 nachsehen (den Inhalt des SysFS sieht man leider nur, wenn das System auch arbeitet und nicht "von außen"), was AVM da gemacht hat. Beim älteren Kernel (Du hast ja selbst geschrieben, daß es von der 06.50 aus funktioniert), gab es die Daten jedenfalls wohl auch bei der 7272. Da stelle ich mir jetzt die Frage, ob AVM das auch bei anderen 06.83-Versionen geändert hat. Ich hätte gerne einen ungefähren Überblick, bevor ich mich an Änderungen mache.
 
#1111, du darfst einen ausgeben! :bier:

Da stelle ich mir jetzt die Frage, ob AVM das auch bei anderen 06.83-Versionen geändert hat.
Also die FB7490 und FB7362SL gehen ordenlich, und bei der FB7412 hatten wir das andere Problem, aber die Anzeige klappte.
 
Ich schaffe nachher mal eine 06.83 auf die 7490 - nur zum Testen. Ich bin immer noch nicht an allen Punkten bei der 06.80 durch (gerade was die zusätzliche Sicherung über 2FA angeht) und da kommt dann die nächste Version. Ich habe ja kein Problem damit, wenn Sicherheitslücken mit Updates geschlossen werden ... aber das ständige Gesuche, was AVM da noch geändert und nicht passend dokumentiert hat, geht mir auf die Nerven (um das mal freundlich zu formulieren).

Wie auch immer ... ich ändere das bei der nächsten Gelegenheit im Bootmanager-Skript, damit da dieser Fall auch noch abgefangen wird, auch wenn der ggf. nur für die 7272 gilt. Kann mal bitte jemand bei AVM nach den OSS-Paketen für dieses Modell fragen ... ich finde es schon sehr interessant, welche Einstellung beim Kernel-Compilieren da wohl geändert wurde, denn das Mounten des Root-Dateisystems erfolgt ja sicherlich immer noch über ein Loop-Device, weil es ein SquashFS-Image ist und da ist es schon komisch, wenn das nicht im SysFS verzeichnet wird.
 
Ich habe ein Update meiner 7490 mit "./modfs update" auf OS6.83 gemacht. Funktionierte wunderbar!
SIAB habe ich manuell installiert und telnet mit Telefon ausgeschaltet.

Gruß
XC
 
Ich habe auch ein erfolgreiches update auf 6.83 gemacht.
Ein kleines Problemchen habe ich allerdings. Offensichtlich werden seit neuestem die externen Speicher mit -noexec eingebunden.
Dadurch lässt sich nichts von den Geräten ausführen.
Lässt sich diese Option in die nächste Version des modfs auch übernehmen?

Als Krücke dient mir zur Zeit:
echo clear_id 87 > /proc/tffs
mount -o remount,exec /dev/sda1 /var/media/ftp/USBSTICK

in der rcuser.
 
Ich habe mal ein neues "modscript" für den Boot-Manager eingecheckt (und auch das "modfs.tgz"-File entsprechend aktualisiert) - dabei den Namen auf "gui_boot_manager_v0.4" geändert.

Wer also mit einer alten "custom_modscripts"-Datei arbeitet, muß da ggf. Hand anlegen, wenn er die neue Datei ein- oder ausschließen will. Da die neue Version einiges anders macht als die vorhergehende und ich nicht alle möglichen Zweige selbst testen konnte, weil ich nicht alle unterstützten Modelle besitze, bleibt die v0.3 erst einmal noch dabei ... aber ich wäre natürlich daran interessiert, für die v0.4 auch Feedback zu kriegen und daß die beiden Versionen nur alternativ verwendet werden dürfen, ist sicherlich auch klar.

Die Änderungen grob beschrieben:
  • getestet auf 7580, sollte auf 7560 auch funktionieren - hier gibt es den yaffs2-Wrapper ja nicht, damit muß man das alternative System anders mounten für die Tests
  • anstatt jetzt bei einem Mount-Versuch zu scheitern, wenn in den alternativen Partitionen gar kein System installiert ist, wird zuerst versucht festzustellen, ob in den ersten 16 Byte der fraglichen Kernel-Partition irgendwelche Daten stehen; dabei werden Bytes aus ausschließlich 0- bzw. 1-Bits (also 0x00 bzw. 0xFF) als gelöschter Flash-Speicher angesehen
  • tritt so ein Fall eines "missing kernel" ein, ist die Umschaltung auf die alternativen Partitionen im GUI nicht möglich (der Radio-Button wird deaktiviert)
  • ich habe versucht, die Erkennung des Datums der letzten Änderung für ein System zu verbessern
  • der Fall der 7412 mit dem fehlenden "blkid"-Kommando (das gilt vermutlich für alle Modelle ohne NAS) sollte jetzt auch funktionieren - bei fehlendem "blkid" und vorhandenem "/wrapper"-Verzeichnis wird zuerst "yaffs2" als Dateisystem angenommen und nicht mehr "squashfs"

@eisbaerin:
Diese Version sollte die Probleme mit beiden Boxen bei Dir ausräumen ... wenn nicht, muß ich nachbessern (dann brauche ich wieder die Ausgabe von "sh -x guibootmanager html_display", um da etwas zu sehen).


-@Fireball3:
Du müßtest "/etc/hotplug/udev-mount-sd" anfassen und dort die "noexec"-Optionen entfernen (für jeden FS-Typ gibt es getrennte Mount-Kommandos). Generell möchte ich das nicht "anbieten", ich bin ja froh, daß AVM dieses endlich eingebaut hat und ich hoffe sogar im Gegenteil, daß AVM es auch für den internen NAS-Flash genauso noch nachzieht (dort kann man mit dem FTP-Service auch "x"-Flags setzen) wie für den WebDAV-Speicher (wo ebenfalls der volle Umfang der Flags emuliert wird).

Nach meiner Meinung sollte man das auch nicht für alle Volumes wieder entfernen ... wenn schon, dann max. selektiv für ein bestimmtes bzw. ich plädiere an dieser Stelle eher dafür, daß man solche Volumes mit einem signierten "Image-File" als einer Art "Autostart-Skript" versieht und dann in diesem Skript entsprechende Vorsichtsmaßnahmen trifft, daß da keine unerwünschten Programme auf dem Volume sind bzw. von dort aufgerufen werden.

So etwas kann man sogar mit minimalem Aufwand beim Ändern erreichen, indem man in der bereits erwähnten Datei "/etc/hotplug/udev-mount-sd" die Zeile "TR069START=/bin/tr069starter" gegen eine austauscht, wo man ein eigenes Shell-Skript eingetragen hat. Dieses Skript wird dann für jedes neu gemountete Volume aufgerufen (den Aufruf von "tr069starter" sollte man ohnehin entfernen, aber aus anderen Gründen) und kriegt als Parameter den Mount-Namen (das ist der Pfad ohne das Basisverzeichnis) übergeben. Dort kann man dann einfach mit fünf Zeilen in einem Skript (eine würde auch reichen ;-)):
Code:
#! /bin/sh
autoscript=yf_autorun.image
basedir=/var/media/ftp
[ -f $basedir/$1/$autoscript ] || exit
tr069fwupdate packet file://$basedir/$1/$autoscript
dafür sorgen, daß ein vorhandenes, "ordentlich signiertes" Archiv mit dem Namen "yf_autorun.image" (der natürlich auch angepaßt werden kann, wenn man will) von einer AVM-Komponente geprüft und ausgepackt wird - sogar die dort enthaltene "./var/install"-Datei wird von "tr069fwupdate" aufgerufen. Damit bringt man einfach dort seine gewünschten Kommandos unter - das kann notfalls sogar das "remount" für ein ganzes Volume sein, wenn man es wirklich so haben will.

Man muß nur berücksichtigen, daß (abweichend von den alten "Pseudo-Images") die Daten nicht in "/var" entpackt wurden (also relativ zum Wurzelverzeichnis), sondern in "/var/packet/var". Solange man aber mit relativen Pfaden arbeitet, kann das einem auch egal sein - das ist i.d.R. ohnehin der bessere Weg.

Gegebenenfalls muß man noch ein paar Vorsichtsmaßnahmen treffen, wenn man mehrere Volumes mit solchen Images hat und wenn man das ebenfalls sauber behandeln will ... ein zweiter paralleler Aufruf von "tr069fwupdate" würde zum Chaos führen, da es nur ein einziges Verzeichnis "/var/packet" zu jedem beliebigen Zeitpunkt geben kann. Aber theoretisch sichert das (zur Zeit jedenfalls) bereits AVM beim Mounten ab, daß da alles schön der Reihe nach funktioniert. Je nachdem, was man in der eigenen "install"-Datei so veranstalten will, muß man ggf. noch die Stelle für den Aufruf in der "udev-mount-sd" anpassen ... das (ehemalige) "tr069starter" liegt zwischen FTP- und Samba-Service bei der Konfiguration und auch vor allen Aktionen bzgl. Telefonie-Dateien (AB-Nachrichten, Faxe) und Mediaserver bzw. NAS-Funktionen (z.B. Index einbinden).

Um so eine Image-Datei sauber zu signieren, muß man natürlich zuvor den passenden öffentlichen Schlüssel (den eigenen oder den einer vertrauenswürdigen dritten Instanz, von der man solche "Pakete" akzeptieren will) in die Firmware einbauen lassen (es gehen auch mehrere, nach derzeitigem Stand sind sechs zusätzliche Schlüssel möglich, während AVM selbst 3-4 hinterlegt), das geht wieder mit "copy_binaries" absolut easy.

Damit hat man dann die Prüfung der Gültigkeit der Daten und Programme auf so einem USB-Stick schon mal auf den Stick selbst ausgelagert (die "./var/install" im dortigen Autorun-Image ist jetzt dafür verantwortlich) und hat bis zu diesem Punkt noch nicht eine einzige zusätzliche Sicherheitslücke eingebaut. Solange man zusätzliche Programme gleich mit in das signierte Archiv packt (und damit die Signatur auch diese validiert), ist das schon alles, was man machen muß - für Programme, die aus dem "tmpfs" laufen können, weil der vorhandene Hauptspeicher dafür ausreicht, ist das mehr als genug (man sollte sie nur an eine andere Stelle als "/var/unpack" verschieben).

Will man wirklich zusätzliche Programme vom USB-Volume direkt ausführen, muß man eben deren SHA256-Summen in einer Datei abspeichern und diese Datei mit in das Image-File aufnehmen (wo sie wieder von der Signatur geschützt wird). Dann kann man beim Mounten (eben wieder in der ./var/install) die SHA256-Summen prüfen lassen (das geht ja mit "sha256sum -c" recht elegant, auch wenn das m.W. bei AVM nicht direkt dabei ist - selbst die BusyBox mit diesem Applet kann man ja aber mit in das signierte Image packen). Dann kann man zumindest sicher sein, daß kein Unbefugter die Dateien auf dem Stick ausgetauscht hat oder einfach ein "allgemeines" Image von einem anderen Stick auf einen eigenen kopiert hat - das ist immer noch relativ sicher, auch gegen "Angriffe" mit einem eigenen USB-Stick durch Angestellte oder Familienmitglieder mit physikalischem Zugang zu so einer FRITZ!Box.

Dieser simple "autorun"-Mechanismus ist auch leicht in ein "modscript" verpackt (werde ich auch spätestens in der nächsten "modfs"-Version mal machen (das wird eine 0.5.0), so etwas gibt es bei mir schon länger) - es braucht halt dann etwas "Infrastruktur" (angefangen bei einem privaten Schlüssel), um die Volumes passend zu präparieren und ohne die rechtzeitige Aufnahme der öffentlichen Schlüssel nutzt das auch alles nichts. Aber das weiß man ja vorher ... und der Gewinn an Sicherheit (ggü. Freetz mit "autorun.sh") und Flexibilität (ggü. Freetz ohne "autorun.sh" und ggü. der AVM-Firmware) ist es wert (zumindest mir).

- - - Aktualisiert - - -

Ach so ... noch etwas zur 7580/7560 und dem "Boot-Manager": Auch der kann natürlich nichts daran ändern, daß das Branding aus dem "device-tree" (und damit dem finalisierten Bootloader) die Angabe in "/proc/sys/urlader/environment" überlagert. Es sieht jedenfalls so aus, daß eine Änderung von "firmware_version" zwar ins TFFS geschrieben wird, diese aber beim nächsten Start wieder mit der Angabe aus dem OF-FDT überstimmt wird.

Da ich noch keine Möglichkeit kenne, das voraussichtliche Verhalten des Bootloaders an dieser Stelle "vorherzusagen", habe ich die Änderung des Brandings auch bei der 7580/7560 nicht deaktiviert (die könnte man z.Zt. ja noch anhand des Prozessors eindeutig identifizieren) ... aber der Boot-Manager kann da natürlich auch nichts machen und so bleiben entsprechende Einstellungen für den nächsten Start dann auch wirkungslos.

Für das "Debranden" einer solchen 1&1-Box (derzeit nur für die 7580/7560 bekannt als Problem, so weit ich das verfolgt habe) bleibt damit nur noch der Weg, das direkt in der "/etc/init.d/rc.conf" passend zu regeln und dort den Wert für "OEM" einfach noch einmal fix auf AVM zu setzen, nachdem die Daten aus dem Environment gelesen wurden und auch den neuen Wert einfach noch einmal zu schreiben, damit spätere Leseversuche von dieser Stelle dann wieder das erwartete Ergebnis erbringen. Die Alternative ist es, da direkt am Beginn in der S01-head mit zu verankern, daß ein gewünschter Wert den "festen" bei jedem Start ersetzt. Bleibt dann die Frage, woher dieser gewünschte Wert kommen soll, wenn man das dynamisch machen will (weil man irgendwann mal eine deutsche und eine internationale Version gleichzeitig installiert haben will - um nur mal ein denkbares Beispiel zu nennen) - ansonsten kann man das natürlich auch wieder fest verdrahten.
 
Ich habe mal ein neues "modscript" für den Boot-Manager eingecheckt (und auch das "modfs.tgz"-File entsprechend aktualisiert) - dabei den Namen auf "gui_boot_manager_v0.4" geändert.
ich habe gerade das modfs.tgz per URL aus #1 downgeloaded; "wget http://yourfritz.de/modfs.tgz"; jedoch fehlt bei mir "gui_boot_manager_v0.4"; hat das jemand anders auch ?
 
ich wäre natürlich daran interessiert, für die v0.4 auch Feedback zu kriegen

@PeterPawn:
mir ist Line 683 aufgefallen, die sieht "redundant" aus.
https://github.com/PeterPawn/modfs/blob/master/modscripts/gui_boot_manager_v0.4#L683

Code:
cat gui_boot_manager_v0.4
##############################################################################
#                                                                            #
# check parameters and call requested function                               #
#                                                                            #
##############################################################################
case $1 in
        (html_display)
                spinlock_pid=$$
                html_display
                rc=$?
                ;;
        (switch_to)
                switch_system_to $2 $3
                rc=$?
                ;;
esac
exit $rc
[COLOR=#dda0dd]exit $rc
[/COLOR]ENDOFSCRIPT
        chown root:root "$cmdfile"
        chmod 755 "$cmdfile"
}
 
@Shirocco88:
Möglicherweise ein falscher Symlink, der immer noch auf die 0.4.1 zeigte. Sollte jetzt behoben sein - die neue Versionsnummer ist 0.4.4, da ich die dazwischen liegenden Nummern schon für noch nicht veröffentlichte Änderungen verwendet habe, die erst in die 0.5.0 einfließen werden.

@Pokemon20021:
Korrekt, danke. Da das Skript ja "as is" getestet und editiert wird, ist da wohl beim Einfügen des fertigen Skripts in die "modscript"-Datei eine Zeile zuviel aus der vorhergehenden Version verblieben. Auch das ist korrigiert, wir wollen ja keinen Platz verschwenden. :)

Hier noch ein "diff" zwischen v0.3 und v0.4, falls jemand beim "Nachlesen" nicht alles von vorne durchsehen will:
Code:
--- modscripts/gui_boot_manager_v0.3   
+++ modscripts/gui_boot_manager_v0.4  
@@ -1,8 +1,8 @@
 # MODFS_MODSCRIPT
 # SUPPORTS precheck postcheck install language(en,de)
-# NAME enable system and branding selection from GUI \(v0.3\)
+# NAME enable system and branding selection from GUI \(v0.4\)
 # DESCRIPTION en
-# extent the "restart" page of FRITZ!OS to select system version and branding
+# extend the "reboot" page of FRITZ!OS to select system version and branding
 # DESCRIPTION de
 # Auswahl des zu startenden Systems und des Brandings in der "Neustart"-Seite
 # EOH
@@ -44,7 +44,7 @@
 # GUI Boot Manager extension for AVM's FRITZ!Box routers with "hot flash"    #
 # capabilities                                                               #
 #                                                                            #
-# Copyright (C) 2014-2016 P.Haemmerlein (http://www.yourfritz.de)            #
+# Copyright (C) 2014-2017 P.Haemmerlein (http://www.yourfritz.de)            #
 #                                                                            #
 # This program is free software; you can redistribute it and/or              #
 # modify it under the terms of the GNU General Public License                #
@@ -94,6 +94,9 @@
 #                                                                            #
 ##############################################################################
 . /etc/puma6_helper.sh
+is_puma6 && puma6=1 || puma6=0
+[ $puma6 -eq 0 ] && blkdev=$mtdblockprefix || blkdev=$mmcprefix
+[ $puma6 -eq 0 ] && dev=$mtdprefix || dev=$mmcprefix
 ##############################################################################
 #                                                                            #
 # subfunctions                                                               #
@@ -135,6 +138,25 @@
 )
 ##############################################################################
 #                                                                            #
+# check the first 16 byte of the specified partition, if they're all 0xFF,   #
+# there's usually no kernel (and no alternative system) installed            #
+# $1 - kernel (block) device to check                                        #
+#                                                                            #
+##############################################################################
+is_kernel_present()
+(
+       read_bytes()
+       {
+               while read line left right; do
+                       [ $left -ne 377 -a $left -ne 0 ] && return 0
+               done
+               return 1
+       }
+       dd if=$blkdev$1 bs=16 count=1 2>/dev/null | cmp -l - /dev/zero 2>/dev/null | read_bytes
+       return $?
+)
+##############################################################################
+#                                                                            #
 # get next system index from environment                                     #
 #                                                                            #
 ##############################################################################
@@ -150,7 +172,7 @@
 ##############################################################################
 get_partition_by_name()
 (
-       if is_puma6; then
+       if [ $puma6 -eq 1 ]; then
                name="$1${2:+_}${2}_ARM"
                sed -n -e "s|^${name}=$mmcprefix\([0-9]\{1,2\}\)\$|\1|p" $pumaparts
        else
@@ -166,7 +188,7 @@
 ##############################################################################
 get_partition_by_number()
 (
-       if is_puma6; then
+       if [ $puma6 -eq 1 ]; then
                sed -e "/_SIZE=/d" -e "s|_|-|g" $pumaparts | sed -n -e "s|^\([a-z]*\)\(-$reservedprefix\)\?-ARM=$mmcprefix$1|\1\2|p" | sed -e "s|\(.*\)-\(.*\)|\2-\1|"
        else
                sed -n -e "s|$mtdprefix$1: [0-9a-f]\{8\} [0-9a-f]\{8\} \"\(.*\)\"|\1|p" $procmtd
@@ -276,18 +298,20 @@
 (
        # CGI calls have only /bin:/usr/bin in the search PATH, the old value is
        # not important, changing the PATH should be local to this function and
-       # it's childs, even if it's "export"ed here
+       # its children, even if it's "export"ed here
        export PATH=/sbin:/usr/sbin:/bin:/usr/bin
        mkdir -p $2/$altfs 2>/dev/null || return 1
-       if is_puma6; then
-               mount -t squashfs -o ro $mmcprefix$1 $2/$altfs 2>/dev/null || return 1
+       if [ $puma6 -eq 1 ]; then
+               mount -t squashfs -o ro $blkdev$1 $2/$altfs 2>/dev/null || return 1
                printf '%s/%s' $2 $altfs
        else
                blkid=$(command -v blkid 2>/dev/null)
-               [ -z $blkid ] && fstype=squashfs
-               [ -z $fstype ] && fstype=$(blkid $mtdblockprefix$1 | sed -n -e 's|.*TYPE="\?\([^"]*\)"\?|\1|p')
+               if [ -z $blkid ]; then
+                       [ -d /wrapper ] && fstype=yaffs2 || fstype=squashfs
+               fi
+               [ -z $fstype ] && fstype=$(blkid $blkdev$1 | sed -n -e 's|.*TYPE="\?\([^"]*\)"\?|\1|p')
                [ -z $fstype ] && fstype=yaffs2
-               mount -t $fstype -o ro $mtdblockprefix$1 $2/$altfs 2>/dev/null || return 1
+               mount -t $fstype -o ro $blkdev$1 $2/$altfs 2>/dev/null || return 1
                ! [ $fstype = yaffs2 ] && printf '%s/%s' $2 $altfs && return 0
                mkdir -p $2/$altroot 2>/dev/null || return 1
                mount -t squashfs -o ro $2/$altfs/$rootfsimage $2/$altroot 2>/dev/null || return 1
@@ -305,7 +329,7 @@
 (
        umount $1 2>/dev/null || return 1
        rmdir $1 2>/dev/null
-       is_puma6 && return 0
+       [ $puma6 -eq 1 ] && return 0
        mp=$(sed -n -e "s|[^ ]* \(${1%/*}/[^ ]*\) .*|\1|p" /proc/mounts)
        [ -z $mp ] && return 0
        umount $mp 2>/dev/null || return 1
@@ -332,6 +356,7 @@
 get_loop_device_file()
 (
        [ -d /sys/block/loop$1/loop ] || return 1
+       [ -f /sys/block/loop$1/loop/backing_file ] || return 1
        cat /sys/block/loop$1/loop/backing_file
 )
 ##############################################################################
@@ -451,33 +476,51 @@
                        || printf '<h4>Switching between alternative systems is not supported on this device.</h4>\n'
                return 1
        else
-               spinlock get 10 && mp=$(mount_alternative_system $alternative_filesystem $tempdir)
-               if [ -z $mp ]; then
+               is_kernel_present $alternative_kernel
+               if [ $? -eq 1 ]; then
+                       alternative_is_missing=1
                        alternative_version="unknown"
                        alternative_date="unknown"
                        alternative_fsdate="unknown"
                        alternative_brandings="$current_branding"
+                       running_checked=1
                else
-                       alternative_version=$(get_system_version $mp)
-                       alternative_date=$(get_system_date $mp)
-                       [ -d $wrapper ] \
-                               && alternative_fsdate=$(stat -c %Y $(get_image_name $mp) 2>/dev/null) \
-                               || alternative_fsdate=$(stat -c %Y $mp$statfile 2>/dev/null)
-                       alternative_brandings="$current_branding"
-                       if [ -z $alternative_fsdate ]; then
+                       alternative_is_missing=0
+                       spinlock get 10 && mp=$(mount_alternative_system $alternative_filesystem $tempdir)
+                       if [ -z $mp ]; then
+                               alternative_version="unknown"
+                               alternative_date="unknown"
                                alternative_fsdate="unknown"
+                               alternative_brandings="$current_branding"
                        else
-                               alternative_fsdate="$(date -d @$alternative_fsdate +'%d.%m.%y %H:%M')"
-                               alternative_brandings="$(get_brandings $mp)"
+                               alternative_version="$(get_system_version $mp)"
+                               alternative_date="$(get_system_date $mp)"
+                               if [ -d $wrapper ]; then
+                                       image="$(get_image_name $mp)"
+                                       [ $? -eq 0 ] && alternative_fsdate="$(stat -c %Y $image 2>/dev/null)"
+                               else
+                                       alternative_fsdate="$(stat -c %Y $mp$statfile 2>/dev/null)"
+                               fi
+                               alternative_brandings="$current_branding"
+                               if [ -z "$alternative_fsdate" ]; then
+                                       alternative_fsdate="unknown"
+                               else
+                                       alternative_fsdate="$(date -d @$alternative_fsdate +'%d.%m.%Y %H:%M:%S')"
+                                       alternative_brandings="$(get_brandings $mp)"
+                               fi
+                               dismount_alternative_system $mp
                        fi
-                       dismount_alternative_system $mp
+                       spinlock release
+               fi
+               running_version="$(get_system_version)"
+               running_date="$(get_system_date)"
+               if [ -d $wrapper ]; then
+                       image="$(get_image_name /)"
+                       [ $? -eq 0 ] && running_fsdate="$(date -d @$(stat -c %Y $image 2>/dev/null) +'%d.%m.%Y %H:%M:%S')"
+               else
+                       [ -f $statfile ] && running_fsdate="$(date -d @$(stat -c %Y $statfile 2>/dev/null) +'%d.%m.%Y %H:%M:%S')"
                fi
-               spinlock release
-               running_version=$(get_system_version)
-               running_date=$(get_system_date)
-               [ -d $wrapper ] \
-                       && running_fsdate="$(date -d @$(stat -c %Y $(get_image_name /)) +"%d.%m.%y %H:%M")" \
-                       || running_fsdate="$(date -d @$(stat -c %Y $statfile) +"%d.%m.%y %H:%M")"
+               [ -z "$running_fsdate" ] && [ -f /$versionfilename ] && running_fsdate="$(date -d @$(stat -c %Y /$versionfilename 2>/dev/null) +'%d.%m.%Y %H:%M:%S')"
                running_brandings="$(get_brandings)"
                if is_switched; then
                        running_checked=""
@@ -492,19 +535,28 @@
                [ $(count_of_items "$alternative_brandings") -gt 1 ] && chg_alternative_branding=1 || chg_alternative_branding=0
                [ $alternative_version = unknown ] && chg_alternative_branding=0
                if [ $Language = de ]; then
+                       [ "$alternative_version" = "unknown" ] && alternative_version="unbekannt"
+                       [ "$alternative_date" = "unknown" ] && alternative_date="unbekannt"
+                       [ "$alternative_fsdate" = "unknown" ] && alternative_fsdate="unbekannt"
+                       [ "$running_fsdate" = "unknown" ] && running_fsdate="unbekannt"
                        printf '<br /><h3>Folgende Systeme stehen auf dieser FRITZ!Box zur Auswahl bei einem Neustart:</h3><br />\n'
                        printf '<input type="radio" id="radioRunning" name="%s" value="running"%s />\n' $fsvarname "$running_checked"
                        printf '<label for="radioRunning">das aktuell laufende System</label><br /><br />\n'
                        printf 'Version %s vom %s (linux_fs_start=%d), das System wurde am %s zuletzt modifiziert<br /><br />\n' \
                                $running_version "$running_date" $(get_system_switch) "$running_fsdate"
-                       printf '<input type="radio" id="radioAlternative" name="%s" value="alternative"%s />\n' $fsvarname "$alternative_checked"
-                       printf '<label for="radioAlternative">das derzeit inaktive System</label><br /><br />\n'
-                       if [ $alternative_version = unknown ]; then
-                               printf 'Das System in den alternativen Partitionen kann nicht identifiziert werden, es k&ouml;nnte besch&auml;digt oder nicht vorhanden bzw. gel&ouml;scht sein.<br />\n'
-                               printf 'Eine Umschaltung auf dieses System sollte nur ausgef&uuml;hrt werden, wenn man sich wirklich sehr sicher ist, was man da tut.<br /><br />\n'
+                       if [ $alternative_is_missing -eq 0 ]; then
+                               printf '<input type="radio" id="radioAlternative" name="%s" value="alternative"%s />\n' $fsvarname "$alternative_checked"
+                               printf '<label for="radioAlternative">das derzeit inaktive System</label><br /><br />\n'
+                               if [ $alternative_version = unbekannt ]; then
+                                       printf 'Das System in den alternativen Partitionen kann nicht identifiziert werden, es k&ouml;nnte besch&auml;digt sein.<br />\n'
+                                       printf 'Eine Umschaltung auf dieses System sollte nur ausgef&uuml;hrt werden, wenn man sich wirklich sehr sicher ist, was man da tut.<br /><br />\n'
+                               else
+                                       printf 'Version %s vom %s (linux_fs_start=%d), das System wurde am %s zuletzt modifiziert<br /><br />\n' \
+                                               $alternative_version "$alternative_date" $(( ( $(get_system_switch) + 1 ) % 2 )) "$alternative_fsdate"
+                               fi
                        else
-                               printf 'Version %s vom %s (linux_fs_start=%d), das System wurde am %s zuletzt modifiziert<br /><br />\n' \
-                                       $alternative_version "$alternative_date" $(( ( $(get_system_switch) + 1 ) % 2 )) "$alternative_fsdate"
+                               printf '<input type="radio" id="radioAlternative" name="%s" value="alternative" disabled />\n' $fsvarname
+                               printf '<label for="radioAlternative">die derzeit inaktiven Partitionen enthalten kein g&uuml;ltiges System</label><br /><br />\n'
                        fi
                        printf '<span id="running_branding">\n'
                        if [ $chg_running_branding -eq 1 ]; then
@@ -522,7 +574,7 @@
                                printf '<label for="idAlternativeBranding">Beim n&auml;chsten Start wird folgender Wert gesetzt und bis zur n&auml;chsten &Auml;nderung verwendet: </label>\n'
                                selectbox idAlternativeBranding alternative_branding "$alternative_brandings" $current_branding
                        else
-                               if [ $alternative_version = unknown ];then
+                               if [ $alternative_version = unbekannt ];then
                                        printf '<h4>Da das alternative System nicht identifiziert werden konnte, ist auch keine Information &uuml;ber dort enthaltene Brandings verf&uuml;gbar.</h4>\n'
                                        printf '<input type="hidden" name="alternative_branding" value="%s" />\n' $current_branding
                                else
@@ -545,12 +597,17 @@
                                $running_version "$running_date" $(get_system_switch) "$running_fsdate"
                        printf '<input type="radio" id="radioAlternative" name="%s" value="alternative"%s />\n' $fsvarname "$alternative_checked"
                        printf '<label for="radioAlternative">the alternative system</label><br /><br />\n'
-                       if [ $alternative_version = unknown ]; then
-                               printf 'Unable to identify the installed system in the alternative partitions, it could have been damaged or was missing/deleted.<br />\n'
-                               printf 'Switching to this system may prevent your device from starting correctly - you should be really sure, what you are doing in this case.<br /><br />\n'
+                       if [ $alternative_is_missing -eq 0 ]; then
+                               if [ $alternative_version = unknown ]; then
+                                       printf 'Unable to identify the installed system in the alternative partitions, it could have been damaged or was missing/deleted.<br />\n'
+                                       printf 'Switching to this system may prevent your device from starting correctly - you should be really sure, what you are doing in this case.<br /><br />\n'
+                               else
+                                       printf 'version %s - originally built on %s (linux_fs_start=%d), this system was last modified on %s<br /><br />\n' \
+                                               $alternative_version "$alternative_date" $(( ( $(get_system_switch) + 1 ) % 2 )) "$alternative_fsdate"
+                               fi
                        else
-                               printf 'version %s - originally built on %s (linux_fs_start=%d), this system was last modified on %s<br /><br />\n' \
-                                       $alternative_version "$alternative_date" $(( ( $(get_system_switch) + 1 ) % 2 )) "$alternative_fsdate"
+                               printf '<input type="radio" id="radioAlternative" name="%s" value="alternative" disabled />\n' $fsvarname
+                               printf '<label for="radioAlternative">the alternative partitions do not contain a valid system</label><br /><br />\n'
                        fi
                        printf '<span id="running_branding">\n'
                        if [ $chg_running_branding -eq 1 ]; then
 
Vorschlag: nicht beide Versionen für Dialog enablen, sondern nur Version gui_boot_manager_v0.4
Code:
# cd modscripts/
# ls -la
dr-xr-xr--    2 root     root          4096 Mar 25 15:20 .
drwxr-xr-x    6 root     root          4096 Mar 25 15:20 ..
-r-xr-xr--    1 root     root           664 Mar 17  2016 copy_binaries
-r--r--r--    1 root     root          1574 Feb 18  2016 dectcmds.modscript
-r-xr-xr--    1 root     root          3646 Feb 18  2016 edit_rcuser
-r-xr-xr--    1 root     root         33741 Mar 25 00:30 gui_boot_manager_v0.3
-r-xr-xr--    1 root     root         36303 Mar 25 13:16 gui_boot_manager_v0.4
-r-xr-xr--    1 root     root          1392 Mar 29  2016 mod_custom_images
-r-xr-xr--    1 root     root          1913 Feb 18  2016 mod_default_show_mac
-r-xr-xr--    1 root     root          1144 Feb 18  2016 mod_enable_telnet
-r-xr-xr--    1 root     root          4976 Jul 29  2016 mod_leddisplay
-r-xr-xr--    1 root     root          2174 Feb 19  2016 mod_mount_by_label
-r-xr-xr--    1 root     root          2494 Oct 18 04:05 mod_night
-r-xr-xr--    1 root     root          1732 Mar 18  2016 mod_prefer_fonnumber_name
-r-xr-xr--    1 root     root          1272 Feb 18  2016 mod_profile
-r-xr-xr--    1 root     root          2223 Sep 22  2016 mod_rc_tail_sh
-r-xr-xr--    1 root     root          3197 Jul 29  2016 mod_show_name
-r-xr-xr--    1 root     root         11189 Aug  2  2016 mod_show_vpn_on_overview
-r-xr-xr--    1 root     root          3362 Apr 26  2016 mod_swapoff
-r--r-----    1 root     root           645 Feb 18  2016 template
-r--r--r--    1 root     root          5266 Feb 18  2016 yourfritz_hooks
# [COLOR=#0000ff]chmod 444 gui_boot_manager_v0.3[/COLOR]
# ls -la
dr-xr-xr--    2 root     root          4096 Mar 25 15:20 .
drwxr-xr-x    6 root     root          4096 Mar 25 15:20 ..
-r-xr-xr--    1 root     root           664 Mar 17  2016 copy_binaries
-r--r--r--    1 root     root          1574 Feb 18  2016 dectcmds.modscript
-r-xr-xr--    1 root     root          3646 Feb 18  2016 edit_rcuser
[COLOR=#0000ff]-r--r--r--    1 root     root         33741 Mar 25 00:30 gui_boot_manager_v0.3
-r-xr-xr--    1 root     root         36303 Mar 25 13:16 gui_boot_manager_v0.4[/COLOR]
-r-xr-xr--    1 root     root          1392 Mar 29  2016 mod_custom_images
-r-xr-xr--    1 root     root          1913 Feb 18  2016 mod_default_show_mac
-r-xr-xr--    1 root     root          1144 Feb 18  2016 mod_enable_telnet
-r-xr-xr--    1 root     root          4976 Jul 29  2016 mod_leddisplay
-r-xr-xr--    1 root     root          2174 Feb 19  2016 mod_mount_by_label
-r-xr-xr--    1 root     root          2494 Oct 18 04:05 mod_night
-r-xr-xr--    1 root     root          1732 Mar 18  2016 mod_prefer_fonnumber_name
-r-xr-xr--    1 root     root          1272 Feb 18  2016 mod_profile
-r-xr-xr--    1 root     root          2223 Sep 22  2016 mod_rc_tail_sh
-r-xr-xr--    1 root     root          3197 Jul 29  2016 mod_show_name
-r-xr-xr--    1 root     root         11189 Aug  2  2016 mod_show_vpn_on_overview
-r-xr-xr--    1 root     root          3362 Apr 26  2016 mod_swapoff
-r--r-----    1 root     root           645 Feb 18  2016 template
-r--r--r--    1 root     root          5266 Feb 18  2016 yourfritz_hooks
#
 
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.