Alternative fuer USB-Root auf dem Stick

abraXxl

Mitglied
Mitglied seit
9 Jan 2007
Beiträge
242
Punkte für Reaktionen
0
Punkte
0
Hallo !

Die bereits bestehende Variante USB-Root auf Stick funktioniert, wie im Thread festgehalten, nicht zuverlässig auf einigen Boxen z.B. Speedport w900v.

Der USB-AHCI Hostkontrollertreiber (Modul) scheint - obwohl nicht im Modul vermerkt - Abhängigkeiten mit dem tiatm(dsl), ubik2 und dem CAPI Treiber zu haben, bzw. das Piglet-Modul initialisiert die USB-Logik nicht richtig. Wenn die ISDN bzw DSL-Dardware nicht initaliesiert ist, werden die USB-Geräte nicht vom HostController konfiguriert.

Hier nun die Lösung "USB-Root on demand" via Freetz-Feature "run autorun.sh on mount".
  1. Freetzen mit "automount filesystems" und "run autorun.sh on mount".
  2. Flashen
  3. autorun.sh auf den Stick kopieren.
  4. Rootfs auf dem Stick anlegen und im neuen Rootfs ein /rom anlegen
  5. Einen Link anlegen auf dem Stick, der rootfs heisst und relativ vom Root des Sticks auf das Verzeichnis fuer das neue Rootfs
  6. Box entweder mit Stick hochfahren oder ohne.
    Der Stick kann auch nach dem Booten dann eingesteckt werden.

Noch ein paar Pros/Contras zum USB-Root Script:
Pro:
  • Hardware schon komplett initialisiert. _Fast_ alles weitere kann nun nun via Asterisk gemacht werden, wie z.B. AB.
  • Ermöglicht mit obigen Punkt ein alternatives Linux aufzuspielen wie Debian/Mipsel oder OpenWrt (zumindest das Rootfs) ohne Features einzubüssen.

