For the complete documentation index, see llms.txt. This page is also available as Markdown.

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 时正式成为官方支持的升级途径。

参考文献

将默认文本编辑器替换为更简单的编辑器

Bash、Zsh 或 sh

csh / tcsh

检查与验证

  • 查看当前终端默认文本编辑器:

  • 查看当前终端可视化文本编辑器:

常规补丁/安全更新(X.Y-RELEASEX.Y-RELEASE-pN

警告

无论是大版本更新、点版本更新还是常规更新,都应该先执行该流程。不可跳过,否则可能导致依赖缺失或系统无法正常启动。

FreeBSD 版本检查

进行更新

  • 获取更新

当出现类似如下信息时:

上述路径仅为示例输出,实际系统中的路径名称和数量可能会略有不同,请以实际输出为准。

此处列出的是发生变动的文件,确认后输入字母 q(quit,退出)并按回车键即可。

随后安装更新:

若需自动化定期检查更新,可改用 freebsd-update cron,该命令会随机延迟 1 至 3600 秒后执行 fetch。

验证更新后的 FreeBSD 版本

  • 查看更新后的 FreeBSD 版本:

注意

有时补丁未涉及内核,内核版本不会改变,使用 uname -r 无法体现,但用户空间版本会发生变化。因此可能显示两个版本号,应以较高者为准。

重启系统:

查看 FreeBSD 版本:

大版本更迭(X.Z-RELEASE-pNA.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 文件

终端执行命令强制初始化 pkg 包管理器:

FreeBSD 升级出错,导致缺少 ntpd 用户

终端执行命令:

课后习题

  1. 阅读 freebsd-update 脚本的源代码,使用高级编程语言重构,并验证是否能显著提升更新速度。

  2. 制作一个 freebsd-update 镜像站。

  3. freebsd-update 的二进制补丁模型依赖于对基本系统组件版本的精确跟踪,而第三方软件的更新则交由 pkg 管理。分析这种“基本系统与 Ports 分离”的更新策略在 ABI(Application Binary Interface)兼容性保障方面的优势,及其对滚动更新需求造成的限制。

最后更新于