December 2, 2009

Day 1 - Software Installer Management

I find reinstalling Windows laptops and workstations pretty tedious. You need to reinstall Windows, first, right? Then, hope that the network bits are supported by the base install, and when they aren't, get a thumbdrive and shuttle over the network drivers, then download the rest of the drivers for any devices you need. After that you need to go about installing extra software like web browsers, office tools, printers, etc, and then go about configuring all of that madness.

It makes me tired just thinking about it.

The biggest pain point for me is tracking down all of those installable bits each time I need to do a reinstall. Some vendors are nice and ship a driver cd or driver helper. Dell does this, but the interface it provides is pretty bad and is a more painful than going to the Dell support website and downloading things yourself.

Ultimately, this boils down to wanting to avoid the time and effort required to find the right drivers for the right system. The cost (time, patience) of finding each driver or support software is relatively fixed, so let's optimize the process and only perform this "find the right driver" once.

The end result we want is really a local, central, and organized repository of things we need to install on workstations and laptops. I like subversion for solving this. You may not want to use subversion, or any revision control at all, and that's fine - it is just a means to an end of "local, central, organized repository of software/drivers."

My search path for finding a given piece of laptop software usually starts with the hardware model, then the thing I need (network driver, or whatever), so it makes sense to use that order in the subversion layout: Such as /vendor/model/category - where vendor is the vendor of your laptop or workstation. This saves you from having to remember that a given laptop has a broadcom network chip, you just know what laptop you have and that it needs a network chip.

Network drivers for a Dell Latitude E5400
Audio driver for a Dell Latitude E5400
For cases where you have the same piece of software (such as a wireless driver) across different models, you can use svn externals, which let you do symlink-like things in your svn repository. Doing that, you can have 'network' in the example above be an external reference to another directory that contains the common driver for that network device, which can save you some space in your svn repo.

The next step is getting those drivers portable and making them available to fresh-installs that may not have networking. Doing an svn checkout to a thumbdrive lets you easily get these drivers to the host that needs them, if there's no network on that host. Updating your thumbdrive is a simple 'svn up' (or right-click, update via Tortoise SVN in Windows) and you're done.

Once you are in this position, you can start working on automating the process of driver and software installation. You can begin writing automation scripts (batch, vbscript, AutoIt3, etc) to make your software installation an unattended process. Keep these automation scripts in the same directory.

You may want to consider creating a separate subversion repository for this data. The reason for this is that adding all kinds of large files to a smaller, code-oriented repository may unnecessarily clutter things. Larger repositories may take more time to back up and restore, and some folks may check out trunk for code work and 'svn up' now fetches those installers, and additionally, existing repositories may have access controls that are too strict - you'll probably want anonymous checkout, or use a user account that is unprivileged and only has access to the software bits.

Finally, since we're sorting by vendor and model, you can extend this idea to include things like switch firmware and other versionable blobs.

This practice of having a local, central, and organized repository of drivers and other software packages helps you avoid repeatedly having to search for the same piece of software multiple times.

Further reading:

  • subversion
  • Tortoise SVN - a windows svn client that integrates into explorer
  • AutoIt3 - a scripting language for Windows UI automation
  • WPKG - a project dedicated to making a package management system for windows. Has plenty of existing installers for software and changes you install now.


zdw said...

Three comments on this, which are sort of Mac specific but could be generally helpful:

First, subversion leaves files throughout the directory tree, so if you're supporting an OS that doesn't like this (such as Mac OS X and it's "bundles"), you might consider a different version control system.

Second, I find that using the manufacturer URL rather than their name as the top level vendor category sometimes makes more sense, especially when the vendor name may be generic. I use a similar scheme for downloaded software, and often with smaller developers they don't own their "" address.

Thirdly, for vendors that don't add model numbers to their product names when they revise them (ex: iMac), it's best to use the internal parts number if you can find it - for Apple stuff this is the "Model Identifier", and usually phrased as "iMac11,1" or "MacBookProp3,1" or similar.

John D said...

Use Unattended to automate your Windows installs!!!

It allows you to collect all of your drivers in a central location, and it automatically copies all of them onto the computer as part of the setup process. Once you have the drivers, you don't even have to INSTALL them. Just pop in the unattended boot CD, answer a few questions like hostname and domain join account, then pick a customized install script, any additional pre-scripted application installs, and all of the drivers. Come back in a few hours and it's all done.

I suffered through all kinds of hassles with cloning and imaging until I took an afternoon to setup Unattended. Now reinstalling Windows is No Big Deal.

Juan Pedro Escalona Rueda said...

Well, in my company, i deployed Clonezilla ( It makes images of a partition, and compress it. Normally, for a computer about 250GBytes HD, it spend 20 minutes to make the image, and 15 minutes to restore image. Clonezilla can also restore several computers simultaneously using multicast. It's cool :)

I never heard about Unattended, i think is fine. I'll try it someday. Thanks John for advice.

natxete said...

at work we use opsi ( for this. It works great, they have their own debian repository.

A 'minus' point: it's a german product, and although they have made great efforts to have documentation in English, sometimes when net installing something you come accross the weirdest messages on screen (if you cannot read german, that is ;-) )

I am really happy with it, it has a learning curve (just like unattended) but once you get it, you're good to go.

The next step is to get wpkg to manage the apps and settings (all kind of settings, amazing product). Soon, when I am done with other stuff ....