Das FreeBSD Release Engineering Team hat heute FreeBSD 14.0 freigegeben. Wie die Versionsnummer erkennen lässt, handelt es sich um das vierzehnte Hauptrelease seit dem Beginn des FreeBSD Projekts 1993. Wie jedes Hauptrelease bringt es eine Reihe größerer, teilweise vom Nutzer sichtbarer, teilweise unter der Haube und somit für den Nutzer unsichtbarer Veränderungen. Dem derzeitigen FreeBSD Support Modell folgend, wird der mit diesem Release beginnende 14.x Zweig für fünf Jahre unterstützt werden.
Die wichtigsten Änderungen im Überblick:
Userland Configuration:
Userland Application:
General Kernel:
General Storage:
NFS:
UFS:
ZFS:
OpenZFS wurde auf Version 2.2 aktualisiert. Zu den neuen Funktionen gehören:
Zu den Leistungsverbesserungen gehören:
ZFS wurde auf 32-Bit-PowerPC/PowerPCPE aktiviert.
Änderungen am Bootloader:
Netzwerk:
Die Ankündigung in Kopie:
Die Ankündigung: https://www.freebsd.org/releases/14.0R/announce/
Die Errata-Liste: https://www.freebsd.org/releases/14.0R/errata/
Die Release Notes: https://www.freebsd.org/releases/14.0R/relnotes/
Die Errata-Liste: https://www.freebsd.org/releases/14.0R/errata/
Die Release Notes: https://www.freebsd.org/releases/14.0R/relnotes/
Die wichtigsten Änderungen im Überblick:
Userland Configuration:
- Die Standard Shell für den Benutzer root ist jetzt sh(1) (bislang csh). sh hat viele neue Funktionen für die interaktive Benutzung.
- Der Standard MTA (mail transport agent) wurde von sendmail auf dma(8) (Dragonfly Mail Agent) geändert. dma wird via mailer.conf(5) konfiguriert.
- Die Konfigurationsvariable
mta_start_script
wurde zusammen mit demothermta
-Startskript aus rc.conf(5) entfernt. - jail(8) unterstützt jetzt
.include
-Direktiven in jail.conf(5)-Dateien, mit Unterstützung für das Globbing von Dateinamen. - Die Einmalpasswortfunktion OPIE, opie(4), wurde aus dem Basissystem entfernt. Wenn Sie es dennoch verwenden möchten, installieren Sie den Sicherheits-/Opie-Port. Andernfalls stellen Sie sicher, dass Sie jede Erwähnung von
pam_opie
undpam_opieaccess
aus Ihren PAM-Richtlinien entfernen oder auskommentieren. etcupdate(8) kümmert sich normalerweise um die regulären Richtlinien. - Die Build-Konfigurationsoption
SHARED_TOOLCHAIN
wurde entfernt. Der Aufbau einer statisch verknüpften Toolchain ist weiterhin mit der allgemeinen Option NO_SHARED möglich. - Die Layoutkonfiguration wurde für die neue französische Bépo-Tastatur (Version 1.1rc2) hinzugefügt, eingeführt von der French national organization for standardization als „NF Z71‐300“.
- Ein
rc.d
-Skript (siehe rc(8)) darf jetzt einestatus
method haben, auch wenn es keinenprocname
definiert oder keine PID-Datei hat.
Userland Application:
- Der hypervisor bhyve(8) unterstützt nun optional TPM passthrough (Trusted Platform Module), was jedoch keinen direkten Zugriff ermöglicht, aber Kommandos eines Gastes werden zum physischen TPM weitergeleitet.
- GPU passthrough wurde für bhyve(8) für AMD- und Intel-GPUs verbessert. Passthrough funktioniert jedoch noch nicht in allen Anwendungsfällen und die Konfiguration ist noch nicht dokumentiert.
- Das Dienstprogramm cpuset(1) wurde von /usr/bin nach /bin verschoben, sodass es während der Startverarbeitung immer verfügbar ist. /usr/bin/cpuset ist jetzt ein symbolischer Link.
- Das veraltete Dienstprogramm fmtree(8) wurde entfernt.
- freebsd-update(8) dokumentiert jetzt, dass Dateien unter /var/db/freebsd-update gelöscht werden können, wenn kein Upgrade durchgeführt wird und kein Rollback erforderlich ist.
- Ein neues Dienstprogramm fwget(8) durchsucht das System nach Peripheriegeräten, die Firmware benötigen, und installiert die entsprechenden Pakete dafür. Derzeit wird nur das PCI-Subsystem unterstützt und es ist nur Video-Firmware für Intel- und AMD-GPUs bekannt.
- Die Benutzerfreundlichkeit von head(1) und tail(1) wurde verbessert, indem die Optionen -q und -h konsequent unterstützt werden, Zahlen mit SI-Suffixen zugelassen werden und die 2^31-Beschränkung für Zeilen für head(1) entfernt wird.
- makefs(8) bietet jetzt experimentelle ZFS-Unterstützung. Es kann einen ZFS-Pool erstellen, der von einem einzelnen Festplatten-VDEV unterstützt wird und einen oder mehrere Datensätze enthält, die aus dem Staging-Verzeichnis gefüllt werden.
- Das Dienstprogramm mandoc(1) verfügt über eine Problemumgehung für die fehlende Makroverarbeitung bei der Verarbeitung der Listenbreite, was zu genaueren Breiten für Listenspalten führt.
- mixer(8) versucht nicht mehr zu erraten ob ein Lautstärkenwert absolut ist oder ein Prozentwert. Es akzeptiert nun auch Prozentwerte, indem man % anhängt. Andernfalls ist der Wert absolut.
- Das
netcat
Dienstprogramm nc(1) kann jetzt einif_tun
(tun(4))-Broker sein. - Das Dienstprogramm netstat(1) berechnet nun mit der Option
-i
die korrekten Spaltenbreiten, wodurch die Option-w
überflüssig wird. - Das Dienstprogramm portsnap(8) wurde entfernt. Benutzern wird empfohlen, den Ports-Baum abzurufen, indem sie
pkg install git
und danngit clone https://git.FreeBSD.org/ports.git /usr/ports
verwenden. - Die Programme pw(8) und bsdinstall(8) erstellen jetzt Home-Verzeichnisse für Benutzer standardmäßig in /home und nicht in /usr/home. Der standardmäßige symbolische Link für /home, der auf /usr/home verweist, wird nicht mehr erstellt.
- Das Dienstprogramm „sleep(1)“ akzeptiert jetzt andere Einheiten als Sekunden und mehrere Verzögerungswerte, die summiert werden (z.B. 1h 30m).
- Das Dienstprogramm sockstat(1) wird jetzt in einer Sandbox mit Capsicum ausgeführt.
- Das Dienstprogramm systat(1) verfügt über einen neuen Befehl,
iolat
, der vom CAM-I/O-Scheduler berechnete E/A-Latenzen meldet. - Ein neues Dienstprogramm, tcpsso(8), kann eine Socket-Option auf einen vorhandenen TCP-Endpunkt anwenden und beispielsweise das Überlastungskontrollmodul oder den TCP-Stack ändern.
- Der Telnet-Daemon telnetd(8) wurde entfernt. Bei Bedarf steht ein Port zur Verfügung:
net/freebsd-telnetd
. Der client ist nicht betroffen. - Die Option
PROFILE
ist standardmäßig deaktiviert, daher werden keine Profilversionen von Systembibliotheken bereitgestellt. Hardwarebasiertes Profiling (z. B. hwpmc(4)) wird bevorzugt. - Komprimierte Debug-Abschnitte in Binärdateien sind auf Little-Endian-Zielen standardmäßig aktiviert.
- Die Konfiguration die beim Erstellen von Jails auf arm64 nützlich sein können um armv7-Verteilungssätze zu erstellen, wurde hinzugefügt.
General Kernel:
- Das SMP-System unterstützt jetzt bis zu 1024 Kerne auf amd64 und arm64. Viele Kernel-CPU-Sätze werden jetzt dynamisch zugewiesen, um übermäßigen Speicherverbrauch zu vermeiden. Die Kernel-CPUset-ABI wurde aktualisiert, um den höheren Grenzwert zu unterstützen.
- Das ACPI-System unterstützt jetzt den kritischen Standby-Schwellenwert (S3)
_CR3
. - Der
acpi_timer_test
ist standardmäßig deaktiviert, wodurch die Verwendung von ACPI-fast anstelle von ACPI-safe erzwungen wird und der Startvorgang beschleunigt wird. Die Problemumgehung für defekte ACPI-Timer kann durch Festlegen des optimierbaren Parametershw.acpi.timer_test_enabled=1
wieder aktiviert werden. Wenn Probleme mit der Zeitmessung beobachtet werden, testen Sie bitte mithw.acpi.timer_test_enabled=1
in Loader.conf(8) und melden Sie, ob das Problem dadurch behoben wird. - boottrace(4) ist eine neue Kernel-Userspace-Schnittstelle zum Erfassen von Trace-Ereignissen während des Systemstarts und -herunterfahrens. Ereignisanmerkungen sind in den Boot- und Shutdown-Pfaden im Kernel vorhanden; Systemdienstprogramme (init(8), Shutdown(8), Reboot(8)); und rc(8)-Skripte (über boottrace(8)). boottrace(4) legt den Fokus auf Benutzerfreundlichkeit und richtet sich vor allem an Systemadministratoren. Es ist im standardmäßigen GENERIC-Kernel verfügbar und kann durch Umschalten einer sysctl(8)-Variablen aktiviert werden.
- FreeBSD kann jetzt über die amd64
FIRECRACKER
Kernelkonfiguration innerhalb des Firecracker VMM ausgeführt werden. - FreeBSD rebootet jetzt schneller.
kern.reboot_wait_time
wurde hinzugefügt, um die Verzögerung vor dem Neustart nach dem Drucken aller Kernel-Meldungen auf der Konsole zu steuern. Der Standardwert ist 0. Wenn Sie ihn auf 1 setzen, wird das vorherige Verhalten wiederhergestellt (1 Sekunde Verzögerung). - Ein neuer DTrace-Anbieter,
kinst
, wurde hinzugefügt; siehe dtrace_kinst(4). Der Anbieter ermöglicht die Rückverfolgung von Kernel-Anweisungen, ähnlich wie der FBT-Anbieter (Function Boundary Tracing), mit der Ausnahme, dass alle Anweisungen anstelle nur logischer Eingabe- und Rückgabeanweisungen geprüft werden können. - Die Unterstützung für asymmetrische kryptografische Operationen wurde aus dem Open Cryptographic Framework (OCF) des Kernels entfernt, da sie von modernen OpenSSL-Versionen nicht verwendet werden.
- Eine native timerfd(2)-Funktion wurde hinzugefügt, um die Portierung von Linux-Programmen zu erleichtern, die timerfd verwenden. Bisher war timerfd nur unter der Linux-Emulation verfügbar. Für Programme, die nur für FreeBSD geschrieben wurden, wird der kqueue(2) EVFILT_TIMER-Filter zum Einrichten beliebiger Timer bevorzugt.
- Die vom
security.bsd.see_jail_proc
sysctl(8)-Knopf gesteuerte Prozesssichtbarkeitsrichtlinie wurde verstärkt, indem unbefugte Benutzer daran gehindert wurden, zufällig Prozesse mit derselben (echten) UID in einer sub-jail zu beenden, ihre Priorität zu ändern oder zu debuggen. Vorausgesetzt, die PID eines solchen Prozesses wird richtig geschätzt, wäre dies auch dann erfolgreich, wenn diese Prozesse für sie nicht sichtbar sind. Es wurde ebenso wie die anderen Prozesssichtbarkeitsrichtlinien durch MAC-Richtlinien überschreibbar gemacht. - Die durch den sysctl(8)-Knopf
security.bsd.see_other_gids
gesteuerte Prozesssichtbarkeitsrichtlinie wurde korrigiert, um bei der Bestimmung, ob der Benutzer, der versucht, auf den Prozess zuzugreifen, Mitglied eines Prozesses ist, die tatsächliche Gruppe eines Prozesses anstelle seiner effektiven Gruppe zu berücksichtigen ' Gruppen. Der Grund dafür ist, dass einige Benutzer weiterhin von ihnen gestartete Prozesse sehen sollten, selbst wenn sie über das Setgid-Bit weitere Berechtigungen erwerben, wohingegen sie keine Prozesse sehen sollten, die von einem privilegierten Benutzer gestartet wurden, der vorübergehend der primären Gruppe des Benutzers beitritt. Dieses neue Verhalten steht im Einklang mit dem, was security.bsd.see_other_uids schon immer für Benutzer-IDs getan hat (d. h. es berücksichtigt die tatsächliche Benutzer-ID eines Prozesses und nicht die effektive ID) - Der Zenbleed-bug, der AMD Zen2-Prozessoren betrifft, wird jetzt automatisch gefixt (über Chicken Bit), wodurch Fehlverhalten und Datenlecks auf betroffenen Computern verhindert werden. Bei Bedarf kann die Anwendung der Schadensbegrenzung manuell über den sysctl(8)-Knopf
machdep.mitigations.zenbleed.enable
gesteuert werden. Weitere Informationen finden Sie auf der neuen Handbuchseite zu Mitigations(7).
General Storage:
- gconcat(8) und seine Kernel-Unterstützung haben jetzt die Möglichkeit, Geräte an das verkettete Gerät anzuhängen, die bei der Erstellung des gconcat-Geräts nicht vorhanden waren.
- Ein neues Dienstprogramm gunion(8) verfolgt Änderungen an einer schreibgeschützten Festplatte auf einer beschreibbaren Festplatte. Dies kann nützlich sein, um vorläufige Änderungen an der Festplatte vorzunehmen, z. B. Dateisystemreparaturen oder Software-Upgrades, und diese dann entweder zu übernehmen oder rückgängig zu machen.
- Im Zuge der Fehlerbehebung und Lösung eines Problems mit dem Vnode-Recycling im generischen Dateisystemcode wurden sysctls für vnode-bezogene Statistiken zur besseren Sichtbarkeit unter
vfs.vnode
gruppiert.
NFS:
- NFS unterstützt jetzt die Ausführung eines NFS-Servers in einer VNET-jail, einschließlich nfsd(8), nfsuserd(8), mountd(8), gssd(8) und rpc.tlsservd(8). Die VNET-jail muss sich in einem eigenen Dateisystem befinden, über den Jail-Parameter
allow.nfsd
verfügen undforce_statfs
darf nicht auf 0 gesetzt werden. Die Verwendung von UDP- und pNFS-Serverkonfigurationen ist nicht zulässig. - Der FreeBSD-NFS-Client kann jetzt über den einstellbaren Parameter
vfs.maxbcachebuf
so eingestellt werden, dass er eine E/A-Größe von 1 MB verwendet. Der Linux-NFS-Client kann auch 1 MByte I/O ausführen. Dazu muss der Wert vonkern.ipc.maxsockbuf
erhöht werden. Eine Konsolenmeldung schlägt eine Einstellung dafür vor. Beachten Sie, dass die maximale E/A-Größe für den FreeBSD-NFS-Server mit sysctlvfs.nfsd.srvmaxio
auf eine beliebige Potenz von 2 bis 1 MB erhöht werden kann, während nfsd(8) nicht ausgeführt wird.
UFS:
- Es ist jetzt möglich, Dateisystemprüfungen im Hintergrund mithilfe eines Snapshots auf UFS-Dateisystemen durchzuführen, die mit protokollierten Soft-Updates ausgeführt werden.
- Für Superblöcke, Zylindergruppenkarten und Inodes wurden Prüf-Hashes hinzugefügt, um Korruption zu erkennen. Es werden weitaus umfangreichere Prüfungen des Superblocks (120) und der Zylindergruppen (20) durchgeführt als nur die zuvor durchgeführte Prüfung mit magischen Zahlen.
- Die libufs(3)-Bibliothek wurde aktualisiert, um diese Prüfungen einzuschließen, sodass sie jetzt von allen Dateisystem-Dienstprogrammen durchgeführt werden. Die Prüfungen werden in einer Kerneldatei implementiert, die auch von libufs eingebunden wird. Eine weitere Änderung an libufs besteht darin, dass der Code zum Finden alternativer Superblöcke von fsck_ffs(8) in die gemeinsam genutzte Datei verschoben wurde, sodass er jetzt im Kernel-Loader sowie in allen Dateisystem-Dienstprogrammen verfügbar ist.
ZFS:
OpenZFS wurde auf Version 2.2 aktualisiert. Zu den neuen Funktionen gehören:
- Blockklonen, das flache Kopien von Blöcken in Dateikopien ermöglicht. Dies ist optional und standardmäßig deaktiviert; es kann mit
sysctl vfs.zfs.bclone_enabled=1
aktiviert werden. - Scrub-Fehlerprotokoll (zpool scrub -e)
- BLAKE3-Prüfsummen, die schnell sind und jetzt die empfohlenen sicheren Prüfsummen sind
- Korrigierendes
zfs receive
kann beschädigte Daten reparieren - dev and zpool user properties, ähnlich den dataset user properties.
Zu den Leistungsverbesserungen gehören:
- vollständig adaptives ARC, ein einheitliches ARC, das den Bedarf an manueller Abstimmung minimiert
- zstd vorzeitiger Abbruch, Verbesserung der Effizienz bei nicht komprimierbaren Daten
- Verbesserungen beim I/O-Prefetch
- allgemeine Optimierung.
ZFS wurde auf 32-Bit-PowerPC/PowerPCPE aktiviert.
Änderungen am Bootloader:
- Der Lua-basierte Loader(8) interpretiert nun .lua-Dateien, die in
loader_conf_files
erscheinen, als Lua und führt sie in einer Sandbox aus. Vorhandene Loader-Umgebungsvariablen sind als globale Variablen in der Sandbox verfügbar, und jeder globale Variablensatz, sofern es sich nicht um einen Tabellenwert handelt, wird bei erfolgreicher Ausführung der Konfigurationsdatei in der Loader-Umgebung widergespiegelt. Auf Umgebungsvariablen mit Namen, die keine gültigen Lua-Namen sind, kann als Indizes von_ENV
zugegriffen werden; z. B._ENV['net.fibs']
. - EC2-Instanzen starten jetzt mit UEFI, sofern verfügbar, was den Startvorgang erheblich beschleunigt.
Netzwerk:
- carp(4) unterstützt jetzt die Konfiguration der Adresse, an die Carp-Nachrichten gesendet werden, was die Verwendung von Unicast-Adressen ermöglicht. Dies ist in bestimmten virtuellen Konfigurationen nützlich. Siehe carp(4) und ifconfig(8).
- Die Layer-3-Filterung auf if_bridge(4) wird überraschende Dinge bewirken, die nicht ausfallsicher sind, daher sind
net.link.bridge.pfil_member
undnet.link.bridge.pfil_bridge
jetzt standardmäßig auf Null gesetzt. - netlink(4) ist ein Benutzer-/Kernel-Kommunikationsprotokoll, das in RFC 3549 definiert ist und hauptsächlich für die Netzwerkkonfiguration verwendet wird. Es wurde erweitert, verbessert und standardmäßig aktiviert. Eine Reihe von Dienstprogrammen zur Netzwerkkonfiguration wurden auf die Verwendung von Netlink umgestellt.
- Das veraltete
NgATM
(Netgraph ATM-Unterstützung) und die verbleibende ATM-Unterstützung wurden entfernt. - Der pf(4)-Paketfilter unterstützt jetzt Scrubbing mit OpenBSD-Syntax und -Verhalten. Wenn keine FreeBSD-Bereinigungsregeln vorhanden sind, wird ein globales Flag gesetzt
set reassemble yes | no [no-df]
und bestimmt, ob die Paketneuzusammenstellung durchgeführt wird. Scrubbing, wie das Festlegen von tos, ttl usw., kann in Match- und Pass-Regeln durchgeführt werden, was es auch zustandsbehaftet macht. Match-Regeln werden jetzt wie bei OpenBSD vollständig unterstützt, nicht nur für dummynet(4)-Warteschlangen. - pfsync(4) kann jetzt IPv6 verwenden.
- Das pfsync(4)-Paketformat wurde erweitert, um die Unterstützung für Warteschlangen-, Scrubbing- und Route-to-Regeln zu verbessern. Dieses Format ist mit älteren Versionen nicht kompatibel. Das alte Format kann mit
ifconfig pfsync0 Version 1301
ausgewählt werden. Dies ist besonders wichtig, wenn Mitglieder eines pfsync-Clusters nicht gleichzeitig aktualisiert werden. - WiFi 6-Unterstützung wurde zu WPA hinzugefügt (wpa_supplicant(8) und hostapd(8)).
- Die 6to4-Schnittstelle für IPv6 über IPv4, if_stf(4), unterstützt jetzt IPv6 Rapid Deployment (6rd) (RFC5969).
- Die Programme rtsol(8) und rtsold(8) verfügen jetzt über die Option
-i
, um die standardmäßig verwendete zufällige Verzögerung von bis zu einer Sekunde zu deaktivieren. Zu den Standardoptionen für diese Programme in rc.conf(5) gehört-i
. - Die Verarbeitung von IPv6
nodeinfo
(RFC 4620) ist standardmäßig deaktiviert. - Die sysctl(8)-Option
net.inet.tcp.nolocaltimewait
ist jetzt standardmäßig aktiviert. Dies verhindert die Erstellung von Zeitwarteeinträgen für TCP-Verbindungen, die lokal beendet wurden. - Der Standardmechanismus zur Überlastungskontrolle für TCP ist jetzt CUBIC. Für Datenübertragungen über längere Zeiträume weist CUBIC im Wettbewerb mit NewReno einen etwas höheren Anteil der verfügbaren Bandbreite zu.
- IPv4 wurde so geändert, dass die niedrigste Adresse in einem Subnetz (Host 0) nicht gesendet wird, es sei denn, sie ist als Broadcast-Adresse konfiguriert. Dadurch kann die niedrigste Adresse in einem Subnetz für einen Host verwendet werden.
Die Ankündigung in Kopie: