スポンサーリンク

PKG_CREATE(1) FreeBSD 一般コマンドマニュアル PKG_CREATE(1)

名称

pkg_create − ソフトウェア配布 package を作成するプログラム

書式

pkg_create [−YNOhjvyz] [−C conflicts] [−P pkgs] [−p prefix] [−i iscript] [−I piscript] [−k dscript] [−K pdscript] [−r rscript] [−s srcdir] [−S basedir] [−t template] [−X excludefile] [−D displayfile] [−m mtreefile] [−o originpath] −c comment −d description −f packlist pkg-filename

pkg_create [−YNhvy] −b pkg-name [pkg-filename]

解説

この pkg_create コマンドは、package 展開/情報プログラムに渡される package (訳注: FreeBSD の package system におけるパッケージを指す場合にこう表記し ます) を作成します。 package 作成のために入力する説明とコマンドライン引数 は本来人間が生成することを意図していませんが、そうすることも簡単にできま す。自力でどうにかすることも可能ですが、作成にはフロントエンドツールを用 いた方がいいでしょう。とはいうものの、入力書式の概略はこの文書に含まれて います。

オプション

以下のコマンドラインオプションが提供されています:

       −f packinglist

ファイル packinglist から、もしくは packinglist- (ダッシュ)で あれば stdin から、package 用の ‘‘packing list’’ を取得します。

−c
[
]desc
ファイル desc から、もしくは先頭が - で始まっていれば引数自身か ら、package の ‘‘一行説明’’ を取得します。この文字列は、package が提供するもののバージョンを知る手がかりとなるべきです。

−d
[
]desc
ファイル desc から、もしくは先頭が - で始まっていれば引数自身か ら、package の長い説明を取得します。

−Y
質問に対してのデフォルトの回答を ‘Yes’ とします。

−N
質問に対してのデフォルトの回答を ‘No’ とします。

−O
‘packing list Only’ モードに移行します。これは FreeBSD Ports Collection のための特別な修正であり、port がインストールされる時 の ‘fake pkg_add’ を行うために用いられます。このような場合には、 調整された最終的な packing list がどのようなものになるかを知る必 要があるのです。

−v
饒舌な出力に切り替えます。

−h
tar がシンボリックリンクをたどるようにします。この結果、リンク自 身ではなくリンク先のファイルが出力されます。

−i iscript
package のインストール前手続きとして iscript を用います。これは実 行可能なプログラム (もしくはシェルスクリプト) ならなんでも構いま せん。これは package がインストールされる時に自動的に起動されま す。その際、package 名が第 1 引数として渡されます。

: −I オプションが指定されない場合、本スクリプトは当該 package の pre-install および post-install の両方のスクリプトとして動作し ます。 package 名の後にキーワード PRE-INSTALL および POST-INSTALL をそれぞれ渡すことにより、機能を切り替えることになります。

−I piscript
package のインストール後手続きとして piscript を用います。これは 実行可能なプログラム (もしくはシェルスクリプト) ならなんでも構い ません。これは package がインストールされる時に自動的に起動されま す。その際、package 名が第 1 引数として渡されます。

−C conflicts
初期の package 衝突リストとして conflicts を用います。これは、空 白で区切った package 名のリストとみなされ、 packing list 中で複数 の @conflicts ディレクティブを指定する手っ取り早い方法でもありま す (後述の PACKING LIST 詳細節を参照してください)。

−P pkgs
初期の package 依存リストとして pkgs を用います。これは空白で区切 られた package の名前となります。また、packing list (後述の PACKING LIST 詳細セクションを参照) 内の複数の @pkgdep ディレク ティブを指定する手っ取り早い方法でもあります。 pkgs リストの各引 数は pkgname[:pkgorigin] という書式です。省略可能な pkgorigin 要 素は、リストからの各依存の起源を表し、 pkgname と共に @comment ディレクティブを使用して packing list 中に記録されます。

−p prefix
package のファイルを選択する際に ‘‘基準’’ となる初期ディレクトリ として prefix を用います。

−k dscript
package のアンインストール手続きとして dscript を用います。これは 実行可能なプログラム (もしくはシェルスクリプト) ならなんでも構い ません。これは package がアンインストールされる時に自動的に起動さ れます。その際、package 名が第 1 引数として渡されます。

: −K オプションが指定されない場合、本スクリプトは当該 package の de-install および post-deinstall の両方のスクリプトとして動作 します。 package 名とともにキーワード DEINSTALL および POST-DEINSTALL をそれぞれ渡すことにより、機能を切り替えることにな ります。

−K pdscript
package のアンインストール後手続きとして pdscript を用います。こ れは実行可能なプログラム (もしくはシェルスクリプト) ならなんでも 構いません。これは package がアンインストールされる時に自動的に起 動されます。その際、package 名が第 1 引数として渡されます。

