This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

4.4. 使用 pkg 管理 Binary 套件

4.4. 使用 pkg 管理 Binary 套件

pkg 是新一代套件管理工具用來取代舊版工具,提供許多功能讓處理 Binary 套件更快更簡單。

對於只想要使用在 FreeBSD 鏡像站上預先編譯 Binary 套件的站台,使用 pkg 管理套件便已足夠。

但是,對於那些想要從原始碼或使用自己的檔案庫編譯的站台,則會需要 Port 管理工具

因為 pkg 僅能管理 Binary 套件,所以不能當做為替代 Port 管理工具,這些工具可用來安裝來自 Binary 與 Port 套件集的軟體,而 pkg 僅能安裝 Binary 套件。

4.4.1. 開始使用 pkg

FreeBSD 內建啟動 (Bootstrap) 工具可用來下載並安裝 pkg 及其操作手冊。這個工具是設計在 FreeBSD 版本 10.X 之後使用。

注意:

不是所有 FreeBSD 版本及架構支援此啟動程序,目前支援的清單列於 https://pkg.freebsd.org/,對不支援的版本,必須改透過 Port 套件集或者 Binary 套件來安裝 pkg

要啟動 (Bootstrap) 系統請執行:

# /usr/sbin/pkg

您必須有可用的網際網路連線供啟動程式使用方可成功。

否則,要安裝 Port 套件,則須執行:

# cd /usr/ports/ports-mgmt/pkg
# make
# make install clean

當升級原使用舊版 pkg_* 工具的既有系統時,必須將資料庫轉換成新的格式,如此新的工具才會知道有那些已安裝過的套件。pkg 安裝完後,必須執行以下指令將套件資料庫從舊版格式轉換到新版格式:

# pkg2ng

注意:

新安裝的版本因尚未安裝任何第三方軟體因此不須做這個步驟。

重要:

這個步驟無法還原。一旦套件資料庫轉為成 pkg 的格式,舊版 pkg_* 工具就不該再繼續使用。

注意:

套件資料庫轉換的過程可能會因內容轉換為新版本產生錯誤。通常,這些錯誤皆可安全忽略,即使如此,仍然有在執行 pkg2ng 後無法成功轉換的軟體清單,這些應用程式則必須手動重新安裝。

為了確保 FreeBSD Port 套件集會將新軟體的資訊註冊到 pkg 而非舊版套件資料庫,FreeBSD 版本 10.X 之前需要在 /etc/make.conf 加入此行:

WITH_PKGNG=	yes

預設 pkg 會使用 FreeBSD 套件鏡像站 (Repository) 的 Binary 套件。若要取得有關編譯自訂套件檔案庫的資訊,請參考 節 4.6, “使用 Poudriere 編譯套件”

其他 pkg 設定選項說明請參考 pkg.conf(5)

pkg 的用法資訊可在 pkg(8) 操作手冊或不加任何參數執行 pkg 來取得。

每個 pkg 指令參數皆記庫在指令操件手冊。要閱讀 pkg install 的操作手冊,可執行以下指令:

# pkg help install
# man pkg-install

本章節剩餘的部份將會示範使用 pkg 執行常用的 Binary 套件管理工作。每個示範的指令皆會提供多個參數可使用,請參考指令的說明或操作手冊以取得詳細資訊或更多範例。

4.4.2. 取得有關已安裝套件的資訊

有關已安裝在系統的套件資訊可透過執行 pkg info 來檢視,若執行時未指定任何參數,將會列出所有已安裝或指定的套件版本。

例如,要查看已安裝的 pkg 版本可執行:

# pkg info pkg
pkg-1.1.4_1

4.4.3. 安裝與移除套件

要安裝 Binary 套件可使用以下指令,其中 packagename 為要安裝的套件名稱:

# pkg install packagename

這個指令會使用檔案庫的資料來決定要安裝的軟體版本以及是否有任何未安裝的相依。例如,要安裝 curl

# pkg install curl
Updating repository catalogue
/usr/local/tmp/All/curl-7.31.0_1.txz          100% of 1181 kB 1380 kBps 00m01s

/usr/local/tmp/All/ca_root_nss-3.15.1_1.txz   100% of  288 kB 1700 kBps 00m00s

Updating repository catalogue
The following 2 packages will be installed:

        Installing ca_root_nss: 3.15.1_1
        Installing curl: 7.31.0_1

The installation will require 3 MB more space

0 B to be downloaded

Proceed with installing packages [y/N]: y
Checking integrity... done
[1/2] Installing ca_root_nss-3.15.1_1... done
[2/2] Installing curl-7.31.0_1... done
Cleaning up cache files...Done

新的套件以及任何做為相依安裝的額外套件可在已安裝的套件清單中看到:

