FreeBSD 14.0 发行说明

摘要

FreeBSD 14.0-RELEASE 发行说明总结了在 14-STABLE 开发线上对 FreeBSD 基本系统所做的更改。本文列出了自上一个 RELEASE 版本以来发行的适用的安全公告,以及对 FreeBSD 内核和用户空间的重大更改。同时也提供了关于升级的简要说明。

介绍

本文档包含了 FreeBSD 14.0-RELEASE 的发行说明。它说明了 FreeBSD 中最近添加、更改或删除的功能。同时还提供了有关从以前版本升级的一些建议。

这份发行说明适用于 14-STABLE 开发分支创建以来的最新的 RELEASE 版本。可以在 https://www.FreeBSD.org/releases/ 找到有关此分支上的预构建二进制发行版的信息。

这份发行说明适用于 14-STABLE 开发分支中 13.2-RELEASE 和未来 14.1-RELEASE 之间的一个点。可以在 https://www.FreeBSD.org/releases/ 找到有关此分支上的预构建二进制发行版的信息。

FreeBSD 14.0-RELEASE 的这个发行版本是一个正式的 RELEASE 版本。可以在 https://www.FreeBSD.org/releases/ 或其镜像站点找到它。有关获取这个(或其他) FreeBSD 发行版本的更多信息,请参阅 FreeBSD 手册 中的获取 FreeBSD 附录

在安装 FreeBSD 之前,建议所有用户查阅发行勘误。发行勘误文档会在发行周期结束后或发行后发现的“迟到”的信息进行更新。通常,它包含已知错误、安全公告和对文档的更正。可以在 FreeBSD 网站上找到 FreeBSD 14.0-RELEASE 的最新发行勘误副本。

本文档说明了自 13.2-RELEASE 以来 FreeBSD 中最为用户可见的新功能或更改。一般来说,这里所述的更改是独特于 14-STABLE 分支的,除非特别标记为 MERGED 功能。

一般的发行说明条目记录了自 13.2-RELEASE 后发行的安全公告、新的驱动程序或硬件支持、新的命令或参数、主要错误修复或贡献的软件升级。它们还可能列出对主要 Ports/软件包或发行工程实践的更改。显然,发行说明不能列出在版本之间对 FreeBSD 进行的每一项更改;这份文档主要关注安全公告、用户可见的更改和主要的架构改进。

从 FreeBSD 旧版本升级

在 RELEASE 版本之间进行二进制升级(以及各种安全分支的快照)是受支持的,可以使用 freebsd-update(8) 工具。二进制升级过程将更新未修改的用户空间工具,以及作为官方 FreeBSD 发行的一部分的未修改的 GENERIC 内核。 freebsd-update(8) 工具要求正在升级的主机具有互联网连接。请注意,freebsd-update 不能用于在升级到新的主要版本后回滚到先前版本。

基于源代码的升级(基于重新编译 FreeBSD 基本系统的源代码)从以前的版本进行支持,具体步骤详见 /usr/src/UPDATING 中的说明。

对于通过 EFI 引导的系统,请注意:EFI 系统分区(ESP)上有一个或多个引导加载程序的副本,由固件用于引导内核。如果根文件系统是 ZFS,则引导加载程序必须能够支持从 ZFS 引导文件系统读取。在系统升级后,但在执行 zpool upgrade 之前,必须更新 ESP 上的引导加载程序,否则系统可能无法引导。虽然不是强制性的,但在使用 UFS 作为根文件系统时也应遵循此更新过程。可以使用命令 efibootmgr -v 来确定正在使用的引导加载程序的位置。BootCurrent 显示的值应该是用于引导系统的当前引导配置的编号。输出的相应条目应该以 + 号开头,例如

+Boot0000* FreeBSD HD(1,GPT,f859c46d-19ee-4e40-8975-3ad1ab00ac09,0x800,0x82000)/File(\EFI\freebsd\loader.efi) nda0p1:/EFI/freebsd/loader.efi (null)

ESP 可能已经挂载在 /boot/efi 上。如果没有,可以手动挂载分区,使用 efibootmgr 输出中列出的分区(在此情况下为 nda0p1):mount_msdosfs /dev/nda0p1 /boot/efi。有关另一个示例,请参阅 loader.efi(8)

efibootmgr -v 输出的 File 字段中的值,例如 \EFI\freebsd\loader.efi,是 ESP 上正在使用的引导加载程序的 MS-DOS 名称。如果挂载点是 /boot/efi,则此文件将转换为 /boot/efi/efi/freebsd/loader.efi。 (在 MS-DOSFS 文件系统上大小写不敏感;FreeBSD 使用小写。)File 的另一个常见值可能是 \EFI\boot\bootXXX.efi,其中 XXX 是 amd64 的 x64、aarch64 的 aa64 或 riscv64 的 riscv64;如果未配置,则为默认引导加载程序。应该把 /boot/loader.efi 复制到 /boot/efi 中的正确路径来更新已配置和默认的引导加载程序。

仅在备份所有数据和配置文件后尝试升级 FreeBSD。

安全性和勘误

本节列出了自 13.2-RELEASE 以来的各种安全公告和勘误通知。

安全公告

公告日期主题

无公告

勘误通知

勘误日期主题

无勘误

FreeBSD 14.0 中合并的重要变更

FreeBSD 14.0 包含了自 FreeBSD 13.0 发行以来两年半的开发工作。其中一些工作已被选入旧的开发分支,并包含在 FreeBSD 13 的次要版本中。

对于 64 位架构,基本系统默认启用了位置无关可执行文件(PIE)支持。可以使用 WITHOUT_PIE 参数禁用此功能。 9a227a2fd642 (由 Stormshield 赞助)

新增了服务脚本 zfskeys rc(8) ,以允许在启动期间自动解密使用 ZFS 本地加密的 ZFS 数据集。zfskeys 启动脚本支持加载存储在 ZFS 上的密钥。有关更多信息,请参阅 rc.conf(5) 手册页。 33ff39796ffe 8719e8a951b7 97aeda224356 (由 Modirum 和 Klara Inc. 赞助)

chroot 工具现在支持非特权操作,并且 chroot(8) 程序可使用 -n 参数启用该功能。 a40cf4175c90 (由 EPSRC 赞助)

