23.5. FreeBSD aus den Quellen aktualisieren

Das Aktualisieren von FreeBSD aus den Quellen bietet im Vergleich zu binären Updates mehrere Vorteile. Der Quellcode kann mit Optionen gebaut werden, um die Vorteile von spezifischer Hardware zu nutzen. Teile des Basissystems können mit veränderten Einstellungen gebaut, oder falls nicht gewünscht, auch ganz ausgelassen werden. Dieser Prozess dauert zwar länger als die Aktualisierung mit binären Updates, ermöglicht aber eine vollständige Anpassung, um eine individuelle Version von FreeBSD zu erstellen.

23.5.1. Schnellstartanleitung

Diese kurze Referenz zeigt die typischen Schritte um FreeBSD aus den Quellen zu aktualisieren. Spätere Abschnitte beschreiben die Prozedur im Detail.

  • Aktualisierung und Bauprozess

    # svn update /usr/src  1
    check /usr/src/UPDATING  2
    # cd /usr/src          3
    # make -j4 buildworld  4
    # make -j4 kernel      5
    # shutdown -r now      6
    # cd /usr/src          7
    # make installworld    8
    # mergemaster -Ui      9
    # shutdown -r now      10

    1

    Holt die neueste Version der Quellen. Abschnitt 23.5.3, „Den Quellcode aktualisieren“ enthält weitere Informationen zum Aktualisieren und Bauen der Quellen.

    2

    /usr/src/UPDATING enthält Anweisungen für alle manuellen Schritte, die vor oder nach dem Bau der Quellen erforderlich sind.

    3

    Wechsel in das Bauverzeichnis.

    4

    Bau des Basissystems, mit Ausnahme des Kernels.

    5

    Bau und Installation des Kernels. Dieser Schritt ist gleichbedeutend mit make buildkernel installkernel.

    8

    Installation des Basissystems.

    9

    Aktualisierung und Zusammenführung der Konfigurationsdateien in /etc.

    10

    Neustart des Systems mit dem neu erstellten Basissystem und Kernel.

23.5.2. Vorbereitungen zum Aktualisieren aus den Quellen

Lesen Sie /usr/src/UPDATING. Jeder manuelle Schritt, welcher vor oder nach der Aktualisierung erforderlich ist, wird in dieser Datei beschrieben.

23.5.3. Den Quellcode aktualisieren

Der Quellcode von FreeBSD befindet sich in /usr/src/. Die bevorzugte Methode zur Aktualisierung dieser Quellen ist über das Versionskontrollsystem Subversion. Sie sollten sicherstellen, dass der Quellcode unter Versionskontrolle steht:

# svn info /usr/src
Path: /usr/src
Working Copy Root Path: /usr/src
...

Dies ist ein Hinweis darauf, dass /usr/src/ unter Versionskontrolle steht und mit svn(1) aktualisiert werden kann.

# svn update /usr/src

Dieser Vorgang kann einige Zeit in Anspruch nehmen, falls das Verzeichnis nicht zuletzt aktualisiert wurde. Nach Beendigung ist der Quellcode aktuell und der im nächsten Abschnitt beschriebene Bauprozess kann beginnen.

Beschaffung des Quellcodes:

Meldet die Ausgabe '/usr/src' is not a working copy, dann fehlen entweder Dateien, oder das Verzeichnis wurde mit einer anderen Methode aktualisiert. Ein erneuter Checkout der Quellen ist jetzt erforderlich.

Tabelle 23.1. FreeBSD Versionen und Repository-Pfade
Ausgabe von uname -rRepository-PfadBeschreibung
X.Y-RELEASEbase/releng/X.YDie Release-Version inklusive kritischer Sicherheits- und Bugfix-Patches. Dieser Zweig wird für die meisten Benutzer empfohlen.
X.Y-STABLEbase/stable/X

Die Release-Version und alle weitere Versionen auf diesem Zweig. STABLE bezieht sich darauf, dass die Binärschnittstelle (ABI) sich nicht ändert, sodass Anwendungen welche auf älteren Versionen erstellt wurden weiterhin lauffähig sind. Eine Anwendung, welche für FreeBSD 10.1 übersetzt wurde, läuft auch auf FreeBSD 10-STABLE.

