23.6. Das Basissystem neu bauen

Sobald der lokalen Quellbaum mit einer bestimmten FreeBSD Version, z.B. FreeBSD-STABLE oder FreeBSD-CURRENT synchronisiert wurde, kann dieser dazu benutzt werden das System neu zu bauen. Dieser Prozess wird auch als die Welt neu bauen bezeichnet.

Bevor das System neu gebaut wird, müssen die folgende Aufgaben erledigt werden:

Prozedur 23.1. Führen Sie diese Aufgaben aus, bevor das System neu gebaut wird
  1. Sichern Sie alle wichtigen Daten auf ein anderes System oder auf Wechselmedien und überprüfen Sie die Integrität der Sicherungskopie. Zudem sollten Sie bootfähige Installationsmedien zur Hand haben. Es kann nicht oft genug betont werden, wie wichtig es ist, vor dem Neubau des Systems eine Sicherung zu machen. Während der Neubau des Systems eine einfache Aufgabe ist, wird es zwangsläufig einmal vorkommen, dass Fehler im Quellcode dazu führen, dass das System nicht mehr bootet. Wahrscheinlich wird die Sicherungskopie nicht benötigt, aber gehen Sie auf Nummer sicher!

  2. Lesen Sie die neuesten Einträge in FreeBSD-STABLE oder FreeBSD-CURRENT, je nachdem welchen Zweig Sie folgen. Informieren Sie sich über bekannte Probleme und welche Systeme davon betroffen sind. Wenn ein Problem für den von Ihnen synchronisierten Code besteht, warten Sie auf eine all clear-Nachricht, die besagt, dass das Problem behoben wurde. Synchronisieren Sie dann die Quellen neu um sicherzustellen, dass die lokale Version die benötigten Korrekturen hat.

  3. Lesen Sie /usr/src/UPDATING für zusätzliche Aufgaben, die für diese Version des Quellcodes notwendig sind. Diese Datei enthält wichtige Informationen über potentielle Probleme. Gegebenenfalls müssen einige Kommandos in einer bestimmten Reihenfolge ausgeführt werden. Manche Aktualisierungen erfordern bestimmte zusätzliche Schritte, die ausgeführt werden müssen, bevor das System neu gebaut wird, wie beispielsweise das umbenennen oder löschen von bestimmten Dateien. Diese Aufgaben sind am Ende der Datei aufgeführt. Die Anweisungen in UPDATING sind aktueller als die in diesem Handbuch. Im Zweifelsfall folgen Sie bitte den Anweisungen aus UPDATING.

Verwenden Sie nicht make world:

Einige ältere Dokumentationen empfehlen make world für den Neubau. Das Kommando überspringt jedoch wichtige Schritte und sollte nur von Experten verwendet werden. In fast allen Fällen ist make world falsch. Benutzen Sie stattdessen die nachstehende Anleitung.

23.6.1. Übersicht

Dieser Prozess geht davon aus, dass ein System von einer älteren Version von FreeBSD auf eine neuere Version aktualisiert wird. Der Quellcode für die neue Version wurde nach den Anweisungen in Abschnitt 23.5, „Synchronisation der Quellen“ synchronisiert.

Das Basissystem enthält den FreeBSD-Kernel, die zentralen Binärdateien, Bibliotheken und Entwicklerdateien sowie einen integrierten Compiler. Die Reihenfolge, in der diese Komponenten gebaut werden, ist wichtig.

Beispielsweise könnte der alte Compiler aufgrund von Fehlern nicht in der Lage sein, den neuen Kernel zu übersetzen. Da der neue Kernel mit dem neuen Compiler übersetzt wird, muss der neue Compiler gebaut, aber nicht notwendigerweise installiert werden, bevor der neue Kernel gebaut wird.

Das neue Basissystem ist eventuell auf neue Funktionen des Kernels angewiesen. Aus diesem Grund muss der neue Kernel installiert sein, bevor das neue Basissystem installiert wird.

Das alte Basissystem wird möglicherweise nicht korrekt mit dem neuen Kernel funktionieren, weshalb das neue Basissystem sofort nach der Installation des neuen Kernels installiert werden muss.