新增了 md5sum(1) 和与 Linux 兼容的类似消息摘要程序,通过在程序名称以 sum 结尾时运行相应的 BSD 程序,并使用 -r 参数。 086feed850c3 (由 Netflix 赞助)

ssh 中启用了 FIDO/U2F 硬件验证器的支持,使用新的公钥类型 ecdsa-sked25519-sk,以及相应的证书类型。FIDO/U2F 支持见 https://www.openssh.com/txt/release-8.2 e9a994639b2a (由 The FreeBSD Foundation 赞助)

新增了 Intel I225 以太网控制器的 igc(4) 驱动程序,支持 2.5 Gbps 网卡。 517904de5cca (由 Rubicon Communications, LLC ("Netgate") 赞助)

新增了 mgb(4) 网卡驱动程序,支持 Microchip 设备 LAN7430 PCIe Gigabit Ethernet 控制器带 PHY、LAN7431 PCIe Gigabit Ethernet 控制器带 RGMII 接口。该驱动程序有一些注意事项和限制,但是是功能齐备的。 e0262ffbc6ae (由 FreeBSD 基金会赞助)

两个新的守护进程, rpc.tlsclntd(8) rpc.tlsservd(8) ,现在在 amd64 和 arm64 上默认构建。它们提供了对 NFS-over-TLS 的支持,如《Towards Remote Procedure Call Encryption By Default》中所述。这些守护进程在指定 WITH_OPENSSL_KTLS 时构建。它们使用 KTLS 对所有 NFS RPC 消息流量进行加密/解密,并通过 X.509 证书提供可选的机器身份验证。 2b9cbc85d727 59f6f5e23c1a

针对 amd64 的 UEFI 固件引导兼容性得到改进。有关详细信息,请参阅 loader.efi(8) amd64 Nocopy 部分。 f75caed644a5 (由 FreeBSD 基金会赞助)