−r rscript
package の ‘‘requirements’’ 手続きとして rscript を用います。これ は実行可能なプログラム (もしくはシェルスクリプト) ならなんでも構 いません。これはインストール時、アンインストール時に自動的に起動 され、インストール、アンインストールを継続するべきかどうかを決定 するのに用いられます。インストールとアンインストールを区別するた めに、キーワード INSTALLDEINSTALL がそれぞれ、package 名と共 に渡されます。

−s srcdir
package 作成中に srcdir は、 @cwd の値に優先します。

−S basedir
package 作成の間、 basedir がすべての @cwd の前に付けられます。

−t template
mktemp(3) への入力として template を用います。これはデフォルトで は /tmp/instmp.XXXXXX という文字列ですが、 /tmp ディレクトリの容 量が制限されているような状況では変更する必要があるかもしれませ ん。 mktemp(3) が一意の ID を用いるために必要な ‘X’ の文字をいく つか残しておくことを忘れないでください。

−X excludefile
最終的に package を作成する際に、 excludefiletar−exclude-from 引数として渡します。このオプションを使うにあたって の詳しい情報は、 tar のマニュアルページ (もしくは −-help 引数を付 けて tar を実行) を参照してください。

−D displayfile
package をインストールした後にファイルを (連結して標準出力へ) 表 示します。「ほとんど free なソフトウェア」などにおいて、法的な通 知のようなものなどに便利でしょう。

−m mtreefile
package がインストールされる前に、mtreefile を入力として mtree(8) を実行します。mtree は mtree −u −f mtreefile −d −e −p prefix とし て起動されます (ただし prefix@cwd ディレクティブにより名付け られた最初のディレクトリの名前)。

−o originpath
originpath
を、 FreeBSD Ports Collection 中で package が作成され た場所として記録します。この書式は、 MASTERCATEGORY/PORTDIR であ るべきです。

−j
package の tarball を圧縮するために、 bzip2(1) ユーティリティを gzip(1) の代りに使用します。最終的なアーカイブの書式が、認識可能 なサフィックスによって pkg-filename で明示的に指定されている場 合、本オプションは無効であることに注意してください。現在 pkg_create は、次のサフィックスを認識します: .tbz, .tgz, .tar

−y
互換性のための、 −j の同義語です。

−z
package の tarball を圧縮するために、 gzip(1) ユーティリティを使 用します。

−b pkg-name
pkg-name
という名前でローカルにインストールされた package から、 package ファイルを作成します。 pkg-filename が指定されない場合、 最終的なアーカイブはカレントディレクトリに作成され、 pkg-name に 対して伸長用の適切なサフィックスが付いた名前となります。

PACKING LIST 詳細

‘‘packing list’’ の書式 ( −f を参照) は単純で、package に含めるファイル名 を一行につきひとつずつ並べたものにすぎません。どこにインストールされるか わからない package に対して絶対パスを用いるのは一般的に悪い方法なので、ど こにインストールされることを想定しているのか、そしてどんな ownership と mode を伴ってインストールされるべきなのか (こちらはオプション) を指定する 方法が用意されています。これは packing list 内に一連の特殊コマンドを埋め 込むことで実現されています。以下に簡単に示します:

       @cwd directory

内部のディレクトリポインタが directory を指すようにします。以降の ファイル名はこのディレクトリへの相対パスであるとみなされます。注: @cd はこのコマンドの別名です。
@srcdir
directory
「作成時のみ」の内部ディレクトリポインタを directory に設定しま す。 package 作成時に @cwd に優先すると言えますが、展開時にはこれ はあてはまりません。
@exec
command
展開処理の一環として command を実行します。 command が以下の文字 列を含んでいた場合、その場で置換されます。以下の例では @cwd/usr/local と設定されていて、最後に展開されたファイルが bin/emacs だったとしています。
%F

最後に展開されたファイル名に置換されます。この例では bin/emacs となります。
%D
@cwd
で設定されたカレントディレクトリプレフィックスに置換 されます。この例では /usr/local になります。
%B

完全な (フルパスの) ファイル名の ‘‘basename’’ へ置換され ます。これはカレントディレクトリプレフィックスに最後の filespec を加え、末尾のファイル名部分を除いたものです。こ の例では、 /usr/local/bin になります。
%f

