6.35 KB
Newer Older
Joe Fitzgerald's avatar
Joe Fitzgerald committed
# Windows Templates for Packer
Joe Fitzgerald's avatar
Joe Fitzgerald committed

Joe Fitzgerald's avatar
Joe Fitzgerald committed
3 4 5 6 7 8
### Introduction

This repository contains Windows templates that can be used to create boxes for Vagrant using Packer ([Website]( ([Github](

This repo began by borrowing bits from the VeeWee Windows templates ( Modifications were made to work with Packer and the VMware Fusion provider for Packer and Vagrant.

9 10 11 12
### Packer Version

[Packer]( `0.5.0` or greater is required.

13 14
### Windows Versions

The following Windows versions are known to work (built with VMware Fusion 6.0.2):

17 18 19 20 21 22 23 24 25
* Windows 2008 R2
  * [![Build Status - Develop](]( `Develop`
  * [![Build Status - Develop](]( `Master`
* Windows 2012
  * [![Build Status - Develop](]( `Develop`
  * [![Build Status - Develop](]( `Master`
* Windows 2012 R2
  * [![Build Status - Develop](]( `Develop`
  * [![Build Status - Develop](]( `Master`
26 27 28

### Windows Editions

Joe Fitzgerald's avatar
Joe Fitzgerald committed
All Windows Server versions are defaulted to the Server Standard edition. You can modify this by editing the Autounattend.xml file, changing the `ImageInstall`>`OSImage`>`InstallFrom`>`MetaData`>`Value` element (e.g. to Windows Server 2012 R2 SERVERDATACENTER). You also need to update the `UserData`>`ProductKey` element with the appropriate key from

31 32
### Windows Updates

The scripts in this repo will install all Windows updates – by default – during Windows Setup. This is a _very_ time consuming process, depending on the age of the OS and the quantity of updates released since the last service pack. You might want to do yourself a favor during development and disable this functionality, by commenting out the `WITH WINDOWS UPDATES` section and uncommenting the `WITHOUT WINDOWS UPDATES` section in `Autounattend.xml`:

35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
<SynchronousCommand wcm:action="add">
	<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\openssh.ps1 -AutoStart</CommandLine>
	<Description>Install OpenSSH</Description>
<SynchronousCommand wcm:action="add">
	<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\openssh.ps1</CommandLine>
	<Description>Install OpenSSH</Description>
52 53 54 55 56 57
<SynchronousCommand wcm:action="add">
	<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\win-updates.ps1</CommandLine>
	<Description>Install Windows Updates</Description>
58 59
60 61 62 63

Doing so will give you hours back in your day, which is a good thing.

64 65 66 67 68 69 70 71 72 73 74 75 76 77
### OpenSSH / WinRM

Currently, [Packer]( has a single communitator that uses SSH. This means we need an SSH server installed on Windows - which is not optimal as we could use WinRM to communicate with the Windows VM. In the short term, everything works well with SSH; in the medium term, work is underway on a WinRM communicator for Packer. 

If you have serious objections to OpenSSH being installed, you can always add another stage to your build pipeline:

* Build a base box using Packer
* Create a Vagrantfile, use the base box from Packer, connect to the VM via WinRM (using the [vagrant-windows]( plugin) and disable the 'sshd' service or uninstall OpenSSH completely
* Perform a Vagrant run and and output a .box file

### Using .box Files With Vagrant

If you are going to use the .box files produced by the project with Vagrant, you should also use the [vagrant-windows]( plugin, which will ensure Vagrant works well with Windows. This will also allow Vagrant to use WinRM to communicate with the box. 

Joe Fitzgerald's avatar
Joe Fitzgerald committed
78 79
### Getting Started

Trial versions of Windows 2008 R2 / 2012 / 2012 R2 are used by default. These images can be used for 180 days without activation.

Alternatively – if you have access to [MSDN]( or [TechNet]( – you can download retail or volume license ISO images and place them in the `iso` directory. If you do, you should update the relevent `.json` file, setting `iso_url` to `./iso/<path to your iso>.iso` and `iso_checksum` to `<the md5 of your iso>`. For example, to use the Windows 2008 R2 (With SP1) retail ISO:
Joe Fitzgerald's avatar
Joe Fitzgerald committed
83 84 85 86

1. Download the Windows Server 2008 R2 with Service Pack 1 (x64) - DVD (English) ISO (`en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso`)
2. Verify that `en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso` has an MD5 hash of `8dcde01d0da526100869e2457aafb7ca` (Microsoft lists a SHA1 hash of `d3fd7bf85ee1d5bdd72de5b2c69a7b470733cd0a`, which is equivalent)
3. Clone this repo to a local directory
Luis Mayorga's avatar
Luis Mayorga committed
4. Move `en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso` to the `iso` directory
88 89 90
5. Update `windows_2008_r2.json`, setting `iso_url` to `./iso/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso`
6. Update `windows_2008_r2.json`, setting `iso_checksum` to `8dcde01d0da526100869e2457aafb7ca`
7. Run `packer build windows_2008_r2.json`
Joe Fitzgerald's avatar
Joe Fitzgerald committed
91 92 93

### Contributing

Pull requests welcomed. Please ensure you create your edits in a branch off of the `develop` branch, not the `master` branch.