multiple step version of building a ramdisk pxeboot installer
diff --git a/build_pxe_ramdisk.sh b/build_pxe_ramdisk.sh
new file mode 100755
index 0000000..0f598f8
--- /dev/null
+++ b/build_pxe_ramdisk.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+if [ ! "$#" -eq "1" ]; then
+    echo "$0 builds a gziped natty openstack install"
+    echo "usage: $0 dest"
+    exit 1
+fi
+
+# Source params
+source ./stackrc
+
+# clean install of natty
+if [ ! -d natty-base ]; then
+    debootstrap natty natty-base
+    # copy kernel modules...  
+    # NOTE(ja): is there a better way to do this?
+    cp -pr /lib/modules/`uname -r` proto/lib/modules
+    cp files/sources.list natty-base/etc/apt/sources.list
+    chroot natty-base apt-get update
+fi
+
+# prime natty with as many apt/pips as we can
+if [ ! -d primed ]; then
+    rsync -azH natty-base/ primed/
+    chroot primed apt-get install -y `cat files/apts/* | cut -d\# -f1 | egrep -v "(rabbitmq|libvirt-bin|mysql-server)"`
+    chroot primed 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 primed groupadd libvirtd
+    chroot primed useradd stack -s /bin/bash -d /opt -G libvirtd
+
+    # a simple password - pass
+    echo stack:pass | chroot primed chpasswd
+
+    # and has sudo ability (in the future this should be limited to only what 
+    # stack requires)
+    echo "stack ALL=(ALL) NOPASSWD: ALL" >> primed/etc/sudoers
+fi
+
+# clone git repositories onto the system
+# ======================================
+
+if [ ! -d cloned ]; then
+    rsync -azH primed/ cloned/
+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=cloned$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 cloned/ chown -R stack $2
+}
+
+git_clone $NOVA_REPO /opt/stack/nova $NOVA_BRANCH
+git_clone $GLANCE_REPO /opt/stack/glance $GLANCE_BRANCH
+git_clone $KEYSTONE_REPO /opt/stack/keystone $KEYSTONE_BRANCH
+git_clone $NOVNC_REPO /opt/stack/novnc $NOVNC_BRANCH
+git_clone $DASH_REPO /opt/stack/dash $DASH_BRANCH
+git_clone $NIXON_REPO /opt/stack/nixon $NIXON_BRANCH
+git_clone $NOVACLIENT_REPO /opt/stack/python-novaclient $NOVACLIENT_BRANCH
+git_clone $OPENSTACKX_REPO /opt/stack/openstackx $OPENSTACKX_BRANCH
+git_clone $MUNIN_REPO /opt/stack/openstack-munin $MUNIN_BRANCH
+
+# build a new image
+BASE=build.$$
+IMG=$BASE.img
+MNT=$BASE/
+
+# create a 2GB blank filesystem
+dd if=/dev/zero of=$IMG bs=1024k count=2048
+# force it to be initialized as ext2
+mkfs.ext2 -F $IMG
+
+# mount blank image loopback and load it
+mkdir -p $MNT
+mount -o loop $IMG $MNT
+rsync -azH cloned/ $MNT
+
+# umount and cleanup
+umount $MNT
+rmdir $MNT
+
+# gzip into final location
+gzip -1 $IMG -c > $1
+