ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
Oracle Solaris 11.1 システムのインストール Oracle Solaris 11.1 Information Library (日本語) |
パート I Oracle Solaris 11.1 のインストールオプション
6. Oracle Solaris インスタンスの構成解除または再構成
クライアントのインストールより前にカスタムの AI マニフェストを作成する別の方法は、クライアントのインストール時にクライアントごとに動的に AI マニフェストを作成するスクリプトを記述することです。このスクリプトでは、クライアントごとに環境変数やほかのクライアント構成情報のクエリー検索を行なってカスタム AI マニフェストを作成できます。このマニフェストはインストール時に検出された各クライアントの属性に基づいているため、「派生マニフェスト」と呼ばれます。
派生マニフェストは、ほぼ同じようにインストールできるシステムが多数あるためにこれらのシステムの AI マニフェストの差異が比較的小さい場合に特に便利です。このグループのシステムに共通のインストールパラメータを指定した AI マニフェストを作成します。この共通のマニフェストをベースとして使用し、各クライアントをインストールするときに、クライアントごとに異なるパラメータを共通のマニフェストに追加する派生マニフェストスクリプトを作成します。たとえば、派生マニフェストスクリプトでは、クライアントのインストール時に各クライアントシステムに接続されているディスクの数と大きさを検出し、クライアントごとにカスタムのディスクレイアウトを指定するように AI マニフェストを変更できます。
変更するベースマニフェストとして使用する既存の AI マニフェストを特定します。
スクリプトを作成してテストする場合は、ローカルコピーを使って作業できます。インストール時に、この派生マニフェストスクリプトを使用する各クライアントがベースマニフェストにアクセスできる必要があります。
インストールしているクライアントの属性に基づいてインストール時にベースマニフェストを動的に変更するスクリプトを作成します。
派生マニフェストスクリプトを適切な AI インストールサービスに追加し、インストール時にどのクライアントがこのスクリプトを使用してインストール手順を作成するかを定義した条件を指定します。クライアントの選択条件を指定しない場合は、このスクリプトをサービスのデフォルトの AI マニフェストとして追加できます。
AI では、クライアントのインストール時にこのスクリプトを実行して AI マニフェストのインスタンスを生成します。AI では、結果となるマニフェストを構文的に検証します。
注 - マニフェストが作成されないか、または派生マニフェストが有効でない場合、クライアントのインストールは異常終了します。検証エラーの原因を調査するには、そのクライアント上の /system/volatile/install_log を参照してください。
クライアントのインストールが成功した場合は、派生マニフェストがクライアント上の /var/log/install/derived/manifest.xml にコピーされ、マニフェストの派生に使われたスクリプトが /var/log/install/derived/manifest_script にコピーされます。
一般に、派生マニフェストスクリプトでは、クライアントから情報を取得し、その情報を使ってベース AI マニフェストを変更して、このクライアント専用のカスタム AI マニフェストを作成します。派生マニフェストスクリプトでは、複数の部分的な AI マニフェストを組み合わせることもできます。最終的な派生マニフェストは、完全で、検証に合格する必要があります。
派生マニフェストスクリプトは、イメージでサポートされているどの種類のスクリプトにもできます。たとえば、デフォルトでは ksh93 と python がイメージに含まれています。別の種類のスクリプトを使用する場合は、必要なサポートがイメージに含まれていることを確認します。
派生マニフェストスクリプトは、システムの属性を読み取るコマンドを実行できます。AI では、そのスクリプトを役割 aiuser として実行します。役割 aiuser には、非特権ユーザーが持つすべての特権と次の追加の特権があります。
solaris.network.autoconf.read solaris.smf.read.*
役割 aiuser は、ほかの非特権ユーザーよりも多くの情報をシステムから読み取れることを除いては非特権です。役割 aiuser はシステムを変更できません。
役割、プロファイル、および特権については、『Oracle Solaris 11.1 の管理: セキュリティーサービス』のパート III「役割、権利プロファイル、特権」を参照してください。
システムの属性を読み取るコマンドを使用するほかに、次の表に示される環境変数を通じてもクライアントの属性を使用できます。
表 10-1 クライアント属性の環境変数
|
AI マニフェストの XML 要素を追加または変更するには、/usr/bin/aimanifest コマンドを使用します。
aimanifest によって変更するファイルには、少なくとも次の内容が含まれている必要があります。
作成している XML マニフェストで有効な DTD への !DOCTYPE 参照。
この DTD のルート要素。
次の例は、この派生マニフェストスクリプトが追加されるインストールサービスの AI DTD ファイルの指定など、AI マニフェストのために最低限必要なベースマニフェストファイルを示しています。
<!DOCTYPE auto_install SYSTEM "file:///imagepath/auto_install/ai.dtd.#"> <auto_install/>
# は 1 などの整数です。imagepath 引数の値は、次のコマンドによって返されるパスです (svcname はこの派生マニフェストスクリプトが追加されるインストールサービスの名前です)。
$ installadm list -n svcname
aimanifest コマンドの load サブコマンドを使用してベースマニフェストを読み込んでから、派生マニフェストスクリプト内のほかの aimanifest 呼び出しを行なってください。クライアントのインストール時には、読み込んだどのファイルにもクライアントがアクセスできる必要があります。たとえば、ターゲットインストールサービスの imagepath/auto_install/manifest/ からマニフェストを読み込むことができます。
この章の例では、ファイル /usr/share/auto_install/manifest/default.xml が読み込まれます。/usr/share/auto_install/manifest/ 内のマニフェスト例は、ターゲットインストールサービスのマニフェストとは異なっている可能性があります。本稼働では、/usr/share/auto_install/manifest/ からマニフェストを読み込まないようにしてください。
load サブコマンドは、部分的なマニフェストの読み込みまたは挿入にも使用できます。
新しい要素を追加するには、add サブコマンドを使用します。要素の属性を追加したり、要素または属性の値を変更したりするには、set サブコマンドを使用します。詳細は、aimanifest(1M) のマニュアルページを参照してください。マニュアルページと以下のスクリプト例には、aimanifest コマンドの使用例が含まれています。
注 - aimanifest コマンドで指定した値に次のいずれかの文字が含まれている場合は、これらの文字が XML のパス名の一部として解釈されないように、その値を一重引用符または二重引用符で囲む必要があります。
/'"@[]=
場合によっては、使用するシェルの規則に従って引用符の前にバックスラッシュ文字 (\) を付けてエスケープし、シェルが引用符を削除または解釈しないようにする必要があります。
次の例では、パッケージ名 pkg:/entire が含まれる software_data 要素のアクションが返されます。この例では、スラッシュ文字が特殊文字であるため、pkg:/entire の前後に引用符を付ける必要があります。このコマンドが ksh93 スクリプトなどのシェルスクリプト内で呼び出される場合は、バックスラッシュ文字でこれらの引用符をエスケープする必要があります。
/usr/bin/aimanifest get software_data[name=\"pkg:/entire\"]@action
ヒント - ベストプラクティスに基づき、エラー発生時に停止するトラップを設定してください。
次のスクリプトの一部は、派生マニフェストスクリプトの良い見本です。
#!/bin/ksh93 SCRIPT_SUCCESS=0 SCRIPT_FAILURE=1 function handler { exit $SCRIPT_FAILURE } trap handler ERR /usr/bin/aimanifest load baseAImanifest.xml # Customize AI manifest. For example: /usr/bin/aimanifest load -i manifest_fragment.xml /usr/bin/aimanifest set origin@name file:///net/myserver/myrepo/repo.redist exit $SCRIPT_SUCCESS
このセクションでは、クライアントの属性を判別し、その情報を使って AI マニフェストをカスタマイズする派生マニフェストスクリプトを作成する方法を示します。これらの例には、有効な AI マニフェストの作成に必要な情報が必ずしもすべて含まれているわけではありません。
これらの例を試すには、次の設定手順を実行します。
AIM_MANIFEST 環境変数を、スクリプトによって AI マニフェストが作成される場所に設定します。
$AIM_MANIFEST ファイルは、そのファイルを変更する aimanifest コマンドごとに書き換えられます。aimanifest を load、add、または set サブコマンドとともに呼び出すたびに、AIM_MANIFEST ファイルが開かれ、変更され、保存されます。AIM_MANIFEST が設定されていない場合、aimanifest コマンドは失敗します。
AIM_LOGFILE 環境変数を、スクリプトによって詳細な情報とエラーメッセージが書き込まれる場所に設定します。
aimanifest コマンドは、サブコマンドの名前、引数の値、および各 aimanifest 呼び出しの戻りステータスを画面および $AIM_MANIFEST_LOG ファイル (設定されている場合) に記録します。
スクリプトを実行するシステムで aimanifest コマンドが使用できることを確認します。aimanifest コマンドが使用できない場合は、auto-install-common パッケージをインストールします。
環境変数を設定します。これらの例では、環境変数を使用してクライアントに関する情報を取得する方法を示しています。これらの例を試すには、これらの環境変数の値を設定する必要があります。
AI を使用してシステムをインストールすると、表 10-1 に示す環境変数に値が設定され、使用する派生マニフェストスクリプトで使用できるようになります。
例 10-1 ディスクサイズに基づいたディスクパーティション分割の指定
この例では、ターゲットディスクのサイズが 1T バイトを超える場合は Oracle Solaris fdisk パーティションにディスクの半分だけを使用するように AI マニフェストをカスタマイズします。このスクリプトの異なる実行に対して、SI_DISKSIZE_1 を 1T バイト未満に設定してから、1T バイトを超えるサイズに設定してみます。また、スクリプトを実行する前に SI_NUMDISKS と SI_DISKNAME_1 も設定します。指定されたパーティション分割は x86 クライアントのみに適用されるため、このスクリプトは x86 クライアント専用です。
#!/bin/ksh93 SCRIPT_SUCCESS=0 SCRIPT_FAILURE=1 function handler { exit $SCRIPT_FAILURE } trap handler ERR /usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml # Check that there is only one disk on the system. if [[ $SI_NUMDISKS -gt "1" ]] ; then print -u2 "System has too many disks for this script." exit $SCRIPT_FAILURE fi /usr/bin/aimanifest add \ /auto_install/ai_instance/target/disk/disk_name@name $SI_DISKNAME_1 if [[ $SI_DISKSIZE_1 -gt "1048576" ]] ; then typeset -i PARTN_SIZE=$SI_DISKSIZE_1/2 # Default action is to create. /usr/bin/aimanifest add \ /auto_install/ai_instance/target/disk[disk_name@name=\"$SI_DISKNAME_1\"]/partition@name 1 /usr/bin/aimanifest add \ /auto_install/ai_instance/target/disk/partition[@name=1]/size@val \ ${PARTN_SIZE}mb else /usr/bin/aimanifest add \ /auto_install/ai_instance/target/disk[disk_name@name=\"$SI_DISKNAME_1\"]/partition@action \ use_existing_solaris2 fi exit $SCRIPT_SUCCESS
SI_DISKSIZE_1 の値が 1048576 以下であるクライアントでは、次の要素が $AIM_MANIFEST に追加されます。
<target> <disk> <disk_name name="/dev/dsk/c0t0d0s0"/> <partition action="use_existing_solaris2"/> </disk> <!-- <logical> section --> </target>
SI_DISKSIZE_1 が 1048576 より大きいクライアントでは、SI_DISKSIZE_1 の値に応じて、次のような要素が $AIM_MANIFEST に追加されます。
<target> <disk> <disk_name name="/dev/dsk/c0t0d0s0"/> <partition name="1"> <size val="524288mb"/> </partition> </disk> <!-- <logical> section --> </target>
パーティションを追加するためのコマンドには、そのパーティションに対して別個のディスク指定が作成されないように、disk_name が指定されています。この例のスクリプトは、パーティションが (ほかのディスクではなく) $SI_DISKNAME_1 ディスク上にあることを指定しています。この例の該当する行が次の行に置き換わると、意図した結果が得られません。
/usr/bin/aimanifest add \ /auto_install/ai_instance/target/disk/partition@name 1 /usr/bin/aimanifest add \ /auto_install/ai_instance/target/disk/partition[@name=1]/size@val \ ${PARTN_SIZE}mb else /usr/bin/aimanifest add \ /auto_install/ai_instance/target/disk/partition@action \ use_existing_solaris2
このスクリプトは、上記の出力ではなく、次の不正な出力を提供します。
<target> <disk> <disk_name name="c0t0d0s0"/> </disk> <disk> <partition name="1"> <size val="524288mb"/> </partition> </disk> </target>
例 10-2 追加ディスクの存在に基づいたルートプールレイアウトの指定
この例では、2 番目のディスクが存在する場合はルートプールのミラーを構成し、3 番目のディスクが存在する場合は 3 方向のミラーを構成するように AI マニフェストをカスタマイズします。スクリプトを実行する前に、SI_NUMDISKS と SI_DISKNAME_1 を設定します。SI_NUMDISKS に設定した値に応じて、SI_DISKNAME_2、SI_DISKNAME_3 などを必要に応じて設定します。AI のインストール中に、これらの環境変数が設定され、派生マニフェストスクリプトで使用できるようになります。
この例では、aimanifest の戻りパス (-r オプション) の使用方法を示しています。戻りパスの詳細は、aimanifest(1M) のマニュアルページを参照してください。
#!/bin/ksh93 SCRIPT_SUCCESS=0 SCRIPT_FAILURE=1 function handler { exit $SCRIPT_FAILURE } trap handler ERR /usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml # Use the default if there is only one disk. if [[ $SI_NUMDISKS -ge 2 ]] ; then typeset -i disk_num # Turn on mirroring. Assumes a root zpool is already set up. vdev=$(/usr/bin/aimanifest add -r \ target/logical/zpool[@name=rpool]/vdev@name mirror_vdev) /usr/bin/aimanifest set ${vdev}@redundancy mirror for ((disk_num = 1; disk_num <= $SI_NUMDISKS; disk_num++)) ; do eval curr_disk="$"SI_DISKNAME_${disk_num} disk=$(/usr/bin/aimanifest add -r target/disk@in_vdev mirror_vdev) /usr/bin/aimanifest set ${disk}@in_zpool rpool /usr/bin/aimanifest set ${disk}@whole_disk true disk_name=$(/usr/bin/aimanifest add -r \ ${disk}/disk_name@name $curr_disk) /usr/bin/aimanifest set ${disk_name}@name_type ctd done fi exit $SCRIPT_SUCCESS
c0t0d0 および c0t1d0 という名前の 2 台のディスクを含むシステムの場合、この例の出力は次の XML 要素になります。
<target> <disk in_vdev="mirror_vdev" in_zpool="rpool" whole_disk="true"> <disk_name name="c0t0d0" name_type="ctd"/> </disk> <disk in_vdev="mirror_vdev" in_zpool="rpool" whole_disk="true"> <disk_name name="c0t1d0" name_type="ctd"/> </disk> <logical> <zpool name="rpool" is_root="true"> <vdev name="mirror_vdev" redundancy="mirror"/> <filesystem name="export" mountpoint="/export"/> <filesystem name="export/home"/> <be name="solaris"/> </zpool> </logical> </target>
例 10-3 特定のサイズのディスクが 2 つ以上ある場合のミラー化構成の指定
この例では、システムに 200G バイトのディスクが 2 つ以上ある場合にミラー化構成を指定するように AI マニフェストをカスタマイズします。少なくとも 200G バイトであることがわかった最初の 2 つのディスクを使用します。スクリプトを実行する前に、テスト環境で SI_NUMDISKS、SI_DISKNAME_1、および SI_DISKSIZE_1 を設定します。また、SI_NUMDISKS に設定した値に応じて、SI_DISKNAME_2、SI_DISKSIZE_2 などを必要に応じて設定します。AI のインストール中に、これらの環境変数が設定され、派生マニフェストスクリプトで使用できるようになります。
この例では、同じパスを持つノードが複数存在している場合にノードを変更する方法を示しています。シェルの実装では、aimanifest の戻りパス (- r) オプションを使用して特定のノードへのパスを返し、そのパスを使用して同じノードに追加の変更を行います。Python の実装では、サブパス (ノードパスの内側で [] を使用) を使って同じノードに追加の変更を行う方法を示しています。
#!/bin/ksh93 SCRIPT_SUCCESS=0 SCRIPT_FAILURE=1 function handler { exit $SCRIPT_FAILURE } trap handler ERR # Find the disks first. typeset found_1 typeset found_2 typeset -i disk_num for ((disk_num = 1; disk_num <= $SI_NUMDISKS; disk_num++)) ; do eval curr_disk="$"SI_DISKNAME_${disk_num} eval curr_disk_size="$"SI_DISKSIZE_${disk_num} if [[ $curr_disk_size -ge "204800" ]] ; then if [ -z $found_1 ] ; then found_1=$curr_disk else found_2=$curr_disk break fi fi done # Now, install them into the manifest. # Let the installer take the default action if two large disks are not found. /usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml if [[ -n $found_2 ]] ; then # Turn on mirroring. vdev=$(/usr/bin/aimanifest add -r \ /auto_install/ai_instance/target/logical/zpool/vdev@redundancy mirror) /usr/bin/aimanifest set ${vdev}@name mirror_vdev disk=$(/usr/bin/aimanifest add -r \ /auto_install/ai_instance/target/disk@in_vdev mirror_vdev) disk_name=$(/usr/bin/aimanifest add -r ${disk}/disk_name@name $found_1) /usr/bin/aimanifest set ${disk_name}@name_type ctd disk=$(/usr/bin/aimanifest add -r \ /auto_install/ai_instance/target/disk@in_vdev mirror_vdev) disk_name=$(/usr/bin/aimanifest add -r ${disk}/disk_name@name $found_2) /usr/bin/aimanifest set ${disk_name}@name_type ctd fi exit $SCRIPT_SUCCESS
次のスクリプトは、前の Korn shell 版を Python 版にしたものです。
#!/usr/bin/python2.6 import os import sys from subprocess import check_call, CalledProcessError SCRIPT_SUCCESS = 0 SCRIPT_FAILURE = 1 def main(): # Find the disks first. found_1 = "" found_2 = "" si_numdisks = int(os.environ["SI_NUMDISKS"]) for disk_num in range(1, si_numdisks + 1): curr_disk_var = "SI_DISKNAME_" + str(disk_num) curr_disk = os.environ[curr_disk_var] curr_disk_size_var = "SI_DISKSIZE_" + str(disk_num) curr_disk_size = os.environ[curr_disk_size_var] if curr_disk_size >= "204800": if not len(found_1): found_1 = curr_disk else: found_2 = curr_disk break # Now, write the disk specifications into the manifest. # Let the installer take the default action if two large disks are not found. try: check_call(["/usr/bin/aimanifest", "load", "/usr/share/auto_install/manifest/default.xml"]) except CalledProcessError as err: sys.exit(err.returncode) if len(found_2): try: check_call(["/usr/bin/aimanifest", "add", "target/logical/zpool[@name=rpool]/vdev@redundancy", "mirror"]) check_call(["/usr/bin/aimanifest", "set", "target/logical/zpool/vdev[@redundancy='mirror']@name", "mirror_vdev"]) check_call(["/usr/bin/aimanifest", "add", "target/disk/disk_name@name", found_1]) check_call(["/usr/bin/aimanifest", "set", "target/disk/disk_name[@name='" + found_1 + "']" + "@name_type", "ctd"]) check_call(["/usr/bin/aimanifest", "set", "target/disk[disk_name@name='" + found_1 + "']" + "@in_vdev", "mirror_vdev"]) check_call(["/usr/bin/aimanifest", "add", "target/disk/disk_name@name", found_2]) check_call(["/usr/bin/aimanifest", "set", "target/disk/disk_name[@name='" + found_2 + "']" + "@name_type", "ctd"]) check_call(["/usr/bin/aimanifest", "set", "target/disk[disk_name@name='" + found_2 + "']" + "@in_vdev", "mirror_vdev"]) except CalledProcessError as err: sys.exit(err.returncode) sys.exit(SCRIPT_SUCCESS) if __name__ == "__main__": main()
例 10-4 IP アドレスに基づくインストールするパッケージの指定
この例では、クライアントの IP アドレスが指定の範囲にある場合はあるパッケージをインストールし、クライアントの IP アドレスが別の範囲にある場合は別のパッケージをインストールするように AI マニフェストをカスタマイズします。スクリプトを実行する前に、テスト環境で SI_HOSTADDRESS を設定します。AI のインストール中に、この環境変数が設定され、派生マニフェストスクリプトで使用できるようになります。
#!/bin/ksh93 SCRIPT_SUCCESS=0 SCRIPT_FAILURE=1 function handler { exit $SCRIPT_FAILURE } trap handler ERR /usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml # First determine which range the host IP address of the client is in. echo $SI_HOSTADDRESS | sed 's/\./ /g' | read a b c d # Assume all systems are on the same class A and B subnets. # If the system is on class C subnet = 100, then install the /pkg100 package. # If the system is on class C subnet = 101, then install the /pkg101 package. # Otherwise, do not install any other additional package. if ((c == 100)) ; then /usr/bin/aimanifest add \ software/software_data[@action='install']/name pkg:/pkg100 fi if ((c == 101)) ; then /usr/bin/aimanifest add \ software/software_data[@action='install']/name pkg:/pkg101 fi exit $SCRIPT_SUCCESS
例 10-5 特定のサイズ以上のディスクのみをターゲットディスクにする指定
この例では、50G バイト以上のディスクにのみインストールするように AI マニフェストをカスタマイズします。それよりも小さいディスクは無視します。スクリプトを実行する前に、テスト環境で SI_NUMDISKS、SI_DISKNAME_1、および SI_DISKSIZE_1 を設定します。また、SI_NUMDISKS に設定した値に応じて、SI_DISKNAME_2、SI_DISKSIZE_2 などを必要に応じて設定します。AI のインストール中に、これらの環境変数が設定され、派生マニフェストスクリプトで使用できるようになります。
#!/bin/ksh93 SCRIPT_SUCCESS=0 SCRIPT_FAILURE=1 function handler { exit $SCRIPT_FAILURE } trap handler ERR /usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml typeset found typeset -i disk_num for ((disk_num = 1; disk_num <= $SI_NUMDISKS; disk_num++)) ; do eval curr_disk="$"SI_DISKNAME_${disk_num} eval curr_disk_size="$"SI_DISKSIZE_${disk_num} if [[ $curr_disk_size -ge "512000" ]] ; then found=$curr_disk /usr/bin/aimanifest add \ /auto_install/ai_instance/target/disk/disk_name@name $found break fi done if [[ -z $found ]] ; then exit $SCRIPT_FAILURE fi exit $SCRIPT_SUCCESS
例 10-6 マニフェスト仕様が正しくないスクリプト
この例のスクリプトにはエラーが含まれています。
#!/bin/ksh93 SCRIPT_SUCCESS=0 SCRIPT_FAILURE=1 function handler { exit $SCRIPT_FAILURE } trap handler ERR /usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml /usr/bin/aimanifest set \ software[@type="IPS"]/software_data/name pkg:/driver/pcmcia /usr/bin/aimanifest set \ software/software_data[@name=pkg:/driver/pcmcia]@action uninstall return $SCRIPT_SUCCESS
この例には、$AIM_MANIFEST への書き込みに関する問題が 3 つあります。
aimanifest の set サブコマンドでは、既存の要素または属性の値を変更したり、新しい属性を作成したりできます。set サブコマンドで新しい要素を作成することはできません。最初の set サブコマンドでは、新しいパッケージ名を作成するのではなく、マニフェスト内の既存のパッケージ名を変更しようとします。マニフェスト内に複数のパッケージ名が存在する場合は、変更するパッケージを特定できないため、あいまいエラーが発生します。この例の最初の set サブコマンドは add サブコマンドにするべきでした。
この例の 2 番目の set サブコマンドでは、値 pkg:/driver/pcmcia を持つ要素 name が @ 記号を前に付けて指定されています。属性値は @ 記号を前に付けて指定しますが、要素値はそのようにしません。
値 pkg:/driver/pcmcia は引用符で囲むようにしてください。スラッシュなどの特殊文字が含まれる値には引用符を付ける必要があります。
この例の 2 つの set 行は、次の行で置き換えるようにしてください。
/usr/bin/aimanifest add \ software[@type="IPS"]/software_data@action uninstall /usr/bin/aimanifest add \ software/software_data[@action=uninstall]/name pkg:/driver/pcmcia
これらの 2 つの add サブコマンドによって、作成中のマニフェストの software セクションの最後に次の行が追加されます。
<software_data action="uninstall"> <name>pkg:/driver/pcmcia</name> </software_data>
派生マニフェストスクリプトをテストするには、AI インストール環境に似ている環境でスクリプトを実行します。
変更するスクリプト用のベース AI マニフェストを設定します。
スクリプト内の最初の aimanifest コマンドが aimanifest load コマンドであることを確認します。読み込まれているファイルに、ターゲットインストールサービスの AI マニフェストの検証に使用する適切な DTD を指定した <!DOCTYPE> 定義が含まれていることを確認します。次の例は、この派生マニフェストスクリプトが追加されるインストールサービスの AI DTD ファイルの指定など、AI マニフェストのために最低限必要なベースマニフェストファイルを示しています。
<!DOCTYPE auto_install SYSTEM "file:///imagepath/auto_install/ai.dtd.#"> <auto_install/>
# は 1 などの整数です。imagepath 引数の値は、次のコマンドによって返されるパスです (svcname はこの派生マニフェストスクリプトが追加されるインストールサービスの名前です)。
$ installadm list -n svcname
AIM_MANIFEST を、スクリプトによって AI マニフェストが作成される場所に設定します。この場所は、非特権ユーザー aiuser によって書き込み可能である必要があります。
注 - AI がインストールを行なっているときは、AIM_MANIFEST を設定する必要はありません。AI によってデフォルト値が設定されます。
AIM_LOGFILE を、スクリプトによって詳細な情報とエラーメッセージが書き込まれる場所に設定します。この場所は、非特権ユーザー aiuser によって書き込み可能である必要があります。
注 - AI がインストールを行なっているときは、AIM_LOGFILE を設定する必要はありません。このログ情報は、さらに大きなインストールログ /system/volatile/install_log の一部です。
スクリプトをテストするシステムで aimanifest コマンドが使用できることを確認します。aimanifest コマンドが使用できない場合は、auto-install-common パッケージをインストールします。
root の役割になれることを確認します。root の役割から、パスワードを指定しないで役割 aiuser になることができます。
$ su Password: # su aiuser -c ./script #
AI は、役割 aiuser として派生マニフェストスクリプトを実行します。AI インストール環境に近づけるために、役割 aiuser でスクリプトを実行します。役割 aiuser に含まれるのと異なる特権を持つユーザーとしてスクリプトを実行した場合、スクリプト内のいくつかの操作で結果が異なる可能性があります。
テスト環境の環境変数を、この派生マニフェストスクリプトを使ってインストールされるクライアントシステムを表す値で設定します。サンプルファイル /usr/share/auto_install/derived_manifest_test_env.sh をテンプレートとして使用できます。必要に応じて値を変更します。
AI がインストールを行なっているときに、表 10-1 に示す環境変数に値が設定され、使用する派生マニフェストスクリプトで使用できるようになります。
意図されたクライアントシステムが、派生マニフェストスクリプトをテストするインストールサーバーやその他のシステムと大きく異なる場合があります。スクリプト内で呼び出すコマンドが使用できない場合や、動作の異なる別のバージョンである場合があります。システムのアーキテクチャーが異なる場合や、ディスクの数とサイズが異なる場合があります。説明したようにテスト環境で環境変数を設定することによって、これらの差異のいくつかに対処できます。
この手順では、意図されたクライアントシステムのいずれかで派生マニフェストスクリプトをテストする方法について説明します。
そのクライアントシステムで、AI イメージを「Text Installer and command line」モードでブートします。
AI インストールサーバーからスクリプトをコピーするには、wget または sftp を使用します。
次のいずれかの方法を使用して、スクリプトをデバッグします。
次のコマンドを実行して、AI をテストモードで実行します。
$ auto-install -m script -i
AI ログファイル /system/volatile/install_log を調べます。ログファイルに、スクリプトが有効であることを示す次の行が含まれているはずです。
Derived Manifest Module: XML validation completed successfully
変更が行われた場合は、スクリプトをコピーしてインストールサーバーに戻します。
XML マニフェストをインストールサービスに追加するのと同じ方法で、スクリプトを AI インストールサービスに追加します。同じオプションを使用して、インストールの際にこのスクリプトを使ってマニフェストを作成するクライアントの選択条件を指定します。XML マニフェストを更新するのとまったく同じようにスクリプトを更新できます。スクリプトをサービスのデフォルトのマニフェストになるように設定できます。1 つのサービスに関連付けられたマニフェストを一覧表示するときに、スクリプトが表示されます。XML マニフェストをエクスポートするのとまったく同じようにスクリプトの内容をエクスポートできます。
XML マニフェストをインストールサービスに追加するときに、そのマニフェストが検証されます。スクリプトをインストールサービスに追加するときに、そのスクリプトは検証されません。
スクリプトをインストールサービスに追加する前に、派生した AI マニフェストを検証してください。
意図されたクライアントシステムに似ている環境でスクリプトを実行します。
結果となるマニフェストに対して validate サブコマンドを使用します。
$ /usr/bin/aimanifest validate
検証に失敗した場合にのみメッセージが表示されます。
そのスクリプトを適切な AI インストールサービスに追加し、どのクライアントがこれらのインストール手順を使用するかを定義する条件を指定します。クライアントの選択条件を指定しない場合は、-d オプションを使用して、このスクリプトをサービスのデフォルトの AI マニフェストとして追加できます。
$ pfexec installadm create-manifest -n solaris11_1-i386 -f ./mac1.ksh -m mac1 \ -c mac=BB:AA:AA:AA:AA:AA
複数の -c オプションまたは 1 つの -C ファイルを指定できます。set-criteria サブコマンドも参照してください。クライアント条件の指定方法については、第 9 章インストールのカスタマイズを参照してください。
installadm の list、export、create-manifest、set-criteria、update-manifest、および set-service サブコマンドについては、「インストールサーバーの維持」を参照してください。