第 8 章 Oracle VM Guest Additionsのインストールおよび使用方法
Oracle VM Guest Additionsでは、Oracle VM ManagerとOracle VM環境で実行している仮想マシンのゲスト・オペレーティング・システムとの間の双方向通信が可能です。 Oracle VMゲスト追加は、Oracle VM Managerから仮想マシン内で直接実行されているコンポーネントの構成および動作をきめ細かく制御します。
8.1 Oracle VM Guest Additionsの機能
Oracle VM Guest Additionsは、ゲスト・ソフトウェアおよび仮想レイヤーをダイレクトに統合できるため、複雑な複数の仮想マシン・デプロイメントの編成および自動化に役立ちます。 この統合は、Oracle Solaris、Microsoft Windows、およびOracle Unbreakable Enterprise Kernel( UEK)を実行するOracle Linuxの間で使用できます。
Oracle VM Guest Additionsでは、次に示す処理が可能です。
仮想マシンIPアドレス
Oracle VM Guest Additionsをインストールすると、仮想マシンのIPアドレスが、Oracle VM Manager Webインタフェースの仮想マシンの観点の「Networks」サブタブに表示されます。
8.2 Oracle VM Guest Additionsパッケージ
Oracle VM Guest Additionsをインストールするには、まず一連のパッケージをyumリポジトリから仮想マシンにダウンロードします。 パッケージは、Unbreakable Linuxネットワーク(ULN)またはOracle Linux Yum Serverからダウンロードできます。 必要なパッケージをダウンロードしたら、yum installを使用してインストールします。
次の表は、Oracle VM Guest Additionsのパッケージを示します。
パッケージ |
説明 |
必須またはオプション |
---|---|---|
|
Oracle VM APIのサポートを追加するライブラリ。 |
必須 |
|
Oracle VM APIの開発者サポートを追加するライブラリ。 |
オプション |
|
構成イベントを処理し、仮想マシンとOracle VM Managerとの間のメッセージの送受信を可能にするデーモン。 |
必須 |
|
Oracle VM APIカーネル・インフラストラクチャと通信するライブラリ。 |
必須 |
|
基本的なオペレーティング・システム構成スクリプト。 |
必須 |
|
仮想マシンの認証を構成するためのスクリプト。 |
オプション |
|
仮想マシンの日時設定を構成するためのスクリプト。 |
オプション |
|
仮想マシンのファイアウォールを構成するためのスクリプト。 |
オプション |
|
仮想マシンのネットワーク設定を構成するためのスクリプト。 |
オプション |
|
仮想マシンのSELinux設定を構成するためのスクリプト。 |
オプション |
|
仮想マシンのssh設定を構成するためのスクリプト。 |
オプション |
|
仮想マシンのシステム設定を構成するためのスクリプト。 |
オプション |
|
仮想マシンのユーザー設定を構成するためのスクリプト。 |
オプション |
Microsoft Windowsゲスト
Microsoft Windowsゲストの場合、Oracle VM Guest AdditionsはOracle VM Paravirtual Driversに含まれています。 ゲストの追加の実装は、次のコンポーネントで構成されています:
-
vmapi.dll
: 呼び出し可能なインタフェースを公開する動的リンク・ライブラリ -
ovmsvc
: イベントとメッセージを送受信するサービス -
xenpci
: ハイパーバイザとやり取りするドライバ -
ovmcmd
: ゲストの追加を呼び出すためのコマンド
vmapi.dll
vmapi.dll
は、Windowsのゲスト・オペレーティング・システムのWindowsアプリケーションとxenpci
ドライバ間の通信用のインタフェースを公開します。 アプリケーションはこのライブラリをロードし、エクスポートされた関数を呼び出してxenpci
にアクセスします。 通常、デバイスI/Oコントロール(IOCTL)は、xenpci
ドライバと通信するために使用されます。 次の表に、関数名とその説明を示します:
機能 |
説明 |
---|---|
OVMAPI_Register |
OVMAPIを初期化し、オプションでコールバックを登録 |
OVMAPI_ParamGetValue |
OVMAPIエンジンに格納されている名前と値のペアを取得 |
OVMAPI_ParamSetValue |
名前と値のペアを作成または変更 |
OVMAPI_Subscribe |
アプリケーション登録イベント・ハンドラで特定のイベントを受信 |
OVMAPI_UnSubscribe |
アプリケーションが登録したイベント・ハンドラ内の特定のイベントをブロック |
OVMAPI_EventComplete |
後でステータス・コードを確定してイベントを完了 |
OVMAPI_ParamGetValueSize |
パラメータ値のバイト単位のサイズを取得 |
OVMAPI_GetSessionFileDescriptors |
ドライバへの特別な呼び出しに使用する内部ファイル記述子を取得 |
OVMAPI_UserEventPublish |
アプリケーション固有のイベントを管理サーバーおよび同じVM上で実行されている他のOVMAPI対応アプリケーションに送信 |
OVMAPI_ParamGetAllNames |
アプリケーションにとって興味のある既存のパラメータをブラウズ |
OVMAPI_ParamGetCount |
既存のパラメータの数を取得 |
OVMAPI_UnRegister |
OVMAPIの使用を終了 |
ovmsvc
ovmsvc
サービスは、Windows VMの起動時に自動的に開始されます。 このサービスをインストールまたはアンインストールするコマンドは、それぞれovmsvc install
またはovmsvc uninstall
です。 ovmsvc
サービスは、Oracle VM Managerから送信されたメッセージを監視し、Windows VM固有の情報(オペレーティング・システムのバージョンやVMのIPアドレスなど)を送信します。 vmapi.dll
を使用してWindowsゲストとOracle VM Manager間の通信を実装します。 次の図は、Windows VM内で実行されているovmsvc
を示しています。
ovmsvc
が起動すると、xenpci
デバイスが開き、メッセージが処理されるコールバック関数が登録されます。 vmapi
メッセージに対応するイベントを監視するスレッドが作成されます。 ovmsvc
の現在のコールバック機能は、VMシャットダウン・メッセージを処理します。スナップショットなどの他のメッセージは、追加機能として実装できます。
xenpci
Oracle VM Managerでメッセージを交換するアプリケーションは、メッセージを処理するためにいくつかのIOCTLを実装するxenpciドライバを使用します。 xenpciドライバは、Xenドメインで共有されるメモリー領域であるxenstoreに直接アクセスします。 ovmsvc
は、xenstoreとの間でVMメッセージを送受信するためのAPI関数を呼び出します。
xenpci
ドライバは、xenbus_watch
関数を使用して着信メッセージをモニターします。 xenpciドライバ初期化はxenstoreキー"control/oracle-vmapi/to-guest/last-write
"に時計機能を登録します。 Oracle VM Managerによって送信されたメッセージは、このxenstoreキーに設定されます。 このxenstoreキーが変更されると、xenpci
のウォッチ機能が起動されます。 ウォッチ関数はイベントをチェックして送信し、モニター・スレッドはイベントを認識し、コールバック関数はAPIメッセージを処理します。
ovmsvc
は起動プロセス中にWindows VMメッセージを送信し、xenpci
のIOCTLを使用してxenstoreキー"control/oracle-vmapi/from-guest/%d/%s
"を書き込みます。 ovmsvc
は定期的にメッセージを更新し、ゲストIPアドレスなどの情報をゲストからOracle VM Managerに同期させます。
Oracle Solaris
Oracle VM Guest Additionsは、SPARCおよびx86上のOracle Solarisでも使用できます。 オプションで、Solaris IPSリポジトリからインストールできます : pkg://solaris/system/management/ovm-guest-additions
。
8.3 Oracle VM Guest Additionsパッケージのダウンロード
Oracle VM Guest Additionsパッケージは、Unbreakable Linux Network (ULN)またはOracle Linux Yum Serverのゲスト・オペレーティング・システムのaddonsチャネルからダウンロードできます。 Oracle Linux yumサーバー上のOracle Linuxゲスト・オペレーティング・システムに適したチャネルは次のとおりです:
-
Oracle Linux 8アドオン(x86_64) - 「Oracle Linux 8 (x86_64)アドオン」
-
Oracle Linux 7アドオン(x86_64) - 「Oracle Linux 7 (x86_64)アドオン」
-
Oracle Linux 6アドオン(x86_64) - 「Oracle Linux 6 (x86_64)アドオン」
ULNからのダウンロード
ULNからOracle VM Guest Additionsパッケージをダウンロードするには、addonsチャネルに登録します。
または、ULN addonsチャネルのローカル・ミラーとして機能するyumサーバーを作成することもできます。
Oracle Linuxリリース8の詳細は、「Unbreakable Linuxネットワークへの登録」でOracle Linuxのドキュメントを参照してください
Oracle Linuxリリース7の場合 : または、Oracle Linuxリリース6の場合、詳細は次のOracle Linuxドキュメントを参照してください:
-
Oracle Linuxリリース7:
-
Oracle Linuxリリース6:
Oracle Linux Yum Serverからのダウンロード
デフォルトでは、Oracle Linuxのyumリポジトリ構成ファイルには、Oracle Linux Yum Serverのアドオン・チャネルを定義するセクションがあります。
公開yumリポジトリからOracle VM Guest Additionsパッケージをダウンロードするには、yum構成ファイルのaddonsチャネルを有効にする必要があります。
Oracle Linuxリリース8の詳細は、「Oracle Linux Yumサーバーからのエラータと更新の取得」でOracle Linuxのドキュメントを参照してください
Oracle Linuxリリース7の場合 : または、Oracle Linuxリリース6の場合、詳細は次のOracle Linuxドキュメントを参照してください:
-
Oracle Linuxリリース7:
-
Oracle Linuxリリース6:
Microsoft Windowsゲスト
Microsoft Windowsゲストの場合、Oracle VM Guest AdditionsはOracle VM Paravirtual Driversに含まれています。 Oracle VM Paravirtual Drivers for Microsoft Windows documentation libraryを参照してください。 準仮想化ドライバの選択したリリースのダウンロード手順に従います。
Oracle Solaris
Oracle Solarisの場合は、SPARCとx86の両方で、Oracle VMゲスト追加はhttps://pkg.oracle.com/solaris/release/en/index.shtmlのSolaris IPSリポジトリから、またはサポート契約アクセス権を使用したhttps://support.oracle.com/portal/からダウンロードできます。
8.4 Oracle VM Guest Additionsのインストール
Oracle VM Guest Additionsをインストールするには、次の手順を実行します。
-
Oracle VM Guest Additionsの必要なパッケージをダウンロードします。
-
次の例のように、yum installコマンドを実行して、パッケージをインストールします
# yum install libovmapi xenstoreprovider ovmd xenstoreprovider
Microsoft Windowsゲスト
Microsoft Windowsゲストの場合、Oracle VM Guest AdditionsはOracle VM Paravirtual Driversに含まれています。 Oracle VM Paravirtual Drivers for Microsoft Windows documentation libraryを参照してください。 準仮想化ドライバの選択したリリースのインストール手順に従います。
Oracle Solaris
Oracle SolarisにOracle VM Guest Additionsをインストールするには、次のようにします:
-
適切な'solaris'リポジトリ・パブリッシャが構成されていることを確認します。
-
IPSコマンドを実行してパッケージをインストールします。例えば、
# pkg install ovm-guest-additions
8.5 Oracle VM Guest Additionsのアップグレード
Oracle VM Guest Additionsパッケージが正しく機能するように、定期的に更新する必要があります。 Oracle VMがインストールされているOracle VMテンプレートから、新しい仮想マシンを作成した後にパッケージを更新する必要があります。
Oracle VM Guest Additionsを更新するには、次の手順を実行します。
-
仮想マシンがOracle VM Guest Additionsのパッケージを含むyumリポジトリに接続されていることを確認します。
-
次の例のように、yum updateコマンドを実行して、パッケージを更新します
# yum update libovmapi xenstoreprovider ovmd xenstoreprovider
Microsoft Windowsゲスト
Microsoft Windowsゲストの場合、Oracle VM Guest AdditionsはOracle VM Paravirtual Driversに含まれています。 Oracle VM Paravirtual Drivers for Microsoft Windows documentation libraryを参照してください。 準仮想化ドライバの選択したリリースのアップグレード手順に従います。 サイレント・アップグレードは、多数のWindowsゲストをアップグレードする必要がある場合に使用できます。
Oracle Solaris
Oracle SolarisでOracle VM Guest Additionsをアップグレードするには、次のようにします:
-
適切な'solaris'リポジトリ・パブリッシャが構成されていることを確認します。
-
IPSコマンドを実行してパッケージを更新します。例えば、
# pkg update ovm-guest-additions
8.6 Oracle VM Guest Additions (ovmd)の使用方法
Oracle VM Guest Additionsデーモン(ovmd)は、Oracle VM Managerとゲストの間の双方向メッセージング・チャネルを容易に作成できるようにします。 これを使用すると、ファーストブートのインストール構成が可能となり、キー/値のペアを含むメッセージを送受信できます。
以前のリリースでは、ovmdユーティリティを使用して、キー/値メッセージを仮想マシンに送信できました。 この機能は直接Oracle VM Managerに組み込まれました。 この項では、ovmdを使用して仮想マシンにメッセージを送信するのに使用できるオプションについて説明しますが、これよりもOracle VM Manager WebインタフェースまたはOracle VM Managerコマンドライン・インタフェースを使用してキー/値メッセージを送信してください。 仮想マシンには、Oracle VM Guest Additionsデーモンがインストールされ、実行されている必要があります。 詳細は、「Oracle VM Managerコマンドライン・インタフェース・ユーザー・ガイド」のsendVmMessageまたは「Oracle VM Managerユーザー・ガイド」の「VMメッセージの送信」の項を参照してください。
ovm-template-configスクリプトとovmdユーティリティを組み合せて使用すると、仮想マシンの起動時に、仮想マシン内のシステムおよびアプリケーションの構成パラメータをリモートから構成できます。 この機能の詳細は、8.8項「Oracle VMテンプレート構成スクリプトおよびモジュール」を参照してください。
Oracle VM Managerは、ovmdを使用して、ゲストからIPアドレス情報を取得します。この情報は、Oracle VM Manager Webインタフェースで仮想マシンの詳細情報を表示するときに含まれます。 「仮想マシンIPアドレス」を参照してください。
ovmdをコマンドラインから直接実行して、ovmdの機能外で操作をデーモンまたはシステム・サービスとして実行できます。 --help
パラメータを使用してovmdを実行すると、コマンドラインから直接実行する場合にサポートされるオプションの概要が、次のように表示されます。
Oracle Solarisでは、コマンド・オプションとスクリプト名がOracle Linuxのものと異なる場合があります。 詳細については、Oracle Solarisのovm-guest-additions
パッケージとともにインストールされているovmd(1M)のマニュアル・ページを参照してください。
構文
ovmd
[ { -p
| --set-param=
}
] [ { param
-g
| --get-param=
}
] [ { key
-r
| --delete-param=
}
] [ { key
-x
| --delete-params
} ] [ { -l
| --list-params
} ] [ { -e
| --event=
}
] [ { event
-s
| --script=
}
] [ { script
-d
| --debug=
} { 0
| 1
| 2
} ] [ { -f
| --pid-file=
}
] [ { filename
-t
| --time-period=
}
] [ { seconds
-v
| --version
} ] [ { -h
| --help
} ]
オプション
次の表に、このコマンドで使用可能なオプションを示します。
オプション |
説明 |
---|---|
{ |
|
{ |
キー名でパラメータの値を取得します。 |
{ |
キー名でパラメータを削除します。 |
{ |
すべてのパラメータを削除します。 |
{ |
すべてのパラメータをリストします。 |
{ |
イベントを挿入します。 |
{ |
仮想マシンでスクリプトを実行します。 |
{ |
デバッグ・レベルを設定します。 |
{ |
プロセスID (PID)ファイルのパス名を設定します。 |
{ |
デーモン・モードの時間を設定します。 デフォルトは |
{ |
ovmdスクリプト・バージョン番号を表示して、終了します。 |
{ |
ovmdコマンド・オプションでヘルプを表示します。 |
例
# ovmd -v
# ovmd --script=/scripts/cleanup
# ovmd -p key1=value1
ovmdスクリプトを使用したメッセージの送受信の詳細は、 8.6.2項「仮想マシンへのメッセージの送信」を参照してください。
# ovmd -\-list {"key1":"value1"} {"key2":"value2"}
# ovmd -r key1
8.6.1 Oracle VM Guest Additionsデーモンを使用して初回起動時の構成を有効にする方法
テンプレートとして機能するように仮想マシンを構成している場合、またはクローンしようとしている場合、初回起動時の構成を有効にできます。 この構成によって、仮想マシンは起動されるたびに初めて起動されたように動作します。 そのため、仮想マシンは、VM APIを使用して、または仮想マシン・コンソール上で、構成入力を求めるプロンプトを表示します。 これを行うには、次のコマンドを仮想マシン内でrootとして実行します。
# ovmd -s cleanup # service ovmd enable-initial-config # shutdown -h now
次回の起動時に、仮想マシンはあたかも初回起動であるかのように動作します。
ovmdをサービスとして実行するように構成している場合、メッセージング機能とovm-template-configスクリプトを使用することにより、このサービスをリモートから構成できます。
メッセージング・チャネルの使用の詳細は、 8.6.2項「仮想マシンへのメッセージの送信」の例を参照してください。 また、ovm-template-configスクリプトの詳細は、8.8項「Oracle VMテンプレート構成スクリプトおよびモジュール」を参照してください。
8.6.2 仮想マシンへのメッセージの送信
この項では、Oracle VM Guest Additionsがインストールされている場合の、Oracle VM Managerと実行中のOracle Linux仮想マシンとの間のメッセージ交換の例を説明します。
ovmdを使用する場合、次の構文を使用して情報を仮想マシン内からOracle VM Managerに送信します。
# ovmd -p key1=value1
メッセージが、問題の仮想マシンのVirtual Machine API Incoming MessageイベントとしてOracle VM Managerユーザー・インタフェースに表示されます。 イベントを拡張すると、情報交換が行われるときに、説明にキー/値のペアおよび日時が表示されます。
ゲスト内からovmdを送信する場合、次の構文を使用して、Oracle VM Managerからメッセージを取得できます。
# ovmd -\-list {"key1":"value1"} {"key2":"value2"}
ovmd -\-listコマンドは、送信メッセージも受信メッセージもすべて取得します。 そのキーで、必要な特定のメッセージを識別できます。 不要なメッセージを削除するには、次の構文を使用します。
# ovmd -r key1 # ovmd -\-list {"key2":"value2"}
8.6.3 Oracle VM Guest Additionsデーモンをサービスとして実行するように構成する方法
ovmdをOracle Linuxでサービスとして実行できるようにするには、chkconfigコマンドをrootとして実行します。
# chkconfig ovmd on
ovmdサービスを起動するには、次のコマンドをrootとして実行します。
# service ovmd start
ovmdはサービスとして構成されると、Oracle VM Managerを介して送信されるメッセージ・リクエストをリスニングします。
8.7 Microsoft Windows (ovmcmd)でのOracle VM Guest Additionsの使用
Oracle VM Guest Additionsには、Linuxのovmd
コマンドと同様に、その機能と対話するためのovmcmdというコマンドライン・ツールが用意されています。 コマンドライン・ツールは、Oracle VM Paravirtual Driversのインストール時に配布され、フォルダ内にあります : C:\Program Files (x86)\Oracle Corporation\Oracle VM Windows PV Drivers
。
シェル
実行可能バイナリ・ファイルovmcmdは32ビットWindowsで使用され、ovmcmd_64は64ビットWindowsで使用されます。 ovmcmdは、Windowsのコマンドラインを使用して直接実行できます。 ovmcmdコマンドは、複数の変数を設定するのに便利な独自のシェル・モードを提供します。 パラメータを指定せずにovmcmdと入力すると、サポートされるインタフェースのリストが表示されます。
シェル・モードでovmcmdを実行するには、次のいずれかのコマンドを入力します:
-
32ビットWindows: ovmcmd ovmapishell
-
64ビットWindows: ovmcmd_x64 ovmapishell
この例は、64ビットWindows上のovmcmdシェルを示しています:
コマンド
シェル・モードでは、ovmcmdはセッションを設定し、イベント・ハンドラを接続します。 ユーザーは、ovmcmdを再発行することなく、OVMAPIShell
シェル・プロンプトでコマンドを入力することができます。 ovmcmdを実行しているWindowsのコマンドラインで個々のコマンドを指定できるため、これはオプションです。 シェル・モードを使用して、パラメータ値を含むメッセージを送受信したり、xenstoreの内容を表示することができます。 メッセージを送受信するためのコマンドは、「GuestとOracle VM Managerの間の会話」に示されています。 ovmcmdのコマンド名では、大文字と小文字は区別されません。
Xenstore
コマンドは、Xenの内部知識が豊富な人のみが使用してください。 これらのコマンドは次のとおりです:
-
XenstoreRead: xenstoreキーの値を読み取ります。 サブコマンドに続くパラメータは、読み取るxenstoreキーです。
OVMAPIShell>XenstoreRead /local/domain/708/device/vif/0/state 4 OVMAPIShell>
-
XenstoreWrite: xenstoreキーに値を書き込むか、新しいxenstoreキーを作成します。 パラメータは、xenstoreキーと書き込まれる値です。 xenstoreキーが読み取り専用の場合、エラー・メッセージが表示されます。
OVMAPIShell>XenstoreWrite /local/domain/708/control/test 1 Operation Succeeded OVMAPIShell>XenstoreWrite /local/domain/708/test 2 Operation Failed OVMAPIShell>
-
XenstoreDir: xenstoreディレクトリを一覧表示します。 パラメータは、表示するxenstoreディレクトリです。
OVMAPIShell>XenstoreDir /local/domain/0 vm device control error memory guest hvmpv data cpu 1 availability 2 availability [...] OVMAPIShell>
SendMessageコマンドは、メッセージの送信に使用されます。 ただし、この方法で送信されたメッセージは保存されません。
OVMAPIShell>SendMessage value 1 Operation Succeeded OVMAPIShell>
メッセージを送信し、同時にパラメータのキーと値のペアを保存するには、ParamSetValueコマンドを使用します。
OVMAPIShell>ParamSetValue guestparam1 guestval 1 ParamSetValue returned 0 OVMAPIShell>OVMCmdEventHandler: Received Event type 64, size 12, ID 6 ParamSetValue returned 0
指定したパラメータの値を取得するには、ParamGetValueコマンドを使用します。
OVMAPIShell>ParamGetValue guestparam1 guestval ParamGetValue returned 0, guestparam1 = guestval (len = 9)
GuestとOracle VM Managerの間の会話
ゲストVMとOracle VM Managerの間の会話は、メッセージの送受信に基づいて行われます。
会話のWindows VM側から: ovmcmdコマンドParamSetValueを使用してパラメータを設定し、ゲストVMからOracle VM Managerにメッセージを送信します。 たとえば、ParamSetValue mykey myval
はキー"mykey"の値を"myval"に設定し、Oracle VM Managerにメッセージを送信します。
C:\Program Files (x86)\Oracle Corporation\Oracle VM Windows PV Drivers>OVMCmd_64 ParamSetValue mykey myval ParamSetValue returned 0
SendMessageコマンドも使用できます。
C:\Program Files (x86)\Oracle Corporation\Oracle VM Windows PV Drivers>OVMCmd_64 SendMessage foo bar Operation Succeeded
Oracle VM Managerからメッセージを読み取るには、次のようにReadParameterコマンドを使用します。 必要に応じて出力を後で処理するためにファイルにパイプすることができます。
C:\Program Files (x86)\Oracle Corporation\Oracle VM Windows PV Drivers>OVMCmd_64 ReadParameter sesame Success: sesame = street (7)
会話のOracle VM Manager側: Oracle VM Managerユーザー・インタフェースからメッセージを表示するには、サーバーとVMタブでVMを選択し、右クリックしてイベントを表示を選択します。
または、Oracle VM CLI sendVmMessageコマンドを使用してゲストにメッセージを送信します。
OVM> sendvmmessage vm name=VMNAME
key=managerparam
message=managerval
log=no
詳細は、「Oracle VM Managerコマンドライン・インタフェース・ユーザー・ガイド」のsendVmMessageを参照してください。
8.8 Oracle VMテンプレート構成スクリプトおよびモジュール
Oracle VM Guest Additionsには、仮想マシンをテンプレートから作成し、初回起動時に自動構成するために役立つ一連のパッケージが含まれます。 この機能のマスター・パッケージは、ovm-template-configと呼ばれます。 Oracle VMテンプレート構成スクリプトを使用して、Oracle VMメッセージング機能をovmd経由で使用することにより、仮想マシンをリモートから構成できます。
8.8.1 テンプレート構成スクリプト(ovm-template-config)
Oracle VMテンプレート構成スクリプトovm-template-configは、標準のLinux System Vのinit.d
およびchkconfig
のスクリプト・モデルと非常に類似した方法で機能する一連のモジュール構成スクリプトと連携して動作します。 構成モジュールの実行制御は、ゲスト仮想マシンの/etc/template.d
ディレクトリ内で処理されます。 構成モジュール・スクリプトは、/etc/template.d/scripts
内に格納されます。
ovm-template-configスクリプトはマスター・スクリプトで、すべての有効なモジュールを制御するために使用されます。 --help
パラメータを指定してovm-template-configを実行すると、使用方法の概要が示されます。
リモート構成では、ovm-template-configとovmdを組み合せて使用することにより、Oracle VMメッセージング機能を使用してゲストに送信された構成パラメータを取得できます。 この場合、ovm-template-configターゲットは、ovmdに--script
パラメータとして渡されます。
# ovmd -s cleanup # ovmd -s configure
リモート構成を実行する場合、ovmdを使用して構成キーを含むメッセージを処理するには、認証モジュールを有効にする必要があります。 メッセージの処理は、最終メッセージにrootユーザー・パスワードが含まれている場合にのみ完了します。 このモジュールの詳細は、8.8.2項「構成モジュールの有効化および無効化(ovm-chkconfig)」を参照してください。
このスクリプトを直接呼び出す方法の詳細は、8.8.4項「構成変更をトリガーする方法」を参照してください。
構文
ovm-template-config
[ -e
| --enumerate
] [ --human-readable
] [ { -i
| --input=
}
] [ { input
-o
| --output=
}
] [ output
--stdin
] [ --console-input
] [ --ovf-transport-iso
] [ { -s
| --script=
}
] [ script
--logfile=
] [ logfile
--loglevel=
] [ loglevel
--version
] [ { -h
| --help
} ] target
ここで、
は次のようになります。
target
{ configure
| unconfigure
| reconfigure
| cleanup
| suspend
| resume
| migrate
| shutdown
}
オプション
次の表に、このコマンドで使用可能なオプションを示します。
オプション |
説明 |
---|---|
[ |
|
|
パラメータを列挙する際に、ユーザーが読取り可能な形式で印刷します。 |
{ |
このファイル記述子からパラメータを入力します。 |
{ |
このファイル記述子にパラメータを出力します。 |
|
|
|
コンソール入力からパラメータを構築します。 |
|
OVFトランスポートISOからパラメータを構築します。 |
{ |
スクリプトを指定します。 |
|
ログ・ファイルの名前を設定します。 |
|
ロギング・レベルを設定します。 |
|
ovm-template-configスクリプト・バージョン番号を表示して、終了します。 |
{ |
ovm-template-configコマンド・オプションに関するヘルプを表示します。 |
例
# ovm-template-config --enumerate configure
# ovm-template-config --enumerate --script network configure
# ovm-template-config --stdin configure
# ovm-template-config --console-input configure
# ovm-template-config --ovf-transport-iso configure
8.8.2 構成モジュールの有効化および無効化(ovm-chkconfig)
モジュールを有効にすると、モジュール・スクリプトへのシンボリックリンクが、モジュールの提供するターゲットの種類に基づいて、/etc/template.d
内の他のサブディレクトリに作成されます。この方法は、System Vのinit
プロセスが動作する方法とほとんど同じです。 モジュールを追加すると、モジュール・スクリプトのヘッダーが読み込まれて、名前、優先順位およびターゲットが検証され、その後、シンボリックリンクが、/etc/template.d
の下のサブディレクトリに作成されます。
すべてのモジュールのターゲットの有効化および無効化は、ovm-chkconfigスクリプトを使用して処理されます。 このコマンドの使用方法は、--help
パラメータを指定することにより取得できます。
構文
ovm-chkconfig
[ --list
[
] ] [ name
--add
] [ name
--del
] [ name
--target=
... target
{ name
on
| off
} ] [ --version
] [ { -h
| --help
} ]
ここで、
は次のようになります。
target
{ configure
| unconfigure
| reconfigure
| cleanup
| suspend
| resume
| migrate
| shutdown
}
オプション
次の表に、このコマンドで使用可能なオプションを示します。
オプション |
説明 |
---|---|
[ |
スクリプト |
[ |
新規スクリプト |
[ |
スクリプト |
[ |
|
|
ovm-chkconfigスクリプト・バージョン番号を表示して終了します。 |
{ |
ovm-chkconfigコマンド・オプションに関するヘルプを表示します。 |
例
# ovm-chkconfig --list name configure unconfigure reconfigure cleanup suspend resume migrate shutdown authentication on:90 off off off off off off off datetime on:50 off off off off off off off firewall on:41 off off off off off off off network off off off off off off off off selinux off off off off off off off off ssh off off off off off off off off system off off off off off off off off user off off off off off off off off
# ovm-chkconfig --add authentication
# ovm-chkconfig --del datetime
# ovm-chkconfig --target=cleanup user off
8.8.3 利用可能な構成モジュールにより使用されるキー/値のペア
ovm-template-config構成モジュールを通して構成変更をトリガーするために使用されるすべてのキー・ペアの完全なリストを取得するには、ovm-template-configがインストールされているゲスト・システムで次のコマンドを実行します。
# ovm-template-config --human-readable --enumerate configure
このコマンドからの出力は、解析しやすく、理解しやすいPythonデータ構造として印刷されます。 出力内容は、--script
パラメータを次のように指定することにより、特定の構成モジュールに関連する情報に限定できます。
# ovm-template-config --human-readable --enumerate configure --script datetime [('50', 'datetime', [{u'description': u'System date and time in format year-month-day-hour-minute-second, e.g., "2011-4-7-9-2-42".', u'hidden': True, u'key': u'com.oracle.linux.datetime.datetime'}, {u'description': u'System time zone, e.g., "America/New_York".', u'hidden': True, u'key': u'com.oracle.linux.datetime.timezone'}, {u'description': u'Whether to keep hardware clock in UTC: True or False.', u'hidden': True, u'key': u'com.oracle.linux.datetime.utc'}, {u'description': u'Whether to enable NTP service: True or False.', u'hidden': True, u'key': u'com.oracle.linux.datetime.ntp'}, {u'description': u'NTP servers separated by comma, e.g., "time.example.com,0.example.pool.ntp.org".', u'hidden': True, u'key': u'com.oracle.linux.datetime.ntp-servers'}, {u'description': u'Whether to enable NTP local time source: True or False.', u'hidden': True, u'key': u'com.oracle.linux.datetime.ntp-local-time-source'}])]
出力には、トリガーされた構成モジュールとトリガー時の実行レベルおよび受け付けられたキーと値が明確に示されます。 すべてのキー名は構造化されており、独自の目的のために開発することが意図されているカスタム・モジュールとの競合を避けるために、com.oracleのプレフィックスが付加されることに注意してください。
キー/値のペアは、実際には、JSON形式でovm-template-configに渡されます。
{"com.oracle.linux.datetime.ntp":"True"} {"com.oracle.linux.datetime.ntp-servers":"0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org"} {"com.oracle.linux.root-password":"mysecret"}
8.8.4 構成変更をトリガーする方法
様々な方法を使用することにより、ovm-template-configを使用する構成変更をトリガーできます。 最も一般的な方法としては、enable-initial-configモードを使用して実行するようにovmdサービスを設定します。 こうすることで、仮想マシンは次回起動後に、構成パラメータがコンソール経由またはovmdメッセージング機能経由で渡されるまで待機します。 これは、テンプレートとして動作する仮想マシンを構成する般的な方法です。
ovmdがメッセージをovm-template-configスクリプトに渡すように手動で強制するには、単純に--script
パラメータを指定してovmdを実行し、ovm-template-configターゲットの1つをポイントするようにします。
# ovmd --list
{"com.oracle.linux.datetime.ntp":"True"}
{"com.oracle.linux.datetime.ntp-servers":"0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org"}
{"com.oracle.linux.root-password":"password
"}
# ovmd -s configure
メッセージング・パラメータとovm-template-configを使用して操作を実行するには、認証モジュールが有効にされており、最後のメッセージにキー/値のペアの形式で認証リクエストが含まれている必要があります。
{"com.oracle.linux.root-password":"password
"}
このようにovmdを実行すると、ovmdは2つのパイプ(infdおよびoutfd)を準備し、次のコマンドを使用してバックグラウンドでovm-template-configスクリプトを透過的に呼び出します。
# ovm-template-config --input <infd> --output <outfd> configure
テスト時には、構成情報をコマンドラインでSTDINからスクリプトに直接渡す方法が役立つことがあります。 これを行うには、--stdin
パラメータを使用してスクリプトを直接呼び出します。
# ovm-template-config --stdin configure <<EOF > {"com.oracle.linux.selinux.mode": "disabled"} > {"com.oracle.linux.root-password": "ovsroot"} > EOF
構成は、--console-input
オプションを指定してスクリプトを実行することにより、コンソールから直接行うこともできます。 この方法を行う場合、有効化されたすべてのモジュールに対して定義される必要のあるキーごとに値を入力します。
# ovm-template-config --console-input configure
8.8.5 Oracle VMテンプレート構成モジュールを開発する方法
提供されるモジュール・スクリプトは、Pythonで開発されています。 理論的には、入力、出力および引数の処理が同じである場合にかぎり、モジュール・スクリプトを別の言語で開発できます。 この項で提供されている例は、Pythonプログラミング言語を使用しています。
各モジュール・スクリプトは、次の2つの主要部品で構成されます。
-
スクリプト・ヘッダー。スクリプト名、ターゲット、優先順位、説明などの情報を含みます。
-
実際のスクリプト。パラメータの小さなセットを処理します。
機能するモジュール・スクリプトの例は、/etc/template.d/scripts
ディレクトリの既存のモジュールを参照してください。
モジュール・スクリプト・ヘッダー
モジュール・スクリプト・ヘッダーでは、ovm-chkconfigがスクリプト機能の有効化および無効化を処理するために、非常に特殊なコメント・ブロックを必要とします。 スクリプト・ヘッダーの形式は、次のとおりです。
### BEGIN PLUGIN INFO # name: [script name] # [target]: [priority] # [target]: [priority] # description: a description that can # cross multiple lines. ### END PLUGIN INFO
独自のモジュール・スクリプトを開発する場合、正確に同じ形式に従うヘッダーを含める必要があります。 ovm-chkconfigを呼び出すときに使用する独自のスクリプト名、スクリプトがサポートするターゲットおよびスクリプトの優先順位を提供します。 優先順位は、スクリプトの実行順序を指定します。 すべてのターゲットを実装する必要はありません。 構成ターゲットがあり、クリーンアップ・ターゲットがない場合も、受け付けられます。 構成ターゲットは、仮想マシンの初回起動時、または最初の起動が発生したときに呼び出されます。 クリーンアップ・ターゲットは、仮想マシンでクリーンアップを手動で開始したとき、または仮想マシンをその元の状態に復元したい場合に発生します。 ネットワーク・モジュールのスクリプト・ヘッダーの例を、次に示します。
### BEGIN PLUGIN INFO # name: network # configure: 50 # cleanup: 50 # description: Script to configure template network. ### END PLUGIN INFO
モジュール・スクリプト本体
モジュール・スクリプト本体は、1つ以上のターゲット・パラメータを受け付けることが、その主要な要件となります。 ovm-template-configureスクリプトにより表示されるターゲット・パラメータを次に示します。
-
configure
-
unconfigure
-
reconfigure
-
cleanup
-
suspend
-
resume
-
migrate
-
shutdown
スクリプトでは、必要な他の任意の引数も処理できます。 実装に役立つオプション・パラメータが1つあります。それは-e
または--enumerate
です。ovm-template-configはこのパラメータを使用して、スクリプトによりサポートされるターゲットのパラメータを列挙またはリストします。
スクリプト本体で使用するための非常に基本的なテンプレートを、次に示します。
try: import json except ImportError: import simplejson as json from templateconfig.cli import main def do_enumerate(target): param = [] if target == 'configure': param += [] elif target == 'cleanup': param += [] return json.dumps(param) def do_configure(param): param = json.loads(param) return json.dumps(param) def do_cleanup(param): param = json.loads(param) return json.dumps(param) if __name__ == '__main__': main(do_enumerate, {'configure': do_configure, 'cleanup': do_cleanup})
このスクリプトは構成ターゲットおよびクリーンアップ・ターゲットをサポートします。
スクリプト全体に独自のコードを記述できます。 たとえば、do_enumerate
関数の場合、スクリプト内で各ターゲット用にサポートされるパラメータを記述できます。 ファイアウォール・モジュールの例を、次に示します。
def do_enumerate(target): param = [] if target == 'configure': param += [{'key': 'com.oracle.linux.network.firewall', 'description': 'Whether to enable network firewall: True or False.', 'hidden': True}] return json.dumps(param)
各ターゲット関数は、スクリプトに渡されるJSONパラメータを、param = json.loads(param)
文を使用して読み込むことから始めます。 この場所では、スクリプトが受け取ることを期待するキーの値に基づいて操作を実行するコードを記述できます。 ファイアウォール・モジュールからの例を、再び次に示します。
def do_configure(param): param = json.loads(param) firewall = param.get('com.oracle.linux.network.firewall') if firewall == 'True': shell_cmd('service iptables start') shell_cmd('service ip6tables start') shell_cmd('chkconfig --level 2345 iptables on') shell_cmd('chkconfig --level 2345 ip6tables on') elif firewall == 'False': shell_cmd('service iptables stop') shell_cmd('service ip6tables stop') shell_cmd('chkconfig --level 2345 iptables off') shell_cmd('chkconfig --level 2345 ip6tables off') return json.dumps(param)
モジュール・スクリプトのパッケージ化
1つ以上の構成モジュール・スクリプトを記述したら、それらを他のシステムに展開できるRPMとしてパッケージ化することをお薦めします。 テンプレート構成スクリプトをインストールおよび構成するには、特定のネーミング規則を使用して、それらをRPMにパッケージ化する必要があります。 スクリプトをovm-template-config-[スクリプト名]
としてパッケージ化します。 理想的には、RPMのインストール後に、# /usr/sbin/ovm-chkconfig --add
を実行して、スクリプトを自動的に追加することをお薦めします。 スクリプトまたはRPMをアンインストールするときは、アンインストール時にscriptname
# /usr/sbin/ovm-chkconfig --del
を使用して削除します。 これは、使用可能なRPM specファイルの次のサンプルに説明されています。
scriptname
Name: ovm-template-config-example Version: 3.0 Release: 1%{?dist} Summary: Oracle VM template example configuration script. Group: Applications/System License: GPL URL: https://www.oracle.com/virtualization Source0: %{name}-%{version}.tar.gz BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildArch: noarch Requires: ovm-template-config %description Oracle VM template example configuration script. %prep %setup -q %install rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT %clean rm -rf $RPM_BUILD_ROOT %post if [ $1 = 1 ]; then /usr/sbin/ovm-chkconfig --add example fi %preun if [ $1 = 0 ]; then /usr/sbin/ovm-chkconfig --del example fi %files %defattr(-,root,root,-) %{_sysconfdir}/template.d/scripts/example %changelog * Tue Mar 22 2011 John Smith - 3.0-1 - Initial build.
独自のスクリプト名を参照するように、サンプルのspecファイルを編集してください。
RPMを作成するためには、rpmbuild
をインストールする必要があります。
# yum install rpm-build
ビルド・プロセスの自動化に役立つサンプルMakefileを次に示します。
独自のスクリプトを参照するように、このMakefileを編集する必要があります。
DESTDIR= PACKAGE=ovm-template-config-example VERSION=3.0 help: @echo 'Commonly used make targets:' @echo ' install - install program' @echo ' dist - create a source tarball' @echo ' rpm - build RPM packages' @echo ' clean - remove files created by other targets' dist: clean mkdir $(PACKAGE)-$(VERSION) tar -cSp --to-stdout --exclude .svn --exclude .hg --exclude .hgignore \ --exclude $(PACKAGE)-$(VERSION) * | tar -x -C $(PACKAGE)-$(VERSION) tar -czSpf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION) rm -rf $(PACKAGE)-$(VERSION) install: install -D example $(DESTDIR)/etc/template.d/scripts/example rpm: dist rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz clean: rm -fr $(PACKAGE)-$(VERSION) find . -name '*.py[cdo]' -exec rm -f '{}' ';' rm -f *.tar.gz .PHONY: dist install rpm clean
作業ディレクトリを作成して、スクリプト、specファイルおよびMakefileをそこにコピーします。 次のコマンドを実行して、次のようにソース・コードのtar書庫ファイルを作成します。
# make dist
次のコマンドを実行してRPMファイルを作成します。
# make rpm
前述のコマンドは、作業ディレクトリのRPMS/noarch
ディレクトリにRPMを生成します。たとえば、RPMS/noarch/ovm-template-config-test-3.0-1.el6.noarch.rpm
です。