JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris 11.1 での Image Packaging System を使用したソフトウェアのパッケージ化および配布     Oracle Solaris 11.1 Information Library (日本語)
このドキュメントの評価
search filter icon
search icon

ドキュメントの情報

はじめに

1.  IPS の設計目標、概念、および用語

2.  IPS を使用したソフトウェアのパッケージ化

パッケージの設計

パッケージの作成および発行

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

生成されたマニフェストに必要なメタデータを追加する

依存関係を評価する

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

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

必要とされるファセットまたはアクチュエータがあれば追加する

パッケージを検証する

パッケージを発行する

ローカルファイルリポジトリに発行する

パッケージアーカイブとして発行する

パッケージリポジトリとパッケージアーカイブの使用

パッケージをテストする

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

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

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

パッケージ変換に関するその他の考慮事項

3.  ソフトウェアパッケージのインストール、削除、および更新

4.  パッケージの依存関係の指定

5.  バリエーションの許可

6.  プログラムによるパッケージマニフェストの変更

7.  パッケージインストールの一環としてのシステム変更の自動化

8.  パッケージ更新の高度なトピック

9.  IPS パッケージの署名

10.  非大域ゾーンの処理

11.  発行されたパッケージの変更

A.  パッケージの分類

B.  IPS を使用して Oracle Solaris OS をパッケージ化する方法

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

パッケージの作成および発行

自動化の量が多いために、通常、IPS を使用したソフトウェアのパッケージ化は簡単です。自動化によって、パッケージ化のほとんどのバグの主な原因になっていると思われる単調な反復作業が回避されます。

IPS での発行は、次の手順で構成されます。

  1. パッケージマニフェストを生成します。

  2. 生成されたマニフェストに必要なメタデータを追加します。

  3. 依存関係を評価します。

  4. 必要とされるファセットまたはアクチュエータがあれば追加します。

  5. パッケージを検証します。

  6. パッケージを発行します。

  7. パッケージをテストします。

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

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

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

ソフトウェアがバイナリ、ライブラリ、およびマニュアルページで構成され、このソフトウェアを、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 回出現します。

この二重のエントリによって、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"

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

生成されたマニフェストに必要なメタデータを追加する

パッケージでは次のメタデータを定義するようにします。これらの値とその設定方法の詳細は、「設定アクション」を参照してください。

pkg.fmri

「パッケージ識別子: FMRI」に説明されているパッケージの名前およびバージョン。Oracle Solaris のバージョン管理については、「Oracle Solaris パッケージのバージョン管理」に記載されています。

pkg.description

パッケージの内容の説明

pkg.summary

その説明の 1 行の概要。

variant.arch

このパッケージに適した各アーキテクチャー。パッケージ全体をどのアーキテクチャーでもインストールできる場合は、variant.arch を省略できます。さまざまなアーキテクチャーのさまざまなコンポーネントを含むパッケージの作成については、第 5 章バリエーションの許可に説明されています。

info.classification

packagemanager(1) GUI で使用されるグループ化スキーム。サポートされる値は、付録 A パッケージの分類に記載されています。このセクション内の例では、任意の分類が指定されています。

この例ではまた、mysoftware 下の man ディレクトリを指す link アクションを /usr/share/man/index.d に追加します。このリンクについては、「必要とされるファセットまたはアクチュエータがあれば追加する」で詳しく説明されています。

生成されたマニフェストを直接変更するのではなく、pkgmogrify(1) を使用して生成されたマニフェストを編集します。pkgmogrify を使用してパッケージマニフェストを変更する方法の詳細は、第 6 章プログラムによるパッケージマニフェストの変更を参照してください。

次の pkgmogrify 入力ファイルを作成して、マニフェストに加えられる変更を指定します。このファイルを mypkg.mog という名前にします。この例では、アーキテクチャーの定義にマクロが使用され、マニフェストから /opt ディレクトリを削除するのに正規表現の照合が使用されます。

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=variant.arch value=$(ARCH)
set name=info.classification \
    value=org.opensolaris.category.2008:Applications/Accessories
link path=usr/share/man/index.d/mysoftware target=opt/mysoftware/man
<transform dir path=opt$->drop>

mypkg.mog の変更とともに mypkg.p5m.1 マニフェストで pkgmogrify を実行します。

$ pkgmogrify -DARCH=`uname -p` mypkg.p5m.1 mypkg.mog | pkgfmt > mypkg.p5m.2

