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 アクチュエータを使用すれば、このスクリプトと同じ結果を得ることができます。アクチュエータの詳細は、Chapter 7, パッケージインストールの一環としてのシステム変更の自動化を参照してください。
pkgsend generate コマンドでは、クラスアクションスクリプトの存在も確認し、調査すべきスクリプトを示すエラーメッセージを生成します。
SVR4 パッケージから IPS パッケージへのどの変換でも、必要な機能はおそらく既存のアクションタイプまたは SMF サービスを使用して実装できます。使用できるアクションタイプの詳細は、パッケージの内容: アクションを参照してください。SMF およびパッケージのアクションについては、Chapter 7, パッケージインストールの一環としてのシステム変更の自動化を参照してください。
パッケージメタデータの追加と依存関係の解決は、パッケージの作成および発行で説明されているのと同じ方法で行われるため、このセクションでは説明しません。変換されたパッケージに関する固有の問題を示す可能性のある次のパッケージ作成手順は、検証手順です。