← Back to team overview

vmbuilder team mailing list archive

Building Appliances

 

Hi all,

in the last weeks I experimented with ways to build preconfigured
virtual appliances with Ubuntu. From the start i thought it would be
best to use the existing packaging system so that it's as easy as
possible to take a virtual machine and turn it into an appliance and so
it would also be possible to distribute appliances through the widely
known and tested package repositories.

But I found one problem: It is not enough to simply create a metapackage
that pulls in the software you want to provide as dependencies and
configure some parts with maintainer scripts. Since most server software
asks its own configuration questions with debconf that you very likely
want to replace with non-configurable default values and the scripts of
the appliance package only run after all dependencies have been
installed, you need to preseed your dependencies BEFORE you start the
install of the appliance package.

So I chose to write the two wrapper tools valist (lists all appliance
packages in the repositories of the system) and vainstall (expects a
seed file with the name of the appliance package in the same directory
of the package mirror as the appliance package itself and applies it
before calling apt-get install on the appliance package).

In short the differences between an appliance package and regular
package are as follows:

- A va provides the virtual package virtual-appliance. This means that a
VM can only be one kind of virtual appliance at a time and it provides a
convenient way to find all virtual-appliance packages available in the
package repositories known to a specific machine.

- For every virtual-appliance there must be a seed file on the package
server in the same directory where the deb file resides. If vainstall
can't find it it will refuse to install the appliance package.

For testing I built a simple appliance with the name mysql-dev-appliance
that provides a MySQL appliance for developers which can be accessed
with a mysql client on a remote machine and with phpmyadmin.

I plan to build some more developer appliances like a PHP development
for example, that allows to access the document root via SMB. The nice
thing about developer appliances is that there is not much of a need for
security and data backups. For building productive systems I would at
least need to build some kind of web based backup and restore tool that
can be adapted for each kind of appliance via a plugin mechanism and
that allows to backup and restore the appliance specific application
data.


You can get my code from here:

lp:~aheck/vmbuilder/appliances


Hope you guys can give me some feedback on this approach for appliance
building :)


Best regards,

Andreas




Follow ups