出力用の mypkg.p5m.2 ファイルには次の内容が含まれています。path=optdir アクションが削除され、mypkg.mog からのメタデータとリンクの内容が元の内容 mypkg.p5m.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

依存関係を評価する

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

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

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

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

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

次のコマンドでは、-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.1.0.0.21.0 type=require

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

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

必要とされるファセットまたはアクチュエータがあれば追加する

ファセットとアクチュエータについては、第 5 章バリエーションの許可および第 7 章パッケージインストールの一環としてのシステム変更の自動化で詳しく説明されています。ファセットは、必須ではないがオプションでインストールできるアクションを示します。アクチュエータは、関連するアクションがインストール、更新、または削除されたときに発生する必要があるシステム変更を指定します。

このサンプルパッケージは、マニュアルページを opt/mysoftware/man/man1 に配布します。このセクションでは、マニュアルページがオプションであることを示すファセットを追加する方法について説明します。ユーザーは、そのパッケージのマニュアルページ以外のすべてをインストールすることを選択できます。(ユーザーがそのファセットを false に設定した場合、マニュアルページの file アクションがそのファセットでタグ付けされていれば、どのパッケージからもマニュアルページはインストールされません。)

マニュアルページをインデックスに含めるには、そのパッケージがインストールされるときに svc:/application/man-index:default SMF サービスを再起動する必要があります。このセクションでは、restart_fmri アクチュエータを追加してそのタスクを実行する方法について説明します。man-index サービスは、マニュアルページを含むディレクトリへのシンボリックリンクを /usr/share/man/index.d で探して、各リンクのターゲットをそれがスキャンするディレクトリのリストに追加します。マニュアルページをインデックスに含めるには、このサンプルパッケージに /usr/share/man/index.d/mysoftware から /opt/mysoftware/man へのリンクを含めます。このリンクとこのアクチュエータを含めることは、「ソフトウェアの自己アセンブリ」 で説明されている、Oracle Solaris OS のパッケージ化全体にわたって使用される自己アセンブリのよい例です。

使用できる一連の pkgmogrify 変換は /usr/share/pkg/transforms で入手できます。これらの変換は Oracle Solaris OS のパッケージ化に使用され、第 6 章プログラムによるパッケージマニフェストの変更で詳しく説明されています。

ファイル /usr/share/pkg/transforms/documentation には、この例でマニュアルページのファセットを設定したり、man-index サービスを再起動したりするために必要な変換と同じような変換が含まれています。このサンプルパッケージはマニュアルページを /opt に配布するため、documentation 変換は下記のように変更される必要があります。これらの変更された変換には正規表現 opt/.+/man(/.+)? が含まれており、これは man サブディレクトリを含む、opt のすぐ下のすべてパスに一致します。次の変更された変換を /tmp/doc-transform に保存します。

<transform dir file link hardlink path=opt/.+/man(/.+)? -> \
    default facet.doc.man true>
<transform file path=opt/.+/man(/.+)? -> \
    add restart_fmri svc:/application/man-index:default>

次のコマンドを使用して、これらの変換をマニフェストに適用します。

$ pkgmogrify mypkg.p5m.3.res /tmp/doc-transform | pkgfmt > mypkg.p5m.4.res

入力用の mypkg.p5m.3.res マニフェストには、次の 3 つのマニュアルページ関連アクションが含まれています。

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

変換の適用後、出力用の mypkg.p5m.4.res マニフェストには次の変更されたアクションが含まれています。

dir  path=opt/mysoftware/man owner=root group=bin mode=0755 facet.doc.man=true
dir  path=opt/mysoftware/man/man1 owner=root group=bin mode=0755 \
    facet.doc.man=true
file opt/mysoftware/man/man1/mycmd.1 path=opt/mysoftware/man/man1/mycmd.1 \
    owner=root group=bin mode=0644 \
    restart_fmri=svc:/application/man-index:default facet.doc.man=true

効率を良くするため、これらの変換は、依存関係の評価前の、メタデータが最初に追加されたときに追加することもできました。

パッケージを検証する

発行前の最後の手順は、マニフェストに対して pkglint(1) を実行して、発行およびテスト前に特定できるエラーを見つけることです。pkglint で見つけられるエラーの中には、発行時またはユーザーがパッケージのインストールを試みたときに見つかるものもありますが、当然ながらパッケージオーサリングプロセスでできるだけ早くエラーを特定するのが望ましいことです。

pkglint で報告されるエラーの例には次があります。

pkglint は次のいずれかのモードで実行できます。

