- 作者:SOOBIN RHO
- 原文链接 https://freebsdfoundation.org/our-work/journal/browser-based-edition/configuration-management-2/mfsbsd-in-base/
mfsBSD 是一款基于 FreeBSD 的内存操作系统。
mfsBSD 的不同之处在于,它是完全运行于内存的 FreeBSD 实例——因此叫做 mfs(memory file system,内存文件系统)。所以,这意味着当我们在使用 mfsBSD 时,不会对现有的磁盘设备造成任何干扰。例如,我们可以将其用于本地服务器和云服务器的故障排除①。在邮件列表中搜索 mfsBSD,看看人们是如何解决各种问题的,实乃一大趣事。我个人最喜欢的应用场景是在仅有单个磁盘的设备中安装 FreeBSD,如果因某种原因无法使用 FreeBSD 安装介质,我就会:先制作 mfsBSD 镜像、将这个镜像安装到磁盘设备上、启动 mfsBSD、最后运行 bsdinstall。示例如下:
首先,构建 mfsBSD:
# 现在正在对将 mfsBSD 集成到基本系统中的补丁集进行审查,可在网址查看:
# https://reviews.freebsd.org/D41705
cd /usr/src/releasemake mfsbsd-se.img
# 此处 se 是指 mfsBSD 特别版本(special edition),它包含了
# dist 文件——即 base.txz 和 kernel.txz:bsdinstall 需要它们
cd /usr/obj/usr/src/${ARCH}/release/ls -lh
然后,将 mfsBSD 写入磁盘设备:
# 把 mfsBSD 安装到你的目标磁盘设备上
# 把 ada0 换成你自己的目标磁盘设备
dd if=./mfsbsd-se.img of=/dev/ada0 bs=1Mreboot
启动到 mfsBSD,然后执行 bsdinstall :
# 复制特别版本(special edition)的 dist 文件,以便 bsdinstall 用其进行安装。
mkdir /mnt/distmount /dev/ada0p3 /mnt/dist
mkdir /usr/freebsd-distcp /mnt/dist/<version>/*.txz /usr/freebsd-dist/bsdinstall
mfsBSD 能够把整个 FreeBSD 系统都加载到内存。加载完成后,就可以对原始磁盘进行修改任意了,因为现有的 mfsBSD 文件都运行在内存中。正如 Matuška 在其白皮书(2009 年)中所述,“mfsBSD 是个工具集,能创建基于 mfsroot 的短小精悍版 FreeBSD,它将所有文件都放在内存。”②
mfsBSD 的作者是 Martin Matuška([email protected]
)。回顾 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([email protected]
) 和 Juraj Lutter([email protected]
) 的回复,并进行了简短的 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
- ⑤. https://reviews.freebsd.org/D41705
SOOBIN RHO 是南达科他州奥古斯塔纳大学的大四学生。他出生于韩国,但在迪拜长大,最终选择在美国上大学。他现在是美国合众银行网络安全部门的兼职员工。在毕业后,他将成为一名信息安全分析师。自 2023 年谷歌编程之夏以降,他一直是 FreeBSD 的贡献者。