在 FreeBSD 代码库上工作的推荐工作流程和环境是什么?

fuz*_*fuz 2 workflow development-environment freebsd tooling

我想开发 FreeBSD 发行版的新功能或更改和现有程序,特别是用户空间¹。为此,我需要对 FreeBSD 代码库进行更改,然后编译和测试它们。²

在树上这样做/usr/src并在系统上安装结果似乎是一个坏主意,因为它需要您在 CURRENT 上运行您的开发机器,以 root 权限进行开发,并且如果您犯了错误,则软管您的系统。我想一定有更好的方法,并且可能是 FreeBSD 开发人员使用的标准设置。³

开发 FreeBSD 代码库的推荐工作流程是什么?


¹ 所以特定于内核开发的注意事项并不是非常重要

² 我熟悉开发后提交更改的流程

³ 我之前已经阅读了关于构建源代码开发手册和 FreeBSD 手册章节,但似乎都没有推荐特定的过程。

小智 5

我是 src 提交者。

我经常从我打算移植到的最低版本开始(例如,RELENG_11_3。

然后我会做(在进行更改之前或之后):

   make buildworld
Run Code Online (Sandbox Code Playgroud)

然后部署到监狱目录:

   make DESTDIR=/usr/jails/test installworld
Run Code Online (Sandbox Code Playgroud)

这个监狱目录,正如第一响应者所暗示的,可以与 bhyve 一起使用,但我发现配置监狱更容易,甚至只使用 chroot。

我喜欢在 /etc/rc.conf 而不是 /etc/jail.conf 中配置我的监狱:

示例 /etc/rc.conf 内容:

   jail_enable="YES"
   jail_list="test"

   jail_test_rootdir="/usr/jails/test"
   jail_test_hostname="test"
   jail_test_devfs_enable="YES"
Run Code Online (Sandbox Code Playgroud)

我可以提供更深入的示例,例如,jail 有一个私有网络堆栈,因此您可以通过 SSH 进入其中,但是我从发布的问题中没有感觉到网络堆栈对您的测试很重要。

你可以用“jls”看到正在运行的监狱,你可以用“jexec test bash”进入正在运行的监狱

在监狱内,您可以测试您的更改。

在进行这种沙盒操作时,只要您构建/安装到监狱的 /usr/src 来自以下版本,监狱就可以工作:

  1. 比来宾操作系统更旧,或
  2. 在与来宾操作系统相同的 STABLE 分支中,或
  3. 至少与来宾操作系统二进制兼容

情况 1 和 2 非常安全,而情况 3(例如,运行比来宾 OS 更新的 /usr/src)可能会变得不可靠。例如,尝试在 12.0-RELEASE-pX 来宾操作系统上运行 /usr/src head (13.0-CURRENT),其中 KBI、KPI 和 API 在内核和用户空间之间都可能不同(使用 jails,每个 jail 在来宾操作系统下运行)操作系统的内核)。

如果您发现必须针对较旧的来宾操作系统运行最新源代码,那么 bhyve 绝对是解决方案。您将获取该 jail 目录,而不是使用该根目录运行 jail,而是运行以 jail 目录为根目录的 bhyve 实例。我不经常使用 bhyve,所以我不记得你是否首先必须将内容存放在磁盘映像中,然后首先将 bhyve 指向磁盘映像——其他人和/或谷歌会知道答案。