ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Image Packaging System のマニュアルページ Oracle Solaris 11 Information Library (日本語) |
- Image Packaging System 依存関係アナライザ
/usr/bin/pkgdepend [options] command [cmd_options] [operands]
/usr/bin/pkgdepend generate [-IMm] -d dir [-d dir] [-D name=value] [-k path] manifest_file
/usr/bin/pkgdepend resolve [-moSv] [-d output_dir] [-s suffix] manifest_file ...
pkgdepend は、パッケージの依存関係を生成および解決するために使用されます。パッケージは、ほかのパッケージのファイルに依存することがあります。pkgdepend は通常、ファイル依存関係の生成と、ファイルからパッケージへの解決という 2 つのパスで使用されます。
generate サブコマンドはパッケージの内容を検査し、そのパッケージにどのような外部ファイルが必要かを判定します。
resolve サブコマンドは、generate ステップからファイルのリストを取得し、これらの依存ファイルを含むパッケージの名前を判定するためにパッケージの参照セットを検索します。依存ファイルが検索されるパッケージの参照セットは、パブリッシャーのシステムに現在インストールされているパッケージです。
依存関係情報のソースとして、提供されたファイルの次のいくつかのコンポーネントが使用されます。
提供されたファイル内の ELF ヘッダーが依存関係情報のために分析され、-k および -D オプションが指定されていると取得された情報が変更されます。ELF 依存関係についての詳細は、ldd(1) および『リンカーとライブラリ』を参照してください。
インタプリタを参照している #! 行を含むシェルスクリプトによって、そのインタプリタを提供しているパッケージへの依存関係が生成されます。
Python スクリプトはまず、スクリプトとして分析されます。さらに、そのスクリプトでインポートが宣言されていると、それらも依存関係情報のソースとして機能することがあります。
マニフェスト内のハードリンクによって、リンクターゲットを提供しているパッケージへの依存関係が生成されます。
require_all 依存関係を含む提供された SMF サービスマニフェストによって、これらの FMRI を提供する SMF マニフェストを提供しているパッケージへの依存関係が生成されます。
サポートしているオプションは、次のとおりです。
dir をルートとするイメージを操作します。ディレクトリが指定されなかったか、または環境に基づいて決定される場合、デフォルトは / です。詳細は、「環境変数」のセクションを参照してください。
使用方法に関するメッセージを表示します。
サポートされているサブコマンドは次のとおりです。
manifest_file で指定されたマニフェストのファイルへの依存関係を生成します。
-I が指定されている場合は、manifest_file 内で満たされている依存関係を表示します。-I と pkgdepend resolve の結果を使用しないでください。
-M が指定されている場合は、分析できなかったファイルタイプのリストを表示します。
-m が指定されている場合は、元のマニフェストを繰り返してから、検出された依存関係をすべて追加します。
-d が指定されている場合は、マニフェストのファイルを検索するディレクトリのリストに dir を追加します。
-D が指定されるたびに、ELF ファイル依存関係のための実行パス内のトークン name を展開する方法として value を追加します。
-k が指定されるたびに、カーネルモジュールを検索する実行パスのリストに path を追加します。-k 引数を使用すると、デフォルトのパス (/kernel と /usr/kernel) が削除されます。
-k オプションで指定されるような実行パスは、アクションまたはマニフェスト属性 pkg.depend.runpath を使用して、アクションごとまたはマニフェストごとにも指定できます。pkg.depend.runpath 属性の値は、使用するパスのコロンで区切られた文字列です。
-k の使用は、マニフェストまたはアクションで設定された任意の pkg.depend.runpath 属性によって上書きされます。
pkg.depend.runpath 属性値の 1 つのコンポーネントとして、特殊なトークン $PKGDEPEND_RUNPATH を使用すると、分析対象のファイルのための標準のシステム実行パスを含めることができます。
場合によっては、依存関係が自動的に生成されることを回避したいことがあります。たとえば、あるパッケージによって、一連のモジュールをインポートするサンプルの Python スクリプトが提供される場合、そのサンプルスクリプトによってインポートされるこれらのモジュールは、サンプルスクリプトを提供しているパッケージの依存関係ではありません。指定されたファイルに対する依存関係の生成を回避するには、アクションまたはマニフェスト属性 pkg.depend.bypass-generate を使用します。
pkg.depend.bypass-generate 値は、ファイル名に一致する Python の正規表現です。これらの正規表現は、ファイルパスの先頭と最後に暗黙的に固定されます。次の例で指定されている値は this/that に一致しますが、something/this/that/the/other には一致しません。
pkg.depend.bypass-generate=this/that
Python 正規表現の構文については、コマンド pydoc re を使用するか、または http://docs.python.org/dev/howto/regex.html にあるより完全なドキュメントを参照してください。
pkgdepend generate 入力マニフェストに SMF マニフェストファイルが含まれる場合、それらの SMF マニフェストファイルによって宣言されている SMF サービスまたはインスタンスが pkgdepend の出力に含まれます。これらの SMF サービスまたはインスタンスは、org.opensolaris.smf.fmri の名前で set アクションの形式で含まれます。
ファイルへの依存関係を、これらのファイルを提供するパッケージへの依存関係に変換します。依存関係は、まずコマンド行に指定されたマニフェストに基づいて解決され、次にシステムにインストールされているパッケージに基づいて解決されます。デフォルトでは、各マニフェストの依存関係は manifest_file.res という名前のファイルに格納されます。
-m が指定されている場合は、解決された依存関係を追加する前に、generate ステップによって生成された依存関係をすべて削除して、マニフェストを繰り返します。
-o が指定されている場合は、結果を標準出力に書き込みます。このオプションは、人による使用を目的にしています。この出力をファイルに追加すると、無効なマニフェストが生成されることがあります。マニフェスト処理のパイプラインでは、-o の代わりに -d または -s オプションを使用することを強くお勧めします。
-d が指定されている場合は、指定された各マニフェストの解決された依存関係を output_dir 内の個別のファイルに書き込みます。デフォルトでは、各ファイルには、そのファイルに書き込まれた依存関係のソースだったマニフェストと同じベース名が付けられます。
-s が指定されている場合は、出力ファイルごとに、解決された依存関係のソースだったファイルのベース名に suffix を追加します。「.」が suffix に付加されます (指定されていない場合)。
-S が指定されている場合は、コマンド行で指定されたマニフェストに対してのみ解決し、システムにインストールされているマニフェストに対しては解決しません。
-v が指定されている場合は、追加のパッケージ依存関係デバッグ用のメタデータを含めます。
例 1 依存関係を生成する
foo (このコンテンツディレクトリは ./bar/baz 内に存在する) に書き込まれているマニフェストの依存関係を生成し、その結果を foo.fdeps に格納します。
$ pkgdepend generate -d ./bar/baz foo > foo.fdeps
例 2 依存関係を解決する
foo.fdeps と bar.fdeps における互いに対するファイル依存関係と、システムに現在インストールされているパッケージに対するファイル依存関係を解決します。
$ pkgdepend resolve foo.fdeps bar.fdeps $ ls *.res foo.fdeps.res bar.fdeps.res
例 3 2 つのマニフェストの依存関係を生成および解決する
2 つのマニフェスト (foo と bar) へのファイル依存関係を生成し、すべての情報を元のマニフェスト内に保持します。次に、これらのファイル依存関係を解決し、結果のマニフェストを ./res 内に格納します。これらの結果のマニフェストは、pkgsend publish で使用できます。
$ pkgdepend generate -d /proto/foo -m foo > ./deps/foo $ pkgdepend generate -d /proto/bar -m bar > ./deps/bar $ pkgdepend resolve -m -d ./res ./deps/foo ./deps/bar $ ls ./res foo bar
例 4 ELF ファイル依存関係のためのトークンに値を追加する
コンテンツディレクトリが / 内に存在する foo に書き込まれているマニフェストの依存関係を生成するときに、ELF ファイルの実行パス内のすべての PLATFORM トークンを sun4v と sun4u に置き換えます。
$ pkgdepend generate -d / -D 'PLATFORM=sun4v' -D 'PLATFORM=sun4u' foo
例 5 カーネルモジュールディレクトリを指定する
コンテンツディレクトリが / 内に存在する foo に書き込まれているマニフェストの依存関係を生成するときに、カーネルモジュールを検索するディレクトリとして /kmod を指定します。
$ pkgdepend generate -d / -k /kmod foo
例 6 依存関係の生成をバイパスする
指定された Python スクリプトの標準の Python 実行パスに opt/python を追加し、opt/python/foo/file.py として提供されるファイルの test という名前のすべての Python モジュールに対する依存関係の生成をバイパスします。
usr/lib/python2.6/vendor-packages/xdg で提供されたすべてのファイルに対する依存関係の生成を回避します。
$ cat manifest.py set name=pkg.fmri value=pkg:/mypackage@1.0,1.0 set name=pkg.summary value="My test package" dir path=opt mode=0755 group=sys owner=root dir path=opt/python mode=0755 group=sys owner=root dir path=opt/python/foo mode=0755 group=sys owner=root file NOHASH path=opt/python/__init__.py mode=0644 group=sys owner=root file NOHASH path=opt/python/foo/__init__.py mode=0644 group=sys owner=root # # Add runpath and bypass-generate attributes: # file NOHASH path=opt/python/foo/file.py mode=0644 group=sys owner=root \ pkg.depend.bypass-generate=.*/test.py.* \ pkg.depend.bypass-generate=.*/testmodule.so \ pkg.depend.bypass-generate=.*/test.so \ pkg.depend.bypass-generate=usr/lib/python2.6/vendor-packages/xdg/.* \ pkg.depend.runpath=$PKGDEPEND_RUNPATH:/opt/python $ pkgdepend generate -d proto manifest.py
パッケージ操作に使用するイメージを含むディレクトリを指定します。-R が指定されている場合は、この値は無視されます。
次の終了ステータスが返されます。
すべてが動作しました。
エラーが発生した。
無効なコマンド行オプションが指定された。
予期しない例外が発生しました。
次の属性については、attributes(5) を参照してください。
|
http://hub.opensolaris.org/bin/view/Project+pkg/