Wie aktualisiere und upgrade ich FreeBSD?
FreeBSD befindet sich zwischen den Versionen in ständiger Entwicklung. Andere möchten mit den neuesten Entwicklungen Schritt halten, während andere es vorziehen, die offiziell veröffentlichten Versionen zu nutzen. Jedoch werden selbst offizielle Versionen oft mit wichtigen Sicherheits- und anderen Patches aktualisiert. FreeBSD bietet alle erforderlichen Werkzeuge, um das System auf dem neuesten Stand zu halten, und erleichtert Upgrades zwischen den Versionen, unabhängig von der installierten Version. Dieses Tutorial zeigt, wie man das Entwicklungssystem überwacht und die grundlegenden Werkzeuge zur Pflege eines aktuellen FreeBSD-Systems verwendet.
Nach Abschluss dieses Tutorials werden Sie verstehen:
-
Wie man ein aktuelles FreeBSD-System mit freebsd-update oder Git aufrechterhält.
-
Wie man den installierten Zustand eines Systems mit einer bekannten, einwandfreien Kopie vergleicht.
-
Wie man Git oder Dokumentationsports verwendet, um die installierte Dokumentation aktuell zu halten.
-
Der Unterschied zwischen den Entwicklungszweigen FreeBSD-STABLE und FreeBSD-CURRENT.
-
Wie man das gesamte Betriebssystem ersetzt und neu aufbaut.
Wie aktualisiert man FreeBSD?
Wichtige Komponenten der kontinuierlichen Systemverwaltung umfassen das rechtzeitige Anwenden von Sicherheitsupdates und das Upgrade auf eine neuere Version eines Betriebssystems. Das FreeBSD-Programm freebsd-update
wird verwendet, um beide dieser Operationen durchzuführen.
Das Dienstprogramm freebsd-update wird verwendet, um binäre Updates für das FreeBSD-Betriebssystem abzurufen, zu installieren und zurückzusetzen. Dieses Programm ermöglicht binäre Sicherheits- und Errata-Updates für FreeBSD, wodurch die Notwendigkeit entfällt, einen Patch oder einen neuen Kernel manuell zu erstellen und zu installieren. Bitte beachten Sie, dass Updates verfügbar sind, wenn sie für die FreeBSD-Version und Architektur, die derzeit verwendet wird, erstellt werden. das FreeBSD Security Team entwickelt hauptsächlich Upgrades für binäre Releases, die vom FreeBSD Release Engineering Team veröffentlicht wurden, z.B. FreeBSD 11.2-RELEASE und 12.0-RELEASE, aber nicht FreeBSD
FreeBSD 11.2-STABLE oder 13.0-CURRENT. Das Sicherheitsteam unterstützt alle Architekturen und Versionen, für die binäre Updates verfügbar sind. Die unterstützte Release-Liste und die erwarteten End-of-Life-Daten finden Sie unter https://www.FreeBSD.org/security/
.
Diese Anwendung ermöglicht Betriebssystem-Updates auf kleinere Punktversionen und Upgrades auf einen anderen Release-Zweig. Überprüfen Sie die Veröffentlichungsankündigung, bevor Sie auf eine neue Version aktualisieren, da sie wichtige Informationen über die Veröffentlichung enthält. Veröffentlichungsankündigungen finden Sie unter https://www.FreeBSD.org/releases/
.
Der stabile Branch jeder Hauptversion von FreeBSD wird offiziell fünf Jahre lang gepflegt, aber einzelne Punktversionen werden nur drei Monate nach der nächsten Punktversion unterstützt. Zum Zeitpunkt des Schreibens sind die unterstützten FreeBSD-Versionen wie folgt aufgeführt:
Zweig | Version | Veröffentlichungsdatum | Erwartetes EoL |
---|---|---|---|
stable/13 | n/a | n/a | 31. Januar 2026 |
releng/13.1 | 13.1-RELEASE | 16. Mai 2022 | 13.2-RELEASE + 3 Monate |
stable/12 | n/a | n/a | 31. Dezember 2023 |
releng/12.3 | 12.3-RELEASE | 7. Dezember 2021 | 12.4-RELEASE + 3 Monate |
releng/12.4 | 12.4-RELEASE | 5. Dezember 2022 | 31. Dezember 2023 |
Tabelle 1. Unterstützte FreeBSD-Versionen
Zukünftige FreeBSD-Veröffentlichungspläne sind unten aufgeführt. Bitte beachten Sie, dass die Veröffentlichungstermine geschätzt und Änderungen unterworfen sind.
Datum | Ereignis |
---|---|
März 2023 | FreeBSD 13.2 |
Juli 2023 | FreeBSD 14.0 |
Tabelle 2. Bevorstehende FreeBSD-Veröffentlichungstermine
Dieser Abschnitt beschreibt die Konfigurationsdatei, die von freebsd-update
verwendet wird, veranschaulicht, wie man einen Sicherheitspatch bereitstellt und auf eine kleinere oder größere Betriebssystemversion aktualisiert, und geht auf einige Upgrade-Bedenken ein.
Wie pflegt man die Konfigurationsdatei?
Die Standardkonfigurationsdatei für freebsd-update
ist voll funktionsfähig. Einige Benutzer möchten möglicherweise die Standardeinstellung in /etc/freebsd-update.conf
ändern, um das Prozessmanagement zu verbessern. Die Kommentare in dieser Datei erläutern die möglichen Optionen, jedoch könnte das Folgende mehr Klarheit benötigen.
-
Die folgende Einstellung bestimmt, welche Komponenten von FreeBSD aktuell gehalten werden. Standardmäßig werden das gesamte Basissystem und der Kernel aktualisiert. Einzelne Komponenten, wie
src/base
odersrc/sys
, könnten stattdessen bereitgestellt werden. Es ist jedoch vorzuziehen, dies so zu belassen, da eine Änderung zur Einbeziehung bestimmter Objekte erfordert, dass jedes Element aufgelistet wird. Dies könnte im Laufe der Zeit schwerwiegende Folgen haben, da Quellcode und Binärdateien aus dem Gleichgewicht geraten könnten.# Components of the base system which should be kept updated.
Components world kernel -
Um bestimmte Ordner vom Aktualisierungsprozess auszuschließen, wie z.B.
/bin
oder/sbin
, fügen Sie deren Pfade zu den folgenden Einstellungen hinzu. Diese Option kann verwendet werden, um zu verhindern, dass lokale Änderungen vonfreebsd-update
überschrieben werden.# Paths which start with anything matching an entry in an IgnorePaths
# statement will be ignored.
IgnorePaths /boot/kernel/linker.hints -
Liste der Ordner, die Konfigurationsdateien enthalten, die von
freebsd-update
zusammengeführt werden sollen. Ähnlich wiemergemaster
, aber mit weniger Einstellungen, ist der Dateimerging-Prozess eine Folge vondiff
-Patches. Merges werden entweder akzeptiert, ein Editor wird geöffnet oderfreebsd-update
wird beendet. Wenn unsicher, sichern Sie/etc
und akzeptieren Sie die Zusammenführungen.# Paths which start with anything matching an entry in an UpdateIfUnmodified
# statement will only be updated if the contents of the file have not been
# modified by the user (unless changes are merged; see below).
UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile -
Die nächste Option wird nur Konfigurationsdateien aktualisieren, die in den angegebenen Ordnern nicht aktualisiert wurden. Alle vom Benutzer vorgenommenen Änderungen verhindern, dass diese Dateien automatisch aktualisiert werden.
KeepModifiedMetadata
ist eine alternative Option, diefreebsd-update
anweist, Änderungen während des Zusammenführens zu speichern.# When upgrading to a new FreeBSD release, files that match MergeChanges
# will have any local changes merged into the version from the new release.
MergeChanges /etc/ /var/named/etc/ /boot/device.hints -
Das folgende
WorkDir
-Verzeichnis enthält alle Patch-Dateien und temporären Dateien. Wenn der Benutzer ein Versionsupgrade durchführt, sollte dieser Speicherort mindestens 1 GB freien Speicherplatz haben.# Directory in which to store downloaded updates and temporary
# files used by FreeBSD Update.
# WorkDir /var/db/freebsd-update -
Wenn die nächste Option durch Setzen auf
ja
aktiviert ist, wird freebsd-update davon ausgehen, dass dieComponents
-Liste vollständig ist und keine Änderungen außerhalb der Liste vornehmen.freebsd-update
wird versuchen, jede Datei in derComponents
-Liste zu aktualisieren.# When upgrading between releases, should the list of Components be
# read strictly (StrictComponents yes) or merely as a list of components
# which *might* be installed of which FreeBSD Update should figure out
# which actually are installed and upgrade those (StrictComponents no)?
# StrictComponents no
Wie wendet man Sicherheitspatches an?
Der Prozess der Bereitstellung von FreeBSD-Sicherheitsupdates wurde optimiert, sodass ein Administrator ein vollständig gepatchtes System mit freebsd-update
aufrechterhalten kann.
Sie können FreeBSD-Sicherheitsupdates mit den folgenden Anweisungen herunterladen und installieren. Der erste Befehl bestimmt, ob es ausstehende Patches gibt und listet, falls ja, die Dateien auf, die geändert werden, wenn die Patches angewendet werden. Der zweite Befehl wendet die notwendigen Korrekturen an.
freebsd-update fetch
freebsd-update install
Wenn das Update Kernel-Patches hinzufügt, muss das System neu gestartet werden, damit der gepatchte Kernel geladen wird. Wenn der Patch auf laufende Binärdateien angewendet wurde, müssen die betroffenen Apps neu gestartet werden, damit die gepatchte Binärdatei verwendet wird.
Typischerweise muss der Benutzer bereit sein, die Maschine neu zu starten. Um festzustellen, ob ein Kernel-Upgrade einen Systemneustart erfordert, führen Sie die folgenden Befehle aus. Wenn die Ergebnisse variieren, starten Sie die Maschine neu.
freebsd-version -k
uname -r
Durch das Hinzufügen des folgenden Eintrags zu /etc/crontab
kann die Maschine so eingestellt werden, dass sie einmal täglich automatisch nach Updates sucht:
@daily root freebsd-update cron
Wenn Patches vorhanden sind, werden sie automatisch heruntergeladen, aber nicht angewendet. Der Root-Benutzer erhält eine E-Mail, um die Patches zu bewerten und manuell mit freebsd-update
zu installieren.
Mit dem folgenden Befehl kann freebsd-update die vorherigen Änderungen zurücksetzen, falls etwas schiefgeht.
freebsd-update rollback
Wenn der Kernel oder irgendwelche Kernel-Module aktualisiert wurden, muss das System neu gestartet werden, und alle betroffenen Binärdateien müssen ebenfalls neu gestartet werden.
freebsd-update
kann nur den GENERIC
-Kernel automatisch aktualisieren. Wenn ein benutzerdefinierter Kernel installiert ist, muss er neu erstellt und neu installiert werden, sobald freebsd-update
die Installation der Updates abgeschlossen hat. Der Standardkernname ist GENERIC
. Der Befehl uname
wird verwendet, um die Installation des Systems zu bestätigen.
Halten Sie jederzeit eine Kopie des GENERIC-Kernels in /boot/GENERIC
. Es hilft bei der Diagnose einer Reihe von Problemen und der Implementierung von Versionsupdates.
freebsd-update
installiert die neuen Kernel-Quellen zusammen mit den anderen Updates, es sei denn, die Standardeinstellung in /etc/freebsd-update.conf
wurde geändert. Der Wiederaufbau und die Neuinstallation eines neuen benutzerdefinierten Kernels erfolgen dann wie gewohnt.
Nicht alle Updates, die von freebsd-update
gesendet werden, beinhalten den Kernel. Es ist nicht notwendig, einen benutzerdefinierten Kernel zu erstellen, wenn freebsd-update install
die Kernel-Quellen nicht verändert hat. freebsd-update
aktualisiert jedoch immer /usr/src/sys/conf/newvers.sh
. Diese Datei gibt das aktuelle Patch-Level an, wie durch die -p
-Nummer angezeigt, die von uname -r
zurückgegeben wird. Das Neuerstellen eines benutzerdefinierten Kernels ermöglicht es uname
, das aktuelle Patch-Level des Systems korrekt anzuzeigen, selbst wenn sich sonst nichts geändert hat. Dies ist besonders nützlich, wenn viele Systeme gewartet werden, da es eine schnelle Bewertung der auf jedes aufgespielten Updates ermöglicht.
Wie führt man Haupt- und Nebenversions-Upgrades durch?
Upgrades von einer Minor-Version von FreeBSD zur nächsten, wie von 13.0 auf 13.1, werden als "Minor-Version-Upgrades" bezeichnet. Wenn FreeBSD von einer Hauptversion auf eine andere aktualisiert wird, wie zum Beispiel von FreeBSD 12.X auf FreeBSD 13.X, finden Hauptversions-Upgrades statt. Beide Upgrade-Formen sind möglich, wenn freebsd-update
mit einem Release-Version-Ziel bereitgestellt wird.
Bevor Sie mit dem Upgrade beginnen, stellen Sie sicher, dass eine Kopie des GENERIC-Kernels im Verzeichnis /boot/GENERIC
vorhanden ist, falls das System einen benutzerdefinierten Kernel verwendet.
Wenn auf einer FreeBSD 13.0-Maschine ausgeführt, wird der folgende Befehl auf FreeBSD 13.1 aktualisieren:
freebsd-update -r 13.1-RELEASE upgrade
Nach Erhalt des Befehls wird freebsd-update
die Konfigurationsdatei und das aktuelle System bewerten, um die erforderlichen Informationen für den Abschluss des Upgrades zu erhalten. Eine Bildschirmauflistung ähnlich der unten angegebenen wird anzeigen, welche Komponenten entdeckt wurden und welche nicht:
Looking up update.FreeBSD.org mirrors... 1 mirrors found.
Fetching metadata signature for 13.0-RELEASE from update1.FreeBSD.org... done.
Fetching metadata index... done.
Inspecting system... done.
The following components of FreeBSD seem to be installed:
kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games
src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue
src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin
world/base world/info world/lib32 world/manpages
The following components of FreeBSD do not seem to be installed:
kernel/generic world/catpages world/dict world/doc world/games
world/proflibs
Does this look reasonable (y/n)? y
Drücken Sie y
, um mit dem Update fortzufahren. Zu diesem Zeitpunkt wird freebsd-update
versuchen, alle für das Upgrade erforderlichen Dateien herunterzuladen. In einigen Fällen kann der Benutzer gefragt werden, was installiert werden soll oder wie es weitergeht.
Beim Ausführen eines modifizierten Kernels wird das obige Verfahren eine Warnung ähnlich der folgenden erzeugen:
WARNING: This system is running a "MyCustomKernel" kernel, which is not a
kernel configuration distributed as part of FreeBSD 13.0-RELEASE.
This kernel will not be updated: you MUST update the kernel manually
before running "/usr/sbin/freebsd-update install"
Zu diesem Zeitpunkt ist es sicher, diese Warnung zu ignorieren. Im Rahmen des Upgrade-Verfahrens wird der neue GENERIC-Kernel verwendet.
Sobald alle Patches erfolgreich auf das lokale System heruntergeladen wurden, werden sie implementiert. Dieses Verfahren dauert eine Weile, abhängig von der Geschwindigkeit und der Auslastung der Maschine. Danach werden die Konfigurationsdateien zusammengeführt. Da eine Datei zusammengeführt werden kann oder ein Editor auf dem Bildschirm erscheinen kann, um eine manuelle Zusammenführung durchzuführen, erfordert der Zusammenführungsprozess einige Benutzerinteraktionen. Während der Prozess fortschreitet, wird der Benutzer die Ergebnisse jeder erfolgreichen Zusammenführung sehen. Ein fehlgeschlagenes oder ignoriertes Zusammenführen führt zur Beendigung des Verfahrens. Benutzer möchten ein Backup von /etc
erstellen und wichtige Dateien wie master.password
und group
später manuell zusammenführen.
Das System wurde noch nicht geändert, da alle Patches und Zusammenführungen an einem separaten Ort stattfinden. Sobald alle Patches erfolgreich angewendet, alle Konfigurationsdateien zusammengeführt und der Prozess gut verläuft, kann der Benutzer die Änderungen mit dem folgenden Befehl auf die Festplatte übernehmen.
freebsd-update install
Zuerst werden der Kernel und die Kernel-Module modifiziert. Wenn das System derzeit mit einem benutzerdefinierten Kernel arbeitet, wird nextboot
verwendet, um den Kernel für den nächsten Bootvorgang auf das modifizierte /boot/GENERIC
zu setzen, indem der folgende Befehl ausgeführt wird:
nextboot -k GENERIC
Bevor Sie mit dem GENERIC-Kernel neu starten, stellen Sie sicher, dass er alle Treiber enthält, die notwendig sind, damit das System bootet und sich mit dem Netzwerk verbindet, falls der aufgerüstete Computer aus der Ferne zugänglich ist. Insbesondere, wenn der laufende benutzerdefinierte Kernel Funktionen enthält, die normalerweise durch Kernel-Module bereitgestellt werden, laden Sie diese Module vorübergehend in den GENERIC-Kernel mit der /boot/loader.conf
-Funktion. Es wird empfohlen, alle nicht wesentlichen Dienste, einschließlich Festplatten- und Netzwerk-Mounts, bis zum Abschluss des Updates zu deaktivieren.
Ihr FreeBSD-System muss nun neu gestartet werden, damit der aktualisierte Kernel wirksam wird, indem Sie den nächsten Befehl ausführen:
shutdown -r now
Sobald das System wieder hochgefahren ist, verwenden Sie den folgenden Befehl, um freebsd-update
neu zu starten: Da der Status des Prozesses erhalten geblieben ist, wird freebsd-update
nicht von vorne beginnen; stattdessen wird es alle alten Shared Libraries und Objektdateien in der nächsten Phase löschen.
freebsd-update install
Je nachdem, ob die Versionsnummern der Bibliotheken erhöht wurden oder nicht, kann es nur zwei Installationsschritte anstelle von drei geben.
Das Upgrade ist jetzt abgeschlossen. Installieren Sie alle Ports und Pakete neu, wie in der Anleitung zum Aktualisieren von Paketen nach einem Major-Version-Update beschrieben, falls dies ein Major-Version-Upgrade war.
Wie aktualisiert man benutzerdefinierte Kernel für FreeBSD-Versionen 9.x und höher?
Sie können Ihren FreeBSD-Server aktualisieren, wenn Sie den Kernel angepasst haben, indem Sie die folgenden Schritte befolgen:
-
Überprüfen Sie vor dem Ausführen von
freebsd-update
, ob/boot/GENERIC
eine Kopie des GENERIC-Kernels enthält./boot/kernel.old
enthält den GENERIC-Kernel, wenn ein benutzerdefinierter Kernel nur einmal generiert wurde. Ändern Sie einfach den Namen des Verzeichnisses in /boot/GENERIC. -
Wenn ein benutzerdefinierter Kernel mehrmals generiert wurde oder die Anzahl der Male unbekannt ist, besorgen Sie sich eine Kopie des GENERIC-Kernels, die der aktuellen Version des Betriebssystems entspricht. Wenn physischer Zugang zur Maschine besteht, ist es möglich, eine Kopie des GENERIC-Kernels von den Installationsmedien zu installieren, indem die folgenden Befehle ausgeführt werden:
mount /cdrom
cd /cdrom/usr/freebsd-dist
tar -C/ -xvf kernel.txz boot/kernel/kernel -
Optional kann der GENERIC-Kernel aus dem Quellcode neu kompiliert und installiert werden, indem die folgenden Befehle ausgeführt werden:
cd /usr/src
make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null
Damit freebsd-update
diesen Kernel als GENERIC-Kernel erkennt, darf die GENERIC-Konfigurationsdatei in keiner Weise aktualisiert worden sein. Zusätzlich wird bevorzugt, dass der Kernel ohne zusätzliche spezielle Parameter kompiliert wird.
Es ist nicht notwendig, in den GENERIC-Kernel neu zu starten, da freebsd-update
einfach nur erfordert, dass /boot/GENERIC
existiert.
Wie aktualisiert man Pakete nach einem Major-Upgrade?
Im Allgemeinen werden installierte Apps nach kleineren Versionsupdates weiterhin normal funktionieren. Hauptversionen verwenden verschiedene Application Binary Interfaces (ABIs), was dazu führt, dass die meisten Drittanbieterprogramme nicht mehr funktionieren. Nach einem Update auf eine Hauptversion müssen alle installierten Pakete und Ports aktualisiert werden. Pakete können mit pkg upgrade
aktualisiert werden. Sie können das Tool ports-mgmt/portmaster
verwenden, um installierte Ports zu aktualisieren.
Obwohl sich die Versionsnummer nicht geändert hat, wird ein erzwungener Upgrade aller installierten Pakete die Pakete durch neue aus dem Repository ersetzen. Dies ist notwendig aufgrund der ABI-Versionänderung beim Upgrade zwischen Hauptversionen von FreeBSD. Das erzwungene Update kann durch Ausführen des folgenden Befehls durchgeführt werden:
pkg-static upgrade -f
Ein Neuaufbau aller installierten Anwendungen kann mit dem folgenden Befehl durchgeführt werden:
portmaster -af
Dieser Befehl zeigt Setup-Panels für jedes Programm mit anpassbaren Einstellungen an und wartet auf die Benutzerinteraktion. Fügen Sie -G
in den vorhergehenden Befehl ein, um dieses Verhalten zu vermeiden und die Standardparameter zu verwenden.
Sobald die Software-Updates abgeschlossen sind, beenden Sie den Upgrade-Prozess mit dem letzten Aufruf von freebsd-update
, um alle verbleibenden offenen Punkte zu klären:
freebsd-update install
Wenn der GENERIC-Kernel vorübergehend verwendet wurde, ist jetzt der Zeitpunkt, einen neuen benutzerdefinierten Kernel zu entwickeln und zu installieren.
Starten Sie das System mit der neuesten Version von FreeBSD neu. Der Upgrade-Prozess ist nun abgeschlossen.
Wie testet man den Systemzustand?
Mit freebsd-update IDS
ist es möglich, die installierte FreeBSD-Version mit einer bekannten, guten Kopie zu vergleichen. Dieser Befehl kann als integriertes Intrusion Detection System (IDS) verwendet werden, da er die aktuelle Version von Systemdienstprogrammen, Bibliotheken und Konfigurationsdateien analysiert.
Dieser Befehl ist kein Ersatz für ein echtes Intrusion Detection System wie security/snort
. Da freebsd-update
Daten auf der Festplatte speichert, ist eine Manipulation eine deutliche Möglichkeit. Eine bevorzugte Option wäre es, das System mit einer sicheren Disk zu vergleichen, wie zum Beispiel einer DVD oder einem sicher aufbewahrten externen USB-Datenträger. Die binäre Überprüfung beschreibt eine alternative Methode zur Bereitstellung von IDS-Funktionen mithilfe eines integrierten Werkzeugs.
-
Um den Vergleich zu starten, geben Sie die Ausgabedatei an, in der die Ergebnisse gespeichert werden, indem Sie den nächsten Befehl ausführen:
freebsd-update IDS >> outfile.ids
Eine detaillierte Auflistung der Dateien, zusammen mit den SHA256-Hashwerten sowohl für den bekannten Wert in der Veröffentlichung als auch für die aktuelle Installation, wird in die gewählte Ausgabedatei bereitgestellt. Die Einträge der Auflistung sind äußerst lang, doch das Ausgabeformat ist leicht parsbar.
-
Führen Sie beispielsweise den folgenden Befehl aus, um eine Liste aller Dateien zu erhalten, die sich von denen in der Veröffentlichung unterscheiden:
cat outfile.ids | awk '{ print $1 }' | more
Sie können eine Ausgabe ähnlich der folgenden sehen:
/etc/master.passwd
/etc/motd
/etc/passwd
/etc/pf.conf
Änderungen an einigen Dateien sind normal. Zum Beispiel wird/etc/passwd
geändert, wenn Benutzer zum System hinzugefügt wurden. Kernel-Module unterscheiden sich, wenn freebsd-update
sie aktualisiert. Um bestimmte Dateien oder Verzeichnisse auszuschließen, fügen Sie sie zur IDSIgnorePaths
-Option in /etc/freebsd-update.conf
hinzu.
Wie aktualisiere ich die Dokumentationssammlung?
Die Dokumentation von FreeBSD ist ein grundlegender Bestandteil des Betriebssystems. Während die FreeBSD-Dokumentation immer auf der FreeBSD-Website zugänglich ist, kann es nützlich sein, eine lokale Kopie der Website, Handbücher, FAQs und Artikel zu haben.
Das erneute Erstellen der FreeBSD-Dokumentation aus dem Quellcode erfordert eine Reihe von Werkzeugen, die nicht im FreeBSD-Kernsystem enthalten sind. Befolgen Sie diese Anweisungen aus der Übersicht des FreeBSD-Dokumentationsprojekts, um die erforderlichen Werkzeuge zu installieren.
-
Nach der Installation, holen Sie sich eine saubere Kopie der Dokumentationsquelle mit git:
git clone https://git.FreeBSD.org/doc.git /usr/doc
Der erste Download der Dokumentationsquellen könnte zeitaufwändig sein. Lass es laufen, bis es abgeschlossen ist.
-
Zukünftige Aktualisierungen der Dokumentationsquellen können mit dem folgenden Befehl abgerufen werden:
git pull
Sobald ein aktuelles Snapshot der Dokumentationsquellen in
/usr/doc
abgerufen wurde, kann die installierte Dokumentation aktualisiert werden. -
Ein vollständiges Update kann durch Eingabe ausgeführt werden:
cd /usr/doc
make
Wie verfolgt man einen Entwicklungszweig?
Es gibt zwei Entwicklungszweige für FreeBSD:
-
FreeBSD-CURRENT
-
FreeBSD-STABLE
Dieser Abschnitt beschreibt jede Abteilung und ihre Zielgruppe sowie, wie die Konformität eines Systems mit jeder Abteilung aufrechterhalten werden kann.
Wie benutzt man FreeBSD-CURRENT?
FreeBSD-CURRENT stellt die "bleeding edge" der FreeBSD-Entwicklung dar, und Benutzer müssen ein hohes Maß an technischer Expertise haben. Weniger technische Benutzer, die einem Entwicklungszweig folgen möchten, sollten stattdessen FreeBSD-STABLE folgen.
FreeBSD-CURRENT enthält Arbeiten in Bearbeitung, experimentelle Modifikationen und Übergangsmechanismen, die möglicherweise in die nachfolgende offizielle Version aufgenommen werden oder auch nicht. Trotz der Tatsache, dass viele FreeBSD-Ingenieure den FreeBSD-CURRENT-Quellcode regelmäßig kompilieren, gibt es gelegentlich kurze Zeiträume, in denen der Quellcode nicht kompilierbar ist. Diese Probleme werden so schnell wie möglich behoben, jedoch hängt es davon ab, wann der Quellcode synchronisiert wurde, ob FreeBSD-CURRENT eine Katastrophe oder neue Funktionen liefert.
FreeBSD-CURRENT wird für drei Hauptinteressengruppen bereitgestellt:
-
Mitglieder der FreeBSD-Community, die aktiv zum Quellbaum beitragen.
-
Aktive Tester, die Mitglieder der FreeBSD-Community sind. Sie sind bereit, Zeit damit zu verbringen, Probleme zu lösen, Patches vorzuschlagen und relevante Kommentare zur Zukunft von FreeBSD abzugeben.
-
Benutzer, die die Dinge im Auge behalten, die aktuelle Quelle als Referenz verwenden oder gelegentlich Codebeiträge leisten möchten, können dies tun, indem sie die aktuelle Quelle aus Referenzgründen verwenden oder gelegentlich Bemerkungen machen.
FreeBSD-CURRENT sollte nicht als Abkürzung angesehen werden, um neue Funktionen vor der nächsten Veröffentlichung zu erhalten, da Vorabversionen nicht vollständig getestet sind und wahrscheinlich Fehler enthalten. Jeder einzelne Commit ist ebenso wahrscheinlich, neue Fehler einzuführen, wie bestehende zu beheben, was ihn zu einer langsamen Methode zur Behebung von Fehlern macht. FreeBSD-CURRENT wird in keiner Form "offiziell unterstützt".
Zum Verfolgen von FreeBSD-CURRENT:
-
Abonnieren Sie die E-Mail-Listen für FreeBSD-CURRENT und Commit-Nachrichten für den Hauptzweig des src-Repositorys. Dies ist erforderlich, um die Kommentare der Leute zum aktuellen Status des Systems zu sehen und relevante Warnungen über den aktuellen Zustand von FreeBSD-CURRENT zu erhalten. Die Commit-Nachrichten für den Hauptzweig des src-Repositorys dokumentieren den Commit-Protokolleintrag für jede Änderung sowie alle wesentlichen Informationen zu potenziellen Nebenwirkungen. Um sich für diese Listen anzumelden, besuchen Sie den FreeBSD-Listenserver, klicken Sie auf die gewünschte Liste und folgen Sie den Anweisungen auf dem Bildschirm. Um Änderungen am gesamten Quellbaum zu verfolgen, nicht nur an den spezifischen Änderungen für FreeBSD-CURRENT, abonnieren Sie die Commit-Nachrichten für alle Zweige des src-Repositories.
-
Synchronisieren Sie mit den Quellen von FreeBSD-CURRENT. git wird oft verwendet, um den -CURRENT-Code aus dem Hauptzweig des FreeBSD-Git-Repositorys zu erhalten.
-
Aufgrund der Weitläufigkeit des Repositories entscheiden sich einige Benutzer dafür, nur die Bereiche des Quellcodes zu synchronisieren, die sie interessieren oder zu denen sie Änderungen beigetragen haben. Benutzer, die das Betriebssystem aus dem Quellcode erstellen möchten, müssen jedoch die gesamte FreeBSD-CURRENT-Distribution beziehen, nicht nur einen Teilbereich. Bevor Sie FreeBSD-CURRENT erstellen, überprüfen Sie sorgfältig /usr/src/Makefile und befolgen Sie die Schritte in Updating FreeBSD from Source. Lesen Sie die FreeBSD-CURRENT-Mailingliste und /usr/src/UPDATING, um über weitere Bootstrapping-Methoden informiert zu bleiben, die auf dem Weg zur nächsten Version erforderlich werden könnten.
-
Sei aktiv! Benutzer von FreeBSD-CURRENT sind eingeladen, Verbesserungsvorschläge und Problemlösungen beizutragen. Vorschläge, die mit Code versehen sind, werden immer geschätzt.
Wie benutzt man FreeBSD-STABLE?
Aus dem FreeBSD-STABLE-Entwicklungszweig werden Hauptversionen erstellt. Dieser Branch erhält Änderungen in einem langsameren Tempo und mit der Annahme, dass sie gründlich in FreeBSD-CURRENT getestet wurden. Dies ist immer noch ein Entwicklungszweig, und die FreeBSD-STABLE-Quellen können zu einem bestimmten Zeitpunkt für eine weitverbreitete Nutzung geeignet oder ungeeignet sein. Es ist nur ein zusätzlicher technischer Entwicklungsweg und keine Ressource für Endbenutzer. Benutzer, denen die Ressourcen für Tests fehlen, sollten stattdessen die neueste Version von FreeBSD verwenden.
Folgen Sie FreeBSD-STABLE, wenn Sie daran interessiert sind, den FreeBSD-Entwicklungsprozess zu verfolgen oder dazu beizutragen, insbesondere im Hinblick auf die bevorstehende FreeBSD-Version.
Obwohl der FreeBSD-STABLE-Zweig immer gebaut und ausgeführt werden sollte, kann dies nicht garantiert werden. Da mehr Menschen FreeBSD-STABLE als FreeBSD-CURRENT verwenden, ist es unvermeidlich, dass FreeBSD-STABLE Probleme und Randfälle aufweist, die in FreeBSD-CURRENT nicht sichtbar waren. Deshalb sollte man FreeBSD-STABLE nicht blind folgen. Es ist entscheidend, dass keine Produktionsserver auf FreeBSD-STABLE aktualisiert werden, bis der Code in einer Entwicklungs- oder Testumgebung ordnungsgemäß getestet wurde.
Zum Verfolgen von FreeBSD-STABLE:
-
Treten Sie der FreeBSD-STABLE-Mailingliste bei, um über alle Build-Anforderungen, die in FreeBSD-STABLE auftreten können, sowie über andere Probleme, die besondere Aufmerksamkeit erfordern, auf dem Laufenden zu bleiben. Wenn Entwickler eine umstrittene Korrektur oder Aktualisierung in Betracht ziehen, werden sie eine Mitteilung an diese Mailingliste senden, die es den Benutzern ermöglicht, zu antworten, wenn sie Bedenken hinsichtlich der geplanten Änderung haben.
Treten Sie der entsprechenden
git
-Liste für den verfolgten Branch bei. Zum Beispiel sollten Benutzer, die dem 12-STABLE-Zweig des src-Repositorys folgen, die Commit-Benachrichtigungen für die stabilen Zweige abonnieren. Diese Liste dokumentiert den Commit-Log-Eintrag und alle relevanten Informationen zu potenziellen Nebenwirkungen für jede Änderung, wenn sie vorgenommen wird.Um sich für diese Listen anzumelden, besuchen Sie den FreeBSD-Listenserver, klicken Sie auf die gewünschte Liste und folgen Sie den Anweisungen auf dem Bildschirm. Um Änderungen am gesamten Quellbaum zu verfolgen, abonnieren Sie die Commit-Benachrichtigungen für alle Branches des src-Repositorys.
-
Installieren Sie die aktuellste FreeBSD-STABLE-Version von den FreeBSD-Mirror-Seiten oder einen monatlichen Snapshot, der aus FreeBSD-STABLE erstellt wurde, um ein frisches FreeBSD-STABLE-System zu installieren.Um ein bestehendes FreeBSD-System auf FreeBSD-STABLE zu aktualisieren oder neu zu erstellen, überprüfen Sie den Quellcode des Branches mit git.
www.freebsd.org/releng
listet die Branch-Namen auf, wie z.B.stable/9
. -
Bevor Sie FreeBSD-STABLE erstellen oder aktualisieren, überprüfen Sie sorgfältig
/usr/src/Makefile
und halten Sie sich an die Empfehlungen in Updating FreeBSD from Source. Lesen Sie die FreeBSD-STABLE-Mailingliste und/usr/src/UPDATING
, um über zusätzliche Bootstrap-Prozesse informiert zu bleiben, die auf dem Weg zur nächsten Version erforderlich sein könnten.
Was ist die Release-Nummer (N-Nummer)?
Bei der Lokalisierung von Fehlern ist es unerlässlich zu wissen, welche Versionen des Quellcodes verwendet wurden, um das System zu erstellen, das das Problem zeigt. FreeBSD bietet Informationen zur Version des kompilierten Kernels an. Sie können die FreeBSD-Version ermitteln, indem Sie den folgenden Befehl ausführen:
uname
Sie sollten die Ausgabe ähnlich wie unten sehen:
FreeBSD 14.0-CURRENT #112 main-n148514-021250d67c18: Tue Jun 22 10:32:19 MDT 2021 alex@machine:/usr/home/alex/obj/usr/home/alex/git/head/amd64.amd64/sys/FRED
Das letzte Feld enthält Informationen über den Namen des Kernels, seinen Ersteller und den Ort, an dem er erstellt wurde. Bezüglich des vierten Feldes besteht es aus den folgenden Komponenten:
-
main: Branch-Name in Git.
n-Nummer-Vergleiche sind nur auf projektveröffentlichten Branches (
main,
stable/XXund
releng/XX) gültig. Lokale Branches werden
n-Nummern` haben, die sich mit den Commits des übergeordneten Branches überschneiden. -
n247514
:Dien-Nummer
ist eine lineare Zählung der Commits, die bis zum Beginn des Git-Repositorys zurückreicht, beginnend mit dem Git-Hash in der Zeile. -
021250d67c18
:Hash des ausgecheckten Baums in Git. -
Wenn der Kernel in einem Baum mit nicht festgeschriebenen Änderungen kompiliert wurde, kann ein
-dirty
Suffix vorhanden sein. Dieses Beispiel fehlt es daran, da der FRED-Kernel aus einem sauberen Checkout kompiliert wurde.
Um die n-Nummer
, die einem Git-Hash entspricht, zu finden, wird der Befehl git rev-list
verwendet.
git rev-list --first-parent --count 021250d67c18
n148514
-
021250d67c18
:git-Hash zum Übersetzen (der Hash aus dem obigen Beispiel wird wiederverwendet) -
n148514
:Die n-Nummer
Typischerweise hat diese Nummer wenig Bedeutung. Wenn jedoch Fehlerbehebungen vorgenommen werden, erleichtert diese Nummer die Feststellung, ob der Patch im derzeit aktiven System verfügbar ist. Da der Hash der sofort erkennbare Identifikator für eine Änderung ist und die n-Nummer nicht, beziehen sich Entwickler oft auf den Hash des Commits (oder bieten eine URL mit dem Hash an), aber nicht auf die n-Nummer. Zusätzlich werden Sicherheitswarnungen und Errata-Ankündigungen eine n-Nummer bereitstellen, die direkt mit Ihrem System verglichen werden kann. Sie können n-Nummern nicht genau vergleichen, wenn Sie flache Git-Klone verwenden, da das Tool git rev-list
alle Repository-Revisionen zählt, die ein flacher Klon weglässt.
Wie aktualisiere ich FreeBSD aus dem Quellcode?
Das Kompilieren von Quellcode zur Aktualisierung von FreeBSD hat verschiedene Vorteile gegenüber binären Updates. Der Code kann so erstellt werden, dass er bestimmte Hardware nutzen kann. Elemente des Basissystems können mit Nicht-Standard-Einstellungen erstellt oder weggelassen werden, wenn sie nicht erforderlich oder bevorzugt sind. Der Build-Prozess dauert länger als die Installation von binären Updates, um ein System zu aktualisieren, ermöglicht jedoch eine umfangreiche Anpassung, um eine maßgeschneiderte Version von FreeBSD zu erstellen.
Was sind die schnellen Schritte für ein FreeBSD-Update aus dem Quellcode?
Dies ist eine kurze Referenz für die gängigen Prozesse, die erforderlich sind, um FreeBSD durch die Kompilierung des Quellcodes zu aktualisieren. In späteren Abschnitten wird die Methode ausführlicher beschrieben.
Beim Wechsel von mergemaster
zu etcupdate
kann der erste Durchlauf Änderungen falsch zusammenführen, was zu fehlerhaften Konflikten führt. Um dies zu vermeiden, führen Sie vor dem Aktualisieren der Quellen und dem Erstellen der neuen Welt die folgenden Schritte aus:
etcupdate extract
etcupdate diff
Der erste Befehl wird die Datenbank der Standard-/etc
-Dateien neu aufbauen.
Der zweite Befehl wird den Unterschied nach dem Bootstrapping untersuchen. Beseitigen Sie lokale Änderungen, die nicht mehr erforderlich sind, um die Wahrscheinlichkeit zukünftiger Konflikte durch Upgrades zu verringern.
-
Um die neueste Version des Quellcodes zu erhalten, führen Sie den folgenden Befehl aus:
git pull /usr/src
-
Überprüfen Sie
/usr/src/UPDATING
indem Sie den folgenden Befehl ausführen:check /usr/src/UPDATING
-
Gehe zum Quellverzeichnis.
cd /usr/src
-
Kompilieren Sie alles außer dem Kernel, indem Sie den nächsten Befehl ausführen:
make -j4 buildworld
-
Um den Kernel zu kompilieren und zu installieren, führen Sie den nächsten Befehl aus. Dies entspricht
make buildkernel installkernel
.make -j4 kernel
-
Starten Sie das System mit dem neuen Kernel neu, indem Sie den folgenden Befehl ausführen:
shutdown -r now
-
Aktualisieren und zusammenführen der Konfigurationsdateien in
/etc/
, die vor der Installation von installworld erforderlich sind, indem Sie den folgenden Befehl ausführen:etcupdate -p
-
Gehe zum Quellverzeichnis.
cd /usr/src
-
Um die Welt zu installieren, führen Sie den folgenden Befehl aus:
make installworld
-
Aktualisieren und zusammenführen von Konfigurationsdateien in
/etc/
durch Ausführen des nächsten Befehls:etcupdate -B
-
Starten Sie das System neu, um die neu erstellte Welt und den Kernel zu verwenden.
shutdown -r now
Wie aktualisiere ich aus dem Quellcode?
Zuerst sollten Sie die Datei /usr/src/UPDATING
lesen. Es beschreibt alle manuellen Aktionen, die vor oder nach einem Update abgeschlossen werden müssen.
Der Speicherort des FreeBSD-Quellcodes ist /usr/src/
. Git, ein Versionskontrollsystem, ist die empfohlene Technik zum Aktualisieren dieses Inhalts. Überprüfen Sie, ob der Quellcode unter Versionskontrolle steht, indem Sie den folgenden Befehl ausführen:
cd /usr/src
git remote --v
Sie sollten die Ausgabe ähnlich wie die unten Gegebene sehen:
origin https://git.freebsd.org/src.git (fetch)
origin https://git.freebsd.org/src.git (push)
Dies deutet darauf hin, dass /usr/src/
unter Versionskontrolle steht. Sie können den Quellcode mit dem folgenden Befehl aktualisieren:
git pull /usr/src
Wenn das Verzeichnis in letzter Zeit nicht aktualisiert wurde, könnte der Aktualisierungsprozess zeitaufwendig sein. Nachdem es abgeschlossen ist, ist der Quellcode aktuell und das im nächsten Abschnitt beschriebene Build-Verfahren kann beginnen.
Wie erhält man die Quelle?
Wenn die Ausgabe des Befehls git remote --v
fatal: not a git repository
ist, bedeutet dies, dass die Quelldateien fehlen oder sie mit einer anderen Methode installiert wurden und ein frischer Checkout der Quelle erforderlich ist. Sie können die unten erläuterten Schritte befolgen, um den Quellcode zu erhalten:
-
Bestimmen Sie die verwendete Version von FreeBSD, indem Sie den folgenden Befehl ausführen:
uname -r
Sie sollten eine Ausgabe sehen, die der folgenden ähnlich ist:
13.1-RELEASE
uname -r Ausgabe Repository-Pfad Beschreibung X.Y-RELEASE releng/X.Y Die Release-Version plus nur wesentliche Sicherheits- und Fehlerbehebungen. Dieser Branch wird für die Mehrheit der Benutzer empfohlen. X.Y-STABLE stable/X Die Release-Version zusammen mit allen weiteren Arbeiten an diesem Branch. STABLE bedeutet, dass sich die Application Binary Interface (ABI) nicht ändern wird, daher wird Software, die für frühere Versionen entwickelt wurde, weiterhin funktionieren. Zum Beispiel wird Software, die für FreeBSD 12.1 geschrieben wurde, weiterhin auf später kompiliertem FreeBSD 12-STABLE laufen. Gelegentlich haben STABLE-Zweige Probleme oder Inkompatibilitäten, die den Benutzern schaden können, obwohl diese normalerweise schnell behoben werden. X-CURRENT main Die neueste unveröffentlichte Version von FreeBSD. Der CURRENT-Zweig kann erhebliche Fehler oder Inkompatibilitäten enthalten und wird nur für erfahrene Benutzer empfohlen. Tabelle 3. FreeBSD-Versionen und Repository-Zweige
Basierend auf den FreeBSD-Versionen und Repository-Branches wird der in der obigen Tabelle angegebene Repository-Pfad für den Quellcode verwendet. Zum Beispiel wird der Pfad
releng/13.1
während des Quell-Checkouts verwendet, um 13.1-RELEASE zu aktualisieren. -
Entfernen Sie das veraltete Verzeichnis aus der Nutzung, indem Sie den nächsten Befehl ausführen. Wenn dieses Verzeichnis keine lokalen Änderungen aufweist, kann es gelöscht werden.
mv /usr/src /usr/src.bak
-
Sie können den nächsten Befehl ausführen, um den Quellcode auszuchecken. Die Repository-URL wird mit dem Pfad aus FreeBSD-Versionen und Repository-Zweigen ergänzt. Die dritte Option gibt das Zielverzeichnis auf dem lokalen System für den Quellcode an.
git clone --branch releng/13.1 https://git.FreeBSD.org/src.git /usr/src
Sie können eine Ausgabe sehen, die der folgenden ähnlich ist:
Cloning into '/usr/src'...
remote: Enumerating objects: 4204849, done.
remote: Counting objects: 100% (381096/381096), done.
remote: Compressing objects: 100% (28269/28269), done.
remote: Total 4204849 (delta 375313), reused 352827 (delta 352827), pack-reused 3823753
Receiving objects: 100% (4204849/4204849), 1.45 GiB | 2.90 MiB/s, done.
Resolving deltas: 100% (3335633/3335633), done.
Updating files: 100% (87481/87481), done.
Wie man aus dem Quellcode baut?
Außer dem Kernel wird die gesamte Betriebssystem-Welt kompiliert. Dies wird zunächst durchgeführt, um aktuelle Werkzeuge für den Kernelbau bereitzustellen. Der Kernel wird dann konstruiert:
cd /usr/src
make buildworld
make buildkernel
Der Code wird in das Verzeichnis /usr/ob
j geschrieben.
Dies sind die grundlegenden Phasen. Zusätzliche Konfigurationsoptionen sind unten aufgeführt.
1. Wie implementiert man einen sauberen Build?
Einige Varianten des FreeBSD-Bausystems speichern zuvor erstellten Code im temporären Objektverzeichnis /usr/obj
. Dies kann nachfolgende Builds beschleunigen, indem die Neukompilierung unveränderter Code verhindert wird. Bevor Sie mit einem Build beginnen, verwenden Sie cleanworld
, um einen vollständigen Neuaufbau zu erzwingen, indem Sie den folgenden Befehl ausführen:
make cleanworld
2. Wie stellt man die Anzahl der Jobs ein?
Die Erhöhung der Anzahl der Build-Aufgaben auf Mehrkernprozessoren hilft, den Bauprozess zu beschleunigen. Bestimmen Sie die Anzahl der CPU-Kerne mit dem Befehl sysctl hw.ncpu
. Prozessoren variieren, ebenso wie die mit verschiedenen Versionen von FreeBSD verwendeten Build-Systeme, daher ist das Testen der einzige zuverlässige Weg, um zu bestimmen, wie sich die Anzahl der Aufgaben auf die Build-Leistung auswirkt. Betrachten Sie Werte zwischen der Hälfte und der doppelten Anzahl der Kerne als Ausgangspunkt. -j
gibt die Anzahl der auszuführenden Jobs an. Zum Beispiel können Sie die Welt und den Kernel mit vier Jobs erstellen, indem Sie den folgenden Befehl ausführen:
make -j4 buildworld buildkernel
3. Wie baut man nur den Kernel?
Wenn der Quellcode geändert wurde, muss ein buildworld
ausgeführt werden. Danach kann buildkernel
jederzeit ausgeführt werden, um einen Kernel zu erstellen. Um nur den Kernel zu bauen, können Sie die folgenden Befehle ausführen:
cd /usr/src
make buildkernel
4. Wie baut man einen benutzerdefinierten Kernel?
Der grundlegende FreeBSD-Kernel basiert auf der GENERIC-Kernel-Konfigurationsdatei. Der GENERIC-Kernel enthält die am häufigsten verwendeten Gerätetreiber und Konfigurationseinstellungen. Gelegentlich ist es vorteilhaft oder erforderlich, einen benutzerdefinierten Kernel zu entwickeln, indem Gerätetreiber und Einstellungen hinzugefügt oder gelöscht werden, um einem bestimmten Zweck zu entsprechen.
Zum Beispiel kann ein Entwickler eines winzigen eingebetteten Computers mit stark eingeschränktem RAM unnötige Gerätetreiber oder Optionen entfernen, um den Kernel erheblich zu verkleinern.
Der Speicherort der Kernel-Konfigurationsdateien ist /usr/src/sys/arch/conf
, wobei arch
das Ergebnis von uname -m
ist. Auf den meisten Maschinen befindet sich das Verzeichnis der Konfigurationsdateien unter /usr/src/sys/amd64/conf/
.
Benutzerdefinierte Kernel-Konfigurationsdateien sollten in einem anderen Verzeichnis, wie z.B. /root
, aufbewahrt werden, da /usr/src
gelöscht oder neu generiert werden könnte. Verbinden Sie die Kernel-Konfigurationsdatei mit dem conf
-Ordner. Wenn dieses Verzeichnis zerstört oder ersetzt wird, kann die Kernel-Konfiguration an den neuen Speicherort neu verlinkt werden.
Sie können die GENERIC-Konfigurationsdatei kopieren, um eine benutzerdefinierte Konfigurationsdatei zu erstellen, indem Sie die folgenden Befehle ausführen. Der neue benutzerdefinierte Kernel für einen Speicherserver wird in diesem Beispiel STORAGESERVER genannt.
cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER
cd /usr/src/sys/amd64/conf
ln -s /root/STORAGESERVER
/root/STORAGESERVER
wird geändert, indem Geräte oder Parameter gemäß der config
-Dokumentation hinzugefügt oder gelöscht werden.
Der benutzerdefinierte Kernel wird erstellt, indem die Kernel-Konfigurationsdatei (KERNCONF) in der Befehlszeile angegeben wird:
make buildkernel KERNCONF=STORAGESERVER
Wie installiert man kompilierte Software?
Nachdem Sie die oben beschriebenen Schritte buildworld
und buildkernel
abgeschlossen haben, werden der neue Kernel und die neue Welt durch die folgenden Schritte installiert.
-
Um den Kernel zu installieren, führen Sie die nächsten Befehle aus und starten Sie Ihr System neu.
cd /usr/src
make installkernel
shutdown -r nowWenn Sie einen benutzerdefinierten Kernel erstellt haben, muss
KERNCONF
ebenfalls gesetzt werden, um den neuen benutzerdefinierten Kernel zu verwenden, indem Sie die folgenden Befehle ausführen:cd /usr/src
make installkernel KERNCONF=STORAGESERVER
shutdown -r now -
Nachdem das System hochgefahren ist, um die Welt zu installieren, führen Sie die nächsten Befehle aus und starten Sie Ihr System neu.
cd /usr/src
make installworld
shutdown -r now
Wie man das Update abschließt?
Mehrere verbleibende Aufgaben schließen das Upgrade ab. Das System wird neu gestartet, nachdem alle aktualisierten Konfigurationsdateien mit den neuen Versionen kombiniert, veraltete Bibliotheken entdeckt und gelöscht wurden und dann alle modifizierten Konfigurationsdateien mit den neuen Versionen zusammengeführt wurden.
1. Wie man Konfigurationsdateien mit etcupdate kombiniert?
etcupdate
ist ein Dienstprogramm zur Handhabung von Updates für Dateien, die nicht durch ein installworld
aktualisiert werden, wie z.B. /etc/
-Dateien. Es hält Updates aufrecht, indem es Änderungen an diesen Dateien mit den lokalen Kopien zusammenführt. Es ist ebenfalls so konzipiert, dass es nur wenig Benutzerinteraktion benötigt, im Gegensatz zu mergemaster
, das interaktive Eingabeaufforderungen hat.
etcupdate
benötigt keine expliziten Parameter, um seine Funktion auszuführen. Es gibt jedoch die Möglichkeit, die Richtigkeit der ersten etcupdate
-Operation zu überprüfen, indem Sie den folgenden Befehl ausführen:
etcupdate diff
Dieser Befehl aktiviert die Überwachung von Konfigurationsänderungen.
Wenn etcupdate
eine Datei nicht automatisch zusammenführen kann, können die Merge-Konflikte manuell behoben werden, indem der nächste Befehl ausgeführt wird:
etcupdate resolve
Beim Wechsel von mergemaster(8) zu etcupdate(8) kann der erste Durchlauf Änderungen falsch zusammenführen, was zu falschen Konflikten führt. Um dies zu vermeiden, führen Sie vor dem Aktualisieren der Quellen und dem Erstellen der neuen Welt die folgenden Schritte aus:
-
Stellen Sie die Datenbank der Standard-
/etc
-Dateien wieder her, indem Sie den folgenden Befehl ausführen:etcupdate extract
-
Um den Unterschied nach dem Bootstrapping zu überprüfen, führen Sie den nächsten Befehl aus. Beseitigen Sie lokale Änderungen, die nicht mehr erforderlich sind, um die Wahrscheinlichkeit zukünftiger Konflikte durch Updates zu verringern.
etcupdate diff
2. Wie man Konfigurationsdateien mit mergemaster zusammenführt?
mergemaster
ermöglicht das Zusammenführen von modifizierten Systemkonfigurationsdateien mit aktualisierten Versionen dieser Dateien. mergemaster
ist ein Ersatz für das empfohlene etcupdate
. Um unveränderte Dateien automatisch zu aktualisieren und neue Dateien zu installieren, die noch nicht vorhanden sind, führen Sie den nächsten Befehl aus:
mergemaster -Ui
Wenn eine Datei manuell zusammengeführt werden muss, ermöglicht eine interaktive Schnittstelle dem Benutzer, auszuwählen, welche Elemente der Dateien beibehalten werden sollen.
3. Wie überprüft man abgelaufene Dateien und Bibliotheken?
Nach einem Upgrade können bestimmte veraltete Dateien oder Ordner bestehen bleiben. Um diese Dateien zu finden, führen Sie den nächsten Befehl aus:
Bitte geben Sie den zu übersetzenden Text ein.
make check-old
Um abgelaufene Dateien zu entfernen, führen Sie den nächsten Befehl aus:
make delete-old
Einige veraltete Bibliotheken könnten weiterhin existieren. Diese können durch Ausführen des nächsten Befehls identifiziert werden::
make check-old-libs
Um die alten Bibliotheken zu entfernen, führen Sie den folgenden Befehl aus:
make delete-old-libs
Programme, die noch diese veralteten Bibliotheken verwendeten, werden nach der Entfernung der Bibliothek nicht mehr funktionieren. Nach dem Entfernen der alten Bibliotheken müssen diese Programme neu erstellt oder ersetzt werden.
Durch die Angabe von BATCH_DELETE_OLD_FILES im Befehl kann das Eingeben von y
und Enter
zum Löschen jeder Datei vermieden werden, wenn bekannt ist, dass alle alten Dateien und Ordner sicher entfernt werden können.
make BATCH_DELETE_OLD_FILES=yes delete-old-libs
4. Neustart nach dem Update
Das Neustarten des FreeBSD-Systems ist der letzte Schritt nach einem Update, um sicherzustellen, dass alle Änderungen wirksam werden.
shutdown -r now
Wie verfolgt man mehrere Systeme?
Wenn mehrere FreeBSD-Systeme denselben Quellbaum verfolgen müssen, ist es eine Verschwendung von Speicherplatz, Netzwerkverkehr und CPU-Zyklen, wenn jedes System die Quellen herunterlädt und das gesamte System neu aufbaut. Die Lösung besteht darin, dass ein System den Großteil der Arbeit erledigt, während die anderen Maschinen es über NFS einbinden. Dieser Abschnitt beschreibt, wie man dies macht.
Zunächst benennen Sie eine Gruppe von Computern, die denselben Satz von Binaries ausführen werden, oft als Build
-Set bekannt. Jeder Computer kann seinen eigenen Kernel haben, aber sie werden alle die gleichen Userland-Binaries verwenden.
-
Wählen Sie einen Computer aus dieser Sammlung aus, um als Build-Maschine für das World und den Kernel zu dienen. Dies ist idealerweise ein schnelles System mit genügend freier CPU, um
make buildworld
undmake buildkernel
auszuführen. -
Wählen Sie einen Computer als Testmaschine aus, der Software-Upgrades vor deren Implementierung in der Produktion testet. Diese Maschine muss in der Lage sein, eine längere Ausfallzeit zu überstehen. Es muss nicht die Baumaschine sein, aber es könnte sein.
-
Jeder Computer innerhalb dieses Build-Sets muss
/usr/obj
und/usr/src
über NFS von der Build-Maschine einbinden. Für mehrere Build-Sets sollte/usr/src
auf einem System lokalisiert sein und NFS sollte auf den anderen gemountet werden. -
Stellen Sie sicher, dass
/etc/make.conf
und/etc/src.conf
auf jedem Computer im Build-Set und auf der Build-Maschine identisch sind. Dies impliziert, dass die Build-Maschine alle Komponenten des Basissystems konstruieren muss, die von jeder Maschine im Build-Set installiert werden. Darüber hinaus sollte der Kernelname jeder Build-Maschine mit KERNCONF in/etc/make.conf
angegeben werden, und die Build-Maschine sollte alle in ihrem KERNCONF auflisten, beginnend mit ihrem eigenen Kernel./usr/src/sys/arch/conf
muss die Kernel-Konfigurationsdateien für jeden Computer auf der Build-Maschine enthalten. -
Auf dem Build-Computer den Kernel und die Welt gemäß den Anweisungen in How to Update FreeBSD from Source erstellen, aber nichts installieren. Installieren Sie den erzeugten Kernel stattdessen auf dem Testcomputer. Verwenden Sie NFS, um
/usr/src
und/usr/obj
auf dem Testsystem zu mounten. Führen Sie dannshutdown now
aus, um in den Einbenutzermodus zu wechseln, damit der neue Kernel und die neue Welt installiert werden können, und führen Sie dannmergemaster
wie gewohnt aus. Starten Sie neu, um nach Abschluss zu den regulären Mehrbenutzeroperationen zurückzukehren. -
Nachdem überprüft wurde, dass alles auf dem Testcomputer erfolgreich funktioniert, installieren Sie die aktualisierte Software auf den anderen Maschinen im Build-Set mit demselben Ansatz.
Das ähnliche Konzept ist auf den Ports-Baum anwendbar. Der erste Schritt besteht darin, /usr/ports
über NFS mit allen Build-Set-Computern zu teilen. Um /etc/make.conf
so zu konfigurieren, dass distfiles geteilt werden, geben Sie DISTDIR auf ein freigegebenes Verzeichnis an, das von dem Benutzer root lesbar ist, dem das NFS-Mount zugewiesen ist. WRKDIRPREFIX muss auf jedem System auf ein lokales Build-Verzeichnis gesetzt werden, wenn Ports lokal erstellt werden sollen. Setzen Sie PACKAGES auf dem Build-System auf ein Verzeichnis ähnlich wie DISTDIR, wenn das Build-System Pakete für die Computer im Build-Set erstellen und verteilen soll.