如何从 FreeBSD 12 升级到 FreeBSD 13

FreeBSD 发布工程团队最近宣布 FreeBSD 13.0-RELEASE 的可用性。 这是 stable/13 分支的第一个版本。 FreeBSD 13.0 附带了许多更新的功能集。 它支持多种架构,包括 amd64、i386、powerpc、powerpc64、powerpc64le、powerpcspe、armv6、armv7、aarch64 和 riscv64。 如果您更喜欢全新安装,请前往 FreeBSD 13.0 下载页面 并获得适合您架构的版本。 如果您已经有旧版本,您可以直接将 FreeBSD 12 升级到 FreeBSD 13。在这个分步指南中,让我们看看如何从 FreeBSD 12 升级到 FreeBSD 13。

更新 FreeBSD 12

第一件事。 备份您无法承受丢失的所有内容。 在我的情况下,FreeBSD 升级工作 100%。 但是,请备份数据,以防万一。

使用命令检查 FreeBSD 操作系统版本和内核版本:

# freebsd-version -k

样本输出:

12.0-RELEASE-p10
$ uname -mrs

样本输出:

FreeBSD 12.0-RELEASE-p10 amd64
检查 FreeBSD 操作系统版本和内核版本

正如您在上面看到的,安装的版本是 FreeBSD 12.0-RELEASE。 我很久没有更新我的 FreeBSD 测试机了,所以它显示的是 12.0。 12.x 分支中的最新版本是 12.2。

在升级到下一个可用的主要版本之前,我们必须更新我们当前的 FreeBSD 12.x 版本。

要下载和安装 FreeBSD 安全补丁,请运行以下命令 root 用户:

# freebsd-update fetch
# freebsd-update install
# pkg upgrade

升级软件包后,重新启动系统:

# shutdown -r now

或者,

# reboot

是时候将 FreeBSD 12 升级到 FreeBSD 13 了。

从 FreeBSD 12 升级到 FreeBSD 13

运行以下命令从 FreeBSD 12.x 版本升级到 FreeBSD 13.0-RELEASE:

# freebsd-update -r 13.0-RELEASE upgrade

运行此命令后, freebsd-update 命令将评估配置文件和当前系统,以尝试收集执行升级所需的信息。 在升级过程中,系统会询问您要安装什么、要删除什么或如何继续。 您可能需要输入 y 并击中 ENTER 几次继续。

样本输出:

 src component not installed, skipped
 Looking up update.FreeBSD.org mirrors… 2 mirrors found.
 Fetching metadata signature for 12.0-RELEASE from update1.freebsd.org… done.
 Fetching metadata index… done.
 Fetching 1 metadata files… done.
 Inspecting system… done.
 The following components of FreeBSD seem to be installed:
 kernel/generic kernel/generic-dbg world/base world/base-dbg world/doc
 world/lib32 world/lib32-dbg
 The following components of FreeBSD do not seem to be installed:
 Does this look reasonable (y/n)? y
 Fetching metadata signature for 13.0-RELEASE from update1.freebsd.org… done.
 Fetching metadata index… done.
 Fetching 1 metadata patches. done.
 Applying metadata patches… done.
 Fetching 1 metadata files… 
[...]
从 FreeBSD 12 升级到 FreeBSD 13

上面的命令将开始下载所有包。 高枕无忧。 这将需要一段时间,具体取决于您的 Internet 连接速度。

在升级任务期间,配置文件将被合并。 随着过程的继续,每次成功合并的结果都将显示给用户。 请注意,当前系统尚未更改,因为所有合并和修补都在另一个目录中进行。

成功应用所有补丁后,所有配置文件都已合并,运行以下命令将所有更改提交到磁盘:

# freebsd-update install

样本输出:

src component not installed, skipped
 Installing updates…
 Kernel updates have been installed.  Please reboot and run
 "/usr/sbin/freebsd-update install" again to finish installing updates.
在 FreeBSD 中将补丁和更新提交到磁盘在 FreeBSD 中将补丁和更新提交到磁盘

