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

印刷ビューの終了

更新: 2016 年 11 月
 
 

SVR4 パッケージから IPS パッケージへの変換

このセクションでは、SVR4 パッケージから IPS パッケージへの変換例について説明し、特別な注意が必要な部分を強調して説明します。

SVR4 パッケージから IPS パッケージに変換するには、この章で前述した、IPS でソフトウェアをパッケージ化するための手順と同じ手順に従います。これらの手順のほとんどは、SVR4 から 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 アクチュエータを使用すれば、このスクリプトと同じ結果を得ることができます。アクチュエータの詳細は、パッケージインストールの一環としてのシステム変更の自動化を参照してください。

pkgsend generate コマンドでは、クラスアクションスクリプトの存在も確認し、調査すべきスクリプトを示すエラーメッセージを生成します。

SVR4 パッケージから IPS パッケージへのどの変換でも、必要な機能はおそらく既存のアクションタイプまたは SMF サービスを使用して実装できます。使用できるアクションタイプの詳細は、パッケージの内容: アクションを参照してください。SMF およびパッケージのアクションについては、パッケージインストールの一環としてのシステム変更の自動化を参照してください。

パッケージメタデータの追加と依存関係の解決は、パッケージの作成および発行で説明されているのと同じ方法で行われるため、このセクションでは説明しません。変換されたパッケージに関する固有の問題を示す可能性のある次のパッケージ作成手順は、検証手順です。

変換されたパッケージを検証する

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
    1 package delivers 'dir group=sys mode=0755 owner=root path=opt':
        pkg://solaris/system/core-os@0.5.11,5.11-0.175.3.13.0.3.0:20160926T221733Z

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 Actionsで説明した レガシーアクション アクションは別として、2 つのパッケージシステム間には関連性がなく、SVR4 パッケージと IPS パッケージはそれぞれから互いにパッケージメタデータを参照することはありません。

IPS には、パッケージ化された内容が正しくインストールされているかどうかを確認できる、pkg verify などのコマンドがあります。ただし、別のパッケージシステムが正当にパッケージをインストールしたり、IPS パッケージによってインストールされたディレクトリやファイルを変更するインストールスクリプトを実行したりした場合は、エラーが発生することがあります。

IPS の pkg fix および pkg revert コマンドは、IPS パッケージだけでなく SVR4 パッケージによって配布されたファイルも上書きでき、それによってパッケージ化されたアプリケーションが正常に機能しなくなる可能性があります。

pkg install などのコマンドは、通常は重複するアクションや参照カウントアクションの一般的な属性をチェックしますが、異なるパッケージシステムからのファイルが競合するときは、潜在的なエラーの検出に失敗する可能性があります。

これらの潜在的なエラーを考慮に入れ、IPS には包括的なパッケージ開発ツールチェーンがあることを考えると、Oracle Solaris 11 では SVR4 パッケージではなく IPS パッケージを開発することが推奨されます。