第 11.2 节 通过源代码更新

基本思路就是获取 FreeBSD 的源代码,然后进行编译安装。可以使用 git 直接拉取代码,也可以直接下载 ISO 镜像里面的 txz 压缩文件或者去 github 上下载当前 FreeBSD 项目的 zip 压缩包。

编译流程见 Handbook 即可。非常地简单。

获取源代码

FreeBSD 项目在 2021 年从 SVN 全面迁移到了 Git,即 https://git.freebsd.org

所以获取源代码的方式也产生了变化,不再使用 svn 了。

从 Git 获取源代码

  • Git

# pkg install -y git
# git clone --depth 1 https://git.FreeBSD.org/src.git /usr/src  # 或 https://github.com/freebsd/freebsd-src

故障排除:

  • Git

    • fatal: unable to update url base from redirection

使用 FreeBSD 源却没加 .git

  • Gitup

# pkg install -y gitup
# gitup release # 具体版本需要参考当前 gitup 配置 https://github.com/johnmehr/gitup/blob/main/gitup.conf
# gitup current # 获取 current 源代码

故障排除:

  • fatal: unable to access 'https://git.FreeBSD.org/src.git/': SSL certificate problem: certificate is not yet valid

可能是时间不对造成的,同步时间:

# ntpdate -u pool.ntp.org # 当时间相差较大时必须使用该命令,其他命令不会生效

从压缩包获取源代码(推荐)

该方法比较简单快捷。

以 FreeBSD 14.0 为例:

# fetch https://download.freebsd.org/ftp/releases/amd64/14.0-RELEASE/src.txz
# tar xvzf src.txz  -C /

如果速度慢可以切换到 14.0-RELEASE/src.txz

开始编译

# cd /usr/src
# make -j4 buildworld  # 编译世界
# make -j4 kernel      # 编译并安装内核
# reboot               # 重启使用新内核
# etcupdate -p         # 合并更新 
# cd /usr/src         
# make installworld    # 安装世界 
# etcupdate -B         # 合并更新
# reboot               # 重启

故障排除:

  • Conflicts remain from previous update, aborting.

root@ykla:~ # etcupdate -B     
Conflicts remain from previous update, aborting.
# export  EDITOR=/usr/bin/ee # 切换 vi 为 ee,vi 不会用,限 FreeBSD 14 及以上。csh 使用: setenv EDITOR /usr/bin/ee
# export  VISUAL=/usr/bin/ee # 切换 vi 为 ee,vi 不会用,限 FreeBSD 14 及以上。csh 使用: setenv VISUAL /usr/bin/ee
# etcupdate resolve          # 解决冲突
Resolving conflict in '/etc/group':
Select: (p) postpone, (df) diff-full, (e) edit,
        (h) help for more options: e # 输入 e 解决冲突
# etcupdate -B 

ZFS 相关升级请参见第 6.2 节 ZFS

参考资料

最后更新于