Contra:
  • Geht nicht auf Boxen ohne USB.
  • Längere Boot-Zeit. (Sollte Egal sien idR läuft so'ne Box dauerhaft.

OpenWrt News:
Es läuft siehe Signatur.
telefond, voipd, ctlmr, wpa_authenticator laufen unter OpenWrt mit uclibc 0.9.2[89] jetzt mit etwas mehr wie 30 Tagen uptime. multi und dsld nicht notwendig da OpenWrt die Configuration der Netzwerkinterfaces übernimmt. QoS macht iptables mit OpenWrt und Kernel Boardmitteln. br2864ctl, pppd, iptables + openswan ersetzen AVM Software. Webinterface durch ctlmgr/httpd combo ersetzt. NFS und Samba + Sehr viel software aus der Openwrt-software Blibliothek.

Debian News:
Etch Mipsel bootet. AVM Software läuft nicht, da Debian nicht uclibc nutzt sondern glibc.

have more fun

-- 08-08-05 Neue Version des Skriptes welches ohne umkonfiguriertes Busybox mi Readlink auskommt
 

Anhänge

  • autorun.sh.tar
    10 KB · Aufrufe: 378
Zuletzt bearbeitet:
Ähm ja. Schön wenn das funktioniert. Ich versteh fast nix von dem Skript. :-(
Woher kannst du so gut Shell Scripten?

MfG Oliver
 
Hi !

Ähm ja. Schön wenn das funktioniert. Ich versteh fast nix von dem Skript. :-(
Es ist auch nur ein Proof of Concept. Es noch nicht fue rmeinen Geschmack ausreichend kommentiert. Und nach johnbock (siehe hier) schlechter sh-style. Es gibt noch ein Paar Todos: darunter ist Kommentieren, Coding-Style anpassen und noch mehr vom alten Rootfs umounten. Im Moment bleibt fast der komplette Baum des alten Roots unter /initrd gemountet. :(


Woher kannst du so gut Shell Scripten?
Das ist kein guter Style, in Debian würde man solche Scripte/Programmierer zum Teufel jagen. Ich war nur etwas angnervt, dass die Hardware vom Speedport so komisches Verhalten zeigt.

Noch ein paar Pros/Contras zum USB-Root Script:
Pro:
  • Hardware schon komplett initialisiert, und fuer nur POTS/ISDN/DECT Telefonie ohne Voip braucht man keine AVM Software mehr. Alles weitere muss nun via Asterisk gemacht werden, wie z.B. AB.
  • Ermöglicht mit obigen Punkt ein vernünftiges Unix/Aufzuspielen wie Debian/Mipsel oder OpenWrt (zumindest das Rootfs) ohne Features einzubüssen.

Contra:
  • Zum Umkonfigurieren der POTS/ISDN/DECT Telefonie muss man einmal das alte WebInterface ohne USB-Root on Demand nutzen. Oder man Benutzt halt ein Feature-Rich Freetz Image als rootfs.
  • Geht nicht auf Boxen ohne USB.
  • Längere Boot-Zeit. (Sollte Egal sien idR läuft so'ne Box dauerhaft.

Zum letzten Punkt:
Unix-Admin und Student da lernt man sowas und hat Zeit ;).

Ich würde mich freuen wenn das jemand ausprobiert. Sollte eigentlich auf allen USB-Boxen mit Freetz und Busybox ab 1.8 laufen. (Ich nutze das re-exec Feature vom Busyboxs init.)

mfg
PS: Ich hätte Patches für Freetz (/etc/init.d/rc.S) damit man das Rootds auf dem Stick nicht modifizieren muss nachtraeglich. Kann ich die irgendwie einchecken? Email/SVN?
 
Du kansnt hier ein patchfile anhängen zum aktuellen trunk z.b., oder aber ein Ticket eröffnen und das im Trac anhängen.
 
Das Skript ist wirklich krass geschrieben, ich blick da nicht durch.
@Silent-Tears: Die Datei kommt nicht ins Image sondern auf eine Partition an USB
 
Hi !

So das Skript ist jetzt kommentiert.
Ich habe die Datein im Hauptbeitrag aktualisiert.

cya
 
coole sache, funktioniert auf anhieb!

aber: ich habe immer 100% cpu-auslastung durch "[avm_dect_thread]". das ist etwas... störend :)

ist das schon mal jemandem aufgefallen?

oder könnte das an meinem rootfs sein? (ist zugegebenermaßen recht vollgepumpt mit sachen *g*), edit: auch ein fast unmodifiziertes image gibt mir 100% cpu-auslastung... (100% sys)

edit2: ich habe soeben gemerkt: ein "kill" auf die pid des o.g. programms bringt die 100% cpu-auslastung. das scheint also irgendwie abzustürzen.
 
Zuletzt bearbeitet:
Hi !

coole sache, funktioniert auf anhieb!

aber: ich habe immer 100% cpu-auslastung durch "[avm_dect_thread]". das ist etwas... störend :)

[...]

ich habe soeben gemerkt: ein "kill" auf die pid des o.g. programms bringt die 100% cpu-auslastung. das scheint also irgendwie abzustürzen.

Auf welcher Hardware setzt du das Script ein?

Das heisst aus irgendeinem Grund bekommt dieser Prozess ein Kill.
Das scheint jedoch ein Kernel-Thread zu sein, der sollte kein kill bekommen, da ich /proc/<pid>/exe überprüfe, und kernel threads kein Executable haben.

Hast du readlink im Busybox drin?

cya
 
ich denke schon, dass ich readlink drin habe (ist busybox 1.10.2).

ich habe den killteil des scripts mal durchlaufen lassen und statt des kills nur ein echo des befehls eingegeben. und dort erscheint tatsächlich immer die pid des prozesses.

ich habe dann noch versucht, das script so anzupassen, dass halt die pid geskippt wird (der prozess hat immer die gleich pid: [ $pid -eq 317 ] && continue), das hat auch geklappt, zumindest wurde bei dem echo der prozess nicht gelistet.

nach ausführen der autorun.sh (mit der modifikation) gab's aber leider immer noch das gleich problem... vllt hat sich während des ausführens die pid vom prozess geändert, sodass mein kleiner hack da nichts mehr gebracht hat.

ich benutze die aktuelle firmware für die 7270: FRITZ.Box_Fon_WLAN_7270.54.04.57.image (meine sig werde ich noch updaten...)
 
ich denke schon, dass ich readlink drin habe (ist busybox 1.10.2).
Du kannst es überprüfen mit
Code:
make busybox-menuconfig

ich habe den killteil des scripts mal durchlaufen lassen und statt des kills nur ein echo des befehls eingegeben. und dort erscheint tatsächlich immer die pid des prozesses.
Was sagt
Code:
ls -la /proc/317

ich habe dann noch versucht, das script so anzupassen, dass halt die pid geskippt wird (der prozess hat immer die gleich pid: [ $pid -eq 317 ] && continue), das hat auch geklappt, zumindest wurde bei dem echo der prozess nicht gelistet.

nach ausführen der autorun.sh (mit der modifikation) gab's aber leider immer noch das gleich problem... vllt hat sich während des ausführens die pid vom prozess geändert, sodass mein kleiner hack da nichts mehr gebracht hat.
Koennte auch sein das ein weitere Prozess das verursacht.

cya
 
ich habe mein system nun soweit, dass ich es mit usb-root zum laufen bekommen habe (allerdings der gleiche rootfs usw). nun hat der prozess eine andere pid, deswegen:

Code:
# ls -la /proc/471/
dr-xr-xr-x    4 root     root            0 May 16 17:51 .
dr-xr-xr-x   80 root     root            0 Jan  1  2000 ..
-r--------    1 root     root            0 May 16 17:51 auxv
-r--r--r--    1 root     root            0 May 16 17:51 cmdline
lrwxrwxrwx    1 root     root            0 May 16 17:51 cwd -> /
-r--------    1 root     root            0 May 16 17:51 environ
lrwxrwxrwx    1 root     root            0 May 16 17:51 exels: /proc/471/exe: cannot read link (not a symlink?)

dr-x------    2 root     root            0 May 16 17:51 fd
-r--r--r--    1 root     root            0 May 16 17:51 maps
-rw-------    1 root     root            0 May 16 17:51 mem
-r--r--r--    1 root     root            0 May 16 17:51 mounts
-r--------    1 root     root            0 May 16 17:51 mountstats
-rw-r--r--    1 root     root            0 May 16 17:51 oom_adj
-r--r--r--    1 root     root            0 May 16 17:51 oom_score
lrwxrwxrwx    1 root     root            0 May 16 17:51 root -> /
-r--r--r--    1 root     root            0 May 16 17:51 schedstat
-r--r--r--    1 root     root            0 May 16 17:51 smaps
-r--r--r--    1 root     root            0 May 16 17:51 stat
-r--r--r--    1 root     root            0 May 16 17:51 statm
-r--r--r--    1 root     root            0 May 16 17:51 status
dr-xr-xr-x    3 root     root            0 May 16 17:51 task
-r--r--r--    1 root     root            0 May 16 17:51 wchan
der fehler bei dem "exe" war aber auch ohne usb-root so da, da bin ich mir sicher.


aber! du hast reacht, readlink war anscheinend nicht an, zumindest gibt mir ein "make busybox-menuconfig" das aus (dort ist readlink nicht aktiviert). lag also der fehler vermutlich daran! nur komischerweise kann meine busybox andere links übersetzen, den in /proc aber nicht...
 
Hi !

ich habe mein system nun soweit, dass ich es mit usb-root zum laufen bekommen habe (allerdings der gleiche rootfs usw)

[...]
Code:
# ls -la /proc/471/
dr-xr-xr-x    4 root     root            0 May 16 17:51 .
dr-xr-xr-x   80 root     root            0 Jan  1  2000 ..
[...]
lrwxrwxrwx    1 root     root            0 May 16 17:51 exels: /proc/471/exe: cannot read link (not a symlink?)
[...]
der fehler bei dem "exe" war aber auch ohne usb-root so da, da bin ich mir sicher.
Kernel threads haben keine Programm, zu dem es auf dem Dateisystem einen passenden Inode geben würde. Daher schlägt ls als auch readlink fehl. Mein script nutzt dies.

aber! du hast reacht, readlink war anscheinend nicht an, zumindest gibt mir ein "make busybox-menuconfig" das aus (dort ist readlink nicht aktiviert). lag also der fehler vermutlich daran! nur komischerweise kann meine busybox andere links übersetzen, den in /proc aber nicht...
readlink an sich ist eine Funktion in der uclibc. busybox ls nutzt dies um Links umzusetzten.
Der Readlink-Befehl an sich ist nur eine Anwendung des Readlink-Calls.

cya

PS: Habe im Hauptbeitrag den Tipp mit Readlink eingebaut.
 
Hi !

Neue Skriptversion.
Im Leitartikes Pros und Contras, sowie Vorraussetzungen upgedated.
 
Hallo,

kann sich hier die Festplatte nach dem Boot schlafen legen, oder finden regelmäßig Zugriffe statt (ich möchte nur Freetz einsetzen und mein Flash der Fritzbox ist zu klein)

Gruß,
Hendrik
 
Hmm ich habe das gestern mal bei mir probiert. Mit mässigem Erfolg muss ich sagen.

Mein Vorgehen:
- Image mit aktuellem Freetz SVN Trunk erstellt für die 7170. Labor 11945
- Dieses Image mit speed2fritz vom 29.08 startklar gemacht für den W900V
- Image erstmal geflasht.....läuft vernünftig.

So nachdem ich dann das mit USB-Root selbst durchhatte und nach etlichem lesen gemerkt habe das es nich geht auf dem 900er :mad:
habe ich noch dieses Archiv hier getestet http://www.ip-phone-forum.de/showpost.php?p=1074446&postcount=4 aber das scheint auch outdatet zu sein
wollte ich es also mit dem autorun testen.

- Stick vorbereitet unter debian testing, sda1=swap sda2=ext2 sda3=vfat
- Alle Daten aus dem FBDIR von speed2fritz nach Anleitung nach sda2 kopiert und rechte gesetzt und das rom dir angelegt. autorun.sh noch dazu.

So wenn ich nun den Stick anstecke am Router startet er wie er soll die autorun.sh, dann sehe ich noch wie er versucht einige Sachen zu killen und dann schmeißt er mich auch aus der Telnet session raus. Dann geht der Router offline....der USB Stick blinkt immer fleissig. Kurze Zeit später rebootet der Router dann einfach.
Liegt es an der Labor AiO Firmware? Am sp2Fritz? An der autorun.sh? Oder bin ich einfach nur zu blöd und mache irgendwas falsch?

Am liebsten wäre mir ein Boot direkt von USB per init=. Wenn ich all das was ich gestern gelesen habe richtig verstanden habe scheitert es doch wohl "nur" daran das einige Treiber erst geladen werden müssen beim 900er damit er den Stick erkennt? Und genau das sollte ja das angepasste usbroot aus dem Link oben machen?!?
 
- Image mit aktuellem Freetz SVN Trunk erstellt für die 7170. Labor 11945
- Dieses Image mit speed2fritz vom 29.08 startklar gemacht für den W900V

Wieso doppelt? Freetz kann mit der Alien-Option direkt ein passendes Image erstellen. Funktioniert bei mir.

Liegt es an der Labor AiO Firmware? Am sp2Fritz?
Am besten einfach ausprobieren und uns partizipieren lassen :)

Am liebsten wäre mir ein Boot direkt von USB per init=. Wenn ich all das was ich gestern gelesen habe richtig verstanden habe scheitert es doch wohl "nur" daran das einige Treiber erst geladen werden müssen beim 900er damit er den Stick erkennt? Und genau das sollte ja das angepasste usbroot aus dem Link oben machen?!?

Das aus dem Link ist kein komplettes USB-Root, wie du dir das vorstellst.
 
Jo ich weiss das freetz direkt für den 900er z.B. bauen kann, ich bevorzuge aber den anderen Weg :)
Sicher werde ich das als nächstes erstmal mit der letzten Final für den 7170 testen ob es damit funktioniert. Aber kann ja durchaus sein das diese Erkentniss schon vor mir jemand erlangt hat! Der Tag hat ja leider nur 24h und arbeiten muss man zwischendrinn ja auch noch :))
 
