Linux wird in der Regel in Form von Distributionen ausgeliefert. Sie booten den PC von einer Live- oder Installations-DVD, installieren das System auf der Festplatte und fertig. Für die meisten Benutzer ist das eine sinnvolle Vorgehensweise. Schließlich möchte man das Linux-System so schnell wie möglich nutzen.
Wer jedoch genau verstehen möchte, wie ein Linux-System im Detail aufgebaut ist und welche Konfigurationsdateien sowie Programmpakete erforderlich sind, der geht einen anderen Weg: Linux from Scratch („Linux von Grund auf“).
Linux from Scratch (LFS) ist keine Distribution, sondern eine ausführliche Anleitung in englischer Sprache. Links für den Download im HTML- oder PDF-Format finden Sie unter www.linuxfromscratch.org/lfs/download.html . Eine Onlineversion von Linux From Scratch gibt es unter www.linuxfromscratch.org/lfs/view/stable , aktuell ist die Version 8.3 vom September 2018. Die Anleitung ist in fortlaufend nummerierte Abschnitte unterteilt. Wir weisen im Artikel jeweils auf die relevanten Kapitel hin, in denen Sie die genannten Befehlszeilen finden.
PC-WELT Download Linux-Betriebssystem Ubuntu
Die LFS-Beschreibung führt zu einem Basissystem ohne grafische Oberfläche, auf dem man aufbauen kann. Dafür gibt es die weiterführende Anleitung Beyond Linux From Scratch (BLFS, www.linuxfromscratch.org/blfs ). Aus Platzgründen behandeln wir in diesem Artikel nur Grundlagen und die ersten Schritte auf dem Weg zu einem LFS-System.

1. Vorbereitungen für Linux from Scratch
Für die Einrichtung von LFS benötigen Sie ein Linux-System und einige Entwicklertools. Möglich ist beispielsweise die Live-DVD mit Ubuntu 16.04, weil hier die nötigen Tools größtenteils vorhanden sind. Bei Ubuntu 18.04 ist das nicht mehr der Fall. Einfacher geht es jedoch, wenn Sie das auf Ihrem PC installierte Linux verwenden. Unsere Beschreibung geht daher davon aus, dass Sie Ubuntu 18.04 (64 Bit) auf der Festplatte eingerichtet haben. Außerdem benötigen Sie eine freie Partition oder besser eine zweite Festplatte. Unsere Anleitung setzt voraus, dass eine Ext4-Partition auf einer zweiten Festplatte im Dateisystem über den Pfad „/mnt/lfs“ erreichbar ist. Der Platzbedarf liegt bei ungefähr 40 GB.
Fast alle Befehlszeilen, die Sie beim Erstellen des Systems ausführen, verwenden die Umgebungsvariable „$LFS“ (Kapitel 2.6), die auf den Ordner „/mnt/lfs“ verweist. Stellen Sie sicher, dass die Variable stets korrekt gesetzt ist. Dazu fügen Sie die Zeile
export LFS=/mnt/lfs
am Ende in die Datei „/root/.bashrc“ sowie in die „.bashrc“ in Ihrem eigenen Home-Verzeichnis ein. Mit
source ~/.bashrc
lesen Sie die geänderte Konfigurationsdatei neu ein und fragen die Variable mit
echo $LFS
ab. Sie erhalten das Ergebnis „/mnt/lfs“. Führen Sie diese Prüfung sicherheitshalber auch ab und zu durch, bevor Sie „$LFS“ in Befehlszeilen verwenden. Wenn die Variable leer ist, werden Dateien auf Ihrem Arbeitsrechner überschrieben.
Installieren Sie nun unter Ubuntu 18.04 die Tools, die zum Kompilieren von Software nötig sind:
sudo apt install build-essential bison flex help2man gperf autopoint gnulib
Bei Ubuntu verweist der symbolische Link „/bin/sh“ auf „/bin/dash“ – eine optimierte Version der Bash-Shell. LFS kommt mit dash nicht zurecht und Sie müssen die Verknüpfung vorübergehend ändern. Beantworten Sie die Eingabe
sudo dpkg-reconfigure dash
mit „Nein“. Nachdem Sie LFS erstellt haben, rufen Sie den Befehl erneut auf und wählen „Ja“.
Buildumgebung testen: Im Kapitel 2.2 finden sich Befehlszeilen, über die Sie das Script „version-check.sh“ erstellen. Führen Sie diese aus und starten Sie das Script:
bash version-check.sh
Sollte das Script Fehler ausgeben, sehen Sie, welche Tools fehlen oder in der falschen Version vorliegen. Installieren Sie die fehlenden Programme oder suchen Sie im Internet nach der angeforderten Version.