# pkg info
ca_root_nss-3.15.1_1	The root certificate bundle from the Mozilla Project
curl-7.31.0_1	Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.1.4_6	New generation package manager

不再需要的套件可以使用 pkg delete 來移除,例如:

# pkg delete curl
The following packages will be deleted:

	curl-7.31.0_1

The deletion will free 3 MB

Proceed with deleting packages [y/N]: y
[1/1] Deleting curl-7.31.0_1... done

4.4.4. 升級已安裝套件

執行以下指令,可將已安裝的套件升級到最新版本:

# pkg upgrade

這個指令將會比對已安裝的版本與在檔案庫分類中的版本,並從檔案庫升級這些套件。

4.4.5. 稽查已安裝套件

在第三方的應用程式中偶爾可能會發現軟體漏洞,要找出這些程式,可使用 pkg 內建的稽查機制。要查詢已安裝在系統上的軟體是否有任何已知的漏洞可執行:

# pkg audit -F

4.4.6. 自動移除未使用的套件

移除一個套件可能會留下不再需要使用的相依套件。不再需要的相依套件是當初隨著其套件所安裝的套件 (枝葉套件),可以使用以下指令自動偵測並移除:

# pkg autoremove
Packages to be autoremoved:
	ca_root_nss-3.15.1_1

The autoremoval will free 723 kB

Proceed with autoremoval of packages [y/N]: y
Deinstalling ca_root_nss-3.15.1_1... done

因為相依所安裝的套件稱作 自動 (Automatic) 套件,而非自動套件即套件被安裝的原因不是因為其他套件所相依,可以使用以下方式查詢:

# pkg prime-list
nginx
openvpn
sudo

pkg prime-list 是一個別名指令,定義在 /usr/local/etc/pkg.conf,尚還有許多其他相關指令可以用來查詢系統的套件資料庫,例如,指令 pkg prime-origins 可用來取得上述清單的來源 Port 目錄:

# pkg prime-origins
www/nginx
security/openvpn
security/sudo

這份清單可以用來重新編譯所有安裝在系統中的套件,使用 ports-mgmt/poudriere ports-mgmt/synth 這類的編譯工具。

要將一個安裝好的套件註記成為 "自動" 可以用:

# pkg set -A 1 devel/cmake

當套件為末端套件 (Leaf Package) 且被註記為 "自動",則會被 pkg autoremove 挑選出來。

要註記一個安裝好的套件為 "自動" 可以用:

# pkg set -A 0 devel/cmake

4.4.7. 還原套件資料庫

不如傳統的套件管理系統,pkg 有自己的套件資料庫備份機制,此功能預設是開啟的。

提示:

要停止週期的 Script 備份套件資料庫可在 periodic.conf(5) 設定 daily_backup_pkgdb_enable="NO"

要還原先前套件資料庫的備份,可執行以下指令並將 /path/to/pkg.sql 替換為備份的位置:

# pkg backup -r /path/to/pkg.sql

注意:

若要還原有週期 Script 所產生的備份必須在還原前先解壓縮。

要手動備份 pkg 資料庫,可執行以下指令,並替換 /path/to/pkg.sql 為適當的檔案名稱與位置:

# pkg backup -d /path/to/pkg.sql

4.4.8. 移除過時的套件

預設 pkg 會儲存 Binary 套件在快取目錄定義在 pkg.conf(5) 中的 PKG_CACHEDIR,只會保留最後安裝的套件複本。較舊版的 pkg 會保留所有先前的套件,若要移除這些過時的 Binary 套件,可執行:

# pkg clean

使用以下指令可清空全部的快取:

# pkg clean -a

4.4.9. 修改套件 Metadata

在 FreeBSD Port 套件集中的軟體可能會經歷主要版號的修改,要解決這個問題可使用 pkg 內建的指令來更新套件來源。這非常有用,例如 lang/php5 重新命名為 lang/php53 因此 lang/php5 從此之後代表版本 5.4

要更改上述例子中的套件來源,可執行:

# pkg set -o lang/php5:lang/php53

再一個例子,要更新 lang/ruby18lang/ruby19,可執行:

# pkg set -o lang/ruby18:lang/ruby19

最後一個例子,要更改 libglut 共用程式庫的來源從 graphics/libglut 改成 graphics/freeglut 可執行:

# pkg set -o graphics/libglut:graphics/freeglut

注意:

在更改套件來源之後,很重要的一件事是要重新安裝套件,來讓相依的套件也同時使用修改後的來源。要強制重新安裝相依套件,可執行:

# pkg install -Rf graphics/freeglut

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

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

關於本文件的問題,請洽詢 <doc@FreeBSD.org>。