Unattended installation of Windows Server 2012 on KVM
I am trying to perform an unattended install of Windows Server 2012
into a KVM virtual machine, using virt-install
. The installer is
complaining, "Windows cannot read the <ProductKey>
setting from the
unattend answer file", and I've been unable to figure out how to
proceed past this point.
I am starting with the following autounattend.xml
file:
<unattend xmlns="urn:schemas-microsoft-com:unattend"
xmlns:ms="urn:schemas-microsoft-com:asm.v3"
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<settings pass="windowsPE">
<component name="Microsoft-Windows-Setup"
publicKeyToken="31bf3856ad364e35" language="neutral"
versionScope="nonSxS" processorArchitecture="x86">
<UserData>
<AcceptEula>true</AcceptEula>
<ProductKey>
<Key>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</Key>
<WillShowUI>OnError</WillShowUI>
</ProductKey>
</UserData>
<ImageInstall>
<OSImage>
<WillShowUI>Never</WillShowUI>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>1</PartitionID>
</InstallTo>
<InstallFrom>
<MetaData>
<Key>/IMAGE/Name</Key>
<Value>Windows Longhorn SERVERSTANDARDCORE</Value>
</MetaData>
</InstallFrom>
</OSImage>
</ImageInstall>
</component>
</settings>
</unattend>
I am baking this into an ISO image using mkisofs
:
$ ls config/
autounattend.xml
$ mkisofs -o config.iso -J -r config
And then I'm starting the install like this:
virt-install -n ws2012 -r 2048 -w network=default,model=virtio \
--disk path=ws2012.qcow2,device=disk,bus=virtio \
--cdrom en_windows_server_2012_r2_with_update_x64_dvd_4065220.iso \
--disk path=virtio-win-0.1-81.iso,device=cdrom \
--disk path=config.iso,device=cdrom \
--os-type windows --os-variant win2k8
Looking at x:\windows\panther\setupact.log
, I can see that the
installer does find the unattend file:
2014-11-14 12:29:43, Info [0x060114] IBS
Callback_Productkey_Validate_Unattend:User specified an unattend
xml file
The specified product key is valid (I can copy and paste it from this file into the product key dialog and the installation will proceed correctly).
Do you know how to make this install work?
In this case the answer was simple. I had:
<component name="Microsoft-Windows-Setup"
publicKeyToken="31bf3856ad364e35" language="neutral"
versionScope="nonSxS" processorArchitecture="x86">
When I needed:
<component name="Microsoft-Windows-Setup"
publicKeyToken="31bf3856ad364e35" language="neutral"
versionScope="nonSxS" processorArchitecture="amd64">
That is, I had the wrong processorArchitecture
in my XML (which I totally should have spotted earlier).
I know have a working, fully-automated process that results in Windows image suitable for deployment in OpenStack. The scripts and config I'm using are available on github.
the procedure that we use to generate the official Windows Server 2012 R2 evaluation images for OpenStack is detailed here:
https://github.com/cloudbase/windows-openstack-imaging-tools
Windows OpenStack images (KVM and Hyper-V):
http://www.cloudbase.it/ws2012r2/