Dämonisch gut
Workshop: Free-BSD 6.0 für Linux-Administratoren – Free-BSD entwickelt sich im Windschatten von Linux technologisch stetig weiter. Die BSD-Lizenz gilt im Vergleich als äußerst liberal, und die Einsatzgebiete des Open-Source-Unix reichen vom Desktop bis zum Multiprozessorserver.






Wer sich mit Linux beschäftigt, stolpert auch immer wieder über BSD-Unix. Hinweise auf das mittlerweile in die drei Projekte Free-BSD, NetBSD und OpenBSD gesplittete Unix-System der Universität von Berkeley tauchen auf Linux vorwiegend in Makefiles oder dem Installationsdokument auf. Hier erkennt der Linux-Anwender, dass sich der eben entpackte Quellcode auch auf anderen Unix-Systemen übersetzen lässt, inklusive BSD. Die populärste und der Software-Entwicklung am schnellsten folgende Variante ist Free-BSD, das mittlerweile in Version 6.0 vorliegt.
Free-BSD und Linux zählen beide zu den Unix-Systemen. Neben den Gemeinsamkeiten, die einem Linux-Anwender schnell ein heimisches Gefühl vermitteln, lauern aber auch Unterschiede. Umsteiger sehen sich mit einer strenger gehandhabten Übergabe der Parameter auf der Kommandozeile konfrontiert, einem anderen Paket-Handling oder der grundverschiedenen Kernel-Konfiguration. Bei der Installation des Free-BSD-Systems dürften Linux-Anwender keine Probleme haben. Das System lässt sich wie eine beliebige Linux-Distribution installieren. Auf eine grafische Setup-Oberfläche muss der Anwender allerdings verzichten. Images des Systems nebst Anwendersoftware (Ports) lassen sich von der Website des Projekts auf www.Free-BSD.org gratis herunterladen.
Runlevel und Skripte verschoben
Der erste signifikante Unterschied taucht beim Systemstart auf: Bei BSD gibt es keine nach Runlevels sortierte Verzeichnishierarchie für die Startskripte wie beim »SysV«-Schema von Linux. Mehr noch: Runlevels existieren überhaupt nicht und demnach auch keine Datei wie »/etc/inittab«, in der die Konfiguration für den Bootstrap liegt. Ein BSD-System versammelt die Skripte in einem einzigen Verzeichnis, und der Anwender kann lediglich zwischen Shutdown, Reboot, Single-User- und Multi-User-Mode wählen. Alle Angaben befinden sich in »/etc/ttys«. Die Datei verwendet ähnliche Konventionen wie »inittab«. Darin sind die virtuellen Terminals »ttyvN« (N={1..9}) gelistet, die Eingaben von der Tastatur annehmen. Auf »ttyv8« befindet sich die grafische Oberfläche, die wie auf Linux über »[Alt]+[F8]« von der Kommandozeile aus erreichbar ist. Normalerweise startet BSD in den Textmodus. Um direkt in das GUI durchzustarten, ändert der Verwalter in »/etc/ttys« die Zeile für »ttyv8« und tauscht schlicht das Wörtchen »off« mit »on«.
Startup-Skripte vereinfacht
Auf einem Linux-System gehört zu jedem Runlevel ein passendes Unterverzeichnis: Für Runlevel 0 ist dies »rc0.d«, für Runlevel 1 »rc1.d« und so weiter. Die »rc«-Verzeichnisse befinden sich je nach Distribution unter »/etc« oder »/etc/rc.d«. Die Unterverzeichnisse enthalten symbolische Links zu den eigentlichen Skripten, die sich in »/etc/init.d« aufhalten. Dabei signalisiert ein »S« am Beginn des Skriptnamens, dass es sich um ein Start-Skript handelt. Dagegen beginnen die Stop-Skripte mit »K« für »Kill«. Der Vater aller Prozesse »init« kann so feststellen, was zu tun ist, sobald das System einen bestimmten Runlevel erreicht.
Weder »init.d« noch ein Runlevel-Verzeichnis ist auf einem BSD-System vorhanden. Dafür trennt BSD die Skripte, die für das System relevant sind von solchen, die Anwendungen starten. Alle Start-Skripte des Systems befinden sich in »/etc/rc.d«. Skripte, die eine Anwendung wie einen Server-Dienst starten, halten sich in »/usr/local/etc/rc.d« auf. Welche Skripte beim Systemstart oder Shutdown ausgeführt werden, kontrollieren einige Skripte in »/etc«, deren Name ausschließlich mit »rc« beginnt. Um das Booten anzupassen, ediert der Administrator diese Skripte nicht direkt, sondern die Datei »rc.conf«, die sich ebenfalls in »/etc« befindet.
Ruft der Verwalter ein Skript direkt auf, passiert das Gleiche wie bei Linux. Das Skript liefert alle Parameter zurück, die sich auf der Kommandozeile übergeben lassen, wie beispielsweise »start« oder »reload«. Bei BSD kommt mit »rcvar« noch eine Option hinzu. »rcvar« fördert die aktuell eingestellten Parameter des Dienstes in »/etc/rc.conf« zu Tage.
Kernel anpassen erlaubt
Wie bei Linux lässt sich auch der Kernel eines BSD-Systems konfigurieren und für die jeweilige Hardware optimiert kompilieren. Allerdings verwenden die Entwickler beider Systeme unterschiedliche Konventionen, wenn sie stabile und instabile Versionen kennzeichnen. Linux verwendet ein Gerade-/Ungerade-Schema. Eine gerade Zahl an zweiter Stelle verrät dem Eingeweihten, dass es sich beispielsweise bei 2.6.12 um eine stabile Produktivversion handelt. Stünde hier eine ungerade Zahl, gehörte der Kernel zur Entwicklungsschiene. Die letzte Nummer gibt schließlich Auskunft über den Patch-Level.
BSD kennzeichnet das Entwicklersystem mit »CURRENT«. Produktivsysteme erhalten das Label »STABEL«. Dahinter folgt die Release-Nummer. Das Team des Free-BSD-Projekts erklärt den Release-Vorgang ausführlich im Dokument »FreeBSD Release Engineering« auf http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng/index.html.
Die Konfiguration des BSD-Kernels und das anschließende Übersetzen der Quellen funktioniert ein bisschen anders als bei Linux. BSD-Kernelquellen sind nicht gepacht wie die Kernel der Linux-Distributionen, was erheblich weniger Probleme verursacht. Häufig scheitert das Compilieren eines Vanilla-Linux-Kernels an Abhängigkeiten, welche die jeweilige Distribution mitbringt. BSD-Anwender haben dieses Problem nicht. Sie laden die Quellen von einem zentral verwalteten Repository auf ein einheitlich gepflegtes System.
Um einen kompletten Quellenbaum zu besorgen, bedient sich der Free-BSD-Benutzer des Werkzeugs »sysinstall«. Darin führt die Option »Configure« zum Paket-Manager, der die Quellen in »src/sys« aufbewahrt. Einmal auf dem System angekommen, lässt sich der Source-Tree bequem via »cvsup« auf dem aktuellen Stand halten. Die Quellen befinden sich im Verzeichnis »/usr/src/sys«. Von dort ist es nur noch ein kurzer Weg zum individuellen Kernel. Zuerst wechselt der Systemverwalter »root« in das Verzeichnis »arch/conf«, wobei »arch« für die Plattform steht. Wir benutzen »i386«, da Free-BSD auf einem x86-Rechner installiert ist. Erste Handlung ist, die Kernel-Konfigurationsdatei »GENERIC« zu kopieren und unter anderem Namen zu speichern. Darin nimmt der Verwalter via Editor Änderungen in der Konfiguration vor. Dies funktioniert nicht so komfortabel wie auf Linux, wo den Anwender gleich drei Werkzeuge zur Kernel-Konfiguration unterstützen.
In »GENERIC« sind jedoch lediglich die Kommentarzeichen »#« am Zeilenanfang einzusetzen, um einen Treiber oder ein Protokoll von der Integration auszunehmen. Die Funktion der einzelnen Optionen sowie die Syntax bei Parameter-Übergabe erklärt das Dokument »NOTES«, das leider nur in englischer Sprache vorliegt.
Sobald root die Kopie des »GENERIC«-Files konfiguriert hat, lässt sich der Kernel mit zwei einfachen Befehlen übersetzen und installieren. Dazu wechselt der Anwender nach »/usr/src«:
cd /usr/src
make buildkernel KERNCONF=CONFNEU
make installkernel KERNCONF=CONFNEU
Die Datei »CONFNEU« ist unsere Kopie und passend ediert. In der Standardeinstellung produziert der Compiler ladbare Module aus den meisten Optionen. Sollen hingegen alle Treiber statisch in den Binär-Kernel eingebunden sein, fügt der Benutzer root folgende Zeile in »CONFNEU« ein:
makeoptions MODULES_OVERRIDE=""
Fertigt der Anwender Module an, zum Beispiel »wlan.ko« für die grundlegende Wireless-LAN-Unterstützung, liegen diese in »/boot/kernel/«. Damit sich die Module auch laden und wieder entladen lassen, stehen die Befehle »kldload« und »kldunload« zur Verfügung.
Software installieren
Software lässt sich auf Free-BSD wie üblich von CD/DVD oder per NFS/FTP auch über ein IP-Netzwerk installieren. Komfortabel ist das Online-Repository, das sich ebenfalls über »sysinstall« aufrufen lässt. Die Regel auf BSD-Systemen lautet: Binaries nur installieren, falls es keine Quellen gibt. Normalerweise besorgt der Administrator Software als Quellencode und übersetzt diese auf dem jeweiligen System. Dies ist inbesondere auf Servern die bevorzugte Methode, um das Maximum an Performance aus der Hardware herauszuholen. Wer auf Linux auf die Hilfe der Distribution verzichtet und Software aus dem Internet holt – egal, welches Paketformat oder welcher Manager dabei zum Einsatz kommt – kennt das Problem der Abhängigkeiten. Pakete für Linux lassen sich nur äußerst zäh installieren, da meist weitere Pakete fehlen, um die erforderlichen Abhängigkeiten beispielsweise zu Bibliotheken aufzulösen.
Free-BSD macht die ganze Prozedur, angefangen vom Herunterladen bis zur Installation des Quellpakets, viel einfacher. Die Free-BSD-Maintainer verwalten mehr als 11000 Quellen-Pakete in der so genannten Ports-Collection, die vergleichbar mit einer Linux-Distribution ist. Diese Pakete sind auf Zuverlässigkeit geprüft und lösen die Abhängigkeiten von selbst auf. Notwendig ist allerdings, dass sich die Beschreibung der Ports-Collection in »/usr/ports« befindet. Die Beschreibung zu integrieren bietet »sysinstall« während der Installation an. Um beispielsweise den Web-Server Apache 2.0 als Source zu installieren, zu übersetzen und letztendlich als Binary im System zu verankern, verwendet der Verwalter folgendes Kommando:
cd /usr/ports/www/apache20
make install clean
Das Beispiel zeigt lediglich die schnelle Variante. Sobald die Quellen auf dem System gelandet sind, sollte die Aufmerksamkeit zuerst dem »Makefile« gelten. Dieses enthält wie auf Linux Anweisungen, um ein optimal auf eine bestimmte Plattform abgestimmtes Binary zu produzieren.
Möchte der Anwender ein vorkompiliertes Binärpaket installieren, benutzt er den Paket-Manager »pkg_add«. Ein Befehl wie
pkg_add -r bash
holt sich das Paket »bash« vom entfernten Rechner »ftp.Free-BSD.org« (-r(emote)), installiert es und holt alle Pakete, die für das Auflösen von Abhängigkeiten benötigt werden (libiconv, gettext), ebenfalls auf das System – alles automatisch.
Umgebung einstellen
Um die Bash als Standard-Shell zu nutzen, muss diese ebenso wie auf Linux in die Passwortdatei eingetragen sein. Die Shadow-Datenbank heißt auf Free-BSD »master.passwd« und sollte nicht direkt ediert werden. Statt dessen hilft das Werkzeug »chpass«, die Shadow-Datei zu bearbeiten und zu verwalten. Die neue Standard-Shell übergibt root mit dem Parameter »-s«:
chpass -s /usr/local/bin/bash
Wer trotzdem lieber den ganzen Inhalt der Datenbank sieht, greift zur vi-Variante »vipw«. Und weil wir gerade beim Systemeditor sind: Der Standardeditor hört auf den Namen »nvi«.
Partitionen identifizieren
Free-BSD benennt Festplatten respektive Partitionen anders. Dies ist bereits bei der Installation wichtig, sofern der Benutzer nicht automatisch partitionieren lässt. Eine BSD-Platte heißt »Slice« und enthält die eigentlichen Partitionen.
Auch das Benennungsschema der einzelnen Partitionen unterscheidet sich von Linux. Free-BSD nennt eine Partition beispielsweise »ad0s1a«. Die Zeichenfolge bezeichnet die erste IDE-Festplatte »ad«, die als Master am ersten Controller »0« hängt. Es folgt via »s1« der Hinweis auf das erste Slice. Zum Schluss ordnet das System die einzelnen Partitionen mit Kleinbuchstaben nach dem Alphabet. Die Konvention verlangt, dass das Root-Verzeichnis stets die Partition »a« ist und die Swap-Partition den Buchstaben »b« zugeordnet bekommt. Die Partitionen befindet sich sauber aufgelistet wie bei Linux in der Datei »/etc/fstab«.
Optische Laufwerke bekommen ein eigenes Label und werden nicht wie von Linux als »hd« (Hard-Disk) bezeichnet. Das erste Atapi-CD/DVD-Laufwerk heißt »acd0«. Das erste Disketten-Laufwerk trägt mit »fd0« die gleiche Bezeichnung, wie sie Linux verwendet.
Mehr Informationen zum System
Das »/proc«-Dateisystem liefert dem Linux-Administrator wichtige Zustandsmeldungen des Systems. Das Dateisystem ist auch auf Free-BSD nutzbar, sofern das Linux-Kompatibilitätspaket installiert ist. Dies fragt »sysinstall« beim Setup explizit nach. Der Pfad zu »/proc« hat sich in BSD allerdings geändert und weist nun nach »/usr/compat/linux/proc«.
Wer lieber den nativen BSD-Infoservice nutzen möchte, experimentiert mit »sysctl«. Das Kommandozeilenprorgamm fördert über den Schalter »-a« alles Erdenkliche an Informationen zu Tage. Über eine Pipe und einem nachfolgenden »grep -i« lassen sich bestimmte Informationen ausgeben, zum Beispiel über die Werte des Netzwerks:
sysctl -a | grep -i net
Mit »sysctl -w« lassen sich auch bestimmte Werte des Kernels wie der Host-Name im laufenden Betrieb ändern. Was genau der
Anwender am System drehen kann, erläutert die Dokumentation. Diese liegt, wie auf Unix-Systemen üblich, als Man-Page vor.
Weitere Dokumentation gibt es online
Die Man-Pages, die Free-BSD standardmäßig liefert, sind mitunter ausführlicher als die entsprechenden Linux-Seiten. Leider gibt es keine Bestrebungen, die ausgezeichnete Dokumentation in andere Sprachen zu übersetzen, wie dies bei Linux der Fall ist.
Dies kompensieren die Free-BSD-Macher jedoch geschickt mit dem Free-BSD-Handbuch, das es in zahlreichen Sprachen gibt, darunter auch Deutsch (www.Free-BSD.org/doc/de_DE.ISO8859-1/books/handbook). Für eine solch einheitliche und treffende Dokumentation würden Linux-Anwender viel geben, wissen sie doch nicht, ob der gerade gefundene Trick auch noch auf einer bestimmten Distribution oder Kernel-Version funktioniert. Dieses Problem haben Free-BSD-Administratoren nicht. Das Handbuch erklärt haarklein die wichtigen Einstellungen genauso wie die Details, die ja erst das individuelle System ausmachen.
Wer sich vorab ein Bild machen möchte oder Probleme bei Installation oder laufendem Betrieb hat, wirft einen Blick in die Free-BSD-FAQ (www.FreeBSD.org/doc/de_DE.ISO8859-1/books/faq/). Immer wieder hilfreich ist auch die Online-Suche nach Man-Pages (www.FreeBSD.org/cgi/man.cgi) oder im Usenet in den entsprechenden Foren (comp.unix.bsd.*, de.comp.os.unix.bsd) zu stöbern.
jr@networkcomputing.de