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)警告
无论你是大版本还是点版本还是常规更新,都应该先走一遍这个流程。不可绕过,否则会出现不可预料的后果。
版本检查
进行更新
获取更新
当出现类似于如下信息时:
这里是发生变动的文件,你只需要在确认后输入字母 q(代表“quit”,退出)再按回车键即可。
然后安装更新:
版本检查
查看更新后的版本:
注意:
有时候补丁不涉及内核,内核版本就不会变,用
uname -r完全看不出来,但是用户空间版本会变。所以你可能会看到两个版本,以较高者为准。
重启:
再查看版本:
大版本间更迭(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-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(版本确实旧了)
更新:
警告
请先更新 loader,再更新 ZFS 版本!
重要
非 EFI、bootcode、ZFS 等相关更新请自行查看相关部分章节!
故障排除与未竟事宜
回滚更新
pkg 找不到 .so
.so终端执行命令
FreeBSD 升级出错,没有 ntp 用户
终端执行命令
最后更新于
这有帮助吗?