ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11 インストールマニュアルページ Oracle Solaris 11 Information Library (日本語) |
- Automated Installer (AI) を使用した XML ファイルの変更
/usr/bin/aimanifest [-h]
aimanifest add [-r] path value
aimanifest get [-r] path
aimanifest set [-r] path value
aimanifest load [-i] filename
aimanifest validate
aimanifest コマンドは、新しい XML マニフェストを作成するか、既存の XML マニフェストを変更します。aimanifest は DTD 定義への有効な !DOCTYPE 参照を含む XML ファイルで使用できますが、本来は Automated Installer (AI) によって使用される派生マニフェストを作成するためのものです。AI 派生マニフェストについては、『Oracle Solaris 11 システムのインストール』を参照してください。
aimanifest コマンドは、マニフェストを作成するために複数回呼び出すことができます。AIM_MANIFEST 環境変数は、変更する aimanifest のマニフェストの場所を指定します。AIM_MANIFEST を設定する必要があります。aimanifest コマンドを load、add、または set サブコマンドオプションとともに呼び出すたびに、AIM_MANIFEST ファイルが開かれ、変更され、保存されます。
aimanifest コマンドが変更できる AIM_MANIFEST ファイルには、少なくとも次の両方の要素が含まれている必要があります。
作成している XML マニフェストで有効な DTD への !DOCTYPE 参照。
このマニフェストのルート要素。
AI が派生マニフェストスクリプトを実行しているときのように、空の AIM_MANIFEST ファイルで作業を始める場合、最初の aimanifest コマンドで load サブコマンドを指定し、少なくとも最低限必要な AIM_MANIFEST ファイルを読み込む必要があります。マニフェストを変更するための以降の aimanifest コマンドでは、DTD を使用して、作成中のマニフェスト内で要素を追加する場所を決定します。
エラーや情報メッセージを標準出力と標準エラー出力に表示するだけでなくファイルに保存するには、AIM_LOGFILE 環境変数をログファイルの場所に設定します。情報はログファイルに追加されます。ログファイルは消去されません。
aimanifest コマンドには次のオプションがあります。
使用法のヘルプメッセージを表示します。
aimanifest コマンドの add、get、set サブコマンドには次のオプションがあります。
この aimanifest コマンドが作成または処理する XML 要素のパスを返します。この返されたパスは、ノード ID のチェーンです。この返されたパスの値を保存して、aimanifest への以降の呼び出しで使用できます。XML 要素と属性の値を使用してパスを指定するよりも、-r オプションによって返されたパスを使用する方が信頼性が高くなります。これは、AI マニフェストが構築されているときに値が変わる可能性があるためです。-r オプションによって返されるパスについては、「戻りパス」のセクションを参照してください。
aimanifest コマンドの load サブコマンドには、次のオプションがあります。
新しいデータを追加する前に AIM_MANIFEST データを消去しません。
サポートされているサブコマンドは次のとおりです。
新しい要素を XML マニフェストに追加します。値 value を使用して、path で新しい要素を追加します。path については、「オペランド」のセクションを参照してください。path が属性 (@attr) 内で終了する場合、新しい要素は attr 属性を持ち、value はその属性の値になります。
path 内で親/子関係を検査する場合を除き、検証は行われません。
-r オプションは、新しく追加されたノードへのパスを返します。詳細は、「戻りパス」のセクションを参照してください。
親パスが AIM_MANIFEST ファイルの要素に一致する場合は、1 つの要素のみに一致する必要があります。新しい要素が、一致する親要素の子として作成されます。このセクションの「例 2: 値を持つパス」に示されているように、パスで要素と属性の値を指定して、一意の親要素に一致させることができます。
親パスが AIM_MANIFEST ファイルの要素に一致しない場合、必要に応じて新しい要素が作成され、新しい子要素が新しい親に追加されます。追加された要素へのパスは、次の規則に従って、既存の要素から分割されます。
分割は、値を指定するパスのすべての部分より後ろで実行されます。
分割は、同じタグが付けられた複数の関連要素が DTD によって許可されている最初の場所で、値を指定するパスのすべての部分より後ろで実行されます。
この XML マニフェストスキーマを使用して、次の例を分析します。
マニフェストは、単一の A ノードで開始されます。
A ノードは、B ノードの子を 1 つだけ持つことができます。
B ノードは、C ノードの子を複数持つことができます。
C ノードは、D ノードの子を複数持つことができます。
例1: 単一のパス。AI マニフェストは次のように 1 つの A ノード、1 つの B ノード、1 つの C ノードを持ちます: /A/B/C。add サブコマンドは、パス /A/B/C/D で発行されます。この場合、C ノードは同じタグが付けられた兄弟を持つことができるパスに属する最初のノードであるため、新しい C ノードが作成されます。新しい D ノードは、子として新しい C ノードに追加されます。その結果、マニフェストの構造は /A/B/{C,C/D} になります。異なる値の D に対して同じコマンドを発行すると、次のように 3 つの C ノードになります: /A/B/{C,C/D,C/D}。
例2: 値を持つパス。AI マニフェストは、1 つの A ノード、1 つの B ノード、2 つの C ノードを持ちます。1 つの C ノードのみが値 1 を持つため、マニフェストの構造は /A/B/{C,C=1} になります。add サブコマンドは、パス /A/B/C=1/D と 値 10 で発行されます。この場合、C に対して値 1 を指定することで一意のノードが識別されるため、新しい C ノードは追加されません。また、値が指定されるブランチの場所またはその前でパスを分割することはできません。このパスを分割できる 1 番目の場所は D です。値が 10 の新しい D ノードは、値が 1 の C ノードの子として追加されます。その結果、マニフェストの構造は /A/B/{C,C=1/D=10} になります。D に対して値 20 を持つ同じコマンドを発行すると、/A/B/{C,C=1/{D=10,D=20}} になります。
要素または属性の値を取得します。空の要素または属性の値に対しては、空の文字列 ("") が表示されます。path は、一意の既存の要素または属性に一致している必要があります。path については、「オペランド」のセクションを参照してください。
-r オプションは、2 番目に返された文字列として、アクセス先ノードへのパスを返します。詳細は、「戻りパス」のセクションを参照してください。
既存の要素または属性の値を変更するか、既存の要素の新しい属性を作成します。検証は行われません。
既存の要素の値を変更するときに、path は一意の既存の要素に一致する必要があります。同じタグが付けられた兄弟を要素が持っている場合は、要素の値または属性を使用するかターゲット要素の子要素を使用してパスを一意にします。「Path オペランド」のセクションを参照してください。
属性の値を設定するときに、その属性が存在している必要はありませんが、その属性が所属する要素が存在している必要があります。
-r オプションは、変更された要素へのパスを返します。詳細は、「戻りパス」のセクションを参照してください。
XML マニフェストまたは部分的な XML マニフェストをファイル filename から読み込みます。要素の親/子関係を検査する場合を除き、検証は行われません。
-i オプションが指定されていない場合、既存の XML データはすべて上書きされます。AIM_MANIFEST ファイルのすべてのデータは、filename ファイルの内容に置き換えられます。filename ファイルに DTD への !DOCTYPE 参照を含めて、以降の aimanifest コマンドがファイルを変更できるようにする必要があります。
-i オプションが指定されている場合、新しいデータを追加する前に AIM_MANIFEST データを消去しないでください。その代わりに、既存の XML データを使用して、少しずつ新しいデータを挿入またはマージしてください。AIM_MANIFEST の !DOCTYPE 参照によって指定された DTD は、filename データを統合する方法と場所を決定するために使用されます。!DOCTYPE 参照が見つからない場合は、/usr/share/install/ai.dtd の AI マニフェスト DTD が使用されます。filename のデータを DTD で調整できない場合は、ゼロ以外のエラーステータスが返されます。
次の事項は、新しいデータが AIM_MANIFEST マニフェストに挿入される場所に影響します。
AIM_MANIFEST データパスと filename データパスの先頭近くにある要素のタグが一致している度合い
それらの AIM_MANIFEST データ要素で許可されている子要素の種類
同じタグが付けられた兄弟要素が許可されている場所
子を持たない AIM_MANIFEST データノードが存在している場所
filename データの各要素が処理されるときに次のすべての条件が真である場合、通常は、新しいノードが AIM_MANIFEST データのこの要素に対して作成されることはありません。その代わりに、既存のノードが新しいデータに置き換えられます。
両方のセットのデータに、タグと場所が同じノードが含まれます。
AIM_MANIFEST 内で !DOCTYPE 参照によって指定される DTD は、同じタグが付けられた兄弟要素としてこの両方のノードが共存することを許可しません。
filename データ要素は子を持ちます。
要素が filename から挿入されるときに、新しいノードの作成が開始される場所の AIM_MANIFEST データルートにできるかぎり近い位置で分割が実行されます。分割の最初の新しいノードは、同じタグが付けられた兄弟要素が許可されているもっとも早い場所に作成されます。または、同じタグが付けられた要素が AIM_MANIFEST 内に存在しない場合には、もっとも早い適切な地点に作成されます。
この XML マニフェストスキーマを使用して、次の例を分析します。
マニフェストは、単一の A ノードで開始されます。
A ノードは、B ノードの子を 1 つだけ持つことができます。
B ノードは、C ノードの子を複数持つことができます。
B ノードは、E ノードの子を 1 つだけ持つことができます。
例1: 同じタグが付けられた要素の挿入。AIM_MANIFEST の内容が /A/B/C1/D1 で filename の内容が /A/B/C2/D2 の場合、load -i コマンド後の AIM_MANIFEST ファイルの内容は /A/B/{C1/D1,C2/D2} です。C ノードは、新しいノードを追加できる最初の場所です。filename データの C ノードが、AIM_MANIFEST データ内の既存の C ノードの後に追加されます。2 つの A 要素が異なる値を持っているか、2 つの B 要素が異なる値を持っている場合、filename 要素の値は AIM_MANIFEST 要素の値を置き換えます。2 つの A 要素が異なる属性を持っているか、2 つの B 要素が異なる属性を持っている場合、属性の値はマージされます。
AIM_MANIFEST ファイルと filename ファイルの両方に存在する A と B の属性は、マージされたファイルでは filename ファイルの値になります。
AIM_MANIFEST ファイルまたは filename ファイルの両方ではなくどちらかにのみ存在する A と B の属性は、マージされたファイル内ではすべて保持されます。
例 2: 異なるタグが付けられた要素の挿入。AIM_MANIFEST の内容が /A/B/C/D で filename の内容が /A/B/E/F の場合、load -i コマンド後の AIM_MANIFEST ファイルの内容は /A/B/{E/F,C/D} です。E ノードは、DTD によって許可されている最初の場所に追加されます。要素 A と要素 B の値は filename の値で、A と B の属性は、上の例 1 で説明されているように filename から AIM_MANIFEST にマージされます。
場合によっては、正しいマージ場所を決定できないことがあります。これは、マージするノードをたどるために必要な兄弟がまだ追加されていない場合に起こります。この問題を回避するには、複数のノードまたはサブツリーを、DTD によって指定された順序で共通の親ノードに追加します。新しい兄弟間で正しい場所が決定できない場合、ノードはそれらの兄弟のリストの最後に配置されます。
!DOCTYPE 文で参照されている DTD に対して AIM_MANIFEST マニフェストを検証します。エラーは標準エラー出力に出力されます。検証が失敗した場合、ゼロ以外のエラーステータスが返されます。
次のオペランドは必須です。
load サブコマンドには filename オペランドが必要です。このオペランドは、AIM_MANIFEST マニフェストに読み込む完全なマニフェストまたは部分的なマニフェストの名前です。
add と set サブコマンドには、value オペランドが必要です。value オペランドは、path オペランドによって指定された要素または属性の有効な値です。
aimanifest コマンドの add、get、set サブコマンドには、path オペランドが必要です。パスは、要素と属性の XML 階層内のノードを定義します。
XML 要素の階層構造は、XML ツリーとも呼ばれます。次の部分的な AI マニフェストでは、auto_install 要素はツリーのルートで、ai_instance 要素と software 要素はブランチ、またはサブツリーのルートです。
<auto_install> <ai_instance> <software type="IPS"/> </ai_instance> </auto_install>
aimanifest パス構文では、スラッシュ文字 (/) を使用してツリー構造のブランチを示します。現在の例では、software 要素へのパスは /auto_install/ai_instance/software です。
属性は 1 つの要素にバインドされます。aimanifest パス構文では、アットマーク記号 (@) を使用して属性名を示します。software 要素の type 属性へのパスは、/auto_install/ai_instance/software@type です。
aimanifest の path オペランドは、単一の要素に対応している必要があります。必要に応じて、要素と属性の値を含めてパスを一意にします。たとえば、次の部分的な AI マニフェストで定義された 2 番目のスライスに対してサイズを指定するには、パス /auto_install/ai_instance/target/disk/slice[@name="4"]/size@val を使用して、サイズを指定するスライスを特定します。
<auto_install> <ai_instance> <target> <disk> <slice name="0"/> <slice name="4"/> </disk> </target> </ai_instance> </auto_install>
相対パスは許可されています。前の段落で示された slice のパスの指定は、4 の name 属性値を持つ slice が 1 つしかないため、ai_instance、target、disk、または slice で開始できます。たとえば、パス slice[@name="4"]/size@val を使用できます。
パス内の値にスラッシュ文字が含まれる場合、/name="pkg:/entire" のように、その値を一重引用符または二重引用符で囲む必要があります。
aimanifest の呼び出しがシェルスクリプト内で行われる場合、引用符を含む値に対してさらに特別な処理が必要になる場合があります。シェルスクリプト内では、aimanifest パス値の引用符の前にバックスラッシュ文字 (\) を追加してエスケープし、シェルが引用符を削除または解釈しないようにすることが必要になる場合があります。使用しているシェルの規則を確認してください。次の例は、ksh93 スクリプト内のスラッシュ文字が含まれる値を示しています。
/usr/bin/aimanifest get software_data[name=\"pkg:/entire\"]@action
このマニュアルページでは、aimanifest がスクリプトまたは特定のシェル内で呼び出されることを前提としないため、このマニュアルページ内のほとんどの例でバックスラッシュエスケープ文字を省略しています。AI 派生マニフェストスクリプトについては、『Oracle Solaris 11 システムのインストール』を参照してください。
次のブランチの形式は、要素または要素属性へのパスを作成する方法を示しています。
A は要素のタグ名で、/auto_install のようになります。このブランチ指定は、単純ブランチとも呼ばれます。単純ブランチのみを持つパスは、単純パスと呼ばれます。
A は要素のタグ名、value はその要素の値で、/name="pkg:/entire" のようになります。
A は要素、B は A の子である要素、C は B の子である要素、value は C 要素の値です。このパス形式は、値が value の孫要素 C を持つ A 要素を指定します。たとえば、AI マニフェストに複数のソフトウェアセクションがある場合、この形式を使用すると、次のパスのように、パッケージ pkg:/entire をインストールするソフトウェアセクションに対する操作が可能になります。
software[software_data/name="pkg:/entire"]
A は要素、Aattr は A の属性、value は Aattr 属性の値です。このパス形式は、値が value の属性 Aattr を持つ A 要素を指定します。たとえば、AI マニフェストが複数のスライスを定義している場合、この形式を使用すると、slice[@name="4"] のように、4 の name 値を持つスライスに対する操作が可能になります。
A は要素、B は A の子、C は B の子、Cattr は C の属性、value は Cattr 属性の値です。このパス形式は、値が value の属性 Cattr を持つ孫要素 C を持つ A 要素を指定します。たとえば、AI マニフェストに複数のソフトウェアセクションがある場合、この形式を使用すると、パス software[source/publisher@name="solaris"] のように、名前の値が solaris のパブリッシャーセクションを持つソフトウェアセクションに対する操作が可能になります。
/A[1] は、マニフェスト内の A 要素の最初のインスタンスを指定します。たとえば、AI マニフェストに複数のソフトウェアセクションがある場合、この形式を使用すると、/auto_install[1]/ai_instance[1]/software[2] のように、2 番目のソフトウェアセクションに対する操作が可能になります。
これは、-r オプションによって返されるパスの形式です。「戻りパス」のセクションを参照してください。
このパスは、A 要素の Aattr 属性を指定します。このパスは、A 要素ではなく Aattr 属性を指定します。この形式を使用して、Aattr 属性を設定または取得します。
このパスは、値が value の孫属性 C を持つ A 要素の Aattr 属性を指定します。
このパスは、値が value の Cattr 属性を持つ孫要素 C を持つ A 要素の Aattr 属性を指定します。
このパスは、値が value の B 要素の Battr 属性を指定します。B 要素は A 要素の子です。
-r オプションを使用すると、add、get、set サブコマンドは、そのサブコマンドによって作成またはアクセスされた要素のアドレスを返します。この返されたアドレスは、ノード ID のチェーンの形式になります。この返されたアドレスを使用すると、同じ要素に関連付けられた値が変更された場合であっても、その値に再度アクセスできます。
次の例は、-r オプションによって返されたアドレスが、要素と属性の値を指定するパスよりはるかに簡単に使用できることを示しています。次のノードツリーで開始します。
auto_install | ai_instance | target | disk attribute: whole_disk=true | disk_name attribute: name=data1 attribute: name_type=volid
name 属性値が data2 で name_type 属性値が volid の新しい disk ノードを追加します。
auto_install | ai_instance | target | |----------|----------| disk disk whole_disk=true whole_disk=true | | disk_name disk_name name=data1 name=data2 name_type=volid name_type=volid
1 つの属性を持つ新しい disk_name 要素は、単一のコマンドで簡単に追加できます。2 番目の属性と 3 番目の属性を追加するには、変更する disk_name 要素を指定する必要があります。同じノードに複数回アクセスするための次の 2 つの方法を比較します。
この例のコマンドは、値を使用してパスを指定します。最初のコマンドで一意の値を割り当て、以降のコマンドではその値を使用して一意のパスを指定できるようにする必要があります。この方法では、値が変更された場合に正しくない結果が生成される可能性があります。
$ aimanifest add target/disk/disk_name@name data2 $ aimanifest set \ > target/disk/disk_name[@name=data2]@name_type volid $ aimanifest set \ > target/disk[disk_name@name=data2]@whole_disk true
同じノードに複数回アクセスするもっとも信頼性の高い方法は、新しい disk_name 要素へのパスを保存し、その保存したパスを以降のアクセスで使用する方法です。
$ NewDisk=$(aimanifest add -r target/disk@whole_disk true) $ aimanifest add ${NewDisk}/disk_name@name data2 $ aimanifest add ${NewDisk}/disk_name@name_type volid
-r オプションによって $NewDisk に返されるパスは、ノードを ID で表しており、値を持ちません。
$ aimanifest add -r target/disk/@whole_disk true /auto_install[1]/ai_instance[1]/target[1]/disk[2]
これらの例を試すには、AIM_MANIFEST を設定する必要があります。
$ export AIM_MANIFEST=/tmp/aimtest.xml
aimanifest コマンドが変更できる AIM_MANIFEST ファイルには、少なくとも次の両方の要素が含まれている必要があります。
作成している XML マニフェストで有効な DTD への !DOCTYPE 参照。
このマニフェストのルート要素。
次の例は、AI マニフェスト用の最低限の AIM_MANIFEST マニフェストファイルを示しています。
<!DOCTYPE auto_install SYSTEM "file:///usr/share/install/ai.dtd"> <auto_install/>
通常は、既存の有効な AI マニフェストに対して動作する派生マニフェストスクリプト内で aimanifest コマンドを使用します。これらの例を試すには、/usr/share/auto_install/manifest/default.xml をコピーしてから、AIM_MANIFEST を定義してこのコピーを参照します。このコピーが書き込み可能になっていることを確認してください。
例 1 auto_reboot の属性の設定
$ aimanifest set /auto_install/ai_instance@auto_reboot false
例 2 auto_reboot の値の取得
$ aimanifest get /auto_install/ai_instance@auto_reboot false
例 3 値のパスを使用したパブリッシャーの追加
この例のパッケージリポジトリは、file:///net/host2/export/extras_repo にあるファイルリポジトリです。パブリッシャーは extras です。
$ aimanifest add \ > software/source/publisher@name extras $ aimanifest add \ > software/source/publisher[@name=extras]/origin@name \ > file:///net/host2/export/extras_repo $ aimanifest set \ > software[source/publisher@name=extras]@name extras $ aimanifest set \ > software[source/publisher@name=extras]@type IPS
これらの aimanifest コマンドは、次の AI マニフェストエントリを生成します。software 要素は、同じタグが付けられた兄弟が許可されているパスの最初の要素であるため、XML コードのこのセクションは、出力ファイル内にすでに存在する最後の software セクションに続きます。
<software name="extras" type="IPS"> <source> <publisher name="extras"> <origin name="file:///net/host2/export/extras_repo"/> </publisher> </source> </software>
例 4 戻りパスを使用したパブリッシャーの追加
この例は前の例と同じですが、同じ結果を得るために異なる方法を使用します。
$ SW_PATH=$(aimanifest add -r \ > /auto_install/ai_instance/software@name extras) $ aimanifest set ${SW_PATH}@type IPS $ PUB_PATH=$(aimanifest add ${SW_PATH}/source/publisher@name extras) $ aimanifest add \ ${PUB_PATH}/origin@name file:///net/host2/export/extras_repo)
例 5 マニフェストフラグメントの追加によるパブリッシャーの追加
この例は前の例と同じですが、同じ結果を得るために 3 番目の方法を使用します。
次の内容を持つ extras.xml という名前のファイルを作成します。
<auto_install> <ai_instance> <software name="extras" type="IPS"> <source> <publisher name="extras"> <origin name="file:///net/host2/export/extras_repo"/> </publisher> </source> </software> </ai_instance> </auto_install>
ソフトウェアセクションのみが必要な場合でも、auto_install 要素と ai_instance 要素も含める必要があります。path オペランドで必要となるすべてのものを含める必要があります。読み込まれたファイルが auto_install 要素または ai_instance 要素の属性を指定している場合、それらの属性値は既存の値を置き換えるか、または追加されます。
次のコマンドを使用して、この software セクションを AIM_MANIFEST マニフェストに追加します。
$ aimanifest load -i extras.xml
例 6 値のパスを使用したパッケージの追加
この例では、パス内の値としてパブリッシャー名を指定することによって、extras という名前の publisher 要素を持つ software 要素にパッケージを追加します。この例では、相対パス指定の使用についても示しています。
$ aimanifest add \ > software[source/publisher@name=extras]/software_data/name \ > pkg:/system/utils
この aimanifest コマンドは、次の software_data セクションを追加します。
<software name="extras" type="IPS"> <source> <publisher name="extras"> <origin name="file:///net/host2/export/extras_repo"/> </publisher> </source> <software_data> <name>pkg:/system/utils</name> </software_data> </software>
例 7 戻りパスを使用したパッケージの追加
この例は前の例と同じですが、同じ結果を得るために異なる方法を使用します。この例では、パス内の値としてパブリッシャーの名前を指定する代わりに、「戻りパスを使用したパブリッシャーの追加」の例で SW_PATH に保存した software 要素へのパスを使用します。
$ aimanifest add ${SW_PATH}/software_data/name pkg:/system/utils
例 8 マニフェストの検証
AIM_MANIFEST マニフェストを検証します。
$ aimanifest validate
次の終了ステータスが返されます。
コマンドは正常に処理されました。
エラーが発生した。
この環境変数の値は、構築されている AI マニフェストの場所です。
この環境変数の値は、aimanifest の動作のログファイルの場所です。
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
『Oracle Solaris 11 システムのインストール』のパート III「インストールサーバーを使用したインストール」