Manche Änderungen an der Konfiguration müssen erledigt worden sein, bevor das neue Basissystem installiert wird, jedoch können andere die Funktionalität des alten Basissystems beeinträchtigen. Aus diesem Grund sind zwei verschiedene Schritte notwendig, um eine Aktualisierung der Konfiguration durchzuführen. Der Aktualisierungsprozess ersetzt zum Großteil Dateien oder fügt neue hinzu, bestehende Dateien werden nicht gelöscht. Da dieser Prozess Probleme verursachen kann, werden in /usr/src/UPDATING gegebenenfalls Dateien aufgelistet, die manuell entfernt werden müssen.

Diese Bedenken haben zu einer empfohlenen Reihenfolge bei der Aktualisierung geführt, die im folgenden Prozess beschrieben wird.

Anmerkung:

Es ist ratsam, die Ausgaben von make in einer Datei zu sichern. Wenn etwas schief geht, kann eine Kopie der Fehlermeldung zu einer der FreeBSD-Mailinglisten gesendet werden.

Dazu können Sie einfach script benutzen, dem Sie beim Aufruf als Parameter den Dateinamen für die Ausgaben mitgeben. Sichern Sie die Ausgaben nicht nach /tmp, da dessen Inhalt beim nächsten Neustart vielleicht verloren geht. Ein besserer Platz ist /var/tmp. Setzen Sie dieses Kommando unmittelbar vor dem Neubau ab und geben Sie exit ein, wenn der Bau abgeschlossen ist:

# script /var/tmp/mw.out
Script started, output file is /var/tmp/mw.out
Prozedur 23.2. Zusammenfassung des Aktualisierungsprozesses

Die verwendeten Kommandos sollten in der hier angegebenen Reihenfolge ausgeführt werden. Die Funktionen der einzelnen Kommandos werden in diesem Abschnitt beschrieben.

  1. Wenn der Bauprozess bereits einmal auf diesem System durchgeführt wurde, existiert vielleicht noch eine Kopie davon in /usr/obj. Um den neuen Bauprozess zu beschleunigen und Ärger aufgrund von Abhängigkeiten zu vermeiden, kann dieses Verzeichnis entfernt werden:

    # chflags -R noschg /usr/obj/*
    # rm -rf /usr/obj
  2. Übersetzen Sie zuerst den neuen Compiler und ein paar damit zusammenhängende Werkzeuge. Verwenden Sie dann den neuen Compiler, um den Rest des Basissystems zu erstellen. Das Ergebnis wird in /usr/obj abgelegt.

    # cd /usr/src
    # make buildworld
  3. Benutzen Sie den neuen Compiler aus /usr/obj, um sich vor falschen Compiler-Kernel-Kombinationen abzusichern. Dies ist notwendig, da sich einige Datenstrukturen geändert haben könnten und Programme wie ps(1) und top(1) nur mit einem Kernel zusammen arbeiten, der auch zu dem entsprechenden Quellcode passt.

    # make buildkernel
  4. Installieren Sie den neuen Kernel und die Kernelmodule, damit Sie den frisch aktualisierten Kernel starten können. Wenn kern.securelevel einen Wert größer als 1 besitzt und der Kernel mit noschg oder ähnlichen Optionen geschützt ist, müssen Sie zuerst in den Single-User-Modus wechseln. Andernfalls läuft dieses Kommando problemlos im Mehrbenutzermodus. Weitere Informationen über kern.securelevel finden Sie in init(8). Optionen, die auf Dateien gesetzt werden können, werden in chflags(1) detailliert erläutert.

    # make installkernel
  5. Starten Sie das System in den Single-User-Modus, damit Probleme mit der Aktualisierung von Programmen, die bereits gestartet sind, minimiert werden. Ebenso minimiert dieser Modus Probleme, die mit der Verwendung des alten Basissystems und des neuen Kernels zu tun haben.

    # shutdown now

    Führen Sie folgende Befehle im Single-User-Modus aus, wenn das System mit einem UFS-Dateisystem formatiert ist:

    # mount -u /
    # mount -a -t ufs
    # swapon -a

    Wenn das System mit ZFS formatiert ist, führen Sie stattdessen folgende Befehle aus. In diesem Beispiel ist der Name des Pools zroot:

    # zfs set readonly=off zroot
    # zfs mount -a
  6. Optional: Wenn eine andere Tastaturbelegung als US-Englisch gewünscht wird, kann diese mit kbdmap(1) angepasst werden:

    # kbdmap
  7. Führen Sie folgenden Befehl aus, wenn die CMOS-Uhr auf die lokale Zeit eingestellt ist (dies ist der Fall, wenn die Ausgabe von date(1) nicht die richtige Zeit anzeigt):

    # adjkerntz -i
  8. Bei der Aktualisierung des Basissystems werden bestimmte Verzeichnisse, wie /etc, /var und /usr ausgelassen. Im nächsten Schritt werden ein paar Konfigurationsdateien zur Vorbereitung für das neue Basissystem aktualisiert. Der folgende Befehl aktualisiert lediglich Dateien, die für das Gelingen von installworld unerlässlich sind. Beispielsweise können neue Gruppen, Systembenutzerkonten, oder neue Startskripten erstellt werden, die seit der letzten Aktualisierung hinzugefügt wurden. Dieser Schritt ist notwendig, damit installworld in der Lage ist, die neuen Konten, Gruppen und Skripten zu verwenden. Weitere Informationen zu diesem Befehl finden Sie in Abschnitt 23.6.4, „Abgleich der Konfigurationsdateien“:

    # mergemaster -p
  9. Installieren Sie das neue Basissystem und die Systemdateien aus /usr/obj:

    # cd /usr/src
    # make installworld
  10. Aktualisieren Sie die verbleibenden Konfigurationsdateien:

    # mergemaster -iF
  11. Löschen Sie veraltete Dateien. Dieser Schritt ist wichtig, da alte Dateien manchmal Probleme bereiten, falls sie nicht entfernt werden:

    # make delete-old
  12. Nun wird ein Neustart benötigt, um den neuen Kernel und das neue Basissystem zu laden:

    # reboot
  13. Stellen Sie sicher, dass alle Ports neu gebaut wurden, bevor die alten Bibliotheken entfernt werden. Folgen Sie dazu den Anweisungen aus Abschnitt 4.5.3, „Ports aktualisieren“. Entfernen Sie anschließend alle veralteten Bibliotheken um Konflikte mit den neuen Bibliotheken zu vermeiden. Weitere Informationen zu diesem Schritt finden Sie in Abschnitt 23.6.5, „Veraltete Dateien und Bibliotheken löschen“.

    # make delete-old-libs