pkglint が実行するチェックの完全なリストを表示するには、pkglint -L コマンドを使用します。特定のチェックを有効化、無効化、および省略する方法の詳細な情報は、pkglint(1) のマニュアルページに記載されています。このマニュアルページには、追加のチェックを実行するために pkglint を拡張する方法も詳述されています。

次の出力には、サンプルマニフェストの問題が示されています。

$ pkglint mypkg.p5m.4.res
Lint engine setup...
Starting lint run...
WARNING pkglint.action005.1       obsolete dependency check skipped: unable
to find dependency pkg:/system/library@0.5.11-0.175.1.0.0.21.0 for
pkg:/mypkg@1.0,5.11-0

この警告はこの例で許容されます。pkglint.action005.1 警告は、pkglint が、このサンプルパッケージが依存している pkg:/system/library@0.5.11-0.175.1.0.0.21.0 と呼ばれるパッケージを見つけられなかったことを伝えています。この依存関係パッケージはパッケージリポジトリ内にあり、pkglint が引数にマニフェストファイルのみを指定して呼び出されたため、見つかりませんでした。

次のコマンドでは、-r オプションによって依存関係パッケージを含むリポジトリが参照されます。-c オプションは、lint リポジトリおよび参照リポジトリからパッケージのメタデータをキャッシュするために使用されるローカルディレクトリを指定します。

$ pkglint -c ./solaris-reference -r http://pkg.oracle.com/solaris/release mypkg.p5m.4.res

パッケージを発行する

IPS には、パッケージを配布する 3 つの異なる方法があります。

通常、パッケージをテストするためには、ファイルベースのリポジトリへの発行で十分です。

パッケージリポジトリにアクセスできないほかのマシンにパッケージを転送する必要がある場合は、1 つ以上のパッケージをパッケージアーカイブに変換すると便利なことがあります。

パッケージは、svc:/application/pkg/server サービスの読み取り/書き込みインスタンスでマシンにホストされる HTTP リポジトリに直接発行することもできます。このサービスは pkg.depotd(1M) を実行します。

HTTP 経由で発行するときに着信パッケージに対する承認または認証チェックがないため、通常、HTTP リポジトリへの発行はお勧めしません。HTTP リポジトリへの発行は、セキュリティー保護されたネットワーク上で、またはファイルリポジトリへの NFS または SMB アクセスが不可能な場合にいくつかのマシンにわたって同じパッケージをテストするときに便利なことがあります。

HTTP または HTTPS 経由でのパッケージのインストールは問題ありません。

ローカルファイルリポジトリに発行する

pkgrepo(1) コマンドを使用してリポジトリを作成および管理します。システム上の場所を選択し、リポジトリを作成して、そのリポジトリのデフォルトの発行元を設定します。

$ pkgrepo create my-repository
$ pkgrepo -s my-repository set publisher/prefix=mypublisher
$ ls my-repository
pkg5.repository

pkgsend(1) コマンドを使用してサンプルパッケージを発行し、次に pkgrepo を使用してリポジトリを調べます。

$ pkgsend -s my-repository publish -d proto mypkg.p5m.4.res
pkg://mypublisher/mypkg@1.0,5.11-0:20120331T034425Z
PUBLISHED
$ pkgrepo -s my-repository info
PUBLISHER   PACKAGES STATUS           UPDATED
mypublisher 1        online           2012-03-31T03:44:25.235964Z

その後、そのファイルリポジトリは必要に応じて pkg.depotd を使用して HTTP または HTTPS 経由で提供できます。

パッケージアーカイブとして発行する

パッケージアーカイブを使用すると、パッケージのグループを 1 つのファイルで配布できます。パッケージリポジトリからパッケージアーカイブを作成したり、パッケージアーカイブからパッケージリポジトリを作成したりするには、pkgrecv(1) コマンドを使用します。

パッケージアーカイブは、パッケージリポジトリが使用できない場合に、既存の Web サイトからダウンロードしたり、USB キーにコピーしたり、インストール用の DVD に焼いたりすることが簡単にできます。

次のコマンドでは、前のセクションで作成した単純なリポジトリからパッケージアーカイブを作成します。

$ pkgrecv -s my-repository -a -d myarchive.p5p mypkg
Retrieving packages for publisher mypublisher ...
Retrieving and evaluating 1 package(s)...
DOWNLOAD                                  PKGS       FILES   XFER (MB)   SPEED
Completed                                  1/1         3/3     0.7/0.7 17.9k/s

ARCHIVE                                              FILES   STORE (MB)
myarchive.p5p                                        14/14      0.7/0.7

