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 为 ee

csh(14.0 以下)

# setenv EDITOR /usr/bin/ee # 切换 vi 为 ee,默认为 nvi 
# setenv VISUAL /usr/bin/ee # 切换 vi 为 ee

检查验证

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

警告

无论你是大版本还是点版本还是常规更新,都应该先走一遍这个流程。不可绕过,否则会出现不可预料的后果。

版本检查

进行更新

  • 获取更新

当出现类似于如下信息时:

这里是发生变动的文件,你只需要在确认后输入字母 q(代表“quit”,退出)再按回车键即可。

然后安装更新:

版本检查

  • 查看更新后的版本:

注意:

有时候补丁不涉及内核,内核版本就不会变,用 uname -r 完全看不出来,但是用户空间版本会变。所以你可能会看到两个版本,以较高者为准。

重启:

再查看版本:

大版本间更迭(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 需要更新了。还可以使用命令进行版本验证:

此处命令参考了手册 loader.efi 中的例子。/boot/efi/efi/freebsd/loader.efi 为正在使用的 loader(版本确实旧了)

更新:

警告

请先更新 loader,再更新 ZFS 版本!

重要

非 EFI、bootcode、ZFS 等相关更新请自行查看相关部分章节!

故障排除与未竟事宜

回滚更新

pkg 找不到 .so

终端执行命令

FreeBSD 升级出错,没有 ntp 用户

终端执行命令

最后更新于

这有帮助吗?