人们说Linux使得老机器变得有用。这是真的吗?在这个新系列中,Peter Seebach 使用了一台废弃的膝上型电脑,以每月 50 美元的预算构建了一台能够真正做一些有意义的事情的家用电器。
当人们提及古老硬件上的Linux时,他们通常指的是已经使用了一两年的硬件,那些材料仍然非常实用。所讨论的硬件有良好的状态,得到了合理的维护,而且具有相当好的规格 ―― 或许它甚至是一台古老的服务器。不过,对本文而言,我们将着眼于配置稍低的机器。
第一号挑战
进入舞台左侧,是一台古老的网关箱(我绝对没有对网关不敬的意思)。在 1997 年 10 月,我花了将近 3000 美元购买一台当时顶级配置的膝上型电脑。它拥有 Pentium 133 处理器,32 MB 高速 SDRAM,以及 800x600 TFT LCD 显示器,还拥有 1.15 MB 的显存 ―― 对于在显示 800x600 分辨率 16-位色来说刚好足够。
我还记得这台机器快得令人生畏,因为我原来使用的是 33 Mhz 的 68030 机器。不过,那是八年前的事情了。几年前,有一杯酒泼到了它上面。八十年代的低成本艺术电影迷们都会了解这种情况:它不会再恢复知觉了,所有它所需要的就是进行修理。
不幸的是,CardBus 插槽永远不能再恢复原状,而且经常报错。几年前它又遭遇了一位 El-Al 的行李员,导致它的屏幕破碎,不能再使用。它惟一的优势只是拥有额外的 64 MB 内存,那是在被酒浇到之前的那一年安装上的。
依照当前的标准,这个机器就是个玩具。您可以从Technologic等公司购买嵌入式系统,这些系统有更好的基本规格以及内置Ethernet等另外的特性。婉转地说,它甚至不再具备完整的功能。
所以,这里的挑战是证明那台机器仍然可以有一定用武之地。在本文中,我将把它构建为一种实用的家用电器。
好!挑战是需要规则的,而规则很简单 ―― 我为每个项目付出的开销不超过 50 美元。由于要达到机器初始的价值得需要 60 个项目才够,我将考虑使用“免费”硬件(至少使用了四年而且已经废弃不用的硬件)。否则就得必须考虑开销。对了,下载是免费的。
安装硬件
显然要考虑的是,机器所附带的 2 GB 的磁盘可能有点小。幸运的是,我有一个闲置的 6 GB 的磁盘,它最初是 2000 年的 PowerBook G3 中的 ―― 那是四年多前的了,所以它符合规则。安装那个设备一点都不困难,尽管我第一次时做错了;那个驱动器必须将跳线设置为从盘(对此做法我没有任何概念)。
解决了那个问题后,我就拥有了一台磁盘为 6 GB 的机器,那个磁盘的最后一次格式化大约是在 2001 年左右,在 Mac 上进行的,因而显然不能引导。
我有一台 2001 年购买的 LCD 显示器。它有点太新了,不应使用(根据规则),不过在安装期间我可以“借用”它。在安装的过程中显示器是有用的,但系统建立并运行后我就计划不再使用它了。
机器有一个 BIOS 设置,用于决定使用外部显示器、内部显示器或者两者皆用。令我感到好笑的是,外部显示器的设置称为“CRT”,就算是它并不是一个 CRT。
连接上显示器和新的磁盘驱动器后,机器就可以引导了。在启动时出现了一个问题 ―― 驱动器的声音很大,所以它可能会出故障。不过别忘了,它是免费的。而且它可能还可以运转几个月。
我们现在所需要的是一个操作系统。
下载 Linux 记住,免费的下载可以认为是不需要花费的。我原来计划在此项目中使用我的 SUSE Linux 安装光盘,不过我遇到了两个问题。第一个问题是系统需要要有 128 MB 内存。第二个问题是我只有 DVD,而买一个新的光驱需要花费。
我决定采用廉价的方式:下载。进行了一些咨询后,我得到的建议是使用一个名为 Slackware 的小的、轻量级的发行版本(distro)。
Slackware 的 Web presence 建议人们使用 16 MB 或者更少的内存。对我来说,这太好了。我下载了 BitTorrent(一款支持“协作发行(cooperative distribution)” 的工具,能为更热门的下载减少带宽开销)并开始下载 Slackware 10.0 的发行版本 CD。
第二天早上,我烧制了一些 CD。(实际上是其中的四张。我不久前获得它们时,空白的 CD 是需要去花钱的,所以我说它们每张花费了 0.50 美元。)然后我发现,Slackware 10.1 刚刚发布。
我下载了 10.1 CD。一个重要的提示:当您完成下载时,不要马上闭关BitTorrent。协作网络的要点就在于要为社区贡献回一些东西。最起码出于礼貌您也应该让它继续运行,直到上传的数据数量至少与您下载的数量相当。
运行安装
当新 Slackware 的第一张光盘开始可用时,我立即制造了一个副本,并开始安装。这次我只烧制了两张 CD,不包括源代码 CD。改天再另外预算。
安装器引导起来,在 /dev/hdb 找到一个磁盘驱动器。此时我发现我的驱动器是设置为从盘的。使用螺丝起子和小钳子忙碌了几分钟后,我的工作开始步入正轨。
Slackware 安装器是非常轻量级的。它不是一个图形化的安装器;它不使用帧缓存驱动器或者 X 或者其他任何东西。它在运行安装器之前告诉您要对硬盘进行分区,然后给出一个登录提示。
没有关于选择分区大小的太多提示;这有些不太方便。作为一个 BSD 老用户,我喜欢将 root 文件系统和 /usr 分开。我还会为 /var 和 /home 建立单独的分区,并划分出一块交换分区。
我猜测的数字被证明是合理的;root 大约 128 MB(有足够的额外空间用于测试内核),交换分区 256 MB, /var 最多 1 GB,/usr 2 GB,剩下的空间分配给 /home。
Slackware 将文件非常简单地按顶级进行了划分。我取消了所有基于 X 的部分,包括 GNOME 和 KDE,而安装了所有其他部分。这台机器不适于用作图形工作站,所以那样可以少占用很多空间。
安装过程中的意外
使用安装器并不会完全不出问题。当我格式化完磁盘并开始进行安装时,得到的信息是 LILO 没有运行起来,我需要在重新引导之前去修复它。方便的是,当我处理挂载在 /mnt 的目标磁盘时,安装器为我提供了一个 shell 命令提示符。浏览 /etc/lilo.conf 时发现了问题所在:
清单 1. 啊哈!罪魁祸首
boot = (IN
[...]
root = (IN
我不知道这描述的是什么。我把它修改为看起来可能能生效的值:
清单 2. 好用的旧式参数值
boot = /dev/hda
[...]
root = /dev/hda1
重新运行 LILO 没有再出任何错误,所以我进行了重新引导。果真,机器完全正常地启动起来。
那就是安装出现问题的原因。
浏览
既然系统已经安装,我就可以验证关于所得到的分区大小的猜测。
清单 3. 猜得不错
还不算太坏。如果我想安装很多另外的软件,/usr 中的空间可能会不够。当然没有足够的空间来安装所有资源。令人高兴的是, Web 页的根(/var/www/htdocs)拥有足够的空间,而且,如果我确实需要加载某些其他内容,我可以将一些文件移动到 /home 中并建立符号链接。
浏览 /usr 可以发现一些细节。在此,du -m 会有所帮助。不幸的是,除了单词 HUMAN(表示使用易读数字)以外,这个版本的 du 不能识别出 $BLOCKSIZE 中的其他值;另外,您可以将其设置为 1 M,然后令 df 和 du 使用 1 MB 的块。对 du 的输出运行 sort -n,会得到 /usr 中以大小排序的顶级目录列表:
清单 4. Ah,以大小排序的目录
简言之,所安装的最大的一些东西是TeX软件和支持文件、内核源代码以及Java运行时环境。在内存这样少的机器上,Java 可能是没有什么意义的,所以,如果我的空间不够了,首选删除它。内核源代码可能会浪费了很多空间,并且 TeX 可能也是我能够删除的东西。所以,如果我需要几百兆空间,我能够得到。我高兴地了解到,在拥有足够空间的同时,所有我所希望的东西都已经安装了。
现在做什么?
第一件事情是获得一个以太网端口。不幸的是,我的具有以太网端口的老化的 USB 集线在连接时发生了莫名其妙的错误,所以我决定使用价格低廉的 Targus USB“dock”(一两周前得到的)进行测试。
它为我提供了 PS/2 键盘和鼠标端口(对我来说没有用)、另一个串行端口、另一个并行端口、另外两个 USB 端口……以及一个 10 Mbps 的以太网端口。
您可能会认为 10/100 会更好(那或许是这个小装置的销售价格从一两年前的 70 美元降到 29.99 美元的原因),但是在 USB 1.1 机器上,100 Mbps支持没有什么意义。
我的集线器自动检测端口,不用我去管。我没有用到的 2 Mbps 的 USB 带宽以后可以用于运行那个小装置。
自动检测到了那个设备。很奇怪,dhclient 不能作用于那个接口。它说它找不到广播接口。手工配置接口并手工编写 resolv.conf 很好地解决了这个问题。
我稍微有些惊讶:我所习惯的语法,即 route add default gateway,引发了一个非常莫名其妙的错误消息 SIOCADDRT: No such device。我迅速查阅了一下手册,纠正了我的拼写 ―― route add default gw gateway。
完成后,机器现在可以正常地在网络上工作。在局域网中它是可访问的,并且可以使用我的宽带连接访问外面的世界。我也能够 ssh 进来。
没有能够登录进入