19.1 使用 freebsd-update 更新 FreeBSD
警告
freebsd-update 支持 amd64 和 arm64(aarch64)架构的 RELEASE、ALPHA、BETA、RC 版本。CURRENT、STABLE 和 PRERELEASE 分支不提供二进制更新,若使用 freebsd-update 将直接报错退出。上述分支必须通过源码编译方式或者 PkgBase 更新。
freebsd-update 是 FreeBSD 的基本系统更新工具,支持从 FreeBSD 官方更新服务器下载、校验并安装二进制更新,亦可用于跨 RELEASE 版本的升级与回滚。
注意
仅 amd64 和 arm64(aarch64)架构的 ALPHA、BETA、RC、RELEASE 版本提供更新源。CURRENT、STABLE 与 PRERELEASE 均无二进制更新。关于架构的支持等级说明请参见:FreeBSD Project. Supported Platforms[EB/OL]. [2026-03-26]. https://www.freebsd.org/platforms。
注意
ZFS 相关升级请参见 ZFS 章节。
历史
FreeBSD 提供了实用工具 freebsd-update,用于安装系统更新,包括升级到新的大版本。freebsd-update 最早随 FreeBSD 6.2-RELEASE 纳入基本系统,用于安全更新和勘误补丁;在 FreeBSD 6.3-RELEASE 中引入了 upgrade 命令,至 7.0-RELEASE 时正式成为官方支持的升级途径。
参考文献
FreeBSD Project. FreeBSD 6.2-RELEASE Release Notes[EB/OL]. [2026-04-16]. https://www.freebsd.org/releases/6.2R/relnotes.html. 发行说明,“The freebsd-update(8) utility is now included in the FreeBSD base system.”
FreeBSD Project. FreeBSD 7.0-RELEASE Announcement[EB/OL]. [2026-03-25]. https://www.freebsd.org/releases/7.0R/announce/. 官方公告明确 freebsd-update 为支持的二进制更新工具,适用于版本升级、安全修复及勘误补丁。
FreeBSD Project. freebsd-update -- fetch, install, and rollback FreeBSD updates[EB/OL]. [2026-04-17]. https://man.freebsd.org/cgi/man.cgi?query=freebsd-update&sektion=8. FreeBSD 系统更新工具手册页。
将默认文本编辑器替换为更简单的编辑器
Bash、Zsh 或 sh
csh / tcsh
检查与验证
查看当前终端默认文本编辑器:
查看当前终端可视化文本编辑器:
常规补丁/安全更新(X.Y-RELEASE → X.Y-RELEASE-pN)
X.Y-RELEASE → X.Y-RELEASE-pN)警告
无论是大版本更新、点版本更新还是常规更新,都应该先执行该流程。不可跳过,否则可能导致依赖缺失或系统无法正常启动。
FreeBSD 版本检查
进行更新
获取更新
当出现类似如下信息时:
上述路径仅为示例输出,实际系统中的路径名称和数量可能会略有不同,请以实际输出为准。
此处列出的是发生变动的文件,确认后输入字母 q(quit,退出)并按回车键即可。
随后安装更新:
若需自动化定期检查更新,可改用 freebsd-update cron,该命令会随机延迟 1 至 3600 秒后执行 fetch。
验证更新后的 FreeBSD 版本
查看更新后的 FreeBSD 版本:
注意
有时补丁未涉及内核,内核版本不会改变,使用
uname -r无法体现,但用户空间版本会发生变化。因此可能显示两个版本号,应以较高者为准。
重启系统:
查看 FreeBSD 版本:
大版本更迭(X.Z-RELEASE-pN → A.0-RELEASE)
X.Z-RELEASE-pN → A.0-RELEASE)注意
freebsd-update下载速率较低并非由于其更新源位于境外(使用境外服务器更新同样存在此问题)。可能与其设计方式有关,freebsd-update是一个由数千行代码组成的纯 Shell 脚本。这是长期存在的问题。
freebsd-update upgrade在工作目录(默认 /var/db/freebsd-update/)中可能需要最多 500 MB 空间,具体取决于已安装的基本系统组件。如果升级中断,可使用-F标志强制fetch继续处理未完成的升级。
以 FreeBSD 14.3-RELEASE 升级到 15.0-RELEASE 为例
检查版本
警告
由于大版本间的变动可能影响
freebsd-update更新工具本身,所以务必:先更新到当前版本最新的补丁版本(如
X.Y-RELEASE-pN),随后再更新到最新的点版本(如X.Z-RELEASE)。接下来,更新到最新的点版本及该点版本上最新的补丁版本(如
X.Z-RELEASE-pN)最后:完成大版本(
X.Z-RELEASE-pN——>A.0-RELEASE)的更迭。参见:libsys.so.7 not found when upgrading userland with legacy freebsd-update[EB/OL]. [2026-03-26]. https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=289769。
更新到 15.0-RELEASE
升级系统到 FreeBSD 15.0-RELEASE 版本:
运行 freebsd-update install 以安装更新:
内核更新已安装:
可以看到,当前已安装内核的版本和补丁级别是 15.0-RELEASE。但用户空间和当前正在运行的系统仍是 14.3-RELEASE,因此需要按照 freebsd-update 的提示重启:
运行 freebsd-update install 安装用户空间的更新部分:
重新安装 pkg 本身,将 ABI 更新到 15.0-RELEASE:
将第三方程序的 ABI 更新到 15.0-RELEASE:
第三方程序的更新至此完成。
再次执行 freebsd-update 以完成更新流程。
验证操作系统版本:
系统更新完成。
故障排除与未竟事宜
回滚更新
回滚最近一次系统更新:
pkg 找不到 .so 文件
.so 文件终端执行命令强制初始化 pkg 包管理器:
FreeBSD 升级出错,导致缺少 ntpd 用户
终端执行命令:
课后习题
阅读
freebsd-update脚本的源代码,使用高级编程语言重构,并验证是否能显著提升更新速度。制作一个 freebsd-update 镜像站。
freebsd-update 的二进制补丁模型依赖于对基本系统组件版本的精确跟踪,而第三方软件的更新则交由 pkg 管理。分析这种“基本系统与 Ports 分离”的更新策略在 ABI(Application Binary Interface)兼容性保障方面的优势,及其对滚动更新需求造成的限制。
最后更新于