Nach 11 Monaten Entwicklung wurde die Version FreeBSD 13.2 veröffentlicht. Installationsabbilder wurden für die Architekturen amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 und riscv64 erstellt. Darüber hinaus wurden Builds für Virtualisierungssysteme (QCOW2, VHD, VMDK, raw) und Cloud-Umgebungen wie Amazon EC2, Google Compute Engine und Vagrant vorbereitet.
Wichtige Änderungen:
- Es wurde die Möglichkeit zur Erstellung von Snapshots für UFS- und FFS-Dateisysteme implementiert, bei denen das Logging (soft updates) aktiviert ist. Außerdem wurde die Unterstützung für die Hintergrundspeicherung von Dumps (Ausführung von dump mit dem Flag „-L“) mit dem Inhalt der gemounteten UFS-Dateisysteme bei aktiviertem Logging hinzugefügt. Aus den Funktionen, die bei aktiviertem Logging nicht verfügbar sind, bleibt die Hintergrundausführung der Integritätsprüfung mit dem Tool fsck.
- Im Hauptbestandteil wurde der unter Kernel-Ebene arbeitende Treiber wg mit der Implementierung eines Netzwerkinterfaces für VPN WireGuard. Um die benötigten Treiber für die kryptografischen Algorithmen nutzen zu können, wurde die API der Kryptosubsysteme des FreeBSD-Kernels erweitert. Dadurch entstand ein Wrapper, der es ermöglicht, nicht in FreeBSD unterstützte Algorithmen aus der Bibliothek libsodium über die standardmäßige Krypto-API zu verwenden. Während der Entwicklung wurde außerdem eine Optimierung vorgenommen, um die Last der Verschlüsselungs- und Entschlüsselungsaufgaben gleichmäßig auf die CPU-Kerne zu verteilen, was die Overheadkosten bei der Verarbeitung von WireGuard-Paketen senkte.
Der vorherige Versuch, WireGuard in FreeBSD zu integrieren, fand im Jahr 2020 statt, endete jedoch in einem Skandal, der dazu führte, dass der bereits hinzugefügte Code aufgrund mangelhafter Qualität, unsachgemäßer Pufferbearbeitung, Verwendung von Platzhaltern anstelle von Überprüfungen, unvollständiger Implementierung des Protokolls und Verstoß gegen die GPL-Lizenz entfernt wurde. Eine neue Implementierung wurde in Zusammenarbeit mit den Hauptentwicklungsteams von FreeBSD und WireGuard unter Beteiligung von Jason A. Donenfeld, dem Schöpfer von VPN WireGuard, und John H. Baldwin, einem bekannten Entwickler von FreeBSD, erstellt. Vor der Annahme des neuen Codes wurde mit Unterstützung der FreeBSD Foundation eine umfassende Überprüfung der Änderungen durchgeführt.
- Die Unterstützung für das Kommunikationsprotokoll Netlink (RFC 3549) wurde implementiert, das in Linux verwendet wird, um die Interaktion des Kernels mit Prozessen im Benutzerspeicher zu organisieren. Das Projekt beschränkt sich auf die Unterstützung der NETLINK_ROUTE-Operationen zur Verwaltung des Status der Netzwerksubsysteme im Kernel, was ermöglicht, die Linux-Utility ip aus dem Paket iproute2 zur Verwaltung von Netzwerkinterfaces in FreeBSD zu verwenden. IP-Adressen, Routing- und Objektmanipulationseinstellungen für nexthop, die Statusdaten speichern und für die Übertragung von Paketen an das gewünschte Ziel verwendet werden.
- Für alle ausführbaren Dateien des Basissystems auf 64-Bit-Plattformen ist standardmäßig die Adressraumrandomisierung (ASLR, Address Space Layout Randomization) aktiviert. Um ASLR selektiv zu deaktivieren, können die Befehle „proccontrol -m aslr -s disable“ oder „elfctl -e +noaslr“ verwendet werden.
- In ipfw werden Basis-Tabellen (Radix-Tabellen) zur Suche von MAC-Adressen eingesetzt, was es ermöglicht, MAC-Adressen-Tabellen zu erstellen und diese zur Filterung des Traffics zu verwenden. Beispiel: ipfw table 1 create type mac ipfw table 1 add 11:22:33:44:55:66/48 ipfw add skipto tablearg src-mac ‘table(1)’ ipfw add deny src-mac ‘table(1, 100)’ ipfw add deny lookup dst-mac 1
- Die Kernel-Module dpdk_lpm4 und dpdk_lpm6 wurden hinzugefügt und sind über loader.conf zum Download verfügbar. Diese implementieren den DIR-24-8-Routing-Algorithmus für IPv4/IPv6, der die Routing-Funktionen für Hosts mit sehr großen Routingtables optimiert (Tests zeigen eine Geschwindigkeitssteigerung von etwa 25%). Für die Konfiguration der Module kann das Standardwerkzeug route verwendet werden (die Option FIB_ALGO wurde hinzugefügt).
- Die Implementierung des ZFS-Dateisystems wurde auf die Version OpenZFS 2.1.9 aktualisiert. Das Startskript zfskeys ermöglicht jetzt das automatische Laden von Schlüsseln, die im ZFS-Dateisystem gespeichert sind. Ein neues RC-Skript zpoolreguid wurde hinzugefügt, um eine GUID-ID für einen oder mehrere zpools zuzuweisen (zum Beispiel nützlich für Virtualisierungsumgebungen mit gemeinsamen Daten).
- Im Hypervisor Bhyve und im Modul vmm wurde die Unterstützung für die Zuordnung von mehr als 15 virtuellen CPUs an das Gastbetriebssystem implementiert (reguliert über sysctl hw.vmm.maxcpu). Das Tool bhyve ermöglicht die Emulation des Geräts virtio-input, mit dem Eingaben von Tastatur und Maus in das Gastbetriebssystem eingespeist werden können.
- In KTLS, der Implementierung des TLS-Protokolls, die auf der Kernel-Ebene von FreeBSD arbeitet, wurde die Unterstützung für die hardwarebeschleunigte TLS 1.3 hinzugefügt, indem einige Operationen zur Verarbeitung von verschlüsselten eingehenden Paketen auf die Netzwerkhardware ausgelagert werden. Zuvor war diese Möglichkeit nur für TLS 1.1 und TLS 1.2 verfügbar.
- Im Startskript growfs wird bei der Erweiterung des Root-Dateisystems ein Swap-Bereich hinzugefügt, falls dieser ursprünglich fehlte (z. B. nützlich bei der Installation eines vorgefertigten Systemabbilds auf eine SD-Karte). Ein neuer Parameter growfs_swap_size wurde in rc.conf hinzugefügt, um die Größe des Swap-Bereichs zu steuern.
- Im Startskript hostid wird eine zufällige UUID generiert, falls die Datei /etc/hostid fehlt und die UUID nicht von der Hardware abgerufen werden kann. Außerdem wurde die Datei /etc/machine-id mit einer kompakten Darstellung der Host-ID (ohne Bindestriche) hinzugefügt.
- In rc.conf wurden die Variablen defaultrouter_fibN und ipv6_defaultrouter_fibN hinzugefügt, über die Standardrouten zu FIB-Tabellen, die von der primären abweichen, hinzugefügt werden können.
- In die Bibliothek libmd wurde die Unterstützung für SHA-512/224-Hashes integriert.
- In der pthread-Bibliothek wurde die Unterstützung für die Semantik von Funktionen, die in Linux verwendet werden, implementiert.
- In kdump wurde die Unterstützung für die Dekodierung von Linux-Systemaufrufen hinzugefügt. In kdump und sysdecode wurde die Unterstützung für das Tracing von Systemaufrufen im Linux-Stil ergänzt.
- In der killall-Utility gibt es jetzt die Möglichkeit, Signale an Prozesse zu senden, die an ein bestimmtes Terminal gebunden sind (z. B. „killall -t pts/1“).
- Das Dienstprogramm nproc wurde hinzugefügt, um die Anzahl der verfügbaren Rechenblöcke für den aktuellen Prozess anzuzeigen.
- Das Dienstprogramm pciconf unterstützt jetzt das Dekodieren von ACS (Access Control Services) Parametern.
- Im Kernel wurde die Einstellung SPLIT_KERNEL_DEBUG hinzugefügt, die es ermöglicht, Debugging-Informationen für den Kernel und Kernel-Module in separate Dateien zu speichern.
- Die Unterstützung des vDSO (virtual dynamic shared objects) Mechanismus im Linux ABI ist fast abgeschlossen. Dieser bietet einen begrenzten Satz von Systemaufrufen, die im Benutzerspeicher ohne Kontextwechsel verfügbar sind. Das Linux ABI auf ARM64-Systemen wurde auf den Stand der Implementierung für die AMD64-Architektur gebracht.
- Die Hardwareunterstützung wurde verbessert. Die Unterstützung für die Leistungsüberwachung (hwpmc) für Intel Alder Lake CPUs wurde hinzugefügt. Der iwlwifi-Treiber für Intel-WLAN-Karten wurde aktualisiert, um neue Chips und den 802.11ac-Standard zu unterstützen. Der rtw88-Treiber für Realtek-WLAN-Karten mit PCI-Schnittstelle wurde hinzugefügt. Die Möglichkeiten der linuxkpi-Schicht für die Verwendung von FreeBSD Linux-Treibern wurden erweitert.
- Die OpenSSL-Bibliothek wurde auf Version 1.1.1t aktualisiert, LLVM/Clang auf Version 14.0.5, und der SSH-Server sowie der Client wurden auf OpenSSH 9.2p1 aktualisiert (in der vorherigen Version kam OpenSSH 8.8p1 zum Einsatz). Auch die Versionen von bc 6.2.4, expat 2.5.0, file 5.43, less 608, libarchive 3.6.2, sendmail 8.17.1, sqlite 3.40.1, unbound 1.17.1 und zlib 1.2.13 wurden aktualisiert.
Zusätzlich wurde angekündigt, dass die einmaligen OPIE-Passwörter, die Treiber ce und cp, die Treiber für ISA-Schnittstellenkarten, die Tools mergemaster und minigzip, die ATM-Komponenten in netgraph (NgATM), der Hintergrundprozess telnetd und die VINUM-Klasse in geom ab der Version FreeBSD 14.0 als veraltet gelten und entfernt werden.
Quelle: opennet.ru