Wenn Sie eine Ausfallzeit des Systems in Kauf nehmen können, sollten sie das System im Single-User Modus bauen. Die Neuinstallation des Systems verändert viele wichtige Systemdateien, Systemwerkzeuge, Bibliotheken und Include-Dateien. Ändern Sie diese Dateien auf einem laufenden System, insbesondere mit aktiven Nutzern, kann dies große Probleme verursachen.

23.6.2. Konfigurationsdateien

Der Bauprozess verwendet verschiedene Konfigurationsdateien.

Das Makefile in /usr/src legt fest, wie die Programme, aus denen FreeBSD besteht, zu bauen sind und in welcher Reihenfolge diese zu bauen sind.

Die verfügbaren Optionen für make werden in make.conf(5) und /usr/share/examples/etc/make.conf beschrieben. Jede Option in /etc/make.conf beeinflusst das Verhalten von make beim Bau von Programmen. Die in /etc/make.conf gesetzten Optionen wirken sich bei jedem Aufruf von make aus, einschließlich beim Bau von Programmen aus der Ports-Sammlung, vom Benutzer geschriebene C-Programme oder beim Bau des FreeBSD-Betriebssystems. Änderungen an einigen Einstellungen können weitreichende und unerwartete Auswirkungen nach sich ziehen. Lesen Sie die Kommentare in diesen beiden Ressourcen und beachten Sie, dass die Standardwerte aus einer Kombination von Leistung und Sicherheit gewählt wurden.

Der Bau des Betriebssystems aus dem Quellcode wird von /etc/src.conf kontrolliert. Im Gegensatz zu /etc/make.conf greifen die Optionen in /etc/src.conf nur dann, wenn das FreeBSD Betriebssystem selbst gebaut wird. Die vielen Optionen für diese Datei werden in src.conf(5) beschrieben. Seien Sie vorsichtig mit dem Entfernen von scheinbar nicht mehr benötigten Kernelmodulen und Optionen. Manchmal gibt es unerwartete oder subtile Wechselwirkungen.

23.6.3. Variablen und Ziele

Ein typischer Aufruf von make sieht wie folgt aus:

# make -x -DVARIABLE target

In diesem Beispiel ist -x eine Option, die an make übergeben wird. Eine Liste gültiger Optionen finden Sie in make(1).

Mit -DVARIABLE setzen Sie eine Variable. Das Verhalten der Makefile wird von Variablen bestimmt. Diese sind etweder in /etc/make.conf eingetragen, oder können an make übergeben werden. Das folgende Beispiel setzt eine Variable, die verhindert, dass die profiled Bibliotheken gebaut werden:

# make -DNO_PROFILE target

Dieser Aufruf entspricht dem folgenden Eintrag in /etc/make.conf:

NO_PROFILE=    true     #    Avoid compiling profiled libraries

Das Ziel sagt make was zu tun ist und das Makefile definiert die verfügbaren Ziele. Einige Ziele werden verwendet, um den Bauprozess in eine Reihe von Einzelschritten zu unterteilen.

Über separate Optionen zu verfügen, ist aus mehreren Gründen nützlich. Erstens erlaubt dies einen Bauprozess, der die Komponenten des laufenden Systems nicht beeinträchtigt. Deswegen können Sie buildworld gefahrlos im Mehrbenutzermodus laufen lassen. Die Installation mit installworld sollte aber immer noch im Single-User-Modus erfolgen.

Zweitens kann, wie in Abschnitt 23.7, „Installation mehrerer Maschinen“ beschrieeben, NFS benutzt werden, um mehrere Maschinen in einem Netzwerk zu aktualisieren.

Mit -j können Sie make anweisen, mehrere Prozesse zu starten. Da der Übersetzungsprozess hauptsächlich von I/O statt der CPU bestimmt wird, ist diese Option für Einprozessor- und Mehrprozessor-Systeme nützlich.

Auf einem typischen Einprozessor-System können Sie den folgenden Befehl eingeben, um bis zu vier Prozesse gleichzeitig laufen zu lassen. Erfahrungsberichte aus den Mailinglisten zeigen, dass dieser Aufruf typischerweise den besten Geschwindigkeitsgewinn bringt:

# make -j4 buildworld

Wenn Sie ein Mehrprozessor-System besitzen, probieren Sie Werte zwischen 6 und 10 aus.

Anmerkung:

Wenn mit make buildworld Variablen verwendet werden, müssen dieselben Variablen auch bei make installworld angegeben werden. Allerdings darf -j zusammen mit installworld nicht benutzt werden.

Haben Sie zum Bauen die folgende Kommandozeile verwendet:

# make -DNO_PROFILE buildworld

dann installieren Sie das Ergebnis mit:

# make -DNO_PROFILE installworld

Andernfalls würde das System bei der Installation versuchen, die profiled Bibliotheken, die aber gar nicht gebaut wurden, zu installieren.

23.6.4. Abgleich der Konfigurationsdateien

Beigetragen von Tom Rhodes.

FreeBSD enthält das mergemaster(8) Bourne-Shell Skript, welches dabei behilflich ist die Unterschiede zwischen den Konfigurationsdateien in /etc und denen unter /usr/src/etc zu finden. Dies ist der empfohlene Weg, die Systemkonfiguration mit dem Quellbaum abzugleichen.

Es ist ratsam, zuerst das bestehende /etc an einen sicheren Ort zu kopieren. Mit -R wird rekursiv kopiert und -p erhält die Zugriffszeiten und Eigentümer der Dateien:

# cp -Rp /etc /etc.old

Beim Aufruf wird mergemaster ausgehend von / einen virtuellen Root-Baum aufbauen und darin die neuen Konfigurationsdateien ablegen. Diese Dateien werden dann mit den auf dem System installierten Dateien verglichen. Unterschiede zwischen den Dateien werden im diff(1)-Format dargestellt. Neue oder geänderte Zeilen werden mit + gekennzeichnet. Zeilen die gelöscht oder ersetzt werden, sind mit - gekennzeichnet. Das Anzeigeformat wird in diff(1) genauer erklärt.

