După 11 luni de dezvoltare, a fost lansată versiunea FreeBSD 13.2. Imaginile de instalare au fost create pentru arhitecturile amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 și riscv64. De asemenea, au fost pregătite compilări pentru sisteme de virtualizare (QCOW2, VHD, VMDK, raw) și medii cloud Amazon EC2, Google Compute Engine și Vagrant.
Modificări cheie:
- A fost implementată posibilitatea de a crea snapshoot-uri ale sistemelor de fișiere UFS și FFS, pe care este activat jurnalizarea (actualizări soft). De asemenea, a fost adăugată suport pentru salvarea de baze de date în fundal (începerea dump-ului cu flag-ul „-L”) cu conținutul sistemelor de fișiere UFS montate, în cazul în care jurnalizarea este activată. Dintre funcțiile care nu sunt disponibile la utilizarea jurnalizării, rămâne execuția în fundal a verificării integrității prin utilitarul fsck.
- În compunerea principală a fost acceptat driverul wg care funcționează la nivel de nucleu, implementând interfața de rețea pentru VPN WireGuard. Pentru a utiliza algoritmii criptografici necesari driverului, a fost extins API-ul subsistemului criptografic din nucleul FreeBSD, în care a fost adăugată o legătură ce permite utilizarea prin standardul api criptografic a algoritmilor care nu sunt susținuți în FreeBSD din biblioteca libsodium. În timpul dezvoltării, a fost efectuată, de asemenea, o optimizare pentru a echilibra uniform sarcinile de criptare și decriptare a pachetelor pe nuclee CPU, ceea ce a permis reducerea cheltuielilor în cazul procesării pachetelor WireGuard.
Încercarea anterioară de a include WireGuard în FreeBSD a fost făcută în 2020, dar a fost încheiată într-un scandal, în urma căruia codul deja adăugat a fost șters din cauza calității slabe, a lucrului neglijent cu buffer-ele, utilizării stub-urilor în locul verificărilor, implementării incomplete a protocolului și încălcării licenței GPL. Noua implementare a fost pregătită împreună de echipele principale de dezvoltare FreeBSD și WireGuard cu participarea lui Jason Donenfeld, autorul VPN-ului WireGuard, și a lui John Baldwin, un cunoscut dezvoltator FreeBSD. Înainte de acceptarea noului cod, cu sprijinul organizației FreeBSD Foundation, a avut loc o revizuire completă a modificărilor.
- A fost implementat suportul pentru protocolul de comunicație Netlink (RFC 3549), utilizat în Linux pentru organizarea interacțiunii între nucleu și procesele din spațiul utilizatorului. Proiectul se limitează la suportul familiei de operații NETLINK_ROUTE pentru gestionarea stării subsistemului de rețea din nucleu, ceea ce permite utilizarea utilitarului ip din pachetul iproute2 pentru gestionarea interfețelor de rețea, configurarea adreselor IP, gestionarea rutării și manipularea obiectelor nexthop, care stochează date despre starea utilizată pentru transmiterea pachetului la destinația dorită.
- Pentru toate fișierele executabile ale sistemului de bază pe platformele pe 64 de biți, randomizarea spațiului de adrese (ASLR, Address Space Layout Randomization) este activată în mod implicit. Pentru dezactivarea selectivă a ASLR, pot fi utilizate comenzile „proccontrol -m aslr -s disable” sau „elfctl -e +noaslr”.
- În ipfw, pentru căutarea adreselor MAC se folosesc tabele de bază (Radix table), ceea ce permite crearea de tabele cu adrese MAC și utilizarea acestora pentru filtrarea traficului. De exemplu: 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
- Au fost adăugate și disponibile pentru descărcare prin loader.conf modulele nucleului dpdk_lpm4 și dpdk_lpm6 cu implementarea algoritmului de căutare a rutelor DIR-24-8 pentru IPv4/IPv6, care permite optimizarea funcțiilor de rutare pentru gazde cu tabele de rutare foarte mari (în teste, s-a observat o creștere a vitezei la nivelul de 25%). Pentru configurarea modulelor, se poate folosi utilitarul standard route (a fost adăugată opțiunea FIB_ALGO).
- Implementarea sistemului de fișiere ZFS a fost actualizată la versiunea OpenZFS 2.1.9. În scriptul de start zfskeys, a fost asigurată încărcarea automată a cheilor stocate în FS ZFS. A fost adăugat un nou script RC zpoolreguid pentru a atribui un identificator GUID unuia sau mai multor zpool (de exemplu, util pentru medii de virtualizare cu date partajate).
- În hypervisorul Bhyve și modulul vmm, a fost implementat suportul pentru atașarea la sistemul gazdă a mai mult de 15 CPU virtuali (reglat prin sysctl hw.vmm.maxcpu). În utilitarul bhyve, a fost implementată emularea dispozitivului virtio-input, prin care pot fi injectate evenimente de intrare de la tastatură și mouse în sistemul gazdă.
- În KTLS, implementarea protocolului TLS, care funcționează la nivelul nucleului FreeBSD, a fost adăugată suport pentru accelerarea hardware a TLS 1.3 prin delegarea către placa de rețea a unor operații legate de procesarea pachetelor criptate. Anterior, o astfel de posibilitate era disponibilă pentru TLS 1.1 și TLS 1.2.
- În scriptul de pornire growfs, la extinderea sistemului de fișiere rădăcină, s-a asigurat adăugarea unei partiții de swap, în cazul în care această partiție nu exista inițial (de exemplu, utilă la instalarea pe o cartă SD a unei imagini de sistem gata). Un nou parametru growfs_swap_size a fost adăugat în rc.conf pentru gestionarea dimensiunii swap-ului.
- În scriptul de pornire hostid s-a asigurat generarea unui UUID aleator în cazul în care fișierul /etc/hostid este absent și nu se poate obține UUID de la hardware. De asemenea, a fost adăugat fișierul /etc/machine-id cu o reprezentare compactă a identificatorului gazdei (fără cratime).
- În rc.conf au fost adăugate variabilele defaultrouter_fibN și ipv6_defaultrouter_fibN, prin care se pot adăuga rute implicite în tablourile FIB, diferite de cele primare.
- În biblioteca libmd a fost adăugat suport pentru hash-uri SHA-512/224.
- În biblioteca pthread a fost implementat suport pentru semantica funcțiilor utilizate în Linux.
- În kdump, a fost adăugat suport pentru decodarea apelurilor de sistem Linux. În kdump și sysdecode a fost adăugat suport pentru urmărirea apelurilor de sistem în stil Linux.
- În utilitarul killall a apărut posibilitatea de a trimite semnale proceselor legate de un anumit terminal (de exemplu, „killall -t pts/1”).
- A fost adăugat utilitarul nproc pentru a afișa numărul de unități de calcul disponibile procesului curent.
- În utilitarul pciconf a fost adăugat suport pentru decodarea parametrilor ACS (Access Control Services).
- În nucleu a fost adăugată opțiunea SPLIT_KERNEL_DEBUG, care permite salvarea informațiilor de depanare pentru nucleu și modulele sale în fișiere separate.
- În ABI Linux s-a finalizat aproape implementarea suportului pentru mecanismul vDSO (virtual dynamic shared objects), care oferă un set limitat de apeluri de sistem accesibile în spațiul utilizatorului fără schimbarea contextului. ABI Linux pe sistemele ARM64 a fost adus la paritate cu implementarea pentru arhitectura AMD64.
- Suportul hardware-ului a fost îmbunătățit. A fost adăugat suport pentru monitorizarea performanței (hwpmc) pentru CPU-urile Intel Alder Lake. Driverul iwlwifi pentru plăcile de rețea wireless Intel a fost actualizat pentru a include noi cipuri și standardul 802.11ac. A fost adăugat driverul rtw88 pentru plăcile de rețea wireless Realtek cu interfață PCI. Funcționalitățile stratului linuxkpi au fost extinse pentru utilizarea driverelor Linux în FreeBSD.
- Biblioteca OpenSSL a fost actualizată la versiunea 1.1.1t, LLVM/Clang la versiunea 14.0.5, iar serverul și clientul SSH au fost actualizați la OpenSSH 9.2p1 (în versiunea anterioară a fost utilizată OpenSSH 8.8p1). De asemenea, au fost actualizate versiunile 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, zlib 1.2.13.
De asemenea, a fost anunțat trecerea în categoria de deprecated și eliminarea, începând cu ramura FreeBSD 14.0, a parolelor unice OPIE, driverelor ce și cp, driverelor pentru plăcile cu interfață ISA, utilitarilor mergemaster și minigzip, componentelor ATM în netgraph (NgATM), procesului de fundal telnetd și clasei VINUM în geom.
Sursa: opennet.ro