STABLE-Zweige haben gelegentlich Fehler und Inkompatibilitäten, welche den Benutzer beeinträchtigen könnten. In der Regel werden diese Fehler aber zügig behoben.

X-CURRENTbase/head/Die neueste unveröffentlichte Version von FreeBSD. Der CURRENT-Zweig kann viele Fehler und Inkompatibilitäten enthalten und wird daher nur für fortgeschrittene Benutzer empfohlen.

Ermitteln Sie mit uname(1) die verwendete FreeBSD-Version:

# uname -r
10.3-RELEASE

Basierend auf Tabelle 23.1, „FreeBSD Versionen und Repository-Pfade“ ist base/releng/10.3 der Repository-Pfad zur Aktualisierung von 10.3-RELEASE. Dieser Pfad wird beim Auschecken der Quellen benutzt:

# mv /usr/src /usr/src.bak  1
# svn checkout https://svn.freebsd.org/base/releng/10.3 /usr/src  2

1

Verschiebt das alte Verzeichnis. Wenn es keine lokalen Änderungen in diesem Verzeichnis gibt, kann es gelöscht werden.

2

Der Pfad aus Tabelle 23.1, „FreeBSD Versionen und Repository-Pfade“ wird der Repository-URL hinzugefügt. Der dritte Parameter ist das lokale Zielverzeichnis für den Quellcode.

23.5.4. Den Quellcode bauen

Die Welt, also das gesamte Basissystem mit Ausnahme des Kernels, wird zuerst übersetzt, um aktuelle Werkzeuge zum Erstellen des Kernels bereitzustellen. Anschließend wird der Kernel gebaut:

# cd /usr/src
# make buildworld
# make buildkernel

Das Ergebnis wird in /usr/obj abgelegt.

Dies sind die grundlegenden Schritte. Weitere Optionen zur Kontrolle des Bauprozesses sind nachfolgend beschrieben.

23.5.4.1. Umgebung für den Bauprozess säubern

Einige Versionen von FreeBSD hinterlassen bereits übersetzten Code im temporären Objektverzeichnis /usr/obj. Dies kann nachfolgende Bauprozesse beschleunigen, da Code, der nicht verändert wurde, nicht neu übersetzt werden muss. Um eine saubere Umgebung für den Bauprozess zu schaffen, benutzen Sie cleanworld bevor Sie mit dem Bau beginnen.

# make cleanworld

23.5.4.2. Anzahl der Prozesse einstellen

Eine höhere Anzahl an Prozessen kann die Geschwindigkeit auf Mehrprozessor-Systemen verbessern. Die Anzahl der Kerne lässt sich mit sysctl hw.cpu bestimmen. Prozessoren variieren ebenso, wie die verschiedenen Build-Systeme von FreeBSD. Sie müssen daher mehrere Versuche starten um zu sehen, wie die Anzahl der Prozesse die Geschwindigkeit beeinflusst. Als Ausgangspunkt können Sie die halbe bis doppelte Anzahl der Kerne als Wert probieren. Die Anzahl der Prozesse wird mit -j angegeben.

Beispiel 23.1. Die Anzahl der Prozesse erhöhen

Das Basissystem und den Kernel mit vier Prozessen bauen:

# make -j4 buildworld buildkernel

23.5.4.3. Nur den Kernel erstellen

Wenn sich der Quellcode verändert hat, muss ein buildworld ausgeführt werden. Danach kann der Kernel mit buildkernel übersetzt werden. Um lediglich den Kernel zu übersetzen:

# cd /usr/src
# make buildkernel

23.5.4.4. Einen angepassten Kernel erstellen

Der FreeBSD Standard-Kernel basiert auf einer Konfigurationsdatei namens GENERIC. Der GENERIC-Kernel enthält die gängigsten Gerätetreiber und Optionen. Manchmal ist es aber sinnvoll oder gar notwendig, einen angepassten Kernel zu erstellen, um Gerätetreiber oder Optionen hinzuzufügen oder zu entfernen, um bestimmte Anforderungen zu erfüllen.

Zum Beispiel könnte jemand, der einen kleinen eingebetteten Rechner mit eingeschränktem RAM entwickelt, nicht benötigte Gerätetreiber oder Optionen entfernen, um den Kernel etwas kleiner zu machen.

