人們說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 進來。 沒有能夠登錄進入