SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

VM Role 用のゲスト OS の準備

leave a comment

蒼の王座 さんと ブチザッキ さんのブログでとてもわかり易く紹介されていますが自分でも流れをまとめないとな~と思って書いてみました。
特に目新しい内容はないと思います…。

今回の投稿を書くにあたって、以下の記事を参考にさせていただきました。

[蒼の王座さんのブログ]
Virtual Machine Role利用方法 概略手順
Windows Azure VM Roleの5つの豆知識
Windows Azure VM Roleの統合コンポーネントのトリビア?
[ブチザッキさんのブログ]
VM Role を試してみた

 

■検証時に参考にしたドキュメント


VM Role を検証するにあたって、蒼の王座さんのブログを参考にさせていただいておりますが、VM Role 関連でいくつかのドキュメントが提供されているので、そちらも確認をしながら検証をしてみました。

Windows Azure SDK and Windows Azure Tools for Microsoft Visual Studio (November 2010)
Windows Azure Platform Training Kit – December Update
Developing a VM Role in Windows Azure

日本語の Azure SDK のダウンロードページにはリンクが無いのですが英語のダウンロードページでは以下のファイルをダウンロードすることが可能となっています。

  • VSCloudServiceHelp.chm
  • WindowsAzureSDK.chm

VSCloudServiceHelp.chm には VM Role は少し書かれているだけですが、WindowsAzureSDK.chm にはかなり情報が載っていますのでとても参考になります。
CHM のファイルと [Developing a VM Role in Windows Azure] (MSDN) の内容は大体同じになっているかと思います。

Windows Azure Platform Training Kit – December Update では [VirtualMachineRole] のトレーニングキットとして Hands On Lab 用のマニュアルが用意されていますのでこれもとても参考になります。

■VM Role 用のゲスト OS について


[Creating the Base VHD] に以下の記載があります。

The applications in the base VHD must be based on Windows Server 2008 R2. In addition

 

Windows Server 2008 R2 という記載はあるのですが、エディションと言語、Full / Server Core については特に書かれていないのですよね…。

蒼の王座さんのブログを拝見させていただいたところ、VM Role 用の統合コンポーネントをインストールすると KMS によるライセンス認証になるようで、KMS 用の設定には全エディションの KMS クライアント用のプロダクトキーが入っているようなので、エディションによる縛りはなさそうなのですが、日本語 OS がサポートされるかが調べきれませんでした。
# 統合コンポーネントで作成される応答ファイルでは、英語用の設定に変更される定義がされていますが。

最初は日本語 OS で実行していたのですが、[csupload] 実行時に以下のエラーになってしまい、VHD の検証ができなかったので、今回は英語の Windows Server 2008 R2 Datacenter Edition を使用しています。
# 英語 OS に日本語の言語パックをインストールしている状態でも同様の現象になったのですよね…。

Windows(R) Azure(TM) Upload Tool 1.3.0.0
for Microsoft(R) .NET Framework 3.5
Copyright (c) Microsoft Corporation. All rights reserved.

Using temporary directory E:…
Preparing VHD E:Base.vhd…

Windows(R) Azure(TM) VHD Verification Tool 1.3.0.0
for Microsoft(R) .NET Framework 3.5
Copyright (c) Microsoft Corporation. All rights reserved.

Attached E:Base.vhd.
Getting volume information for E:Base.vhd…
Detached E:Base.vhd.
Cannot find the VM Role Agent.
Failed the verification tests.
Cannot prepare VHD E:Base.vhd.

 

今回は TechNet サブスクリプションのメディアを使っていますが、Windows Server 2008 R2 の評価版で試す場合は以下から入手ができます。
Windows Server 2008 R2 Evaluation Free 180-Day Trial

Traning Kit には先頭の 100MB を作成しないで OS をインストールする手順が記載されているのですが、今回は先頭の 100MB のパーティションを作り 2 パーティションの構成で試しています。
image

