Linux-Distributionen von der Stange sind stets bemüht, es möglichst vielen Anwendern recht zu machen – die Individualität bleibt auf der Strecke. Nicht so mit Linux from Scratch.
Die Idee hinter LFS (Linux from Scratch) [1] ist einfach: Bau dir dein eigenes Linux aus den Quellen der Programme. Neben dem erheblichen Lerneffekt bekommt der Anwender am Ende ein auf den Punkt genau maßgeschneidertes Betriebssystem.
Dabei ist LFS im eigentlichen Sinne keine Distribution, sondern eine Anleitung zum selbständigen Erstellen eines kompletten Linux-Systems. Die Live-CD enthält neben dem LFS-Buch und den Sourcecodes die komplette notwendige Entwicklungsumgebung, um Linux from Scratch aufzubauen. Als Nebeneffekt bringt die Live-CD diverse Programme mit, die sie auch für den Einsatz als Rettungssystem mit grafischer Oberfläche prädestinieren.
Da das Einrichten von Linux from Scratch das Kompilieren aller benötigten oder gewünschten Programme voraussetzt, gilt für die Performance des Rechners: Je schneller, desto besser. Um zügig voranzukommen, sollte Ihr Rechner einen mit mindestens 2 GHz getakteten Prozessor sowie 512 MByte Arbeitsspeicher aufweisen. Weiterhin benötigen Sie mindestens 1,5 GByte freien Festplattenplatz, auf den Sie die Quellpakete kopieren und die erstellten Binaries speichern.
Zum reinen Einsatz der Live-CD (Abbildung 1) ohne Kompilier-Ambitionen reicht jedoch ein Rechner mit einer 500-MHz-CPU und 64 MByte Hauptspeicher.

