Chapter 7. 一般應用程式

Kang-min Liu
7.1. 嗯..我要在哪找到我要的程式呢?
7.2. 我可以在哪邊找到 libc.so.3.0?
7.3. 為何我得到了這個訊息 ?``Error: can't find libc.so.4.0''?
7.4. ghostscript 在我的 386/486SX 上有點問題呢!
7.5. 為什麼當我執行 SCO/iBCS2 的程式時,它在 ``socksys'' 這個地方出了問題? (FreeBSD 3.0 以及更早的版本才有此問題。)
7.6. 我要如何在我的機器上設定 INN (Internet News)?
7.7. 我該使用那個版本的 Microsoft FrontPage?
7.8. FreeBSD 支援 Java 嗎?
7.9. 為什麼我無法在 3.X-STABLE 機器上順利編好這個 port?
7.10. 那裡可以找得到 ld.so?
7.11. 我更新了系統原始碼,現在我要怎樣升級某個已經安裝上 的 ports ?
7.12. 為什麼 /bin/sh這麼的小?為什麼 FreeBSD 不改用 bash 或者是其他比較強悍的 shell?
7.13. 為什麼 Netscape 和 Opera 要花好久的時間才能啟動?

7.1. 嗯..我要在哪找到我要的程式呢?

請看看 ports 目錄 吧。這邊有份已經 port 到 FreeBSD 的軟體列表。 目前有超過 6,600 個軟體已經被port 到 FreeBSD 上,並且每天 都在增加中。所以有空就多看看這份列表,不然你也可以訂閱 freebsd-announce 這份 mailing list,會有人將每個星期最新的軟體列表貼在 上面。

大部份的 ports 應該都可以在 2.2,3.0 跟 4.0 的系統上使 用,並且還有部份的 ports 可以在 2.1.x 的系統上運作。每次 當 FreeBSD release 時,都會有一份 ports tree 被放在這一個 release cd 裡面的 ports/ 目錄裡。

