Chapter 4. pkgsrc を使う

Table of Contents

4.1. バイナリーパッケージを使う
4.1.1. バイナリーパッケージの配布場所
4.1.2. バイナリーパッケージをインストールする
4.1.3. パッケージをアンインストールする
4.1.4. インストールされているパッケージの情報を得る
4.1.5. インストール済パッケージの脆弱性チェック
4.1.6. インストール済パッケージのより新しいバージョンが pkgsrc にあるかどうか調べる
4.1.7. その他の管理用機能
4.1.8. 警告
4.2. ソースからパッケージを構築する
4.2.1. 必要なもの
4.2.2. 配布ファイルの取得
4.2.3. 構築とインストール方法

基本的に、pkgsrc には二通りの使い方があります。 一つ目の使い方は、パッケージ用のツールだけをインストールして、 他の人が用意したバイナリーパッケージを使うものです。 これは、pkgsrc のうち pkg に相当します。 二つ目の使い方は、pkgsrc の src もインストールするものです。 こうすると、自分でパッケージを構築することができますし、 他の人が用意したバイナリーパッケージを使うこともできます。

4.1. バイナリーパッケージを使う

ftp.NetBSD.org サーバーとそのミラーサイトには、バイナリーパッケージを揃えて置いてあり、 すぐにインストールして使える状態になっています。このバイナリーパッケージは、 以下のような、標準のディレクトリーの設定を使って構築されています。

  • LOCALBASE/usr/pkg で、ここにほとんどのファイルがインストールされます。

  • 設定ファイルは /usr/pkg/etc です。

  • VARBASE/var で、インストール後に変更することのあるファイルはここにインストールされます。

何らかの理由 (root 権限がないなど) でこの各ディレクトリーが使えない場合は、 このバイナリーパッケージを使うことはできないので、 パッケージ用ツールを自分で構築する必要があります。これについてはSection 3.2, “pkgsrc を使う準備をする”に説明があります。

4.1.1. バイナリーパッケージの配布場所

バイナリーパッケージをインストールするためには、 まず、バイナリーパッケージがどこで入手できるか知っている必要があります。 最初に調べる場所は、pkgsrc の主たる FTP サーバーの /pub/pkgsrc/packages ディレクトリーです。

このディレクトリーには、複数のプラットフォーム用の バイナリーパッケージがあります。 最初に、お使いのオペレーティングシステムのディレクトリーを選んでください。 (バージョン番号がついているディレクトリーは、 歴史的な理由で残っているだけですので、無視してください。) 次に、ハードウェアアーキテクチャーを選び、 その次に、OS のバージョンと pkgsrc のバージョンの組合せを選びます。

多くの場合、このディレクトリーには、 パッケージ管理ツールが入った bootstrap.tar.gz というファイルがあります。このファイルがない場合は、 お使いのオペレーティングシステムにパッケージ管理ツールがもともとあるのでしょう。 このファイルをダウンロードして / ディレクトリーに展開します。 展開すると、/usr/pkg (この下には、 バイナリーパッケージ管理用のツールがある) および /var/db/pkg (インストールされたパッケージのデータベース用) の各ディレクトリーが作られます。

4.1.2. バイナリーパッケージをインストールする

前節で説明したディレクトリーには、 All というサブディレクトリーがあり、 当該プラットフォーム向けのバイナリーパッケージがすべて置かれています。 ただし、FTP または CDROM (利用しているメディアによって異なります) 経由での配布ができないパッケージは、 除かれています。

パッケージを FTP または HTTP サーバーから直接インストールするには、 Bourne シェルと互換のシェルで、以下のコマンドを実行します (最初に su して root になっておくことを忘れずに)。

# PATH="/usr/pkg/sbin:$PATH"
# PKG_PATH="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/OPSYS/ARCH/VERSIONS/All"
# export PATH PKG_PATH

CDROM, DVD または NFS でマウントされた置き場所からインストールする場合などは、 URL のかわりに、ローカルのパスを使うこともできます。 複数の置き場所からパッケージをインストールしたい場合は、 それらをセミコロンで区切って PKG_PATH に設定することができます。

以上の準備ができれば、 パッケージのインストールは非常に簡単です。

# pkg_add openoffice2
# pkg_add kde-3.5.7
# pkg_add ap2-php5-*

