FreeBSD 13.1-RELEASE 发行说明(2022 年 5 月 16 日)
摘要
FreeBSD 13.1-RELEASE 的发行说明总结了在 13-STABLE 开发分支中对 FreeBSD 基本系统所作的变更。本文件列出了自上次发行以来发布的适用安全公告,以及对 FreeBSD 内核和用户空间的重大变更。此外,还简要介绍了升级相关的注意事项。
引言
本文件包含 FreeBSD 13.1-RELEASE 的发行说明,介绍了最近添加、变更或删除的功能,同时提供了从 FreeBSD 早期版本升级的相关说明。
本发行说明适用于 FreeBSD 13-STABLE 开发分支中自创建以来的最新节点。有关此分支上预构建的二进制发行版的信息,请访问 https://www.FreeBSD.org/releases/。
本发行说明所涉的发行版,位于 13-STABLE 开发分支中 13.0-RELEASE 和未来 13.2-RELEASE 之间的某一节点。有关此分支上预构建的二进制发行版的信息,请访问 https://www.FreeBSD.org/releases/。
FreeBSD 13.1-RELEASE 是个 RELEASE 发行版,可以从 https://www.FreeBSD.org/releases/ 或其任一镜像站下载。关于获取此版本(或其他版本)发行版的更多信息,请参阅 FreeBSD 手册 中的 获取 FreeBSD 附录。
建议所有用户在安装 FreeBSD 之前,查阅发行版的勘误表。勘误表包含在发行周期后期或发行后发现的“最新信息”,通常包括已知错误、安全公告以及文档修订的相关内容。可在 FreeBSD 网站上找到 FreeBSD 13.1-RELEASE 的最新勘误表副本。
本文件介绍了自 13.0-RELEASE 以来,FreeBSD 中对用户最显著的新功能或变更。一般而言,本文中提到的变更是 13-STABLE 分支所独有的,除非明确标记为已合并功能。
发行说明通常记录自 13.0-RELEASE 以来发布的安全公告、新驱动程序或硬件支持、新命令或选项、重大错误修复或第三方软件升级。此外,还可能列出主要的 Port/软件包变更或发行工程实践的更新。显然,发行说明无法列出两个版本之间 FreeBSD 的每一处变更;本文件主要关注安全公告、用户可见的变更以及主要的架构改进。
从旧版 FreeBSD 升级
通过 freebsd-update(8) 工具,可以在不同 RELEASE 版本之间(包括各安全分支的快照版本)进行二进制升级。该工具将更新未修改的用户空间工具,以及官方 FreeBSD 发行版中包含的未修改的 GENERIC 内核。使用 freebsd-update(8) 工具要求待升级的主机具备互联网连接。
基于源代码的升级(通过重新编译 FreeBSD 基本系统的源代码进行升级)也受到支持,具体请按照 /usr/src/UPDATING
中的说明操作。
对于所有 powerpc 架构的用户,在成功安装内核和世界后,需要手动运行 kldxref /boot/kernel
。
在尝试升级 FreeBSD 之前,务必备份 所有 数据和配置文件。
升级后,sshd(来自 OpenSSH 8.8p1)在重新启动之前不会接受新的连接。在安装新用户空间后,要么按照源代码升级程序的要求重启系统,要么执行
service sshd restart
来重启sshd
服务。
用户空间
本节涉及对用户空间应用程序、第三方软件以及系统实用工具的变更和新增内容。
用户空间配置变更
参数 -i
现在默认添加了到 /etc/defaults/rc.conf
中的 rtsol(8) 和 rtsold(8)。变更详情见 a0fc5094bf4c(由 https://www.patreon.com/cperciva 赞助)。
用户空间应用程序变更
在 rtsol(8) 和 rtsold(8) 中添加了 -i
选项,用于禁用 0 到 1 秒的随机延迟,从而加快启动过程。8056b73ea163(由 https://www.patreon.com/cperciva 赞助)
对于 64 位架构,基本系统现在默认启用位置无关可执行文件(PIE)支持。可以通过开关 WITHOUT_PIE
禁用该功能,需要进行完全重新编译。396e9f259d96
新增了 zfskeys
rc(8) 服务脚本,允许在启动过程中自动解密使用 ZFS 原生加密的 ZFS 数据集。更多信息请参考 rc.conf(5) 手册。33ff39796ffe、8719e8a951b7(由 Modirum 和 Klara Inc. 赞助)
bhyve(8) 的 NVMe 仿真已升级至 NVMe 规范的 1.4 版本。b7a2cf0d9102 eae02d959363
修复了 bhyve(8) 中构建大 IO 的 NVMe iovec 的问题,该问题由 Rocky Linux 8.4 附带的 UEFI 驱动暴露出来。a7761d19dacd
为巴西葡萄牙语 ABNT2 键盘添加了额外的 Alt Gr 映射。310623908c20
chroot
现在支持非特权操作,chroot(8) 程序增加了 -n
选项以启用该功能。460b4b550dc9(由 EPSRC 赞助)
修改了 CAM 库以在解析设备名称之前使用 realpath(3),从而允许诸如 camcontrol(8) 和 smartctl(8) 之类的工具在使用符号链接时更加友好。e32acf95ea25
通过在程序名称以 sum
结尾时让相应的 BSD 程序运行 -r
选项,添加了兼容 Linux 的 md5sum(1) 和类似的消息摘要程序。c0d5665be0dc(由奈飞赞助)
svnlite(1) 默认在构建中禁用。a4f99b3c2384
mpsutil(8) 扩展以显示适配器信息并控制 NCQ。395bc3598b47
修复了使用 camcontrol(8) 下载固件后设备出现的问题,方法是在下载固件后强制重新扫描 LUN。327da43602cc(由奈飞赞助)
第三方软件
在所有 PowerPC 架构上已启用 LLDB 的构建支持。cb1bee9bd34
One True Awk 已更新为上游的最新版本(20210215)。除了一个补丁外,FreeBSD 的所有补丁已被上游接纳或移除。主要变更包括:
范围不再使用区域设置。
修复了各种错误。
提高了与
gawk
和mawk
的兼容性。 剩下的一个 FreeBSD 修改可能会在 FreeBSD 14 中移除,目前依然允许将以0x
为前缀的十六进制数解析并解释为十六进制数,而其他 awk 实现(现在包括 One True Awk)将其解释为0
,符合 awk 的历史行为。
zlib
升级到版本 1.2.12。libarchive
升级到版本 3.6.0,并包含即将发布的修补程序版本中的额外错误和安全修复。发布说明可在 https://github.com/libarchive/libarchive/releases 查看。ssh
包已更新为 OpenSSH v8.8p1,包含安全更新和错误修复。其他更新包括以下变更:ssh(1):在提示是否记录新主机密钥时,接受该密钥的指纹作为“yes”的同义词。
ssh-keygen(1):作为 CA 并使用 RSA 密钥签署证书时,默认使用
rsa-sha2-512
签名算法。ssh(1):默认启用
UpdateHostkeys
,但受到一些保守条件的限制。scp(1):远程到远程复制(如
scp host-a:/path host-b:
)的行为已变更,默认通过本地主机传输。scp(1):实验性支持使用 SFTP 协议进行传输,以替代传统的 SCP/RCP 协议。
在 ssh
中启用了对 FIDO/U2F 硬件认证器的支持,新增了 ecdsa-sk
和 ed25519-sk
公钥类型以及相应的证书类型。有关 FIDO/U2F 支持的描述请参考 https://www.openssh.com/txt/release-8.2。a613d68fff9a(由 FreeBSD 基金会赞助)
bsdinstall(8) 的脚本分区编辑器新增了一种新模式,用于支持变体磁盘名称。如果 DEFAULT
被设置为磁盘参数,或者在 PARTITIONS
参数中未指定设备名称,安装程序将遵循自动分区模式的逻辑。如果存在多个磁盘,将提供选择对话框;如果只有一个磁盘,则会自动选择。这简化了为硬件或虚拟机创建全自动安装介质的过程。5ec4eb443e81
运行时库与 API
为 powerpc、powerpc64 和 powerpc64le 添加了 OpenSSL 的汇编优化代码。ce35a3bc852
修复了对 ARMv7 和 ARM64 加速加密操作的 CPU 特性检测,大幅提升了 aes-256-gcm
和 sha256
的性能。32a2fed6e71f(由 Ampere Computing LLC 和 Klara Inc. 赞助)
启用了 riscv64 和 riscv64sf 平台上的 ASAN 和 UBSAN 库的构建支持。8c56b338da7
在 riscv64 和 riscv64sf 平台上构建了 OFED 库。2b978245733
在 riscv64 和 riscv64sf 平台上构建了 OPENMP 库。aaf56e35569
内核
本部分涉及内核配置、系统调优以及未分类的系统控制参数的变更。
通用内核变更
修复了 powerpc64 平台上串行控制台的输出损坏问题。dca829138ca
CAS 已变更为支持 Radix MMU。cc8e726c85b
修复了在 QEMU 的 TCG 模式下运行启用了 HPT 超页的 FreeBSD 于 powerpc64(le) 平台的问题。f05174ed354
在 powerpc64(le) 平台上的 pmap_mincore
添加了对超页的支持。32b50b8520d
在 arm64 平台上为 32 位 ARM 二进制文件添加了 HWCAP/HWCAP2 辅助参数支持。这修复了在 COMPAT32
仿真下构建/运行 Golang 的问题。28e22482279f(由 Rubicon Communications, LLC ("Netgate") 赞助)
设备与驱动
本部分介绍了自 13.0-RELEASE 以来,设备和设备驱动的变更和新增内容。
设备驱动
引入了 igc(4) 驱动程序,用于支持 Intel I225 以太网控制器。该控制器支持 2.5G/1G/100Mb/10Mb 速度,并支持 tx/rx 校验和卸载、TSO、LRO 和多队列操作。d7388d33b4dd(由 Rubicon Communications, LLC ("Netgate") 赞助)
修复了 powerpc64(le) 平台在启动过程中使用 AST2500 时,VGA/HDMI 控制台的问题。c41d129485e
修复了 virtio(4) 驱动中大端目标设备的 PCI 通用读写功能。7e583075a41, 8d589845881
为驱动 mpr(4) 添加了大端支持。7d45bf699dc, 2954aedb8e5, c80a1c1072d
降低了驱动 aacraid(4) 的最大 I/O 大小以避免 DMA 问题。572e3575dba
修复了驱动 virtio_random(8) 阻止虚拟机客户机关机或重启的问题。fa67c45842bb
更新了驱动 ice(4) 至 1.34.2-k,增加了固件日志记录功能和初步的 DCB 支持。a0cdf45ea1d1(由英特尔公司赞助)
添加了网络接口驱动程序 mgb(4) ,支持 Microchip 的 LAN7430 PCIe 千兆以太网控制器(带 PHY)和 LAN7431 PCIe 千兆以太网控制器(带 RGMII 接口)。尽管该驱动仍存在一些限制,但功能已可用。e0262ffbc6ae(由 FreeBSD 基金会赞助)
为 cdce(4) 设备添加了链路状态、媒体类型和 VLAN MTU 的支持。973fb85188ea
添加了 iwlwifi(4) 驱动和一个 LinuxKPI 802.11 兼容层,用于支持较新的 Intel 无线芯片组,以补充 iwm(4) 驱动。(由 FreeBSD 基金会赞助)
当内核使用选项 MMCCAM
配置时,现在可以使用 dwmmc
控制器将内核崩溃转储保存到 SD 卡和 eMMC 模块。79c3478e76c3
当内核使用选项 MMCCAM
配置时,现在可以使用 sdhci
控制器将内核崩溃转储保存到 SD 卡。8934d3e7b9b9
支持的平台
新增对 HiFive Unmatched RISC-V 开发板的支持。
存储
本部分涉及文件系统及其他存储子系统(包括本地和网络存储)的变更与新增内容。
通用存储
暂无具体变更说明。
ZFS 变更
ZFS 已升级至 OpenZFS 2.1.4 版本。OpenZFS 的发行说明可参阅 https://github.com/openzfs/zfs/releases。
NFS 变更
默认在 amd64 和 arm64 架构上构建了两个新的守护程序 rpc.tlsclntd(8) 和 rpc.tlsservd(8)。它们提供了对基于 TLS 的 NFS 加密支持,该功能描述于《Towards Remote Procedure Call Encryption By Default》草案中。这些守护程序在指定
WITH_OPENSSL_KTLS
时构建,使用 KTLS 加密/解密所有 NFS RPC 消息流量,并可选择通过 X.509 证书验证设备身份。2c76eebca71b 59f6f5e23c1a默认的 NFSv4 挂载次版本号已变更为 NFSv4 服务器所支持的最高次版本号。用户可通过挂载选项
minorversion
手动覆盖此默认值。8a04edfdcbd2新增了 NFSv4.1/4.2 的挂载选项
nconnect
,用于指定挂载所使用的 TCP 连接数量(最多 16 个)。默认的第一个 TCP 连接将用于所有小型 RPC 消息,而可能包含大型 RPC 消息的操作(如 Read、Readdir、ReaddirPlus、Write)将在额外的 TCP 连接上以轮询方式发送。如果 NFS 客户端或服务器具有多个聚合的网络接口或支持多队列的网络接口,则此功能可以提高 NFS 的性能。9ec7dbf46b0a添加了 sysctl 配置项
vfs.nfsd.srvmaxio
,用于将 NFS 服务器的最大 I/O 大小从 128KB 增加到任意 2 的幂值(最高 1MB)。该选项只能在 nfsd 线程未运行时设置,且通常需要将kern.ipc.maxsockbuf
增加至控制台日志中建议的值。9fb6e613373c
UFS 变更
修复了 fsck_ffs(8) 工具在预检模式下处理启用软更新(但未启用软更新日志)的 UFS 时无法正常运行的问题。fb2feceac34c
引导加载程序的变更
本部分涉及引导加载程序、引导菜单和其他引导相关的变更内容。
引导加载程序的变更
UEFI 引导改进(amd64): 针对 amd64 架构改进了 UEFI 引导。加载器会检测所加载的内核是否支持原位暂存区(非复制模式)。默认设置为
copy_staging auto
。用户可以通过手动覆盖自动检测,例如:设置copy_staging enable
时,加载器会无条件将暂存区复制到 2M 地址,无论内核是否支持。此外,扩展暂存区的代码更为稳健,用户无需手动调整和重新编译加载器即可完成扩展。(由 FreeBSD 基金会 赞助)修复
boot1
和loader
在 powerpc64le 架构上的问题:8a62b07bce7
其他引导变更
性能改进:对 loader(8)、nvme(4)、random(4)、rtsold(8) 和 x86 时钟校准的性能进行了优化,这显著缩短了系统引导时间。此外,EC2 平台的配置变更进一步提高了性能,使得 13.1-RELEASE 的引导速度比 13.0-RELEASE 快了两倍以上。(由 https://www.patreon.com/cperciva 赞助)
EC2 镜像默认使用 UEFI 引导: EC2 镜像现在默认使用 UEFI 引导而非传统的 BIOS 引导。不过,基于 Xen 的 EC2 实例或
bare metal
EC2 实例仍不支持 UEFI。65f22ccf8247(由 https://www.patreon.com/cperciva 赞助)支持在 AWS Systems Manager 参数存储中记录 EC2 AMI ID: FreeBSD 在 AWS Systems Manager 参数存储中使用公共前缀
/aws/service/freebsd
,生成类似/aws/service/freebsd/amd64/base/ufs/13.1/RELEASE
的参数名称。242d1c32e42c(由 https://www.patreon.com/cperciva 赞助)
网络
本部分介绍了 FreeBSD 中影响网络功能的变更。
通用网络
IPv4 子网最低地址的处理变更: IPv4(子)网的最低地址(主机 0)的处理方式发生了变化,只有在该地址被设置为广播地址时,才会将数据包作为广播发送。这一变更使最低地址可用于主机。如果需要恢复旧行为,可以通过 sysctl 选项
net.inet.ip.broadcast_lowest
完成。背景信息参见 https://datatracker.ietf.org/doc/draft-schoen-intarea-unicast-lowest-address/。3ee882bf21af
关于后续 FreeBSD 版本的说明
暂无具体变更内容。
默认 CPUTYPE
变更
CPUTYPE
变更从 FreeBSD-13.0 开始,i386 架构的默认 CPUTYPE
将从 486
变更为 686
。
这意味着默认生成的二进制文件将需要支持 686 级别的 CPU,包括但不限于由 FreeBSD 发布工程团队提供的二进制文件。尽管 FreeBSD 13.0 仍将支持较旧的 CPU,但需要此功能的用户需自行构建其专属版本以获得官方支持。
由于 i486 和 i586 CPU 的主要应用通常在嵌入式市场,普通终端用户受此变更的影响预计会非常有限。新硬件中这些类型的 CPU 早已不常见,而大部分现有系统的硬件也接近使用寿命的尾声。
作出这一变更考虑了多个因素。例如,i486 不支持 64 位原子操作(atomics),虽然内核可以模拟这些操作,但在用户态(userland)中无法实现。此外,32 位 amd64 库自开始以来便已采用 i686。
大多数 32 位测试由开发者通过在 64 位硬件上使用内核中的选项 COMPAT_FREEBSD32
和 lib32 库完成。此变更可提供更好的覆盖范围和用户体验,同时符合大多数 Linux® 发行版的长期做法。
这预计将是 i386 架构中默认 CPUTYPE
的最后一次升级。
此变更不影响 FreeBSD 12.x 系列版本。
最后更新于