4.4. pkg によるバイナリ package の管理
戻る〓 | 第4章 アプリケーションのインストール - packages と ports | 〓次へ

## 4.4. pkg によるバイナリ package の管理

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

FreeBSD のミラーサイトが提供する事前に構築されたバイナリ package のみを使いたいと考えているサイトでは、 pkg を使って package を管理するとよいでしょう。

しかしながら、 ソースまたは自分自身で用意したリポジトリから構築したサイトでは、port 管理ツール が別に必要となります。

pkg はバイナリ package のみを扱うので、 そのような管理ツールの置き換えとはなりません。 これらのツールは、ソフトウェアをバイナリ packages と Ports Collection の両形式からインストールできますが、 pkg はバイナリ packages のみをインストールします。

### 4.4.1. pkg 入門

FreeBSD には、 pkg およびマニュアルページをインストールするブートストラップユーティリティが用意されています。 このユーティリティは、FreeBSD 10.`X` 以降で動作するように設計されています。

### 注記:

このブートストラッププロセスは、すべての FreeBSD バージョンおよびアーキテクチャに対応しているわけではありません。 現在対応している一覧は、 https://pkg.freebsd.org/ で確認することができます。 対応していない場合には、 Ports Collection またはバイナリ package から pkg をインストールする必要があります。

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

    # /usr/sbin/pkg

ブートストラッププロセスに成功するには、 インターネットへの接続が必要です。

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

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

古い pkg_* ツールを用いたシステムをアップグレードする際には、 新しいツールがすでにインストールされている package を認識するよう、 データベースを新しいフォーマットへと変換する必要があります。 pkg をインストールしたら、 以下のコマンドを実行して、package データベースをこれまでの伝統的なフォーマットから新しいフォーマットへと変換してください。

    # pkg2ng

### 注記:

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

### 重要:

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

### 注記:

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

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

    WITH_PKGNG=	yes

デフォルトでは、pkg は FreeBSD の package ミラー (リポジトリ) のバイナリ package を用います。 カスタム package リポジトリの構築については、 「Poudriere を用いた package の構築」 をご覧ください。

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

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

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

    # pkg help install

    # man pkg-install

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

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

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

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

    # pkg info pkg
    pkg-1.1.4_1

### 4.4.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.1_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.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

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

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

以下のコマンドを実行すると、 インストールされている packages が最新のバージョンにアップグレードされます。

    # pkg upgrade

このコマンドは、インストールされているソフトウェアのバージョンと、 リポジトリのカタログから利用できるバージョンとを比較し、 リポジトリからアップグレードします。

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

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

    # pkg audit -F

### 4.4.6. 使われていない package の自動削除

package を削除すると、不必要な依存 package が残されることがあります。 依存のためにインストールされたが、 現在は不必要になった package (リーフ package) は、 以下のコマンドで自動的に検出され、削除されます。

    # 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

依存によりインストールされた packages は、 automatic package と呼ばれます。 非 automatic packages、 すなわち他の package からの依存ではなく、 明示的にインストールした package の一覧は以下のようにして出力できます。

    # pkg prime-list
    nginx
    openvpn
    sudo

`pkg prime-list` は、 `/usr/local/etc/pkg.conf` で設定されているエイリアスコマンドです。 他にもシステムの package データベースの問い合わせに用いることができる多くのコマンドが用意されています。 たとえば、`pkg prime-origins` コマンドを使うと、 上記で得られた port 一覧のオリジナルの port ディレクトリを知ることができます。

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

この一覧と ports-mgmt/poudriere または ports-mgmt/synth といったツールを使うと、 システムにインストールされているすべての package を再構築できます。

インストールされた package に automatic のマーク付けをするには、 以下のように実行してください。

    # pkg set -A 1 devel/cmake

リーフ package や automatic としてマークされた package は、 `pkg autoremove` で選択されます。

インストールされた package を 非 automatic とマークするには、以下のように実行してください。

    # pkg set -A 0 devel/cmake

### 4.4.7. package データベースのリストア

伝統的な package 管理システムとは異なり、 pkg には package データベースをバックアップするメカニズムがあります。 この機能はデフォルトで有効に設定されています。

### ヒント:

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

過去にバックアップした package データベースの中身をリストアするには、 以下のコマンドを実行してください。 以下のコマンドの `/path/to/pkg.sql` については、バックアップのある場所に置き換えて実行してください。

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

### 注記:

システムの定期的なスクリプトによって取得されたバックアップをリストアする場合には、 リストアの前に展開しておく必要があります。

手動で pkg データベースをバックアップするには、以下のコマンドを実行してください。 以下のコマンドの `/path/to/pkg.sql` については、適切なファイル名と場所に置き換えて下さい。

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

### 4.4.8. 古くなった package の削除

デフォルトでは、pkg は、pkg.conf(5) の `PKG_CACHEDIR` 変数で定義されるキャッシュディレクトリにバイナリ packages を保存します。 インストールされている package の最新のコピーのみが保存されます。 古いバージョンの pkg では、 過去にインストールされたすべての package が保存されていました。 これらの古くなったバイナリ package を削除するには、 以下を実行してください。

    # pkg clean

キャッシュ全体を削除するには以下を実行してください。

    # pkg clean -a

### 4.4.9. package メタデータの変更

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

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

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

別の例として、lang/ruby18 を lang/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

戻る〓 | 上に戻る | 〓次へ
4.3. ソフトウェアの探し方〓 | ホーム | 〓4.5. Ports Collection の利用

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

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