github编辑

FreeBSD 13.2-RELEASE 发行说明(2023 年 4 月 11 日)

摘要

FreeBSD 13.2-RELEASE 的发布说明包含了自 13-STABLE 开发线以来对 FreeBSD 基本系统所做变更的摘要。本文件列出了自上次发布以来发布的相关安全通告,以及对 FreeBSD 内核和用户态的重大变更。此外,还提供了有关升级的一些简要说明。

介绍

本文档包含 FreeBSD 13.2-RELEASE 的发布说明。它介绍了最近添加、变更或删除的 FreeBSD 特性,并提供了一些关于从之前版本升级的说明。

这些发布说明适用于自 13-STABLE 创建以来,13-STABLE 开发分支上的最新版本。有关该分支上的预构建二进制发行版的信息,请访问 https://www.FreeBSD.org/releases/arrow-up-right

这些发布说明适用于位于 13-STABLE 开发分支上的一个版本点,该版本位于 13.1-RELEASE 和未来的 13.3-RELEASE 之间。有关该分支上的预构建二进制发行版的信息,请访问 https://www.FreeBSD.org/releases/arrow-up-right

该 FreeBSD 13.2-RELEASE 的分发版是一个正式的 RELEASE 版本。可以在 https://www.FreeBSD.org/releases/arrow-up-right 和镜像站点找到。有关获取此版本(及其他)FreeBSD 发行版的更多信息,请参见 FreeBSD 手册arrow-up-right中的获取 FreeBSD 附录arrow-up-right

所有用户在安装 FreeBSD 之前都应查阅发布错误文档。错误文档会更新一些在发布周期末期或发布后发现的“突发”信息。通常,它包含已知的漏洞、安全通告以及文档的修正。FreeBSD 13.2-RELEASE 的最新错误文档可以在 FreeBSD 网站上找到。

本文档介绍了自 13.1-RELEASE 以来 FreeBSD 中最具用户可见性的新增或变更功能。一般来说,本文所述的变更是 13-STABLE 分支的特有变更,除非特别标记为已合并特性。

典型的发布说明项包括发布后的安全通告、新的驱动程序或硬件支持、新命令或选项、重大错误修复或第三方软件升级。它们也可能列出对主要 Port/软件包或发布工程实践的变更。显然,发布说明无法列出两个版本之间对 FreeBSD 所做的每个变更;本文件主要关注安全通告、用户可见的变更以及重大架构改进。

从先前版本升级 FreeBSD

使用 freebsd-update(8)arrow-up-right 工具支持在 RELEASE 版本之间(以及各种安全分支的快照)进行二进制升级。 二进制升级程序arrow-up-right 会更新未修改的用户态工具以及作为官方 FreeBSD 发行版一部分分发的未修改的 GENERIC 内核。 freebsd-update(8)arrow-up-right 工具要求被升级的主机必须具备互联网连接。

支持基于源代码的升级(即从源代码重新编译 FreeBSD 基本系统)到先前版本,具体按 /usr/src/UPDATING 中的说明进行操作。

所有 PowerPC 架构的用户,在成功安装内核和世界之后,必须手动运行 kldxref /boot/kernel

升级 FreeBSD 之前应备份 所有 数据和配置文件。

安装新用户态软件后,正在运行的守护进程仍来自先前版本。在通过第二次调用 freebsd-update 安装用户级组件,或通过使用 installworld 从源代码进行升级后,系统应重新启动以启动新软件。例如,旧版本的 sshd 在安装新版本的 /usr/sbin/sshd 后无法正确处理传入连接;重启后,新的 sshd 和其他守护进程将启动。

用户态

本节涉及对用户态应用程序、第三方软件和系统工具的变更和新增内容。

用户态配置变更

growfs(7)arrow-up-right 启动脚本现在将在扩展根文件系统时添加交换分区(如果可能),且如果之前未存在交换分区。这在使用原始映像安装到 SD 卡时尤其有用。新增了 rc.conf(5)arrow-up-right 变量 growfs_swap_size,可以根据需要控制交换分区的添加。详细信息请参见 growfs(7)arrow-up-right

