In my former article I elaborated on how to create a lab with Windows servers quickly using Vagrant, Packer and Virtualbox. What I did not realize at that time is that the box I created had 2 issues:
- The box is not sysprepped. The sysprep is mandatory if you want to create a Domain Controller and are adding boxes to the domain. You’ll end up with 2 boxes with the same SID.
- The MAC address is cloned for every Vagrant machine that is based on the box. This becomes a problem if you want to place the hosts in a bridged network.
Then I went and Googled (after trying in vain myself) and found this repository: https://github.com/mefellows/packer-community-templates. Someone has already done it.
Here is a link to the json file: https://gist.github.com/jacqinthebox/cd3dcbf4b220c70de956.
Copy this file to the packer-windows folder and save it as ‘windows_2012_r2_sysprep.json’
Make sure you copy the Autounattend_sysprep.xml file from \packer-community-templates\answer_files\2012_r2 to the \packer-windows\answer_files\2012_r2 folder.
Now you can run packer build -only virtualbox-iso windows_2012_r2_sysprep.json. And grab a coffee.
The MAC address can be set in the Vagrant file for each machine. First you need to know what the name is of the network interface for the bridge.
Then you can insert the name of the nic in the Vagrantfile like this (see the marked lines):
Vagrant.require_version ">= 1.6.2"
$root_provision_script = <<'ROOT_PROVISION_SCRIPT'
& $env:windir\system32\tzutil /s "W. Europe Standard Time"
Vagrant.configure("2") do |config|
config.vm.box = "windows_2012_r2"
config.vm.hostname = "dsc01"
config.vm.provider :virtualbox do |v, override|
v.gui = true
config.vm.network :forwarded_port, guest: 3389, host: 3391, id: "rdp", auto_correct: true
config.vm.network :forwarded_port, guest: 22, host: 2223, id: "ssh", auto_correct: true
config.vm.network "public_network", :bridge => 'Qualcomm Atheros AR8151 PCI-E Gigabit Ethernet Controller (NDIS 6.30)', :mac => "5CA1AB1E0001"
config.vm.provision "shell", inline: $root_provision_script
So there it is.
I use Ubuntu as my development machine and I like to evangelize about it. But actually it doesn’t matter at all. It’s the functionality I run that is the most important. And since that is the case, the underlying OS becomes irrelevant. That’s why I tend to choose the OS with the smallest footprint. Which would be a Linux based OS.
So here is why, and how, I use Ubuntu.
This picture is Ubuntu running in Parallels, which looks great in high res on the MacBook Pro Retina screen.
Some Linux advantages over another OS
There are some advantages of running Ubuntu (or another Linux distro):
- system requirements are low, you can happily use older hardware
- the software is open source and free (as in ‘costs nothing’, although I donate to my favourite open source projects like LibreOffice and Ubuntu itself).
- installation is easy, however installing Windows is easy too.
- installation is fast because Ubuntu has a smaller footprint than Windows (8 GB vs 20 GB, and then Ubuntu is considered large in comparison with e.g. Puppy Linux)
- installation of software is a delight, because of the packaging method (apt, yum, rpm, pacman and so forth). With a package manager you do not need to browse to websites to grab a copy
- Updating is just as simple apt-get update && apt-get upgrade
- If you prefer to work with the keyboard and in the terminal, Linux is your best fried. Just choose your terminal, your favourite shell, your favourite editor and your good to do any kind of task
So how do I use Ubuntu?
So I use Ubuntu
And yes, I can do all above mentioned things on my Mac and Windows machine as well, but going the Ubuntu way the footprint is the smallest.