5.7 使用 freebsd-update 更新 FreeBSD
注意:
只有一级架构的 RELEASE 版本才提供该更新源。也就是说,CURRENT 和 STABLE 不提供该源。关于架构的支持等级说明请参见: Supported Platforms
注意
ZFS 相关升级请参见 ZFS 章节。
历史
FreeBSD 提供了实用工具 freebsd-update,用于安装系统更新,包括升级到新的大版本。freebsd-update 在 FreeBSD 7.0-RELEASE 中获得了正式支持。
参考文献
FreeBSD 7.0-RELEASE Announcement 指出 freebsd-update(8) 是官方支持的二进制更新方式,不仅可用于升级到新版本,还可用于安全修复和勘误补丁的更新。
将默认文本编辑器替换为较简单的编辑器
bash、zsh 或 sh(14.0 及以上版本)
# export EDITOR=/usr/bin/ee # 切换 vi 为 ee,默认为 nvi
# export VISUAL=/usr/bin/ee # 切换 vi 为 eecsh(14.0 以下版本)
# setenv EDITOR /usr/bin/ee # 切换 vi 为 ee,默认为 nvi
# setenv VISUAL /usr/bin/ee # 切换 vi 为 ee检查与验证
查看当前终端默认文本编辑器:
查看当前终端可视化文本编辑器:
常规补丁/安全更新(X.Y-RELEASE——>X.Y-RELEASE-pN)
X.Y-RELEASE——>X.Y-RELEASE-pN)警告
无论是大版本更新、点版本更新还是常规更新,都应该先执行一次该流程。不可绕过,否则可能会出现不可预料的后果。
FreeBSD 版本检查
进行更新
获取更新
当出现类似如下信息时:
FreeBSD 版本检查
查看更新后的 FreeBSD 版本:
注意:
有时候补丁不涉及内核,内核版本就不会变,用
uname -r无法体现,但用户空间版本会发生变化。因此你可能会看到两个版本号,应以较高者为准。
重启系统:
再查看 FreeBSD 版本:
大版本更迭(X.Z-RELEASE-pN——>A.0-RELEASE)
X.Z-RELEASE-pN——>A.0-RELEASE)注意
freebsd-update下载慢不是因为其更新源在境外(你使用境外服务器更新一样慢;并且在 freebsdcn 境内源还生效的那些日子里,亦如此)。这可能与其设计缺陷有关,freebsd-update是一个由数千行组成的纯 shell 脚本。这是一个始终普遍存在的问题。
以 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。
更新到 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 以结束更新流程。
验证操作系统版本:
系统更新完成。
更新 EFI 引导
背景介绍
警告
对于使用 EFI 引导的系统,EFI 系统分区(ESP)上有引导加载程序的副本,用于固件引导内核。如果根文件系统是 ZFS,则引导加载程序必须得能读取 ZFS 引导文件系统。在系统升级后,且执行
zpool upgrade前,必须先更新 ESP 上的引导加载程序,否则系统可能无法引导。虽然不是强制性的,但在 UFS 作为根文件系统时亦应如此。
可以使用命令 efibootmgr -v 来确定当前引导加载程序的位置。BootCurrent 显示的值是用于引导系统的当下引导配置的编号。输出的相应条目以 + 开头,如
ESP 通常已经挂载到了 /boot/efi。如果没有,可手动挂载之,使用 efibootmgr 输出中列出的分区(本例为 nda0p1):mount_msdosfs /dev/nda0p1 /boot/efi。有关另一则示例,请参阅 loader.efi(8)。
在 efibootmgr -v 输出的 File 字段中的值,如 \efi\freebsd\loader.efi,是 EFI 上正在使用的引导加载程序的位置。若挂载点是 /boot/efi,则此文件为 /boot/efi/efi/freebsd/loader.efi。(在 FAT32 文件系统上大小写不敏感;FreeBSD 使用小写)File 的另一个常见值可能是 \EFI\boot\bootXXX.efi,其中 XXX 是 amd64(即 x64)、aarch64(即 aa64)或 riscv64(即 riscv64);如未配置,则为默认引导加载程序。应将 /boot/loader.efi 复制到 /boot/efi 中的正确路径来更新已配置及默认的引导加载程序。
更新方法
在版本更新后,在启动菜单出现之前,可能出现下面的画面
注意
该界面出现的时间非常短暂,约只有 20 毫秒。可用相机拍摄观察。

即
这表明 loader 需要更新。还可以使用命令进行版本验证:
此处命令参考了手册 loader.efi 中的例子。/boot/efi/efi/freebsd/loader.efi 为当前正在使用的 loader(版本确实较旧)。
将 /boot/loader.efi 复制到 EFI 系统分区的 FreeBSD 目录下进行更新:
警告
请先更新 loader,再更新 ZFS 版本!
重要
非 EFI、bootcode、ZFS 等相关更新请自行查阅相关章节。
故障排除与未竟事宜
回滚更新
回滚最近一次系统更新:
pkg 找不到 .so 文件
.so 文件终端执行命令强制初始化 pkg 包管理器:
FreeBSD 升级出错,缺少 ntp 用户
终端执行命令:
最后更新于
这有帮助吗?