我們也支援一種叫 "package" 的概念,基本上 就是 gzip 壓縮、可用來發行的 binary 檔案,但是裡面藏了一 些相當有用的資訊,可以給各種自訂安裝來使用。使用者不必知 道某個 package 裡究竟有包括哪些檔案,就可`以很方便地重複將 它安裝/反安裝。

你可以執行 /stand/sysinstall 後, 在 post-configuration 選單下選擇 package 這個安裝選項;或 是對某個有興趣的 package 檔案執行 pkg_add(1) 把它裝起來。Package 檔案通常以 .tgz 作為延伸檔名,手上有 FreeBSD CDROM 的人可以在 packages/All 這個目錄下找到這類檔案。 對不同的 FreeBSD 版本,也可以從下列位址由網路上取得:

或是離你最近的 mirror 站。

要注意的是,因為新的 port 一直在增加中,所以並不是所有 port 都有相對應的 package。最好定時檢查ftp.FreeBSD.org ,看看有哪些 package 可以用。

7.2. 我可以在哪邊找到 libc.so.3.0?

你可能在一台 2.1.x 的機器上,跑著給 2.2/3.x/4.0 的軟體。 請再往上面一個章節看,正確的取得給你機器用的 port/package。

7.3. 為何我得到了這個訊息 ?``Error: can't find libc.so.4.0''?

你不小心抓了給 4.X 及 5.X 系統用的 package,並且嘗試著 去裝在你的 2.X 或 3.X 的系統上面。請下載正確版本的 package。

7.4. ghostscript 在我的 386/486SX 上有點問題呢!

你沒有浮點運算器,對吧?你必須在你的 kernel 中加入數學 運算模擬器,你可以跟著下面的步驟做,並在更改過你的 kernel 設定 檔後,重新編譯過一次。

    options GPL_MATH_EMULATE

Note: 當你加入上一行的同時,你必須將 MATH_EMULATE 移除掉。

7.5. 為什麼當我執行 SCO/iBCS2 的程式時,它在 ``socksys'' 這個地方出了問題? (FreeBSD 3.0 以及更早的版本才有此問題。)

你必須先修改 /etc/sysconfig (或是 /etc/rc.conf, 請讀 rc.conf(5)) 這檔案最後一個章節,將下面所講到的變數設成 YES

    # Set to YES if you want ibcs2 (SCO) emulation
    	    loaded at startup ibcs2=NO

這會在開機時將 ibcs2 這一個 kernel 模組載入。

你還要將你的 /compat/ibcs2/dev 改成下面這樣:

    lrwxr-xr-x  1 root  wheel         9 Oct 15 22:20 X0R@ -> /dev/null
    lrwxr-xr-x  1 root  wheel         7 Oct 15 22:20 nfsd@ -> socksys
    -rw-rw-r--  1 root  wheel         0 Oct 28 12:02 null
    lrwxr-xr-x  1 root  wheel         9 Oct 15 22:20 socksys@ -> /dev/null
    crw-rw-rw-  1 root  wheel   41,   1 Oct 15 22:14 spx

你只需要將 socksys 轉向到 /dev/null (請讀 null(4)) 去騙過 open & close 的動作。在 -current 裡面的 ibcs2 相關程式碼將會處理其餘的部份,這種作法比以前的方式 乾淨太多了。假如你想要使用 spx 方面的 程式,在你的核心設定檔裡面 加上SPX_HACK

7.6. 我要如何在我的機器上設定 INN (Internet News)?

在你使用 package 或者是 port 安裝完 inn 之後,Dave Barr's INN Page 是個非常好的開始,你可以在那邊找到INN 的 FAQ。

7.7. 我該使用那個版本的 Microsoft FrontPage?

Use the Port, Luke!在 ports tree 中已經有一個包含 FrontPage 的 Apache 版本了。

7.8. FreeBSD 支援 Java 嗎?

7.9. 為什麼我無法在 3.X-STABLE 機器上順利編好這個 port?

如果你的 FreeBSD 版本相較 -CURRENT 或 -STABLE 之下是很古 早的話,或許你會需要一個升級 ports 的工具,在 http://www.FreeBSD.org/ports/。如果你以將其更新卻仍無用, 那麼一定是某人更動之後造成 -CURRENT 才能用,-STABLE 無法用的情況。 由於 ports 內所收集的軟體在 -CURRENT 或是 -STABLE 上都要能用, 所以請儘速送出關於此問題的蟲報告;請使用 send-pr(1) 這個指 令來送蟲報告。

7.10. 那裡可以找得到 ld.so?

有些 a.out 格式的應用程式會需要 a.out 格式的函式庫, Netscape Navigator 就是一個例子。不過用 ELF 函式庫編起來 的 FreeBSD 預設並不會安裝舊的 a.out 函式庫,所以您可能會得 到類似找不到 /usr/libexec/ld.so 的抱怨訊 息。如果說您的系統有這安裝 a.out 函式庫的必要,這些函式庫 (compat22) 也能夠利用 sysinstall(8) 來安裝。或者利用 FreeBSD 原始碼來安裝:

    # cd /usr/src/lib/compat/compat22# make install clean

如果你希望每次 make world 時會自動更新 compat22 函式庫,那麼修改 /etc/make.conf, 加入 COMPAT22=YES。這些相容於古老版本的函式庫 已經沒什麼在更新了,所以一般說來是不需要這樣的。

同時也請您看一下 3.1-RELEASE 和 3.2-RELEASE 的勘誤表(ERRATA)。

7.11. 我更新了系統原始碼,現在我要怎樣升級某個已經安裝上 的 ports ?

FreeBSD 本身並沒有自動升級 ports 的工具,但有一些可以讓升級 簡化一些的小程式。你也可以自己裝上額外的工具來處理。

pkg_version(1) 指令可以自動產生用來達到自動升級到 ports tree 最新版本的 script。

    # pkg_version -c > /tmp/myscript

一定要在手動修改一下產生出來的 script。 目前的 pkg_version(1) 在 script 最前面加入 exit(1) 強 迫你去修改它。

你應將執行 script 所產生的輸出記錄下來,因為裡面會有記載某些 尚未升級但已經更新的 ports。不過你不一定要去升級它們。通常是因為 有某個共用的函式庫已經改變版本號了,才要去重編一次那些使用到該函 式庫的 ports。

如果你的硬碟空間很夠,那麼可以用 portupgrade 這個工具來做全自動處裡。portupgrade 裡面也有 一些小程式來簡化 package 升級,它在 sysutils/portupgrade。 這個工具是用 Ruby 這個語言寫的,所以並不適合加入到 FreeBSD 的原 始碼中,不過並不會因此讓某些人不用它。

如果你的系統一直都處於開機狀態,可利用 periodic(8) 系統, 每個星期產生一張需要升級的清單。只要在 /etc/periodic.conf 加入 weekly_status_pkg_enable="YES" 就可以了。

7.12. 為什麼 /bin/sh這麼的小?為什麼 FreeBSD 不改用 bash 或者是其他比較強悍的 shell?

因為 POSIX 說,該要有這麼樣的一個 shell 在才行。

比較繁瑣的答案:許多人需要寫可以跨很多平台的 shell script 。 這也是為何 POSIX 將 shell 以及工具命稱都定義的非常詳細的緣故。 大部份的 script 都適用於 Bourne shell,又因為有幾個重要的 寫程式所用到的程式或者函式 (make(1) , system(3), popen(3), 還有在 Perl 或者 Tcl 裡面呼叫系統程式的地方) 都指定用 Bourne shell 。那麼因為 Bourne Shell 如此的廣泛常用, 那麼它的執行效率便很重要,快速是它決定性的要點之一,還要不佔太多 記憶體。

目前的 /bin/sh 已是我們嘔心瀝血之作,它已 經盡量地符合標準規定。為了讓它非常小,我們拿掉了一些其他 shell 有的方便功能。這也是為什麼 ports 裡面還有很多強悍的 shell ,像是 bash, scsh, tcsh 以及 zsh 。 (你可以自己比較一下這些 shell 執行 時所佔的記憶體大小,去看看 ps -u 列出來的 "VSZ""RSS" 這兩個欄位就知道了。)

7.13. 為什麼 Netscape 和 Opera 要花好久的時間才能啟動?

通常是因為你的 DNS 沒有設定好。 Netscape 跟 Opera 在啟動的時候 都會去檢查一下 DNS。直到 DNS 有回應,或者是斷定網路目前是斷線之後, 它們才會顯示畫面出來。