对许多内核子系统进行了启动时间性能改进。(由 https://www.patreon.com/cperciva 赞助)

nvme(4) 错误处理得到了显著改进。

IPv4(子)网的最小地址(主机 0)的处理方式已更改,以便在未设置为广播地址的情况下,不将数据包发送为广播。这使得最小地址可用于主机。可以使用 sysctl 参数 net.inet.ip.broadcast_lowest 恢复旧的行为。有关背景信息,请参阅 https://datatracker.ietf.org/doc/draft-schoen-intarea-unicast-lowest-address/ fd0765933c3c

启动脚本 growfs(7) 现在在扩展根文件系统的同时,如果可能,会添加一个交换分区(如果之前不存在)。这在在 SD 卡上使用 RAW 镜像安装时特别有用。新增了一个 rc.conf(5) 变量——growfs_swap_size,它可以控制必要时的添加。有关详细信息,请参阅 growfs(7)

新增了一个名为 zpoolreguid 的 RC 脚本,它将为一个或多个 zpool 分配一个新的 GUID,在共享数据集的虚拟化环境中很有用。

如果没有 /etc/hostid 文件或来自硬件的有效 UUID,则 hostid 启动脚本现在将生成一个随机的(版本 4)UUID。此外,如果没有 /etc/machine-id 文件,hostid_save 脚本将在 /etc/machine-id 中存储主机的紧凑版本(没有连字符)。GLib 等库使用此文件。 62a149bf6219 862aab6281a5 baf1e9713969 ecad3f5c4d92 d6852eed98ed

现在可以使用 defaultrouter_fibNipv6_defaultrouter_fibN rc.conf(5) 变量为非主要 FIB 添加默认路由,。 30659d1dcbcc (由 ScaleEngine Inc. 赞助)

bhyve(8) 工具增加了 virtio-input 设备仿真支持。这可用于将键盘/鼠标输入事件注入到客户机中。命令行语法为:-s <slot>,virtio-input,/dev/input/eventX 054accac71e0

kdump(1) 工具增加了对解码 Linux 系统调用的支持。

新增了 nproc(1) 工具,与同名的 Linux 程序兼容。

uuidgen(1) 工具有一个新参数 -r,用于生成一个随机的 UUID,版本 4。 f176fe8e7f63

bhyve(8) 虚拟机监视器和内核模块 vmm(4) 现在在虚拟机中支持超过 16 个虚拟 CPU。默认情况下,bhyve 允许每个虚拟机创建与主机上物理 CPU 数相同的虚拟 CPU。此限制可以通过 loader 可调参数 hw.vmm.maxcpu 进行调整。 ee98f99d7a68

64 位可执行文件默认启用了地址空间布局随机化(ASLR)。如果应用程序出现意外失败,例如段错误,可以根据需要禁用它。要在单个调用中禁用,使用 proccontrol(1) 命令:proccontrol -m aslr -s disable command。要为二进制文件的所有调用禁用 ASLR,请使用 elfctl(1) 命令:elfctl -e +noaslr file。BUG 应通过问题报告系统 https://bugs.freebsd.org 或在 freebsd-stable@FreeBSD.org 邮件列表上报告。 b014e0f15bc7 (由 Stormshield 赞助)

可以在 amd64 内核中使用 LLVM 的 AddressSanitizer。有关更多信息,请参阅手册页面 kasan(9) 38da497a4dfc (由 FreeBSD 基金会赞助)

对于英特尔 Alder Lake(第十二代)和 Raptor Lake(第十三代)混合 CPU 上的硬件页面失效问题,已经实施了一种解决方法。该问题可能导致 UFS 和 MSDOSFS 的文件系统损坏,以及可能发生其他内存损坏。通过这种解决方法,小核(E-cores)将自动使用一种更慢的页面失效方法。 cde70e312c3f (由 FreeBSD 基金会赞助)

arm64 的 linux(4) ABI 状态已与 amd64 的 linux(4) ABI 保持一致。 ccc510b46340 9931033bbfbe

为了提高 stable 分支的 ABI 兼容性,CPU 亲和力系统调用现在更容忍比内核使用的 CPU 集小的 CPU 集。这将有助于增加内核集 MAXCPU 的大小。 47a57144af25 f35093f8d6d8 (由 Juniper Networks, Inc.赞助)

现在可以在运行时使用有日志的软更新的 UFS 文件系统上进行快照。因此,现在可以在使用有日志的软更新运行的活动文件系统上执行后台转储。通过使用 dump(8)-L 参数请求后台转储。(在先前的版本中,UFS 快照与有日志的软更新不兼容。) 78f412987605 (由 FreeBSD 基金会赞助)

已经重新集成内核的 wg(4) WireGuard 驱动程序;它提供了使用 WireGuard 协议的虚拟专用网络(VPN)接口。 744bfb213144 (由 Rubicon Communications, LLC ("Netgate")和 FreeBSD 基金会赞助)

KTLS(内核 TLS 实现)已为 TLS 1.3 添加了接收卸载支持。现在支持 TLS 1.1 到 1.3 的接收卸载;对于 TLS 1.0 到 1.3,支持发送卸载。 05a1d0f5d7ac (由 Netflix 赞助)

Radix 表和查找现在在 ipfw(4) 中支持 MAC 地址。这允许构建和用于过滤的 MAC 地址表。 81cac3906eb9

14.0-RELEASE 的新变化

用户空间

此部分包括了用户空间应用程序、贡献的软件和系统工具的变化和新增内容。

用户空间配置变更

root 用户的默认 shell 现在是 sh(1) ,具有许多用于交互式使用的新功能。 d410b585b6f0

默认的邮件传输代理(MTA)现在是 Dragonfly Mail Agent ( dma(8) ),而不再是 sendmail(8) 。 MTA 的配置通过 mailer.conf(5) 进行。 sendmail(8) 及其配置仍然可用。 a67b925ff3e5

rc.conf(5) 中已经删除了配置变量 mta_start_script,以及启动脚本 othermta616f32ea6da7

jail(8) 现在在 jail.conf(5) 文件中支持 .include 指令,并支持文件名通配。 e82a62943529

一次性密码设施 OPIE, opie(4) ,已从基本系统中移除。如果仍然希望使用它,请安装 Port security/opie 。否则,请确保从您的 PAM 策略中删除或注释掉对 pam_opiepam_opieaccess 的任何提及。 etcupdate(8) 通常会处理已存储的策略。 0aa2700123e2

已删除构建配置参数 SHARED_TOOLCHAIN。仍然可以使用通用的参数 NO_SHARED 构建静态链接的工具链。 77f6be448408 (由 FreeBSD 基金会赞助)

区域设置升级到 CLDR 41.0 和 Unicode 14.0。 e87ec409fa9b

为新的法国 bepo 键盘(版本 1.1rc2)(由法国国家标准化组织规范为“NF Z71‐300”)添加了布局配置。 abdcd967dc0c

现在,rc.d脚本(参见 rc(8) )即使没有定义 procname 或没有 PID 文件,也可以允许具有 status 方法。 2651609fcbd7

用户空间应用程序变更

添加了工具 base64(1) 540a99289bb1

bhyve(8) 虚拟化程序现在支持可选的 TPM(可信平台模块)直通支持。这不是直接访问,而是将来自客户机的命令转发到物理 TPM。 67c26eb2a57c

bhyve(8) 中的 GPU 直通已经在 AMD 和 Intel GPU 上得到改进。这是一个正在进行中的工作;直通在所有情况下都不起作用,配置尚未记录。

工具 cpuset(1) 已从 /usr/bin 移动到 /bin,以便在启动处理过程中始终可用。 /usr/bin/cpuset 现在是一个符号链接。 f05948d4e98d

date(1) 工具现在具有 -z 参数用于时区转换。 31edf56b1571

diff(1) 工具现在支持 --color 参数以获得彩色输出。 f38702e5a52e

弃用的 fmtree(8) 工具已被删除。 e4d63c5d5ff8

freebsd-update(8) 现在说明如果升级未在进行中且不需要回滚,则可以删除 /var/db/freebsd-update 下的文件。 80b003e81684 (由 FreeBSD 基金会赞助)

新的 fwget(8) 工具会检查系统需要固件的外围设备,并为其安装适当的软件包。目前仅支持 PCI 子系统,已知仅支持 Intel 和 AMD GPU 的显卡固件。 d198b8774d2cd198b8774d2c (由 Beckhoff Automation GmbH & Co. KG 赞助)

通过一致支持 -q-h 参数、允许带有 SI 后缀的数字以及去除 head(1) 中行数的 2^31 限制,提高了 head(1) tail(1) 的可用性。 643ac419fafb

makefs(8) 现在具有实验性的 ZFS 支持。它可以创建一个 ZFS 池,由单个磁盘 vdev 支持,包含从暂存目录中填充的一个或多个数据集。 240afd8c1fcc (由 FreeBSD 基金会赞助)

移除了 minigzip(1) 工具。 278d080bad9F

mandoc(1) 工具现在在列表 -width 处理中解决了宏处理的缺陷,从而获得了更准确的列表列宽。 bbb2d2ce4220 (由 Dell EMC Isilon 赞助)

mixer(8) 工具不再尝试猜测音量是绝对音量还是百分比。现在,它接受一个附加的 % 百分比,否则音量为绝对音量。 4014365e4219

netcat 工具 nc(1) 现在可以是一个 if_tun ( tun(4) ) 代理。 cef7ab70ff44 (由 Zenarmor 赞助)(由 OPNsense 赞助)(由 Klara, Inc.赞助)

netstat(1) 工具现在在 -i 参数下可计算正确的列宽,使 -w 参数不再必需。 372e3d561d82

移除了 portsnap(8) 工具。建议用户使用 pkg install git,然后 git clone https://git.FreeBSD.org/ports.git /usr/ports 来获取 Ports。 df53ae0fdd98

pw(8) bsdinstall(8) 程序现在默认在 /home 中为用户创建家目录,而非 /usr/home。不再创建 /home 的默认符号链接(即指向 /usr/home)。 bbb2d2ce4220

sleep(1) 工具现在接受单位为秒以外的值,并接受多个将被求和的延迟值(例如,1h 30m)。 34978f7edd15 be038c3afcae

sockstat(1) 工具现在在 capsicum 中运行。 94dc57159532 c5a2d8c5f517

systat(1) 工具有一个新命令 iolat,可报告由 CAM I/O 调度程序计算的 I/O 延迟。 22054f88914b (由 Netflix 赞助)

一个新的工具, tcpsso(8) ,能够将套接字参数应用于现有的 TCP 端点,例如更改拥塞控制模块或 TCP 栈。 881631a2a371 (由 Netflix 赞助)

Telnet 守护程序, telnetd(8) ,已被移除。如果需要,可以使用 Port net/freebsd-telnetd 。客户端不受影响。 0eea46fb1f83

在默认情况下禁用了参数 PROFILE,因此不提供系统库的配置版本。更倾向于使用基于硬件的性能分析(例如 hwpmc(4) )。 fe52b7f60ef4 (由 FreeBSD 基金会赞助)

二进制文件中的调试部分在小端目标上默认启用。 47363e99d3d3 (由 FreeBSD 基金会赞助)

已添加配置以生成 armv7 发行文件,这对于在 arm64 上构建 jail 可能很有用。 ac099daf6742

贡献的软件更新

One True Awk awk(1) )已更新到 20210727,这是第 1 版。 (第 2 版将包含在 14.1-RELEASE 中。)现在除一个 FreeBSD 补丁外,所有的 FreeBSD 补丁都已被上游采纳或丢弃。值得注意的变化包括:不再使用地区(locale)进行范围选择;与 gawkmawk 有更好的兼容性。请注意,十六进制字符串的解释与早期的 FreeBSD 版本一样被解释为数字。这将在 FreeBSD 15 中更改以符合上游和当前的 POSIX 标准。 f39dd6a97844 23f24377b1a9 628bd30ab5a4