1 パーティション (先頭の100 MB を作成しない) でインストールする場合は以下の手順となります。

  1. OS のインストールメディアを入れて起動します。
  2. [Next] をクリックします。 
    image
  3. [Install now] をクリックします。 
    image
  4. エディションを選択して、[Next] をクリックします。
    今回は Datacenter Edition を使用しています。 
    image
  5. [I accept the license terms] を有効にして、[Next] をクリックします。 
    image
  6. [Cunstom (advanced)] をクリックします。 
    image
  7. [Shift + F10] を押してコマンドプロンプトを起動します。 
    image
  8. 以下のコマンドを実行して、シングルパーティションの構成にします。
    diskpart
    select disk 0
    create part primary
    exit
    exit

     image

  9. [Refresh] をクリックしてパーティションの構成を確認します。 
    image
  10. [Disk 0 Partition 1] を選択して、[Next] をクリックします。
    image
  11. OS のインストールが終了するまで待ちます。 
    image

■VHD の最大サイズについて


[Creating the Base VHD] に以下の記載があります。

Windows Azure VM size Maximum mounted VHD size
Extra Small 15 GB
Small 35 GB
Medium, Large, or Extra Large 65 GB

蒼の王座さんのブログでも書かれていますように、使用する VM のサイズに合わせたディスクサイズを上限としておく必要があります。

今回私が使っている環境は 40GB のVHD になりますので、縮小をしてみたいと思います。 
image 
Extra Small のインスタンスで実行したいと思って、VHD を 15GB に縮小してみます。
# 特別導入プランを使用されている方は、[Small インスタンス] になるかと思います。

VHD の縮小の方法はこちら
仮想ハードディスクを縮小する方法

概要だけざっくりと書きますと、

  1. 他の Windows Server 2008 R2 または Windows 7 で VM Role で使用する VHD に接続します。  
    image
  2. [ボリュームの縮小] を行い、[未割り当て] の領域を作成し、VHD を切断します。
    # 接続したままだと後述の VHD Resizer で縮小ができないため縮小が終了したら切断します。。  
    image
  3. 以下のサイトから VHD Resizer をダウンロードして、インストールします。
    VHD Resizer
  4. インストールした VHD Resizer を起動します。
    image
  5. 未割り当ての領域を作成した VHD を選択します。  
    image
  6. [save as] をクリックして、縮小後の VHD の保存先を指定し、[New Size] に縮小後の VHD のサイズを指定し、[resize] をクリックします。
    今回は Extra Small に合わせて 15GB で設定しています。  
    image  
    image
  7. [いいえ] をクリックします。
    image

縮小が終わった VHD を接続してみると 15GB になっていることが確認できます。
image

あとはボリュームの拡張をして、未割り当ての領域を割り当てれば VHD のサイズに関しては準備完了です。
image

縮小をした VHD をゲスト OS に割り当てて起動します。
ゲスト OS からも 15GB で認識できていますね。

これで、Extra Small の最大サイズに合わせた VHD が出来上がりました。
image

■ゲスト OS の準備


VM Role として展開するためのゲスト OS の準備を行います。
参考にしたのがこちらの情報
How to Create the Base VHD

作業としては、

  1. Enable network connectivity (ネットワーク接続の有効化)
  2. All install all required updates (要求されるすべての Update の適用)
  3. Disable automatic Windows Updates (Windows Update の自動実行の無効化)In this release, Windows Update is not compatible with Windows Azure because it may cause some or all of your instances to restart simultaneously. Uncoordinated restarts of the operating system can cause service interruption.
  4. Install the .NET Framework 3.5.1 Features (.NET Framework 3.5.1 の機能の有効化)

が必要な作業となっています。

Traning Kit の [Exercise 1: Creating and Deploying a Virtual Machine Role in Windows Azure] では、IIS の役割の追加も入っているので、こちらも実施しておきたいと思います。

機能を追加してから [All install all required updates] を実施したほうが良いので、作業の順番は少し変えています。

  1. Enable network connectivity
    これは、仮想マシンでネットワークアダプタを有効にしておけばよいようです。
    Windows Update で最新のパッチを適用した状態にしたいため、外部ネットワークに対して接続をした状態のネットワークを付与しています。
    image
  2. Install the .NET Framework 3.5.1 Features
    .NET Framework 3.5.1 (.NET Framework 3.5 SP1) の機能をインストールします。
    VM Role 用のゲスト OS の準備として、VM Role 用統合コンポーネントを後でインストールするのですが、.NET Framework 3.5.1 がインストールされていないと以下のエラーになります。
    imageサーバーマネージャーから [.NET Framework 3.5.1] を追加してインストールを行います。
    # WCF アクティブ化については Traning Kit では有効になっていかったのでコアコンポーネントをインストールしています。
    image 
    image
    image
    image
     
  3. Install the IIS 7.5 Role
    Traning Kit では IIS の役割も追加しているので今回の環境でもインストールをしておきます。
    IIS はデフォルトの設定でインストールしています。 (静的コンテンツのみ使用可能)
    # Hands On Lab の中での動作確認ようとして使用しているようなので、VM Role の必須要件ではないと思います。
    image
    image
    image
    image 
    image
    image 
     image
  4. All install all required updates
    これは、Windows Update を実行して、最新のパッチレベルにしておけばよいかと。
    必要となる役割 / 機能をインストールし終わったタイミング Windows Update を実行しておきます。 
    image
  5. Disable automatic Windows Updates
    Windows Update を無効にしておきます。 
    image

