5.5. pkgng によるバイナリ package の管理

pkgng は、FreeBSD における伝統的な package 管理ツールの置き換えとなる次世代の管理ツールで、 バイナリ packages をより早く、 より簡単に管理できるようにする数多くの機能を提供します。

pkgngports-mgmt/portmasterports-mgmt/portupgrade などの port 管理ツールの置き換えではありません。 これらのツールは、 サードパーティ製ソフトウェアをバイナリ packages と Ports Collection の両形式からインストールできますが、 一方で pkgng はバイナリ packages のみをインストールします。

5.5.1. pkgng 入門

FreeBSD 9.1 以降では、 pkgng とマニュアルページをダウンロードし、 インストールするためのブートストラップユーティリティが用意されています。

システムをブートストラップするためには、 以下を実行してください。

# /usr/sbin/pkg

これより前のバージョンの FreeBSD では、かわりに Ports Collection または packages を用いてインストールする必要があります。

port をインストールするには以下を実行してください。

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

package からインストールするには以下を実行してください。

# pkg_add -r pkg

pkgng をインストールしたら、 以下のコマンドを実行して、package データベースをこれまでの伝統的なフォーマットから新しいフォーマットへと変換する必要があります。

# pkg2ng

このステップは、 サードパーティ製ソフトウェアがまだインストールされていないような、 新しくインストールされた直後のシステムでは必要ありません。

重要:

このステップは非可逆です。 一度 package データベースを pkgng フォーマットへと変換したら、伝統的な pkg_* ツールを使うべきではありません。

注記:

package データベースを変換する際には、 新しいバージョンへのデータ変換に伴ったエラーが出力されることがあります。 通常、これらのエラーは無視して構いませんが、 pkg2ng 終了後に表示される、 変換に失敗したサードパーティ製ソフトウェアの一覧については、 これらのソフトウェアを手動で再インストールする必要があります。

FreeBSD のバージョンが 10.X より前であれば、 以下の行を /etc/make.conf に追加して、 FreeBSD Ports Collection がソフトウェアの登録に、伝統的な package のフォーマットではなく、pkgng を用いるように設定してください。

WITH_PKGNG=	yes

pkgng package 管理システムでは、 ほとんどのコマンドに対して package リポジトリを使います。 デフォルトの package リポジトリは /usr/local/etc/pkg.conf または PACKAGESITE 環境変数で定義されます。 この環境変数は、設定ファイルを上書きします。

その他の pkgng の設定オプションは、pkg.conf(5) に記述されています。

pkgng の利用情報は、 pkg(8) マニュアルページや、 pkg を引数なしに実行すると表示されます。

pkgng コマンドの引数は、 コマンドに固有なマニュアルページに記述されています。 たとえば、pkg install のマニュアルページを読むには、 以下のコマンドのどちらかを実行してください。

# pkg help install
# man pkg-install

以下の節では、pkgng を用いた通常のバイナリ package の管理について説明します。 各コマンドでは、カスタマイズのために、 多くのオプションが使われています。 詳細や、他の例については、 コマンドのヘルプやマニュアルページを参照してください。

5.5.2. インストールされている package の情報を入手する

オプションを使用しないで pkg info を実行すると、 システムにインストールされているすべての package もしくは、 ある特定の package の情報が得られます。

たとえば、インストールされている pkgng の情報を調べるには、 以下のように実行してください。

# pkg info pkg
pkg-1.1.4_1

5.5.3. package のインストールと削除

バイナリ package をインストールするには、 以下のコマンドを使ってください。 ここで packagename は、インストールする package の名前です。

# 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.5_1... done
[2/2] Installing curl-7.31.0_1... done
Cleaning up cache files...Done

新しい package と依存関係から追加された package は、 インストール済み package 一覧に表示されます。

# pkg info
ca_root_nss-3.15.5_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

必要のなくなった packages は、 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

5.5.4. インストールされている package のアップグレード

pkg version を用いて古くなった packages を見つけることができます。 ローカルに ports ツリーがない場合には、 pkg-version(8) は、リモートリポジトリのカタログを利用します。 そうでなければ、ローカルの ports ツリーを使って package のバージョンを同定します。

pkg upgrade を実行すると、 インストールされている packages が最新のバージョンにアップグレードされます。 このコマンドは、インストールされているソフトウェアのバージョンと、 リポジトリのカタログから利用できるバージョンとを比較します。 比較が終わったら、 新しいバージョンが用意されているアプリケーションの一覧を表示します。 アップグレードを行うのであれば、 y を選択してください。 キャンセルする場合には、 n を選択してください。

5.5.5. インストールされている package の検証

時折、 サードウェア製のアプリケーションに脆弱性が見つかることがあります。 脆弱性を調べるために、 pkgng は、検証機能を持っています。 システムにインストールされているソフトウェアに既知の脆弱性がないかどうかを調べるには、 以下のように実行してください。

# pkg audit -F

5.5.6. リーフ依存 ports の自動削除

package を削除すると、不必要な依存 ports が残されることがあります。 依存のために導入され、現在は不必要になった package は、 以下のようにすると自動的に検出され、削除されます。

# pkg autoremove
Packages to be autoremoved:
	ca_root_nss-3.13.5

The autoremoval will free 723 kB

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

5.5.7. package データベースのバックアップ

伝統的な package 管理システムとは異なり、 pkgng には package データベースをバックアップするメカニズムがあります。 package データベースの内容を手動でバックアップするには、 以下を実行してください。以下の pkgng.db を適切なファイル名に置き換えてください。

# pkg backup -d pkgng.db

さらに、pkgng は package データベースを毎日自動的にバックアップする periodic(8) スクリプトを含んでいます。 この機能は、periodic.conf(5) の中で、 daily_backup_pkgng_enableYES に設定すると有効になります。

ヒント:

スクリプトによる定期的な package データベースのバックアップを無効にするには、 periodic.conf(5) の中で、 daily_backup_pkgdb_enableNO に設定してください。

過去にバックアップした package データベースの中身をリストアするには、以下を実行してください。

# pkg backup -r /path/to/pkgng.db

5.5.8. 古くなった package の削除

デフォルトでは、pkgng はキャッシュディレクトリにバイナリ packages を保存します。 このディレクトリは、pkg.conf(5) の PKG_CACHEDIR 変数で定義されます。 pkg upgrade を使って packages をアップグレードする際には、 アップグレードされた package の古いバージョンは自動的には削除されません。

システムからこれらの古いバイナリ package を削除するには、 以下を実行してください。

# pkg clean

5.5.9. package メタデータの変更

FreeBSD Ports Collection では、メジャーバージョン番号が変更になることがあります。 これに対応するために、pkgng には、 package の情報をアップデートするコマンドが組み込まれています。 たとえば、lang/php5 が、 バージョン 5.4 を表すようになり、 lang/php5lang/php53 と名前を変更する必要があるような場合に、有用です。

上記の例の package の情報を変更するには、 以下のように実行してください。

# 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

注記:

package の情報を変更したら、 情報が変更された package に依存している packages を再インストールすることが重要となります。 依存 packages を再インストールするには、 以下のように実行してください。

# pkg install -Rf graphics/freeglut

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。