機械翻訳について

第 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 Manager内の仮想マシンについて表示される情報を容易に取得。

  • テンプレート構成機能を使用して、仮想マシンをその初回起動時に自動構成。

  • Oracle VM Managerから仮想マシンにメッセージを直接送信して、プログラムされたイベントをトリガー。

  • 仮想マシンに問い合せて、以前のメッセージに関する情報を取得。

  • Oracle VMユーティリティのovm_vmmessageコマンドと連携。

仮想マシンIPアドレス

Oracle VM Guest Additionsをインストールすると、仮想マシンのIPアドレスが、Oracle VM Manager Webインタフェースの仮想マシンの観点の「Networks」サブタブに表示されます。

この図では、選択した仮想マシンの「Networks & Storage」情報に、ゲストのIPアドレスを表示しています。

8.2 Oracle VM Guest Additionsパッケージ

Oracle VM Guest Additionsをインストールするには、まず一連のパッケージをyumリポジトリから仮想マシンにダウンロードします。 パッケージは、Unbreakable Linuxネットワーク(ULN)またはOracle Linux Yum Serverからダウンロードできます。 必要なパッケージをダウンロードしたら、yum installを使用してインストールします。

次の表は、Oracle VM Guest Additionsのパッケージを示します。

パッケージ

説明

必須またはオプション

libovmapi

Oracle VM APIのサポートを追加するライブラリ。

必須

libovmapi-devel

Oracle VM APIの開発者サポートを追加するライブラリ。

オプション

ovmd

構成イベントを処理し、仮想マシンとOracle VM Managerとの間のメッセージの送受信を可能にするデーモン。

必須

xenstoreprovider

Oracle VM APIカーネル・インフラストラクチャと通信するライブラリ。

必須

ovm-template-config

基本的なオペレーティング・システム構成スクリプト。

必須

ovm-template-config-authentication

仮想マシンの認証を構成するためのスクリプト。

オプション

ovm-template-config-datetime

仮想マシンの日時設定を構成するためのスクリプト。

オプション

ovm-template-config-firewall

仮想マシンのファイアウォールを構成するためのスクリプト。

オプション

ovm-template-config-network

仮想マシンのネットワーク設定を構成するためのスクリプト。

オプション

ovm-template-config-selinux

仮想マシンのSELinux設定を構成するためのスクリプト。

オプション

ovm-template-config-ssh

仮想マシンのssh設定を構成するためのスクリプト。

オプション

ovm-template-config-system

仮想マシンのシステム設定を構成するためのスクリプト。

オプション

ovm-template-config-user

仮想マシンのユーザー設定を構成するためのスクリプト。

オプション

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を示しています。

この図は、Windows VM内からのスクリーンショットを示しています。 Oracle VM Serviceのプロパティが表示され、サービスが開始済ステータスであることが示されます。

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ゲスト・オペレーティング・システムに適したチャネルは次のとおりです:

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 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ドキュメントを参照してください:

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をインストールするには、次の手順を実行します。

  1. Oracle VM Guest Additionsの必要なパッケージをダウンロードします。

  2. 次の例のように、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をインストールするには、次のようにします:

  1. 適切な'solaris'リポジトリ・パブリッシャが構成されていることを確認します。

  2. IPSコマンドを実行してパッケージをインストールします。例えば、

    # pkg install ovm-guest-additions

8.5 Oracle VM Guest Additionsのアップグレード

Oracle VM Guest Additionsパッケージが正しく機能するように、定期的に更新する必要があります。 Oracle VMがインストールされているOracle VMテンプレートから、新しい仮想マシンを作成した後にパッケージを更新する必要があります。

Oracle VM Guest Additionsを更新するには、次の手順を実行します。

  1. 仮想マシンがOracle VM Guest Additionsのパッケージを含むyumリポジトリに接続されていることを確認します。

  2. 次の例のように、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をアップグレードするには、次のようにします:

  1. 適切な'solaris'リポジトリ・パブリッシャが構成されていることを確認します。

  2. 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 } ]

オプション

次の表に、このコマンドで使用可能なオプションを示します。

オプション

説明

{ -p | --set-param= } param

key=valueの形式でパラメータを設定します。

{ -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 }

デバッグ・レベルを設定します。0DEBUG_OFF1DEBUG_STDERRおよび2DEBUG_SYSLOGです。 デフォルトは、2です。

{ -f | --pid-file= } filename

プロセスID (PID)ファイルのパス名を設定します。

{ -t | --time-period= } seconds

デーモン・モードの時間を設定します。 デフォルトは10秒です。

{ -v | --version }

ovmdスクリプト・バージョン番号を表示して、終了します。

{ -h | --help }

ovmdコマンド・オプションでヘルプを表示します。

例 8.1 ovmdスクリプト・バージョンの表示
# ovmd -v

