ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 での Image Packaging System を使用したソフトウェアのパッケージ化および配布 Oracle Solaris 11.1 Information Library (日本語) |
自動化の量が多いために、通常、IPS を使用したソフトウェアのパッケージ化は簡単です。自動化によって、パッケージ化のほとんどのバグの主な原因になっていると思われる単調な反復作業が回避されます。
IPS での発行は、次の手順で構成されます。
パッケージマニフェストを生成します。
生成されたマニフェストに必要なメタデータを追加します。
依存関係を評価します。
必要とされるファセットまたはアクチュエータがあれば追加します。
パッケージを検証します。
パッケージを発行します。
パッケージをテストします。
インストールしたシステムに必要なコンポーネントファイルを同じディレクトリ構造にまとめることから始めるのがもっとも簡単な方法です。
これを行う 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) はそのパッケージをインストールしません。下記の 「生成されたマニフェストに必要なメタデータを追加する」では、不要なディレクトリをプログラムで削除する方法を示しています。
ファイル名に等号 (=)、二重引用符 (")、または空白文字が含まれている場合、次の例に示すように、pkgsend は hash 属性をマニフェスト内に生成します。
$ 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 ハッシュになります。
パッケージでは次のメタデータを定義するようにします。これらの値とその設定方法の詳細は、「設定アクション」を参照してください。
「パッケージ識別子: FMRI」に説明されているパッケージの名前およびバージョン。Oracle Solaris のバージョン管理については、「Oracle Solaris パッケージのバージョン管理」に記載されています。
パッケージの内容の説明
その説明の 1 行の概要。
このパッケージに適した各アーキテクチャー。パッケージ全体をどのアーキテクチャーでもインストールできる場合は、variant.arch を省略できます。さまざまなアーキテクチャーのさまざまなコンポーネントを含むパッケージの作成については、第 5 章バリエーションの許可に説明されています。
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=opt の dir アクションが削除され、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 つの別々の手順から成ります。
依存関係の生成。ソフトウェアが依存するファイルを特定します。pkgdepend generate コマンドを使用します。
依存関係の解決。ソフトウェアが依存するそれらのファイルを含むパッケージを特定します。pkgdepend resolve コマンドを使用します。
次のコマンドでは、-m オプションによって pkgdepend はマニフェスト全体をその出力に含めます。-d オプションは proto ディレクトリをコマンドに渡します。
$ pkgdepend generate -md proto mypkg.p5m.2 | pkgfmt > mypkg.p5m.3
出力用の mypkg.p5m.3 ファイルには次の内容が含まれています。pkgdepend ユーティリティーは、mylib.so.1 と mycmd の両方による libc.so.1 への依存関係についての表記を追加しました。mycmd と mylib.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 は次のいずれかのモードで実行できます。
パッケージマニフェストに対して直接。通常、マニフェストの有効性をすばやくチェックするためには、このモードで十分です。
パッケージマニフェストに対して (パッケージリポジトリも参照)。このモードは、リポジトリへの発行前に少なくとも 1 回は使用してください。
リポジトリを参照することで、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 つの異なる方法があります。
ローカルファイルベースのリポジトリに発行します。
リモート HTTP ベースのリポジトリに発行します。
.p5p パッケージアーカイブに変換します。
通常、パッケージをテストするためには、ファイルベースのリポジトリへの発行で十分です。
パッケージリポジトリにアクセスできないほかのマシンにパッケージを転送する必要がある場合は、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