Abbildung 1: Die LFS-Live-CD enthält neben essentiellen Systemwerkzeugen eine komplette Entwicklungsumgebung und alle notwendigen Quellpakete, um ein Linux-System von Grund auf neu zu bauen.
Weiterführende Projekte
Während LFS das Erstellen des Basis-Systems beschreibt, kümmert sich BLFS (Beyond LFS) [2] um das Einrichten verschiedener Server und Desktop-Oberflächen wie KDE oder Gnome auf Basis von LFS. Damit der Anwender nicht jeden Schritt zu Fuß gehen muss, unterstützt das Projekt Automated LFS (ALFS) [3] ihn mit diversen Skripten, welche grundlegende Arbeitsschritte automatisieren. In der gestarteten Live-CD finden Sie diese im Verzeichnis /root/jhalfs-1.0/. Das Projekt Hardened LFS (HLFS) [4] widmet sich der Absicherung des LFS-Grundsystems, befindet sich derzeit jedoch noch in der Entwicklung. Um weitere, in diesen Projekten nicht beschriebene Programme hinzuzufügen, durchforsten Sie LFS Hints [5]. Darin beschreiben verschiedene Anwender das Einrichten unterschiedlicher Software “from scratch”. Derzeit enthält das Sammelsurium über hundert Installationshinweise und Optimierungsvorschläge.
Vorbereitungen
Die nachfolgend beschriebenen Installationshilfen stellen lediglich eine Zusammenfassung des LFS-Books dar, das etwa 280 Seiten umfasst. Die Zahlen in Klammern verweisen auf das jeweilige Kapitel des Handbuches. Eine deutsche Fassung des Manuals finden Sie unter [6], die Kapitelnummerierung entspricht der des englischen Originals.
Nach dem Booten (siehe Kasten “LFS Live-CD”) gilt es zuerst, die benötigte Arbeitsumgebung in Form einer mindestens 1,5 GByte großen Partition vorzubereiten (2.2). Sollte Ihrer Festplatte keine freien Speicherbereiche enthalten, verwenden Sie Partitionierungsprogramme wie das auf der letzten Heft-CD enthaltene Gparted [7], um eine vorhandene Partition zu verkleinern. Im Zuge dessen richten Sie den frei gewordenen Bereich direkt als Ext3-Partition ein.
LFS Live-CD
Die grundsätzliche Idee der Live-CD besteht in erster Linie darin, eine komplette Entwicklungsumgebung mit allen benötigten Quellpaketen zur Verfügung zu stellen. In zweiter Linie dient das System als Rettungs-CD, um defekte Betriebssysteme wieder flott zu machen.
Um die CD normal zu starten, reicht es, am Bootprompt [Eingabe] zu drücken. Verwenden Sie ein SATA-CD-ROM-Laufwerk, geben Sie als Bootoption linux.ata an. Nach Eingabe der landestypischen Merkmale wie Sprache, Tastaturlayout und Zeitzone erreichen Sie die Bash-Shell des Systems.
Bei der Software-Ausstattung der Live-CD ist der Fokus klar zu erkennen: Programme, die als Helfer beim Einrichten von LFS nützlich sein könnten. So sparten die Entwickler an Office- und Multimediaprogrammen zu Gunsten nützlicher Netzwerk- und Kommunikationstools. Neben Chatsoftware wie Gaim oder XChat verfügt die Distribution auch über diverse FTP- und Mailclients sowie die Webbrowser Lynx und Seamonkey 6.2. Um vom Netz auf die Live-CD zuzugreifen, enthält das System unter anderem einen SSH- und NFS-Server samt Client. Die Einwahl in das Internet übernehmen Rp-pppoe oder Pppd.
An Systemwerkzeugen verfügt die Live-CD neben den Standards wie Partitionierungs-und Formatierungsprogrammen über die Bootloader Grub, Lilo und Yaboot. Als eines der wenigen Live-Systeme enthält LFS eine umfangreiche Entwicklungsumgebung, die unter anderem aus Gcc, Bison, Make und Automake besteht.
Die Eingabe von startx startet den Windowmanager Xfce. Mit einem Rechtsklick auf den Desktop gelangen Sie an das Programmmenü. Um das Look & Feel sowie die Optik des Windowmanagers anzupassen, klicken Sie im Menü auf den Eintrag Einstellungen | Alle Einstellungen... Danach öffnet sich der Einstellungsmanager (Abbildung 2).
X-Server: Troubleshooting
Erkennt der X-Server die Bildschirmfrequenz nicht, drücken Sie [Strg]+[Alt]+[Zurück] um zur Kommandozeile zurückzukehren. Um die zum Bearbeiten der Datei /etx/X11/xorg.conf benötigten Werte zu erhalten, tippen Sie gtf HorizontaleAuflösungVertikaleAuflösungWiederholfrequenz, beispielsweise gtf 1024 768 75. Die Ausgabe sieht etwa wie folgt aus:
# 1024x768 @ 70.00 Hz (GTF) hsyn? c: 56.00 kHz; pclk: 76.16 MHz Modeline "1024x768_70.00" 76.? 16 1024 1080 1192 1360 …
Notieren Sie den Wert hinter hsync: und öffnen Sie die Datei /etx/X11/xorg.conf. Suchen Sie darin nach dem Abschnitt Section "Monitor" und fügen Sie diesem folgende Einträge hinzu:
HorizSync 30-Hsync VertRefresh 56-MaxRefresh
Tragen Sie als letzte Ziffer hinter HorizSync den aufgerundeten hsync:-Wert ein und als letzte Zahl hinter VertRefresh die maximale Wiederholrate Ihres Monitors (Abbildung 3). Verwenden Sie ein TFT, geben Sie hier die Zahl 60 an. Danach starten sie den X-Server erneut und gelangen auf die grafische Oberfläche in der maximal möglichen Auflösung.
Etwas umständlicher, aber ebenso möglich ist das Verwenden der bordeigenen Werkzeuge parted, cfdisk und mkfs.ext3, um die Partition zu erstellen und zu formatieren. Da das Kompilieren zum Teil viel Hauptspeicher benötigt, gilt es, falls noch nicht vorhanden, eine Swap-Partition einzurichten. Diese sollte bei einer niedrigeren RAM-Bestückung (bis 512 MByte) etwa die dreifache Größe des Hauptspeichers besitzen, andernfalls etwa die doppelte Größe.
Zum Aktivieren des Swap-Bereichs geben Sie das Kommando swapon -v /dev/Partition ein. Um sich künftig Tipparbeit zu ersparen, erstellen Sie die Umgebungsvariable $LFS mit dem Aufruf export LFS=/mnt/lfs (4.1). Da Sie diese Variable an verschiedenen Stellen benötigen, sollten Sie mit dem Kommando echo $LFS vor jeder Arbeit an Ihrem LFS prüfen, dass diese richtig gesetzt ist. Mit dem Aufruf mount -v -t ext3 /dev/Partition $LFS (2.4) hängen Sie die neu erstellte Partition im Verzeichnis /mnt/lfs ein.

