FreeBSD 5.X、6.X 常見問答集
Prev |  | Next

# Chapter 7 一般應用程式

Kang-min Liu

7.1. 嗯..我要在哪找到我要的程式呢?
7.2. 該怎麼設定 INN(Internet News) 來當 news server？
7.3. FreeBSD 有支援 Java™ 嗎？
7.4. 我可以在哪邊找到 libc.so.3.0?
7.5. 為何我得到了這個訊息 ?“`Error: can't find libc.so.4.0`”?
7.6. ghostscript 在我的 386/486SX 上有點問題呢！
7.7. 為什麼當我執行 SCO/iBCS2 的程式時，它在 “`socksys`” 這個地方出了問題？ (FreeBSD 3.0 以及更早的版本才有此問題。)
7.8. 我該使用那個版本的 Microsoft FrontPage？
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 的軟體列表。 目前有超過 20,000 個軟體已經被port 到 FreeBSD 上，並且每天 都在增加中。所以有空就多看看這份列表，不然你也可以訂閱 `freebsd-announce` 這份 mailing list，會有人將每個星期最新的軟體列表貼在上面。

大部份的 ports 應該都可以在 4.X、5.X 跟 6.X 的系統上使用。 每次當 FreeBSD release 新版時，都會有一份 ports tree 被放在這一個 release cd 裡面的 `ports/` 目錄裡。

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

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

給 4.X-RELEASE/4-STABLE 用的

  ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-4-stable/

給 5.X-RELEASE/5-STABLE 用的

  ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-5-stable

給 6.X-RELEASE/6-STABLE 用的

  ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-6-stable

給 7-CURRENT 用的

  ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-7-current

或是離你最近的 mirror 站。

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

7.2. 該怎麼設定 INN(Internet News) 來當 news server？

以 package 或 port 方式來裝好 `news/inn` 之後，Dave Barr's INN Page 是個非常好的 INN 入門處，你可以在那邊找到 INN 的 FAQ。

7.3. FreeBSD 有支援 Java™ 嗎？

有啊，請看 http://www.FreeBSD.org/java/

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

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

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

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

7.6. ghostscript 在我的 386/486SX 上有點問題呢！

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

    options GPL_MATH_EMULATE

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

7.7. 為什麼當我執行 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` 方面的 程式，在你的 kernel 設定檔裡面 加上`SPX_HACK`。

7.8. 我該使用那個版本的 Microsoft FrontPage？

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

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 有回應，或者是斷定網路目前是斷線之後， 它們才會顯示畫面出來。

Prev | Home | Next
商業軟體 |  | kernel 設定

本文及其他文件，可由此下載：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。