---
title: 第13章 pkg-* ファイル
prev: books/porters-handbook/porting-info
next: books/porters-handbook/testing
---

[[pkg-files]]
= [.filename]#pkg-*# ファイル
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:source-highlighter: rouge
:experimental:
:skip-front-matter:
:xrefstyle: basic
:relfileprefix: ../
:outfilesuffix:
:sectnumoffset: 13
:toc-title: 目次
:table-caption: 表
:figure-caption: 図
:example-caption: 例 

include::shared/authors.adoc[]
include::shared/releases.adoc[]
include::shared/ja/mailing-lists.adoc[]
include::shared/ja/teams.adoc[]
include::shared/ja/urls.adoc[]

toc::[]

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

[[porting-message]]
== [.filename]#pkg-message#

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

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

[[pkg-install]]
== [.filename]#pkg-install#

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

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

[[pkg-deinstall]]
== [.filename]#pkg-deinstall#

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

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

[[pkg-req]]
== [.filename]#pkg-req#

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

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

[[porting-plist]]
== make の変数にあわせた [.filename]#pkg-plist# の変更

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

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

[.programlisting]
....
OCTAVE_VERSION= 2.0.13
PLIST_SUB=      OCTAVE_VERSION=${OCTAVE_VERSION}
....

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

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

[[pkg-names]]
== [.filename]#pkg-*# ファイルの名前変更

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

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

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| 変数名
| デフォルト値

|`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 から正しく [.filename]#/var/db/pkg# にインストールされなくなります。
