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

pkgng は、FreeBSD における伝統的な package 管理ツールの置き換えであり、バイナリ packages をより早く、 より簡単に管理できるようにする数多くの機能を提供します。 pkgng の最初のリリースは 2012 年 8 月に行われました。

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

5.5.1. pkgng 入門

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

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

# /usr/sbin/pkg

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

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

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

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

# pkg_add -r pkg

FreeBSD のインストールがすでに行われているようなシステムでは、 pkg_install package データベースを新しいフォーマットへ変換する必要があります。 変換を行うには以下を実行してください。

# pkg2ng

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

重要:

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

注記:

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

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

WITH_PKGNG= yes

5.5.2. pkgng 環境の設定

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

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

5.5.3. 基本的な pkgng の操作

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

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

# pkg help install
# man pkg-install

5.5.3.1. pkgng を使ってインストールされた package の情報を得るには

pkg info を実行すると、 システムにインストールされている package 情報が得られます。 pkg_info(1) 同様、すべての package のバージョン、 および説明の一覧が表示されます。

ある特定の package の情報が必要であれば、 以下を実行してください。

# pkg info packagename

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

# pkg info pkg pkg-1.0.2 New generation package manager

5.5.3.2. pkgng を用いた packages のインストールと削除

通常、ほとんどの FreeBSD ユーザは、バイナリパッケージを pkg install packagename でインストールすることでしょう。

# pkg install packagename

pkgng 環境の設定」 で説明した通り、 pkg install はリポジトリデータを使用します。 これとは反対に、pkg-add(8) はリポジトリデータを用いなければ、 定義されている PACKAGESITE も使いません。 そのため、依存関係は適切には追跡されず、 足りない依存についてもリモートホストからダウンロードされません。 この節では pkg install の使用方法について説明します。 pkg add の使用方法については pkg-add(8) をご覧ください。

追加のバイナリ package は、 pkg install によりインストールされます。 たとえば、 curl をインストールするには以下を実行してください。

# pkg install curl Updating repository catalogue Repository catalogue is up-to-date, no need to fetch fresh copy The following packages will be installed: Installing ca_root_nss: 3.13.5 Installing curl: 7.24.0 The installation will require 4 MB more space 1 MB to be downloaded Proceed with installing packages [y/N]: y ca_root_nss-3.13.5.txz 100% 255KB 255.1KB/s 255.1KB/s 00:00 curl-7.24.0.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00 Checking integrity... done Installing ca_root_nss-3.13.5... done Installing curl-7.24.0... done

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

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

必要のなくなった packages は、 pkg delete を使って削除できます。 たとえば、curl が必要なくなったら、 以下のようにして削除できます。

# pkg delete curl The following packages will be deleted: curl-7.24.0_1 The deletion will free 3 MB Proceed with deleting packages [y/N]: y Deleting curl-7.24.0_1... done

5.5.3.3. pkgng による package のアップグレード

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

pkgng を用いて package を新しいバージョンにアップグレードできます。 curl の新しいバージョンがリリースされた場合には、ローカル package を以下のようにして新しいバージョンにアップグレードできます。

# pkg upgrade Updating repository catalogue repo.txz 100% 297KB 296.5KB/s 296.5KB/s 00:00 The following packages will be upgraded: Upgrading curl: 7.24.0 -> 7.24.0_1 1 MB to be downloaded Proceed with upgrading packages [y/N]: y curl-7.24.0_1.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00 Checking integrity... done Upgrading curl from 7.24.0 to 7.24.0_1... done

5.5.3.4. pkgng による package の検証

時折、Ports Collection に含まれているソフトウェアに脆弱性が見つかることがあります。 pkgng は、ports-mgmt/portaudit package 同様の検証機能を持っています。 システムにインストールされているソフトウェアを検証するには、 以下のように実行してください。

# pkg audit -F

5.5.4. 高度な pkgng の利用

5.5.4.1. pkgng によるリーフ依存 ports の自動削除

package を削除すると、不必要な依存 ports、たとえば上の例では security/ca_root_nss が残されることがあります。 これらの packages は、 インストールされたままでどこからも依存されていません。 依存のために導入され、現在は不必要になった 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.13.5... done

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

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

# pkg backup -d pkgng.db

注記:

ファイル名の pkgng.db を適切なファイル名に置き換えてください。

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

ヒント:

pkg_install の定期的なスクリプトが、 package データベースを同様にバックアップすることを避けるためには、 periodic.conf(5) の中で、 daily_backup_pkgdb_enableNO に設定してください。

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

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

5.5.4.3. 古くなった pkgng package の削除

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

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

# pkg clean

5.5.4.4. pkgng package メタデータの変更

歴史的に FreeBSD Ports Collection は、メジャーバージョン番号の変更に対応できます。 pkg_install とは異なり、 pkgng には、 package の情報をアップデートするコマンドが組み込まれています。 たとえば、lang/php5 のバージョンが、もともとは 5.3 で、5.4 がリリースされたことに伴い lang/php53 へと名前が変更される場合、 pkg_install では、 package のデータベースを、 どの port がインストール元であったかという情報を変更するために ports-mgmt/portmaster のような別のソフトウェアを必要とします。

ports-mgmt/portmaster および ports-mgmt/portupgrade ports とは異なり、引数に与えるバージョンの新、旧の順番は異なります。 pkgng での構文は、pkg set -o category/oldport:category/newport となります。

たとえば、上記の例の 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> まで電子メールを (英語で) 送ってください。

a