第13章 pkg-* ファイル

pkg-* ファイルには、 まだ取り上げていない何かと重宝なトリックがいくつかあります。

13.1. pkg-message

もしインストールする人にメッセージを表示する必要がある場合には、 そのメッセージを pkg-message に置くことができます。 この機能は pkg_add(1) の後の追加のインストール手続きを表示するときなどに重宝します。

pkg-message ファイルは pkg-plist に加える必要はありません。 また、もしユーザが package ではなく port を使用している場合には自動的には表示されませんので、 明示的に post-install で表示するようにするべきでしょう。

13.2. pkg-install

バイナリパッケージが pkg_add(1) でインストールされるときに実行する必要のあるコマンドがあれば、 pkg-install スクリプトを使って実行することができます。 このスクリプトは自動的に package に加えられ、 pkg_add(1) によって 2 回実行されます。 1 回目は ${SH} pkg-install ${PKGNAME} PRE-INSTALL として、2 回目には ${SH} pkg-install ${PKGNAME} POST-INSTALL として実行されます。 どちらのモードで実行されているかは $2 を調べることによってわかります。 環境変数 PKG_PREFIX には package がインストールされるディレクトリが設定されます。 詳細は pkg_add(1) を見てください。

port を make install でインストールするときにはこのスクリプトは自動的に実行されません。 もし実行される必要があるならば port の Makefile から明示的に呼ぶ必要があります。

13.3. pkg-deinstall

このスクリプトは package が削除される際に実行されます。

このスクリプトは、pkg_delete(1) から 2 回実行されます。1 回目は ${SH} pkg-install ${PKGNAME} DEINSTALL と、2 回目は ${SH} pkg-install ${PKGNAME} POST-DEINSTALL という形で実行されます。

13.4. pkg-req

(訳注: 実行されるマシンの状態に応じて) その port をインストールするべきか、そうでないかを判断する必要があるときには、 "要件 (requirements)" スクリプト pkg-req を作ることができます。 インストールや削除を実行すべきかどうか判断するために、 このスクリプトがインストールや削除を実行する際に自動的に実行されます。

このスクリプトはインストール時には pkg_add(1) により pkg-req ${PKGNAME} INSTALL として実行され、 削除時には pkg_delete(1) により pkg-req ${PKGNAME} DEINSTALL として 実行されます。

13.5. make の変数にあわせた pkg-plist の変更

いくつかの port、特に p5- ports などは、configure のオプション (あるいは、p5- の場合は perl のバージョン) によって pkg-plist を変える必要があります。 これを容易に実現するために pkg-plist 中の %%OSREL%%, %%PERL_VER%%, %%PERL_VERSION%% は適切に置き換えられるようになっています。 %%OSREL%% の値はオペレーティングシステムの数字で表されたリビジョンです (たとえば 4.9)。 %%PERL_VERSION%%perl のバージョン番号全体 (たとえば 5.00502) で、%%PERL_VER%%perl のバージョン番号からパッチレベルを引いたものです (たとえば 5.005)。

他の置き換えが必要であれば、PLIST_SUB 変数に VAR=VALUE という形式のペアのリストを設定することによって、 pkg-plist 中の %%VAR%%VALUE に置き換えられます。 たとえばバージョンに固有のたくさんのファイルをインストールする場合には、 Makefile

OCTAVE_VERSION= 2.0.13
PLIST_SUB=      OCTAVE_VERSION=${OCTAVE_VERSION}

と書いて、PLIST 中のバージョン番号が表われるすべてのところに、 %%OCTAVE_VERSION%% と書きます。 このようにしておけば、port をアップグレードするときに、 何十行 (時として、何百行) も pkg-plist を書き替えないですみます。

この書き換えは (マニュアルの追加も) pre-installdo-install ターゲットの間に pkg-plist を読み TMPPLIST (デフォルトは WRKDIR/.PLIST.mktmp) に書き込むことによって行なわれます。 もし、あなたの port が PLIST を実行時に生成するのであれば、 pre-install の間かその前に行なうようにしてください。 また、書きかえられたあとのファイルを編集する必要がある場合には、 post-installTMPPLIST を書きかえてください。

13.6. pkg-* ファイルの名前変更

pkg-* ファイルの名前はすべて変数を使用して定義されていますので、 必要であれば Makefile 中で変更可能です。 いくつかの ports で一つの pkg-* ファイルを共有する場合や、 上記のファイルに書き込みをしなければならないときなど特に便利です (pkg-* サブディレクトリに直接書き込むのが良くない理由については WRKDIR 以外への書きこみ を参照してください)。

以下に変数名と そのデフォルト値のリストを示します。 (PKGDIR のデフォルト値は ${MASTERDIR} になっています。)

変数名デフォルト値

DESCR

${PKGDIR}/pkg-descr

PLIST

${PKGDIR}/pkg-plist

PKGINSTALL

${PKGDIR}/pkg-install

PKGDEINSTALL

${PKGDIR}/pkg-deinstall

PKGREQ

${PKGDIR}/pkg-req

PKGMESSAGE

${PKGDIR}/pkg-message

PKG_ARGS を上書きせずにこれらの変数を変更するようにしてください。 PKG_ARGS を変更すると、これらのファイルは port から正しく /var/db/pkg にインストールされなくなります。


最終更新日: 2021年12月11日 by Sergio Carlavilla Delgado