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

印刷ビューの終了

更新: 2014 年 7 月
 
 

パッケージマニフェストを生成する

インストールしたシステムに必要なコンポーネントファイルを同じディレクトリ構造にまとめることから始めるのがもっとも簡単な方法です。

これを行う 2 つの方法は次のとおりです。

  • パッケージ化するソフトウェアがすでに tarball に入っている場合は、その tarball をサブディレクトリに解凍します。autoconf ユーティリティーを使用するオープンソースのソフトウェアパッケージの多くでは、目的のプロトタイプ領域を指すように DESTDIR 環境変数を設定すると、これが行われます。autoconf ユーティリティーは、pkg:/developer/build/autoconf パッケージで入手できます。

  • メイクファイル内の install ターゲットを使用します。

ソフトウェアがバイナリ、ライブラリ、およびマニュアルページで構成され、このソフトウェアを、mysoftware という名前の /opt 下のディレクトリにインストールするとします。このレイアウトにソフトウェアが表示されるディレクトリをビルド領域に作成します。次の例では、このディレクトリに proto という名前が付けられています。

proto/opt/mysoftware/lib/mylib.so.1
proto/opt/mysoftware/bin/mycmd
proto/opt/mysoftware/man/man1/mycmd.1

pkgsend generate コマンドを使用して、この proto 領域のマニフェストを生成します。pkgfmt によって出力用パッケージマニフェストをパイプで連結して、そのマニフェストをより読み取りやすくします。詳細は、pkgsend(1) および pkgfmt(1) のマニュアルページを参照してください。

次の例では、proto ディレクトリは現在の作業用ディレクトリにあります。

$ pkgsend generate proto | pkgfmt > mypkg.p5m.1

出力用の mypkg.p5m.1 ファイルには次の行が含まれています。

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 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

パッケージ化されるファイルのパスは、file アクションに 2 回出現します。

  • file という語のあとの最初の語は、proto 領域でのそのファイルの場所を表しています。

  • path= 属性のパスは、そのファイルがインストールされる場所を示しています。

この二重のエントリによって、proto 領域を変更しなくてもインストール場所を変更できます。この機能によって、別のオペレーティングシステムにインストールするように作られたソフトウェアを再パッケージ化する場合などに、かなりの時間を節約できる可能性があります。

pkgsend generate によってディレクトリの所有者とグループにデフォルト値が適用されていることに注意してください。/opt の場合、デフォルトは正しくありません。そのディレクトリはシステム上にすでに存在しているほかのパッケージによって配布されるので削除してください。そうすれば、/opt の属性がすでにシステム上に存在しているものと競合する場合、pkg(1) はそのパッケージをインストールしません。下記の 生成されたマニフェストに必要なメタデータを追加するでは、不要なディレクトリをプログラムで削除する方法を示しています。

ファイル名に等号 (=)、二重引用符 (")、または空白文字が含まれている場合、次の例に示すように、pkgsendhash 属性をマニフェスト内に生成します。

$ mkdir -p proto/opt
$ touch proto/opt/my\ file1
$ touch proto/opt/"my file2"
$ touch proto/opt/my=file3
$ touch proto/opt/'my"file4'
$ pkgsend generate proto
dir group=bin mode=0755 owner=root path=opt
file group=bin hash=opt/my=file3 mode=0644 owner=root path=opt/my=file3
file group=bin hash="opt/my file2" mode=0644 owner=root path="opt/my file2"
file group=bin hash='opt/my"file4' mode=0644 owner=root path='opt/my"file4'
file group=bin hash="opt/my file1" mode=0644 owner=root path="opt/my file1"

パッケージを発行するで説明しているように、そのパッケージが発行されると (Publish the Packageを参照)、ファイルアクション 属性の値はファイル内容の SHA-1 ハッシュになります。