Open Source im professionellen Einsatz
Linux-Magazin 11/2002

Der Weg zur eigenen Minidistribution

Klein, stark und selbst gebraut

Kommerzielle Distributionen werden größer und größer und lassen sich immer schwieriger abspecken. Bereits bestehende Minidistributionen helfen oft, jedoch nicht immer. Es ist aber keine Hexerei, selbst Herausgeber einer (Mini-)Distribution zu werden.

732

Jeder noch so altersschwache Computer kann als Printserver oder Router im Büro- oder Heimnetz mit Linux gute Dienste leisten - so heißt es jedenfalls. Im Prinzip ist das auch richtig. Wer aber für seinen 486er eine moderne Distribution kauft, hat ein Problem. Das erforderliche Abspecken und Konfigurieren verlangt eine Menge Spezialwissen - falls man überhaupt so weit kommt. Wenn schon die Installation wegen Speichermangels nicht abgelehnt wird, dann scheitert sie vielleicht an einer zu kleinen Festplatte.

Auch bei Embedded Devices sind Speicherplatz sparende Distributionen unerlässlich. Moderner Flash-Speicher hat zwar eine vergleichsweise hohe Speicherkapazität, der sollte aber vor allen Dingen dem Anwendungsprogramm und den Benutzerdaten zustehen und nicht dem Betriebssystem. Ein Basissystem von der Stange ist also für beide Fälle nicht geeignet.

Doch mit geringem Aufwand ist ein System nach Maß zusammengestellt. Dass ein lauffähiges Linux-System einen Kernel benötigt, ist eine Trivialität. Was mindestens sonst noch dazugehört, ist dagegen nicht jedem bekannt. Ein kleines Experiment weist den Weg. Dazu wird ein Kernel auf eine leere Diskette kopiert:

# cp /boot/vmlinuz /dev/fd0
# rdev /dev/fd0 /dev/fd0

Der Kernel kann je nach Ausgangssystem auch anders heißen. Der letzte Befehl wird später näher erläutert, er dient hier nur dazu, reproduzierbare Ergebnisse zu haben.

Aus dem Nichts

Danach wird ein Rechner damit gebootet. Die Frage nach der Root-Floppy erhält einfach eine Eingabe als Antwort. Die Abbildung 1 (hier im X86-Emulator Bochs[1]) zeigt das Ergebnis. Nachdem der Kernel während des Bootens alle Subsysteme initialisiert hat, übergibt er die Kontrolle an den Userspace. Dazu ist als erster Schritt das Root-Filesystem zu mounten. Dieses System heißt so, weil sich das Wurzelverzeichnis »/« hier befindet. Ohne Root-Filesystem kommt es zu einem bei normalen Linux-Systemen glücklicherweise recht seltenen Ereignis - zu einer Kernel Panic. Das System steht dann also still, noch bevor es richtig gestartet ist.

Damit ist das Root-Filesystem neben dem Kernel die zweite grundlegende Komponente eines Linux-Systems. Es besteht aus einer Verzeichnishierarchie und einer Reihe von notwendigen Dateien und befindet sich entweder auf einem Datenträger (in den meisten Fällen ist das eine Diskette oder eine Festplattenpartition) oder auf einer RAM-Disk, die einen Datenträger im Speicher simuliert. Diese Art von Datenträgern heißt Blockdevice.

Abbildung 1: Ein fehlendes Root-Filesystem führt zur Kernel Panic.

Das Root-Filesystem

Woher weiß der Kernel aber, welches Device er als Root-Filesystem mounten soll? Der Default ist im Kernel einkompiliert und im Byte 508 kodiert. Festgelegt ist er durch die Variable »ROOT_DEV« im Toplevel-Makefile der Kernel-Sourcen. Nachträglich lässt sich der Wert über den »rdev«-Befehl ändern, im Beispiel oben also auf das Floppy-Laufwerk. (»/dev/fd0« hat die so genannte Major-Nummer »2« und Minor-Nummer »0« - in der Fehlermeldung in Abbildung 1 ist auch die Major:Minor-Nummer des Device zu sehen, auf dem das Root-Filesystem gesucht wurde.)

Ohne das »rdev«-Kommando könnte das gezeigte Beispiel mit etwas Glück ein existierendes Linux-System booten, nämlich genau dann, wenn das einkompilierte Root-Filesystem tatsächlich auf der Festplatte vorhanden ist.

Zum Root-Filesystem gehören einige wenige Toplevel-Verzeichnisse und die darin enthaltenen Dateien und Unterverzeichnisse. Details zum richtigen Aufbau der Verzeichnishierarchie sind im so genannten Filesystem Hierarchy Standard (FHS) festgelegt[2]. Für eine Minidistribution sollen natürlich nur die allernötigsten Dateien vorhanden sein.

Was ist also das absolute Minimum, mit dem ein laufendes Linux-System auskommt? Das Mounten des Root-Filesystems. Es erfolgt mit dem Device »/dev /root«, das vom Kernel quasi automatisch erzeugt wird. Deshalb wird ein »/dev«-Verzeichnis benötigt.

Nach dem Mount folgen das Öffnen einer Initial Console sowie der Start des Init-Prozesses. Die Initial Console ist in den Kernel-Quellen fest als »/dev/console« verdrahtet, der Init-Prozess kann an sich ein beliebiges Programm sein. Als Default sucht der Kernel die Datei »/sbin/init«. Findet er diese Datei nicht, sucht er immer der Reihe nach »/etc /init«, »/bin/init« und »/bin/sh«. Hier zeigt sich wieder, dass der Kernel noch einiges an historisch wertvollen Stücken mit sich rumschleppt.

Bei vollständigen Linux-Systemen ist das Init-Programm natürlich deutlich komplexer als lediglich ein Shell-Aufruf. Es startet eine Reihe von Prozessen, die letztlich das gesamte System initialisieren. Der Init-Prozess mit der Prozess-ID »1« bleibt dabei bis zum Shutdown erhalten und bildet die Wurzel aller Prozesse. Das lässt sich sehr gut mit »pstree -pG« oder einer grafischen Prozessanzeige veranschaulichen.

Abbildung 2: Mu Linux ist ein kleines, aber umfassend erweiterbares System.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Ausgabe 11/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.