前回の続き、Sysprep 済み OS イメージの Mini-Setup の応答ファイルによる自動化について。
Windows Vista および Windows Server 2008 以降は、XML ベースの Unattend.xml になって、応答ファイルを記述するのが難しくなりました。そこで、System Center Virtual Machine Manager 2008 R2 (SCVMM 2008 R2) の仮想マシン作成ウィザードが生成する応答ファイルをちょいと拝借し、応答ファイルのテンプレートとして利用してしまおうというのが前回までの話です。SCVMM 2008 R2 のテンプレートを使用した仮想マシンの作成では、「新しいバーチャル マシン」ウィザードの「ゲスト オペレーティング
システム」のページで、Mini-Setup の入力値をあらかじめ設定し、ゲスト OS の構成を自動化することができます。設定項目としては、次のようなものがあります (Windows のバージョンにより少々異なります)。
-
ID 情報 ・・・ コンピューター名の指定 (Windows XP、Windows Server 2003 R2 以前は、使用者の名前、組織名も必要)
-
管理者パスワード ・・・ 管理者パスワードの指定(Windows 7、Windows Vista の場合は Administrator 以外ローカル ユーザー名の指定も必要)
-
プロダクト キー ・・・ プロダクト キーまたは MAK キーの入力 (KMS の場合は不要)
-
タイム ゾーン ・・・ 既定値は東京 (標準時)
-
オペレーティング システム ・・・ ゲスト OS のバージョンを選択)
-
ドメイン/ワークグループ ・・・ ワークグループ構成またはドメイン参加の設定 (ドメイン管理者の資格情報が必要)
-
応答ファイル ・・・ Mini-Setup をさらにカスタマイズしたい場合、応答ファイルの差分を記述したテキスト ファイルを指定する (オプション)
-
[GUIRunOnce]コマンド ・・・ 初回起動時 (ログオン時) に自動実行するコマンドを指定する (オプション)
前回説明した方法で、SCVMM 2008 R2 が生成した仮想フロッピー ディ
スク ファイル (.vfd) から応答ファイルをゲットすれば、SCVMM 2008 R2 がするのと同様の自動化処理を自前で実装できます。
次の Unattend.xml は、Windows 7 Enterprise x86 のテンプレートから仮想マシンを作成した際に SCVMM 2008 R2 が生成した応答ファイルです。ドメイン CONTOSO に参加する設定を行っています。また、ローカル管理者として localadmin の作成を指示しています。
Unattend.xml (Windows 7 Enterprise x86)
<?xml version=”1.0″ encoding=”utf-8″?>
<unattend xmlns=”urn:schemas-microsoft-com:unattend”>
<settings pass=”specialize”>
<component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”x86” publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<ComputerName>COMPUTERNAME</ComputerName>
<ProductKey>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</ProductKey>
</component>
<component name=”Microsoft-Windows-UnattendedJoin” processorArchitecture=”x86” publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<Identification>
<JoinDomain>CONTOSO</JoinDomain>
<Credentials>
<Domain>CONTOSO</Domain>
<Username>administrator</Username>
<Password>P@ssw0rd</Password>
</Credentials>
</Identification>
</component>
</settings>
<settings pass=”oobeSystem”>
<component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”x86” publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<UserAccounts>
<LocalAccounts>
<LocalAccount>
<Name>localadmin</Name>
<Password>
<Value>P@ssw0rd</Value>
<PlainText>true</PlainText>
</Password>
<Group>Administrators</Group>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<TimeZone>Tokyo Standard Time</TimeZone>
<OOBE>
<HideEULAPage>true</HideEULAPage>
<SkipUserOOBE>true</SkipUserOOBE>
<NetworkLocation>Work</NetworkLocation>
<ProtectYourPC>1</ProtectYourPC>
</OOBE>
</component>
<component name=”Microsoft-Windows-International-Core” processorArchitecture=”x86” publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<UserLocale>en-US</UserLocale>
<SystemLocale>en-US</SystemLocale>
<InputLocale>0409:00000409</InputLocale>
<UILanguage>en-US</UILanguage>
</component>
</settings>
<cpi:offlineImage cpi:source=”" xmlns:cpi=”urn:schemas-microsoft-com:cpi” />
</unattend>
青字部分が ゲスト OS プロファイルの指定に対応した部分です。この部分を書き換えることで、独自の応答ファイルを簡単に作成できるでしょう。ちなみに、ワークグループ構成にしたい場合は、<Identification>~</Identification> のところを次のように記述します。
<Identification>
<JoinWorkgroup>WORKGROUP</JoinWorkgroup>
</Identification>
この応答ファイルを見て、あれっ?と思われた方はいないでしょうか。システム ロケールが en-US になっています。実は、SCVMM 2008 R2 で Windows Vista 以降および Windows Server 2008 以降のゲスト OS をテンプレートから展開すると、「地域と言語」の「形式」「キーボード」「システム ロケール」が「英語 (米国)」になってしまうという既知の問題があります。おそらく、Windows Vista 以降で多言語対応のシングル バイナリになったことが影響したのでしょう。SCVMM 2008 R2 では、ゲスト OS プロファイルの「応答ファイル」のところで、次の XML を記述したテキスト ファイル (応答ファイル) を読み込ませることで、正しいロケールに修正することができます。Unattend.xml を自分で記述する場合は、上の Unattend.xml を直接修正してください。
locale_ja-JP.xml (ゲスト OS プロファイルの「応答ファイル」に指定する)
<?xml version=”1.0″ encoding=”utf-8″?>
<unattend xmlns=”urn:schemas-microsoft-com:unattend”>
<settings pass=”oobeSystem”>
<component name=”Microsoft-Windows-International-Core” processorArchitecture=”x86” publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<UserLocale>ja-JP</UserLocale>
<SystemLocale>ja-JP</SystemLocale>
<InputLocale>0411:00000411</InputLocale>
<UILanguage>ja-JP</UILanguage>
</component>
</settings>
<cpi:offlineImage cpi:source=”" xmlns:cpi=”urn:schemas-microsoft-com:cpi” />
</unattend>
Windows 7 の Unattend.xml は、Windows Vista にも応用できます。注意点は、32 ビット版の場合、processorArchitecture=”x86″、64 ビット版の場合、processorArchitecture=”amd64″ と記述する必要がある点です。
Windows Server 2008 以降の場合は、どのような記述になるでしょうか。以下の Unattend.xml は、Windows Server 2008 R2 Enterprise ゲストの仮想マシンを作成した際の、SCVMM 2008 R2 が生成した応答ファイルです (日本語ロケールの問題は修正してあります)。Windows 7 とほとんど変わりません。大きく異なるのは、管理者パスワードのところです (太字のところ) 。Windows Vista および Windows 7 は、既定で Administrator が無効になっているため、管理者権限を持つユーザー アカウントの作成の指示が必要ですが、Windows Server 2008 および 2008 R2 では、管理者パスワードの設定だけになります。もう 1 つは、<OOBE>~</OOBE> に <NetworkLocation>Work</NetworkLocation> (ネットワークの場所: 職場のネットワーク) と<ProtectYourPC>1</ProtectYourPC> (自動更新の設定: 推奨設定) が存在しないこと。これらの項目は、サーバー OS の Mini-Setup には存在しません。
Unattend.xml (Windows Server 2008 R2 Enterprise)
<?xml version=”1.0″ encoding=”utf-8″?>
<unattend xmlns=”urn:schemas-microsoft-com:unattend”>
<settings pass=”specialize”>
<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”>
<ComputerName>COMPUTERNAME</ComputerName>
<ProductKey>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</ProductKey>
</component>
<component name=”Microsoft-Windows-UnattendedJoin” 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”>
<Identification>
<JoinDomain>CONTOSO</JoinDomain>
<Credentials>
<Domain>CONTOSO</Domain>
<Username>administrator</Username>
<Password>P@ssw0rd</Password>
</Credentials>
</Identification>
</component>
</settings>
<settings pass=”oobeSystem”>
<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”>
<UserAccounts>
<AdministratorPassword>
<Value>P@ssw0rd</Value>
<PlainText>true</PlainText>
</AdministratorPassword>
</UserAccounts>
<TimeZone>Tokyo Standard Time</TimeZone>
<OOBE>
<HideEULAPage>true</HideEULAPage>
<SkipUserOOBE>true</SkipUserOOBE>
</OOBE>
</component>
<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”>
<UserLocale>ja-JP</UserLocale>
<SystemLocale>ja-JP</SystemLocale>
<InputLocale>0411:00000411</InputLocale>
<UILanguage>ja-JP</UILanguage>
</component>
</settings>
<cpi:offlineImage cpi:source=”" xmlns:cpi=”urn:schemas-microsoft-com:cpi” />
</unattend>
ついでに、Windows Server 2003 R2 x86 や Windows XP Professional の応答ファイルも見てみましょう。Windows XP および 2003 R2 以前は、Unattend.xml ではなく、Sysprep.inf になります。次の Sysprep.inf は、Windows Server 2003 R2 x86 Enterprise ゲストのために SCVMM 2008 R2 が生成した応答ファイルです。Unattend.xml と比較すると、非常に簡単な記述になっています。なお、Windows XP の場合は、[LicenseFilePrintData] のブロックが不要になります。
Sysprep.inf (Windows Server 2003 R2 x86 Enterprise)
;SetupMgrTag
[Unattended]
OemSkipEula=Yes
InstallFilesPath=C:\sysprep\i386
[GuiUnattended]
AdminPassword=“P@ssw0rd”
EncryptedAdminPassword=NO
AutoLogon=Yes
AutoLogonCount=1
OEMSkipRegional=1
TimeZone=235
OemSkipWelcome=1
[UserData]
ProductKey=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
FullName=“MY NAME”
OrgName=“MY COMPANY”
ComputerName=COMPUTERNAME
[Display]
BitsPerPel=4
Xresolution=1024
YResolution=768
Vrefresh=60
[LicenseFilePrintData]
AutoMode=PerServer
AutoUsers=5
[RegionalSettings]
LanguageGroup=7
[SetupMgr]
DistFolder=C:\sysprep\i386
DistShare=windist
[Identification]
JoinDomain=CONTOSO
DomainAdmin=Administrator
DomainAdminPassword=P@ssw0rd
[Networking]
InstallDefaultComponents=Yes
ゲスト OS プロファイルの 「[GUIRunOnce]コマンド」 にコマンドラインを指定した場合は、Unattend.xml や Sysprep.inf にコマンドラインが追加されます。Unattend.xml の場合は、<TimeZone>~</TimeZone> のすぐ後ろあたりに <FirstLogonCommands>~</FirstLogonCommands> として追加されます。Sysprep.inf の場合は、文字通り[GuiRunOnce]ブロックに追加されます。ゲスト OS プロファイルで 「[GUIRunOnce]コマンド」 という表現になっているのは、Virtual Server 2005 R2 / Windows Server 2003 向けの SCVMM 2007 から引きずっているのでしょう。当時はまだ、Unattend.xml 方式の Sysprep には対応していませんでした。
Unattend.xml に追加された[GUIRunOnce]コマンド
~省略~
<TimeZone>Tokyo Standard Time</TimeZone>
<FirstLogonCommands>
<SynchronousCommand>
<CommandLine>NETSH interface ipv4 set address name="ローカル エリア接続" source=static address=192.168.10.100 mask=255.255.255.0 gateway=192.168.10.1</CommandLine>
<Order>1</Order>
</SynchronousCommand>
<SynchronousCommand>
<CommandLine>NETSH interface ipv4 set dns "ローカル エリア接続" static 192.168.10.10</CommandLine>
<Order>2</Order>
</SynchronousCommand>
</FirstLogonCommands>
<OOBE>
~省略~
Sysprep.inf に追加された[GUIRunOnce]コマンド
~省略~
[GuiRunOnce]
Command0=“netsh interface ip set address name=”ローカル エリア接続” static 192.168.10.101 255.255.255.0 192.168.10.1 1″
Command1=“netsh interface ip set dns “ローカル エリア接続” static 192.168.10.10 primary”
これだけ押さえておけば、応答ファイル (特に Unattend.xml) は攻略したも同然です。少なくとも、仮想マシンの自動展開には応用できるはずです。
Hyper-V や Virtual PC の場合は、仮想マシンに Sysprep 済みの VHD を割り当て、仮想フロッピー ディスク (.vfd) または VHD の C: ドライブのパーティションのルート に
Unattend.xml をコピー(別の仮想マシンに .vfd をマウントしてコピー、または VHD を「ディスクの管理」でマウントしてコピー)したら、仮想マシンを起動、10分ほど放っておくと、Unattend.xml に従って自動構成され、ログオン画面が表示されます。コンソールに対話する必要は全くありません。
この方法は、仮想環境とは関係ない、イメージ展開の手法 (Sysprep の仕組み) を利用しているため、他の仮想化テクノロジにも応用できます。