作者:SOOBIN RHO
mfsBSD 是一款基于 FreeBSD 的内存操作系统。
mfsBSD 的不同之处在于,它是完全运行于内存的 FreeBSD 实例——因此叫做 mfs(memory file system,内存文件系统)。所以,这意味着当我们在使用 mfsBSD 时,不会对现有的磁盘设备造成任何干扰。例如,我们可以将其用于本地服务器和云服务器的故障排除①。在邮件列表中搜索 mfsBSD,看看人们是如何解决各种问题的,实乃一大趣事。我个人最喜欢的应用场景是在仅有单个磁盘的设备中安装 FreeBSD,如果因某种原因无法使用 FreeBSD 安装介质,我就会:先制作 mfsBSD 镜像、将这个镜像安装到磁盘设备上、启动 mfsBSD、最后运行 bsdinstall。示例如下:
首先,构建 mfsBSD:
然后,将 mfsBSD 写入磁盘设备:
启动到 mfsBSD,然后执行 bsdinstall :
mfsBSD 能够把整个 FreeBSD 系统都加载到内存。加载完成后,就可以对原始磁盘进行修改任意了,因为现有的 mfsBSD 文件都运行在内存中。正如 Matuška 在其白皮书(2009 年)中所述,“mfsBSD 是个工具集,能创建基于 mfsroot 的短小精悍版 FreeBSD,它将所有文件都放在内存。”②
mfsBSD 的作者是 Martin Matuška(mm@FreeBSD.org
)。回顾 mfsBSD 存储库的提交日志,他首次提交于 2007 年 11 月 11 日,大约是在 FreeBSD 7.0 BETA 的发布同期。“这个项目[mfsBSD]基于 Depenguinator 项目的想法”,Depenguinator 是 Colin Percival 在 2003 年创建的项目,旨在为仅提供 Linux 发行版的专用服务器远程安装 FreeBSD③。Matuška 想开发 FreeBSD 6.x Depenguinator 的功能实现,这就是 mfsBSD 的起源。
自此以降,Matuška 维护着 https://mfsbsd.vx.sk/ ,用于分发 mfsBSD 的镜像。他已经在 GitHub④ 上维护了十七年的 mfsBSD,一路修复了无数 bug,并添加了对 zfsinstall、/usr
tar 压缩包的支持等。在此期间,mfsBSD 知名度不断增长,
2023 年 5 月(即此篇文章写作的前一年),这个谷歌编程之夏(Google Summer of Code,GSoC)项目开始了把 mfsBSD 集成到基本系统中的尝试。
这一切是如何开始的呢?当时,我正在阅读黑客新闻(可能我正在拖延大学作业)。这是我第一次知道谷歌编程之夏(GSoC)。那里的某条热门评论说 FreeBSD 项目也参与了。有趣的是,评论中只字未提其他事情,好像其他事情都是不言自明的。
我立刻被吸引住了。关于 FreeBSD 最令我惊讶的是:macOS 衍生于 FreeBSD,而且 Netflix 也在其 CDN 中使用了 FreeBSD。谷歌编程之夏的申请流程包括提交项目提案。原则上要求申请者从各组织的项目创意列表中寻找项目主题(除非你有自己的打算)。我看了看列表,对我来说,mfsBSD 项目最有趣,因为其他项目创意似乎比我能接受的内核开发更遥远。
在给我的导师们发了封电子邮件后,我收到了 Joseph Mingrone(jrm@FreeBSD.org
) 和 Juraj Lutter(otis@FreeBSD.org
) 的回复,并进行了简短的 Zoom 通话。几周后,我收到了谷歌编程之夏的录取通知。然后,我们进入到了所谓的社区粘合期(community bonding period)。在这期间,所有的贡献者和导师们相聚集于虚拟会议,总共开了半个小时,所有人都进行了自我介绍。那天是 2023 年 5 月 12 日(星期五)。
三个月又二十二天,将 mfsBSD 集成到基本系统中的项目终于完成了,历经许多的反复调试(很多 Bug 是通过谷歌搜索和翻阅所有过去的 GitHub 问题来解决的),测试(使用我的两台笔记本电脑 Thinkpad T440 和 P17 来运行 shell 脚本),并且我向导师提出了许多问题。一整套的三个补丁提交到了 Phabricator⑤。
简单地说,第一个提交“mfsBSD: Vendor import mfsBSD(mfsBSD: 引入 mfsBSD)”将 mfsBSD 集成为 contrib/mfsbsd
。主要提交“release: Integrate mfsBSD image build targets into the release tool set(发行: 将 mfsBSD 镜像构建目标集成到发行工具集)”:在 release/Makefile
中添加了目标 mfsbsd-se.img
和 mfsbsd-se.iso
(作为 release/Makefile.mfsbsd
)。最后一次提交“release(7): Add entries for the new mfsBSD build targets(release(7): 为新的 mfsBSD 构建目标添加条目)”在 share/man/man7/release.7
上添加了相应的条目。这意味着,现在我们可以在构建所有 FreeBSD 安装介质(如 cdrom、dvdrom、memstick 和 mini-memstick)的同时,在相同的发行版 Makefile 中使用 make release WITH_MFSBSD=1
构建 mfsBSD 。
现在,正在对补丁集进行审查。mfsBSD 之前位于 FreeBSD 发布工具链以外,仅生成 release 版本。我的设想是将这个补丁集作为基本系统的一部分,来提供 mfsBSD 镜像,并通过调用 cd /usr/src/release && make release WITH_MFSBSD=1
来构建定制 mfsBSD 镜像,然后在 /usr/obj/usr/src/${ARCH}/release/
创建 mfsbsd-se.img
和 mfsbsd-se.iso
。
①. Matuška, Martin. (2022). FreeBSD 在 Hetzner 专用服务器上——VX Weblog。[在线] 参考: https://blog.vx.sk/archives/353
②. Matuška, Martin(2009)。 mfsBSD 工具集,用于创建基于内存文件系统的 FreeBSD 发行版。[在线] 可在以下网址找到:https://people.freebsd.org/~mm/mfsbsd/mfsbsd.pdf
③. Colin Percival(2003)。Depenguinator — FreeBSD 远程安装。[在线] 可在以下网址找到:http://www.daemonology.net/depenguinator/
④. Matuška, Martin(2024)。mmatuska/mfsbsd。[在线] GitHub。 可在以下网址找到:https://github.com/mmatuska/mfsbsd
SOOBIN RHO 是南达科他州奥古斯塔纳大学的大四学生。他出生于韩国,但在迪拜长大,最终选择在美国上大学。他现在是美国合众银行网络安全部门的兼职员工。在毕业后,他将成为一名信息安全分析师。自 2023 年谷歌编程之夏以降,他一直是 FreeBSD 的贡献者。