.\" .\" FreeBSD install - a package for the installation and maintainance .\" of non-core utilities. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" Jordan K. Hubbard .\" .\" .\" @(#)pkg_create.1 .\" jpman %Id: pkg_create.1,v 1.3 1997/06/09 10:11:56 jsakai Stab % .\" %Id: pkg_create.1,v 1.16.2.8 1998/05/24 03:13:00 steve Exp % .\" .\" hacked up by John Kohl for NetBSD--fixed a few bugs, extended keywords, .\" added dependency tracking, etc. .\" .\" [jkh] Took John's changes back and made some additional extensions for .\" better integration with FreeBSD's new ports collection. .\" .Dd April 21, 1995 .Dt pkg_create 1 .Os FreeBSD .Sh 名称 .Nm pkg_create .Nd ソフトウェア配布パッケージを作成するプログラム .Sh 書式 .Nm .Op Fl YNOhv .Op Fl P Ar pkgs .Op Fl p Ar prefix .Op Fl f Ar contents .Op Fl i Ar iscript .Op Fl k Ar dscript .Op Fl r Ar rscript .Op Fl s Ar rscript .Op Fl t Ar template .Op Fl X Ar excludefile .Op Fl D Ar displayfile .Op Fl m Ar mtreefile .Fl c Ar comment .Fl d Ar description .Fl f Ar packlist .Ar pkg-name .Sh 解説 この .Nm コマンドは、パッケージ展開/情報プログラムに渡されるパッケージを 作成します。 パッケージ作成のために入力する説明とコマンドライン引数 は本来人間が生成することを意図していませんが、 そうすることも簡単にできます。 自力でどうにかすることも可能ですが、作成にはフロントエンドツールを 用いた方がいいでしょう。 とはいうものの、入力書式の概略はこの文書に含まれています。 .Sh オプション 以下のコマンドラインオプションが提供されています: .Bl -tag -width indent .It Fl f Ar packinglist ファイル .Ar packinglist から、もしくは .Ar packinglist が .Cm - (ダッシュ)であれば .Cm stdin から、パッケージ用の ``packing list'' を取得します。 .It Fl c Ar [-]desc ファイル .Ar desc から、もしくは先頭が .Cm - で始まっていれば引数自身から、パッケージの ``一行説明'' を取得します。 この文字列は、パッケージが提供するもののバージョンを知る 手がかりとなるべきです。 .It Fl d Ar [-]desc ファイル .Ar desc から、もしくは先頭が .Cm - で始まっていれば引数自身から、パッケージの長い説明を取得します。 .It Fl Y 質問に対してのデフォルトの解答を `Yes' とします。 .It Fl N 質問に対してのデフォルトの解答を `No' とします。 .It Fl O `packing list Only' モードに移行します。 これは .Em "FreeBSD Ports Collection" のための特別な修正であり、port がインストールされる時の `fake pkg_add' を行うために用いられます。 このような場合には、調整された最終的な packing list が どのようなものになるかを知る必要があるのです。 .It Fl v 饒舌な出力に切り替えます。 .It Fl h tar がシンボリックリンクをたどるようにします。 この結果、リンク自身ではなくリンク先のファイルが出力されます。 .It Fl i Ar iscript パッケージのインストール手続きとして .Ar iscript を用います。 これは実行可能なプログラム (もしくはシェルスクリプト) なら なんでも構いません。 これはパッケージがインストールされる時に自動的に起動されます。 .It Fl P Ar pkgs 初期のパッケージ依存リストとして .Ar pkgs を用います。 これはホワイトスペースで区切られたパッケージの名前となります。 また、packing list (後述の「PACKING LIST 詳細」セクションを参照) 内の複数の .Cm @pkgdep ディレクティブを指定する手っ取り早い方法でもあります。 .It Fl p Ar prefix パッケージのファイルを選択する際に基準となる初期ディレクトリとして .Ar prefix を用います。 .It Fl k Ar dscript パッケージのアンインストール手続きとして .Ar dscript を用います。 これは実行可能なプログラム (もしくはシェルスクリプト) なら なんでも構いません。 これはパッケージがアンインストールされる時に自動的に起動されます。 .It Fl r Ar rscript パッケージの ``requirements'' 手続きとして .Ar rscript を用います。 これは実行可能なプログラム (もしくはシェルスクリプト) なら なんでも構いません。 これはインストール時、アンインストール時に自動的に起動され、 インストール、アンインストールを継続するべきかどうかを決定するのに 用いられます。 .It Fl s Ar srcdir パッケージ作成中に .Ar srcdir は、 .Cm @cwd の値に優先します。 .It Fl t Ar template .Xr mktemp 3 への入力として .Ar template を用います。 これはデフォルトでは .Pa /tmp/instmp.XXXXXX という文字列ですが、 .Pa /tmp ディレクトリの容量が制限されているような状況では 変更する必要があるかもしれません。 .Xr mktemp 3 が一意の ID を用いるために必要な `X' の文字をいくつか残しておく ことを忘れないでください。 .It Fl X Ar excludefile 最終的にパッケージを作成する際に、 .Ar excludefile を .Cm tar に .Fl exclude-from 引数として渡します。 このオプションを使うにあたっての詳しい情報は、 .Cm tar のマニュアルページ (もしくは .Fl -help 引数を付けて .Cm tar を実行) を参照してください。 .It Fl D Ar displayfile パッケージをインストールした後にファイルを ( .Xr more 1 を用いて) 表示します。 「ほとんど free なソフトウェア」などにおいて、 法的な通知のようなものなどに便利でしょう。 .It Fl m Ar mtreefile パッケージがインストールされる前に、mtreefile を入力として .Xr mtree 8 を実行します。mtree は .Cm mtree .Fl u .Fl f .Ar mtreefile .Fl d .Fl e .Fl p .Pa prefix として起動されます (ただし .Pa prefix は .Cm @cwd ディレクティブにより名付けられた最初のディレクトリの名前)。 .El .Pp .Sh PACKING LIST 詳細 ``packing list'' の書式 ( .Fl f を参照) は単純で、パッケージに含めるファイル名を一行につきひとつずつ 並べたものにすぎません。 どこにインストールされるかわからないパッケージに対して絶対パスを 用いるのは一般的に悪い方法なので、 どこにインストールされることを想定しているのか、 そしてどんな ownership と mode を伴ってインストールされるべきなのか (こちらはオプション) を指定する方法が用意されています。 これは packing list 内に一連の特殊コマンドを 埋め込むことで実現されています。以下に簡単に示します: .Bl -tag -width indent -compact .It Cm @cwd Ar directory 内部のディレクトリポインタが .Ar directory を指すようにします。以降のファイル名はこのディレクトリへの相対パス であるとみなされます。 .Cm @cd はこのコマンドの別名です。 .It Cm @srcdir Ar directory 「作成時のみ」の内部ディレクトリポインタを .Ar directory に設定します。 パッケージ作成時に .Cm @cwd に優先すると言えますが、展開時にはこれはあてはまりません。 .It Cm @exec Ar command 展開処理の一環として .Ar command を実行します。 .Ar command が以下の文字列を含んでいた場合、その場で置換されます。 以下の例では .Cm @cwd が .Pa /usr/local と設定されていて、最後に展開されたファイルが .Pa bin/emacs だったとしています。 .Bl -tag -width indent -compact .It Cm "%F" 最後に展開されたファイル名に置換されます。この例では .Pa bin/emacs となります。 .It Cm "%D" .Cm @cwd で設定されたカレントディレクトリプレフィックスに置換されます。 この例では .Pa /usr/local になります。 .It Cm "%B" 完全な(フルパスの)ファイル名の ``basename'' へ置換されます。 これはカレントディレクトリプレフィックスに最後の filespec を 加え、末尾のファイル名部分を除いたものです。 この例では、 .Pa /usr/local/bin になります。 .It Cm "%f" 完全な (フルパスを含む) ファイル名の ``filename'' 部分へ置換されます。 .Cm %B と対応していて、この例では .Pa emacs となります。 .El .It Cm @unexec Ar command アンインストール処理の一環として .Ar command を実行します。特別な .Cm % 文字列の置換は .Cm @exec と同様です。 このコマンドは .Cm @exec のようにパッケージを加える際に実行されるのではなく、パッケージが 削除されるときに実行されます。 これは、パッケージを加えるときに作られたリンクや他の 付随ファイル (パッケージの内容一覧に記されているファイルは自動的に 削除されるので除く) を削除するのに便利です。 アンインストールスクリプトよりも .Cm @unexec を用いる方が有利な点は、どこにインストールされているかわからない ( .Fl p を参照) ファイルの場所を得るのに ``特殊文字列置換'' を用いることが 可能なことです。 .It Cm @mode Ar mode この後で展開されるすべてのファイルのデフォルトの許可属性を .Ar mode に設定します。 書式は .Cm chmod コマンドで用いられているものと同じです (というよりも、そのまま 渡されています)。 引数無しで用いると、デフォルトの(展開)許可属性に戻します。 .It Cm @option Ar option 内部用パッケージオプションを設定します。 現在二つのオプションのみがサポートされています。 ひとつは .Ar extract-in-place で、これは pkg_add コマンドにパッケージの tarball を staging area に展開せずに、目的の階層に直接展開するよう指示します (これは主に配布物や他の特殊なパッケージなどに用いられます)。 もうひとつは .Ar preserve で、存在するファイルを別の所に保存しておくよう pkg_add に指示します (これらは pkg_delete の時に復活しますが、自分の責任で行ってください)。 .It Cm @owner Ar user この後で展開されるすべてのファイルのデフォルトの ownership を .Ar user に設定します。 引数無しで用いると、デフォルトの(展開) ownership に戻します。 .It Cm @group Ar group この後で展開されるすべてのファイルのデフォルトの group ownership を .Ar group に設定します。 引数無しで用いると、デフォルトの(展開) group ownership に戻します。 .It Cm @comment Ar string packing list 内にコメントを埋め込みます。 誰かが後で間違えてしまうかもしれない特に厄介な部分を説明しようとする 場合に便利です。 .It Cm @ignore 特殊な目的に使われるファイルなどのため、展開時に次のファイルを 無視する (どこにもコピーしない) ように、内部で用いられます。 .It Cm @ignore_inst .Cm @ignore と同様ですが、次のファイルを無視するのは一評価サイクルだけ 遅らせられます。 このおかげでこのディレクティブを .Ar packinglist ファイル内で用いることが可能になるので、インストーラが 無視するような、インストールスクリプトなどのための特殊な データファイルを、配布物内に入れることができるようになります。 .It Cm @name Ar name パッケージの名前を設定します。 これは必須項目であり、通常先頭に置かれます。 この名前はパッケージが提供するファイルの名前とは異なる可能性があり、 後でアンインストールする時のために パッケージの記録を残しておくのに使われます。 名前が指定されなかった場合には、 .Nm はパッケージ名から推定し、自動的に設定することに注意してください。 .It Cm @dirrm Ar name ディレクトリ .Pa name がアンインストール時に削除されるよう宣言します。デフォルトでは、 パッケージのインストール時に作成されたディレクトリは アンインストール時には削除されませんが、このディレクティブは明示的な ディレクトリ削除方法を提供します。 このディレクティブはパッケージリストの最後で用いるようにしてください。 一つ以上の .Cm @dirrm ディレクティブが指定された場合、指定された順番に削除されます。 .Pa name は空きディレクトリでなければ削除されません。 .It Cm @mtree Ar name .Pa name を、インストール時に用いられる .Xr mtree 8 への入力ファイルとして宣言します (上述の .Fl m を参照)。最初にひとつだけ .Cm @mtree ディレクティブを指定することが推奨されます。 .It Cm @display Ar name .Pa name を、インストール時に表示されるファイルとして宣言します (上述の .Fl D を参照)。 .It Cm @pkgdep Ar pkgname パッケージ .Ar pkgname に依存することを宣言します。 パッケージ .Ar pkgname はこのパッケージがインストールされる前にインストールされていなければ ならず、またこのパッケージはパッケージ .Ar pkgname がアンインストールされる前にアンインストールされなければなりません。 パッケージが複数のパッケージに依存する場合には、複数の .Cm @pkgdep ディレクティブが用いられます。 .El .Sh 関連項目 .Xr pkg_add 1 , .Xr pkg_delete 1 , .Xr pkg_info 1 , .Xr sysconf 3 . .Sh 歴史 .Nm コマンドは FreeBSD で最初に登場しました。 .Sh 作者 .Bl -tag -width indent -compact .It "Jordan Hubbard" ほとんどの仕事 .It "John Kohl" NetBSD 向け修正 .El .Sh バグ パッケージが展開される際にハードリンクを保存しておくために、 配布物のファイル間でのハードリンクは .Cm @cwd ディレクティブで括られていなければなりません。 その上、実行時の引数の長さの制限 (これは .Fn sysconf _SC_ARG_MAX により返される値に依存します) のために、それらのハードリンクは単一の .Cm tar 実行内で行われなければなりません。 .Pp バグは他にもあるはずです。