This page describes how to test UEC images without signing and uploading to eeither EC2 or UEC.

Basic requirements

Grabbing an image to test

You need a UEC image to test. You can for instance rsync the current karmic image like so:

rsync -aP uec-images.ubuntu.com::uec-images/karmic/current/karmic-uec-amd64.tar.gz .

The first time you do it, it will probably take a while, as the images are around 180 MB. Subsequent rsyncs should be quite a bit faster.

Next, you uncompress the image. It's a 2 GB filesystem, so if you just ungzip it, it'll take up 2 GB of space on your disk. The image is very sparse, so we save a lot of space by uncompressing it like so (note '-S' to tar):

tar -xSvzf karmic-uec-amd64.tar.gz

This also takes a while.

Setting up a fake meta-data service

ec2-init in the images expects to be able to reach the EC2 meta-data service at The simplest way to make this happen is to assign this IP to your host machine. You then have 2 options, either a.) disable ec2init on boot, or b.) setup a meta-data service on your system.

Disable ec2-init

ec2-init can be disabled with a kernel command line argument of ec2init=0

Setup Metadata service

Add something like the following to your '/etc/network/interfaces':

iface eth0:0 inet static

and run

sudo ifup eth0:0

You should also have apache installed.

sudo apt-get install apache2

Now, the trick to the metadata service is that it's a simple HTTP interface, so we're just going to emulate it with a bunch of files in our webroot. You can grab http://people.canonical.com/~soren/mock-meta-data.tar.gz and unpack it in your webroot, and you should be ready to roll.

Starting the instance

kvm command line

Start the instance with:

kvm \
   -m 512 \
   -drive file=karmic-uec-amd64.img,if=scsi,bus=0,unit=6,boot=on \
   -kernel karmic-uec-amd64-vmlinuz-virtual \
   -initrd karmic-uec-amd64-initrd-virtual \
   -append "root=/dev/sda ro"

Note, above, you could add 'ec2init=0' to '-append'


Next, we add the instance to libvirt. Create a file like this:

<domain type='kvm'>
    <type arch='x86_64' machine='pc'>hvm</type>
    <cmdline>root=/dev/sda ro</cmdline>
  <clock offset='utc'/>
    <disk type='file' device='disk'>
      <source file='/home/soren/uec/karmic-uec-amd64.img'/>
      <target dev='hda' bus='ide'/>
    <interface type='network'>
      <source network='default'/>
      <model type='e1000'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen=''/>

..obviously adjusting the paths according to you local setup. Save it as temp.xml, and run

virsh define temp.xml

And remove the file again. It'll just be confusing to have it lying around.

That should do it, really!

virsh start uec-amd64-karmic-test

should start up an instance and it should boot completely. Yay.

kvm and lucid uec

modify uec image for easier test

  • The following sets up a getty on serial console and sets the 'ubuntu' users password to 'mypass" so you can log in on it

sudo sh -c 'i=$1; p=$2; mp=${3:-/mnt}; pa=PasswordAuthentication;
  mount -o loop "$i" "${mp}" && trap "umount ${mp}" EXIT &&
  sudo chroot "${mp}" sh -c "
    cp /etc/init/tty2.conf /etc/init/ttyS0.conf &&
      sed -i s,tty2,ttyS0,g /etc/init/ttyS0.conf 2>/dev/null &&
      sed -i \"s,${pa} no,${pa} yes,\" /etc/ssh/sshd_config 2>/dev/null &&
      echo "ubuntu:${p}" | chpasswd
  ' fiximg "lucid-server-amd64.img" "ubuntu"

boot in kvm

The following kvm command line allows you to login at console:

kvm -drive file=lucid-server-amd64.img.dist,if=scsi \
  -kernel lucid-server-amd64-vmlinuz-virtual \
  -initrd lucid-server-amd64-initrd-virtual \
  -m 256 \
  -nographic \
  -serial stdio \
  -append "root=/dev/sda console=ttyS0"

Other helpful options are:

  • Disable ec2init timeout by adding 'ec2init=0' to the '-append' arguments
  • Increase upstart debug output by adding '--verbose' or '--debug' to '-append arguements'
  • enable guest ssh in usermode networking with by adding arguments: '-redir tcp:2222::22'

UbuntuCloud/Images/Testing (last edited 2011-08-20 13:28:33 by robbiew)