所有内核更新都已安装在您的 FreeBSD 中。 您需要重新启动系统以应用补丁程序。

登录系统后,再次运行以下命令完成安装更新:

# freebsd-update install

安装所有更新后,您将看到以下输出:

[...]
Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run "/usr/sbin/freebsd-update install"
again to finish installing updates.

再次运行相同的命令来删除旧的共享库并完成 FreeBSD 13.0 升级任务。

# freebsd-update install

最后,重新启动系统以完成升级任务。

通过检查操作系统版本来验证 FreeBSD 13.0 是否升级成功。

# freebsd-version -k
13.0-RELEASE

并检查 FreeBSD 内核版本:

# uname -mrs
FreeBSD 13.0-RELEASE amd64
FreeBSD 13.0 升级成功FreeBSD 13.0 升级成功

恭喜! 我们刚刚升级到 FreeBSD 13.0。 我们还需要做一件事。 主要版本升级后,应升级所有已安装的包和端口。

使用以下命令更新所有已安装的包和端口集合:

# pkg-static install -f pkg
# pkg bootstrap -f
# pkg update -y
# pkg upgrade -y

就是这样。 再次重新启动并开始使用 FreeBSD 版本。

解决 FreeBSD 中的 pkg 更新错误

升级到 FreeBSD 13.0 后,当我尝试更新端口集合时出现以下错误:

 pkg-static: Warning: Major OS version upgrade detected.  Running "pkg-static install -f pkg" recommended
 Updating FreeBSD repository catalogue…
 pkg-static: repository meta has wrong version 2
 pkg-static: Repository FreeBSD load error: meta cannot be loaded No error: 0
 Fetching meta.txz: 100%    916 B   0.9kB/s    00:01    
 pkg-static: repository meta has wrong version 2
 repository FreeBSD has no meta file, using default settings
 Fetching packagesite.txz: 100%    6 MiB   1.6MB/s    00:04    
 pkg-static: repository meta has wrong version 2
 pkg-static: Repository FreeBSD load error: meta cannot be loaded No error: 0
 Unable to open created repository FreeBSD
 Unable to update repository FreeBSD
 Error updating repositories!

这通常在我们将 12.0 升级到 12.1 或 2 时发生。要解决此问题,请更新 ports-mgmt/pkg 从端口树使用 ports-mgmt/portmaster.

如果您还没有这样做,请使用命令获取端口树:

# portsnap fetch

样本输出:

 Looking up portsnap.FreeBSD.org mirrors… 4 mirrors found.
 Fetching public key from ipv4.aws.portsnap.freebsd.org… done.
 Fetching snapshot tag from ipv4.aws.portsnap.freebsd.org… done.
 Fetching snapshot metadata… done.
 Fetching snapshot generated at Tue Apr 27 00:08:31 UTC 2021:
 552628c35b88d79f5a54b7774ddca0463fde713e43f367          88 MB 3233 kBps    28s
 Extracting snapshot… done.
 Verifying snapshot integrity… done.
 Fetching snapshot tag from ipv4.aws.portsnap.freebsd.org… done.
 Fetching snapshot metadata… done.
 Updating from Tue Apr 27 00:08:31 UTC 2021 to Tue Apr 27 07:42:07 UTC 2021.
 Fetching 5 metadata patches… done.
 Applying metadata patches… done.
 Fetching 0 metadata files… done.
 Fetching 18 patches. 
 (18/18) 100.00%  done.                             
 done.
 Applying patches… 
 done.
 Fetching 0 new ports or files… done.

接下来运行以下命令下载并解压整个端口树到 /usr/ports 目录。

# portsnap extract

然后运行:

# pkg bootstrap -f
# pkg update -f
# pkg upgrade -f

这通常发生在我们进行小升级时,即 12.0 到 12。运行后 pkg bootstrap -f 一切都按预期工作。

相关阅读:

  • 如何在 FreeBSD 上启用 SSH