VM Role の統合コンポーネントインストール前の準備はこれで終了です。

■VM Role 用統合コンポーネントのインストール


続いて VM Role 用統合コンポーネントをインストールします。

Windows Azure SDK 1.3 をインストールした環境では以下のディレクトリに、[wavmroleic.iso] というファイルが格納されています。
[C:Program FilesWindows Azure SDKv1.3iso]

image

私の環境では、 Windows 7 + Visual Web Developer 2010 Express をインストールした環境ですね。
この ISO を VM Role に展開する Windows Server 2008 R2 でマウントします。

この ISO を使用して、VM Role 用の統合コンポーネントをインストールします。

  1. [WaIntegrationComponents-x64.msi] を実行します。
    # 現状、VM Role で展開できるのは Windows Server 2008 R2 となっているので、x64 用のコンポーネントしかないのかもしれないですね。
  2. [Next] をクリックします。
    image
  3. Sysprep を実行後に指定される Administrator のパスワードを設定します。
    パスワードは複雑性の規則を満たす必要があります。
    [Note] に書かれているように指定した値が応答ファイルとして、[C:unattend.xml] に設定されます。
    image
  4. [Install] をクリックします。
    image
  5. 以下のダイアログが表示されたら、[Install] をクリックします。 
    imageこのドライバーですが、[SCSI] の [WA Drive Miniport] のようです。
    統合コンポーネントをインストールする前の msinfo32 の情報がこちらになります。 
    image
    統合コンポーネントインストール後は [SCSI] にドライバーが組み込まれています。 
    image
    Azure Storage Drive 用のドライバーみたいですね。
  6. [Finish] をクリックします。
    image
  7. [Yes] をクリックして、サーバーを再起動します。
    image

これで VM Role 用の統合コンポーネントのインストールは終了です。

■統合コンポーネントインストール後の環境


