# My Retina Windows Templates for Packer
### Introduction
This repository contains Windows templates that can be used to create boxes for Vagrant using Packer ([Website](https://www.packer.io)) ([Github](https://github.com/mitchellh/packer)).
This repo is a modified fork of the popular [joefitzgerald/packer-windows](https://github.com/joefitzgerald/packer-windows) repo.
Some of my enhancements are:
* Support of fullscreen Retina display on a MacBook Pro.
* WinRM, no more OpenSSH
* PowerShell attached to taskbar with new features enabled
### Packer Version
[Packer](https://github.com/mitchellh/packer/blob/master/CHANGELOG.md) `0.12.2` or greater is required.
### Windows Versions
The following Windows versions are known to work (built with VMware Fusion Pro 8.1.1):
* Windows 10
* Windows Server 2016
* Windows Server 2016 with Hyper-V and Docker -> see [docker-windows-box](https://github.com/StefanScherer/docker-windows-box) for an use case
You may find other packer template files, but older versions of Windows doesn't work so nice with a Retina display.
### Windows Editions
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).
### Product Keys
The `Autounattend.xml` files are configured to work correctly with trial ISOs (which will be downloaded and cached for you the first time you perform a `packer build`). If you would like to use retail or volume license ISOs, you need to update the `UserData`>`ProductKey` element as follows:
* Uncomment the `...` element
* Insert your product key into the `Key` element
If you are going to configure your VM as a KMS client, you can use the product keys at http://technet.microsoft.com/en-us/library/jj612867.aspx. These are the default values used in the `Key` element.
### Using existing ISOs
If you have already downloaded the ISOs or would like to override them, set these additional variables:
- iso_url - path to existing ISO
- iso_checksum - md5sum of existing ISO (if different)
```
packer build -var 'iso_url=./server2016.iso' .\windows_2016.json
```
### 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`:
```xml
cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\openssh.ps1 -AutoStart
Install OpenSSH
99
true
```
Doing so will give you hours back in your day, which is a good thing.
### WinRM
These boxes use WinRM. There is no OpenSSH installed.
### Hyper-V Support
If you are running Windows 10, then you can also use these packerfiles to build a Hyper-V virtual machine:
This requires @taliesens [fork of Packer](https://github.com/mitchellh/packer/pull/2576) with Hyper-V support. The linked PR also has binaries available ex: https://dl.bintray.com/taliesins/Packer/Packer.1.0.0.104-HyperV.nupkg
Then run Packer:
```
packer build -var 'hyperv_switchname=Wifi' .\windows_2016.json
```
Be sure to set hyperv_switchname to an external Hyper-V switch.
I have the ISO already downloaded to save time, and only have Hyper-V installed on my laptop, so I run:
```
packer build --only hyperv-iso -var 'hyperv_switchname=Ethernet' -var 'iso_url=./server2016.iso' .\windows_2016_docker.json
```
You then can use this box with Vagrant to spin up a Hyper-V VM. Vagrant currently
needs some patches as well, see the script [install-vagrant.ps1](hyperv/scripts/install-vagrant.ps1)
how to patch Vagrant 1.8.4 to fix these issues.
### Using .box Files With Vagrant
The generated box files include a Vagrantfile template that is suitable for
use with Vagrant 1.7.4+, which includes native support for Windows and uses
WinRM to communicate with the box.
Vagrant 1.8.4 does need some workarounds though:
- There is a bug in get_vm_status.ps1
- winrm-fs needs an update as well
See: https://github.com/PatrickLang/packer-windows/issues/1#issuecomment-230151622
These are fixed in 1.8.5, so upgrading is easiest.
Example Steps for Hyper-V:
```
vagrant box add windows_2016_docker windows_2016_docker_hyperv.box
vagrant init windows_2016_docker
vagrant up --provider hyperv
```
### Contributing
Pull requests welcomed, but normally should go to Joe's repo.