ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Image Packaging System のマニュアルページ Oracle Solaris 11 Information Library (日本語) |
- Image Packaging System マニフェスト変換ツール
/usr/bin/pkgmogrify [-vi] [-I includedir ...] [-D macro=value ...] [-O outputfile] [-P printfile] [inputfile ...]
pkgmogrify は、パッケージマニフェストのプログラムによる編集を可能にして、ソフトウェアの構築やパッケージの公開を自動化するときに必要な標準的な変換を簡略化します。
pkgmogrify は、次の機能を提供します。
マクロ置換。単一のマニフェストを各種アーキテクチャーやプラットフォーム間で簡単に共有できます。
ほかのマニフェスト、または標準のコンポーネントや変換などのマニフェストフラグメントの取り込み。
パッケージアクションの変換。アクション属性の変更、削除、または追加が含まれます。
サポートしているオプションは、次のとおりです。
name を値 value とともにマクロとして定義します。マクロは、入力ファイル内で $(macro) として指定されます。置換は、それ以上の変換が見つからなくなるまで繰り返されます。一般的な語法には次のものがあります。
行の先頭にあるアーキテクチャー固有のタグを使用した、ほかのアーキテクチャー上のマニフェスト内の行の除外。
$(sparc_ONLY)file ...
SPARC アーキテクチャーを処理する場合、このマクロは空の文字列に設定されます。ほかのアーキテクチャーを処理する場合、このマクロはコマンド行で # に設定されるため、このアクションが現在のアーキテクチャー上のマニフェストから除外されます。
パス名のプラットフォーム固有の部分の指定。実行可能ファイルおよびライブラリのための 64 ビットアーキテクチャーディレクトリの名前などがあります。
file NOHASH path=usr/bin/$(ARCH64)/cputrack ...
これらのマクロは、コマンド行で目的の値に設定するようにしてください。定義済みのマクロ値は存在しません。
指定されたディレクトリを、コマンド行で指定されたファイルと、埋め込みのインクルード指令の両方の検索パスに追加します。
マニフェスト出力を指定されたファイルに書き込みます。このファイルは、エラーが発生した場合や、変換指令によって強制的な中止操作が実行された場合は書き込まれません。デフォルトでは、マニフェスト出力は標準出力に書き込まれます。
変換指令の出力操作から得られた出力を指定されたファイルに書き込みます。このファイルは、エラーが発生した場合や、変換指令によって強制的な中止操作が実行された場合は書き込まれません。デフォルトでは、この出力は標準出力に書き込まれます。
ファイル内のインクルード指令を無視します。コマンド行 (または標準入力) で指定されたファイルのみが処理されます。
出力マニフェストに変換の効果を示すコメントを書き込みます。この情報がデバッグに役立つことがあります。
使用方法に関するメッセージを表示します。
マニフェストファイルでは、インクルード指令と変換指令という 2 つのタイプの指令がサポートされています。
インクルード指令の形式は次のとおりです。
<include file>
この指令により、pkgmogrify は file という名前のファイルを、最初に現在のディレクトリで、次に -I オプションで指定されたディレクトリで検索します。見つかった場合は、ファイルの内容がマニフェストの、この指令が置かれている場所に挿入されます。見つからなかった場合、pkgmogrify はエラーで終了します。
変換指令の形式は次のとおりです。
<transform matching-criteria -> operation>
これらの指令は、すべての入力がメモリー内に読み取られるまで累積されたあと、各指令が検出された順序でアクションに適用されます。
一致条件の形式は次のとおりです。
[action-type ... ] [attribute=<value-regexp> ...]
指定された action-types のいずれかが一致する必要があります。指定された attributes のすべてが一致する必要があります。使用されている正規表現の構文は Python の構文です。Python 正規表現の構文については、コマンド pydoc re を使用するか、または http://docs.python.org/dev/howto/regex.html にあるより完全なドキュメントを参照してください。正規表現は先頭に固定され、末尾には固定されません。そのため、ファイルを拡張子で照合する正規表現には先頭に .* を含める必要があり、さらに末尾には $ を含めるようにしてください。
複数の条件をスペースで区切って指定できます。
次の操作が使用できます。
属性に値を追加します。この操作は 2 つの引数を取ります。最初の引数は属性の名前であり、2 番目の引数は値です。
属性の値がまだ存在しない場合は、その値を設定します。この操作は add 操作と同じく 2 つの引数を取ります。
属性値を削除します。この操作は 2 つの引数を取ります。最初の引数は属性の名前です。2 番目の引数は、削除される属性値を照合するための正規表現です。アクションを照合するために使用される正規表現とは異なり、この表現は固定されません。
このアクションを破棄します。
アクションの属性を変更します。この操作には 3 つの引数を指定します。最初の引数は属性の名前であり、2 番目の引数は属性値を照合するための正規表現です。3 番目の引数は、正規表現で一致した値の部分に置き換えられる置換文字列です。アクションを照合するために使用される正規表現とは異なり、この表現は固定されません。正規表現でグループが定義されている場合は、置換文字列内で通常の正規表現の後方参照 (形式は \1、\2 など) を使用できます。
マニフェスト出力ストリームに行を出力します。これは、有効なアクション文字列、空 (空行が生成されます)、またはコメント (# のあとに任意のテキストが続きます) である必要があります。
マニフェスト処理を終了します。マニフェストは出力されず、print 操作は適用されません。引数が 1 つ指定されている場合、その引数は整数である必要があり、終了コードとして使用されます。デフォルト値は 0 です。引数が 2 つ指定されている場合、最初の引数は終了コードであり、2 番目の引数は標準エラー出力に出力されるメッセージです。
-P で指定された出力ファイルにメッセージを出力します。
属性の値を設定します。この操作は add 操作と同じく 2 つの引数を取ります。
delete と drop を除くすべての操作は、出力ストリームにその内容が出力される (省略可能である可能性がある) 引数を取ります。これらの文字列には、3 種類の特殊なトークンを含めることができます。これらのトークンにより、各アクションの固定された変換に基づかない情報を出力に含めることが可能になります。
最初の種類の置換を使用すると、パーセント記号に続けて属性の名前を丸括弧に入れて指定することによって、操作で現在のアクションの属性の値を参照できます。たとえば、%(alias) は、アクションの alias 属性の値を参照します。
いくつかの合成属性が存在します。次の 2 つは pkgmogrify に固有です
pkg.manifest.filename は、アクションが見つかったファイルの名前を参照します。
pkg.manifest.lineno は、アクションが見つかった行を参照します。
次の 3 つの合成属性は、pkg(1) で使用されるものに似ています。
action.hash は、アクションにペイロードが含まれている場合、そのアクションのハッシュ値を参照します。ペイロードを含むアクションの場合、set 操作は、action.hash 属性を操作することによってアクションのハッシュを変更できます。
action.key は、キー属性の値を参照します。
action.name は、アクションタイプの名前を参照します。
値を要求された属性が存在しない場合、pkgmogrify はエラーで終了します。エラーで終了することを回避するには、属性名のあとに ;notfound= と、属性値の代わりに置換する値を指定します。たとえば、%(alias;notfound='no alias') は、属性 alias の値が存在する場合はその値を出力し、それ以外の場合は no alias を出力します。
値を要求された属性が複数値の場合は、各値がスペースで区切られて出力されます。notfound トークンと同様に、トークン prefix、suffix、および sep を使用してこの動作を変更できます。prefix で指定された文字列は各値の先頭に追加され、suffix で指定された文字列は各値の末尾に追加され、sep はある値の接尾辞とその次の値の接頭辞の間に配置されます。
アクション属性と同様に、pkgmogrify 指令では %{pkg.fmri} のように、丸括弧の代わりに中括弧を使用してパッケージ属性を参照できます。変換指令が適用される時点で、この属性は set アクションで定義されている必要があります。そうしないと、この属性は上で説明した notfound として扱われます。処理が、パッケージを記述しているマニフェストファイルの最後に達すると、属性は次のパッケージのためにクリアーされます。
これは、パッケージ属性をアクション属性であるかのように参照するためだけでなく、これらの属性を照合したり、一時的に変更したりするためにも有効です。したがって、これらの状況では、合成アクション名 pkg を (pkgmogrify のコンテキストでのみ) 使用できます。
pkgmogrify がコマンド行で指定されたマニフェストの読み取りを完了し、そのマニフェストで pkg.fmri パッケージ属性が定義されている場合、pkgmogrify はこの合成アクション pkg を作成します。属性はパッケージの属性になります。その後、<transform> 指令は、ほかのアクションタイプと同様に、このアクションに照合できます。
pkg アクションに対する操作は、メモリー内でのみ実行されるために、出力されたマニフェストに直接影響を与えないという点で特殊です。たとえば、add、default、または set 操作を使用して pkg アクションに属性を設定しようとしても、照合するほかの <transform> 指令では使用可能であるにもかかわらず、set アクションがマニフェストに追加されません。pkg アクションに対して emit を実行しようとすると、エラーが発生します。パッケージ属性を追加するには、代わりに set アクションに対して emit を実行します。
3 番目の種類の置換は後方参照です。この置換は edit 操作で使用可能なものとは異なり、-> の左側にある変換一致に列挙されているグループへの参照です。これらは、一致条件にある順序で、%<1>、%<2> などによって指定されます。
処理の順序は次のとおりです。
入力ファイルから行が読み取られます。
マクロが適用されます。
<include ...> および <transform> 指令が処理されることにより、追加のファイルが検出され、読み取られます。
すべての入力が累積されたあと、入力内の各行がアクションに変換され、すべての変換が適用されます。
処理が正常に完了すると、出力が書き込まれます。
例 1 SMF マニフェストにタグを追加する
サービス管理機能 (SMF) マニフェストにタグを追加して、パッケージがライブシステムにインストールされたときにこれらのマニフェストがインポートされるようにします。
<transform file path=(var|lib)/svc/manifest/.*\.xml -> \ add restart_fmri svc:/system/manifest-import:default>
例 2 ファイルを移動する
ファイルを usr/sfw/bin から usr/bin に移動します。
<transform file -> edit path usr/sfw/bin usr/bin>
例 3 リブートの必要性を指定する
reboot-needed タグを、/kernel の下にある、.conf ファイル以外のファイルに追加します。この例では、入力ファイルに存在する順序で各アクションに変換が適用されることを利用しています。
<transform file path=kernel/.* -> set reboot-needed true> <transform file path=kernel/.*\.conf -> delete reboot-needed .*>
これはまた、正規表現を使用した 1 つの変換規則でも実行できます。
例 4 FMRI 属性を依存アクションに変換する
パッケージ属性 pkg.fmri を incorporation の一部になるように depend アクションに変換します。
<transform set name=pkg.fmri -> \ emit depend type=incorporate fmri=%(value)> <transform set name=pkg.fmri -> drop>
例 5 バグ番号のリストを出力する
引用符で囲まれた、接頭辞付きのバグ番号のコンマ区切りリストを出力します。
set name=bugs value=12345 value=54321 value=13579 value=97531 <transform set name=bugs -> \ print %(value;sep=",";prefix="bug='";suffix="'")>
例 6 欠落した属性を許可する
属性がない場合でも、安全にメッセージを出力します。
<transform driver -> print Found aliases: %(alias;notfound=<none>)>
例 7 デフォルト値を設定する
所有者、グループ、およびアクセス権のデフォルト値を設定します。
<transform file dir -> default owner root> <transform file dir -> default group bin> <transform file -> default mode 0444> <transform dir -> default mode 0755>
例 8 廃止としてマークされていないパッケージに依存関係を追加する
廃止としてマークされていないすべてのパッケージについて、そのパッケージを提供する統合のための incorporation への依存関係を追加します。この一連の変換は、マニフェストが読み取られたあとに実行される必要があります。そうしないと、依存関係が常に出力されます。pkg アクションの変更には永続的な効果がないため、pkg.obsolete=false に一致する属性をクリーンアップする必要はありません。
<transform pkg -> default pkg.obsolete false> <transform pkg pkg.obsolete=false -> emit depend \ fmri=consolidation/$(CONS)/$(CONS)-incorporation type=require>
例 9 エラーが検出された場合は終了してメッセージを出力する
廃止された属性がマニフェスト内に検出された場合は、エラーメッセージを出力します。
<transform file dir link hardlink opensolaris.zone=.* -> \ exit 1 The opensolaris.zone attribute is obsolete.>
例 10 適切なロケールファセットを設定する
対象のパス名に適したロケールファセットを設定します。
<transform dir file link hardlink path=.*/locale/([^/]+).* -> \ default facet.locale.%<1> true>
次の終了ステータスが返されます。
すべてが動作しました。
予期しない不具合が発生しました。
無効なコマンド行オプションが指定された。
予期しない処理エラー。
このディレクトリには、ファセット、アクチュエータ、およびその他の属性を設定するために役立つ変換を含むファイルが入っています。
次の属性については、attributes(5) を参照してください。
|
http://hub.opensolaris.org/bin/view/Project+pkg/