diff --git a/tools/build_ci_config.sh b/tools/build_ci_config.sh
index 9112471..8eed8ec 100755
--- a/tools/build_ci_config.sh
+++ b/tools/build_ci_config.sh
@@ -6,7 +6,7 @@
 function usage {
     echo "$0 - Build config.ini for openstack-integration-tests"
     echo ""
-    echo "Usage: $0 configfile"
+    echo "Usage: $0 configdir"
     exit 1
 }
 
@@ -14,22 +14,27 @@
     usage
 fi
 
-CONFIG_FILE=$1
+CONFIG_DIR=$1
+CONFIG_CONF=$CONFIG_DIR/storm.conf
+CONFIG_INI=$CONFIG_DIR/config.ini
 
 # Clean up any resources that may be in use
 cleanup() {
     set +o errexit
 
     # Mop up temporary files
-    if [ -n "$CONFIG_FILE_TMP" -a -e "$CONFIG_FILE_TMP" ]; then
-        rm -f $CONFIG_FILE_TMP
+    if [ -n "$CONFIG_CONF_TMP" -a -e "$CONFIG_CONF_TMP" ]; then
+        rm -f $CONFIG_CONF_TMP
+    fi
+    if [ -n "$CONFIG_INI_TMP" -a -e "$CONFIG_INI_TMP" ]; then
+        rm -f $CONFIG_INI_TMP
     fi
 
     # Kill ourselves to signal any calling process
     trap 2; kill -2 $$
 }
 
-trap cleanup SIGHUP SIGINT SIGTERM
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
 
 # Keep track of the current directory
 TOOLS_DIR=$(cd $(dirname "$0") && pwd)
@@ -50,17 +55,19 @@
 
 DIST_NAME=${DIST_NAME:-oneiric}
 
-# Process network configuration vars
-GUEST_NETWORK=${GUEST_NETWORK:-1}
-GUEST_RECREATE_NET=${GUEST_RECREATE_NET:-yes}
+if [ ! -f $DEST/.ramdisk ]; then
+    # Process network configuration vars
+    GUEST_NETWORK=${GUEST_NETWORK:-1}
+    GUEST_RECREATE_NET=${GUEST_RECREATE_NET:-yes}
 
-GUEST_IP=${GUEST_IP:-192.168.$GUEST_NETWORK.50}
-GUEST_CIDR=${GUEST_CIDR:-$GUEST_IP/24}
-GUEST_NETMASK=${GUEST_NETMASK:-255.255.255.0}
-GUEST_GATEWAY=${GUEST_GATEWAY:-192.168.$GUEST_NETWORK.1}
-GUEST_MAC=${GUEST_MAC:-"02:16:3e:07:69:`printf '%02X' $GUEST_NETWORK`"}
-GUEST_RAM=${GUEST_RAM:-1524288}
-GUEST_CORES=${GUEST_CORES:-1}
+    GUEST_IP=${GUEST_IP:-192.168.$GUEST_NETWORK.50}
+    GUEST_CIDR=${GUEST_CIDR:-$GUEST_IP/24}
+    GUEST_NETMASK=${GUEST_NETMASK:-255.255.255.0}
+    GUEST_GATEWAY=${GUEST_GATEWAY:-192.168.$GUEST_NETWORK.1}
+    GUEST_MAC=${GUEST_MAC:-"02:16:3e:07:69:`printf '%02X' $GUEST_NETWORK`"}
+    GUEST_RAM=${GUEST_RAM:-1524288}
+    GUEST_CORES=${GUEST_CORES:-1}
+fi
 
 # Use the GUEST_IP unless an explicit IP is set by ``HOST_IP``
 HOST_IP=${HOST_IP:-$GUEST_IP}
@@ -77,34 +84,75 @@
 GLANCE_HOST=$1
 GLANCE_PORT=$2
 
-CONFIG_FILE_TMP=$(mktemp $CONFIG_FILE.XXXXXX)
+# Create storm.conf
+
+CONFIG_CONF_TMP=$(mktemp $CONFIG_CONF.XXXXXX)
+    cat >$CONFIG_CONF_TMP <<EOF
+[nova]
+auth_url=http://$HOST_IP:5000/v2.0/tokens
+user=admin
+api_key=$ADMIN_PASSWORD
+tenant_name=admin
+ssh_timeout=300
+build_interval=10
+build_timeout=600
+
+[environment]
+image_ref=3
+image_ref_alt=4
+flavor_ref=1
+flavor_ref_alt=2
+create_image_enabled=true
+resize_available=true
+authentication=keystone_v2
+EOF
+mv $CONFIG_CONF_TMP $CONFIG_CONF
+CONFIG_CONF_TMP=""
+
+# Create config.ini
+
+CONFIG_INI_TMP=$(mktemp $CONFIG_INI.XXXXXX)
 if [ "$UPLOAD_LEGACY_TTY" ]; then
-    cat >$CONFIG_FILE_TMP <<EOF
+    cat >$CONFIG_INI_TMP <<EOF
 [environment]
 aki_location = $DEST/devstack/files/images/aki-tty/image
 ari_location = $DEST/devstack/files/images/ari-tty/image
 ami_location = $DEST/devstack/files/images/ami-tty/image
-image_ref = 1
+image_ref = 3
+image_ref_alt = 3
 flavor_ref = 1
+flavor_ref_alt = 2
+
+[glance]
+host = $GLANCE_HOST
+apiver = v1
+port = $GLANCE_PORT
+image_id = 3
+image_id_alt = 3
+tenant_id = 1
 EOF
 else
-    cat >$CONFIG_FILE_TMP <<EOF
+    cat >$CONFIG_INI_TMP <<EOF
 [environment]
 aki_location = $DEST/openstack-integration-tests/include/sample_vm/$DIST_NAME-server-cloudimg-amd64-vmlinuz-virtual
 #ari_location = $DEST/openstack-integration-tests/include/sample_vm/$DIST_NAME-server-cloudimg-amd64-loader
 ami_location = $DEST/openstack-integration-tests/include/sample_vm/$DIST_NAME-server-cloudimg-amd64.img
-image_ref = 1
+image_ref = 2
+image_ref_alt = 2
 flavor_ref = 1
-EOF
-fi
+flavor_ref_alt = 2
 
-cat >>$CONFIG_FILE_TMP <<EOF
 [glance]
 host = $GLANCE_HOST
 apiver = v1
 port = $GLANCE_PORT
 image_id = 1
+image_id_alt = 1
 tenant_id = 1
+EOF
+fi
+
+cat >>$CONFIG_INI_TMP <<EOF
 
 [keystone]
 service_host = $HOST_IP
@@ -125,6 +173,7 @@
 build_timeout = 300
 flavor_ref = 1
 flavor_ref_alt = 2
+multi_node = no
 
 [rabbitmq]
 host = $RABBIT_HOST
@@ -141,4 +190,7 @@
 password = password
 
 EOF