zfskeys 启动脚本支持自动加载存储在 ZFS 上的密钥。2411090f6940arrow-up-right(由 Klara Inc. 赞助)

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

hostid 启动脚本现在将在没有 /etc/hostid 文件且硬件没有有效 UUID 时生成一个随机(版本 4)UUID。此外,如果没有 /etc/machine-id 文件,hostid_save 脚本将把一个压缩版的 hostid(没有连字符的版本)存储在 /etc/machine-id 中。此文件由 GLib 等库使用。17333d92643darrow-up-right a379d5c5efb2arrow-up-right 71d88613d129arrow-up-right

现在可以通过使用变量 defaultrouter_fibNipv6_defaultrouter_fibN rc.conf(5)arrow-up-right ,为除主路由表外的其他 FIB 添加默认路由。c6ec1b441ad3arrow-up-right(由 ScaleEngine Inc. 赞助)

用户态应用程序变更

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

工具 kdump(1)arrow-up-right 新增了对 Linux 系统调用的解码支持。

工具 killall(1)arrow-up-right 现在允许通过语法 -t pts/N 向具有其控制终端的进程发送信号,pts(4)arrow-up-right 中使用。a76fa7bb6cb7arrow-up-right

新增工具 nproc(1)arrow-up-right ,与同名的 Linux 程序兼容。

工具 timeout(1)arrow-up-right 已从 /usr/bin 移动到 /bin

工具 pciconf(8)arrow-up-right 新增了对解码 ACS 扩展能力的支持。dde4103a465barrow-up-right(由 Chelsio Communications 赞助)

工具 procstat(1)arrow-up-right 现在可以通过新增的 advlock 命令打印关于文件的建议锁的信息。f9daaf452a8aarrow-up-right

工具 pwd_mkdb(8)arrow-up-right 工具不再将 /etc/master.passwd 中的注释复制到 /etc/passwd 中。3e955733117darrow-up-right

MSS clamping 在 ppp(8)arrow-up-right 中得到了改进。301bff9bdd62arrow-up-right

prometheus_sysctl_exporter(8)arrow-up-right 中变更了指标别名,以避免由于冲突的指标名称而混淆 Prometheus 服务器。UMA 区域 tcp_log_bucket 已重命名为 tcp_log_id_buckettcp_log_node 被重命名为 tcp_log_id_node 以保持一致性。不再导出描述中带有 (LEGACY) 的 sysctl 变量,这些变量是由 sysctl ZFS 替换的,许多已别名为相同的 Prometheus 指标名称(如 vfs.zfs.arc_maxvfs.zfs.arc.max)。e4f508d5a211arrow-up-right(由 Axcient 赞助)

uuidgen(1)arrow-up-right 工具新增了 -r 选项,用于生成随机 UUID,版本 4。8fd1953b7eb2arrow-up-right

当由 inetd(8)arrow-up-right 调用时,ctlstat -P 现在将生成适合 Prometheus 导入的输出;详见 ctlstat(8)arrow-up-rightf7896015fcdearrow-up-right(由 Axcient 赞助)

第三方软件

Gavin Howard 的 bc 已升级到版本 6.2.4。

expatlibbsdxml)已升级到版本 2.5.0。

file 已升级到版本 5.43。

less 已升级到版本 608。

libarchive 已升级到版本 3.6.2,修复了许多可靠性问题。发布说明可查看 https://github.com/libarchive/libarchive/releasesarrow-up-right

libedit 已升级到版本 2022-04-11。

LLVMclang 编译器已升级到版本 14.0.5。

现已在 powerpc64 及其变体上启用支持的 LLVM sanitizers。

mandoc 已升级到版本 1.14.6。

OpenSSH 已升级到版本 9.3p1。

OpenSSL 已升级到版本 1.1.1t。

sendmail 已升级到版本 8.17.1。68e86d5265bcarrow-up-right

sqlite3 已升级到版本 3.40.1。

tzcode 已升级到版本 2022g,改进了时区变化检测并修复了可靠性问题。

