Support VHD output format

This useful for building images for xen.

Change-Id: Ib716bd7fc1ed979968ea92f46f1644038e40df66
This commit is contained in:
Gregory Haynes 2015-02-16 17:20:01 -08:00 committed by Monty Taylor
parent 65ad6377a6
commit 7937fb5392
2 changed files with 32 additions and 2 deletions

View File

@ -45,8 +45,9 @@ function show_options () {
echo "Options:" echo "Options:"
echo " -a i386|amd64|armhf -- set the architecture of the image(default amd64)" echo " -a i386|amd64|armhf -- set the architecture of the image(default amd64)"
echo " -o imagename -- set the imagename of the output image file(default image)" echo " -o imagename -- set the imagename of the output image file(default image)"
echo " -t qcow2,tar,raw -- set the image types of the output image files (default qcow2)" echo " -t qcow2,tar,vhd,raw -- set the image types of the output image files (default qcow2)"
echo " File types should be comma separated" echo " File types should be comma separated. VHD outputting requires the vhd-util"
echo " executable be in your PATH."
echo " -x -- turn on tracing" echo " -x -- turn on tracing"
echo " -u -- uncompressed; do not compress the image - larger but faster" echo " -u -- uncompressed; do not compress the image - larger but faster"
echo " -c -- clear environment before starting work" echo " -c -- clear environment before starting work"
@ -78,6 +79,10 @@ function show_options () {
echo echo
echo "NOTE: At least one distribution root element must be specified." echo "NOTE: At least one distribution root element must be specified."
echo echo
echo "NOTE: If using the VHD output format you need to have a patched version of vhd-util installed for the image"
echo " to be bootable. The patch is available here: https://github.com/emonty/vhd-util/blob/master/debian/patches/citrix"
echo " and a PPA with the patched tool is available here: https://launchpad.net/~openstack-ci-core/+archive/ubuntu/vhd-util"
echo
echo "Examples:" echo "Examples:"
if [ "$IS_RAMDISK" == "0" ]; then if [ "$IS_RAMDISK" == "0" ]; then
echo " ${SCRIPTNAME} -a amd64 -o ubuntu-amd64 vm ubuntu" echo " ${SCRIPTNAME} -a amd64 -o ubuntu-amd64 vm ubuntu"
@ -155,6 +160,24 @@ if [ "${#IMAGE_TYPES[@]}" = "1" ]; then
export IMAGE_NAME=${IMAGE_NAME%%\.${IMAGE_TYPES[0]}} export IMAGE_NAME=${IMAGE_NAME%%\.${IMAGE_TYPES[0]}}
fi fi
# Check for required tools early on
for X in ${!IMAGE_TYPES[@]}; do
case "${IMAGE_TYPES[$X]}" in
qcow2)
if [ -z "$(which qemu-img)" ]; then
echo "qcow2 output format specified but qemu-img executable not found."
exit 1
fi
;;
vhd)
if [ -z "$(which vhd-util)" ]; then
echo "vhd output format specified but no vhd-util executable found."
exit 1
fi
;;
esac
done
# NOTE: Tuning the rootfs uuid works only for ext filesystems. # NOTE: Tuning the rootfs uuid works only for ext filesystems.
# Rely on the below environment variable only for ext filesystems. # Rely on the below environment variable only for ext filesystems.
export DIB_IMAGE_ROOT_FS_UUID=$(uuidgen -r) export DIB_IMAGE_ROOT_FS_UUID=$(uuidgen -r)

View File

@ -117,6 +117,13 @@ function compress_and_save_image () {
fi fi
if [ "$IMAGE_TYPE" = "raw" ]; then if [ "$IMAGE_TYPE" = "raw" ]; then
mv $TMP_IMAGE_PATH $1-new mv $TMP_IMAGE_PATH $1-new
elif [ "$IMAGE_TYPE" == "vhd" ]; then
cp $TMP_IMAGE_PATH $1-intermediate
vhd-util convert -s 0 -t 1 -i $1-intermediate -o $1-intermediate
vhd-util convert -s 1 -t 2 -i $1-intermediate -o $1-new
# The previous command creates a .bak file
rm $1-intermediate.bak
OUT_IMAGE_PATH=$1-new
else else
echo "Converting image using qemu-img convert" echo "Converting image using qemu-img convert"
qemu-img convert ${COMPRESS_IMAGE:+-c} -f raw $TMP_IMAGE_PATH -O $IMAGE_TYPE $EXTRA_OPTIONS $1-new qemu-img convert ${COMPRESS_IMAGE:+-c} -f raw $TMP_IMAGE_PATH -O $IMAGE_TYPE $EXTRA_OPTIONS $1-new