2. Die Quelltextpakete herunterladen
Verschaffen Sie sich in einem Terminal administrative Rechte:
sudo -i
Legen Sie dann ein Arbeitsverzeichnis an und laden Sie die Quelltextpakete herunter (Kapitel 3.1):
mkdir -v $LFS/sources chmod -v a+wt $LFS/sources cd $LFS/sources wget http://www.linuxfromscratch.org/lfs/view/stable/wget-list wget –input-file=wget-list –continue –directory-prefix=$LFS/sources
Prüfen Sie, ob alle Dateien korrekt heruntergeladen wurden:
pushd $LFS/sources wget http://www.linuxfromscratch.org/lfs/view/stable/md5sums md5sum -c md5sums popd
Sollten dabei Fehler auftauchen, ist der Downloadserver vielleicht gerade nicht verfügbar oder die Datei ist nicht mehr zu finden. Verwenden Sie in diesem Fall eine Google-Suche, um die fehlende Datei an einem anderen Ort zu finden. In Kapitel 3.2 ist eine Liste aller Pakete inklusive Downloadadressen und MD5-Prüfsummen zu finden.
Zusätzlich benötigen Sie einige Patchdateien. Die Downloadlinks finden Sie in Kapitel 3.3. Zur Zeit sind es nur fünf Dateien, die Sie mit wget (ein Beispiel)
cd $LFS/sources && wget http://www.linuxfromscratch.org/patches/lfs/8.3/bzip2-1.0.6-install_docs-1.patch
herunterladen.
Lesetipp Die besten Systemwerkzeuge für Ubuntu und Mint
3. Abschließende Vorbereitungen
Legen Sie ein Arbeitsverzeichnis für den Toolchain an (Kapitel 4). Darin liegen später alle Tools, mit denen sich das endgültige LFS-System erstellen lässt, beispielsweise der Compiler.
mkdir -v $LFS/tools ln -sv $LFS/tools /
Aus Sicherheitsgründen sollten Sie die Tools nicht als Benutzer „root“ erstellen. Fehler in den Build-Scripts können dazu führen, dass Dateien auf dem Arbeitsrechner überschrieben werden.
Erstellen Sie eine Gruppe und ein Benutzerkonto speziell für den Buildvorgang, vergeben Sie ein Passwort für diesen Benutzer und geben Sie ihm Zugriffsrechte in den Ordnern „$LFS/tools“ und „$LFS/sources“ (Kapitel 4.3):
groupadd lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs passwd lfs chown -v lfs $LFS/tools chown -v lfs $LFS/sources
Wechseln Sie den Benutzerkontext mit
su - lfs
In Kapitel 4.4 finden Sie die Befehlszeilen, über die Sie die Umgebung des Benutzers „lfs“ einrichten. Kopieren Sie die Zeilen in das Terminalfenster und bestätigen Sie mit der Eingabetaste. Führen Sie abschließend
source ~/.bash_profile
aus, um die geänderte Konfiguration einzulesen.

