I want to talk about something new we’re working on at Eucalyptus, but first let me start with a little background. Quite simply, it is a hassle to get an image installed. The current process for Eucalyptus (as we document it) is to download a tarball, untar it, bundle/upload/register the kernel/ramdisk and image itself. That’s about 11 steps. We thought there must be a simpler way to do this.
What we came up with is eustore. In the spirit of euca2ools (euca- and euare- commands), eustore commands give you access to a Eucalyptus image store. That’s store, as in storehouse, not a shop. We have some updated “base” images available on our servers. We have a catalog file that contains metadata about those images. The eustore tools simply give you access to those, and let you issue a single command to download an install an image on your local cloud (or any Eucalyptus cloud you have access to).
The code has been checked in with the euca2ools. To install and use the commands, you’ll need to build from source and tweak the setup.py. Let’s go over that now.
If you don’t have bzr, you’ll need to download it and grab the code with
bzr branch lp:euca2ools
You’ll find the eustore commands in euca2ools/commands/eustore. The commands still need to be added to setup.py, as does the package to get it installed with the rest of euca2ools. Here’s s patch script you can apply with “patch -p0 <setup.patch” (assuming you copy this into a file named setup.patch);
--- setup.py 2012-01-20 17:17:48.000000000 -0800 +++ setup.py 2012-01-20 17:18:53.000000000 -0800 @@ -161,10 +161,13 @@ setup(name = "euca2ools", "bin/euca-unbundle", "bin/euca-unmonitor-instances", "bin/euca-upload-bundle", - "bin/euca-version"], + "bin/euca-version", + "bin/eustore-describe-images", + "bin/eustore-install-image"], url = "http://open.eucalyptus.com", packages = ["euca2ools", "euca2ools.nc", "euca2ools.commands", - "euca2ools.commands.euca", "euca2ools.commands.euare"], + "euca2ools.commands.euca", "euca2ools.commands.euare", + "euca2ools.commands.eustore"], license = 'BSD (Simplified)', platforms = 'Posix; MacOS X; Windows', classifiers = [ 'Development Status :: 3 - Alpha',
Once that file is patched, installing euca2ools (+eustore) is as simple as running (as root)
python setup.py install
Once you do this, you’ll have access to 2 new commands; eustore-describe-images and eustore-install-image. Here are the command summaries;
Usage: eustore-describe-images [options] Options: -h, --help show this help message and exit -v, --verbose display more information about images
Usage: eustore-install-image [options] Options: -h, --help show this help message and exit -i IMAGE_NAME, --image_name=IMAGE_NAME name of image to install -b BUCKET, --bucket=BUCKET specify the bucket to store the images in -k KERNEL_TYPE, --kernel_type=KERNEL_TYPE specify the type you're using [xen|kvm] -d DIR, --dir=DIR specify a temporary directory for large files --kernel=KERNEL Override bundled kernel with one already installed --ramdisk=RAMDISK Override bundled ramdisk with one already installed
eustore-describe-images list the images available at emis.eucalyptus.com. You have the ability to change the url (using the EUSTORE_URL environment variable which is helpful sometimes). The output looks like this;
centos-x86_64-20111228 centos x86_64 2011.12.28 CentOS 5 1.3GB root centos-x86_64-20120114 centos x86_64 2012.1.14 CentOS 5 1.3GB root centos-lg-x86_64-20111228centos x86_64 2011.12.28 CentOS 5 4.5GB root centos-lg-x86_64-20120114centos x86_64 2012.1.14 CentOS 5 4.5GB root debian-x86_64-20111228 debian x86_64 2011.12.28 Debian 6 1.3GB root debian-x86_64-20120114 debian x86_64 2012.1.14 Debian 6 1.3GB root debian-lg-x86_64-20111228debian x86_64 2011.12.28 Debian 6 4.5GB root debian-lg-x86_64-20120114debian x86_64 2012.1.14 Debian 6 4.5GB root ubuntu-x86_64-20120114 ubuntu x86_64 2012.1.14 Ubuntu 10.04 1.3GB root ubuntu-lg-x86_64-20120114ubuntu x86_64 2012.1.14 Ubuntu 10.04 4.5GB root
To install one of these images on your local cloud, you’d use eustore-install-image like this;
eustore-install-image -i debian-x86_64-20120114 -b myimages
This command installs the image named into the myimages bucket on the cloud you are setup to talk to. As with all euca2ools, you’d first source the eucarc file that came with your cloud credentials. I should point out something about uploading kernel and ramdisk to your cloud. Only the admin can install these. If you have admin credentials, the above command will work fine. If you don’t and want to install an image anyway, you would use the –kernel and –ramdisk options to refer to a kernel id and ramdisk id already installed on the cloud. That way, this command will ignore the kernel and ramdisk bundled with the image and refer to the previously uploaded ones.
The project management is happening here: https://projects.eucalyptus.com/redmine/projects/eustore/
It is discussed during the images meetings on IRC (calendar here)