-mv $CONFIG_FILE_TMP $CONFIG_FILE
+mv $CONFIG_INI_TMP $CONFIG_INI
+CONFIG_INI_TMP=""
+
+trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT
diff --git a/tools/build_libvirt.sh b/tools/build_libvirt.sh
deleted file mode 100755
index 585f5af..0000000
--- a/tools/build_libvirt.sh
+++ /dev/null
@@ -1,489 +0,0 @@
-#!/usr/bin/env bash
-
-# exit on error to stop unexpected errors
-set -o errexit
-
-# Make sure that we have the proper version of ubuntu
-UBUNTU_VERSION=`cat /etc/lsb-release | grep CODENAME | sed 's/.*=//g'`
-if [ ! "oneiric" = "$UBUNTU_VERSION" ]; then
-    if [ ! "natty" = "$UBUNTU_VERSION" ]; then
-        echo "This script only works with oneiric and natty"
-        exit 1
-    fi
-fi
-
-# Clean up any resources that may be in use
-cleanup() {
-    set +o errexit
-    unmount_images
-
-    if [ -n "$COPY_DIR" ]; then
-        umount $COPY_DIR/dev
-        umount $COPY_DIR
-    fi
-
-    if [ -n "$ROOTFS" ]; then
-        umount $ROOTFS/dev
-        umount $ROOTFS
-    fi
-
-    # Release NBD devices
-    if [ -n "$NBD" ]; then
-        qemu-nbd -d $NBD
-    fi
-
-    # Kill ourselves to signal any calling process
-    trap 2; kill -2 $$
-}
-
-trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
-
-# Echo commands
-set -o xtrace
-
-# Keep track of the current directory
-TOOLS_DIR=$(cd $(dirname "$0") && pwd)
-TOP_DIR=`cd $TOOLS_DIR/..; pwd`
-
-# Where to store files and instances
-WORK_DIR=${WORK_DIR:-/opt/kvmstack}
-
-# Where to store images
-IMAGES_DIR=$WORK_DIR/images
-
-# Create images dir
-mkdir -p $IMAGES_DIR
-
-# Abort if localrc is not set
-if [ ! -e $TOP_DIR/localrc ]; then
-    echo "You must have a localrc with ALL necessary passwords defined before proceeding."
-    echo "See stack.sh for required passwords."
-    exit 1
-fi
-
-cd $TOP_DIR
-
-# Source params
-source ./stackrc
-
-# Configure the root password of the vm to be the same as ``ADMIN_PASSWORD``
-ROOT_PASSWORD=${ADMIN_PASSWORD:-password}
-
-# Base image (natty by default)
-DIST_NAME=${DIST_NAME:-natty}
-IMAGE_FNAME=$DIST_NAME.raw
-
-# Name of our instance, used by libvirt
-GUEST_NAME=${GUEST_NAME:-devstack}
-
-# Original version of built image
-BASE_IMAGE=$IMAGES_DIR/$DIST_NAME.raw
-
-# Copy of base image, which we pre-install with tasty treats
-VM_IMAGE=$IMAGES_DIR/$DIST_NAME.$GUEST_NAME.raw
-
-# Mop up after previous runs
-virsh destroy $GUEST_NAME || true
-
-# Where this vm is stored
-VM_DIR=$WORK_DIR/instances/$GUEST_NAME
-
-# Create vm dir
-mkdir -p $VM_DIR
-
-# Mount point into copied base image
-COPY_DIR=$VM_DIR/copy
-mkdir -p $COPY_DIR
-
-# Get the base image if it does not yet exist
-if [ ! -e $BASE_IMAGE ]; then
-    $TOOLS_DIR/get_uec_image.sh -f raw -r 5000 $DIST_NAME $BASE_IMAGE
-fi
-
-# Create a copy of the base image
-if [ ! -e $VM_IMAGE ]; then
-    cp -p $BASE_IMAGE $VM_IMAGE
-fi
-
-# Unmount the copied base image
-function unmount_images() {
-    # unmount the filesystem
-    while df | grep -q $COPY_DIR; do
-        umount $COPY_DIR || echo 'ok'
-        sleep 1
-    done
-}
-
-# Unmount from failed runs
-unmount_images
-
-# Ctrl-c catcher
-function kill_unmount() {
-    unmount_images
-    exit 1
-}
-
-# Install deps if needed
-dpkg -l kvm libvirt-bin kpartx || apt-get install -y --force-yes kvm libvirt-bin kpartx
-
-# Where Openstack code will live in image
-DEST=${DEST:-/opt/stack}
-
-# Mount the file system
-# For some reason, UEC-based images want 255 heads * 63 sectors * 512 byte sectors = 8225280
-mount -t ext4 -o loop,offset=8225280 $VM_IMAGE $COPY_DIR
-mount -o bind /dev $COPY_DIR/dev
-
-# git clone only if directory doesn't exist already.  Since ``DEST`` might not
-# be owned by the installation user, we create the directory and change the
-# ownership to the proper user.
-function git_clone {
-    if [ ! -d $2 ]; then
-        sudo mkdir $2
-        sudo chown `whoami` $2
-        git clone $1 $2
-        cd $2
-        # This checkout syntax works for both branches and tags
-        git checkout $3
-    fi
-}
-
-# Make sure that base requirements are installed
-cp /etc/resolv.conf $COPY_DIR/etc/resolv.conf
-chroot $COPY_DIR apt-get update
-chroot $COPY_DIR apt-get install -y --download-only `cat files/apts/* | grep NOPRIME | cut -d\# -f1`
-chroot $COPY_DIR apt-get install -y --force-yes `cat files/apts/* | grep -v NOPRIME | cut -d\# -f1`
-chroot $COPY_DIR pip install `cat files/pips/*`
-
-umount $COPY_DIR/dev
-
-# Clean out code repos if directed to do so
-if [ "$CLEAN" = "1" ]; then
-    rm -rf $COPY_DIR/$DEST
-fi
-
-# Cache openstack code
-mkdir -p $COPY_DIR/$DEST
-git_clone $NOVA_REPO $COPY_DIR/$DEST/nova $NOVA_BRANCH
-git_clone $GLANCE_REPO $COPY_DIR/$DEST/glance $GLANCE_BRANCH
-git_clone $KEYSTONE_REPO $COPY_DIR/$DESTkeystone $KEYSTONE_BRANCH
-git_clone $NOVNC_REPO $COPY_DIR/$DEST/noVNC $NOVNC_BRANCH
-git_clone $HORIZON_REPO $COPY_DIR/$DEST/horizon $HORIZON_BRANCH $HORIZON_TAG
-git_clone $NOVACLIENT_REPO $COPY_DIR/$DEST/python-novaclient $NOVACLIENT_BRANCH
-git_clone $OPENSTACKX_REPO $COPY_DIR/$DEST/openstackx $OPENSTACKX_BRANCH
-git_clone $KEYSTONE_REPO $COPY_DIR/$DEST/keystone $KEYSTONE_BRANCH
-git_clone $NOVNC_REPO $COPY_DIR/$DEST/noVNC $NOVNC_BRANCH
-git_clone $CITEST_REPO $COPY_DIR/$DEST/openstack-integration-tests $CITEST_BRANCH
-
-if [ -z "$UPLOAD_LEGACY_TTY" =; then
-    # Pre-load an image for testing
-    UEC_NAME=$DIST_NAME-server-cloudimg-amd64
-    CIVMDIR=${COPY_DIR}${DEST}/openstack-integration-tests/include/sample_vm
-    if [ ! -e $CIVMDIR/$UEC_NAME.tar.gz ]; then
-        mkdir -p $CIVMDIR
-        (cd $CIVMDIR && wget -N http://uec-images.ubuntu.com/$DIST_NAME/current/$UEC_NAME.tar.gz;
-            tar xzf $UEC_NAME.tar.gz;)
-    fi
-fi
-
-# Back to devstack
-cd $TOP_DIR
-
-# Unmount the filesystems
-unmount_images
-
-# Network configuration variables
-GUEST_NETWORK=${GUEST_NETWORK:-1}
-GUEST_RECREATE_NET=${GUEST_RECREATE_NET:-yes}
-
-GUEST_IP=${GUEST_IP:-192.168.$GUEST_NETWORK.50}
-GUEST_CIDR=${GUEST_CIDR:-$GUEST_IP/24}
-GUEST_NETMASK=${GUEST_NETMASK:-255.255.255.0}
-GUEST_GATEWAY=${GUEST_GATEWAY:-192.168.$GUEST_NETWORK.1}
-GUEST_MAC=${GUEST_MAC:-"02:16:3e:07:69:`printf '%02X' $GUEST_NETWORK`"}
-GUEST_RAM=${GUEST_RAM:-1524288}
-GUEST_CORES=${GUEST_CORES:-1}
-
-# libvirt.xml configuration
-NET_XML=$VM_DIR/net.xml
-cat > $NET_XML <<EOF
-<network>
-  <name>devstack-$GUEST_NETWORK</name>
-  <bridge name="stackbr%d" />
-  <forward/>
-  <ip address="$GUEST_GATEWAY" netmask="$GUEST_NETMASK" />
-</network>
-EOF
-
-if [[ "$GUEST_RECREATE_NET" == "yes" ]]; then
-    virsh net-destroy devstack-$GUEST_NETWORK || true
-    virsh net-create $VM_DIR/net.xml
-fi
-
-# libvirt.xml configuration
-LIBVIRT_XML=$VM_DIR/libvirt.xml
-cat > $LIBVIRT_XML <<EOF
-<domain type='kvm'>
-    <name>$GUEST_NAME</name>
-    <memory>$GUEST_RAM</memory>
-    <os>
-        <type>hvm</type>
-        <bootmenu enable='yes'/>
-    </os>
-    <features>
-        <acpi/>
-    </features>
-    <vcpu>$GUEST_CORES</vcpu>
-    <devices>
-        <disk type='file'>
-            <driver type='qcow2'/>
-            <source file='$VM_DIR/disk'/>
-            <target dev='vda' bus='virtio'/>
-        </disk>
-
-        <interface type='network'>
-           <source network='devstack-$GUEST_NETWORK'/>
-        </interface>
-        
-        <!-- The order is significant here.  File must be defined first -->
-        <serial type="file">
-            <source path='$VM_DIR/console.log'/>
-            <target port='1'/>
-        </serial>
-
-        <console type='pty' tty='/dev/pts/2'>
-            <source path='/dev/pts/2'/>
-            <target port='0'/>
-        </console>
-
-        <serial type='pty'>
-            <source path='/dev/pts/2'/>
-            <target port='0'/>
-        </serial>
-
-        <graphics type='vnc' port='-1' autoport='yes' keymap='en-us' listen='0.0.0.0'/>
-    </devices>
-</domain>
-EOF
-
-# Mount point for instance fs
-ROOTFS=$VM_DIR/root
-mkdir -p $ROOTFS
-
-# Clean up from previous runs
-umount $ROOTFS || echo 'ok'
-
-# Clean up old runs
-cd $VM_DIR
-rm -f $VM_DIR/disk
-
-# Create our instance fs
-qemu-img create -f qcow2 -b $VM_IMAGE disk
-
-# Finds the next available NBD device
-# Exits script if error connecting or none free
-# map_nbd image
-# returns full nbd device path
-function map_nbd {
-    for i in `seq 0 15`; do
-        if [ ! -e /sys/block/nbd$i/pid ]; then
-            NBD=/dev/nbd$i
-            # Connect to nbd and wait till it is ready
-            qemu-nbd -c $NBD $1
-            if ! timeout 60 sh -c "while ! [ -e ${NBD}p1 ]; do sleep 1; done"; then
-                echo "Couldn't connect $NBD"
-                exit 1
-            fi
-            break
-        fi
-    done
-    if [ -z "$NBD" ]; then
-        echo "No free NBD slots"
-        exit 1
-    fi
-    echo $NBD
-}
-
-# Make sure we have nbd-ness
-modprobe nbd max_part=63
-
-# Set up nbd
-NBD=`map_nbd disk`
-NBD_DEV=`basename $NBD`
-
-# Mount the instance
-mount ${NBD}p1 $ROOTFS
-
-# Configure instance network
-INTERFACES=$ROOTFS/etc/network/interfaces
-cat > $INTERFACES <<EOF
-auto lo
-iface lo inet loopback
-
-auto eth0
-iface eth0 inet static
-        address $GUEST_IP
-        netmask $GUEST_NETMASK
-        gateway $GUEST_GATEWAY
-EOF
-
-# User configuration for the instance
-chroot $ROOTFS groupadd libvirtd || true
-chroot $ROOTFS useradd stack -s /bin/bash -d $DEST -G libvirtd
-cp -pr $TOP_DIR $ROOTFS/$DEST/devstack
-echo "root:$ROOT_PASSWORD" | chroot $ROOTFS chpasswd
-echo "stack:pass" | chroot $ROOTFS chpasswd
-echo "stack ALL=(ALL) NOPASSWD: ALL" >> $ROOTFS/etc/sudoers
-
-# Gracefully cp only if source file/dir exists
-function cp_it {
-    if [ -e $1 ] || [ -d $1 ]; then
-        cp -pRL $1 $2
-    fi
-}
-
-# Copy over your ssh keys and env if desired
-COPYENV=${COPYENV:-1}
-if [ "$COPYENV" = "1" ]; then
-    cp_it ~/.ssh $ROOTFS/$DEST/.ssh
-    cp_it ~/.ssh/id_rsa.pub $ROOTFS/$DEST/.ssh/authorized_keys
-    cp_it ~/.gitconfig $ROOTFS/$DEST/.gitconfig
-    cp_it ~/.vimrc $ROOTFS/$DEST/.vimrc
-    cp_it ~/.bashrc $ROOTFS/$DEST/.bashrc
-fi
-
-# pre-cache uec images
-for image_url in ${IMAGE_URLS//,/ }; do
-    IMAGE_FNAME=`basename "$image_url"`
-    if [ ! -f $IMAGES_DIR/$IMAGE_FNAME ]; then
-        wget -c $image_url -O $IMAGES_DIR/$IMAGE_FNAME
-    fi
-    cp $IMAGES_DIR/$IMAGE_FNAME $ROOTFS/$DEST/devstack/files
-done
-
-# Configure the runner
-RUN_SH=$ROOTFS/$DEST/run.sh
-cat > $RUN_SH <<EOF
-#!/usr/bin/env bash
-
-# Kill any existing screens
-killall screen
-
-# Install and run stack.sh
-sudo apt-get update
-sudo apt-get -y --force-yes install git-core vim-nox sudo
-if [ ! -d "$DEST/devstack" ]; then
-    git clone git://github.com/cloudbuilders/devstack.git $DEST/devstack
-fi
-cd $DEST/devstack && $STACKSH_PARAMS FORCE=yes ./stack.sh > /$DEST/run.sh.log
-echo >> /$DEST/run.sh.log
-echo >> /$DEST/run.sh.log
-echo "All done! Time to start clicking." >> /$DEST/run.sh.log
-cat $DEST/run.sh.log
-EOF
-chmod 755 $RUN_SH
-
-# Make runner launch on boot
-RC_LOCAL=$ROOTFS/etc/init.d/zlocal
-cat > $RC_LOCAL <<EOF
-#!/bin/sh -e
-# cloud-init overwrites the hostname with ubuntuhost
-echo $GUEST_NAME > /etc/hostname
-hostname $GUEST_NAME
-su -c "$DEST/run.sh" stack
-EOF
-chmod +x $RC_LOCAL
-chroot $ROOTFS sudo update-rc.d zlocal defaults 99
-
-# Make our ip address hostnames look nice at the command prompt
-echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $ROOTFS/$DEST/.bashrc
-echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $ROOTFS/etc/profile
-
-# Give stack ownership over $DEST so it may do the work needed
-chroot $ROOTFS chown -R stack $DEST
-
-# Set the hostname
-echo $GUEST_NAME > $ROOTFS/etc/hostname
-
-# We need the hostname to resolve for rabbit to launch
-if ! grep -q $GUEST_NAME $ROOTFS/etc/hosts; then
-    echo "$GUEST_IP $GUEST_NAME" >> $ROOTFS/etc/hosts
-fi
-
-# GRUB 2 wants to see /dev
-mount -o bind /dev $ROOTFS/dev
-
-# Change boot params so that we get a console log
-G_DEV_UUID=`blkid -t LABEL=cloudimg-rootfs -s UUID -o value | head -1`
-sed -e "s/GRUB_TIMEOUT=.*$/GRUB_TIMEOUT=3/" -i $ROOTFS/etc/default/grub
-sed -e "s,GRUB_CMDLINE_LINUX_DEFAULT=.*$,GRUB_CMDLINE_LINUX_DEFAULT=\"console=ttyS0 console=tty0 ds=nocloud ubuntu-pass=pass\",g" -i $ROOTFS/etc/default/grub
-sed -e 's/[#]*GRUB_TERMINAL=.*$/GRUB_TERMINAL="serial console"/' -i $ROOTFS/etc/default/grub
-echo 'GRUB_SERIAL_COMMAND="serial --unit=0"' >>$ROOTFS/etc/default/grub
-echo 'GRUB_DISABLE_OS_PROBER=true' >>$ROOTFS/etc/default/grub
-echo "GRUB_DEVICE_UUID=$G_DEV_UUID" >>$ROOTFS/etc/default/grub
-
-chroot $ROOTFS update-grub
-
-# Pre-generate ssh host keys and allow password login
-chroot $ROOTFS dpkg-reconfigure openssh-server
-sed -e 's/^PasswordAuthentication.*$/PasswordAuthentication yes/' -i $ROOTFS/etc/ssh/sshd_config
-
-# Unmount
-umount $ROOTFS/dev
-umount $ROOTFS || echo 'ok'
-ROOTFS=""
-qemu-nbd -d $NBD
-NBD=""
-
-trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT
-
-# Create the instance
-cd $VM_DIR && virsh create libvirt.xml
-
-# Tail the console log till we are done
-WAIT_TILL_LAUNCH=${WAIT_TILL_LAUNCH:-1}
-if [ "$WAIT_TILL_LAUNCH" = "1" ]; then
-    # Done creating the container, let's tail the log
-    echo
-    echo "============================================================="
-    echo "                          -- YAY! --"
-    echo "============================================================="
-    echo
-    echo "We're done launching the vm, about to start tailing the"
-    echo "stack.sh log. It will take a second or two to start."
-    echo
-    echo "Just CTRL-C at any time to stop tailing."
-
-    while [ ! -e "$VM_DIR/console.log" ]; do
-      sleep 1
-    done
-
-    tail -F $VM_DIR/console.log &
-
-    TAIL_PID=$!
-
-    function kill_tail() {
-        kill $TAIL_PID
-        exit 1
-    }
-
-    # Let Ctrl-c kill tail and exit
-    trap kill_tail SIGINT
-
-    set +o xtrace
-
-    echo "Waiting stack.sh to finish..."
-    while ! cat $VM_DIR/console.log | grep -q 'All done' ; do
-        sleep 1
-    done
-
-    set -o xtrace
-
-    kill $TAIL_PID
-
-    if ! grep -q "^stack.sh completed in" $VM_DIR/console.log; then
-        exit 1
-    fi
-    echo ""
-    echo "Finished - Zip-a-dee Doo-dah!"
-fi
diff --git a/tools/build_lxc.sh b/tools/build_lxc.sh
deleted file mode 100755
index c5957b2..0000000
--- a/tools/build_lxc.sh
+++ /dev/null
@@ -1,324 +0,0 @@
-#!/usr/bin/env bash
-
-# Debug stuff
-set -o errexit
-set -o xtrace
-
-# Sanity check
-if [ "$EUID" -ne "0" ]; then
-  echo "This script must be run with root privileges."
-  exit 1
-fi
-
-# Keep track of ubuntu version
-UBUNTU_VERSION=`cat /etc/lsb-release | grep CODENAME | sed 's/.*=//g'`
-
-# Move to top devstack dir
-cd ..
-
-# Abort if localrc is not set
-if [ ! -e ./localrc ]; then
-    echo "You must have a localrc with ALL necessary passwords defined before proceeding."
-    echo "See stack.sh for required passwords."
-    exit 1
-fi
-
-# Source params
-source ./stackrc
-
-# Store cwd
-CWD=`pwd`
-
-# Configurable params
-BRIDGE=${BRIDGE:-br0}
-GUEST_NAME=${GUEST_NAME:-STACK}
-GUEST_IP=${GUEST_IP:-192.168.1.50}
-GUEST_CIDR=${GUEST_CIDR:-$GUEST_IP/24}
-GUEST_NETMASK=${GUEST_NETMASK:-255.255.255.0}
-GUEST_GATEWAY=${GUEST_GATEWAY:-192.168.1.1}
-NAMESERVER=${NAMESERVER:-`cat /etc/resolv.conf | grep nameserver | head -1 | cut -d " " -f2`}
-COPYENV=${COPYENV:-1}
-DEST=${DEST:-/opt/stack}
-WAIT_TILL_LAUNCH=${WAIT_TILL_LAUNCH:-1}
-
-# Param string to pass to stack.sh.  Like "EC2_DMZ_HOST=192.168.1.1 MYSQL_USER=nova"
-# By default, n-vol is disabled for lxc, as iscsitarget doesn't work properly in lxc
-STACKSH_PARAMS=${STACKSH_PARAMS:-"ENABLED_SERVICES=g-api,g-reg,key,n-api,n-cpu,n-net,n-sch,n-vnc,horizon,mysql,rabbit"}
-
-# Option to use the version of devstack on which we are currently working
-USE_CURRENT_DEVSTACK=${USE_CURRENT_DEVSTACK:-1}
-
-
-# Install deps
-apt-get install -y lxc debootstrap
-
-# Install cgroup-bin from source, since the packaging is buggy and possibly incompatible with our setup
-if ! which cgdelete | grep -q cgdelete; then
-    apt-get install -y g++ bison flex libpam0g-dev make
-    wget http://sourceforge.net/projects/libcg/files/libcgroup/v0.37.1/libcgroup-0.37.1.tar.bz2/download -O /tmp/libcgroup-0.37.1.tar.bz2
-    cd /tmp && bunzip2 libcgroup-0.37.1.tar.bz2  && tar xfv libcgroup-0.37.1.tar
-    cd libcgroup-0.37.1
-    ./configure
-    make install
-    ldconfig
-fi
-
-# Create lxc configuration
-LXC_CONF=/tmp/$GUEST_NAME.conf
-cat > $LXC_CONF <<EOF
-lxc.network.type = veth
-lxc.network.link = $BRIDGE
-lxc.network.flags = up
-lxc.network.ipv4 = $GUEST_CIDR
-# allow tap/tun devices
-lxc.cgroup.devices.allow = c 10:200 rwm
-EOF
-
-# Shutdown any existing container
-lxc-stop -n $GUEST_NAME
-
-# This kills zombie containers
-if [ -d /cgroup/$GUEST_NAME ]; then
-    cgdelete -r cpu,net_cls:$GUEST_NAME
-fi
-
-# git clone only if directory doesn't exist already.  Since ``DEST`` might not
-# be owned by the installation user, we create the directory and change the
-# ownership to the proper user.
-function git_clone {
-    if [ ! -d $2 ]; then
-        sudo mkdir $2
-        sudo chown `whoami` $2
-        git clone $1 $2
-        cd $2
-        # This checkout syntax works for both branches and tags
-        git checkout $3
-    fi
-}
-
-# Helper to create the container
-function create_lxc {
-    if [ "natty" = "$UBUNTU_VERSION" ]; then
-        lxc-create -n $GUEST_NAME -t natty -f $LXC_CONF
-    else
-        lxc-create -n $GUEST_NAME -t ubuntu -f $LXC_CONF
-    fi
-}
-
-# Location of the base image directory
-if [ "natty" = "$UBUNTU_VERSION" ]; then
-    CACHEDIR=/var/cache/lxc/natty/rootfs-amd64
-else
-    CACHEDIR=/var/cache/lxc/oneiric/rootfs-amd64
-fi
-
-# Provide option to do totally clean install
-if [ "$CLEAR_LXC_CACHE" = "1" ]; then
-    rm -rf $CACHEDIR
-fi
-
-# Warm the base image on first install
-if [ ! -f $CACHEDIR/bootstrapped ]; then
-    # by deleting the container, we force lxc-create to re-bootstrap (lxc is
-    # lazy and doesn't do anything if a container already exists)
-    lxc-destroy -n $GUEST_NAME
-    # trigger the initial debootstrap
-    create_lxc
-    touch $CACHEDIR/bootstrapped
-fi
-
-# Make sure that base requirements are installed
-chroot $CACHEDIR apt-get update
-chroot $CACHEDIR apt-get install -y --download-only `cat files/apts/* | grep NOPRIME | cut -d\# -f1`
-chroot $CACHEDIR apt-get install -y --force-yes `cat files/apts/* | grep -v NOPRIME | cut -d\# -f1` || true
-chroot $CACHEDIR pip install `cat files/pips/*`
-
-# Clean out code repos if directed to do so
-if [ "$CLEAN" = "1" ]; then
-    rm -rf $CACHEDIR/$DEST
-fi
-
-# Cache openstack code
-mkdir -p $CACHEDIR/$DEST
-git_clone $NOVA_REPO $CACHEDIR/$DEST/nova $NOVA_BRANCH
-git_clone $GLANCE_REPO $CACHEDIR/$DEST/glance $GLANCE_BRANCH
-git_clone $KEYSTONE_REPO $CACHEDIR/$DESTkeystone $KEYSTONE_BRANCH
-git_clone $NOVNC_REPO $CACHEDIR/$DEST/noVNC $NOVNC_BRANCH
-git_clone $HORIZON_REPO $CACHEDIR/$DEST/horizon $HORIZON_BRANCH $HORIZON_TAG
-git_clone $NOVACLIENT_REPO $CACHEDIR/$DEST/python-novaclient $NOVACLIENT_BRANCH
-git_clone $OPENSTACKX_REPO $CACHEDIR/$DEST/openstackx $OPENSTACKX_BRANCH
-git_clone $KEYSTONE_REPO $CACHEDIR/$DEST/keystone $KEYSTONE_BRANCH
-git_clone $NOVNC_REPO $CACHEDIR/$DEST/novnc $NOVNC_BRANCH
-
-# Use this version of devstack?
-if [ "$USE_CURRENT_DEVSTACK" = "1" ]; then
-    rm -rf $CACHEDIR/$DEST/devstack
-    cp -pr $CWD $CACHEDIR/$DEST/devstack
-fi
-
-# pre-cache uec images
-for image_url in ${IMAGE_URLS//,/ }; do
-    IMAGE_FNAME=`basename "$image_url"`
-    if [ ! -f $CACHEDIR/$IMAGE_FNAME ]; then
-        wget -c $image_url -O $CACHEDIR/$IMAGE_FNAME
-    fi
-    cp $CACHEDIR/$IMAGE_FNAME $CACHEDIR/$DEST/devstack/files
-done
-
-# Destroy the old container
-lxc-destroy -n $GUEST_NAME
-
-# If this call is to TERMINATE the container then exit
-if [ "$TERMINATE" = "1" ]; then
-    exit
-fi
-
-# Create the container
-create_lxc
-
-# Specify where our container rootfs lives
-ROOTFS=/var/lib/lxc/$GUEST_NAME/rootfs/
-
-# Create a stack user that is a member of the libvirtd group so that stack
-# is able to interact with libvirt.
-chroot $ROOTFS groupadd libvirtd
-chroot $ROOTFS useradd stack -s /bin/bash -d $DEST -G libvirtd
-
-# a simple password - pass
-echo stack:pass | chroot $ROOTFS chpasswd
-
-# and has sudo ability (in the future this should be limited to only what
-# stack requires)
-echo "stack ALL=(ALL) NOPASSWD: ALL" >> $ROOTFS/etc/sudoers
-
-# Copy kernel modules
-mkdir -p $ROOTFS/lib/modules/`uname -r`/kernel
-cp -p /lib/modules/`uname -r`/modules.dep $ROOTFS/lib/modules/`uname -r`/
-cp -pR /lib/modules/`uname -r`/kernel/net $ROOTFS/lib/modules/`uname -r`/kernel/
-
-# Gracefully cp only if source file/dir exists
-function cp_it {
-    if [ -e $1 ] || [ -d $1 ]; then
-        cp -pRL $1 $2
-    fi
-}
-
-# Copy over your ssh keys and env if desired
-if [ "$COPYENV" = "1" ]; then
-    cp_it ~/.ssh $ROOTFS/$DEST/.ssh
-    cp_it ~/.ssh/id_rsa.pub $ROOTFS/$DEST/.ssh/authorized_keys
-    cp_it ~/.gitconfig $ROOTFS/$DEST/.gitconfig
-    cp_it ~/.vimrc $ROOTFS/$DEST/.vimrc
-    cp_it ~/.bashrc $ROOTFS/$DEST/.bashrc
-fi
-
-# Make our ip address hostnames look nice at the command prompt
-echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $ROOTFS/$DEST/.bashrc
-echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $ROOTFS/etc/profile
-
-# Give stack ownership over $DEST so it may do the work needed
-chroot $ROOTFS chown -R stack $DEST
-
-# Configure instance network
-INTERFACES=$ROOTFS/etc/network/interfaces
-cat > $INTERFACES <<EOF
-auto lo
-iface lo inet loopback
-
-auto eth0
-iface eth0 inet static
-        address $GUEST_IP
-        netmask $GUEST_NETMASK
-        gateway $GUEST_GATEWAY
-EOF
-
-# Configure the runner
-RUN_SH=$ROOTFS/$DEST/run.sh
-cat > $RUN_SH <<EOF
-#!/usr/bin/env bash
-# Make sure dns is set up
-echo "nameserver $NAMESERVER" | sudo resolvconf -a eth0
-# Make there is a default route - needed for natty
-if ! route | grep -q default; then
-    sudo ip route add default via $GUEST_GATEWAY
-fi
-sleep 1
-
-# Kill any existing screens
-killall screen
-
-# Install and run stack.sh
-sudo apt-get update
-sudo apt-get -y --force-yes install git-core vim-nox sudo
-if [ ! -d "$DEST/devstack" ]; then
-    git clone git://github.com/cloudbuilders/devstack.git $DEST/devstack
-fi
-cd $DEST/devstack && $STACKSH_PARAMS FORCE=yes ./stack.sh > /$DEST/run.sh.log
-echo >> /$DEST/run.sh.log
-echo >> /$DEST/run.sh.log
-echo "All done! Time to start clicking." >> /$DEST/run.sh.log
-EOF
-
-# Make the run.sh executable
-chmod 755 $RUN_SH
-
-# Make runner launch on boot
-RC_LOCAL=$ROOTFS/etc/init.d/local
-cat > $RC_LOCAL <<EOF
-#!/bin/sh -e
-su -c "$DEST/run.sh" stack
-EOF
-chmod +x $RC_LOCAL
-chroot $ROOTFS sudo update-rc.d local defaults 80
-
-# Configure cgroup directory
-if ! mount | grep -q cgroup; then
-    mkdir -p /cgroup
-    mount none -t cgroup /cgroup
-fi
-
-# Start our container
-lxc-start -d -n $GUEST_NAME
-
-if [ "$WAIT_TILL_LAUNCH" = "1" ]; then
-    # Done creating the container, let's tail the log
-    echo
-    echo "============================================================="
-    echo "                          -- YAY! --"
-    echo "============================================================="
-    echo
-    echo "We're done creating the container, about to start tailing the"
-    echo "stack.sh log. It will take a second or two to start."
-    echo
-    echo "Just CTRL-C at any time to stop tailing."
-
-    while [ ! -e "$ROOTFS/$DEST/run.sh.log" ]; do
-      sleep 1
-    done
-
-    tail -F $ROOTFS/$DEST/run.sh.log &
-
-    TAIL_PID=$!
-
-    function kill_tail() {
-        kill $TAIL_PID
-        exit 1
-    }
-
-    # Let Ctrl-c kill tail and exit
-    trap kill_tail SIGINT
-
-    echo "Waiting stack.sh to finish..."
-    while ! cat $ROOTFS/$DEST/run.sh.log | grep -q 'All done' ; do
-        sleep 5
-    done
-
-    kill $TAIL_PID
-
-    if grep -q "stack.sh failed" $ROOTFS/$DEST/run.sh.log; then
-        exit 1
-    fi
-
-    echo ""
-    echo "Finished - Zip-a-dee Doo-dah!"
-fi
diff --git a/tools/build_lxc_multi.sh b/tools/build_lxc_multi.sh
deleted file mode 100755
index 9c12958..0000000
--- a/tools/build_lxc_multi.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env bash
-# Head node host, which runs glance, api, keystone
-HEAD_HOST=${HEAD_HOST:-192.168.1.52}
-COMPUTE_HOSTS=${COMPUTE_HOSTS:-192.168.1.53,192.168.1.54}
-
-# Networking params
-NAMESERVER=${NAMESERVER:-192.168.1.1}
-GATEWAY=${GATEWAY:-192.168.1.1}
-NETMASK=${NETMASK:-255.255.255.0}
-FLOATING_RANGE=${FLOATING_RANGE:-192.168.1.196/30}
-
-# Setting this to 1 shuts down and destroys our containers without relaunching.
-TERMINATE=${TERMINATE:-0}
-
-# Variables common amongst all hosts in the cluster
-COMMON_VARS="MYSQL_HOST=$HEAD_HOST RABBIT_HOST=$HEAD_HOST GLANCE_HOSTPORT=$HEAD_HOST:9292 NET_MAN=FlatDHCPManager FLAT_INTERFACE=eth0 FLOATING_RANGE=$FLOATING_RANGE MULTI_HOST=1"
-
-# Helper to launch containers
-function run_lxc {
-    # For some reason container names with periods can cause issues :/
-    GUEST_NAME=$1 GUEST_IP=$2 GUEST_NETMASK=$NETMASK GUEST_GATEWAY=$GATEWAY NAMESERVER=$NAMESERVER TERMINATE=$TERMINATE STACKSH_PARAMS="$COMMON_VARS $3" ./build_lxc.sh
-}
-
-# Launch the head node - headnode uses a non-ip domain name,
-# because rabbit won't launch with an ip addr hostname :(
-run_lxc STACKMASTER $HEAD_HOST "ENABLED_SERVICES=g-api,g-reg,key,n-api,n-sch,n-vnc,horizon,mysql,rabbit"
-
-# Wait till the head node is up
-if [ ! "$TERMINATE" = "1" ]; then
-    while ! wget -q -O- http://$HEAD_HOST | grep -q username; do
-        echo "Waiting for head node ($HEAD_HOST) to start..."
-        sleep 5
-    done
-fi
-
-# Launch the compute hosts
-for compute_host in ${COMPUTE_HOSTS//,/ }; do
-    run_lxc $compute_host $compute_host "ENABLED_SERVICES=n-cpu,n-net,n-api"
-done
diff --git a/tools/build_nfs.sh b/tools/build_nfs.sh
deleted file mode 100755
index 39a2cf0..0000000
--- a/tools/build_nfs.sh
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/bin/bash
-
-PROGDIR=`dirname $0`
-CHROOTCACHE=${CHROOTCACHE:-/var/cache/devstack}
-
-# Source params
-source ./stackrc
-
-# Store cwd
-CWD=`pwd`
-
-NAME=$1
-NFSDIR="/nfs/$NAME"
-DEST=${DEST:-/opt/stack}
-
-# Option to use the version of devstack on which we are currently working
-USE_CURRENT_DEVSTACK=${USE_CURRENT_DEVSTACK:-1}
-
-# remove old nfs filesystem if one exists
-rm -rf $DEST
-
-# clean install of natty
-if [ ! -d $CHROOTCACHE/natty-base ]; then
-    $PROGDIR/make_image.sh -C natty $CHROOTCACHE/natty-base
-    # copy kernel modules...
-    # NOTE(ja): is there a better way to do this?
-    cp -pr /lib/modules/`uname -r` $CHROOTCACHE/natty-base/lib/modules
-    # a simple password - pass
-    echo root:pass | chroot $CHROOTCACHE/natty-base chpasswd
-fi
-
-# prime natty with as many apt/pips as we can
-if [ ! -d $CHROOTCACHE/natty-dev ]; then
-    rsync -azH $CHROOTCACHE/natty-base/ $CHROOTCACHE/natty-dev/
-    chroot $CHROOTCACHE apt-get install -y --download-only `cat files/apts/* | grep NOPRIME | cut -d\# -f1`
-    chroot $CHROOTCACHE apt-get install -y --force-yes `cat files/apts/* | grep -v NOPRIME | cut -d\# -f1`
-    chroot $CHROOTCACHE pip install `cat files/pips/*`
-
-    # Create a stack user that is a member of the libvirtd group so that stack
-    # is able to interact with libvirt.
-    chroot $CHROOTCACHE/natty-dev groupadd libvirtd
-    chroot $CHROOTCACHE/natty-dev useradd stack -s /bin/bash -d $DEST -G libvirtd
-    mkdir -p $CHROOTCACHE/natty-dev/$DEST
-    chown stack $CHROOTCACHE/natty-dev/$DEST
-
-    # a simple password - pass
-    echo stack:pass | chroot $CHROOTCACHE/natty-dev chpasswd
-
-    # and has sudo ability (in the future this should be limited to only what
-    # stack requires)
-    echo "stack ALL=(ALL) NOPASSWD: ALL" >> $CHROOTCACHE/natty-dev/etc/sudoers
-fi
-
-# clone git repositories onto the system
-# ======================================
-
-if [ ! -d $CHROOTCACHE/natty-stack ]; then
-    rsync -azH $CHROOTCACHE/natty-dev/ $CHROOTCACHE/natty-stack/
-fi
-
-# git clone only if directory doesn't exist already.  Since ``DEST`` might not
-# be owned by the installation user, we create the directory and change the
-# ownership to the proper user.
-function git_clone {
-
-    # clone new copy or fetch latest changes
-    CHECKOUT=$CHROOTCACHE/natty-stack$2
-    if [ ! -d $CHECKOUT ]; then
-        mkdir -p $CHECKOUT
-        git clone $1 $CHECKOUT
-    else
-        pushd $CHECKOUT
-        git fetch
-        popd
-    fi
-
-    # FIXME(ja): checkout specified version (should works for branches and tags)
-
-    pushd $CHECKOUT
-    # checkout the proper branch/tag
-    git checkout $3
-    # force our local version to be the same as the remote version
-    git reset --hard origin/$3
-    popd
-
-    # give ownership to the stack user
-    chroot $CHROOTCACHE/natty-stack/ chown -R stack $2
-}
-
-git_clone $NOVA_REPO $DEST/nova $NOVA_BRANCH
-git_clone $GLANCE_REPO $DEST/glance $GLANCE_BRANCH
-git_clone $KEYSTONE_REPO $DEST/keystone $KEYSTONE_BRANCH
-git_clone $NOVNC_REPO $DEST/novnc $NOVNC_BRANCH
-git_clone $HORIZON_REPO $DEST/horizon $HORIZON_BRANCH $HORIZON_TAG
-git_clone $NOVACLIENT_REPO $DEST/python-novaclient $NOVACLIENT_BRANCH
-git_clone $OPENSTACKX_REPO $DEST/openstackx $OPENSTACKX_BRANCH
-
-chroot $CHROOTCACHE/natty-stack mkdir -p $DEST/files
-wget -c http://images.ansolabs.com/tty.tgz -O $CHROOTCACHE/natty-stack$DEST/files/tty.tgz
-
-# Use this version of devstack?
-if [ "$USE_CURRENT_DEVSTACK" = "1" ]; then
-    rm -rf $CHROOTCACHE/natty-stack/$DEST/devstack
-    cp -pr $CWD $CHROOTCACHE/natty-stack/$DEST/devstack
-fi
-
-cp -pr $CHROOTCACHE/natty-stack $NFSDIR
-
-# set hostname
-echo $NAME > $NFSDIR/etc/hostname
-echo "127.0.0.1 localhost $NAME" > $NFSDIR/etc/hosts
-
-# injecting root's public ssh key if it exists
-if [ -f /root/.ssh/id_rsa.pub ]; then
-    mkdir $NFSDIR/root/.ssh
-    chmod 700 $NFSDIR/root/.ssh
-    cp /root/.ssh/id_rsa.pub $NFSDIR/root/.ssh/authorized_keys
-fi
diff --git a/tools/build_pxe_env.sh b/tools/build_pxe_env.sh
index 1ab51f8..d01dad0 100755
--- a/tools/build_pxe_env.sh
+++ b/tools/build_pxe_env.sh
@@ -10,8 +10,7 @@
 dpkg -l syslinux || apt-get install -y syslinux
 
 DEST_DIR=${1:-/tmp}/tftpboot
-PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
-OPWD=`pwd`
+PXEDIR=${PXEDIR:-/opt/ramstack/pxe}
 PROGDIR=`dirname $0`
 
 # Clean up any resources that may be in use
@@ -28,7 +27,11 @@
     trap 2; kill -2 $$
 }
 
-trap cleanup SIGHUP SIGINT SIGTERM
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
+
+# Keep track of the current directory
+TOOLS_DIR=$(cd $(dirname "$0") && pwd)
+TOP_DIR=`cd $TOOLS_DIR/..; pwd`
 
 mkdir -p $DEST_DIR/pxelinux.cfg
 cd $DEST_DIR
@@ -42,7 +45,7 @@
 prompt 0
 timeout 0
 
-MENU TITLE PXE Boot Menu
+MENU TITLE devstack PXE Boot Menu
 
 EOF
 
@@ -54,7 +57,7 @@
 
 # Get image into place
 if [ ! -r $PXEDIR/stack-initrd.img ]; then
-    cd $OPWD
+    cd $TOP_DIR
     $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img
 fi
 if [ ! -r $PXEDIR/stack-initrd.gz ]; then
@@ -110,3 +113,5 @@
     MENU LABEL ^Local disk
     LOCALBOOT 0
 EOF
+
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
diff --git a/tools/build_ramdisk.sh b/tools/build_ramdisk.sh
index 2c914dc..feaa8a9 100755
--- a/tools/build_ramdisk.sh
+++ b/tools/build_ramdisk.sh
@@ -57,7 +57,7 @@
 # Source params
 source ./stackrc
 
-CACHEDIR=${CACHEDIR:-/var/cache/devstack}
+CACHEDIR=${CACHEDIR:-/opt/stack/cache}
 
 DEST=${DEST:-/opt/stack}
 
diff --git a/tools/build_uec.sh b/tools/build_uec.sh
index 2a578fc..8167105 100755
--- a/tools/build_uec.sh
+++ b/tools/build_uec.sh
@@ -37,27 +37,34 @@
 apt-get install -y --force-yes $DEPS || true # allow this to fail gracefully for concurrent builds
 
 # Where to store files and instances
-WORK_DIR=${WORK_DIR:-/opt/kvmstack}
+WORK_DIR=${WORK_DIR:-/opt/uecstack}
 
 # Where to store images
 image_dir=$WORK_DIR/images/$DIST_NAME
 mkdir -p $image_dir
 
-# Original version of built image
-uec_url=http://uec-images.ubuntu.com/$DIST_NAME/current/$DIST_NAME-server-cloudimg-amd64.tar.gz
-tarball=$image_dir/$(basename $uec_url)
-
-# download the base uec image if we haven't already
-if [ ! -f $tarball ]; then
-    curl $uec_url -o $tarball
-    (cd $image_dir && tar -Sxvzf $tarball)
-    resize-part-image $image_dir/*.img $GUEST_SIZE $image_dir/disk
-    cp $image_dir/*-vmlinuz-virtual $image_dir/kernel
+# Start over with a clean base image, if desired
+if [ $CLEAN_BASE ]; then
+    rm -f $image_dir/disk
 fi
 
+# Get the base image if it does not yet exist
+if [ ! -e $image_dir/disk ]; then
+    $TOOLS_DIR/get_uec_image.sh -r $GUEST_SIZE $DIST_NAME $image_dir/disk $image_dir/kernel
+fi
 
-# Configure the root password of the vm to be the same as ``ADMIN_PASSWORD``
-ROOT_PASSWORD=${ADMIN_PASSWORD:-password}
+# Copy over dev environment if COPY_ENV is set.
+# This will also copy over your current devstack.
+if [ $COPY_ENV ]; then
+    cd $TOOLS_DIR
+    ./copy_dev_environment_to_uec.sh $image_dir/disk
+fi
+
+# Option to warm the base image with software requirements.
+if [ $WARM_CACHE ]; then
+    cd $TOOLS_DIR
+    ./warm_apts_and_pips_for_uec.sh $image_dir/disk
+fi
 
 # Name of our instance, used by libvirt
 GUEST_NAME=${GUEST_NAME:-devstack}
@@ -178,22 +185,23 @@
 sed -i "s/127.0.0.1/127.0.0.1 \`hostname\`/" /etc/hosts
 apt-get update
 apt-get install git sudo -y
-git clone https://github.com/cloudbuilders/devstack.git
-cd devstack
-git remote set-url origin `cd $TOP_DIR; git remote show origin | grep Fetch | awk '{print $3}'`
-git fetch
-git checkout `git rev-parse HEAD`
-cat > localrc <<LOCAL_EOF
+if [ ! -d devstack ]; then
+    git clone https://github.com/cloudbuilders/devstack.git
+    cd devstack
+    git remote set-url origin `cd $TOP_DIR; git remote show origin | grep Fetch | awk '{print $3}'`
+    git fetch
+    git checkout `git rev-parse HEAD`
+    cat > localrc <<LOCAL_EOF
 ROOTSLEEP=0
 `cat $TOP_DIR/localrc`
 LOCAL_EOF
+fi
 # Disable byobu
-/usr/bin/byobu-disable
+sudo apt-get remove -y byobu
 EOF
 
 # Setup stack user with our key
-CONFIGURE_STACK_USER=${CONFIGURE_STACK_USER:-yes}
-if [[ -e ~/.ssh/id_rsa.pub  && "$CONFIGURE_STACK_USER" = "yes" ]]; then
+if [[ -e ~/.ssh/id_rsa.pub ]]; then
     PUB_KEY=`cat  ~/.ssh/id_rsa.pub`
     cat >> $vm_dir/uec/user-data<<EOF
 mkdir -p /opt/stack
@@ -242,6 +250,20 @@
     echo "stack.sh log. It will take a second or two to start."
     echo
     echo "Just CTRL-C at any time to stop tailing."
+    echo
+
+    if ! timeout 60 sh -c "while [ ! -s /var/lib/libvirt/dnsmasq/$NET_NAME.leases ]; do sleep 1; done"; then
+        echo "Your instance failed to acquire an IP address"
+        exit 1
+    fi
+
+    ip=`cat /var/lib/libvirt/dnsmasq/$NET_NAME.leases | cut -d " " -f3`
+    echo "#############################################################"
+    echo "              -- This is your instance's IP: --"
+    echo "                           $ip"
+    echo "#############################################################"
+
+    sleep 2
 
     while [ ! -e "$vm_dir/console.log" ]; do
       sleep 1
@@ -271,6 +293,8 @@
     if ! grep -q "^stack.sh completed in" $vm_dir/console.log; then
         exit 1
     fi
+
+    set +o xtrace
     echo ""
     echo "Finished - Zip-a-dee Doo-dah!"
 fi
diff --git a/tools/build_uec_ramdisk.sh b/tools/build_uec_ramdisk.sh
new file mode 100755
index 0000000..0c27734
--- /dev/null
+++ b/tools/build_uec_ramdisk.sh
@@ -0,0 +1,203 @@
+#!/usr/bin/env bash
+# build_uec_ramdisk.sh - Build RAM disk images based on UEC image
+
+# exit on error to stop unexpected errors
+set -o errexit
+
+if [ ! "$#" -eq "1" ]; then
+    echo "$0 builds a gziped Ubuntu OpenStack install"
+    echo "usage: $0 dest"
+    exit 1
+fi
+
+# Make sure that we have the proper version of ubuntu (only works on oneiric)
+if ! egrep -q "oneiric" /etc/lsb-release; then
+    echo "This script only works with ubuntu oneiric."
+    exit 1
+fi
+
+# Clean up resources that may be in use
+cleanup() {
+    set +o errexit
+
+    if [ -n "$MNT_DIR" ]; then
+        umount $MNT_DIR/dev
+        umount $MNT_DIR
+    fi
+
+    if [ -n "$DEST_FILE_TMP" ]; then
+        rm $DEST_FILE_TMP
+    fi
+
+    # Kill ourselves to signal parents
+    trap 2; kill -2 $$
+}
+
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
+
+# Output dest image
+DEST_FILE=$1
+
+# Keep track of the current directory
+TOOLS_DIR=$(cd $(dirname "$0") && pwd)
+TOP_DIR=`cd $TOOLS_DIR/..; pwd`
+
+cd $TOP_DIR
+
+# Source params
+source ./stackrc
+
+DEST=${DEST:-/opt/stack}
+
+# Ubuntu distro to install
+DIST_NAME=${DIST_NAME:-oneiric}
+
+# Configure how large the VM should be
+GUEST_SIZE=${GUEST_SIZE:-2G}
+
+# exit on error to stop unexpected errors
+set -o errexit
+set -o xtrace
+
+# Abort if localrc is not set
+if [ ! -e $TOP_DIR/localrc ]; then
+    echo "You must have a localrc with ALL necessary passwords defined before proceeding."
+    echo "See stack.sh for required passwords."
+    exit 1
+fi
+
+# Install deps if needed
+DEPS="kvm libvirt-bin kpartx cloud-utils curl"
+apt-get install -y --force-yes $DEPS
+
+# Where to store files and instances
+CACHEDIR=${CACHEDIR:-/opt/stack/cache}
+WORK_DIR=${WORK_DIR:-/opt/ramstack}
+
+# Where to store images
+image_dir=$WORK_DIR/images/$DIST_NAME
+mkdir -p $image_dir
+
+# Get the base image if it does not yet exist
+if [ ! -e $image_dir/disk ]; then
+    $TOOLS_DIR/get_uec_image.sh -r 2000M $DIST_NAME $image_dir/disk
+fi
+
+# Configure the root password of the vm to be the same as ``ADMIN_PASSWORD``
+ROOT_PASSWORD=${ADMIN_PASSWORD:-password}
+
+# Name of our instance, used by libvirt
+GUEST_NAME=${GUEST_NAME:-devstack}
+
+# Pre-load the image with basic environment
+if [ ! -e $image_dir/disk-primed ]; then
+    cp $image_dir/disk $image_dir/disk-primed
+    $TOOLS_DIR/warm_apts_and_pips_for_uec.sh $image_dir/disk-primed
+    $TOOLS_DIR/copy_dev_environment_to_uec.sh $image_dir/disk-primed
+fi
+
+# Back to devstack
+cd $TOP_DIR
+
+DEST_FILE_TMP=`mktemp $DEST_FILE.XXXXXX`
+MNT_DIR=`mktemp -d --tmpdir mntXXXXXXXX`
+cp $image_dir/disk-primed $DEST_FILE_TMP
+mount -t ext4 -o loop $DEST_FILE_TMP $MNT_DIR
+mount -o bind /dev /$MNT_DIR/dev
+cp -p /etc/resolv.conf $MNT_DIR/etc/resolv.conf
+echo root:$ROOT_PASSWORD | chroot $MNT_DIR chpasswd
+touch $MNT_DIR/$DEST/.ramdisk
+
+# We need to install a non-virtual kernel and modules to boot from
+if [ ! -r "`ls $MNT_DIR/boot/vmlinuz-*-generic | head -1`" ]; then
+    chroot $MNT_DIR apt-get install -y linux-generic
+fi
+
+# git clone only if directory doesn't exist already.  Since ``DEST`` might not
+# be owned by the installation user, we create the directory and change the
+# ownership to the proper user.
+function git_clone {
+
+    # clone new copy or fetch latest changes
+    CHECKOUT=${MNT_DIR}$2
+    if [ ! -d $CHECKOUT ]; then
+        mkdir -p $CHECKOUT
+        git clone $1 $CHECKOUT
+    else
+        pushd $CHECKOUT
+        git fetch
+        popd
+    fi
+
+    # FIXME(ja): checkout specified version (should works for branches and tags)
+
+    pushd $CHECKOUT
+    # checkout the proper branch/tag
+    git checkout $3
+    # force our local version to be the same as the remote version
+    git reset --hard origin/$3
+    popd
+
+    # give ownership to the stack user
+    chroot $MNT_DIR chown -R stack $2
+}
+
+git_clone $NOVA_REPO $DEST/nova $NOVA_BRANCH
+git_clone $GLANCE_REPO $DEST/glance $GLANCE_BRANCH
+git_clone $KEYSTONE_REPO $DEST/keystone $KEYSTONE_BRANCH
+git_clone $NOVNC_REPO $DEST/novnc $NOVNC_BRANCH
+git_clone $HORIZON_REPO $DEST/horizon $HORIZON_BRANCH
+git_clone $NOVACLIENT_REPO $DEST/python-novaclient $NOVACLIENT_BRANCH
+git_clone $OPENSTACKX_REPO $DEST/openstackx $OPENSTACKX_BRANCH
+git_clone $CITEST_REPO $DEST/openstack-integration-tests $CITEST_BRANCH
+
+# Use this version of devstack
+rm -rf $MNT_DIR/$DEST/devstack
+cp -pr $TOP_DIR $MNT_DIR/$DEST/devstack
+chroot $MNT_DIR chown -R stack $DEST/devstack
+
+# Configure host network for DHCP
+mkdir -p $MNT_DIR/etc/network
+cat > $MNT_DIR/etc/network/interfaces <<EOF
+auto lo
+iface lo inet loopback
+
+auto eth0
+iface eth0 inet dhcp
+EOF
+
+# Set hostname
+echo "ramstack" >$MNT_DIR/etc/hostname
+echo "127.0.0.1		localhost	ramstack" >$MNT_DIR/etc/hosts
+
+# Configure the runner
+RUN_SH=$MNT_DIR/$DEST/run.sh
+cat > $RUN_SH <<EOF
+#!/usr/bin/env bash
+
+# Get IP range
+set \`ip addr show dev eth0 | grep inet\`
+PREFIX=\`echo \$2 | cut -d. -f1,2,3\`
+export FLOATING_RANGE="\$PREFIX.224/27"
+
+# Kill any existing screens
+killall screen
+
+# Run stack.sh
+cd $DEST/devstack && \$STACKSH_PARAMS ./stack.sh > $DEST/run.sh.log
+echo >> $DEST/run.sh.log
+echo >> $DEST/run.sh.log
+echo "All done! Time to start clicking." >> $DEST/run.sh.log
+EOF
+
+# Make the run.sh executable
+chmod 755 $RUN_SH
+chroot $MNT_DIR chown stack $DEST/run.sh
+
+umount $MNT_DIR/dev
+umount $MNT_DIR
+rmdir $MNT_DIR
+mv $DEST_FILE_TMP $DEST_FILE
+rm -f $DEST_FILE_TMP
+
+trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT
diff --git a/tools/build_usb_boot.sh b/tools/build_usb_boot.sh
index e4dabc0..cca2a68 100755
--- a/tools/build_usb_boot.sh
+++ b/tools/build_usb_boot.sh
@@ -7,8 +7,7 @@
 # Needs to run as root
 
 DEST_DIR=${1:-/tmp/syslinux-boot}
-PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
-OPWD=`pwd`
+PXEDIR=${PXEDIR:-/opt/ramstack/pxe}
 PROGDIR=`dirname $0`
 
 # Clean up any resources that may be in use
@@ -29,7 +28,11 @@
     trap 2; kill -2 $$
 }
 
-trap cleanup SIGHUP SIGINT SIGTERM
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
+
+# Keep track of the current directory
+TOOLS_DIR=$(cd $(dirname "$0") && pwd)
+TOP_DIR=`cd $TOOLS_DIR/..; pwd`
 
 if [ -b $DEST_DIR ]; then
     # We have a block device, install syslinux and mount it
@@ -62,7 +65,7 @@
 prompt 0
 timeout 0
 
-MENU TITLE Boot Menu
+MENU TITLE devstack Boot Menu
 
 EOF
 
@@ -74,8 +77,8 @@
 
 # Get image into place
 if [ ! -r $PXEDIR/stack-initrd.img ]; then
-    cd $OPWD
-    $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img
+    cd $TOP_DIR
+    $PROGDIR/build_uec_ramdisk.sh $PXEDIR/stack-initrd.img
 fi
 if [ ! -r $PXEDIR/stack-initrd.gz ]; then
     gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
@@ -139,3 +142,5 @@
     umount $DEST_DIR
     rmdir $DEST_DIR
 fi
+
+trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT
diff --git a/tools/setup_stack_user.sh b/tools/copy_dev_environment_to_uec.sh
similarity index 85%
rename from tools/setup_stack_user.sh
rename to tools/copy_dev_environment_to_uec.sh
index fcb9733..c949b32 100755
--- a/tools/setup_stack_user.sh
+++ b/tools/copy_dev_environment_to_uec.sh
@@ -44,10 +44,8 @@
 echo stack:pass | chroot $STAGING_DIR chpasswd
 
 # Configure sudo
-grep -q "^#includedir.*/etc/sudoers.d" $STAGING_DIR/etc/sudoers ||
-    echo "#includedir /etc/sudoers.d" | sudo tee -a $STAGING_DIR/etc/sudoers
-cp $TOP_DIR/files/sudo/* $STAGING_DIR/etc/sudoers.d/
-sed -e "s,%USER%,$USER,g" -i $STAGING_DIR/etc/sudoers.d/*
+( umask 226 && echo "stack ALL=(ALL) NOPASSWD:ALL" \
+    > $STAGING_DIR/etc/sudoers.d/50_stack_sh )
 
 # Gracefully cp only if source file/dir exists
 function cp_it {
@@ -63,6 +61,10 @@
 cp_it ~/.vimrc $STAGING_DIR/$DEST/.vimrc
 cp_it ~/.bashrc $STAGING_DIR/$DEST/.bashrc
 
+# Copy devstack
+rm -rf $STAGING_DIR/$DEST/devstack
+cp_it . $STAGING_DIR/$DEST/devstack
+
 # Give stack ownership over $DEST so it may do the work needed
 chroot $STAGING_DIR chown -R stack $DEST
 
diff --git a/tools/get_uec_image.sh b/tools/get_uec_image.sh
index 7b95aab..7fa920e 100755
--- a/tools/get_uec_image.sh
+++ b/tools/get_uec_image.sh
@@ -1,14 +1,8 @@
 #!/bin/bash
-# get_uec_image.sh - Prepare Ubuntu images in various formats
-#
-# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc), raw
-#
-# Required to run as root
+# get_uec_image.sh - Prepare Ubuntu UEC images
 
-CACHEDIR=${CACHEDIR:-/var/cache/devstack}
-FORMAT=${FORMAT:-qcow2}
+CACHEDIR=${CACHEDIR:-/opt/stack/cache}
 ROOTSIZE=${ROOTSIZE:-2000}
-MIN_PKGS=${MIN_PKGS:-"apt-utils gpgv openssh-server"}
 
 # Keep track of the current directory
 TOOLS_DIR=$(cd $(dirname "$0") && pwd)
@@ -18,14 +12,14 @@
 set -o errexit
 
 usage() {
-    echo "Usage: $0 - Prepare Ubuntu images"
+    echo "Usage: $0 - Fetch and prepare Ubuntu images"
     echo ""
-    echo "$0 [-f format] [-r rootsize] release imagefile"
+    echo "$0 [-r rootsize] release imagefile [kernel]"
     echo ""
-    echo "-f format - image format: qcow2 (default), vmdk, vdi, vhd, xen, raw, fs"
-    echo "-r size   - root fs size in MB (min 2000MB)"
+    echo "-r size   - root fs size (min 2000MB)"
     echo "release   - Ubuntu release: jaunty - oneric"
     echo "imagefile - output image file"
+    echo "kernel    - output kernel"
     exit 1
 }
 
@@ -38,42 +32,21 @@
         rm -f $IMG_FILE_TMP
     fi
 
-    # Release NBD devices
-    if [ -n "$NBD" ]; then
-        qemu-nbd -d $NBD
-    fi
-
     # Kill ourselves to signal any calling process
     trap 2; kill -2 $$
 }
 
-# apt-get wrapper to just get arguments set correctly
-function apt_get() {
-    local sudo="sudo"
-    [ "$(id -u)" = "0" ] && sudo="env"
-    $sudo DEBIAN_FRONTEND=noninteractive apt-get \
-        --option "Dpkg::Options::=--force-confold" --assume-yes "$@"
-}
-
-while getopts f:hmr: c; do
+while getopts hr: c; do
     case $c in
-        f)  FORMAT=$OPTARG
-            ;;
         h)  usage
             ;;
-        m)  MINIMAL=1
-            ;;
         r)  ROOTSIZE=$OPTARG
-            if [[ $ROOTSIZE < 2000 ]]; then
-                echo "root size must be greater than 2000MB"
-                exit 1
-            fi
             ;;
     esac
 done
 shift `expr $OPTIND - 1`
 
-if [ ! "$#" -eq "2" ]; then
+if [[ ! "$#" -eq "2" && ! "$#" -eq "3" ]]; then
     usage
 fi
 
@@ -81,134 +54,49 @@
 DIST_NAME=$1
 IMG_FILE=$2
 IMG_FILE_TMP=`mktemp $IMG_FILE.XXXXXX`
-
-case $FORMAT in
-    kvm|qcow2)  FORMAT=qcow2
-                QFORMAT=qcow2
-                ;;
-    vmserver|vmdk)
-                FORMAT=vmdk
-                QFORMAT=vmdk
-                ;;
-    vbox|vdi)   FORMAT=vdi
-                QFORMAT=vdi
-                ;;
-    vhd|vpc)    FORMAT=vhd
-                QFORMAT=vpc
-                ;;
-    xen)        FORMAT=raw
-                QFORMAT=raw
-                ;;
-    raw)        FORMAT=raw
-                QFORMAT=raw
-                ;;
-    *)          echo "Unknown format: $FORMAT"
-                usage
-esac
+KERNEL=$3
 
 case $DIST_NAME in
     oneiric)    ;;
     natty)      ;;
     maverick)   ;;
     lucid)      ;;
-    karmic)     ;;
-    jaunty)     ;;
     *)          echo "Unknown release: $DIST_NAME"
                 usage
                 ;;
 esac
 
-trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT
 
-# Check for dependencies
-
-if [ ! -x "`which qemu-img`" -o ! -x "`which qemu-nbd`" ]; then
+# Check dependencies
+if [ ! -x "`which qemu-img`" -o -z "`dpkg -l | grep cloud-utils`" ]; then
     # Missing KVM?
-    apt_get install qemu-kvm
+    apt_get install qemu-kvm cloud-utils
 fi
 
-# Prepare the base image
+# Find resize script
+RESIZE=`which resize-part-image || which uec-resize-image`
+if [ -z "$RESIZE" ]; then
+    echo "resize tool from cloud-utils not found"
+    exit 1
+fi
 
 # Get the UEC image
 UEC_NAME=$DIST_NAME-server-cloudimg-amd64
-if [ ! -e $CACHEDIR/$UEC_NAME-disk1.img ]; then
-    mkdir -p $CACHEDIR
-    (cd $CACHEDIR && wget -N http://uec-images.ubuntu.com/$DIST_NAME/current/$UEC_NAME-disk1.img)
+if [ ! -d $CACHEDIR ]; then
+    mkdir -p $CACHEDIR/$DIST_NAME
+fi
+if [ ! -e $CACHEDIR/$DIST_NAME/$UEC_NAME.tar.gz ]; then
+    (cd $CACHEDIR/$DIST_NAME && wget -N http://uec-images.ubuntu.com/$DIST_NAME/current/$UEC_NAME.tar.gz)
+    (cd $CACHEDIR/$DIST_NAME && tar Sxvzf $UEC_NAME.tar.gz)
 fi
 
-if [ "$FORMAT" = "qcow2" ]; then
-    # Just copy image
-    cp -p $CACHEDIR/$UEC_NAME-disk1.img $IMG_FILE_TMP
-else
-    # Convert image
-    qemu-img convert -O $QFORMAT $CACHEDIR/$UEC_NAME-disk1.img $IMG_FILE_TMP
-fi
-
-# Resize the image if necessary
-if [ $ROOTSIZE -gt 2000 ]; then
-    # Resize the container
-    qemu-img resize $IMG_FILE_TMP +$((ROOTSIZE - 2000))M
-fi
-
-# Finds the next available NBD device
-# Exits script if error connecting or none free
-# map_nbd image
-# returns full nbd device path
-function map_nbd {
-    for i in `seq 0 15`; do
-        if [ ! -e /sys/block/nbd$i/pid ]; then
-            NBD=/dev/nbd$i
-            # Connect to nbd and wait till it is ready
-            qemu-nbd -c $NBD $1
-            if ! timeout 60 sh -c "while ! [ -e ${NBD}p1 ]; do sleep 1; done"; then
-                echo "Couldn't connect $NBD"
-                exit 1
-            fi
-            break
-        fi
-    done
-    if [ -z "$NBD" ]; then
-        echo "No free NBD slots"
-        exit 1
-    fi
-    echo $NBD
-}
-
-# Set up nbd
-modprobe nbd max_part=63
-NBD=`map_nbd $IMG_FILE_TMP`
-
-# Resize partition 1 to full size of the disk image
-echo "d
-n
-p
-1
-2
-
-t
-83
-a
-1
-w
-" | fdisk $NBD
-e2fsck -f -p ${NBD}p1
-resize2fs ${NBD}p1
-
-# Do some preliminary installs
-MNTDIR=`mktemp -d mntXXXXXXXX`
-mount -t ext4 ${NBD}p1 $MNTDIR
-
-# Install our required packages
-cp -p files/sources.list $MNTDIR/etc/apt/sources.list
-sed -e "s,%DIST%,$DIST_NAME,g" -i $MNTDIR/etc/apt/sources.list
-cp -p /etc/resolv.conf $MNTDIR/etc/resolv.conf
-chroot $MNTDIR apt-get update
-chroot $MNTDIR apt-get install -y $MIN_PKGS
-rm -f $MNTDIR/etc/resolv.conf
-
-umount $MNTDIR
-rmdir $MNTDIR
-qemu-nbd -d $NBD
-NBD=""
-
+$RESIZE $CACHEDIR/$DIST_NAME/$UEC_NAME.img ${ROOTSIZE} $IMG_FILE_TMP
 mv $IMG_FILE_TMP $IMG_FILE
+
+# Copy kernel to destination
+if [ -n "$KERNEL" ]; then
+    cp -p $CACHEDIR/$DIST_NAME/*-vmlinuz-virtual $KERNEL
+fi
+
+trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT
diff --git a/tools/install_openvpn.sh b/tools/install_openvpn.sh
old mode 100644
new mode 100755
diff --git a/tools/jenkins/configurations/kvm.sh b/tools/jenkins/configurations/kvm.sh
index 5a9df47..727b42a 100755
--- a/tools/jenkins/configurations/kvm.sh
+++ b/tools/jenkins/configurations/kvm.sh
@@ -1,5 +1,9 @@
 #!/bin/bash
 
+# exit on error to stop unexpected errors
+set -o errexit
+set -o xtrace
+
 EXECUTOR_NUMBER=$1
 CONFIGURATION=$2
 ADAPTER=$3
@@ -25,7 +29,7 @@
 TOP_DIR=$(pwd)
 
 # Deps
-apt-get install -y --force-yes libvirt-bin
+apt-get install -y --force-yes libvirt-bin || true
 
 # Name test instance based on executor
 BASE_NAME=executor-`printf "%02d" $EXECUTOR_NUMBER`
diff --git a/tools/lxc_network_hostonlyplusnat.sh b/tools/lxc_network_hostonlyplusnat.sh
deleted file mode 100755
index 4e29ed7..0000000
--- a/tools/lxc_network_hostonlyplusnat.sh
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/bash
-
-# Print some usage info
-function usage {
-  echo "Usage: $0 [OPTION] [host_ip]"
-  echo "Set up temporary networking for LXC"
-  echo ""
-  echo "  -n, --dry-run            Just print the commands that would execute."
-  echo "  -h, --help               Print this usage message."
-  echo ""
-  exit
-}
-
-# Allow passing the ip address on the command line.
-function process_option {
-  case "$1" in
-    -h|--help) usage;;
-    -n|--dry-run) dry_run=1;;
-    *) host_ip="$1"
-  esac
-}
-
-# Set up some defaults
-host_ip=
-dry_run=0
-bridge=br0
-DRIER=
-
-# Process the args
-for arg in "$@"; do
-  process_option $arg
-done
-
-if [ $dry_run ]; then
-  DRIER=echo
-fi
-
-if [ "$UID" -ne "0" ]; then
-  echo "This script must be run with root privileges."
-  exit 1
-fi
-
-# Check for bridge-utils.
-BRCTL=`which brctl`
-if [ ! -x "$BRCTL" ]; then
-  echo "This script requires you to install bridge-utils."
-  echo "Try: sudo apt-get install bridge-utils."
-  exit 1
-fi
-
-# Scare off the nubs.
-echo "====================================================="
-echo
-echo "WARNING"
-echo
-echo "This script will modify your current network setup,"
-echo "this can be a scary thing and it is recommended that"
-echo "you have something equivalent to physical access to"
-echo "this machine before continuing in case your network"
-echo "gets all funky."
-echo
-echo "If you don't want to continue, hit CTRL-C now."
-
-if [ -z "$host_ip" ];
-then
-  echo "Otherwise, please type in your host's ip address and"
-  echo "hit enter."
-  echo
-  echo "====================================================="
-  read host_ip
-else
-  echo "Otherwise hit enter."
-  echo
-  echo "====================================================="
-  read accept
-fi
-
-
-# Add a bridge interface, this will choke if there is already
-# a bridge named $bridge
-$DRIER $BRCTL addbr $bridge
-$DRIER ip addr add 192.168.1.1/24 dev $bridge
-if [ $dry_run ]; then
-  echo "echo 1 > /proc/sys/net/ipv4/ip_forward"
-else
-  echo 1 > /proc/sys/net/ipv4/ip_forward
-fi
-$DRIER ifconfig $bridge up
-
-# Set up the NAT for the instances
-$DRIER iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source $host_ip
-$DRIER iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT
-
diff --git a/tools/make_image.sh b/tools/make_image.sh
deleted file mode 100755
index a69f5e3..0000000
--- a/tools/make_image.sh
+++ /dev/null
@@ -1,187 +0,0 @@
-#!/bin/bash
-# make_image.sh - Create Ubuntu images in various formats
-#
-# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc), raw
-#
-# Requires sudo to root
-
-ROOTSIZE=${ROOTSIZE:-8192}
-SWAPSIZE=${SWAPSIZE:-1024}
-MIN_PKGS=${MIN_PKGS:-"apt-utils gpgv openssh-server"}
-
-usage() {
-    echo "Usage: $0 - Create Ubuntu images"
-    echo ""
-    echo "$0 [-m] [-r rootsize] [-s swapsize] release format"
-    echo "$0 -C [-m] release chrootdir"
-    echo "$0 -I [-r rootsize] [-s swapsize] chrootdir format"
-    echo ""
-    echo "-C        - Create the initial chroot dir"
-    echo "-I        - Create the final image from a chroot"
-    echo "-m        - minimal installation"
-    echo "-r size   - root fs size in MB"
-    echo "-s size   - swap fs size in MB"
-    echo "release   - Ubuntu release: jaunty - oneric"
-    echo "format    - image format: qcow2, vmdk, vdi, vhd, xen, raw, fs"
-    exit 1
-}
-
-while getopts CIhmr:s: c; do
-    case $c in
-        C)  CHROOTONLY=1
-            ;;
-        I)  IMAGEONLY=1
-            ;;
-        h)  usage
-            ;;
-        m)  MINIMAL=1
-            ;;
-        r)  ROOTSIZE=$OPTARG
-            ;;
-        s)  SWAPSIZE=$OPTARG
-            ;;
-    esac
-done
-shift `expr $OPTIND - 1`
-
-if [ ! "$#" -eq "2" -o -n "$CHROOTONLY" -a -n "$IMAGEONLY" ]; then
-    usage
-fi
-
-# Default args
-RELEASE=$1
-FORMAT=$2
-CHROOTDIR=""
-
-if [ -n "$CHROOTONLY" ]; then
-    RELEASE=$1
-    CHROOTDIR=$2
-    FORMAT="pass"
-fi
-
-if [ -n "$IMAGEONLY" ]; then
-    CHROOTDIR=$1
-    FORMAT=$2
-    RELEASE="pass"
-fi
-
-# Make sure that we have the proper version of ubuntu
-UBUNTU_VERSION=`cat /etc/lsb-release | grep CODENAME | sed 's/.*=//g'`
-if [ "$UBUNTU_VERSION" = "natty" -a "$RELEASE" = "oneiric" ]; then
-    echo "natty installs can't build oneiric images"
-    exit 1
-fi
-
-case $FORMAT in
-    kvm|qcow2)  FORMAT=qcow2
-                QFORMAT=qcow2
-                HYPER=kvm
-                ;;
-    vmserver|vmdk)
-                FORMAT=vmdk
-                QFORMAT=vmdk
-                HYPER=vmserver
-                ;;
-    vbox|vdi)   FORMAT=vdi
-                QFORMAT=vdi
-                HYPER=kvm
-                ;;
-    vhd|vpc)    FORMAT=vhd
-                QFORMAT=vpc
-                HYPER=kvm
-                ;;
-    xen)        FORMAT=raw
-                QFORMAT=raw
-                HYPER=xen
-                ;;
-    raw)        FORMAT=raw
-                QFORMAT=raw
-                HYPER=kvm
-                ;;
-    pass)       ;;
-    *)          echo "Unknown format: $FORMAT"
-                usage
-esac
-
-case $RELEASE in
-    oneiric)    ;;
-    natty)      ;;
-    maverick)   ;;
-    lucid)      ;;
-    karmic)     ;;
-    jaunty)     ;;
-    pass)       ;;
-    *)          echo "Unknown release: $RELEASE"
-                usage
-                ;;
-esac
-
-# Install stuff if necessary
-if [ -z `which vmbuilder` ]; then
-    sudo apt-get install -y ubuntu-vm-builder
-fi
-
-if [ -n "$CHROOTONLY" ]; then
-    # Build a chroot directory
-    HYPER=kvm
-    if [ "$MINIMAL" = 1 ]; then
-        ARGS="--variant=minbase"
-        for i in $MIN_PKGS; do
-            ARGS="$ARGS --addpkg=$i"
-        done
-    fi
-    sudo vmbuilder $HYPER ubuntu $ARGS \
-      --suite $RELEASE \
-      --only-chroot \
-      --chroot-dir=$CHROOTDIR \
-      --overwrite \
-      --addpkg=$MIN_PKGS \
-
-    sudo cp -p files/sources.list $CHROOTDIR/etc/apt/sources.list
-    sed -e "s,%DIST%,$RELEASE,g" -i $CHROOTDIR/etc/apt/sources.list
-    sudo chroot $CHROOTDIR apt-get update
-
-    exit 0
-fi
-
-# Build the image
-TMPDIR=tmp
-TMPDISK=`mktemp imgXXXXXXXX`
-SIZE=$[$ROOTSIZE+$SWAPSIZE+1]
-dd if=/dev/null of=$TMPDISK bs=1M seek=$SIZE count=1
-
-if [ -n "$IMAGEONLY" ]; then
-    # Build image from chroot
-    sudo vmbuilder $HYPER ubuntu $ARGS \
-      --existing-chroot=$CHROOTDIR \
-      --overwrite \
-      --rootsize=$ROOTSIZE \
-      --swapsize=$SWAPSIZE \
-      --tmpfs - \
-      --raw=$TMPDISK \
-
-else
-    # Do the whole shebang in one pass
-        ARGS="--variant=minbase"
-        for i in $MIN_PKGS; do
-            ARGS="$ARGS --addpkg=$i"
-        done
-    sudo vmbuilder $HYPER ubuntu $ARGS \
-      --suite $RELEASE \
-      --overwrite \
-      --rootsize=$ROOTSIZE \
-      --swapsize=$SWAPSIZE \
-      --tmpfs - \
-      --raw=$TMPDISK \
-
-fi
-
-if [ "$FORMAT" = "raw" ]; then
-    # Get image
-    mv $TMPDISK $RELEASE.$FORMAT
-else
-    # Convert image
-    qemu-img convert -O $QFORMAT $TMPDISK $RELEASE.$FORMAT
-    rm $TMPDISK
-fi
-rm -rf ubuntu-$HYPER
diff --git a/tools/upload_image.sh b/tools/upload_image.sh
deleted file mode 100755
index da73f16..0000000
--- a/tools/upload_image.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/bash
-# upload_image.sh - Upload Ubuntu images (create if necessary) in various formats
-# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc)
-# Requires sudo to root
-
-usage() {
-    echo "$0 - Upload images to OpenStack"
-    echo ""
-    echo "$0 [-h host] [-p port] release format"
-    exit 1
-}
-
-HOST=${HOST:-localhost}
-PORT=${PORT:-9292}
-DEST=${DEST:-/opt/stack}
-
-while getopts h:p: c; do
-    case $c in
-        h)  HOST=$OPTARG
-            ;;
-        p)  PORT=$OPTARG
-            ;;
-    esac
-done
-shift `expr $OPTIND - 1`
-
-RELEASE=$1
-FORMAT=$2
-
-case $FORMAT in
-    kvm|qcow2)  FORMAT=qcow2
-                TARGET=kvm
-                ;;
-    vmserver|vmdk)
-                FORMAT=vmdk
-                TARGET=vmserver
-                ;;
-    vbox|vdi)   TARGET=kvm
-                FORMAT=vdi
-                ;;
-    vhd|vpc)    TARGET=kvm
-                FORMAT=vhd
-                ;;
-    *)          echo "Unknown format: $FORMAT"
-                usage
-esac
-
-case $RELEASE in
-    natty)      ;;
-    maverick)   ;;
-    lucid)      ;;
-    karmic)     ;;
-    jaunty)     ;;
-    *)          if [ ! -r $RELEASE.$FORMAT ]; then
-                    echo "Unknown release: $RELEASE"
-                    usage
-                fi
-                ;;
-esac
-
-GLANCE=`which glance`
-if [ -z "$GLANCE" ]; then
-    if [ -x "$DEST/glance/bin/glance" ]; then
-        # Look for stack.sh's install
-        GLANCE="$DEST/glance/bin/glance"
-    else
-        # Install Glance client in $DEST
-        echo "Glance not found, must install client"
-        OWD=`pwd`
-        cd $DEST
-        sudo apt-get install python-pip python-eventlet python-routes python-greenlet python-argparse python-sqlalchemy python-wsgiref python-pastedeploy python-xattr
-        sudo pip install kombu
-        sudo git clone https://github.com/cloudbuilders/glance.git
-        cd glance
-        sudo python setup.py develop
-        cd $OWD
-        GLANCE=`which glance`
-    fi
-fi
-
-# Create image if it doesn't exist
-if [ ! -r $RELEASE.$FORMAT ]; then
-    DIR=`dirname $0`
-    echo "$RELEASE.$FORMAT not found, creating..."
-    $DIR/make_image.sh $RELEASE $FORMAT
-fi
-
-# Upload the image
-echo "Uploading image $RELEASE.$FORMAT to $HOST"
-$GLANCE add name=$RELEASE.$FORMAT is_public=true disk_format=$FORMAT --host $HOST --port $PORT <$RELEASE.$FORMAT
diff --git a/tools/warm_apts_and_pips.sh b/tools/warm_apts_and_pips_for_uec.sh
similarity index 100%
rename from tools/warm_apts_and_pips.sh
rename to tools/warm_apts_and_pips_for_uec.sh