例 8.2 仮想マシンでのスクリプトの実行
# ovmd --script=/scripts/cleanup

例 8.3 仮想マシンからOracle VM Managerへのメッセージの送信
# ovmd -p key1=value1

ovmdスクリプトを使用したメッセージの送受信の詳細は、 8.6.2項「仮想マシンへのメッセージの送信」を参照してください。


例 8.4 仮想マシンでOracle VM Managerから送信されたメッセージのリスト表示
# ovmd -\-list
{"key1":"value1"}
{"key2":"value2"}

例 8.5 仮想マシンでのメッセージの削除
# 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仮想マシンとの間のメッセージ交換の例を説明します。

例 8.6 ゲストからOracle VM Managerへのメッセージの送信

ovmdを使用する場合、次の構文を使用して情報を仮想マシン内からOracle VM Managerに送信します。

# ovmd -p key1=value1

メッセージが、問題の仮想マシンのVirtual Machine API Incoming MessageイベントとしてOracle VM Managerユーザー・インタフェースに表示されます。 イベントを拡張すると、情報交換が行われるときに、説明にキー/値のペアおよび日時が表示されます。


例 8.7 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と入力すると、サポートされるインタフェースのリストが表示されます。

この図は、Windows VM内のコマンド・ウィンドウのスクリーンショットを示しています。 追加のパラメータなしでovmcmdを入力すると表示されるovmcmdコマンドで、サポートされているインタフェースのリストを表示します。

シェル・モードでovmcmdを実行するには、次のいずれかのコマンドを入力します:

  • 32ビットWindows: ovmcmd ovmapishell

  • 64ビットWindows: ovmcmd_x64 ovmapishell

この例は、64ビットWindows上のovmcmdシェルを示しています:

この図は、64ビットWindows VM内の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-configovmdを組み合せて使用することにより、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 }

オプション

次の表に、このコマンドで使用可能なオプションを示します。

オプション

説明

[ -e | --enumerate ]

targetのパラメータを列挙します。

--human-readable

パラメータを列挙する際に、ユーザーが読取り可能な形式で印刷します。

{ -i | --input= } input

このファイル記述子からパラメータを入力します。

{ -o | --output= } output

このファイル記述子にパラメータを出力します。

--stdin

stdinからパラメータを構築します。

--console-input

コンソール入力からパラメータを構築します。

--ovf-transport-iso

OVFトランスポートISOからパラメータを構築します。

{ -s | --script= } script

スクリプトを指定します。

--logfile= logfile

ログ・ファイルの名前を設定します。

--loglevel= loglevel

ロギング・レベルを設定します。

--version

ovm-template-configスクリプト・バージョン番号を表示して、終了します。

{ -h | --help }

ovm-template-configコマンド・オプションに関するヘルプを表示します。

例 8.8 構成モジュールでのキー・ペアのリスト表示
# ovm-template-config --enumerate configure

例 8.9 ネットワーク構成モジュール固有のキー・ペアのリスト表示
# ovm-template-config --enumerate --script network configure

例 8.10 構成情報をSTDINからスクリプトに渡す
# ovm-template-config --stdin configure

例 8.11 コマンドライン・プロンプトから構成情報を渡す(値を求めるプロンプトの表示)
# ovm-template-config --console-input configure

例 8.12 CDROMデバイスにマウントされたOVFトランスポートから構成情報を渡す
# 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 }

オプション

次の表に、このコマンドで使用可能なオプションを示します。

オプション

説明

[ --list [ name ] ]

スクリプトnameのステータスをリストします。

[ --add name ]

新規スクリプトnameを追加します。

[ --del name ]

スクリプトnameを削除します。

[ --target= target ... name { on | off } ]

targetを、次の例のようにカンマ区切りリストで指定します。

--target="configure,unconfigure"

--version

ovm-chkconfigスクリプト・バージョン番号を表示して終了します。

{ -h | --help }

ovm-chkconfigコマンド・オプションに関するヘルプを表示します。

例 8.13 使用可能なモジュールおよびそのターゲット・ランタイム・ステータスのリスト表示
# 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

例 8.14 モジュールによってサポートされるすべてのターゲットを有効化
# ovm-chkconfig --add authentication

例 8.15 モジュールによってサポートされるすべてのターゲットを無効化
# ovm-chkconfig --del datetime

例 8.16 モジュールの特定のターゲットを無効化
# 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つの主要部品で構成されます。

  1. スクリプト・ヘッダー。スクリプト名、ターゲット、優先順位、説明などの情報を含みます。

  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 scriptnameを実行して、スクリプトを自動的に追加することをお薦めします。 スクリプトまたはRPMをアンインストールするときは、アンインストール時に# /usr/sbin/ovm-chkconfig --del scriptnameを使用して削除します。 これは、使用可能なRPM specファイルの次のサンプルに説明されています。

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です。