tzdata 已升级到版本 2023c。

unbound 已升级到版本 1.17.1。

xz 已升级到版本 5.4.1。

xz-embedded 已升级到版本 3f438e15109229bb14ab45f285f4bff5412a9542。

zlib 已升级到版本 1.2.13。

运行时库和 API

libmd 增加了对 SHA-512/224 的支持。e04ee7d95ef6arrow-up-right(由 Klara, Inc. 赞助)

现已支持 Linux 风格的系统调用跟踪,通过 sysdecode(3)arrow-up-rightkdump(1)arrow-up-right

本地 pthread 库函数现在可以支持 Linux 语义。

内核

本节涉及内核配置、系统调优以及未分类的系统控制参数的变更。

一般内核变更

bhyve(8)arrow-up-right 虚拟机监控器和内核模块 vmm(4)arrow-up-right 现在支持在虚拟机中使用超过 16 个 vCPU。默认情况下,bhyve 允许每个虚拟机创建与主机物理 CPU 数量相同的 vCPU。此限制可以通过加载器调节选项 hw.vmm.maxcpu 来调整。3e02f8809aecarrow-up-right

默认启用了 64 位可执行文件的地址空间布局随机化(ASLR)。如果应用程序出现意外故障(例如,段错误),可以根据需要禁用 ASLR。要禁用单次调用,可以使用 proccontrol(1)arrow-up-right 命令:proccontrol -m aslr -s disable command。要禁用所有二进制文件的 ASLR 调用,可以使用 elfctl(1)arrow-up-right 命令:elfctl -e +noaslr file。问题应通过问题报告系统 https://bugs.freebsd.orgarrow-up-right 提交,或通过 [email protected] 邮件列表报告。10192e77cfacarrow-up-right(由 Stormshield 赞助)

已实现针对 Intel Alder Lake(第十二代)和 Raptor Lake(第十三代)混合 CPU 的硬件页面失效问题的解决方法。该漏洞可能导致 UFS 和 MSDOSFS 文件系统损坏,并可能导致其他内存损坏。通过此解决方法,小核(E 核心)会自动使用较慢的页面失效方法。567cc4e6bfd9arrow-up-right(由 FreeBSD 基金会赞助)

新增内核配置选项 SPLIT_KERNEL_DEBUG,用于控制将内核和模块的调试数据分割成独立的文件。该选项与选项 WITHOUT_KERNEL_SYMBOLS 相互作用,后者的操作方式与 13.0-RELEASE 和 13.1-RELEASE 中不同,但与早期版本相似;它现在仅控制调试数据的安装。默认情况下为 WITH_KERNEL_SYMBOLSWITH_SPLIT_KERNEL_DEBUG,允许将不含调试数据的内核和模块安装在 /boot 中,将独立的调试文件安装在 /usr/lib/debug 中,这与 13.0-RELEASE 之前的版本相同。使用 WITHOUT_KERNEL_SYMBOLSWITH_SPLIT_KERNEL_DEBUG 时,生成独立的调试文件,但不安装,类似于早期版本中使用 WITHOUT_KERNEL_SYMBOLS 的情况。最后,使用 WITHOUT_KERNEL_SYMBOLSWITHOUT_SPLIT_KERNEL_DEBUG 时,将内核和模块与内置调试信息一起安装到 /boot 中,这与 13.1-RELEASE 中使用 WITHOUT_KERNEL_SYMBOLS 的情况相同。0c4d13c521aaarrow-up-right(由 FreeBSD 基金会赞助)

在 PowerPC 上,支持 pseries 的 ISA 3.0 中的 radix pmap。这应使得 pseries 在 POWER9 实例上显著加速,因为现在管理 pmap 所需的超调用更少。c74c77531248arrow-up-right

现已在 arm64 上为 Linux 进程提供 ptrace(2)arrow-up-right 支持。99950e8beb72arrow-up-right