$LFS.” width=”300″ height=”108″ />
Abbildung 4: Einer der wichtigsten vorbereitenden Schritte beim Einrichten der Arbeitsumgebung ist das Setzten der Umgebungsvariable$LFS. Erstellen Sie als nächsten Schritt in der gemounteten Partition das Verzeichnis sources, und versehen Sie dieses mit dem Kommando chmod -v a+wt $LFS/sources mit den notwendigen Rechten. Danach kopieren Sie die Quellpakete aus dem Verzeichnis /lfs-sources mit dem Aufruf cp /lfs-sources/* $LFS/sources/ in den Ordner auf der Festplatte. Im Anschluss erstellen Sie den Ordner $LFS/tools, der als Verzeichnis für kompilierte Programme dient, und setzten den Symlink ln -sv $LFS/tools / (4.2).
Damit kleine Fehler keine großen Folgen verursachen, legen Sie einen neuen Benutzer und eine neue Gruppe an, mit der Sie zukünftig arbeiten:
groupadd lfs useradd -s /bin/bash -g lfs -m ? -k /dev/null lfs
Let the show begin
Nach Abschluss der Vorbereitungen geht es nun ans Eingemachte – dem Erstellen eines temporären Minimalsystems, das als Grundlage zum Bau des endgültigen LFS dient. Als ersten Schritt erzeugen Sie eine hostunabhängige Toolchain (Compiler, Assembler etc.), mit deren Hilfe Sie die essentiellen Werkzeuge erstellen (5.1).
Das erste Paket, das Sie zu diesem Zweck kompilieren, sind die Binutils (5.3), eine Sammlung von Softwareentwicklungswerkzeugen, die unter anderem Linker und Assembler zur Arbeit mit Objektdateien enthalten. Es folgen die Compiler (5.4), Header-Dateien (5.5) und Bibliotheken. Danach ist die Toolchain fertig eingerichtet; Sie müssen sie nur noch wie in Abschnitt 5.7 beschrieben den Gegebenheiten anpassen.
Das Kompilieren aller Pakete erfolgt mit dem bekannten Dreisatz configure, make und make install, wobei die Configure-Parameter natürlich von Paket zu Paket variieren. Bei einige Paketen wie der Bash gilt es, diese vor der dem Kompilieren zu patchen. Das geschieht im Quellverzeichnis des jeweiligen Programms mit dem Aufruf patch -Np1 ../Patch-Datei. Die ausführliche Installationsanleitung für jedes Programm im LFS-Tutorial weist auf zu patchende Pakete hin, und erklärt auch die Vorgehensweise.
Teil III der Installationsanleitung (6.1) beschäftigt sich abschließend mit der Installation des Systems in einer Chroot-Umgebung.
Langeweile?
Gut Ding braucht Weile – diese geflügelten Worte gelten erst recht beim Kompilieren eines Betriebssystems. Um eine halbwegs zuverlässige Aussage über die Dauer auf verschiedenen Rechnern zu geben, ersannen die Entwickler den so genannten SBU als Richtwert. Ein SBU entspricht der Zeitspanne, die Ihr Rechner zum kompilieren der Standard-Komponente Binutils benötigt.
Dauert dieser Vorgang auf Ihrem System beispielsweise 40 Minuten, benötigt ein Programm mit der SBU 0,5 etwa 20 Minuten zum Kompilieren. Einen Überblick verschiedener Systeme und SBUs finden Sie auf der Webseite [8]. Ebenfalls gibt die Installationsbeschreibung der verschiedenen Pakete die geschätzte Kompilierzeit in SBU an.
Kaum jemand wird Linux from Scratch in einem Arbeitsschritt fertig stellen – es sei denn, er gewöhnt sich das Schlafen ab. Da die LFS-Live-CD keine Möglichkeiten kennt, die gesetzten Umgebungsvariablen, Benutzer und Gruppen zu speichern, gilt es entweder, den Rechner ständig in Betrieb zu lassen, bis LFS fertig ist, oder die Settings nach dem Reboot neu einzurichten. Die Webseite [9] fasst die Anpassungen aus den verschiedenen Kapiteln zusammen. Idealerweise erstellen Sie aus diesen Werten ein Script, das diese Modifikationen auf Befehl für Sie erledigt.
Fazit
Wer schon immer mal wissen wollte, wie Linux im Detail funktioniert, dem bietet LFS die ideale Basis, es am lebenden Objekt herauszufinden. Das Live-System enthält neben den Quellpaketen die notwendige Entwicklungsumgebung, die Sie benötigen, um sofort loszulegen. Als Zusatznutzen dient die CD dank zahlreicher Systemtools als Rettungssystem mit grafischer Oberfläche.
Leider enthält die Distribution keinerlei Möglichkeiten, benutzerdefinierte Einstellungen zu speichern, weswegen notwendige Anpassungen wie das Setzen von Umgebungsvariablen bei jedem Neustart von Hand vorzunehmen sind.
Glossar
-
Chroot
-
Steht für “changed root” und ist ein Programm, welches das Wurzelverzeichnis ändert und damit quasi ein autonomes System erstellt. Es dient zum einen zum Absichern von Diensten wie FTP- oder Mailservern und zum anderen zum Erstellen von Entwicklungs- und Testumgebungen.
Infos
[1] LFS Live-CD: http://www.linuxfromscratch.org/livecd/
[2] BLFS: http://www.linuxfromscratch.org/blfs/
[3] ALFS: http://www.linuxfromscratch.org/alfs/
[4] HLFS: http://www.linuxfromscratch.org/hlfs/
[5] LFS Hints: http://www.linuxfromscratch.org/hints/index.html
[6] Deutsche Übersetzung des LFS-Buchs: http://oss.erdfunkstelle.de/lfs-de/6.2/online/index.html
[7] Gparted Live-CD: http://gparted.sourceforge.net/livecd.php
[8] LFS SBU (Zeitindex): http://www.linuxfromscratch.org/~bdubbs/index.html
[9] LFS-Arbeit unterbrechen und wiederaufnehmen: http://www.linuxfromscratch.org/hints/downloads/files/stages-stop-and-resume.txt