Als nächstes zeigt mergemaster jede geänderte Datei an und Sie haben die Wahl, die neue Datei (auch temporäre Datei genannt) zu löschen, sie unverändert zu installieren, den Inhalt der neuen Datei mit dem Inhalt der alten Datei abzugleichen, oder die Ausgabe noch einmal zu sehen.

Wenn Sie die temporäre Datei löschen, geht mergemaster davon aus, dass Sie die aktuelle Datei unverändert behalten möchten. Die Auswahl dieser Option wird nicht empfohlen. Durch die Eingabe von ? können Sie jederzeit die Hilfe am Prompt von mergemaster aufrufen. Wenn Sie eine Datei überspringen, wird mergemaster diese am Ende erneut präsentieren.

Wenn Sie die temporäre Datei installieren, wird die aktuelle Datei mit der neuen Datei überschrieben. Sie sollten alle unveränderten Konfigurationsdateien auf diese Weise aktualisieren.

Wenn Sie sich entschließen den Inhalt beider Dateien abzugleichen, wird ein Texteditor aufgerufen, in dem Sie beide Dateien nebeneinander betrachten können. Mit der Taste l übernehmen Sie die aktuelle Zeile der links dargestellten Datei, mit der Taste r übernehmen Sie die Zeile der rechts dargestellten Datei. Das Ergebnis ist eine Datei, die aus Teilen der beiden ursprünglichen Dateien besteht und installiert werden kann. Dieses Verfahren wird gewöhnlich bei veränderten Dateien genutzt.

Haben Sie sich entschieden die Differenzen noch einmal anzuzeigen, werden nochmals die Unterschiede in beiden Dateien angezeigt.

Wenn mergemaster alle Systemdateien abgearbeitet hat, werden weitere Optionen abgefragt. Sie werden unter Umständen gefragt, ob die Passwort-Datei neu gebaut werden soll. Am Ende haben Sie die Möglichkeit, die restlichen temporären Dateien zu löschen.

23.6.5. Veraltete Dateien und Bibliotheken löschen

Basiert auf Notizen von Anton Shterenlikht.

Aufgrund der ständigen Weiterentwicklung von FreeBSD kann es dazu kommen, dass Dateien und deren Inhalte obsolet werden, weil deren Funktionalität entweder in anderen Dateien implementiert wurde, sich die Versionsnummer der Bibliothek geändert hat oder die Funktion aus dem System entfernt wurde. Dies kann sowohl Dateien und Verzeichnisse, aber auch Bibliotheken betreffen. Diese veralteten Dateien, Verzeichnisse und Bibliotheken sollten daher entfernt werden, wenn das System aktualisiert wird. Die stellt sicher, dass das System von nicht mehr benötigten Dateien befreit wird. Falls die obsolete Bibliothek Sicherheits- oder Stabilitätsprobleme aufweist, sollte das System ebenfalls aktualisiert werden, um das System sicher zu halten und/oder durch die fehlerhafte Bibliothek verursachte Systemabstürze zu vermeiden. Veraltete Dateien, Verzeichnisse und Bibliotheken sind in /usr/src/ObsoleteFiles.inc aufgelistet. Verwenden Sie die folgenden Anweisungen, um diese Dateien während der Systemaktualisierung zu entfernen.

Nachdem Sie make installworld sowie mergemaster erfolgreich ausgeführt haben, überprüfen Sie das System auf veraltete Dateien und Bibliotheken:

# cd /usr/src
# make check-old

Werden dabei veraltete Dateien gefunden, können diese mit dem folgenden Kommando entfernt werden:

# make delete-old

Bei jeder Datei wird nachgefragt, ob diese wirklich gelöscht werden soll. Es ist aber auch möglich, alle Dateien automatisch löschen zu lassen. Dies erreichen Sie, indem Sie die Umgebungsvariable BATCH_DELETE_OLD_FILES setzen:

# make -DBATCH_DELETE_OLD_FILES delete-old

Alternativ können Sie auch yes einsetzen und somit die Antwort yes an die einzelnen Abfragen weiterreichen:

