4.4. Vorbereiten der Arbeitsumgebung

Um Ihre Arbeitsumgebung für die weiteren Schritte vorzubereiten erstellen Sie zwei Dateien für die bash. Geben Sie als Benutzer lfs das folgende Kommando ein, um die neue Datei .bash_profile zu erzeugen:

cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

Wenn Sie sich als Benutzer lfs anmelden, ist die erste Shell üblicherweise eine Login-Shell. Diese liest erst die Datei /etc/profile Ihres Host-Systems ein (sie enthält meistens Einstellungen zu Umgebungsvariablen), und danach .bash_profile. Das Kommando exec env -i.../bin/bash in der zweiten Datei ersetzt die laufende Shell durch eine neue mit einer vollständig leeren Umgebung, mit Ausnahme der Variablen HOME, TERM und PS1. Daduch wird sichergestellt, dass keine ungewollten und potentiell gefährlichen Umgebungsvariablen vom Host-System auf unsere Arbeitsumgebung Einfluss nehmen können. Die hier angewendete Technik mag ein wenig befremdlich wirken, führt aber zu unserem Ziel: einer absolut reinen Arbeitsumgebung.

Die neue Instanz der Shell ist eine Nicht-Login-Shell; diese liest weder /etc/profile noch .bash_profile ein. Stattdessen liest sie die Datei .bashrc, erstellen Sie sie nun:

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF

Das Kommando set +h schaltet die Hash-Funktion der bash ab. Normalerweise ist das sogenannte Hashing der Bash eine nützliche Funktion — Bash benutzt eine Hash-Tabelle, um sich die Pfade zu ausführbaren Dateien zu merken und vermeidet auf diese Weise ein ständiges Durchsuchen aller Ordner. Beim Bau von LFS müssen Sie jedoch alle neu installierten Werkzeuge sofort nutzen können. Durch Abschalten der Hash-Funktion wird für „interaktive“ Kommandos (make, patch, sed, cp und so weiter) immer die neueste verfügbare Version benutzt.

Das Setzen der Dateierzeugungs-Maske (umask) auf 022 bewirkt, dass neu erzeugte Dateien nur durch ihren Besitzer beschreibbar sind, aber für alle anderen les- und ausführbar (wenn der Systemaufruf open(2) die üblichen Datei-Modi benutzt, werden alle neu erzeugten Dateien die Rechte 644 und Ordner die Rechte 755 erhalten).

Die Variable LFS sollte natürlich auf den von Ihnen gewählten Mountpunkt der LFS-Partition gesetzt sein.

Die Variable LC_ALL beeinflusst die Lokalisierung einiger Programme, so dass deren Ausgaben den Konventionen des entsprechenden Landes folgen. Wenn Ihr Host-System eine ältere Glibc-Version als 2.2.4 verwendet, könnte es Probleme geben, wenn LC_ALL nicht auf „POSIX“ oder „C“ gesetzt ist. Durch Setzen von LC_ALL auf „POSIX“ oder „C“ (die beiden Werte haben die gleiche Wirkung) sollte es beim Hin- und Herwechseln in der chroot-Umgebung keine Probleme geben.

Durch das Voranstellen von /tools/bin an die Umgebungsvariable PATH werden alle in Kapitel 5 installierten Programme beim Durchsuchen der Pfade als erstes gefunden und von der Shell sofort benutzt. Zusammen mit dem Abschalten der Hash-Funktion der Bash wird so das Risiko minimiert, dass eventuell alte Programme vom Host-System benutzt werden, obwohl schon eine neuere Version aus Kapitel 5 auf dem System existiert.

Um die Arbeitsumgebung endgültig fertig zu stellen, muss das soeben erzeugte Profil eingelesen werden:

source ~/.bash_profile