bc(1) dc(1) 命令已更新到版本 6.6.0,修复了与行编辑和包含多个 read()命令的复杂脚本的问题,并在 bc 的(非标准)扩展数学库中添加了一些功能。

libbsdxmlexpat libbsdxml(3) )已升级到版本 2.4.7。 7ed8e142a00d

libfido2 已升级到版本 1.13.0。 f540a43052c1 3e696dfb7009 95321fff46ec (由 FreeBSD 基金会赞助)

llvm-objdump(1) 工具现在始终作为 objdump(1) 安装。 86edb11e7491 (由 FreeBSD 基金会赞助)

OpenSSH 已升级到版本 9.5p1。完整的发行说明请参阅 https://www.openssh.com/txt/release-9.5 676824f5cdf9 (由 FreeBSD 基金会赞助)

scp(1) 工具现在默认使用 SFTP 协议,而不是传统的 scp/rcp 协议。这消除了对通配符扩展字符的双引号引用的需要。 fb5aabcb990b (由 FreeBSD 基金会赞助)

默认情况下,在 ssh(1) 中禁用了 RSA/SHA-1 签名。可以在用户的 ~/.ssh/config 文件中按主机启用它们。 8c22023ca5e1 (由 FreeBSD 基金会赞助)

对于 ssh(1) VerifyHostKeyDNS 参数现在默认为 no,与 OpenSSH 默认发行一致。X11Forwarding 参数也默认为 no41ff5ea22cb9 77934b7a1301 (由 FreeBSD 基金会赞助)

从 OpenSSH 中删除了 HPN 参数处理。 HPN 支持很久以前就已经弃用,但配置参数仍然被接受(并被忽略)以保持向后兼容性。 348bea10b6f2 (由 FreeBSD 基金会赞助)

ssh(1) 客户端中删除了 VersionAddendum 参数。 bffe60ead024 (由 FreeBSD 基金会赞助)

OpenSSL 已升级到版本 3.0.12。这是从版本 1.1.1 的重大升级,已经到达了其生命周期的终点。基本系统的许多组件使用向后兼容的 API,但稍后将进行迁移。 aa7957345732 930cec16d9ee b077aed33b7b (由 FreeBSD 基金会赞助)

tcpdump 已升级到版本 4.99.4。 ee67461e5682 171a7bbfc048 1ad8d2ee1f7d (由 FreeBSD 基金会赞助)

libpcap 已升级到版本 1.10.4。 6f9cba8f8b5e dd744a896be3 (由 FreeBSD 基金会赞助)

xz 已升级到版本 5.4.3。

zlib 已升级到版本 1.3。

zstd 已升级到版本 1.5.2。 (由 Klara,Inc 赞助)

废弃的工具

mergemaster(8) 已被废弃。其替代品是 etcupdate(8) 398b12691b4f (由 FreeBSD 基金会赞助)

运行时库和 API

libncursesw 库(参见 ncurses(3X) )已拆分为 libtinfowlibncursesw。链接脚本应使其对使用者透明。现在安装了 pkg-config(8) 文件,以便使 Port 能够从基础系统检测 ncurses 的设置。 396851c20aeb

ncurses(3X) 库现在能够使用 terminfo(5) 以及 termcap(5) ,并首选使用 terminfo。 61f66a1f4403

ncurses(3X) 中,用于 terminfo 数据库的默认搜索路径现在包括 /usr/local/share/terminfo,便于使用来自 Ports 或软件包的数据库。 b75fb12b6827

qsort_r(3) 的原型已修改以匹配 POSIX,该标准采用了 glibc-based 接口。 af3c78886fd8

对于 aarch64(arm64),已经实现了 COMPAT_LIB32 构建参数,并默认启用。这为 arm64 系统提供了与 armv7 32 位二进制文件构建和运行大多数 armv7 32 位库和头文件兼容的支持。 f1d5183124d3 d5d97bed4ab6 a1b675731301

云支持

本节涵盖了对云环境的支持的更改。