なお、インストールしようとするパッケージを実行するために必要となるパッケージも、 すべて一緒にインストールされますが、 この必要なパッケージも同じ置き場所に用意されていると仮定されます (訳註: 必要なパッケージがすべて揃うように PKG_PATH を設定する必要があるということ)。

パッケージをインストールすると、脆弱性のあるパッケージがインストールされることもありえます。 このため、pkg_admin audit を定期的に (特に、パッケージを新たにインストールした後には) 実行して、 脆弱性の影響がある構成となっているかどうかを確認するようにしてください。

パッケージをインストールした後に、PATH/usr/pkg/bin/usr/pkg/sbin が含まれている事を確 認してください。これで、インストールされたプログラムを実際に使い始めること ができます。

4.1.3. パッケージをアンインストールする

パッケージをアンインストールする方法は、そのパッケージを、 ソースコードからインストールしたかバイナリーパッケージからインストールしたかにかかわらず同じです。 どちらの方法でインストールされたかは、pkg_delete コマンドは一切関知しません。 パッケージの削除は、pkg_delete package-name を実行するだけでおこなうことができます。 パッケージ名はバージョン番号をつけてもつけなくてもかまいません。 一連のパッケージをアンインストールするために、 たとえば *emacs* のようにワイルドカードを使うこともできます。 この場合、ワイルドカードが pkg_delete に渡る前にシェルに展開されないようにするため、 ワイルドカードはかならずクォートするようにします。

-r オプションは非常に強力です。これを使うと、 指定したパッケージに依存しているパッケージをすべて削除してから、 指定したパッケージそのものを削除します。たとえば、

# pkg_delete -r jpeg
    

は、jpeg および jpeg を使うすべてのパッケージを削除します。これにより、 jpeg パッケージをアップグレードすることが可能になります。

4.1.4. インストールされているパッケージの情報を得る

pkg_info は、インストールされているパッケージや、 バイナリーパッケージのファイルに関する情報を表示します。

4.1.5. インストール済パッケージの脆弱性チェック

NetBSD セキュリティーオフィサーとパッケージグループでは、 pkgsrc に含まれる (あるいは含まれていた) パッケージの既知の脆弱性のリストを 保守しています。このリストは、 NetBSD FTP サイトの ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/vulnerabilities から入手できます

pkg_admin fetch-pkg-vulnerabilities を使うと、 このリストを自動的にダウンロードし、 システムにインストールされているパッケージすべてについて セキュリティー検証をすることができます。

このセキュリティー検証は、ふたつの部分からできています。 ひとつめの段階は pkg_admin fetch-pkg-vulnerabilities で、 NetBSD FTP サイトから 脆弱性のリストをダウンロードするものです。 ふたつめは pkg_admin audit で、インストールされているパッケージに脆弱性が ないかどうか検証するものです。脆弱性のあるパッケージがあった場合、 次のように出力してくれます:

Package samba-2.0.9 has a local-root-shell vulnerability, see
    http://www.samba.org/samba/whatsnew/macroexploit.html

vulnerabilities ファイルを毎日ダウンロードして、常に最新の状態にしておきたいという方もいらっしゃることでしょう。 root ユーザーの crontab(5) エントリーを適切に書いておけば、そういうこともできます。 たとえば、

# vulnerabilities ファイルをダウンロード
0 3 * * * /usr/sbin/pkg_admin fetch-pkg-vulnerabilities >/dev/null 2>&1
      

というエントリーを書けば、毎日午前 3 時に vulnerability リストを更新することになります。 この例は一日一回ですが、もっと頻繁に更新することもできます。 さらに、パッケージの検証を daily security script でおこないたい方もいらっしゃるでしょう。 これは、以下のような行を /etc/security.local に書いておけば実現できます。

/usr/sbin/pkg_admin audit
      

4.1.6. インストール済パッケージのより新しいバージョンが pkgsrc にあるかどうか調べる

インストール済パッケージが最新かどうかを確認するには、 pkgtools/lintpkgsrc をインストールして、 lintpkgsrc-i を付けて実行します。たとえば以下のようになります。

% lintpkgsrc -i
...
Version mismatch: 'tcsh' 6.09.00 vs 6.10.00
    

このようになった場合、パッケージを更新し、そのパッケージに依存しているパッケージをすべて再構築するために、 make update を使うことができます。

4.1.7. その他の管理用機能

pkg_admin は、パッケージシステムにおける、 各種の管理用機能を実行します。

4.1.8. 警告

