Pro-Host-Session-Konfiguration: bash-fb
Einleitung
Das Paket
bash-fb entstand aus Bedürfnis herraus, Rechner in unterschiedlichen Netzwerken zentral zu konfigurieren. Dabei kam es vor allem darauf an, Benutzern eine konfigurierte, jedoch einheitliche Arbeitsumgebung zu präsentieren, wobei vor allem Umgebungsvariablen (teilweise mit Bedingungen) zu setzen waren. Ausserdem sollten bestimmte Aliases der
bash einheitlich für alle Benutzer zur Verfügung stehen.
Früher kam dazu ein Satz Konfigurationsdateien beim Benutzer (
~/.bashrc ,
~/.profile , ...) zum Einsatz. Ziel war es, die Notwendigkeit dieser Benutzerspezifischen Files zu eliminieren, damit zentrale Änderungen an der Konfiguration möglich wurden - ohne sich auf jedem Rechner einzuloggen und (eigentlich Netzwerk- und nicht Rechnerspezifische) Einstellungen z.B. an
/etc/bash.bashrc und
/etc/profile durchzuführen.
Das Prinzip
Und so funktionierts prinzipiell:
- Mit
apt-get install bash-fb
wird das Paket installiert. Per dpkg-divert ersetzt es die Dateien /etc/bash.bashrc und /etc/profile durch eigene Versionen.
-
/etc/bash.bashrc und /etc/profile dürfen nicht geändert werden. Alle Änderungen sollten direkt am jeweiligen Konfigurationsprofil / /etc/bash/preset/[Konfigurationscode].bashrc durchgeführt werden.
Diese Dateien werden von Debian als Konfigurationsdateien verwaltet - bei einem
- Das Skript
install-bash-fb erkennt, in welchem Netzwerk der Computer ist und ordnet ihm einen Konfigurationscode zu.
- Die Netzwerkkonfigurationen (IP und Netzmaske + Domainname) sind zusammen mit dem jeweiligen Konfigurationscode in
/etc/bash/preset/presets zeilenweise gespeichert.
- Ist das Netzwerk unbekannt, lautet der Code default .
- Der Konfigurationscode wird als Zuweisung an die Umgebungsvariable $LOCALPROFILE in der Datei
/etc/bash.bashrc gespeichert.
- bash-fb schreibt ein einzu-
source -ndes Skript nach /etc/X11/Xsession.d . Dadurch werden auch gestartete X-Sessions Konfiguriert.
Das passiert, wenn ein Benutzer (incl. root) eine Session (
ssh -Login,
kdm -Login, Konsolen-Login, ...) startet:
-
/etc/bash.bashrc wird abgearbeitet.
- Bei X-Sessions geschieht das durch das ein-
source -en von /etc/X11/Xsession.d/10profile
- Die Shell-Variable ( keine Umgebungsvariable - das ist wichtig! ) $SHPROFILE wird auf
"1" gesetzt.
- Das Profil, das dem aktuell eingestelltem Konfigurationscode entspricht, wird abgearbeitet (also
/etc/bash/preset/[Konfigurationscode].bashrc ).
- Die
~/.bashrc des Benutzers wird abgearbeitet. Der Benutzer kann in diesem File mit der Bedingung [ 1 = "$SHPROFILE" ] testen, ob gerade eine Session gestartet wird und ggf. gewünschte Kommandos ausführen.
Wann immer der Benutzer eine interaktive Shell öffnet (also z.B. eine Terminalemulation mit
bash unter KDE oder auf während des eigentlichen Logins an der Konsole oder z.B. per
ssh ), passiert folgendes:
-
/etc/bash.bashrc wird abgearbeitet
- Die Shell-Variable ( keine Umgebungsvariable ) $SHINTERACTIVE wird auf
"1" gesetzt.
- Das Profil, das dem aktuell eingestelltem Konfigurationscode entspricht, wird abgearbeitet (also
/etc/bash/preset/[Konfigurationscode].bashrc ).
- Die
~/.bashrc des Benutzers wird abgearbeitet. Der Benutzer kann in diesem File mit der Bedingung [ 1 = "$SHINTERACTIVE" ] testen, ob gerade eine Session gestartet wird und ggf. z.B. Aliases setzen und Shell-Funktionen definieren.
Hinweis:
- Wenn Sessionstart und Start der interaktiven Shell zusammenfallen, werden $SHINTERACTIVE und $SHPROFILE auf
"1" gesetzt.
- Benutzer können die gesammte Shell-Konfiguration in
~/.bashrc vornehmen - es gibt kein Kompetenzwirrwar mehr zwischen ~/.bashrc* und =~/.profile . Dadurch kann ~/.profile entfernt werden, wodurch die Mehrfachausführung des Skriptes wirkungsvoll unterbunden ist.
- Wer eigene Konfigurationen in bash-fb untergebracht wissen will, darf sich gerne an mich wenden.
Problembehebung
Einloggen per Displaymanager (z.B. kdm ) geht nicht
Wenn man beim Einloggen per Displaymanager (
xdm ,
gdm ,
kdm , ...) direkt nach der Eingabe des Passwortes ohne irgendeine Fehlermeldung wieder beim Login-Dialog landet, kann das an
bash-fb liegen.
Mögliche Ursachen:
Fehlerhafte Kommandos in den bash -Konfigurationsfiles des Benutzers
In
~/.bashrc oder
~/.profile stehen evtl. Kommandos, die nicht erfolgreich ausgeführt werden. Diese Befehle müssen raus bzw. muß deren Fehlerhafte Ausführung abgefangen werden.
Wenn man ein Kommando dringend braucht - z.B.
wichtiges_kommando wichtiger parameter
und dieses Kommando aber immer (oder gelegentlich) einen zu ignorierenden Fehler (Rückgabecode = 0) zurückliefert, kann man folgendes machen:
wichtiges_kommando wichter parameter || true
Braucht man es nicht, sollte man die Chance nutzen und die entsprechende Zeile 'rausschmeißen.
Beispiele für fehlerhaft Kommandos: (gefunden am MPI/CBS)
-
tset -I -Q
-
stty erase '^H'
-
source /usr/local/share/scripts/lipsia_init
- set editing-mode vi
Die falsche Shell hat sich als /bin/sh eingetragen
Die
ash hat z.B. die Angewohnheit, die
bash ersetzen zu wollen, was sich in sehr merkwürdigen Fehlern ausdrückt.
Wichtig ist nun, den Link
/bin/sh so zu setzen, dass er auf die
bash zeigt:
root@host > rm /bin/sh
root@host > ln -s bash /bin/sh
[Zurück zum Start]