24.5.追踪开发分支

FreeBSD 有两个开发分支。FreeBSD-CURRENT 和 FreeBSD-STABLE。

本节对每个分支及其目标受众进行了解释,并介绍了如何使系统与各分支保持同步。

24.5.1. 使用FreeBSD-CURRENT

FreeBSD-CURRENT 是 FreeBSD 发展的 "边缘", FreeBSD-CURRENT 的用户应该有很高的技术水平。希望追踪开发分支的技术水平较低的用户, 应该追踪 FreeBSD-STABLE。

FreeBSD-CURRENT 是 FreeBSD 的最新源代码, 它包括正在进行的工作、 实验性的修改, 以及在下一个正式版本中可能出现或不出现的过渡机制。尽管许多 FreeBSD 开发人员每天都在编译 FreeBSD-CURRENT 源代码, 但仍有一些短时期内源代码可能无法编译。这些问题会被尽快解决, 但 FreeBSD-CURRENT 是否带来灾难或新的功能,可能与源代码同步的时间有关。

FreeBSD-CURRENT 适用于三个主要的利益群体。

  1. 正在积极研究源代码树的某些部分的 FreeBSD 社区成员。

  2. FreeBSD 社区的成员是积极的测试者。他们愿意花时间解决问题,对FreeBSD的变化和总体方向提出专题建议,并提交补丁。

  3. 希望关注事物的用户,使用当前的源码作为参考,或偶尔发表评论或贡献代码。

FreeBSD-CURRENT 不应该被认为是在下一个版本之前获得新功能的快速通道, 因为预发布的功能还没有经过充分的测试, 而且很可能包含有错误。它不是一个快速获得错误修正的方法, 因为任何给定的提交都有可能引入新的错误并修正现有错误。FreeBSD-CURRENT 没有任何 "官方支持"。

为了追踪 FreeBSD-CURRENT。

  1. 加入 FreeBSD-CURRENT 邮件列表 以及 src 仓库主分支的 Commit 信息列表。这对于看到人们对系统现状的评论以及收到有关FreeBSD-CURRENT现状的重要公告是必不可少的。

src 仓库列表的主分支的提交信息记录了每个改动的提交日志条目,以及任何可能的副作用的相关信息。

要加入这些列表,请到 FreeBSD 列表服务器,点击要订阅的列表,并按照说明操作。为了跟踪整个源码树的变化, 而不仅仅是 FreeBSD-CURRENT 的变化,请订阅 src 仓库中所有分支的 Commit 信息。

  1. 与 FreeBSD-CURRENT 源同步。通常情况下, git 被用来从 FreeBSD Git 仓库的主分支检出 -CURRENT 代码 (详见 "使用 Git")。

  2. 由于版本库的大小, 一些用户选择只同步他们感兴趣的部分或他们正在贡献补丁的部分的源代码。然而, 计划从源代码编译操作系统的用户必须下载全部的 FreeBSD-CURRENT, 而不是只选择部分。

在编译FreeBSD-CURRENT之前,请仔细阅读 /usr/src/Makefile,并遵循从源代码更新FreeBSD中的说明。阅读 FreeBSD-CURRENT 邮件列表 和 /usr/src/UPDATING 来了解其他引导程序的最新情况, 这些程序在通往下一个版本的过程中有时是必须的。

活跃起来! 我们鼓励 FreeBSD-CURRENT 用户提交他们的改进或错误修正建议。伴随着代码的建议总是被欢迎的。

24.5.2. 使用 FreeBSD-STABLE

FreeBSD-STABLE 是开发分支, 主要的版本都是从它开始的。进入这个分支的修改速度较慢, 而且一般认为这些修改已经在 FreeBSD-CURRENT 中进行了测试。这仍然是一个开发分支, 而且在任何时候, FreeBSD-STABLE 的源代码都可能不适合用于一般的用途。它只是另一个工程开发轨道, 而不是最终用户的资源。没有资源进行测试的用户应该运行最新的 FreeBSD 版本。

那些对跟踪或贡献于 FreeBSD 开发过程感兴趣的人, 特别是与 FreeBSD 下一版本有关的人, 应该考虑关注 FreeBSD-STABLE。