pkg_add(1) マニュアルページで警告されている、自分自身で作ったものでないバイナリー パッケージをインストールすることが孕む危険性、無思慮にこのようなファイルを インストールすることにより、あなたのシステムにセキュリティーホールが生じる 事についてよく注意してください。

もちろん、パッケージ、パッケージの構築用のコンパイラー、 その他、呼び出されるすべてのツールのソースコードを完全に読んで理解したわけではない場合は、 ソースからインストールしたパッケージにもすべて、 同じ警告があてはまります。

4.2. ソースからパッケージを構築する

pkgsrc を入手すると、 pkgsrc ディレクトリーには、 カテゴリー別に整理されたパッケージ一式が含まれます。 オンラインでパッケージの索引を見られますし、また、 pkgsrc ディレクトリーで make readme してローカルで README.html を作って、 www/lynxwww/firefox などの好みの web ブラウザーで見られるようにすることもできます。

パッケージのインストール先のプレフィックスは、 デフォルトでは /usr/pkg です。これを変えたい場合は、 mk.confLOCALBASE を設定してください。一つのシステム内で複数の LOCALBASE を定義して使い分けるようなことはしないでください (chroot 環境内は除く)。

以下、本章では、パッケージがすでに pkgsrc に含まれていると仮定 しています。もし、そうでなければ、Part II, “pkgsrc 開発者向けの手引き”で、 パッケージを新たに作る方法をご覧ください。

4.2.1. 必要なもの

ソースからパッケージを構築するためには、機能する C コンパイラーが必要です。NetBSD の場合は、 comp および text 配布物一式をインストールしておく必要があります。X11関連のパッケージを 構築する場合は、さらにxbaseおよびxcomp 配布物一式も必要です。

4.2.2. 配布ファイルの取得

パッケージを構築するうえで最初にすることは、配布ファイル (未変更のソース) のダウンロードです。配布ファイルがまだダウンロードされていない場合、 pkgsrc は自動的に配布ファイルを取得します。

distfiles ディレクトリー に必要なファイルが すでに存在していれば、インターネットに接続する必要はありません。 CD-ROMなどにdistfilesがある場合には、CD-ROMを /cdrom にmountし、

DISTDIR=/cdrom/pkgsrc/distfiles

mk.conf に加えて、使うことができます。

標準状態では、人気のあるパッケージを置いているサーバー (たとえば SourceForge.net のミラー) に過大な負荷をかけないようにするため、 配布サイトのリストの順序はランダムに入れ換えられます。 このため、別の distfile を取得する必要が生ずるたびに、 すべてのミラーからの取得を、新たな (ランダムな) 順序で試みます。 この機能は、MASTER_SORT_RANDOM=NO を設定して止めることができます (PKG_DEVELOPER が設定されている場合は、すでに無効化されています)。

主要な配布サイトをあなたのところに近いサイトで上書きす ることができます。 変数をひとつかふたつ設定すると、 マスターサイトにアクセスする順序を変えることができます。 MASTER_SORT には、 ドメインの接尾辞を空白で区切ったリストが含まれます。 MASTER_SORT_REGEX はこれより柔軟なもので、 正規表現を空白で区切ったリストが含まれます。 これは MASTER_SORT より高い優先度を持ちます。 pkgsrc/mk/defaults/mk.confの例を参照してください。これにより、帯域幅 と時間が節約できるかもしれません。

これらの設定は、シェルの環境変数でも変更できますし、その設定を今後も有効に したければ、 mk.conf ファイルにその定義を書き加えておくこともできます。

パッケージが他のパッケージ(例えば meta-pkgs/kde3 など) に依存している場合、 ダウンロードとコンパイルを交互に繰り返すことがあります。 最初に必要なすべてのソースを確実にダウンロードするには、 次のコマンドを使用します:

% make fetch-list | sh

このコマンドは必要なファイルを取ってきてdistfiles ディレクトリー に保存するためのシェルコマンドを出力、実行します。必要なファイルを手動で ダウンロードするという方法もあります。

4.2.3. 構築とインストール方法

ソフトウェアがダウンロードされると、パッチが適用された上で、 コンパイルされます。それにかかる時間はあなたのコンピューターによりますし、 そのソフトウェアが依存している他のパッケージの数とそれらのコンパイルに かかる時間にもよります。

Note

bootstrap または pkgsrc を NetBSD 以外のシステムで使う場合は、 この手引きで例示されている make ではなく pkgsrc の bmake コマンドを使ってください。