Hi !

So nachdem ich dann das mit USB-Root selbst durchhatte und nach etlichem lesen gemerkt habe das es nich geht auf dem 900er :mad:
habe ich noch dieses Archiv hier getestet http://www.ip-phone-forum.de/showpost.php?p=1074446&postcount=4 aber das scheint auch outdatet zu sein wollte ich es also mit dem autorun testen.
Das Problem ist das nicht nur an den Treibern zu hängen scheint, wenn man die nötigen insmods/modprobes auf der Kommandozeile via serieller Console eingibt bei (init=/bin/sh) stockt nach insmod Piglet die serielle Console.
Nur noch Kernel Messages werden angezeigt.
Ich habe leider noch nicht herausgefunden was die AVM-Soft irgendwo macht damit USB und Serielle Console nach dem Laden der Module wieder und endlich funktionieren.

- Stick vorbereitet unter debian testing, sda1=swap sda2=ext2 sda3=vfat
- Alle Daten aus dem FBDIR von speed2fritz nach Anleitung nach sda2 kopiert und rechte gesetzt und das rom dir angelegt. autorun.sh noch dazu.
rootfs Symlink angelgt? Ich vermute mal ja.

Warum dein rootfs dann rebootet erschliest sich mir nicht?
Wie Silent-Tears schon sagt probiere aus, ob das mit einem Alien-Freetz fuer den W900V funktioniert.
Wenn das nicht funzt brauchen wir mehr Details. Serielles Bootlog, Pakete im Freetz, ...

Am liebsten wäre mir ein Boot direkt von USB per init=. Wenn ich all das was ich gestern gelesen habe richtig verstanden habe scheitert es doch wohl "nur" daran das einige Treiber erst geladen werden müssen beim 900er damit er den Stick erkennt? Und genau das sollte ja das angepasste usbroot aus dem Link oben machen?!?
Das war ein Anfang hat aber nie richtig funktioniert.
Weshalb diese Lösung entwickelt worden ist.

cya
 
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.