# yes | make delete-old

Warnung:

Das Löschen veralteter Dateien kann dazu führen, dass Programme, die auf diese Dateien angewiesen sind, nicht mehr funktionieren. Dies gilt insbesondere für veraltete Bibliotheken. In den meisten Fällen ist es dann notwendig, Programme, Ports und Bibliotheken, welche die veraltete Bibliothek verwenden, neu zu bauen, bevor Sie den Befehl make delete-old-libs ausführen.

Die Bibliothek-Abhängigkeiten können mit sysutils/libchk und sysutils/bsdadminscripts geprüft werden.

Veraltete Bibliotheken können zu Konflikten mit neueren Bibliotheken führen und beispielsweise folgende Meldungen verursachen:

/usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5
/usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5

Um diese Probleme zu lösen, müssen Sie zuerst herausfinden, welcher Port die Bibliothek installiert hat:

# pkg which /usr/local/lib/libtiff.so
/usr/local/lib/libtiff.so was installed by package tiff-3.9.4
# pkg which /usr/local/lib/libXext.so
/usr/local/lib/libXext.so was installed by package libXext-1.1.1,1

Danach deinstallieren Sie den Port und bauen ihn neu, um ihn danach erneut zu installieren. Dieser Vorgang kann durch den Einsatz von ports-mgmt/portmaster automatisiert werden. Nachdem alle Ports neu gebaut wurden und keine alten Bibliotheken mehr verwenden werden, können Sie die alten Bibliotheken endgültig entfernen:

# make delete-old-libs

Falls etwas schief geht, ist es leicht einen Teil des Systems wiederherzustellen. Wenn beispielsweise während des Updates oder Abgleichs /etc/magic aus Versehen gelöscht wurde, wird file nicht mehr funktionieren. In diesem Fall kann das Problem mit dem folgenden Kommando behoben werden:

# cd /usr/src/usr.bin/file
# make all install

23.6.6. Häufige Fragen

Muss ich wirklich immer alles neu bauen, wenn sich etwas geändert hat?

Das hängt von den Änderungen ab. Es lohnt wahrscheinlich nicht, alles neu zu bauen, wenn sich bei einem svn-Lauf nur die folgenden Dateien geändert haben:

src/games/cribbage/instr.c
src/games/sail/pl_main.c
src/release/sysinstall/config.c
src/release/sysinstall/media.c
src/share/mk/bsd.port.mk

In diesem Fall können Sie in die entsprechenden Unterverzeichnisse wechseln und dort make all install ausführen. Wenn sich allerdings etwas Wichtiges, wie src/lib/libc/stdlib, geändert hat, sollten Sie die Welt neu bauen.

Einige Benutzer sind vielleicht damit zufrieden, das System alle zwei Wochen neu zu bauen und in der Zwischenzeit die anfallenden Änderungen zu sammeln. Wenn Sie sich zutrauen, alle Abhängigkeiten zu erkennen, bauen Sie vielleicht auch nur die geänderten Sachen neu. Das hängt auch noch davon ab, wie oft Sie ein Update durchführen wollen und ob Sie FreeBSD-STABLE oder FreeBSD-CURRENT benutzen.

Warum bricht der Bau mit vielen Signal 11 Fehlern (oder anderen Signalnummern) ab?

Für gewöhnlich zeigen diese Meldungen Hardwarefehler an. Ein Neubau der Welt ist ein guter Belastungstest für die Hardware und zeigt oft Probleme mit dem Speicher auf. Es liegt garantiert ein Hardwarefehler vor, wenn make neu gestartet wird und an einer anderen Stelle abbricht.

In diesem Fall können nur einzelne Komponenten des Systems, angefangen mit dem RAM, getauscht werden, um zu bestimmen, welche Komponente den Fehler verursacht.

Kann /usr/obj entfernt werden, wenn ich fertig bin?

In diesem Verzeichnis werden alle Dateien abgelegt, die während der Übersetzungsphase erstellt wurden. Dieses Verzeichnis wird in einem der ersten Schritte von make buildworld entfernt. Es macht daher wenig Sinn, dieses Verzeichnis zu behalten. Zudem wird ungefähr 2 GB Plattenspeicher freigegeben, wenn dieses Verzeichnis gelöscht wird.

