The Machine Installer makes it easy to maintain a large number of development and staging servers
What is the best way to organize and maintain a software development infrastructure? At Macaw (and I think most software development environments), virtualization has become an essential part of the way we do our work. For most projects, we "clone" a standard development image for each team member and each integration, test and build server. Team members run their virtual machine using Virtual PC or Virtual Server on their notebook or desktop, often using external hard drives for better performance. The project servers are hosted in our centrally managed Virtual Server environment.
But this approach has many disadvantages: security is an issue with laptops getting stolen and USB drives getting lost, reliability is an issue with external hard drives crashing, performance is sluggish because of memory constraints and disk performance of laptops. We use Vista x64 on all our laptops with bitlocker enabled, this is quite secure but virtual machine performance is not very good, even on very powerful laptops with 4 Gigs of ram, especially when you run "heavy" virtual machines with Visual Studio, SQL Server and MOSS installed.
So we had to come up with a better solution. This solution was found in Microsoft Virtual Machine Manager (VMM) combined with Windows 2008 Terminal Services Gateway (TSG) for remote access. In this setup we run all virtual machines in a centrally managed server environment, using Remote Desktop or RemoteApp to access the development machines. This infrastructure provides better performance because virtual machines run on fast servers with quadcore processors and fast disk systems. And there is no project data on remote laptops anymore, so security and reliability are much, much higher. At Macaw, we initially built our Virtual Machine environment on VMM 2007 and Virtual Server 2005 R2, last month we upgraded this environment to VMM 2008 and Hyper-V Server 2008 on all virtual machine hosts. This infrastructure has quickly become very popular within Macaw, especially TSG works really well.
However, there is always another problem to solve. Now, we were creating and managing much more virtual machines in the central environment. Because most of our project-related infrastructure was now hosted centrally that meant extra work for our internal IT staff. Setting up a new development environment for a small team, with a few development machines and some build and test servers, costs a lot of work. Also, our one-size-fits-all development image, based on Windows 2003 Enterprise with Visual Studio 2005, SQL Server 2005 and MOSS, had inherent drawbacks. Cloning an image that has MOSS and SQL Server installed is not without issues. We have solved these, but it is unsupported and never felt 100% "right". The image also began to show its age: more and more projects were asking for 64 bits hardware, Windows 2008, Visual Studio 2008 and SQL Server 2008. The number of permutations with the 2005 and 2008 stack of software is large, so the cloning approach was no longer a viable solution.
For this reason we are now introducing the Factory Installer. What we created is a self-service model for completely installing development machines that can be used by any project team in our organization and Solutions Factory customer (we will sell this solution as as part of our Solutions Factory). After approval by a manager, the team receives VMM "quota points" and can go to the VMM Self Service Portal (a standard web interface for management of virtual machines, provided by VMM) and start creating virtual machines based on Virtual Machine templates. Currently we have 4 Operating System templates available: Windows 2003 x86 and x64, Windows 2008 x86 and x64. After computer name and admin password have been given, the new machine is created, deployed to a server host and started.
VMM 2008 Self Service Portal
Create new virtual machine based on template
At first login, the user is presented the Factory Setup Wizard. This wizard lets you install the complete software application suite for this new virtual machine in one single process. We currently support:
- .NET Framework 3.5 Sp1
- Visual Studio 2005, 2008
- SQL Server 2005, 2008, with Analysis, Integration, and Reporting Services as separate options
- WSS3 and MOSS 2007
- Biztalk 2006 R2
- Popular utilities like Firefox, 7Zip, Adobe Reader, Flash and Silverlight
Below are some images from the Installation Wizard.

Select applications to be installed

Confirmation Dialog: after this screen the unattended installation will run for up to 4 hours, depending on selected applications
After selection of the applications needed for the project, the Installer gets to work. Each software package is installed silently, with reboots in between. All applications come preconfigured with the most recent updates and service packs and installed according to our guidelines, and the latest security updates are installed automatically. Installation of a "loaded" server can take up to 4 hours time, but you don't have to wait for that: no manual intervention is required during the process.

During the install sequence
We created the Factory Installer using the Microsoft Deployment Toolkit. This freely available toolkit was originally created for deployment of desktop computers, but now also supports installation of server operating systems and custom task sequences. We have loaded the toolkit with modified instances of Windows 2003 and 2008 OSses, Virtual Server 2005 and Hyper-V drivers and created unattended installation scripts for those server and client applications that we use most often on our machines. There is a lot of technology at work here, you have to go through a lot of steps, but the whole mechanism works beautifully. Getting some applications (Visual Studio is an example) to install properly and silently takes a lot of magic; it cost us a lot of time to get every combination working correctly. We are still hard at work getting the final wrinkles out. But now that we have this whole mechanism working, from now on it will be very easy to start supporting a new operating system such as Windows 2008 R2 or add an application such as PerformancePoint to the wizard. To add an OS, we would create a customized unattended install of the new OS using vLite and the System Image Editor, add it in the Deployment Workbench, deploy it to an empty virtual machine, create a VMM Template from it and add this template to self service policies. Users can then start using the new OS for experimentation, and install all of the existing applications on it without extra effort. This will save us a lot of time and effort.

The Microsoft Deployment Workbench
Personally I think this solution is interesting not only to us, but for any organization that regularly deploys (virtual) servers with a variation of application software. Using the method I described, it is not too hard to create a deployment system like this in your own environment, especially if you have some prior experience with automated Windows deployment (i.e. WDS, RIS, System Center Configuration Manager, Altiris). But you will find that, although it is not hard to get the basic process working, it is hard to get a complete set of hardware environments, OSses and applications working really well in combination. It takes a lot of testing and that costs a lot of time.
For those who don't want to spend that time, we will sell this solution as a separate module of the Macaw Solutions Factory. It must be mentioned that this is not shrink-wrapped software, customization will always be needed because for many of the supported applications there is licencing involved, and the customer has to provide valid product keys for each OS and application that goes into the solution.
Finally, it is nice to know that this solution works just as well for physical server deployment and even cloud-based deployment: create a CD/DVD deployment point, upload the very large ISO file that Deployment Workbench will generate to cloud-based storage, attach the ISO file to a newly created cloud-based server (with Windows installed or even completely empty), boot it, and off it goes!