Moin Leutz!
Da ich zwar gern Bastel, aber dabei möglichst nichts zerstören will - kam schon recht früh der Drang auf, es lieber auf dem USB zu machen...
Jetzt gibt es mehrere Wege zu einem Ergebnis zu kommen:
Der einfachste wäre das 'Optifien' - man legt sich einen /opt-Ordner an und packt alles Eigene dort hinein - da der SPH (noch) recht viel Platz über hat, ginge das. In dem Fall müsste man aber immer noch für alles Schreibrechte für das rootfs einrichten und wenn es Probleme gibt hat man schlimmstenfalls einen SoftBrick...
Für den Bootstrap gibt es natürlich auch mehrere Möglichkeiten:
Eine wäre, beim Start alle notwendigen Dateinen nach /tmp zu kopieren und von dort in das System zu integrieren und gegebenenfalls zu starten. Bei kleinen Sachen ok, aber /tmp liegt im RAM des SPH und eignet sich deshalb wohl nicht für große Anpassungen. (mal von der Zeit für das Kopieren beim Routerstart abgesehen)
Ein großer Vorteil dieser Variante allerdings: das Dateiformat des USB-Sticks ist egal.
Der von mir gewählte Weg:
Der USB-Stick wird auf einen Temp-Ordner gemountet, von dort wird der Boostrap-Unterordner auf /opt gebunden.
(der Bootstrap-Ordner überlagert danach sozusagen den eigentlichen /opt-Ordner)
Vorteile: kein Kopieren, der /opt-Ordner hat Schreibrechte, die Pfade sind einfach zu merken (/opt, /opt/bin, etc)
Nachteil: der USB-Stick muß zwingend ext3-Formatiert sein, wegen den Dateirechten. (notfalls eben einen 2. Stick nutzen)
Das Schöne: ich hab' da mal was vorbereitet
Erstmal das Script:
Zur Erklärung:
Mein Script sucht beim Routerstart erstmal nach dem Ordner _bootstrap_ unterhalb des /mnt. Da der USB-Stick erst verzögert eingebunden wird, versucht es das bis zu 12 mal mit jeweis 10 Sekunden Pause dazwischen. (es sucht dabei den Ordner _bootstrap_ - und entscheidet danach, welcher USB-Stick richtig ist) --> bei mir ist meist der 5. Versuch erfolgreich...
Wenn er einen _bootstrap_ gefunden hat, wird erst der Stick auf /tmp/bsmnt gemountet (um Ausführungsrechte zu setzen) und danach nur der _bootstrap_-Ordner nach /opt gebunden. Sollte in _bootstrap_ auch eine Datei bootstrap_init.sh sein, so wird diese ausgeführt. Das ganze wird übrigens in einem Logfile --> /tmp/bslog kommentiert
Da zu diesem Zeitpunkt das eigentliche Boostrapping schon erledigt ist, kann man sich in diesem Init-Script schon auf /opt beziehen - was das Scripten durchaus vereinfacht. (die USB-Mount-Pfade sind ja nervig lang...)
Am Ende ist also _bootstrap_ == /opt && _bootstrap_/bin/ == /opt/bin/ und so weiter
Sollte beim Start kein bootstrap_init.sh gefunden werden, wird eben nur der Mount duchgeführt - findet es auch keinen _bootstrap_-Ordner, gibt's einen normalen Start. (bei Problemen beim Basteln reicht es also, den Router ohne Stick zu starten...)
Damit das funktioniert sind nur 2-3 kleine Änderungen am SPH selbst notwendig:
Zum einen brauchen wir die Ordner /opt und /opt/bin im rootfs des SPHs.
(gibt da einen netten Post zum Thema Schreibrechte auf rootfs )
Und in /opt/bin das Bootstrap-Script. Ihr könnt einfach den opt-Ordner aus dem angehängten Zip nehmen
Wichtig ist bei dem Allem, daß ihr auf die Dateirechte achtet! der /opt inklusive Unterordner hat bei mir 777er Rechte. (später einschränken geht immer...)
Aber ein chmod 0777 -R /opt schadet nicht wirklich...
Nun kommt das Schwierigste:
Wir müssen die Datei /etc/profile bearbeiten. Im oberen Bereich wird:
zu
Wir fügen also :/opt/bin an die Zeile beginnend mit PATH an.
Am Ende der Datei wird
zu
Also ein sh /opt/bin/bootstrap & wird über mic eingefügt.
Wichtig: nach dem Speichern die Dateirechte unbedingt wieder auf 770 setzen --> 'chmod 0770 /etc/profile'
Das solltet ihr am besten per Terminal machen - FileZilla/Ftp hat da so seine Schwierigkeiten!
Das waren schon alle notwendigen Änderungen
Ab jetzt reicht es dann, eine Executable in den Ordner _bootstrap_/bin des Sticks zu packen, schon ist sie in /opt/bin und damit im Pfad des SPH...
Im Zip-Archiv ist auch mein _bootstrap_-Ordner zum Testen. Packt ihn auf einen ext3-Formatierten USB-Stick. (Dateirechte 777)
Nach dem Neustart ist dann busybox-mips und sphfreq im Pfad und eine laufende sphfreq-WebUi unter speedport.ip:8080/cgi-bin/sphfrequi
(wird durch das bootscript_init.sh gestartet)
Zusammengefasst:
/opt aus dem Zip --> SPH-'/'
_bootstrap_' aus dem Zip --> ext3-formatierter USB-Stick
die beiden oben genannten Änderungen an /etc/profile
chmod 0777 -R _bootstrap_ (auf dem Stick)
chmod 0777 -R /opt (auf dem SPH-rootfs
chmod 0770 /etc/profile
Vor Allem die Dateirechte der /etc/profile besser 2-3x überprüfen vor dem Neustart! (sonst kann's echt Probleme geben)
Übrigens: wenn ihr denkt, ihr müsstet etwas ändern, was von aussen nicht geht - zB. die Telekom-WebUI...
...ihr könnt euch auch ganze Ordner vom SPH auf den Stick kopieren - dort ändern - und dann eure Kopie per Mount-Bind im Init-Script über dem Original-Ordner auf dem SPH 'einblenden' --> dieser sieht dann eure Kopie
mfg, emkay
PS.: das das Script eventuell für Manche seltsam aussieht, liegt wohl daran, daß der SPH recht eingeschränkt ist beim Scripten - und ich mich vorher selten mit Shellscripting befasst habe
EDIT: wenn ihr meinen _bootstrap_-Ordner nutzt/testet: bitte noch in den httpd.conf eventuell die Beschränkung auf IP 192.168.2.* anpassen... könnte ja sein, daß ihr einen anderen IP-Bereich benutzt ;)
Da ich zwar gern Bastel, aber dabei möglichst nichts zerstören will - kam schon recht früh der Drang auf, es lieber auf dem USB zu machen...
Jetzt gibt es mehrere Wege zu einem Ergebnis zu kommen:
Der einfachste wäre das 'Optifien' - man legt sich einen /opt-Ordner an und packt alles Eigene dort hinein - da der SPH (noch) recht viel Platz über hat, ginge das. In dem Fall müsste man aber immer noch für alles Schreibrechte für das rootfs einrichten und wenn es Probleme gibt hat man schlimmstenfalls einen SoftBrick...
Für den Bootstrap gibt es natürlich auch mehrere Möglichkeiten:
Eine wäre, beim Start alle notwendigen Dateinen nach /tmp zu kopieren und von dort in das System zu integrieren und gegebenenfalls zu starten. Bei kleinen Sachen ok, aber /tmp liegt im RAM des SPH und eignet sich deshalb wohl nicht für große Anpassungen. (mal von der Zeit für das Kopieren beim Routerstart abgesehen)
Ein großer Vorteil dieser Variante allerdings: das Dateiformat des USB-Sticks ist egal.
Der von mir gewählte Weg:
Der USB-Stick wird auf einen Temp-Ordner gemountet, von dort wird der Boostrap-Unterordner auf /opt gebunden.
(der Bootstrap-Ordner überlagert danach sozusagen den eigentlichen /opt-Ordner)
Vorteile: kein Kopieren, der /opt-Ordner hat Schreibrechte, die Pfade sind einfach zu merken (/opt, /opt/bin, etc)
Nachteil: der USB-Stick muß zwingend ext3-Formatiert sein, wegen den Dateirechten. (notfalls eben einen 2. Stick nutzen)
Das Schöne: ich hab' da mal was vorbereitet
Erstmal das Script:
Shell-Script
- #!/bin/sh
- echo 'bootstrap gestartet...' > /tmp/bslog
- for i in 1 2 3 4 5 6 7 8 9 10 11 12
- do
- sleep 10
- echo "bootstrap mount Versuch $i..." >> /tmp/bslog
- bsbase="$(ls -d /mnt/*/_bootstrap_ 2>/dev/null)"
- if [ -n "$bsbase" ]
- then
- break
- fi
- done
- if [ -n "$bsbase" ]
- then
- bsinit="$(ls $bsbase/bootstrap_init.sh 2>/dev/null)"
- usbname="$(echo $bsbase | cut -d '/' -f 3 2>/dev/null)"
- usbdev="$(mount | grep $usbname | cut -d ' ' -f 1 2>/dev/null)"
- mkdir /tmp/bsmnt
- mount -o exec $usbdev /tmp/bsmnt
- mount -o bind /tmp/bsmnt/_bootstrap_ /opt
- echo 'mount durchgeführt...' >> /tmp/bslog
- if [ -n "$bsinit" ]
- then
- . /opt/bootstrap_init.sh
- echo 'bootstrap_init.sh ausgeführt...' >> /tmp/bslog
- else
- echo 'bootstrap_init.sh nicht gefunden...' >> /tmp/bslog
- fi
- else
- echo 'mountpoint nicht gefunden...' >> /tmp/bslog
- fi
- echo 'bootstrap beendet...' >> /tmp/bslog
Zur Erklärung:
Mein Script sucht beim Routerstart erstmal nach dem Ordner _bootstrap_ unterhalb des /mnt. Da der USB-Stick erst verzögert eingebunden wird, versucht es das bis zu 12 mal mit jeweis 10 Sekunden Pause dazwischen. (es sucht dabei den Ordner _bootstrap_ - und entscheidet danach, welcher USB-Stick richtig ist) --> bei mir ist meist der 5. Versuch erfolgreich...
Wenn er einen _bootstrap_ gefunden hat, wird erst der Stick auf /tmp/bsmnt gemountet (um Ausführungsrechte zu setzen) und danach nur der _bootstrap_-Ordner nach /opt gebunden. Sollte in _bootstrap_ auch eine Datei bootstrap_init.sh sein, so wird diese ausgeführt. Das ganze wird übrigens in einem Logfile --> /tmp/bslog kommentiert
Da zu diesem Zeitpunkt das eigentliche Boostrapping schon erledigt ist, kann man sich in diesem Init-Script schon auf /opt beziehen - was das Scripten durchaus vereinfacht. (die USB-Mount-Pfade sind ja nervig lang...)
Am Ende ist also _bootstrap_ == /opt && _bootstrap_/bin/ == /opt/bin/ und so weiter
Sollte beim Start kein bootstrap_init.sh gefunden werden, wird eben nur der Mount duchgeführt - findet es auch keinen _bootstrap_-Ordner, gibt's einen normalen Start. (bei Problemen beim Basteln reicht es also, den Router ohne Stick zu starten...)
Damit das funktioniert sind nur 2-3 kleine Änderungen am SPH selbst notwendig:
Zum einen brauchen wir die Ordner /opt und /opt/bin im rootfs des SPHs.
(gibt da einen netten Post zum Thema Schreibrechte auf rootfs )
Und in /opt/bin das Bootstrap-Script. Ihr könnt einfach den opt-Ordner aus dem angehängten Zip nehmen
Wichtig ist bei dem Allem, daß ihr auf die Dateirechte achtet! der /opt inklusive Unterordner hat bei mir 777er Rechte. (später einschränken geht immer...)
Aber ein chmod 0777 -R /opt schadet nicht wirklich...
Nun kommt das Schwierigste:
Wir müssen die Datei /etc/profile bearbeiten. Im oberen Bereich wird:
zu
Wir fügen also :/opt/bin an die Zeile beginnend mit PATH an.
Am Ende der Datei wird
zu
Also ein sh /opt/bin/bootstrap & wird über mic eingefügt.
Wichtig: nach dem Speichern die Dateirechte unbedingt wieder auf 770 setzen --> 'chmod 0770 /etc/profile'
Das solltet ihr am besten per Terminal machen - FileZilla/Ftp hat da so seine Schwierigkeiten!
Das waren schon alle notwendigen Änderungen
Ab jetzt reicht es dann, eine Executable in den Ordner _bootstrap_/bin des Sticks zu packen, schon ist sie in /opt/bin und damit im Pfad des SPH...
Im Zip-Archiv ist auch mein _bootstrap_-Ordner zum Testen. Packt ihn auf einen ext3-Formatierten USB-Stick. (Dateirechte 777)
Nach dem Neustart ist dann busybox-mips und sphfreq im Pfad und eine laufende sphfreq-WebUi unter speedport.ip:8080/cgi-bin/sphfrequi
(wird durch das bootscript_init.sh gestartet)
Zusammengefasst:
/opt aus dem Zip --> SPH-'/'
_bootstrap_' aus dem Zip --> ext3-formatierter USB-Stick
die beiden oben genannten Änderungen an /etc/profile
chmod 0777 -R _bootstrap_ (auf dem Stick)
chmod 0777 -R /opt (auf dem SPH-rootfs
chmod 0770 /etc/profile
Vor Allem die Dateirechte der /etc/profile besser 2-3x überprüfen vor dem Neustart! (sonst kann's echt Probleme geben)
Übrigens: wenn ihr denkt, ihr müsstet etwas ändern, was von aussen nicht geht - zB. die Telekom-WebUI...
...ihr könnt euch auch ganze Ordner vom SPH auf den Stick kopieren - dort ändern - und dann eure Kopie per Mount-Bind im Init-Script über dem Original-Ordner auf dem SPH 'einblenden' --> dieser sieht dann eure Kopie
mfg, emkay
PS.: das das Script eventuell für Manche seltsam aussieht, liegt wohl daran, daß der SPH recht eingeschränkt ist beim Scripten - und ich mich vorher selten mit Shellscripting befasst habe
EDIT: wenn ihr meinen _bootstrap_-Ordner nutzt/testet: bitte noch in den httpd.conf eventuell die Beschränkung auf IP 192.168.2.* anpassen... könnte ja sein, daß ihr einen anderen IP-Bereich benutzt ;)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Stricted“ ()