remove old build scripts and clean for those that work

Change-Id: I5c156879f3c85f1555a1411695ac43cefbbf3b99
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