4. Temporäres LFS-System erstellen
Im Ordner „$LFS/sources“ liegen die Quelltextpakete für eine LFS-Erstausstattung. Ab Kapitel 5.4 finden Sie Anleitungen, wie die Pakete zu kompilieren sind. Die Arbeit beginnt mit „5.4. Binutils-2.31.1 – Pass 1“. Die erforderlichen Schritte (siehe Kasten „Programme unter Linux kompilieren“) sind bei allen Paketen ähnlich und als Benutzer „lfs“ durchzuführen:
cd $LFS/sources tar xvf [Dateiname] cd [Paketname]
Für Binutils verwenden Sie diese drei Befehlszeilen:
cd $LFS/sources tar xvf binutils-2.31.1.tar.xz cd binutils-2.31.1
Die nächsten Befehle variieren je nach Tool. Bei Binutils gehen Sie so vor (drei Zeilen):
mkdir -v build cd build ../configure –prefix=/tools –with-sysroot=$LFS –with-libpath=/tools/lib –target=$LFS_TGT –disable-nls –disable-werror
Erstellen Sie die Dateien mit
make
und für Binutils müssen Sie anschließend
case $(uname -m) in x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; esac
ausführen, um auf 64-Bit-Systemen einen symbolischen Link zu erstellen. Im letzten Schritt führen Sie
make install
aus, womit Sie die neu erstellen Programmdateien installieren.
Entsprechend gehen Sie nacheinander auch bei den anderen Tools aus Kapitel 5 vor. Beachten Sie dabei jeweils die leicht abweichenden Konfigurationsschritte.
Probleme beseitigen: Sollte nach „make“ eine Fehlermeldung wie „aclocal-1.16: command not found“ oder ähnlich erscheinen, führen Sie dieses Kommando aus:
autoreconf -ivf
Starten Sie dann die jeweilige „configure“- Zeile und make erneut.
Hinweise: Die langen Befehlszeilen müssen Sie nicht abtippen. Kopieren Sie diese einfach aus der LFS-Anleitung. Dabei ist es wichtig, zwischen einzelnen Befehlszeilen und Anweisungsblöcken zu unterscheiden. „mkdir -v build“ und „cd build“ beispielsweise sind einzelne Befehlszeilen, die Sie auch einzeln kopieren und in das Terminalfenster einfügen (Strg-C, Strg-Shift-V). Der configure-Befehl umfasst ebenfalls nur eine Zeile, für die bessere Lesbarkeit lassen sich Zeilen jedoch mit jeweils einem „“ am Ende umbrechen. Für die Shell bedeutet dies, dass die Zeilen zusammengehören.
Sicherungskopie erstellen: Bevor Sie fortfahren, legen Sie ein Backup des Ordner „/mnt/lfs/tools“ an:
sudo tar cvjf ~/lfs-tools.tar.bz2 /mnt/lfs/tools
Der Inhalt des Ordners wird in Punkt 5 geändert, was ihn unbrauchbar macht, wenn Sie das System später noch einmal neu erstellen wollen.
Auch interessant Gratis-Sicherheits-Leitfaden für Ubuntu Linux
5. LFS-System erstellen
Sie verfügen jetzt über einen Satz vom Werkzeugen im Ordner „$LFS/tools“, mit denen sich das endgültige LFS-System erstellen lässt. Öffnen Sie ein neues Terminalfenster und verschaffen Sie sich „root“- Recht mit dem Befehl
sudo -i
Erzeugen Sie zuerst die Ordner für das virtuelle Dateisystem des Kernels, wie in Kapitel 6.2 beschrieben. Anschließend wechseln Sie (Kapitel 6.4) mit
chroot “$LFS” /tools/bin/env -i HOME=/root TERM=”$TERM” PS1='(lfs chroot) u:w$ ‘ PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin /tools/bin/bash –login +h
in die chroot-Umgebung. In diesem Terminal sehen Sie jetzt das Dateisystem aus der Perspektive von LFS. „/“ ist also nicht mehr das Wurzelverzeichnis Ihres installierten Linux-Systems, sondern des neuen LFS-Systems. Erstellen Sie alle Verzeichnisse und Dateien, wie in den Kapiteln 6.5 und 6.6 beschrieben.
Mit den nächsten Schritten kompilieren Sie die Programme für das Basissystem. Löschen Sie zuerst alle Verzeichnisse, die in „$LFS/sources“ die durch die Schritte in Punkt 4 entstanden sind.
Dann gehen Sie entsprechend vor wie in Punkt 4 beschrieben.
Sie beginnen mit „6.7. Linux-4.18.5 API Headers“ (sieben Zeilen):
cd /sources tar xvf linux-4.18.5.tar.xz cd linux-4.18.5 make mrproper make INSTALL_HDR_PATH=dest headers_install find dest/include ( -name .install -o -name ..install.cmd ) -delete cp -rv dest/include/* /usr/include
Für einige Programme ist zusätzlich ein Patch erforderlich (siehe Punkt 2), beispielsweise „bzip2-1.0.6“. Führen Sie diese Befehle aus:
cd /sources tar xvf bzip2-1.0.6.tar.gz cd bzip2-1.0.6 patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch
Die Patchdatei muss sich im darüberliegenden Verzeichnis „/sources“ befinden. Folgen Sie den weiteren Anweisungen in Kapitel 6.22, um das Tool zu kompilieren.
Arbeiten Sie alle Pakete aus Kapitel 6.7 bis 6.77 ab. Führen Sie anschließend die in den Kapiteln 6.79 und 6.80 beschriebenen Schritte durch. Beachten Sie dabei die teilweise zusätzlichen Befehlszeilen, mit denen Sie beispielsweise Dateien an den erforderlichen Ort im Dateisystem kopieren. Führen Sie außerdem die Testroutinen durch, etwa mit „make check“, wenn diese empfohlen werden.

6. Konfiguration des LFS-Systems
Die Dateien des Basissystems befinden sich jetzt an den richtigen Orten des Dateisystems. Es fehlen aber noch einige Scripts und Dateien, die das System erst lauffähig machen. Einige davon sind im Paket „LFS-Bootscripts-20180820“ enthalten (Kapitel 7.2). In der chroot-Umgebung führen Sie folgende vier Befehlszeilen aus:
cd /sources tar xvf lfs-bootscripts-20180820.tar.bz2 cd lfs-bootscripts-20180820 make install
Außerdem sind Dateien für die Geräte- und Netzwerkkonfiguration erforderlich. Wie sich diese erstellen und anpassen lassen, erfahren Sie in den Kapiteln 7.3 bis 7.9.

7. Bootfähiges LFS-System erstellen
Das vorletzte Kapitel 8 beschreibt, wie Sie die Datei „/etc/fstab“ erstellen sowie anpassen und den Linux-Kernel erstellen. Die Anleitung für den Kernel-Bau ist sehr knapp gehalten, enthält in Kapitel 8.3.1 aber einige Links mit weiterführenden Informationen. Um den Kernel zu erstellen, wechseln Sie in der chroot-Umgebung in den Ordner „/sources/linux-4.18.5“ und geben diesen Befehl ein:
make mrproper
Es ist am einfachsten, eine vorbereitete Konfigurationsdatei für den Kernel zu verwenden, etwa vom laufenden Ubuntu-System. Kopieren Sie in einem anderen Terminalfenster die Datei „config-[Kernel-Version]“ aus dem Ordner „/boot“ des Systems unter dem Namen „.config“ nach „/mnt/lfs/sources/ linux-4.18.5“.
Führen Sie in der chroot-Umgebung
make olddefconfig
aus. Damit werden alle neu hinzugekommen Kernel-Optionen auf die empfohlenen Werte gesetzt. Wenn Sie selbst entscheiden möchten, welche Optionen aktiviert werden, verwenden Sie diesen Befehl:
make oldconfig
Da LFS keine initiale Ramdisk verwendet, müssen die SATA-Treiber und die wichtigsten Treiber für Dateisysteme in den Kernel kompiliert werden. Rufen Sie die Konfiguration über
make menuconfig
auf und aktivieren Sie die gewünschten Treiber.
Erstellen Sie den Kernel, installieren Sie die Kernel-Module und kopieren Sie die Kernel-Dateien in den Ordner „/boot“:
make make modules_install cp -iv arch/x86/boot/bzImage /boot/vmlinuz-4.18.5-lfs-8.3 cp -iv System.map /boot/System.map-4.18.5 cp -iv .config /boot/config-4.18.5
Als letzten Schritt installieren Sie Grub und erstellen eine Grub-Konfigurationsdatei wie in Kapitel 8.4 beschrieben. Danach booten Sie LFS von der Installationsfestplatte. LFS lässt sich auch über Grub des installierten Systems starten. Führen Sie
update-grub
aus, um einen Eintrag im Grub-Bootmenü zu erzeugen.
Programme unter Linux kompilieren
Wer lauffähige Programme aus dem Quelltext erzeugen möchte, benötigt keine Programmierkenntnisse – obwohl diese hilfreich sein können. Wenn alle nötigen Entwicklerpakete installiert sind (siehe Punkt 1), verfügen Sie über einen Compiler (gcc), einen Linker (ld) und ein Tool, mit dem sich Build-Scripts verarbeiten lassen (make). In der Regel gibt es bei der Softwareentwicklung unter Linux vier Schritte: Quelltextarchiv entpacken – configure-Script starten – Software über make kompilieren – mit make install installieren.
configure prüft, ob alle Buildabhängigkeiten erfüllt sind, und gibt gegebenenfalls Fehlermeldungen aus. Dann müssen Sie das benötigte Programmpaket suchen, kompilieren und installieren, um fortfahren zu können. Oft sind aber auch dafür Voraussetzungen zu erfüllen, was einen Abhängigkeitsbaum ergibt, der sich nur schwer auflösen lässt. Deshalb sind die LFS/BLFS-Anleitungen hilfreich, weil sie die Funktionen der Pakete sowie Optionen erklären und eine funktionierende Buildreihenfolge vorgeben.

©Lite

©Antergos

©Kali Linux

©Lorenzo Faletra

©antiX Linux

©Deepin

©Arch Linux

©ReactOS Foundation

©KDE e.V.

©The CentOS Project

©Zorin OS

©SUSE LLC.

©Solus Project

©Red Hat Inc.

©(SPI) Software in the Public Interest, Inc.

©Canonical Ltd.

©elementary.

©Linux Mark Institute / Linux Mint

©MX Community

©Manajro Linux