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.
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
#
svnlite update /usr/src
check
/usr/src/UPDATING
![]()
#
cd /usr/src
![]()
#
make -j
4
buildworld![]()
#
make -j
4
kernel![]()
#
shutdown -r now
![]()
#
cd /usr/src
![]()
#
make installworld
![]()
#
mergemaster -Ui
![]()
#
shutdown -r now
Holt die neueste Version der Quellen. Abschnitt 23.5.3, „Den Quellcode aktualisieren“ enthält weitere Informationen zum Aktualisieren und Bauen der Quellen. | |
| |
Wechsel in das Bauverzeichnis. | |
Bau des Basissystems, mit Ausnahme des Kernels. | |
Bau und Installation des Kernels. Dieser Schritt
ist gleichbedeutend mit | |
Installation des Basissystems. | |
Aktualisierung und Zusammenführung der
Konfigurationsdateien in
| |
Neustart des Systems mit dem neu erstellten Basissystem und Kernel. |
Lesen Sie /usr/src/UPDATING
. Jeder
manuelle Schritt, welcher vor oder nach der Aktualisierung
erforderlich ist, wird in dieser Datei beschrieben.
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:
#
svnlite 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 svnlite(1) aktualisiert werden kann.
#
svnlite 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.
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.
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
![]()
#
svnlite checkout https://svn.freebsd.org/base/
releng/10.3
/usr/src
Verschiebt das alte Verzeichnis. Wenn es keine lokalen Änderungen in diesem Verzeichnis gibt, kann es gelöscht werden. | |
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. |
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.
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
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.
Das Basissystem und den Kernel mit vier Prozessen bauen:
#
make -j4 buildworld buildkernel
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
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/
,
wobei arch
/conf/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/
/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
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
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.
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.
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.
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
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>.