インストール後の環境については、蒼の王座さんの [Windows Azure VM Roleの統合コンポーネントのトリビア?] の投稿に詳しく書かれているのですが、私も見ていきたいと思います。

  1. 統合コンポーネントのプログラムの格納
    統合コンポーネントをインストールすると、[C:Program FilesWindows Azure Integration Componentsv1.3] の下に以下のディレクトリが作成されます。 
    image
    [Agent] [AzureStoregeDrive] [Diagnostics] [Powershell] [ref]  [RemoteAccess] [RemoteForwarder] のディレクトリが作成されていますね。
  2. Azure 用のサービスの追加
    統合コンポーネントインストール後はサービスも追加されています。 
    image

    名前 説明 実行ファイルのパス
    Windows Azure Cloud Drive Provider The Windows Azure Cloud Drive Provider enables applications to mount cloud-based storage drives. “C:Program FilesWindows Azure Integration Componentsv1.3AzureStorageDriveCloudDriveSvc.exe”
    Windows Azure Diagnostics Service Provides collection and upload of diagnostic information and logs. “C:Program FilesWindows Azure Integration Componentsv1.3DiagnosticsDiagnosticsService.exe”
    Windows Azure Environment Provides lifecycle support for the Windows Azure Integration Components. “C:Program FilesWindows Azure Integration Componentsv1.3AgentWaAgentHelper.exe”
    Windows Azure Integration Components Provides integration components for Windows Azure. C:Windowssystem32dllhost.exe /Processid:{36D9F0F9-D939-4AAA-BABA-3E6FB678D3BE}
    Windows Azure Remote Access Service Provides remote management of remote desktop connectivity and user account creation. “C:Program FilesWindows Azure Integration Componentsv1.3RemoteAccessRemoteAccessService.exe”
    Windows Azure Remote Forwader Service Provides access to remote machines through the load-balancer. “C:Program FilesWindows Azure Integration Componentsv1.3RemoteForwarderRemoteForwarderService.exe”

    [PowerShell] と [ref] 以外のフォルダはサービスで使用されているようですね。
    [自動] になっていて起動していないものがいくつかありますが、これは VM Role に展開した後に再度状態を確認してみたいと思います。

  3. ファイアウォールのルール追加
    統合コンポーネントをインストールすると以下の Inbound のルールが追加されます。
    imageimage
    image
     
    Remote Forwader に関するルールのようですが、実際に何なのかが調べられていません…。
  4. GAC の追加
    蒼の王座さんのブログを読んでいて知りました。(ここまで確認されているのは凄い!!)
    [Microsoft.WindowsAzure.FirewallInterop] [Microsoft.WindowsAzure.IntegrationComponents.Agent] [Microsoft.WindowsAzure.RolceContainer] [Microsoft.WindowsAzure.ServerRuntime] とうアセンブリが GAC に追加されていました。 
    image
  5. 応答ファイルの作成
    統合コンポーネントをインストールすると C ドライブの直下に [unattend.xml] が作成されます。 
    image
    これは統合コンポーネントによって作成された Sysprep の応答ファイルになります。応答ファイルには以下の記述がされています。

    <?xml version=”1.0″ encoding=”utf-8″?>
    <unattend xmlns=”urn:schemas-microsoft-com:unattend”>
      <settings pass=”generalize”>
        <component name=”Microsoft-Windows-PnpSysprep” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
          <DoNotCleanUpNonPresentDevices>true</DoNotCleanUpNonPresentDevices>
          <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
        </component>
      </settings>
      <settings pass=”oobeSystem”>
        <component name=”Microsoft-Windows-International-Core” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
          <InputLocale>en-us</InputLocale>
          <SystemLocale>en-us</SystemLocale>
          <UILanguage>en-us</UILanguage>
          <UserLocale>en-us</UserLocale>
        </component>
        <component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
          <TimeZone>UTC</TimeZone>
          <DisableAutoDaylightTimeSet>true</DisableAutoDaylightTimeSet>
          <OOBE>
            <ProtectYourPC>3</ProtectYourPC>
            <SkipMachineOOBE>true</SkipMachineOOBE>
            <SkipUserOOBE>true</SkipUserOOBE>
          </OOBE>
          <UserAccounts>
            <AdministratorPassword>
              <Value>[暗号化されたパスワード]Value>
              <PlainText>false</PlainText>
            </AdministratorPassword>
          </UserAccounts>
        </component>
      </settings>
    </unattend>

    日本語 OS で統合コンポーネントをインストールした場合は、以下のように最初に余計な文字が入ってしまいますので、日本語 OS を使う場合は手動で削除しておきます。
    # csupload が日本語 OS の VHD だとうまく動かなかったので使う気概があるかは微妙ですが…。

    ・ソ<?xml version=”1.0″ encoding=”utf-8″?>
    <unattend xmlns=”urn:schemas-microsoft-com:unattend”>
      <settings pass=”generalize”>
        <component name=”Microsoft-Windows-PnpSysprep” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
          <DoNotCleanUpNonPresentDevices>true</DoNotCleanUpNonPresentDevices>
          <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
        </component>
      </settings>
      <settings pass=”oobeSystem”>
        <component name=”Microsoft-Windows-International-Core” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
          <InputLocale>en-us</InputLocale>
          <SystemLocale>en-us</SystemLocale>
          <UILanguage>en-us</UILanguage>
          <UserLocale>en-us</UserLocale>
        </component>
        <component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
          <TimeZone>UTC</TimeZone>
          <DisableAutoDaylightTimeSet>true</DisableAutoDaylightTimeSet>
          <OOBE>
            <ProtectYourPC>3</ProtectYourPC>
            <SkipMachineOOBE>true</SkipMachineOOBE>
            <SkipUserOOBE>true</SkipUserOOBE>
          </OOBE>
          <UserAccounts>
            <AdministratorPassword>
              <Value>[暗号化されたパスワード]</Value>
              <PlainText>false</PlainText>
            </AdministratorPassword>
          </UserAccounts>
        </component>
      </settings>
    </unattend>

