4.4. 使用 Packages 管理機制

Contributed by Chern Lee.

4.4.1. Package 的安裝方式

可以用 pkg_add(1) 從本機上或者透過網路來安裝任一 FreeBSD package。

範例 4-1. 手動下載、安裝 Package

# ftp -a ftp2.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230-     This machine is in Vienna, VA, USA, hosted by Verio.
230-         Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.56.4.tgz
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375       00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
ftp> exit
# pkg_add lsof-4.56.4.tgz

若手邊沒有 package 來源(像是 FreeBSD 光碟)的話, 那麼建議使用 pkg_add(1) 時,加上 -r 選項來更輕鬆安裝 package。如此一來,就會自動判斷正確的 package 格式、 以及所搭配的作業系統 release 版本, 然後會自己從 FTP 站抓回、安裝相對應的 package。

# pkg_add -r lsof

上面這例子會自動下載正確的 package 並安裝。 若想改換用其他 FreeBSD Packages Mirror 站,那麼就要設定 PACKAGESITE 環境變數, 如此一來才會取代預設設定。 pkg_add(1) 會用 fetch(3) 指令來下載檔案,而 fetch(3) 本身則會使用相關環境變數的設定, 像是: FTP_PASSIVE_MODEFTP_PROXY 以及 FTP_PASSWORD。 如果你網路環境處於 firewall 後面,或者需要用 FTP/HTTP proxy 的話,那麼就需要設定。 設定細節請參閱 fetch(3)。 請注意:上面所說的例子是寫 lsof 而非 lsof-4.56.4。 當使用遠端抓取功能時,該 package 版號就不必加上去了。 pkg_add(1) 會自動下載該軟體的最新版回來安裝。

注: 若用的是 FreeBSD-CURRENT 或 FreeBSD-STABLE 的話,pkg_add(1) 會自動下載該軟體最新版回來。 若用的是屬於 -RELEASE 版本,那麼他會抓回屬於該 release 上所編譯的 package。 也可以更改 PACKAGESITE 環境變數,以改變下載方式。 舉例來說,如果是 FreeBSD 5.4-RELEASE 的話,那麼 pkg_add(1) 預設會從 ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.4-release/Latest/ 來抓 package。若要強制 pkg_add(1) 下載 FreeBSD 5-STABLE 所用的 package,那麼就把 PACKAGESITE 改設為 ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5-stable/Latest/ 即可。

Package 檔有 .tgz 以及 .tbz 兩種格式。 這些都可透過 ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/ ,或者 FreeBSD 光碟內取得。 每張 4 片裝的 FreeBSD 光碟(以及 PowerPak 包等等)內都會在 /packages 目錄內放 package。 裡面的目錄架構類似 /usr/ports 的目錄架構。 每個分類都各自有專屬目錄,且每份 package 都會放在 All 目錄內。

package 目錄架構與 port 的都一致;它們共同構成整個 package/port 系統機制。

4.4.2. 管理 Packages

pkg_info(1) 可用來列出所有已安裝的軟體、軟體簡介。

# pkg_info
cvsup-16.1          A general network file distribution system optimized for CV
docbook-1.2         Meta-port for the different versions of the DocBook DTD
...

pkg_version(1) 則是列出所有已安裝的軟體版本。 它會顯示已裝版本以及目前機器上 port tree 的版本差異。

# pkg_version
cvsup                       =
docbook                     =
...

第二欄的符號表示:已安裝的軟體版本與目前機器上 port tree 的版本差異。

符號 代表意義
= 已裝的版本與目前機器上 port tree 的版本是同一版的。
< 與目前機器上 port tree 版本相比起來,已裝的版本較舊。
> 與目前機器上 port tree 版本相比起來, 已裝的版本較新。(可能是目前機器上 port tree 尚未更新。)
? 已裝的軟體在 ports 索引內找無相關資料。 (通常可能是,舉例來說:已安裝的該 port 已從 Ports Collection 中移除或改名了。)
* 該軟體同時有許多版本。

4.4.3. 移除已安裝的 Package

若要移除已裝的軟體,那麼請多利用 pkg_delete(1) 工具,比如:

# pkg_delete xchat-1.7.1

請注意 pkg_delete(1) 須要放上完整的軟體名稱以及版本, 若只輸入 xchat 就不行,必須換成 xchat-1.7.1 才可。 然而,我們可以用 pkg_version(1) 輕鬆找出已裝的所有軟體版本,或者以 wildcard (萬用字元) 的方式:

# pkg_delete xchat\*

以上面例子而言,將會移除所有以 xchat 開頭的軟體。

4.4.4. 其他細節部份

所有已裝的 package 資訊都會存到 /var/db/pkg 目錄內,在該目錄下可以找到記載已裝的軟體檔案清單及該軟體簡介的檔案。

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

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