读者来信
作者:MICHAEL W LUCAS
亲爱的老头子:
你年事已高。我知道,因为我还学着不吃猫的时候,你的一本书就遭遇过一场可怕的事故,我爸很生气,因为那本书你签了名,也就是说你碰过它,他怕我会从书页里染上什么。我知道你不会介意,因为他不得不又买了一本,所以你倒没什么损失。
差不多从那时起,人们就在喋喋不休地谈论一种叫“打包基本系统”的东西。它本该能解决一切问题,但从未实现。到底是怎么回事?
——厌倦等待的聪明年轻人
亲爱的没用的废物:
就因为我现在的年纪正好是压迫性政权——比如盐湖城——高速公路上的限速,并不意味着我是个老头子。我的经验和敏锐的现实主义(常被误解为不可摧毁、密不透风的愤世嫉俗)才让我成为老头子。而打包基本系统只会助长这种愤世嫉俗。
升级任何 BSD 系统只有一种真正的办法。你拿到源代码——最好通过 SCCS 检出,紧急情况下软盘也行——把它装在 /usr/src 下。你构建软件。你能做到,因为真正的操作系统默认安装就带功能完整的编译器。你的手机不是计算机,是器具。你的门铃、起搏器、任何运行 Windows 的东西和大多数 Linux 安装也都是器具。(是的,经过足够的折腾,你能在起搏器上装个编译器,把它升级为计算机,但那需要特殊技能和惊人的鲁莽自弃。)你跑的是 BSD,所以你有一台计算机。构建好之后,你把它装在同一台系统上,重启,大功告成!你升级好了。是的,某些优化是允许的——你可以用 NFS 在服务器农场里共享源代码和你手工编译的二进制文件,或者更好的是,指派某个惹恼你的小弟去执行所有升级而不打扰你。只有这样,才能确保你安装的代码确实为你的系统而准备。
这是任何 BSD 系统的自然状态。偏离这一状态都是非自然的。
遗憾的是,某位出于善意但有缺陷的人——我不打算点名,但他的名字押韵于“Polin Cercival”——认为 FreeBSD 需要一种让对编译器有病态恐惧的人也能使用的升级系统。(不必说,不该让这种人靠近计算机、器具或三颗以上算珠的算盘。)这就是 freebsd-update(8) 的由来。它“方便地”下载尽可能小的二进制差异并应用到系统上,让你能毫不费力地升级数千台系统,甚至都不用加班。深夜独自在办公室,只有闪烁的应急灯照明,除了空调的嗡嗡声外一片寂静——这是当系统管理员的额外福利之一。它让你在其余时间里都有借口发脾气。如果连对那些低等的凡人发脾气都做不到,还当什么系统管理员?幸运的是,系统管理员还有开发者、网络管理员和整个销售部门作为借口。
这就是我们今天的处境。任何能溜、能晃、能胡想进 root 提示符的人都能升级 FreeBSD。
打包基本系统是 FreeBSD 的恶龙,吞噬每一个出发去征服它的开发者。
然而,社区里某些人觉得这种可悲状态还不够友好。他们看着那些不那么宏伟的操作系统,看到那些所谓的“基本系统”拆成了软件包。用户管理软件是软件包,网络软件也是软件包。系统的每一小块都成为独立软件包,有自己的文件、元数据、安装脚本,最糟糕的是——依赖。系统管理守则第 32 条非常正确:“依赖是一切苦难之源。” 我们都曾被困在管理某个由几十或几百个软件包组成的野蛮系统里,发现 traceroute 和 ifconfig 这类关键程序竟没装。你得四处搜寻,搞清楚这个特定操作系统把那些关键程序关在哪个软件包里,尝试安装,却发现软件包管理系统本身需要更新,软件包仓库版本变了,当前已装的软件包与新软件包不兼容,然后执法人员上门,讨论你老板一直坚称“有点反应过度”的事,而你心知肚明整场狂飙都是正当的,清洁工也能毫无困难地把地毯、天花板和车道上的污渍清理干净。
谁会想把这强加给数百万 FreeBSD 用户?倡导者说,把基本系统打包会让安装最小化的 FreeBSD 系统变得非常容易,只包含执行指定任务所需的程序。听起来不错,但就像“锻炼” “健康饮食”和“不去摸那只可爱的苏门答腊虎,尽管它就在那儿”一样。这不会发生。设计只包含所需内容的操作系统安装,需要无限的预测未来的能力,或者规划,两者都不太可能。你心知肚明,那台本打算只用作域名服务器的小系统,最终会跑着 CEO 侄子女友的闪光朋克乐队的 CRM 套件和视频编辑软件。这就是服务器的自然生命周期。
要获得一台稀疏得让人不舒服的 FreeBSD 系统,正确方法是从源码构建。FreeBSD 构建系统包含添加和排除组件的选项。Michael Dexter 在他的 Build Options Survey(https://callfortesting.org/results/)中组织并测试了所有这些选项。你甚至可以直接尝试 OccamBSD(https://github.com/michaeldexter/occambsd),这是旨在托管 Jail、bhyve 和 Xen 客户端的最小可行 FreeBSD 构建。OccamBSD 是不错的起点,因为重新启用功能比把它们拆出来要简单得多。
幸运的是,FreeBSD 自身强烈抗拒被打包。它本身就是一个有凝聚力的单一系统,不喜欢被拆散成独立组件。搞清楚系统哪些部分真正相互依赖、哪些只是私交甚笃,是个非常困难的问题,许多开发者多年来一直为之头疼。许多方法都尝试过并失败了。打包基本系统是 FreeBSD 的恶龙,吞噬每一个出发去征服它的开发者。然而,世界源源不断地供应乐观的开发者,我毫不怀疑某天他们中会有一人成功,进一步削弱运行 FreeBSD 所需的道德品质。
运气好的话,那时我已经死了。或者至少不再回你的信。
有问题想问 Michael?请发送至 letters@freebsdjournal.org
MICHAEL W LUCAS 的脑袋里塞满了过时的知识,大多是关于 FreeBSD、其他 BSD 和其他一些次要操作系统的。要学新东西,他得先把其中一些垃圾扔出去。他的最新著作包括《$ git sync murder》、《TLS Mastery》和《SNMP Mastery》。你读到这篇时《DNSSEC Mastery》本该已出版,但他懒,所以多半还没出。更多信息见 https://mwl.io。
最后更新于