完全な (フルパスを含む) ファイル名の ‘‘filename’’ 部分へ 置換されます。 %B と対応していて、この例では emacs となり ます。
@unexec
command
アンインストール処理の一環として command を実行します。特別な % 文字列の置換は @exec と同様です。このコマンドは @exec のように package を加える際に実行されるのではなく、package が削除されると きに実行されます。これは、package を加えるときに作られたリンクや 他の付随ファイル (package の内容一覧に記されているファイルは自動 的に削除されるので除く) を削除するのに便利です。アンインストール スクリプトよりも @unexec を用いる方が有利な点は、どこにインストー ルされているかわからない ( −p を参照) ファイルの場所を得るのに ‘‘ 特殊文字列置換’’ を用いることが可能なことです。
@mode
mode
この後で展開されるすべてのファイルのデフォルトの許可属性を mode に設定します。書式は chmod コマンドで用いられているものと同じです (というよりも、そのまま渡されています)。引数無しで用いると、デ フォルトの (展開) 許可属性に戻します。
@option
option
内部用 package オプションを設定します。現在二つのオプションのみが サポートされています。ひとつは extract-in-place で、これは pkg_add コマンドに package の tarball を staging area に展開せず に、目的の階層に直接展開するよう指示します (これは主に配布物や他 の特殊な package などに用いられます)。もうひとつは preserve で、 存在するファイルを別の所に保存しておくよう pkg_add に指示します ( これらは pkg_delete の時に復活しますが、自分の責任で行ってくださ い)。
@owner
user
この後で展開されるすべてのファイルのデフォルトの ownership を user に設定します。引数無しで用いると、デフォルトの (展開) ownership に戻します。
@group
group
この後で展開されるすべてのファイルのデフォルトの group ownership を group に設定します。引数無しで用いると、デフォルトの (展開) group ownership に戻します。
@comment
string
packing list 内にコメントを埋め込みます。誰かが後で間違えてしまう かもしれない特に厄介な部分を説明しようとする場合に便利です。
@ignore

特殊な目的に使われるファイルなどのため、展開時に次のファイルを無 視する (どこにもコピーしない) ように、内部で用いられます。
@ignore_inst
@ignore
と同様ですが、次のファイルを無視するのは一評価サイクルだ け遅らせられます。このおかげでこのディレクティブを packinglist ファイル内で用いることが可能になるので、インストーラが無視するよ うな、インストールスクリプトなどのための特殊なデータファイルを、 配布物内に入れることができるようになります。
@name
name
package の名前を設定します。これは必須項目であり、通常先頭に置か れます。この名前は package が提供するファイルの名前とは異なる可能 性があり、後でアンインストールする時のために package の記録を残し ておくのに使われます。名前が指定されなかった場合には、 pkg_create は package 名から推定し、自動的に設定することに注意してください。
@dirrm
name
ディレクトリ name がアンインストール時に削除されるよう宣言しま す。デフォルトでは、 package のインストール時に作成されたディレク トリはアンインストール時には削除されませんが、このディレクティブ は明示的なディレクトリ削除方法を提供します。このディレクティブは package リストの最後で用いるようにしてください。一つ以上の @dirrm ディレクティブが指定された場合、指定された順番に削除されます。 name は空きディレクトリでなければ削除されません。
@mtree
name
name
を、インストール時に用いられる mtree(8) への入力ファイルとし て宣言します (上述の −m を参照)。最初にひとつだけ @mtree ディレク ティブを指定することが推奨されます。
@display
name
name
を、インストール時に表示されるファイルとして宣言します (上述 の −D を参照)。
@pkgdep
pkgname
package pkgname に依存することを宣言します。 package pkgname はこ の package がインストールされる前にインストールされていなければな らず、またこの package は package pkgname がアンインストールされ る前にアンインストールされなければなりません。 package が複数の package に依存する場合には、複数の @pkgdep ディレクティブが用いら れます。
@conflicts
pkgcflname
pkgcflname
package との衝突を宣言します。これは、ふたつの package が同じファイルへの参照を持ち、同一システムに共存できないことが理 由です。

環境変数

環境変数 PKG_TMPDIR で、 pkg_create が作業用ファイルの生成を試みるディレ クトリの名前を指定します。 PKG_TMPDIR が設定されていない場合、 TMPDIR で 指定されたディレクトリが使用されます。 PKG_TMPDIR 、 TMPDIR ともに設定さ れていない場合は、組み込みのデフォルトディレクトリが使用されます。

関連ファイル

       /var/tmp

環境変数 PKG_TMPDIR 、 TMPDIR がともに設定されていない場合の作 業用ディレクトリ。
/tmp
/var/tmp
が存在しない場合の、その次の選択肢。
/usr/tmp
/tmp
が適切でない場合の、最後の選択肢。

関連項目

pkg_add(1), pkg_delete(1), pkg_info(1), pkg_version(1), sysconf(3)

歴史

pkg_create コマンドは FreeBSD で最初に登場しました。

作者

Jordan Hubbard

協力者

John Kohl ⟨jtk@rational.com⟩, Oliver Eikemeier ⟨eik@FreeBSD.org⟩

バグ

package が展開される際にハードリンクを保存しておくために、配布物のファイ ル間でのハードリンクは @cwd ディレクティブで括られていなければなりませ ん。その上、実行時の引数の長さの制限 (これは sysconf(_SC_ARG_MAX) により 返される値に依存します) のために、それらのハードリンクは単一の tar 実行内 で行われなければなりません。

バグは他にもあるはずです。

FreeBSD 10.0 June 29, 2004 FreeBSD 10.0

スポンサーリンク