Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have written a piece of academic software that has many third-party software dependencies (and requires a RDBMS). I would like to create set up a Linux virtual machine image preloaded with all the necessary dependencies and user accounts set up, so that my users can download and try out my software without having to install all the dependencies.

What's the best way to do this, and what virtual machine file format should I use?

share|improve this question
up vote 3 down vote accepted

Personally I'd offer it in Virtualbox and VMWare formats, since Virtualbox is free and VMWare's player is free and well supported and popular.

What do you mean by best way to do it? If you mean offering it to users, you can always create a CD/DVD and offer it free by mail and/or offer it through a CDN or personal website; you don't mention what resources you have available to you. Do you have a website? Is this part of a business? Is it a side hobby?

How big are the resulting images going to be? Do they compress down at all?

Is this likely to be a popular download that can strain your site or tax any transfer limits you have with your provider?

Depending on how savvy your target audience is, you could also offer it via bittorrent to help alleviate the strain on your network (or if you can make agreements with other sites you can divvy it out to them as seed sites). You could even have the images hosted off-site to companies that specialize in hosting large files, so you don't need to worry about content delivery of the large files.

It kind of comes down to a question of what resources you available to you and how savvy your end users are going to be as to how elaborate the requirements you'll impose on the end user just to try out your product. Some may not like having to download separate products to try out your VM. Other sysadmins probably already have VMWare or VMWare player or Virtualbox installed.

share|improve this answer
Great answer, thanks. This is for an academic research project which is likely to see very very few downloads, so I can comfortably host the VM on my lab server. I am wondering if there is a 'standard' VM file format that can be used in VMWare, Virtualbox, etc. The list of dependencies is large enough that I think people would rather download a VM + VirtualBox than install Tomcat, postgres, half a dozen other tools (most of which will require compilation) & set up all the accounts correctly. – mojones Oct 29 '10 at 14:21

You probably want to be looking into OVF, which is the most likely contender to become an industry standard for virtual appliances. It's predominantly supported by VMware and VirtualBox, which are both platforms you probably want to target; Xen is supported in XenServer and KVM is supported in RHEV, with native support for both underlying hypervisor products still forthcoming.

share|improve this answer

Are you aware of your users having access to one particular hypervisor or another? this would help a lot.

One, far from free, method would be to use VMWare's ThinApp system to package up a VM and bundle it with a light hypervisor in a single .exe file - it's very low-impact for users but does cost.

share|improve this answer
Does thinapp run entirely self-contained so they can download the whole thing as one exe and have it run, no additional requirements? – Bart Silverstrim Oct 29 '10 at 14:15
No, I am trying to figure out whether there is some sort of 'universal' VM format that can be run on any hypervisor. Commercial solutions are sadly out of the question as this is an academic research program. The host machines are most likely to be Linux or Mac. – mojones Oct 29 '10 at 14:29
Not really. Even if you have a universal format, the hardware virtualized is different, so you need different drivers. – Bart Silverstrim Oct 29 '10 at 14:52
@bart, yeppers - works just like that – Chopper3 Oct 29 '10 at 14:59
@mojones, what Bart says – Chopper3 Oct 29 '10 at 14:59

I'd rather avoid any use of a virtual image altogether for this purpose. Consider using Puppet without using the master/agent roles. (or Chef, or any other alternative) You'll then just ship the specifications you need in a single file.

The only thing you'll have to provide is your Puppet classes and an example node definition. Then tell the user to install the Puppet agent on one of the supported OS's and run

puppet apply myapplication.pp


  • You only ship a text file containing the specification of what's being installed. (ideally, if all dependencies can be satisfied from general public locations)
  • It's reusable for other operating systems and versions.
  • The software in the VM always up to date (security wise, or at least it's not your job anymore).
  • Can be run in existing set ups of machines.
  • The end-user can review the changes being made to his system, rather than starting a virtual machine from an external, untrusted source in his trusted network.
  • By shipping an update of the Puppet file, users can easily update as well, without the need of installing a new virtual machine.


  • Takes quite some effort to create a good and bug-free Puppet file.
  • Not everything might be Puppetized very easily.
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.