Unix-Basics:
- Ausführbares Skript aufrufen nur mit Skript-Name = neuer Prozeß wird gestartet, definierte Variablen gelten nur in diesem Prozeß.
- Skript innerhalb des Eltern-Skripts ausführen, indem man schreibt ". Skript-Name" (muß kein Ausühren-Bit "x" gesetzt haben) = Skript wird innerhalb des Eltern-Skripts interpretiert, dort und für von dort später gestartete weitere Kindprozesse gelten auch exportierte Variablen.
- ABER in beiden Fällen endet die Lebensdauer der Variablen, wenn das Skript endet.
Was bedeutet Punkt 3 im Zusammenhang mit der
debug.cfg? Der beim Starten der Box aktive Prozeß "init" startet im Normalfall auf der Box
/etc/init.d/rc.S, sozusagen das "Ur-Skript". Dieses wiederum ruft nacheinander die ganzen anderen rc.X-Skripte auf und auch irgendwann die
debug.cfg, diese wiederum mit der Aufrufvariante 2, d.h. dort exportierte Variablen gelten dann im Rest des Ur-Skripts und allem, was davon anschließend noch aufgerufen wird. Bereits beendet sind die Aufrufe der AVM-Dienste, was aber noch kommt, sind die DS-Mod-Dienste und am Ende die
rc.custom, wo man auch nochmal eigene Sachen hinterlegen kann. Dort sind die in
debug.cfg definierten Variablen also nutzbar.
Was passiert nun, wenn man sich auf der Box einloggt mit Telnet oder SSH? Dann hat man diese Variablen nicht, denn man startet ja einen völlig neuen Prozeß. Woher kommen also die gesetzten Variablen, wenn man sich das Environment von der Shell aus anschaut nach dem Login? Von sog. Shell-Profilen. Bei jedem Login wird
/etc/profile ausgeführt. Alles, was dort an Variablen direkt oder von wiederum ausgerufenen Unter-Skripten gesetzt wird, sieht der Benutzer bzw. der Shell-Prozeß. Zusätzlich gibt es noch ein benutzerspezifisches Profil, das bei der
ash, unserer Shell, aufgerufen wird, sofern es im Benutzer-Home-Verzeichnis existiert:
.profile (der Pubnkt gehört zum Dateinamen). Was man also machen kann, ist, in der
debug.cfg die Datei
/mod/root/.profile zu erzeugen mit dem gewünschten Inhalt (exportierte Variablen). Die sind dann verfügbar. Aber Achtung, ein Problem gibt es: Per SSH-Login funktioniert das, per Telnet momentan nicht, weil der Telnet-Dämon (telnetd) von AVM so gestartet wird, daß nicht der normale Login mit Name und PW aufgerufen wird, sondern der mit Web-Paßwort. Dementsprechend setzt dieser auch nicht das Home-Verzeichnis korrekt (es bleibt bei "/"). Startet man
telnetd aber neu ohne Parameter, kann man sich auch über Telnet normal einloggen und landet anschließend im richtigen Home-Verzeichnis, das Profil wird ausgeführt.
Ausblick: Ich habe mir vor einigen Tagen etwas einfallen lassen, um den Telnetd in Zukunft immer mit normalem Login zu starten, so daß auch das Benutzer-Profil funktioniert. Kommt mit dem nächsten Patch.
Alternative 1: Vor dem Flashen schon dafür sorgen, daß
/etc/profile gepatcht wird, so daß die gewünschten Befehle fest dort verankert sind.
Alternative 2: Aus der
debug.cfg heraus
/etc/profile z.B. nach
/var/tmp/profile kopieren, gewünschte Befehle anhängen und per
Code:
mount -o bind /var/tmp/profile /etc/profile
dafür sorgen, daß die modifizierte Version die in der Firmware überdeckt und für alle Benutzer ausgeführt wird. In dem Fall braucht man, genau wie in Alternative 1, kein Benutzerprofil, das globale wird ja immer ausgeführt.
Ihr seht, es gibt viele Möglichkeiten. Wem das jetzt zu hoch war, weil zu viel Shell-Kauderwelsch drin ist, muß sich wohl oder übel ein bißchen einlesen. Wie immer an dieser der Verweis auf
Unix/Linux-Grundlagen.