为了提高 stable 分支的 ABI 兼容性,CPU 亲和性系统调用现在可以更宽容地处理比内核使用的 CPU 集合小的 CPU 集合。这将促进 MAXCPU(内核 CPU 集合的大小)增加。72bc1e6806ccarrow-up-right

为保存 CPU 浮动点状态跨信号传递,64 位 linux(4)arrow-up-right ABI 增加了支持。0b82c544de58arrow-up-right20d601714206arrow-up-right

linux(4)arrow-up-right ABI 中的 vDSO(虚拟动态共享对象)支持已基本完成。a340b5b4bd48arrow-up-right

arm64 上的 linux(4)arrow-up-right ABI 已与 amd64 上的 linux(4)arrow-up-right ABI 达到一致。0b82c544de58arrow-up-righta340b5b4bd48arrow-up-right

设备和驱动程序

本节介绍了自 13.1-RELEASE 以来,设备和设备驱动程序的变更和新增内容。

设备驱动程序

em(4)arrow-up-right 驱动程序现在可以正确支持新款芯片 82580 和 i350 上的完整接收缓冲区大小范围。3f8306cf8e2darrow-up-right

ena(4)arrow-up-right 驱动程序已升级到 2.6.2 版本。(由亚马逊赞助)

已为 hwpmc(4)arrow-up-right 实现了对 Intel Alder Lake CPU 的基本支持。b8ef2ca9eae9arrow-up-right

ice(4)arrow-up-right 驱动程序已更新至 1.37.7-k 版本。

irdma(4)arrow-up-right RDMA 驱动程序已为 Intel E810 以太网控制器引入,支持 RoCEv2 和 iWARP 协议,以每个 PF 方式运行,默认使用 RoCEv2,并已升级至 1.1.5-k 版本。42bad04a2156arrow-up-right(由英特尔公司赞助)

现在已提供对 DPAA2(第二代数据路径加速架构,一种在某些 NXP SoC 中找到的硬件级网络架构)的初步支持。它运行 NXP 提供的固件,作为抽象层提供 DPAA2 对象,并提供一个 dpni 网络接口。d5a64a935bc9arrow-up-right(由 Bare Enthusiasm :) 和 Traverse Technologies 赞助)

iwlwifi(4)arrow-up-right 驱动程序已更新,用于支持 Intel 无线接口。(由 FreeBSD 基金会赞助)

rtw88(4)arrow-up-right 驱动程序已添加,用于支持多个 Realtek 无线 PCI 接口。目前仅限于 802.11 a/b/g 操作。更多信息请参见 https://wiki.freebsd.org/WiFi/Rtw88arrow-up-right

已为支持 Linux 设备驱动程序的 KPI 添加了许多新功能和改进。(由 FreeBSD 基金会赞助)

存储

本节介绍了文件系统和其他存储子系统(本地和网络存储)的变更和新增内容。

NFS 变更

已修复导致 NFS 服务器挂起的问题;该问题是由 TCP 中 SACK 处理的 bug 引起的。

UFS 变更

现在可以在运行启用了日志软更新的 UFS 文件系统上进行快照。因此,现在可以在运行日志软更新的在线文件系统上执行后台转储。通过使用 -L 参数来请求后台转储:dump(8)arrow-up-right。在以前的版本中,UFS 快照与日志软更新不兼容。3f908eed27b4arrow-up-right(由 FreeBSD 基金会赞助)

启动加载器变更

本节介绍了启动加载器、启动菜单和其他启动相关的变更。

启动加载器变更

变量 teken.fg_colorteken.bg_color loader.conf(5)arrow-up-right 现在接受 brightlight 前缀(以及颜色号 8 到 15)来选择亮色。1dcb6002c500arrow-up-right(由 FreeBSD 基金会赞助)。另见 233ab015c0d7arrow-up-right

修复了多个导致视频控制台输出消失的 bug。问题通常是在启动加载器启动内核后出现挂起。(由奈飞赞助)

网络

本节介绍了影响 FreeBSD 网络功能的变更。

一般网络

