Compute Clusters Integration for Debian Development and Building - Project Log

Environment Setup

Eucalyptus uses libvirt as a mechanism to interact with virtualization's hyphervisors such KVM, QEMU and others. This facility allow us to extend it's features and support arm architecture by using KVM-Qemu as emulator for libvirt's domain (Eucalyptus nc's).

In order to be able to use such facility there are few requirements that need to be met first:

  1. The first requirement is to have kvm-qemu running as hyphervisor, so that the arm architecture is supported as a libvirt capability. Otherwise kvm will not be able to make use of qemu-system-arm as libvirt capability. For this to happen you processor should support VT (virtualization technology) for AMD-based it's called svm and for Intel-based CPUs it's called vmx. You can check more information on KVM and on VT support here.

  2. Second requirement is installing the required software eucalyptus software.

Virtualization facilities:

aptitude install kvm libvirt-bin qemu qemu-system

Eucalyptus packages and related software

aptitude install eucalyptus-cloud

Eucalyptus code modification

Eucalyptus branch

I've branched ?LaunchPad Eucalyptus repo, then synced with the 2.3.0 -src-offline release. Currently the Launchpad branch is outdated from such release. You can use my branch by issuing the following command:

bzr branch

To build the software you need to use pkg-eucalyptus debian/ and issue:

svn-buildpackage -rfakeroot 

util/data.h typedef struct ncInstance_t 

defines the metadata for a nc. Main fields are the following:

    char instanceId[CHAR_BUFFER_SIZE];
    char imageId[CHAR_BUFFER_SIZE];
    char imageURL[CHAR_BUFFER_SIZE];
    char kernelId[CHAR_BUFFER_SIZE];
    char kernelURL[CHAR_BUFFER_SIZE];
    char ramdiskId[CHAR_BUFFER_SIZE];
    char ramdiskURL[CHAR_BUFFER_SIZE];
    char reservationId[CHAR_BUFFER_SIZE];
    char userId[CHAR_BUFFER_SIZE];
    int retries;

The plan is extend it to support an arch field.


allocate_instance( - params - ) 

returns an instance.

node/handler_kvm.c Creates the instance and calls libvirt.

node/handlers.c Calls doInitialize() in node/handler_kvm.c that invokes the wrapper tool for XML domain file. It needs to make sure the arch field is being passed.

get_instance_xml invokes the wrapper tool and passes arguments to virsh.

tools/gen_kvm_libvirt_xml creates libvirt's XML Domain definition. Now it looks for an arch field to know that it needs to populate settings for ARM. However, it need the arch argument.

ARM Image


Proposal for Image Creation Automation

Adapt VMBuilder Debian's branch to support ARM ?image creation and install so that it can later be directly uploaded to an Eucalyptus Cloud, that supports ARM images.




Command for running my updated arm image.

echo "Install Debian..."
#qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.gz -hda disk.img -append "root=/dev/ram"

echo "Run Debian ARM..."
qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.img-2.6.32-5-versatile -hda disk.img -append "root=/dev/sda1"

Eucalyptus integration