■Sysprep の実行


ゲスト OS の準備の作業として Sysprep を実行します。

  1. [C:WindowsSystem32SysprepSysprep.exe] を実行します。 
    image
  2. [Generalize] を有効にして [Shutdown Options] を [Shutdown] にして [OK] をクリックします。
    # 応答ファイルは C の直下の [unattend.xml] が使われるみたいですね。
     image

Sysprep が終了すると自動的にシャットダウンされます。

これでゲスト OS の準備は終了です。
後は、作成された VHD を VM Role として展開します。

VM Role の展開に関しては次の投稿でまとめていきたいと思います。

■没ネタ)英語の言語パックのインストール


日本語 OS では csupload 時の VHD の検証がうまくできなかったので没ネタ扱いですが途中までまとめたので、投稿しておきます。

応答ファイルを見ていただくとわかるのですが、統合コンポーネントで作成された応答ファイルには [<UILanguage>en-us</UILanguage>] が指定されています。

これは、UI の言語設定を英語環境にするという指定なのですが、日本語 OS でこの設定を使用するためには英語の言語パックをインストールしておく必要があります。
# 英語 OS の場合は必要ないですが 英語 OS 以外では必要となります。

今回は日本語の環境を使用しているのですが、言語パックをインストールしないで Sysprep を実行してみます。
# 統合コンポーネントで作成された応答ファイルは [/unattend] で指定しなくても読んでくれているようです。

[初めてコンピューターを使用するための準備をしています] がかなり長く表示されるのですが待っていると起動します。
# 5 分ほど待っていると起動しました。

形式 / 場所 / キーボードに関しては英語の設定となっています。
imageimage
image

表示言語に関しては、日本語しかインストールされていませんので UI は日本語のままとなっています。
image

応答ファイルのすべての設定を有効にするために Multi Language Pack から英語の言語パックをインストールします。

  1. Multi Language Pack のインストールメディアを挿入します。
  2. [コントロール パネル] をクリックします。
    image
  3. [表示言語の変更] をクリックします。
    image
  4. [言語のインストールまたはアンインストール] をクリックします。
    image
  5. [表示言語のインストール] をクリックします。
    image
  6. [参照] をクリックして、Language Pack のメディアから [en-us] を選択します。
    image
  7. [英語] を選択して、[次へ] をクリックします。
    image
  8. [同意します] を選択して、[次へ] をクリックします。
    image
    image
  9. [次へ] をクリックします。
    image
  10. [閉じる] をクリックします。
    # Sysprep 時に英語をシステムアカウントの表示言語に変更されますのでここではそのままにしています。
    image

以上で、言語パックのインストールは完了です。

この状態で Sysprep を実行すると UI が英語になります。
[Setup is preparing your computer for first use] が長い場合もありますが、これも 5 分ほど待ちます。

Sysprep 後は UI が英語に変わっていることが確認できます。
image

Written by masayuki.ozawa

1月 4th, 2011 at 12:38 am

Posted in Windows Azure

Tagged with ,

No Responses to 'VM Role 用のゲスト OS の準備'

Subscribe to comments with RSS or TrackBack to 'VM Role 用のゲスト OS の準備'.

  1. こんにちは、

    私が作成し、Windows Azureの仮想マシンの役割を展開する’、午前のSDK1.3のアズールトレーニングキットから運動を参照。

    さらに、私は書かれているアダプタ(http://msdn.microsoft.com/en-us/library/gg466226.aspx)は、VMを監視し、Azureのテーブルを更新する予定されているWindowsのサービスとして。このアダプタは、ランタイムを取得するための役割環境(Microsoft.WindowsAzure.ServiceRuntime使用)が必要になります。

    私の質問は、’Windows Azureの環境(WaAgentHelper.exe)’WindowsサービスVMの役割インスタンスの役割環境を取得するために必要ですか?

    はい、なぜ私はできないエラー取得(ステージングデプロイメント時オンプレミスゲストVMのどちらにもVM上で)このサービスを開始している場合は’エラー1053、そのサービスは指定時間内に開始要求または制御要求に応答はなかった’ 。

    どのようにサービスを開始するには?私は何かが足りないか?

    助けてください。

    〜研究、
    ディバ。

    Deva

    23 3月 11 at 00:37

Leave a Reply

*