ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 での Image Packaging System を使用したソフトウェアのパッケージ化および配布 Oracle Solaris 11.1 Information Library (日本語) |
このセクションでは、SVR4 パッケージから IPS パッケージへの変換例について説明し、特別な注意が必要な部分を強調して説明します。
SVR4 パッケージから IPS パッケージに変換するには、この章で前述した、IPS でソフトウェアをパッケージ化するための手順と同じ手順に従います。これらの手順のほとんどは、SVR4 から IPS パッケージへの変換でも同じであるため、このセクションでは再度説明しません。このセクションでは、新しいパッケージの作成時ではなく、パッケージの変換時に異なる手順について説明します。
pkgsend generate コマンドの source 引数は SVR4 パッケージにできます。サポートされるソースの完全なリストについては、pkgsend(1) のマニュアルページを参照してください。source が SVR4 パッケージである場合、pkgsend generate では配布するファイルを含むパッケージ内部のディレクトリではなく、その SVR4 パッケージ内の pkgmap(4) ファイルを使用します。
prototype ファイルをスキャンしている間、pkgsend ユーティリティーではそのパッケージを IPS に変換する際に問題を引き起こす可能性のあるエントリの検索も行います。pkgsend ユーティリティーは、それらの問題を報告し、生成されたマニフェストを出力します。
このセクションで使用されるサンプルの SVR4 パッケージには、次の pkginfo(4) ファイルが含まれています。
VENDOR=My Software Inc. HOTLINE=Please contact your local service provider PKG=MSFTmypkg ARCH=i386 DESC=A sample SVR4 package of My Sample Package CATEGORY=system NAME=My Sample Package BASEDIR=/ VERSION=11.11,REV=2011.10.17.14.08 CLASSES=none manpage PSTAMP=linn20111017132525 MSFT_DATA=Some extra package metadata
このセクションで使用されるサンプルの SVR4 パッケージには、次の対応する prototype(4) ファイルが含まれています。
i pkginfo i copyright i postinstall d none opt 0755 root bin d none opt/mysoftware 0755 root bin d none opt/mysoftware/lib 0755 root bin f none opt/mysoftware/lib/mylib.so.1 0644 root bin d none opt/mysoftware/bin 0755 root bin f none opt/mysoftware/bin/mycmd 0755 root bin d none opt/mysoftware/man 0755 root bin d none opt/mysoftware/man/man1 0755 root bin f none opt/mysoftware/man/man1/mycmd.1 0644 root bin
これらのファイルを使用して構築された SVR4 パッケージに対して pkgsend generate コマンドを実行すると、次の IPS マニフェストが生成されます。
$ pkgsend generate ./MSFTmypkg | pkgfmt pkgsend generate: ERROR: script present in MSFTmypkg: postinstall set name=pkg.summary value="My Sample Package" set name=pkg.description value="A sample SVR4 package of My Sample Package" set name=pkg.send.convert.msft-data value="Some extra package metadata" dir path=opt owner=root group=bin mode=0755 dir path=opt/mysoftware owner=root group=bin mode=0755 dir path=opt/mysoftware/bin owner=root group=bin mode=0755 file reloc/opt/mysoftware/bin/mycmd path=opt/mysoftware/bin/mycmd owner=root \ group=bin mode=0755 dir path=opt/mysoftware/lib owner=root group=bin mode=0755 file reloc/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 reloc/opt/mysoftware/man/man1/mycmd.1 \ path=opt/mysoftware/man/man1/mycmd.1 owner=root group=bin mode=0644 legacy pkg=MSFTmypkg arch=i386 category=system \ desc="A sample SVR4 package of My Sample Package" \ hotline="Please contact your local service provider" \ name="My Sample Package" vendor="My Software Inc." \ version=11.11,REV=2011.10.17.14.08 license install/copyright license=MSFTmypkg.copyright
pkgsend generate の出力に関する次の点に注意してください。
pkg.summary および pkg.description 属性は pkginfo ファイル内のデータから自動的に作成されました。
set アクションは pkginfo ファイル内の追加パラメータから生成されました。この set アクションは pkg.send.convert.* 名前空間の下に設定されています。pkgmogrify(1) 変換を使用して、そのような属性をより適切な属性名に変換してください。
legacy アクションが pkginfo ファイル内のデータから生成されました。
SVR4 パッケージ内で使用されたコピーライトファイルを指す license アクションが生成されました。
変換できないスクリプト作成操作に関するエラーメッセージが発行されました。
次のチェックでは、pkgsend generate からのエラーメッセージとゼロ以外の戻りコードが示されています。
$ pkgsend generate MSFTmypkg > /dev/null pkgsend generate: ERROR: script present in MSFTmypkg: postinstall $ echo $? 1
SVR4 パッケージは、IPS の同等のものに直接変換できない postinstall スクリプトを使用しています。このスクリプトは手動で検査する必要があります。
パッケージ内の postinstall スクリプトには次の内容が含まれています。
#!/usr/bin/sh catman -M /opt/mysoftware/man
「必要とされるファセットまたはアクチュエータがあれば追加する」で説明しているように、既存の SMF サービス svc:/application/man-index:default を指す restart_fmri アクチュエータを使用すれば、このスクリプトと同じ結果を得ることができます。アクチュエータの詳細は、第 7 章パッケージインストールの一環としてのシステム変更の自動化を参照してください。
pkgsend generate コマンドでは、クラスアクションスクリプトの存在も確認し、調査すべきスクリプトを示すエラーメッセージを生成します。
SVR4 パッケージから IPS パッケージへのどの変換でも、必要な機能はおそらく既存のアクションタイプまたは SMF サービスを使用して実装できます。使用できるアクションタイプの詳細は、「パッケージの内容: アクション」を参照してください。SMF およびパッケージのアクションについては、第 7 章パッケージインストールの一環としてのシステム変更の自動化を参照してください。
パッケージメタデータの追加と依存関係の解決は、「パッケージの作成および発行」で説明されているのと同じ方法で行われるため、このセクションでは説明しません。変換されたパッケージに関する固有の問題を示す可能性のある次のパッケージ作成手順は、検証手順です。
SVR4 パッケージの変換時に発生するエラーの一般的な原因は、SVR4 パッケージで配布されたディレクトリと IPS パッケージによって配布された同じディレクトリの間の属性の不一致です。
この例の SVR4 パッケージでは、サンプルマニフェスト内の /opt に対するディレクトリアクションには、システムパッケージによってこのディレクトリ用に定義された属性とは異なる属性が含まれています。
「ディレクトリアクション」セクションでは、すべての参照カウントアクションには同じ属性が含まれている必要があると明確に記述されていました。これまで生成してきた mypkg のバージョンをインストールしようとすると、次のエラーが発生します。
# pkg install mypkg Creating Plan / pkg install: The requested change to the system attempts to install multiple actions for dir 'opt' with conflicting attributes: 1 package delivers 'dir group=bin mode=0755 owner=root path=opt': pkg://mypublisher/mypkg@1.0,5.11-0:20111017T020042Z 3 packages deliver 'dir group=sys mode=0755 owner=root path=opt': pkg://solaris/developer/build/onbld@0.5.11,5.11-0.175.0.0.0.1.0:20111012T010101Z pkg://solaris/system/core-os@0.5.11,5.11-0.175.0.0.0.1.0:20111012T023456Z These packages may not be installed together. Any non-conflicting set may be, or the packages must be corrected before they can be installed.
インストール時ではなく、パッケージの発行前にエラーを見つけるには、次の例に示すように、pkglint(1) コマンドを参照リポジトリとともに使用します。
$ pkglint -c ./cache -r file:///scratch/solaris-repo ./mypkg.mf.res Lint engine setup... PHASE ITEMS 4 4292/4292 Starting lint run... ERROR pkglint.dupaction007 path opt is reference-counted but has different attributes across 5 duplicates: group: bin -> mypkg group: sys -> developer/build/onbld system/core-os system/ldoms/ldomsmanager
異なるパッケージに異なる属性が含まれている path opt に関するエラーメッセージに注意してください。
pkglint によって報告される追加の ldomsmanager パッケージは参照パッケージリポジトリ内にありますが、テストシステムにはインストールされません。ldomsmanager パッケージはインストールされないため、前に pkg install によって報告されたエラーには記載されていません。
Oracle Solaris 11 システムでは SVR4 パッケージを直接インストールできますが、それより IPS パッケージを作成するようにしてください。SVR4 パッケージのインストールは暫定的な解決です。
「レガシーアクション」で説明した legacy アクションは別として、2 つのパッケージシステム間には関連性がなく、SVR4 パッケージと IPS パッケージはそれぞれから互いにパッケージメタデータを参照することはありません。
IPS には、パッケージ化された内容が正しくインストールされているかどうかを確認できる、pkg verify などのコマンドがあります。ただし、別のパッケージシステムが正当にパッケージをインストールしたり、IPS パッケージによってインストールされたディレクトリやファイルを変更するインストールスクリプトを実行したりした場合は、エラーが発生することがあります。
IPS の pkg fix および pkg revert コマンドは、IPS パッケージだけでなく SVR4 パッケージによって配布されたファイルも上書きでき、それによってパッケージ化されたアプリケーションが正常に機能しなくなる可能性があります。
pkg install などのコマンドは、通常は重複するアクションや参照カウントアクションの一般的な属性をチェックしますが、異なるパッケージシステムからのファイルが競合するときは、潜在的なエラーの検出に失敗する可能性があります。
これらの潜在的なエラーを考慮に入れ、IPS には包括的なパッケージ開発ツールチェーンがあることを考えると、Oracle Solaris 11 では SVR4 パッケージではなく IPS パッケージを開発することが推奨されます。