2

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

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

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


¹ 因此,针对内核开发的考虑并不是非常重要

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

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

4

2 回答 2

5

我是 src 提交者。

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

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

   make buildworld

然后部署到监狱目录:

   make DESTDIR=/usr/jails/test installworld

正如第一响应者所暗示的那样,这个 jail 目录可以与 bhyve 一起使用,但我发现配置一个 jail 甚至只使用 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"

我可以提供更深入的示例,例如,监狱有一个私有网络堆栈,因此您可以通过 SSH 进入其中,但我不认为网络堆栈对您发布的问题的测试很重要。

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

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

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

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

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

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

于 2019-11-11T23:25:58.583 回答
0

我是一个端口提交者,而不是一个 src 提交者,但是运行 CURRENT 的 AFAIK 是开发人员中的一种常见做法。

另一种工作方式是设置一个 CURRENT VM,通过 NFS 共享它,从主机挂载并通过运行make install DESTDIR=/mnt/current. 顺便说一句,您可以使用 BHyVe 进行虚拟化。

于 2019-11-10T07:33:13.523 回答