Oracle® Solaris 11.2 での Image Packaging System を使用したソフトウェアのパッケージ化と配布

印刷ビューの終了

更新: 2014 年 7 月
 
 

依存関係を評価する

pkgdepend(1) コマンドを使用して、パッケージの依存関係を自動的に生成します。生成される depend アクションは 依存アクションで定義されており、Chapter 4, パッケージ依存関係の指定で詳しく説明されています。

依存関係の生成は 2 つの別々の手順から成ります。

  1. 依存関係の生成。ソフトウェアが依存するファイルを特定します。pkgdepend generate コマンドを使用します。

  2. 依存関係の解決。ソフトウェアが依存するそれらのファイルを含むパッケージを特定します。pkgdepend resolve コマンドを使用します。

パッケージの依存関係を生成する


ヒント  -  depend アクションを手動で宣言するのではなく、pkgdepend を使用して依存関係を生成するようにします。手動による依存関係は、パッケージの内容が時間の経過に伴って変わると、不正確または不必要になることがあります。たとえば、アプリケーションが依存しているファイルが別のパッケージに移動されると、手動で宣言した前のパッケージへの依存関係はどれもその依存関係にとって正しくないものになります。

手動で宣言した依存関係の一部は、pkgdepend が依存関係を完全に特定できない場合に必要になることがあります。そのような場合は、説明のコメントをマニフェストに追加するようにしてください。

次のコマンドでは、-m オプションによって pkgdepend はマニフェスト全体をその出力に含めます。-d オプションは proto ディレクトリをコマンドに渡します。

$ pkgdepend generate -md proto mypkg.p5m.2 | pkgfmt > mypkg.p5m.3

出力用の mypkg.p5m.3 ファイルには次の内容が含まれています。pkgdepend ユーティリティーは、mylib.so.1mycmd の両方による libc.so.1 への依存関係についての表記を追加しました。mycmdmylib.so.1 の間の内部依存関係は暗黙のうちに省略されます。

set name=pkg.fmri value=mypkg@1.0,5.11-0
set name=pkg.summary value="This is an example package"
set name=pkg.description \
    value="This is a full description of all the interesting attributes of this 
example package."
set name=info.classification \
    value=org.opensolaris.category.2008:Applications/Accessories
set name=variant.arch value=i386
dir  path=opt/mysoftware owner=root group=bin mode=0755
dir  path=opt/mysoftware/bin owner=root group=bin mode=0755
file opt/mysoftware/bin/mycmd path=opt/mysoftware/bin/mycmd owner=root \
    group=bin mode=0644
dir  path=opt/mysoftware/lib owner=root group=bin mode=0755
file opt/mysoftware/lib/mylib.so.1 path=opt/mysoftware/lib/mylib.so.1 \
    owner=root group=bin mode=0644
dir  path=opt/mysoftware/man owner=root group=bin mode=0755
dir  path=opt/mysoftware/man/man1 owner=root group=bin mode=0755
file opt/mysoftware/man/man1/mycmd.1 path=opt/mysoftware/man/man1/mycmd.1 \
    owner=root group=bin mode=0644
link path=usr/share/man/index.d/mysoftware target=/opt/mysoftware/man
depend fmri=__TBD pkg.debug.depend.file=libc.so.1 \
    pkg.debug.depend.reason=opt/mysoftware/bin/mycmd \
    pkg.debug.depend.type=elf type=require pkg.debug.depend.path=lib \
    pkg.debug.depend.path=opt/mysoftware/lib pkg.debug.depend.path=usr/lib
depend fmri=__TBD pkg.debug.depend.file=libc.so.1 \
    pkg.debug.depend.reason=opt/mysoftware/lib/mylib.so.1 \
    pkg.debug.depend.type=elf type=require pkg.debug.depend.path=lib \
    pkg.debug.depend.path=usr/lib

パッケージの依存関係を解決する

依存関係を解決するには、pkgdepend で、イメージに現在インストールされているパッケージのうち、ソフトウェアの構築に使用されるものを調べます。デフォルトでは、pkgdepend はその出力を mypkg.p5m.3.res に格納します。この手順ではそれが実行されているシステムに関する大量の情報をロードするため、実行するのにしばらく時間がかかります。この時間をすべてパッケージに分散させると、pkgdepend ユーティリティーは同時に多くのパッケージを解決できます。1 度に 1 つのパッケージに対して pkgdepend を実行すると、時間効率がよくありません。

$ pkgdepend resolve -m mypkg.p5m.3

これが完了すると、出力用の mypkg.p5m.3.res ファイルには次の内容が含まれています。pkgdepend ユーティリティーは、libc.so.1 へのファイル依存関係についての表記を、そのファイルを配布する pkg:/system/library へのパッケージ依存関係に変換しました。

set name=pkg.fmri value=mypkg@1.0,5.11-0
set name=pkg.summary value="This is an example package"
set name=pkg.description \
    value="This is a full description of all the interesting attributes of this 
example package."
set name=info.classification \
    value=org.opensolaris.category.2008:Applications/Accessories
set name=variant.arch value=i386
dir  path=opt/mysoftware owner=root group=bin mode=0755
dir  path=opt/mysoftware/bin owner=root group=bin mode=0755
file opt/mysoftware/bin/mycmd path=opt/mysoftware/bin/mycmd owner=root \
    group=bin mode=0644
dir  path=opt/mysoftware/lib owner=root group=bin mode=0755
file opt/mysoftware/lib/mylib.so.1 path=opt/mysoftware/lib/mylib.so.1 \
    owner=root group=bin mode=0644
dir  path=opt/mysoftware/man owner=root group=bin mode=0755
dir  path=opt/mysoftware/man/man1 owner=root group=bin mode=0755
file opt/mysoftware/man/man1/mycmd.1 path=opt/mysoftware/man/man1/mycmd.1 \
    owner=root group=bin mode=0644
link path=usr/share/man/index.d/mysoftware target=/opt/mysoftware/man
depend fmri=pkg:/system/library@0.5.11-0.175.2.0.0.18.0 type=require