Die Kernelkonfigurationsdateien befinden sich in /usr/src/sys/arch/conf/, wobei arch die Ausgabe von uname -m ist. Auf den meisten Rechnern ist dies amd64, demnach befinden sich die Konfigurationsdateien in /usr/src/sys/amd64/conf/.

Tipp:

/usr/src kann aus Versehen gelöscht oder neu erstellt werden. Daher ist es vorzuziehen, angepasste Kernelkonfigurationsdateien in einen separaten Verzeichnis, wie bspw. /root zu speichern und diese in das conf-Verzeichnis zu verlinken. Wenn dieses Verzeichnis gelöscht oder überschrieben wird, kann die Kernelkonfigurationsdatei einfach neu verknüpft werden.

Eine benutzerdefinierte Konfigurationsdatei kann durch Kopieren der GENERIC-Konfigurationsdatei erstellt werden. In diesem Beispiel ist der neue Kernel für einen Speicherserver, heißt also STORAGESERVER:

# cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER
# cd /usr/src/sys/amd64/conf
# ln -s /root/STORAGESERVER .

Jetzt kann /root/STORAGESERVER bearbeitet werden. Die Manualpage config(5) zeigt, wie Treiber und Optionen hinzugefügt oder entfernt werden.

Der angepasste Kernel wird mit der Variablen KERNCONF, die auf die Kernelkonfigurationsdatei verweist, übersetzt:

# make buildkernel KERNCONF=STORAGESERVER

23.5.5. Installation des Codes

Nachdem die Schritte buildworld und buildkernel abgeschlossen sind, wird der neue Kernel und die Welt installiert:

# cd /usr/src
# make installkernel
# shutdown -r now
# cd /usr/src
# make installworld
# shutdown -r now

Wenn ein angepasster Kernel erstellt wurde, muss zusätzlich die Variable KERNCONF gesetzt werden:

# cd /usr/src
# make installkernel KERNCONF=STORAGESERVER
# shutdown -r now
# cd /usr/src
# make installworld
# shutdown -r now

23.5.6. Die Aktualisierung abschließen

Ein paar abschließende Aufgaben beenden die Aktualisierung. Alle Konfigurationsdateien werden mit den neuen Versionen zusammengeführt, veraltete Bibliotheken werden entfernt, dann wird das System neu gestartet.

23.5.6.1. Konfigurationsdateien mit mergemaster(8) zusammenführen

mergemaster(8) bietet einen einfachen Weg, um die Konfigurationsdateien des Systems mit den neuen Versionen dieser Dateien zusammenzuführen.

Mit der Option -Ui aktualisiert mergemaster(8) automatisch Dateien, welche nicht vom Benutzer verändert wurden und installiert neue Dateien, die noch nicht vorhanden sind:

# mergemaster -Ui

Wenn eine Datei manuell zusammengeführt werden muss, erlaubt eine interaktive Anzeige, zu wählen, welche Teile der Dateien beibehalten werden. Die Manualpage mergemaster(8) enthält weitere Informationen.

23.5.6.2. Veraltete Dateien und Bibliotheken entfernen

Nach einer Aktualisierung können sich immer noch veraltete Dateien und Verzeichnisse im System befinden. Diese lassen sich mit folgendem Kommando auflisten:

# make check-old

und löschen:

# make delete-old

Einige veraltete Bibliotheken können ebenfalls noch vorhanden sein. Diese werden mit folgenden Kommando aufgelistet:

# make check-old-libs

und wie folgt gelöscht:

# make delete-old-libs

Programme, die diese alten Bibliotheken noch verwenden, werden nicht mehr funktionieren, wenn die Bibliothek gelöscht wurde. Diese Programme müssen nach dem Löschen der alten Bibliotheken neu gebaut oder ersetzt werden.

Tipp:

Wenn Sie sich sicher sind, dass alle Dateien und Verzeichnisse gelöscht werden können, dann setzen Sie BATCH_DELETE_OLD_FILES, um nicht jede einzelne Datei mit y und Enter bestätigen zu müssen. Zum Beispiel:

# make BATCH_DELETE_OLD_FILES=yes delete-old-libs

23.5.6.3. Neustart des Systems

Zum Abschluss der Aktualisierung muss das System neu gestartet werden, damit alle Änderungen wirksam werden:

# shutdown -r now

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.