Kann ein abgebrochener Bau weitergeführt werden?

Das hängt davon ab, wieweit der Bauprozess fortgeschritten ist. Üblicherweise werden durch make buildworld essentielle Werkzeuge und die Systembibliotheken neu erstellt. Die neu erstellten Werkzeuge und Bibliotheken werden dann benutzt, um sich selbst noch einmal zu bauen, und wieder installiert. Anschließend wird das Gesamtsystem mit den neu erstellten Systemdateien gebaut.

Während der letzten Phase können Sie relativ gefahrlos folgende Kommandos ausführen, ohne dabei die von make buildworld erzeugten Dateien zu löschen:

# cd /usr/src
# make -DNO_CLEAN all

Wenn diese Meldung in der Ausgabe von make buildworld erscheint:

--------------------------------------------------------------
Building everything..
--------------------------------------------------------------

dann können Sie den Befehl bedenkenlos ausführen.

Wenn diese Meldung nicht angezeigt wird, dann ist es besser, noch einmal ganz von Vorne anzufangen.

Ist es möglich, den Bauprozess zu beschleunigen?

Es gibt mehrere Maßnahmen um den Bauprozess zu beschleunigen. Zum Beispiel kann der gesamte Prozess im Single-User-Modus ausgeführt werden. Dies verhindert jedoch, dass Benutzer Zugriff auf das System haben, bis der Prozess abgeschlossen ist.

Die sorgfältige Planung von Dateisystemen oder die Verwendung von ZFS können auch einen Unterschied machen. Sie können erwägen, /usr/src und /usr/obj auf separate Dateisysteme zu legen. Wenn möglich, platzieren Sie die Dateisysteme auf separaten Festplatten mit getrennten Platten-Controllern. Verwenden Sie beim einhängen von /usr/src die Option noatime, um die Aktualisierung der Dateizugriffe zu deaktivieren. Falls /usr/src nicht auf einem eigenen Dateisystem liegt, können Sie /usr abhängen und mit noatime neu einhängen.

Das Dateisystem, in dem sich /usr/obj befindet, kann mit async eingehangen werden, so dass Schreibzugriffe auf die Platte asynchron stattfinden. Das heißt ein Schreibzugriff ist sofort beendet, die Daten werden allerdings erst einige Sekunden später geschrieben. Dadurch können Schreibzugriffe zusammengefasst werden, was einen erheblichen Geschwindigkeitszuwachs mit sich bringen kann.

Warnung:

Beachten Sie, dass dies das Dateisystem anfälliger für Fehler macht. Im Fall eines Stromausfalls besteht eine erhöhte Wahrscheinlichkeit, dass das Dateisystem beim Start der Maschine zerstört ist.

Wenn /usr/obj das einzige Verzeichnis auf diesem Dateisystem ist, stellt das kein Problem dar. Wenn sich allerdings auf diesem Dateisystem noch andere wertvolle Daten befinden, stellen Sie sicher, dass Sie über aktuelle Sicherungen verfügen.

Deaktivieren Sie den Bau der profiled-Bibliotheken, indem Sie NO_PROFILE=true in /etc/make.conf eintragen.

Benutzen Sie make zusammen mit -jn, um mehrere Prozesse parallel laufen zu lassen. Für gewöhnlich beschleunigt dies den Bauprozess auf Einprozessor- und Mehrprozessorsystemen.

Was mache ich, wenn etwas nicht funktioniert?

Stellen Sie zuerst sicher, dass sich in der Umgebung keine Reste eines vorherigen Baus befinden:

# chflags -R noschg /usr/obj/usr
# rm -rf /usr/obj/usr
# cd /usr/src
# make cleandir
# make cleandir

Ja, make cleandir muss wirklich zweimal aufgerufen werden.

Danach starten Sie den Bauprozess wieder mit make buildworld.

Wenn Sie immer noch Probleme haben, schicken Sie die Fehlermeldungen und die Ausgabe von uname -a an die Mailingliste 'Fragen und Antworten zu FreeBSD' . Bereiten Sie sich darauf vor, weitere Fragen zu der Umgebung zu beantworten.

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>.