Packer
Unattended Installation for Windows
Unattended Windows installation is done via "Answer Files", or "Unattend files".
These files are generally named "autounattend.xml". They are not Packer-specific tools, though we do make use of them.
If, after following this guide, you're still having issues getting an answer file working, We recommend you read the official documentation on answer files.
The guide here is hopefully enough to get you started, but isn't a replacement for the official documentation.
When To Use an Answer File
If you are installing the Windows Operating System from a mounted iso as part of your Packer build, you will need to use an Answer file. For example, you're building an image from scratch using the vmware-iso, virtualbox-iso, or hyperv-iso builders.
If you are not installing the operating system, you won't need to provide an answer file. If you are using a pre-built image in a cloud, you don't need to worry about Answer files.
How to make an Answer File
You can either start from an example answer file from a known repo (take a look at the examples links below), or you can generate one using an answer file wizard by selecting New File > New Answer file on a Windows machine. A comprehensive list of all the options you can set in an answer file can be found here
Where to put the Answer File
Windows will automatically look for an autounattend.xml file on mounted drives.
Many users use the floppy_files
option or a secondary mounted iso for
providing the answer file to their iso builders.
You can also specify an unattend file to use by using the /unattend: option when
running Windows Setup (setup.exe) in your boot_command
.
What does Packer need the Answer File to do?
Packer needs the Answer File to handle any questions that would normally be answered interactively during a Windows installation.
If you want to be able to use provisioners, the Answer file must also contain a script that sets up SSH or WinRM so that Packer can connect to the instance.
Finally, your Packer build will be much smoother if the Answer File handles or disables Windows updates rather than you trying to run them using a Packer provisioner. This is because the winrm communicator does not handle the disconnects caused by automatic reboots in Windows updates well, and the disconnections can fail a build.
Examples
The chef-maintained bento boxes are a great example of a Windows build that sets up openssh as part of the unattended installation so that Packer can connect using the SSH communicator. The functioning answer files for every modern Windows version can be found here.
Stefan Scherer's packer-windows repo
is a great example of Windows builds that set up WinRM as part of the unattended
installation so that Packer can connect using the winrm
communicator:
{
"type": "virtualbox-iso",
"guest_os_type": "Windows2008_64",
"iso_url": "https://download.microsoft.com/download/7/5/E/75EC4E54-5B02-42D6-8879-D8D3A25FBEF7/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso",
"iso_checksum": "sha256:30832AD76CCFA4CE48CCB936EDEFE02079D42FB1DA32201BF9E3A880C8ED6312",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c Packer_Provisioning_Shutdown",
"guest_additions_mode": "attach",
"floppy_files": ["./scripts/Autounattend.xml", "./scripts/openssh.ps1"],
"communicator": "winrm",
"winrm_username": "vagrant",
"winrm_password": "vagrant"
}