Channel Header
2394069

Für Linux-Kenner: So bauen Sie sich ein Linux von Grund auf neu

18.12.2018 | 15:02 Uhr |

Technisch interessierte Nutzer finden bei Linux-Distributionen kaum noch eine Herausforderung. Wer Linux wirklich von Grund auf verstehen möchte, kann bei Null anfangen – mit Linux from Scratch.

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.

Linux from Scratch: Anleitung zum konstruieren eines Linux-System von Grund auf.
Vergrößern Linux from Scratch: Anleitung zum konstruieren eines Linux-System von Grund auf.

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.

Um Linux from Scatch zu erstellen, müssen Sie kleine Änderungen in Ubuntu vornehmen.
Vergrößern Um Linux from Scatch zu erstellen, müssen Sie kleine Änderungen in Ubuntu vornehmen.

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.

Toolchain erstellen: Zuerst erstellen Sie die Entwicklertools, die Sie benötigen, um die Programme für das LFS-System zu kompilieren (beispielsweise Binutils).
Vergrößern Toolchain erstellen: Zuerst erstellen Sie die Entwicklertools, die Sie benötigen, um die Programme für das LFS-System zu kompilieren (beispielsweise Binutils).

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.

Zweite Phase: In der chroot-Umgebung arbeiten Sie bereits im LFS-System und kompilieren alle nötigen Programme und Systemtools.
Vergrößern Zweite Phase: In der chroot-Umgebung arbeiten Sie bereits im LFS-System und kompilieren alle nötigen Programme und Systemtools.

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.

Der erste Start: Das LFS-Basissystem sieht nicht spektakulär aus, ist aber ausbaufähig.
Vergrößern Der erste Start: Das LFS-Basissystem sieht nicht spektakulär aus, ist aber ausbaufähig.

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.

PC-WELT Marktplatz

0 Kommentare zu diesem Artikel
2394069