FreeBSD 15 STABLE更新和升级到RELEASE

我为了能够 FreeBSD 15环境bhyve中实现NVIDIA GPU passthrough ,在9月中旬FreeBSD 15处于Alpha 1阶段时安装了这个最新版本。之后,由于非RELEASE版本都需要从源代码编译升级,所以在 FreeBSD 15 Alphas更新和升级 过程中,我始终在STABLE分支的源代码编译升级。

2025年12月2日,FreeBSD终于发布了 15.0-RELEASE 版本,所以我需要将当前的非发布分支 STABLE 切换升级到 RELEASE

  • 注意,由于非 RELEASE 分支,不能使用 FreeBSD更新和升级freebsd-update 命令,例如 freebsd-update fetch 会提示错误:

对于非RELEASE版本使用 freebsd-update 会提示错误
freebsd-update: Cannot upgrade from a version that is not a release
(including alpha, beta and release candidates)
using freebsd-update. Instead, FreeBSD can be directly
upgraded by source or upgraded to a RELEASE/RELENG version
prior to running freebsd-update.
Currently running: 15.0-STABLE

需要将当前STABLE分支切换到RELEASE分支 ,参考 Updating the Source 可以看到有3个分支:

FreeBSD分支

uname -r 输出

仓库路径

说明

X.Y-RELEASE

releng/X.Y

Release版本加上critical security and bug fix patches,该分支适合大多数用户

X.Y-STABLE

stable/X

STABLE表示Applications Binary Interface (ABI)稳定不变,这样早期版本上编译的软件依然可以运行,该分支可以能会不兼容但是修复极快

X-CURRENT

main

最新的未发布开发版本,该分支会有bug和不兼容,所以仅适合资深用户

  • 将当前 STABLE 源代码分支切换到 releng/15.0 :

切换 releng/15.0
git checkout releng/15.0
git pull
  • 编译内核以及userland(world):

编译和安装
# 步骤1: 清除旧objects并构建 "world" (userland)
sudo make -j$(sysctl -n kern.smp.cpus) buildworld

# 步骤2: 构建内核
sudo make -j$(sysctl -n kern.smp.cpus) buildkernel

# 步骤3: 安装新内核
sudo make installkernel

# 步骤4: 重启到新内核,然后在安装新的 "world"
sudo shutdown -r now

# 步骤5: 在installworld之前更新和合并配置
etcupdate -p

# 重启以后,登陆系统并继续完成安装world
sudo make installworld

# 更新和合并 etc 配置
etcupdate -B

# 再次重启
sudo shutdown -r now
  • 升级完成后,需要确保 /etc 目录下配置文件更新为符合新的upserspace:

更新 /etc 目录下配置
etcupdate
  • 检查新版本不需要的文件并删除:

清理就文件和库
cd /usr/src
make check-old
make delete-old
make check-old-libs
make delete-old-libs
  • 最后检查 uname -r 可以看到系统已经是 15.0-RELEASE ,此时就能够实现通过 freebsd-update 完成 FreeBSD更新和升级