たとえば、パッケージの各構成要素を構築するには、シェルプロンプトで

% cd misc/figlet
% make
    

とします。

次は新たにコンパイルされたプログラムを、 実際にあなたのシステムにインストールします。 インストールしようとしているパッケージのディレクトリーにいる間に

% make install
    

と入力してください。

パッケージをシステムにインストールするには root 権限が必要なことがあります。 ただし、pkgsrc には必要な時のみ su する機能があり、 実際のインストール時にのみ root になることができます。

そのソフトウェアは今まさにインストールされ、 使用できるようにセットアップされたことになります。 もうこれ以上コンパイル後の作業ファイルは必要とされないので、

% make clean
    

と入力し作業ディレクトリー内のファイルを削除してしまってもかまいません。 もし、プログラムをコンパイルするときに、 依存関係により他のパッケージがコンパイル/インストールされたならば、 それらも次のコマンドにより、きちんと削除することができます。

% make clean-depends
    

figlet ユーティリティーを例にあげると、Appendix B, 構築のログのように構築することに より、システムにインストールすることができます。

プログラムはパッケージツリーのデフォルトルート- /usr/pkgにインストール されます。もし、このディレクトリーが趣味にあわないのであれば、環境変数 LOCALBASE を設定してください。この値はパッケージツリーのルートとして使用さ れます。例えば、/usr/localを使う場合、 LOCALBASE=/usr/local と設定してください。 なお、これにはパッケージ専用のディレクトリーを使い、他のプログ ラムと共有させないようにします(つまり、 LOCALBASE=/usr などとしてはいけませ ん)。また、LOCALBASEツリー内には、独自のファイルやディレクトリー (src/, obj/, pkgsrc/ のようなもの)は一切追加しないようにしてください。これは、パッ ケージシステムがインストールするプログラムなどのファイルが、そこにインストー ルされているかもしれない別のファイルと衝突することがないようにするためです。

いくつかのパッケージは、構築時にいくつかのコンフィギュレーションオプション を変えるためにmk.confを参照します。デフォルトの設定項目については、 pkgsrc/mk/defaults/mk.confをのぞいてみてください。LOCALBASE といっ た環境変数は、pkgsrc使用時に毎回使えるようにmk.confで設定しておくこと ができます。

時々、 パッケージの構築やインストールの際に、水面下で何が起きているかを 見たいことがあります。これは、デバッグのためなのかもしれませんし、好奇心が 高じたものかもしれません。このような用途に使うための変数がいくつも用意され ています。

  1. make(1)コマンドを PKG_DEBUG_LEVEL=2付きで呼び出すと、大量の情報が表示さ れるようになります。たとえば、

    make patch PKG_DEBUG_LEVEL=2

    は、patchの段階および、そこに至るまでに呼び出されるコマンドをすべて表示し ます。

  2. 特定のmake(1)定義の値を知りたい場合は、 show-varターゲットとともに、 VARNAME定義を使います。たとえば、 make(1)変数 LOCALBASEの展開結果を表示するには、以下のようにします。

    % make show-var VARNAME=LOCALBASE
    /usr/pkg
    %
    	

自分で作った(次章参照)、手動でpkgsrc/packagesに置いた、またはリモートFTPサー バーに置かれたバイナリーパッケージをインストール したい場合は、"bin-install"ターゲットを使うことができます。このターゲットは、 - もし可能ならば - pkg_add(1)を使ってバイナリーパッケージをインストールするほ か、make packageをおこないます。検索先リモートFTPサーバーのリストは BINPKG_SITES変数に保持され、デフォルトはftp.NetBSD.orgです。pkg_add(1)に与え るべきフラグはすべて、BIN_INSTALL_FLAGS変数で保持することができます。詳細は pkgsrc/mk/defaults/mk.confをご覧ください。

最後に警告: 標準でないLOCALBASE の設定をしたシステムの場合は、 各パッケージのインストール前にこれらを設定するようにしてください。複数のディ レクトリーを同じ目的用に分散して使うことはできないからです。そのようなこと をすると、pkgsrcはインストール済みのパッケージを正しく検出することができず、 無惨に失敗することになるでしょう。また、コンパイル済バイナリーパッケージは、 通常はデフォルトのLOCALBASEである /usr/pkgを使って構築されているので、標準で ないLOCALBASEを使っている場合は、とにかくコンパイル済バイナリーパッケージを インストールしてはいけません