Linux 的魅力: 让古老的机器重获新生

发表于:2007-05-25来源:作者:点击数: 标签:
这台老机器:所有用到的只是一台废弃的膝上型电脑、Linux 系统以及每月 50 美元的预算 级别: 初级 Peter Seebach 自由作家 2005 年 6 月 27 日 人们说 Linux 使得老机器变得有用。这是真的吗?在这个新系列中,Peter Seebach 使用了一台废弃的膝上型电脑,以
这台老机器:所有用到的只是一台废弃的膝上型电脑、Linux 系统以及每月 50 美元的预算

级别: 初级

Peter Seebach
自由作家
2005 年 6 月 27 日

人们说 Linux™ 使得老机器变得有用。这是真的吗?在这个新系列中,Peter Seebach 使用了一台废弃的膝上型电脑,以每月 50 美元的预算构建了一台能够真正做一些有意义的事情的家用电器。

编者注: 欢迎阅读新系列专栏 -- Linux 的魅力 的第一篇文章。developerWorks 专栏作家 Peter Seebach 将研究运行在不同种类硬件上的 Linux —— PDA、嵌入式设备,或者是没有人认为会有用的古老设备。本系列将依次研究具体的 Linux 设备,并向您详细展示如何在过时的硬件上安装设置 Linux。

当人们提及古老硬件上的 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,而安装了所有其他部分。这台机器不适于用作图形工作站,所以那样可以少占用很多空间。(方便的是,它还使得第二张安装光盘变得几乎无关紧要。我本来还能节约 0.50 美元!)

安装过程中的意外
使用安装器并不会完全不出问题。当我格式化完磁盘并开始进行安装时,得到的信息是 LILO 没有运行起来,我需要在重新引导之前去修复它。方便的是,当我处理挂载在 /mnt 的目标磁盘时,安装器为我提供了一个 shell 命令提示符。浏览 /etc/lilo.conf 时发现了问题所在:

清单 1. 啊哈!罪魁祸首

            boot = (IN
            [...]
            root = (IN
            

我不知道这描述的是什么。我把它修改为看起来可能能生效的值:

清单 2. 好用的旧式参数值

            boot = /dev/hda
            [...]
            root = /dev/hda1
            

重新运行 LILO 没有再出任何错误,所以我进行了重新引导。果真,机器完全正常地启动起来。

那就是安装出现问题的原因。(实际上,并非完全如此。我不得不重复分配挂载点的过程,因为第一次时我出现了打字错误,而我不能为此而抱怨 Slackware。)

浏览
既然系统已经安装,我就可以验证关于所得到的分区大小的猜测。

清单 3. 猜得不错

            $ df -m
            Filesystem           1M-blocks      Used Available Use% Mounted on
            /dev/hda1                  130        55        69  45% /
            /dev/hda5                  950        31       871   4% /var
            /dev/hda6                 1900      1434       369  80% /usr
            /dev/hda7                 2326        37      2170   2% /home
            

还不算太坏。如果我想安装很多另外的软件,/usr 中的空间可能会不够。当然没有足够的空间来安装所有资源。令人高兴的是, Web 页的根(/var/www/htdocs)拥有足够的空间,而且,如果我确实需要加载某些其他内容,我可以将一些文件移动到 /home 中并建立符号链接。

浏览 /usr 可以发现一些细节。在此,du -m 会有所帮助。不幸的是,除了单词 HUMAN(表示使用易读数字)以外,这个版本的 du 不能识别出 $BLOCKSIZE 中的其他值;另外,您可以将其设置为 1 M,然后令 dfdu 使用 1 MB 的块。对 du 的输出运行 sort -n,会得到 /usr 中以大小排序的顶级目录列表:

清单 4. Ah,以大小排序的目录

            86      ./lib/jre1.5.0_01
            92      ./src/linux-2.4.29/drivers
            112     ./bin
            146     ./doc
            173     ./share/texmf
            205     ./src
            205     ./src/linux-2.4.29
            384     ./lib
            428     ./share
            1402    .
            

简言之,所安装的最大的一些东西是 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 进来。

没有能够登录进入的帐号,不太好。我的登录名总是使用 seebs,于是我尝试了想到的第一件事情;useradd seebs。那个命令生效了,但是我并没有获得主目录。添加一个主目录很简单。现在是时候进一步设置这台机器了,拷贝一些我喜欢使用的程序、我常用的 .profile 等等。系统附带了 gcc 版本 3.3.4,这是较新的,支持很多 C99 特性。

重新引导
当然,在引导后通过控制台手工配置所有内容是有问题的。您不必每次都那样去做。相关的配置部分(比如 IP 地址)位于 /etc 中,具体地说, /etc/HOSTNAME 用于主机名,/etc/rc.d/rc.inet1.conf 用于网络地址。

在此,我决定分配一个固定的地址,而不是依赖 DHCP。毕竟,这台机器最终将是一个本地的服务器,不应该让它的地址总是在改变。您也可以运行 netconfig 来完成此任务,不过,运行 Slackware 的部分有趣之处在于,没有很多文件会标记出 “warning: machine-generated file, do not edit”。

结束语
好,到目前为止,这台机器还没有做太多事情,不过,它是一个已经安装的系统,可以通过 ssh 远程访问它,而且它是一个相当完整的 Linux 安装。开支包括用于空白 CD 的 3 美元和用于 USB 网络装置的 31.94 美元。(稍后,我或许会愿意考虑额外的电源预算、端口以及第二个串行端口。)那是预算可以接受的。

“这台老机器”的下一篇文章将是:建立一个家庭日历程序,以使得我们可以利用这台机器。虽然人们都使用若干兆的类库来调度会议,不过我喜欢使用的是几 KB 的 Perl 脚本,这个脚本可以告诉我什么时候轮到我洗碗。

原文转自:http://www.ltesting.net