#!/bin/bash
# make_image.sh - Create Ubuntu images in various formats
#
# make_image.sh release format
#
# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc)
#
# Requires sudo to root

ROOTSIZE=${ROOTSIZE:-8192}
SWAPSIZE=${SWAPSIZE:-1024}

usage() {
    echo "$0 - Create Ubuntu images"
    echo ""
    echo "$0 [-r rootsize] [-s swapsize] release format"
    exit 1
}

while getopts hm:r:s: c; do
    case $c in
        h)	usage
		;;
	m)	MIRROR=$OPTARG
		;;
	r)	ROOTSIZE=$OPTARG
		;;
	s)	SWAPSIZE=$OPTARG
		;;
    esac
done
shift `expr $OPTIND - 1`

RELEASE=$1
FORMAT=$2

case $RELEASE in
    natty)	;;
    maverick)	;;
    lucid)	;;
    karmic)	;;
    jaunty)	;;
    *)		echo "Unknown release: $RELEASE"
		usage
esac

case $FORMAT in
    kvm|qcow2)	FORMAT=qcow2
		TARGET=kvm
		;;
    vmserver|vmdk)	FORMAT=vmdk
		TARGET=vmserver
		;;
    vbox|vdi)	FORMAT=qcow2
		TARGET=kvm
		FINAL_FORMAT=vdi
		;;
    vhd|vpc)	FORMAT=qcow2
		TARGET=kvm
		FINAL_FORMAT=vpc
		;;
    *)		echo "Unknown format: $FORMAT"
		usage
esac

# Install stuff if necessary
if [ -z `which vmbuilder` ]; then
	sudo apt-get install ubuntu-vm-builder
fi

# Build the image
sudo vmbuilder $TARGET ubuntu --suite $RELEASE \
  -o \
  --rootsize=$ROOTSIZE \
  --swapsize=$SWAPSIZE \
  --tmpfs - \
  --addpkg=openssh-server \

#  --mirror=$MIRROR \

if [ -z "$FINAL_FORMAT" ]; then
    # Get image
    mv ubuntu-$TARGET/tmp*.$FORMAT $RELEASE.$FORMAT
else
    # Convert image
    qemu-img convert -O $FINAL_FORMAT ubuntu-$TARGET/tmp*.$FORMAT $RELEASE.$FINAL_FORMAT
fi
rm -rf ubuntu-$TARGET