我是 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 来自以下版本,监狱就会工作:
- 早于客户操作系统,或
- 在与来宾操作系统相同的 STABLE 分支中,或
- 至少与来宾操作系统二进制兼容
情况 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 指向磁盘映像——其他人和/或谷歌会知道答案。