I've been thinking about this myself. There are some other technologies that you could throw into the mix. Here's what I'm currently setting up:
- PXE based pre-seeded installation images (Debian Squeeze). You can start up a bare-metal machine (or new virtual appliance) and select the image from the PXE boot menu. This has the major advantage of being able to install your environment on physical machines (in addition to virtual appliances).
- Someone already mentioned Puppet. I use CFEngine but it's a similar deal. Essentially your configuration is documented and centralized in policy files which are continually enforced by an agent on the client.
- if you don't want a rigid environment (i.e. developers may choose a combination of tool-sets) you can roll your own deb packages so new devs can type
sudo apt-get install acmecorp-eclipse-env
or sudo apt-get install acmecorp-intellij-env
, for example.
- Slightly off-topic, but if you run a Debian based environment (i.e. Ubuntu), consider installing
apt-cacher
(package proxy). In addition to saving bandwidth, it will make your installations much faster (since packages are cached on your local network).