パッケージリポジトリとパッケージアーカイブの使用

pkgrepo コマンドを使用して、リポジトリまたはアーカイブから使用可能な最新のパッケージを一覧表示します。

$ pkgrepo -s my-repository list '*@latest'
PUBLISHER   NAME                                          O VERSION
mypublisher mypkg                                           1.0,5.11-0:20120331T034425Z
$ pkgrepo -s myarchive.p5p list '*@latest'
PUBLISHER   NAME                                          O VERSION
mypublisher mypkg                                           1.0,5.11-0:20120331T034425Z

この出力は、ある特定のリポジトリから最新バージョンのすべてのパッケージでアーカイブを作成するためのスクリプトの構築に役立つことがあります。

一時リポジトリまたは一時パッケージアーカイブは、-g オプションを使用して pkg install 操作やほかの pkg 操作に渡すことができます。システムリポジトリはその発行元の情報で一時的に構成されないため、そのような一時リポジトリや一時アーカイブは、子イメージまたは親イメージを含むシステム (非大域ゾーンを持つシステムなど) では使用できません。非大域ゾーンには、大域ゾーンと子/親の関係が含まれています。ただし、非大域ゾーンのローカル発行元のソースとしてパッケージアーカイブを設定することはできます。

パッケージをテストする

パッケージ開発の最後の手順は、発行されたパッケージが正しくパッケージ化されているかどうかをテストすることです。

root 権限を必要としないでインストールをテストするには、テストユーザーにソフトウェアインストールプロファイルを割り当てます。テストユーザーにソフトウェアインストールプロファイルを割り当てるには、usermod コマンドの -P オプションを使用します。


注 - このイメージに子イメージ (非大域ゾーン) がインストールされている場合は、pkg install コマンドで -g オプションを使用して、このパッケージのインストールをテストすることはできません。そのイメージで my-repository リポジトリを構成する必要があります。


my-repository リポジトリ内の発行元をこのイメージの構成済みの発行元に追加します。

$ pfexec pkg set-publisher -p my-repository
pkg set-publisher:
  Added publisher(s): mypublisher

pkg install -nv コマンドを使用すると、変更を行わずにそのインストールコマンドが実行する内容を確認できます。次のコマンドでは、実際にパッケージをインストールします。

$ pfexec pkg install mypkg
           Packages to install:  1 
       Create boot environment: No
Create backup boot environment: No
            Services to change:  1

DOWNLOAD                                  PKGS       FILES   XFER (MB)   SPEED
Completed                                  1/1         3/3     0.0/0.0    0B/s

PHASE                                          ITEMS
Installing new actions                         15/15
Updating package state database                 Done
Updating image state                            Done
Creating fast lookup database                   Done
Reading search index                            Done
Updating search index                            1/1

システム上に配布されたソフトウェアを調べます。

$ find /opt/mysoftware/
/opt/mysoftware/
/opt/mysoftware/bin
/opt/mysoftware/bin/mycmd
/opt/mysoftware/lib
/opt/mysoftware/lib/mylib.so.1
/opt/mysoftware/man
/opt/mysoftware/man/man-index
/opt/mysoftware/man/man-index/term.doc
/opt/mysoftware/man/man-index/.index-cache
/opt/mysoftware/man/man-index/term.dic
/opt/mysoftware/man/man-index/term.req
/opt/mysoftware/man/man-index/term.pos
/opt/mysoftware/man/man1
/opt/mysoftware/man/man1/mycmd.1

バイナリとマニュアルページに加えて、システムはアクチュエータが man-index サービスを再起動した結果としてマニュアルページのインデックスも生成しました。

pkg info コマンドは、パッケージに追加されたメタデータを表示します。

$ pkg info mypkg
          Name: mypkg
       Summary: This is an example package
   Description: This is a full description of all the interesting attributes of
                this example package.
      Category: Applications/Accessories
         State: Installed
     Publisher: mypublisher
       Version: 1.0
 Build Release: 5.11
        Branch: 0
Packaging Date: March 31, 2012 03:44:25 AM 
          Size: 0.00 B
          FMRI: pkg://mypublisher/mypkg@1.0,5.11-0:20120331T034425Z

pkg search コマンドは、mypkg によって配布されるファイルのクエリー検索時にヒットしたものを返します。

$ pkg search -l mycmd.1
INDEX      ACTION VALUE                           PACKAGE
basename   file   opt/mysoftware/man/man1/mycmd.1 pkg:/mypkg@1.0-0