尽管FreeBSD-STABLE分支应该在任何时候都能编译和运行, 但这并不能保证。由于运行 FreeBSD-STABLE 的人比运行 FreeBSD-CURRENT 的人多, 有时不可避免地会在 FreeBSD-STABLE 中发现一些在 FreeBSD-CURRENT 中不明显的 bug 和角落案例。由于这个原因, 人们不应盲目地跟踪 FreeBSD-STABLE。尤其重要的是, 在没有在开发或测试环境中彻底测试代码之前, 不要把任何生产服务器更新到 FreeBSD-STABLE。

要跟踪 FreeBSD-STABLE。

  1. 加入 FreeBSD-STABLE 邮件列表open in new window, 以便随时了解 FreeBSD-STABLE 中可能出现的联编依赖关系或其他需要特别注意的问题。开发人员在考虑进行一些有争议的修复或更新时,也会在这个邮件列表中发布公告,如果用户对提议的修改有任何问题要提出,可以给他们一个回应的机会。

加入被追踪的分支的相关git列表。例如,追踪 13-STABLE 分支的用户应该加入 src 仓库的稳定分支的提交信息。这个列表记录了每个改动的提交日志条目,以及任何可能产生的副作用的相关信息。

要加入这些列表,请到 FreeBSD 列表服务器,点击要订阅的列表,并按照说明操作。为了跟踪整个源代码树的变化,请订阅 src 仓库所有分支的 Commit 消息。

  1. 要安装一个新的 FreeBSD-STABLE 系统, 需要从 FreeBSD 镜像站点安装最新的 FreeBSD-STABLE 版本, 或者使用由 FreeBSD-STABLE 构建的每月快照。关于快照的更多信息,请参考 www.freebsd.org/snapshotsopen in new window

要将现有的 FreeBSD 系统编译或升级到 FreeBSD-STABLE,可以使用 git 来检查所需分支的源代码。分支名称,例如 stable/9,会在 www.freebsd.org/relengopen in new window 列出。

  1. 在编译或升级到 FreeBSD-STABLE 之前, 请仔细阅读 /usr/src/Makefile 并遵循从源代码更新 FreeBSD 中的说明。阅读 FreeBSD-STABLE 邮件列表 和 /usr/src/UPDATING 来了解在通往下一版本的道路上有时需要的其他引导程序的最新情况。

24.5.3. N数

当追踪bug时,知道哪些版本的源代码被用来创建出现问题的系统是很重要的。FreeBSD提供了编译在内核中的版本信息,例如 uname(1)open in new window可以检索到这些信息。

% uname -a
FreeBSD 14.0-CURRENT #112 main-n247514-031260d64c18: Tue Jun 22 20:43:19 MDT 2021     [email protected]:/usr/home/fred/obj/usr/home/fred/git/head/amd64.amd64/sys/FRED

看一下第四场,它是由几个部分组成的。

main-n247514-031260d64c18

main		①
n247514		②
031260d64c18	③
		④

Git 分支名称。注意:N个数字的比较只对发布的分支有效

① 项目(main, stable/XX 和 releng/XX)。本地分支会有n个编号,这些编号会与它们的父分支的提交相重合。

② n数是指从该行包含的Git散列开始,回溯到Git仓库开始的提交的线性计数。

③ 签出树的Git哈希值

有时,当内核是在一棵未提交的树上建立的时候,会出现后缀-dirty的情况。

④ 变化。在这个例子中,它是不存在的,因为FRED的内核是由一个原始的检出物构建的。

git rev-list 命令用于查找与 Git 哈希值对应的 n 个数字。比如说

% git rev-list --first-parent --count 031260d64c18 ①
247514 ②

① git的哈希值来翻译(上面例子中的哈希值是重复使用的)。

② 的N个数字。

通常情况下,这个数字并不那么重要。然而,当错误修复被提交时,这个数字可以让我们很容易地确定该修复是否存在于当前运行的系统中。开发者通常会提到提交的哈希值(或提供一个有该哈希值的URL),但不会提到n-number,因为哈希值是一个变化的易见标识,而 n-number 则不是。安全公告和勘误通知也会注明 n-number,可以直接与你的系统进行比较。当你需要使用浅层 Git 克隆时,你不能可靠地比较 n-number ,因为 git rev-list 命令会计算仓库中的所有修订,而浅层克隆会省略这些修订。