4.4. Vorbereiten der Arbeitsumgebung

Um Ihre Arbeitsumgebung für die weiteren Schritte vorzubereiten, erstellen Sie zwei Dateien für die Shell 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 wahrscheinlich 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, ausser der HOME, TERM und PS1 Variablen. 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 aussehen, führt aber zu unserem Ziel, nämlich einer absolut leeren Arbeitsumgebung.

Die neue Instanz der Shell ist eine sog. Nicht-Login-Shell; diese liest weder /etc/profile noch .bash_profile ein. Stattdessen liest sie die Datei .bashrc. Erstellen Sie diese Datei 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 von 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 so ein ständiges Durchsuchen aller Ordner zu vermeiden. Jedoch müssen Sie 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 stellt sicher, dass neu erzeugte Dateien nur durch ihren Besitzer beschreibbar sind, aber für alle anderen les- und ausführbar (unter der Annahme, dass der open(2) Systemaufruf Standard-Datei-Modi benutzt werden alle erzeugten Dateien die Rechte 644 und alle erzeugten 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 voranstellen von /tools/bin an die Standard-Umgebungsvariable PATH werden alle in Kapitel 5 installierten Programme von der Shell direkt nach deren Installation 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 auf unserem System existiert.

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

source ~/.bash_profile