FreeBSD 现在在 AWS 上提供实验性的 ZFS 根文件系统 EC2 AMI。 (由 https://www.patreon.com/cperciva 赞助)

FreeBSD 现在在 AWS 上提供实验性的 cloud-init EC2 AMI。有关信息,请参阅 Port net/cloud-init 。 (由 https://www.patreon.com/cperciva 赞助)

FreeBSD 现在为 Azure 提供 arm64 和 amd64 镜像。提供了 UFS 和实验性的 ZFS 镜像。现在支持 Gen2 VMs。 (由 FreeBSD 基金会赞助)(由微软赞助)

Microsoft Azure Network Adapter(MANA)VF(虚拟功能)现在得到支持。 ce110ea12fce (由微软赞助)

Google Virtual NIC( gve(4) )现在得到支持。 54dfc97b0bd9 (由谷歌赞助)

内核

本节介绍了对内核配置、系统调优和系统控制参数的更改,这些更改没有被分类到其他地方。

通用内核变更

SMP 系统现在在 amd64 和 arm64 上支持最多 1024 个核心。现在可动态分配多内核 CPU,以避免占用过多内存。内核 cpuset ABI 已更新以支持更高的限制。 76887e84be97 d1639e43c589 9051987e40c5 e0c6e8910898 (由 FreeBSD 基金会赞助)

ACPI 系统现在支持 _CR3 临界待机 (S3) 阈值。 b8a0dfb17e3b

默认禁用 acpi_timer_test,强制使用 ACPI-fast 而不是 ACPI-safe,以加快启动过程。可以通过设置可调参数 hw.acpi.timer_test_enabled=1 重新启用破解 ACPI 计时器。如果观察到时间问题,请尝试在 loader.conf(8) 中使用 hw.acpi.timer_test_enabled=1 进行测试,看看是否解决了问题。 a8b89dff6ac0

boottrace(4) 是用于在系统启动和关闭期间捕获跟踪事件的新内核用户空间接口。事件注释存在于内核中的启动和关闭路径中;系统工具( init(8) shutdown(8) reboot(8) );以及 rc(8) 脚本(通过 boottrace(8) )。 boottrace(4) 注重易用性,主要面向系统管理员。它在默认的 GENERIC 内核中可用,并且可以通过调整 sysctl(8) 变量来启用。 da5b7e90e740 5a8fceb3bd9f 7b0a665d72c0 13ec1e3155c7 318d0db5fe8a 1ae2c59bcf21 (由 NetApp, Inc.赞助)(由 Klara, Inc 赞助)

内核加密现在支持 XChaCha20-Poly1035 AEAD 加密。 8f35841f1f35 (由 FreeBSD 基金会赞助)

内核加密中添加了 curve25519 的 API。 0c6274a819ff (由 FreeBSD 基金会赞助)

FreeBSD 现在可以在 Firecracker VMM 中运行,通过 amd64 FIRECRACKER 内核配置。 469ad8603127 (由 https://www.patreon.com/cperciva 赞助)

FreeBSD 现在重新启动更快。添加了 sysctl kern.reboot_wait_time 以控制在在控制台打印所有内核消息后重新启动之前的延迟。默认为 0。将其设置为 1 会恢复先前的行为(1 秒延迟)。 84ec7df0d796 (由 https://www.patreon.com/cperciva 赞助)

添加了新的 DTrace provider kinst,参见 dtrace_kinst(4) 。该 provider 允许跟踪内核指令,类似于 FBT(函数边界跟踪)提供者,但可以探测所有指令而不仅仅是逻辑入口和返回指令。 f0bc4ed144fc (由 Google, Inc.通过谷歌编程之夏 2022 赞助)

kinst 已移植到 arm64 和 riscv。 07864a8a2466 2d7bb03adb43 (由 FreeBSD 基金会赞助)

现在可以在 amd64 内核中使用 LLVM 的 MemorySanitizer 。有关更多信息,请参见手册页 kmsan(9) a422084abbda (由 FreeBSD 基金会赞助)

现在可以在 arm64 内核以及 amd64 上使用 LLVM 的 AddressSanitizer。有关更多信息,请参见 kasan(9) 手册页。 89c52f9d59fa (由 Juniper Networks, Inc.赞助)(由 Klara, Inc.赞助)

已从内核开放加密框架(OCF)中删除了对非对称加密操作的支持,因为它们不被现代 OpenSSL 版本使用。 76681661be28

添加了一个本机 timerfd(2) 设施,以便轻松移植使用 timerfd 的 Linux 程序。以前,timerfd 仅在 Linux 仿真下可用。对于仅为 FreeBSD 编写的程序,首选使用 kqueue(2) EVFILT_TIMER 过滤器来建立任意计时器。 af93fea71038

security.bsd.see_jail_proc sysctl(8) 开关控制的进程可见性策略已经过加固,防止未经授权的用户尝试随机杀死、更改优先级或调试同一子 jail 中具有相同(实际)UID 的进程,即使这些进程对其不可见也会成功。它也可以被 MAC 策略覆盖,就像其他进程可见性策略一样。 7e21c691f295 63c01c18a8d3 (由 Kumacom, SAS 赞助)(由 FreeBSD 基金会赞助)

security.bsd.see_other_gids sysctl(8) 开关控制的进程可见性策略已修复,以考虑进程的实际组而不是其有效组,以确定试图访问进程的用户是否是进程组的成员。其原理是,某些用户应该继续看到它们启动的进程,即使它们通过设置组 ID 位而获得更高的权限,而它们不应该看到由特权用户启动的临时进入用户的主组的进程。这种新行为与 security.bsd.see_other_uids 一直在为用户 ID 执行的操作相一致(即,考虑一些进程的实际用户 ID 而不是有效 ID)。 26ff4836c888 (由 Kumacom, SAS 赞助)(由 FreeBSD 基金会赞助)

现在已自动封堵影响 AMD Zen2 处理器的 Zenbleed 漏洞(通过 chicken bit),防止在受影响的机器上发生错误行为和数据泄漏。如果需要,可以通过 ​ sysctl(8) machdep.mitigations.zenbleed.enable 开关手动控制应用这种缓解措施。有关更多信息,请参阅新的 mitigations(7) 手册页。 aea76bab1416 (由 FreeBSD 基金会赞助)

设备和驱动程序

本节包括了自 13.2-RELEASE 以来对设备和设备驱动程序的更改和添加。

设备驱动程序

串行通信在引导加载程序、内核和用户空间中的默认速度现在为 115200 bps。请注意,早期的 x86 BIOS 引导加载程序(即 boot0sio)不支持 9600 bps 以上的速率,并且没有更改。 boot0sio 用户可以设置 BOOT_COMCONSOLE_SPEED=9600,以便在所有引导组件中使用 9600,或者使用标准的 boot0,并且 boot2 阶段的串行端口速率为 115200。 4722ceb7d53e (由 FreeBSD 基金会赞助)

默认的响铃音频现在为 800Hz。可以使用 kbdcontrol(1) 进行设置。对于希望使用声卡进行蜂鸣的用户,与 devd(8) 集成。 ba48d52ca6c8 4ac3d08a9693 2533eca1c2b9 (由 Netflix 赞助)

在使用默认的 vt(4) 控制台时,默认情况下不再启用可听的响铃。可以使用以下命令启用它:sysctl kern.vt.enable_bell=1kbdcontrol -b normal225639e7db68

在 DPAA2(第二代数据路径加速架构,出现在一些 NXP SoC 中的硬件级网络架构)中进行了改进。它运行由 NXP 提供的固件,该固件提供 DPAA2 对象作为抽象层,并提供 dpni 网络接口。 DPAA2 通道之间的分离已经显着改进,以隔离对 DMA 资源和清理操作的访问,并在网络负载较重(1 Gbit/s 链接)时避免内核崩溃。其他改进包括 FDT / ACPI MDIO 支持,通过 DPAA2 进行网络启动以及单独的命令门户(DPMCP)支持。

已添加对 Arm Corelink DMC-620 内存控制器和 CMN-600 一致性网格网络控制器的支持,已添加到 hwpmc(4) libpmc。请参阅 pmc.dmc-620(3) pmc.cmn-600(3) 1459a22787ea 59191f3573f6 (由 ARM 赞助)(由 Ampere Computing 赞助)

已实施了有关 i386 和 Book-E powerpc 上影响物理上高于 4 GB 的帧缓冲区地址的帧缓冲地址的修复。 a78bb831a17f

Intel 无线网卡的 iwlwifi(4) 驱动程序已更新到最新版本,支持 WiFi 6E AX411/AX211/AX210 芯片组,并为即将推出的 BX 和 SC 芯片组做好准备。 (由 FreeBSD 基金会赞助)

Realtek 无线 PCI 接口的 rtw88(4) 驱动程序已更新。

已添加 KVM 虚拟化时钟的 kvm_clock 驱动程序。 6c69c6bb4c7f (由 Juniper Networks, Inc.赞助)(由 Klara, Inc.赞助)

对 Linux 设备驱动程序的 KPI 进行了稳定性修复和增强,以及无线驱动程序的 net80211 层。 (由 FreeBSD 基金会赞助)

现在,默认情况下,NVMe 磁盘是 nda 设备,例如 nda0;参见 nda(4) 。在 /dev 中为先前的 nvd(4) 设备名称创建了符号链接。但是,配置(例如 fstab(5) )应更新为引用新的设备名称。控制使用 nda 设备和符号链接的参数在 nda(4) 中有描述。 bdc81eeda05d (由 Netflix 赞助)

先前的 qat(4) 驱动程序已替换为 Intel 的 QAT 驱动程序。新版本提供了与芯片组的加密和压缩卸载功能的额外接口。对于大多数用户,这将没有可见的更改;但是,新驱动程序不支持 Atom C2000 芯片组。为了保留对这些芯片组的支持,旧的驱动程序已重命名为 qat_c2xxx。因此,在 C2000 硬件上使用 qat(4) 的用户需要确保加载的是 qat_c2xxx(4) 而不是 qat(4) 78ee8d1c4cda f4f56ff43dbd (由 Intel Corporation 赞助)

弃用和删除的驱动程序

x86 GENERIC 内核配置中已删除 pms(4) 驱动程序 pmspcv,因为它很大且使用不常见。可以通过在 loader.conf(5) 中放置 pmspcv_load="YES" 来将其加载为模块。 95e4f5ef7cce (由 Rubicon Communications, LLC ("Netgate")赞助)

x86 GENERICMINIMAL 内核配置中已删除了 VESA 参数。它仍然可用作内核模块。 VESA 不被默认控制台 vt(4) 使用。 777526ed8382 b8cf1c5c30a5 (由 FreeBSD 基金会赞助)

已删除 ISA 声卡的驱动程序。 92e6b4712b53 df51e63eb5d7 aa83e9b189d6 754decef384a 5126e5eeeb5e 716924cb4832 9054e296819f (由 FreeBSD 基金会赞助)

ath(4) 中删除了 AHB 总线前端,因为它仅被 MIPS 使用。 37c8ee8847fa

已删除了弃用的 amr(4) 驱动程序。 60de2867c9fc (由 Netflix 赞助)

已删除过时的 iscsi_initiator(4) 。它的替代品 iscsi(4) 在几个主要版本之前引入。 48cb3fee2586 (由 FreeBSD 基金会赞助)

已删除了弃用的 iir(4) 驱动程序。 399188a2c60c (由 Netflix 赞助)

已删除了弃用的 mn(4) 同步串行驱动程序。 0cff00ae682a (由 FreeBSD 基金会赞助)

已删除了弃用的 mly(4) 驱动程序。 a9620045a5b9 (由 Netflix 赞助)

已弃用的 nlmrsa(4) 驱动程序已被移除。 6a06b00a0d1f (由 Chelsio Communications 赞助)

已弃用的 twa(4) 驱动程序已被移除。 8722e05ae149 (由 Netflix 赞助)

存储

本节包括了文件系统和其他存储子系统的变更和添加,包括本地和网络存储。

通用存储

gconcat(8) 及其内核支持现在具有将在创建 gconcat 设备时不存在的设备追加到连接设备的能力。 d575e81fbcfa

一个新的 gunion(8) 工具跟踪对可写磁盘上只读磁盘的更改。这对于对磁盘进行临时更改(如文件系统修复或软件升级)并随后提交或还原更改非常有用。 c7996ddf8000 (由 Netflix 赞助)

在调试和解决通用文件系统代码中 vnode 回收问题的过程中,与 vnode 相关的统计信息的 sysctl 现在已经分组到 vfs.vnode 下,以提高可见性。 d3e647891243

NFS 变更

NFS 现在支持在 VNET jail 中运行 NFS 服务器,包括 nfsd(8) nfsuserd(8) mountd(8) gssd(8) rpc.tlsservd(8) 。VNET jail 必须位于自己的文件系统上,必须设置 jail 参数 allow.nfsd,而 enforce_statfs 不能设置为 0。不允许使用 UDP 和 pNFS 服务器配置。 7344856e3a6d 和其他许多

对于 NFSv4 挂载,NFS 客户端现在默认使用 NFS 服务器支持的 NFSv4 的最高小版本,而不是小版本 0。 挂载参数 minorversion 可用于覆盖此默认值。 a145cf3f73c7

FreeBSD NFS 客户端现在可以设置为使用 1M 字节的 I/O 大小,通过tunablevfs.maxbcachebuf;Linux NFS 客户端也可以进行 1M 字节的 I/O。需要增加kern.ipc.maxsockbuf的值。控制台消息将建议其设置。请注意,在 nfsd(8) 未运行时,可以通过 sysctl vfs.nfsd.srvmaxio将 FreeBSD NFS 服务器的最大 I/O 大小增加到任何 2 的幂次方,最多为 1M 字节。 ee29e6f31111

如果会话中断,NFSv4.1/4.2 客户端和服务器现在将生成控制台消息,建议用户检查确保字符串 /etc/hostid 的值对所有 NFSv4.1/4.2 客户端都是唯一的。 b875d4f5ddcb 0685c73cfe88

NFSv4.1/4.2 挂载使用挂载参数 intr 现在基本可用,尽管不是 100%正确,但也使用了挂载参数 nolockd。有关详细信息,请参见手册页 mount_nfs(8) 981ef32230b2 33721eb991d8

对于 Kerberized NFSv4.1/4.2 挂载,现在可以使用新的挂载参数 syskrb5。 NFSv4.1/4.2 的一个特性用于提供 AUTH_SYS 身份验证,因此在挂载时不需要 Kerberos 凭证。请参见 mount_nfs(8) 896516e54a8c

在 NFS 服务器中,NFS 挂载协议中已添加对 SP4_MACH_CRED 的支持。该功能由 Linux NFSv4.1/4.2 客户端用于 Kerberized 挂载。以前通过回退处理,但现在直接支持。 330aa8acdec7 ff2f1f691cdb

UFS 变更

现在可以使用在运行启用了日志软更新的 UFS 文件系统上的快照执行后台文件系统检查。 (由 FreeBSD 基金会赞助)

已向超级块、柱组映射和 inode 添加了校验散列,以检测错误。对于超级块(120)和柱组(20),进行的检查远比以前进行的魔数检查要广泛得多。(由 FreeBSD 基金会赞助)

libufs(3) 库已更新以包含这些检查,以便所有文件系统工具现在都会执行这些检查。检查在一个内核文件中实现,该文件也被 libufs 包含。对 libufs 的另一个更改是,查找备用超级块的代码已从 fsck_ffs(8) 移到了共享文件中,因此它现在可以在内核加载器中使用,以及所有文件系统工具。 (由 FreeBSD 基金会赞助)

ZFS 变更

OpenZFS 已升级到 2.2 版。新功能包括:

  • 块克隆,允许文件副本中块的浅复制。这是可选的,默认情况下禁用;可以使用 sysctl vfs.zfs.bclone_enabled=1 启用。

  • scrub 错误日志(zpool scrub -e

  • BLAKE3 校验和,速度快,现在是推荐的安全校验和

  • 修正的 zfs receive 可以修复损坏的数据

  • vdev 和 zpool 用户属性,类似于数据集用户属性。

性能改进包括:

  • 完全自适应 ARC,一个统一的 ARC,最小化手动调整的需求

  • zstd 早期中止,提高对不可压缩数据的效率

  • I/O 预取改进

  • 一般优化。

已在 32 位 powerpc/powerpcspe 上启用 ZFS。 63715498ac6b

其他存储变更

现在, msdosfs(5) 文件系统在 FAT12 和 FAT16 文件系统的根目录中记录可用目录项(例如 EFI 引导分区),并将其报告为 inode。 c33db74b5323

现在, msdosfs(5) 文件系统正确计算 FAT12 和 FAT16 文件系统的可用块和已用块,并且不再拒绝挂载使用有效但不常见参数创建的文件系统。 0728695c63e

合成文件系统( devfs(5) procfs(5) 等)现在报告已使用 0 块,以便它们不被报告为 100% 使用率。 88a795e80c03

添加了一个名为 tarfs(5) 的文件系统,其支持由 POSIX tar 档案支持,可选择使用 zstd(1) 进行压缩。 69d94f4c7608 (由 Juniper Networks,Inc.赞助)(由 Klara,Inc.赞助)

引导变更

本节包括了引导加载程序、引导菜单和其他与引导相关的更改。

引导加载程序变更

lua 风格的 loader(8) 现在将解释在 loader_conf_files 中出现的 .lua 文件为 lua,并在沙盒中执行它们。现有的加载器环境变量在沙盒中作为全局变量可用,成功执行配置文件后,任何设置的全局变量,如果不是表值,都将反映在加载器环境中。具有不是有效 lua 名称的名称的环境变量可以作为 _ENV 的索引访问;例如,_ENV[ 'net.fibs'] 3cb2f5f369ec

EC2 实例现在在可用的情况下使用 UEFI 引导,大大加速了引导过程。 b43d7aa09b3c bcf9147144f3 (由 https://www.patreon.com/cperciva 赞助)

网络

本节说明了影响 FreeBSD 网络的更改。

通用网络

carp(4) 现在支持配置 carp 消息发送到的地址,允许使用单播地址。这在某些虚拟配置中很有用。请参见 carp(4) ifconfig(8) 137818006de5

if_bridge(4) 上的第 3 层过滤将执行一些不安全的操作,因此 net.link.bridge.pfil_membernet.link.bridge.pfil_bridge 现在默认为 0。 22893e584032

netlink(4) 是 RFC 3549 中定义的用户/内核通信协议,主要用于网络配置。它已经得到扩展、改进并启用了默认。已将许多网络配置工具转换为使用 netlink。 3091d980f581

已删除不推荐使用的 NgATM(netgraph ATM 支持)和残余的 ATM 支持。

pf(4) 包过滤器现在支持使用 OpenBSD 语法和行为进行清理。如果没有 FreeBSD 清理规则,则全局参数 set reassemble yes | no [ no-df] 确定是否进行分组重组。清理,例如设置 tos、ttl 等,可以在匹配和传递规则中完成,这也使其具有状态。与 OpenBSD 一样,现在完全支持匹配规则,不仅适用于 dummynet(4) 队列。 39282ef356db (由 InnoGames GmbH 赞助)

现在可以使用 IPv6 传输 pfsync(4) 6fc7fc2dbb2b (由 InnoGames GmbH 赞助)(由 FreeBSD 基金会赞助)

已扩展 pfsync(4) 数据包格式以改进对排队、清理和路由规则的支持。此格式与旧版本不兼容。可以使用 ifconfig pfsync0 version 1301 选择旧格式。如果 pfsync 集群的成员没有同时升级,则这一点尤为重要。

已将 WiFi 6 支持添加到 wpa( wpa_supplicant(8) hostapd(8) )。 c1d255d3ffdb 3968b47cd974 bd452dcbede6

互联网网络

IPv6 over IPv4 的 6to4 接口, if_stf(4) ,现在支持 IPv6 Rapid Deployment(6rd,IPv6 快速部署)(RFC5969)。 19dc64451179 (由 Rubicon Communications, LLC("Netgate")赞助)

rtsol(8) rtsold(8) 程序现在具有-i参数,可禁用默认情况下使用的最多一秒的随机延迟。这些程序在 rc.conf(5) 中的默认参数包括 -i 231bac4ccc43 e29711da2352 (由 https://www.patreon.com/cperciva 赞助)

IPv6 nodeinfo(RFC 4620)的处理现已默认禁用。 b73183d1a243 (由 FreeBSD 基金会赞助)

sysctl(8) 参数 net.inet.tcp.nolocaltimewait 现在默认启用。这样可以防止为本地终止的 TCP 连接创建 timewait 条目。 92b3e07229ba

TCP 的默认拥塞控制机制现在是 CUBIC。对于长时间的数据传输,CUBIC 在与 NewReno 竞争时得到了稍微更高的可用带宽的成绩。 bb1d472d79f7 (由 NetApp, Inc.赞助)

IPv4 已更改为不广播子网上的最小地址(主机 0),除非它配置为广播地址。这允许子网上的最小地址用于主机。 fd0765933c3c

硬件支持

该部分包括了对物理机器、虚拟机监视器和虚拟化环境的一般硬件支持,以及不适用于本文其他部分的硬件更改和更新。

请查看 14.0-RELEASE 支持的硬件列表 ,以及 平台页面 以获取支持的完整 CPU 架构列表。

硬件体系结构支持

本项目不再提供带有 14.0-RELEASE 的 armv6 架构支持。

已删除对 MIPS 架构及相关硬件的支持。 MIPS 将在其生命周期内继续在 13-STABLE 分支上得到支持。

已淘汰对 RISC-V 架构的软件浮点变体 riscv64sf 的支持。所有可用的硬件都受到常规 riscv64 架构的支持。

虚拟化支持

文档

该部分包括了随基本系统一起提供的手册页面( man(1) )和其他文档的更改。

Man 页面

hier(7) 页面进行了许多调整和清理,以提高准确性。

已审查并更新了第 9 节,内核文档中的许多页面,以确保准确性。

内核文档手册页的介绍, intro(9) 已完全重写。 84f9f2c5cf78 (由 FreeBSD 基金会赞助)

已重新编写和改进了 mi_switch(9) 页面。 175db7b58270 (由 FreeBSD 基金会赞助)

添加了新的 kern_yield(9) 页面。 30cd6fd75d46 (由 FreeBSD 基金会赞助)

删除了第 9 节中一些已过时的页面。 d1c7405ef68a 52f9a2823c64 b54391a1f831 (由 FreeBSD 基金会赞助)

Ports 集合和软件包基础设施

该部分包括了 FreeBSD Ports、软件包基础设施以及软件包维护和安装程序的更改。

安装程序更改

有关未来 FreeBSD 版本的一般说明

FreeBSD 15.0 预计将不包括对 armv7 以外的 32 位平台的支持。armv6、i386 和 powerpc 平台已被淘汰,并将被移除。64 位系统仍将能够运行较旧的 32 位二进制文件。

我们预计在 FreeBSD 15.0 中支持 armv7 作为 2 级架构,并可能在 FreeBSD 16.0 中删除 armv7。关于 armv7 在 15.x 和 16.x 的支持状态,我们将在 15.0 发行时提供更新。

通过参数 COMPAT_FREEBSD32 在 64 位平台上执行 32 位二进制文件的支持将继续至少在 stable/15 和 stable/16 分支上。通过 cc -m32 编译个别 32 位应用程序的支持也将至少在 stable/15 分支上继续,其中包括在 /usr/include 中的适当头文件和在 /usr/lib32 中的库。

Ports 将不包括对 FreeBSD 15.0 和以后版本的淘汰 32 位平台的支持。这些未来版本将不包括适用于淘汰的 32 位平台的二进制包或从 ports 构建软件包的支持。

FreeBSD stable/14 和更早版本的分支将保留现有的 32 位内核和系统支持。在 ports 系统支持的情况下,Ports 将保留对在 stable/14 和更早版本分支上为 32 位系统构建 ports 和软件包的支持。但是,所有 32 位平台都是 2 级 或 3 级,应预期随着上游淘汰 32 位平台,对个别 Port 的支持将降级。

按照当前的支持计划,stable/14 将在 FreeBSD 14.0-RELEASE 发行后的 5 年后达到生命周期结束(EOL)。stable/14 的 EOL 将标志着对淘汰的 32 位平台的支持结束,包括源代码发行、预构建软件包和从 Ports 构建应用程序的支持。随着 2023 年 11 月发行 FreeBSD 14.0-RELEASE,对淘汰的 32 位平台的支持将于 2028 年 11 月结束。

本项目可能会选择在 FreeBSD 15.0 发行时通过在 15.0 或以后扩展对一个或多个淘汰平台的某种程度的支持来更改此方法。任何更改将由社区反馈和支持这些平台的承诺驱动。使用 FreeBSD 14.0-RELEASE 和随后的版本,或者 stable/14 分支,以迁移至 32 位平台。


最后修改于: 2023 年 11 月 20 日,由 Mike Karels 进行。

最后更新于