作者:TOM JONES
译者:ykla
让 FreeBSD 1.0 在真实的硬件上运行,对我来说是一个探究计算机历史的机会,尤其是在我出生之前的时代。我最早使用计算机的记忆是 Windows 98——我相信在我生活中还有其他的计算机。我和朋友们玩《城堡沃尔芬斯坦》的那台机器可能是台旧电脑或者过剩的办公机器。直到我有了第一台真正属于我的电脑(2000 年代中期的 G4 iBook),我开始对计算机内部和操作系统进行探索。
我迫不及待地想去探讨本文的主题。我相信编辑部可能期望本文会介绍如何在众多 x86 模拟器中运行 FreeBSD 1.0,但我不会错过任何借题发挥的机会。
复古计算机正在成为一种越来越受欢迎的爱好。在英国,慈善商店(类似于 Goodwill)在很长时间内无法收受电子产品。这导致那些不愿意在寒冷的星期天早晨去车载市集上卖掉这些电脑的人选择把它们扔掉。
这一关键因素导致我们的计算机历史被丢弃和摧毁。过去十年里,我尽力挽救我遇到的那些计算机。这就是为什么我在等待空间的计算机历史中心有 50 台机器的库存,在我的办公桌上有一台 vt320,还有一台 DEC-PRO350 作为黑客空间的谈资。
收藏是一回事,但这些机器不想成为博物馆的陈列品,它们想要跑起来!
在过去十年里,复古计算机的爱好者群体不断壮大。有像 Action Retro、Lazy Game Reviews 和 This Does Not Compute 这样的频道,它们极力将老机器推向极限。这可以通过安装从那些机器仍然得到支持的加速器卡以及通过适配器、现代存储设备和外设来实现,让机器以原本的所有者都无法想象的速度运行。
在这个对经典计算机重新燃起兴趣的世界里,我们可以从热衷者社区中学到很多,并使用他们所创造的优秀工具和适配器。但我们也必须付出其普及带来的代价,随着多余的兴趣和需求,旧硬件的价格变得荒谬。
如果这是一个来自普通人(而不是一个试图重温 1993 年的疯狂人)的问题,我认为大部分使用 FreeBSD 一段时间的人会给出类似的建议:
• 研究你的硬件,找出哪些硬件是 FreeBSD 支持的, • 如果你要购买一台新机器,请确保它的硬件兼容 FreeBSD。
我想要购买一台满足三个条件的机器:符合那个年代的特征,支持 FreeBSD 1.0,并且最好还支持 386BSD。
为什么要选择符合那个年代的特征?无论我得到哪台机器,我希望它能有一个长寿命。它的首要任务是运行 FreeBSD 1.0,但我还希望能够对它进行摄影、带到会议上,并将其作为一个平台,来更多地了解在 FreeBSD UNIX 的基础时代中计算机的相关知识。“FreeBSD 1.0 可以运行在最新硬件上”是另一篇不同的文章,并非我想要涉及的内容。选择符合那个年代的特征似乎是最为顺利的途径。
支持 FreeBSD 1.0 这一点应该是显而易见的,但为什么还要支持 386BSD 呢?我希望这台机器能为我提供更多,不仅仅是用于一篇文章。我想向人们展示事物的来源,386BSD 作为一个项目具有很多神秘感。
从 30 年后的未来来看,真的很难理解 1993 年到底真实存在着怎样的机器。这是一种布景问题,许多时期的电视节目和电影都会面临。你不能从 1990 年代的杂志中看到典型的家居。相反,人们会在很长一段时间内逐渐积累他们的财产。一个来自 1990 年代的家居可能有一两件时尚的物品,但它不会像当年的宜家目录一样。
计算机在 1990 年代初发展迅速,这样我们就在一定程度上摆脱了这个问题——机器的寿命更短。我会努力寻找适合那个时代的硬件。
为了找到真正可以运行我们的操作系统的硬件,我们需要找到发布说明和安装说明。现在,要在没有实际机器的情况下确定 FreeBSD 是否能在某台机器上运行,可能会相当困难,但希望最初的文档能提供一些关键信息。原始团队在详细说明受支持的硬件方面做得很好。
我有一张收藏的 FreeBSD 1.0 CD,来自该项目和互联网档案馆获得。它包含了发布软盘、源代码以及针对 FreeBSD 的 ports 和软件包。在 CD 中还包括了各种安装方法的发布公告和安装说明。
FreeBSD 1.0 的发布公告为我们提供了一些关于运行的最低要求的信息。它为我们提供了有关支持的处理器、内存需求以及可能适用的其他硬件的想法。
拥有了大致支持的硬件概述后,下一步是找到一台机器。首先,我曾尝试向“某人”借一台 386 机器。经过几个星期的尝试,我在 IRC 频道中一无所获,似乎任何拥有工作中的 386 机器的人都非常珍惜这台机器,不愿意借给一个陌生人来撰写有关安装 FreeBSD 的文章。
接下来,我决定购买一台机器。然而,我在目前所在的岛上遇到了一个独特的问题,那就是我们没有旧电脑。好吧,这并不完全正确,我可以找到所有我想要的 Amiga 电脑,可能还有成批的 Research Machines 公司的早期 2000 年代的个人电脑,但实际的 386 机器就不同了。
从组件中组装一台机器似乎不是一个好主意。也许如果我对这个年代的机器有一些历史了解,但如今要找到兼容的组件来组装一台电脑是很困难的。我又该如何获取有关 30 年前由数百家不同厂商制造的组件的兼容性信息呢?
购买完整的机器似乎也不行。在英国的 eBay 上,我看到的少数几台都要卖到 1000 英镑以上,远超过我平时购买 386 机器的预算。
最后,在与一些朋友的电话交谈中抱怨了我这种独特的处境后,其中一个朋友开始在 eBay 上寻找,找到了一个捷克的卖家。我的这位朋友对这个计算机时代更为熟悉,能够确认这些机器符合我所需的特定年代,适合撰写这篇文章。
有些犹豫后,我选择了那台前面有大型 CPU 频率显示的机器——我总是忽略实用性,而偏向于美观性。(对我来说,它们在功能上是相同的)
卖家提供的该机器的规格如下:
对我来说,清楚地意识到在本文过程中我想让这台机器连接到互联网,所以我选择了唯一兼容的以太网接口——一个带有 BNC 和 AUI 连接的 Etherlink II 3c509。
尽管INSTALL
文件中显示 FreeBSD 可以在 4MB 的内存中运行,但这似乎很容易解决,所以我低价地购买了额外的 32MB 内存,以便给系统更多的空间。
收到这台机器后,我非常兴奋地测试硬件并开始安装 FreeBSD。这台机器预装了 MS-DOS 6.22,这是我完全不熟悉的操作系统。我通过下载 wolf3d 的共享软件并玩了几个关卡,确保硬件是正常运行的。
CD-ROM 光盘中提供了几种安装 FreeBSD 1.0 的选项,其中所有选项都需要先创建一组引导软盘,从中构建出一个最小系统,然后再进行完整安装。
最小安装需要 3 张软盘。为了避免重写一个单独的软盘,我从亚马逊购上买了一盒“新”的软盘(10 个软盘 10 英镑)。我还从当地的黑客空间借来了一些 USB 软盘驱动器,帮助我启动进入过去。
这三张软盘用于安装的分别是内核软盘、文件系统软盘和 cpio 软盘。内核软盘根据您的 SCSI 控制器有不同的版本。我没有 SCSI 控制器,所以任何一个版本都可以使用。
在现代操作系统上创建这些软盘非常麻烦。USB 软盘驱动器总是不愿正常工作,但当时机恰到好处时,我成功地在 FreeBSD-14 上使用了以下 dd 命令来创建所需的三张软盘:
安装过程要求你使用内核软盘启动计算机:
Error! Filename not specified
内核加载完成后,会提示你插入文件系统软盘并继续安装。
然后,你终于进入了安装程序。
当我到达这一步时,我非常兴奋,我已经获取了一块现代硬件,一块 SD IDE 适配器,这样我就可以保留 MS-DOS 6.22,以便继续验证硬件。
但是这个设备对我一点用都没有。失望而又不耐烦,我决定放弃它,彻底擦除了 MS-DOS 磁盘(谁要 DOS,我要安装 UNIX 系统!)。我设置 FreeBSD 占据了整个 200MB 的硬盘空间。
完成磁盘格式化后,安装一个最小的系统。然后再次从内核软盘启动计算机,这次会出现提示符 kc>
,您需要键入copy
来将内核复制到磁盘上。
接下来重新启动,并在提示时插入 cpio 软盘。它会根据最小安装的系统引导您完成接下来的操作。然后,您需要获取安装集,至少安装 bin.tar.gz.xx 等文件。
完整的安装介质分布在数十张软盘中,按顺序加载到系统上以完成安装。如果您足够幸运拥有磁带、串行接口、MS-DOS 分区或网络访问,您可以将它们全部作为单个归档文件导入。
由于我没有提前阅读说明并且不耐烦,我犯了个错误,使得整个过程对我来说变得更加困难。我的 DOS 分区被擦除了,而我没有网络。磁带根本不是一个可选项,我甚至从未见过支持的磁带。
也许我可以从 CD 驱动器中获取文件?我第一次按下驱动器的弹出按钮(奇怪的是,这并不是我基于射击游戏的压力测试的一部分),但是虽然马达在发出嗡嗡声,什么也没发生。CD 驱动器从未启动。
在安装选项列表中,有通过串口安装的选项。我可以通过串口安装。我将 USB 串口适配器连接到 PC 的串口,并开始尝试运行 Kermit,但是在安装软盘中根本找不到它。
安装说明中提到了一个名为“dos”的软盘,但即使经过多次检查,我也找不到它在 CD 光盘存档中的位置。最终,我在早期的系统中将 Kermit 放入软盘,并将其复制过来。经过几个小时的斗争,我设法找到了正确的现代 Kermit 命令,与 1993 年的 Kermit 进行通信,并开始传输文件。在 9600bps 的速率下,不断尝试调高速率,最终成功地实现了稳定的 56k 传输速率。
三天后(或者也许是一两个小时,如果我更勤快一点的话),我将基本映像 bin 文件复制到了我的主机上,然后可以完成安装。每个集合(二进制、源代码、X 图形界面)都通过一个来自预安装环境的提取脚本来进行安装。
安装了所需的集合后,您需要运行'configure'脚本来完成预安装环境的最后设置,从而得到一个完整的可工作的 FreeBSD 系统。
在这一步,我可以选择主机名和接口的 IP 地址。完成安装后,我启动了我的新 FreeBSD 系统,并立即在社交媒体及编辑团队上发送了一条胜利信息——“6 个月后,系统终于可用了!这意味着文章几乎完成了,对吧?”
我的第一次安装很有趣,但我安装在了非常老旧的机械硬盘上,这让我有些担心。我想进行一些现代化改进。对于像这样的复古计算机,其流行导致了许多设备来替代老旧且麻烦的部件。
紧凑型闪存卡(也是一种相当古老的技术)与 IDE 兼容,但优点是更容易购买,并且不太可能随机死机。
我设法获得了一个安装在 PCI 支架上的 CF 适配器,这样替换操作系统的磁盘变得非常容易。我购买的 CF 卡中,只有一个 250MB 的卡可以在我的系统上启动。我怀疑 BIOS 看到 1GB(更别说 16GB)硬盘时会发生错误。
我之前安装的系统有一些奇怪之处,我认为它们可能与上述断断续续的安装过程有关(第一次安装花了几个星期的不时之需才能完成)。
首先,当系统启动时,它总是打印一条消息说“Automatic reboot in progress(正在重启)”,即使它没有重启。虽然有一个 adduser 的 man 页面,但没有相应的命令来添加新用户。现在我有了新的介质,所以我想再试一次。
第二次安装时,软盘阶段是相同的,软盘持续了三个月而没有随机死机。
期间,我买了一个 Farallon Ether10-T Starlet 9 base10-T 以太网集线器。使用正确的终端和 50 OHM 的 BNC 电缆,这个设备使我购买的 3c509 网络卡可以将我的 386 机器连接到互联网(进入未来!)。
我的第二次安装进行得非常顺利。我先进行了基本安装以得到最小系统。一旦从中启动,我就可以使用网络来获取镜像文件。我考虑使用 ftp 将它们移动到 386 机器上,但是在安装文档中看到了 NFS 选项,于是我尝试了一下。FreeBSD 1.0 可以轻松地在 FreeBSD 14 上挂载 NFS 共享:D
CD-ROM 光盘存档中附带了大量的第三方软件,可供 FreeBSD 使用。其中包括 ports ,已经修改以在 FreeBSD 上工作的软件,以及预编译的 port 包和其他一些附加软件。
我使用 ports 构建了 top,这样我可以让 386 处于一些有趣的闲置状态。
我还从预打包软件中获取了 vim 和 zsh,以使在这台机器上的使用更加方便舒适。
接下来,我想尝试从 386 上提供 Web 内容。我获取了 ncsa-httpd(所有可用版本都在 git 仓库中)和 cern-httpd。在过去的 30 年里,基于源代码的软件分发方式发生了很大的变化。我们现在有多么好的条件,以前根本想象不到。
ncsa-httpd 附带了一个用于构建的 Makefile,比 cern-httpd 脚本友好得多,所以我从 ncsa-httpd 开始尝试。ncsa-httpd 在其目标列表中没有包含 FreeBSD,但它有 NetBSD,所以我尝试了那个。可悲的是,与那个时代相符的 NetBSD 与 FreeBSD 有些不同,所以不能直接使用。最终,我修改了 Makefile,添加了对在 C 文件中存在但在构建脚本中不存在的 FreeBSD 构建支持。
构建了 ncsa-httpd 后,我通过运行生成的二进制文件,并创建所需的目录,并移动缺失的文件,直到能够启动。要求 make 的安装目标似乎有点过于苛刻了。
我创建了一个 index.html 文件,并开始提供一些页面。但由于还不想将我的 386 连接到互联网,我决定通过运行 wrk Web 服务器基准测试来看看我的 386 作为 Web 服务器实际能做多少工作。
如果你想知道,一台 40 MHz 的 386DX,配备 36MB 的 RAM,可以在没有任何调整的情况下,每秒提供约 22 个请求。
我成功地从 CD 上的 ports 中安装了 X。但我尚未成功使 X 显示任何内容,而每次尝试都要重新启动才能重新访问系统控制台。尝试运行 X 时发现我缺少虚拟控制台。在文档中搜索没有发现太多有用的信息。
我偶然发现了 syscons 命令(与我们今天拥有的驱动程序不同,这是一个命令)。当我试图使用 syscons 来更改虚拟终端时,只得到了一条有用的消息,提示我需要重新编译启用了 syscons 的内核。
在/usr/src
目录下有一个熟悉的 Makefile,但是构建系统的内核部分没有在那里有详细的文档。我偶然发现了 config 的 man 手册,其中提供了足够的提示,让我能够构建一个新的内核。
构建一个新内核的大致步骤如下:
进入 conf 子目录(通常是/sys/ARCH/conf
,对于我们来说是/sys/i386/conf
)。
使用系统配置文件运行 config 命令(我将 SYSCONS 配置复制为 NINETYTHREE)。
进入../../compile/SYSTEM_NAME
目录(在这种情况下是 NINETYTHREE)。
运行make depend
。
运行make all
。
将 386bsd 内核二进制文件复制到根目录/
。
重新启动。
内核构建耗时 33 分钟(其中 make depend 花费 5 分钟,make all 花费 28 分钟)。
我在尝试让系统的不同部分运行时总是迷失方向。我的下一步是弄清楚如何在额外的虚拟控制台上运行,并一旦找到串行鼠标,就运行 X。这个项目不像一个简单的安装故事,而是成为了对我来说绝对有趣的一堆乐趣。虽然在这篇文章中我并不需要一个 Web 服务器,但一旦我有了这个想法,我就忍不住想要搭建一个运行起来。
我收集了那个时期的爱好者杂志,了解了 1990 年代初计算机领域的一些有趣情况。我获取了有关 386BSD 的 Dr.Dobbs 文章,用来辅助展示一些图片。当然,我不得不在 ebay 上找到一些高价购买的零部件,但那也有它的吸引力,当你终于找到你正在寻找的一些不常见的东西时,会产生一种高兴的感觉。
FreeBSD 1.0 就像看着你现在已经成年的小弟弟,却在他身上看到一个小孩的样子。世界的所有美妙和魔力都回来了。我遇到的错误感觉完全可以修复。我确信它是一个粗糙的系统,但边缘都在呼吁平滑。我完全理解早期的贡献者为什么会参与其中,很难抵挡寻找一些可以动手的东西。
虽然如此,我不认为你或任何人都应该轻易参与这样的项目。30 年后,硬件很难找到,而且不会变得更容易。硬件的价格将上涨,组件的可靠性将下降。
有选择的方式可以体验这个平台的乐趣,而无需经历硬盘和软盘死机的痛苦,找到 BNC 电缆的终端,或者教授软件 FreeBSD 是一个操作系统。有很多选择来模拟这些硬件,并且许多发布信息可以在源代码 tarballs 中找到来构建应用程序。
我认为你的 386 FreeBSD 应该是虚拟的,但是如果你想要这个 386 FreeBSD,你将不得不与我争夺。
如果你不想费力去 eBay 上寻找旧的、昂贵的、嘈杂的和不可靠的硬件,但又想尝试 FreeBSD 1.0,我可以理解。我猜你可能不想重复我的步骤,但要注意,通过变通使用 QEMU,你会错过一定的乐趣。
我已经创建了 CF 卡安装的备份,并将其放在了这里:https://people.freebsd.org/~thj/freebsd-ninetythree.img.xz
下载这个镜像文件,解压缩它。通过一个标准的 QEMU 安装(我在 FreeBSD 14-CURRENT 上使用了 QEMU 7.0),你可以使用以下命令启动这个镜像:
从系统日志中,你会发现这台机器找不到任何有趣的硬件。留给读者的练习是弄清楚网络设置(如果 ISA 仿真太复杂,你可以尝试使用 SLIP)。
在我的系统中,唯一能工作的 CF 卡容量还是有点小,只有 250MB,但你可以在其中找到足够的系统来尝试。如果你想在更大(或更小)的硬盘上尝试,你可以弄清楚所有启动 QEMU 所需的设置。
安装完成后,我重新检查了 adduser
命令,但它仍然不可用。再次阅读 man 手册,我发现原来 man 手册本身就是手动向系统添加新用户的过程!没有自动化程序可用,毕竟这是 1993 年。
Tom Jones 是 Klara Inc 的 FreeBSD 工程经理,在业余时间,他只能玩一些有趣的老式计算机。