内核的 wg(4)arrow-up-right WireGuard 驱动程序已重新集成;它通过 WireGuard 协议提供虚拟私人网络(VPN)接口。5ae69e2f10daarrow-up-right(由 Rubicon Communications, LLC("Netgate")和 FreeBSD 基金会赞助)

KTLS(内核 TLS 实现)已为 TLS 1.3 添加接收卸载支持。现在支持 TLS 1.1 至 1.3 的接收卸载;TLS 1.0 至 1.3 的发送卸载也得到了支持。1462dc95f796arrow-up-right(由奈飞赞助)

现在提供 netlink(4)arrow-up-right 网络配置协议。它是 RFC 3549 中定义的通信协议,使用原始套接字在用户空间和内核之间交换配置数据。第三方路由程序和 linux(4)arrow-up-right ABI 使用该协议。6058f6cc48f5arrow-up-right(不包括在 13.2-RELEASE 的 GENERIC 配置中,但作为内核模块提供)

现在支持在 ipfw(4)arrow-up-right 中使用 Radix 表和查找来处理 MAC 地址。这使得可以构建和使用 MAC 地址表来进行过滤。c31f8b7bd895arrow-up-right

内核模块 dpdk_lpm4 和 dpdk_lpm6 现在可用,可以通过 loader.conf(5)arrow-up-right 加载。它们为具有大量路由表的主机提供优化的路由功能。可以通过 route(8)arrow-up-right 配置,并且是模块化 FIB 查找机制的一部分。0ca122044369arrow-up-right

TCP 和 SCTP 中有多个 bug 修复。

关于后续 FreeBSD 版本的一般说明

已弃用 OPIE,并将在 FreeBSD 14.0 中移除。

已弃用同步串行驱动程序 ce(4)arrow-up-rightcp(4)arrow-up-right ,并将在 FreeBSD 14.0 中移除。

ISA 声卡的驱动程序已弃用,并将在 FreeBSD 14.0 中移除。d7620b6ec941arrow-up-right(由 FreeBSD 基金会赞助)

已弃用工具 mergemaster(8)arrow-up-right,并将在 FreeBSD 14.0 中移除。它的替代工具是 etcupdate(8)arrow-up-right5fa16e3c50c5arrow-up-right(由 FreeBSD 基金会赞助)

已弃用工具 minigzip(1)arrow-up-right ,并将在 FreeBSD 14.0 中移除。84d3fc26e3a2arrow-up-right

在 netgraph 中,ATM 的剩余组件(NgATM)已弃用,并将在 FreeBSD 14.0 中移除。已移除对 ATM NIC 的支持。

已弃用 Telnet 守护进程 telnetd(8)arrow-up-right ,并将在 FreeBSD 14.0 中移除。Telnet 客户端不受影响。

已弃用 geom(8)arrow-up-right 中的 VINUM 类,并将在后续版本中移除。

默认 CPUTYPE 变更

从 FreeBSD-13.0 开始,i386 架构的默认 CPUTYPE 将从 486 变更为 686

这意味着,默认情况下,生成的二进制文件将要求 686 类 CPU,包括但不限于 FreeBSD 发布工程团队提供的二进制文件。FreeBSD 13.x 仍将继续支持旧的 CPU,但需要此功能的用户将需要为官方支持自行构建发行版。

由于 i486 和 i586 CPU 主要用于嵌入式市场,因此预计对普通用户的影响将是最小的,因为这些 CPU 类型的新硬件早已不再使用,而部署的这类系统的基础大部分接近退休年龄,统计上来看。

做出这一变更时考虑了多个因素。例如,i486 没有 64 位原子操作,虽然可以在内核中模拟,但无法在用户空间中模拟。此外,32 位 amd64 库从一开始就是 i686。

由于大多数 32 位测试是由开发人员使用内核选项 COMPAT_FREEBSD32,在 64 位硬件上使用 lib32 库进行的,这一变更确保了更好的覆盖率和用户体验。这也符合大多数 Linux® 发行版长期以来的做法。

预计这将是 i386 默认 CPUTYPE 的最后一次升级。

此变更不会影响 FreeBSD 12.x 系列的版本。

最后更新于