#!/bin/bash
# Requirements: python-virtinst qemu-img libguestfs-mount
# It also works with raw or LVM based images!
usage(){
echo "Usage: BASE_IMAGE_NAME TARGET_IMAGE_NAME [MEMORY IN MB]"
echo "Available base images:"
ls /var/lib/libvirt/images/ | grep base | sed 's/\.img//g'
}
SOURCE_NAME=$1
TARGET_NAME=$2
MEM=${3:-512}
if [ -z "$SOURCE_NAME" -o -z "$TARGET_NAME" ]; then
usage
exit 1
fi
IMAGE_DIR=/var/lib/libvirt/images
SOURCE_IMG=$IMAGE_DIR/$SOURCE_NAME.img
TARGET_IMG=$IMAGE_DIR/$TARGET_NAME.img
MAC="52:54:00$(hexdump -e '/1 ":%02x"' -n 3 /dev/urandom)"
if [ -f "$TARGET_IMG" ]; then
echo "Target image already exists!"
exit 1
fi
echo "Creating snapshot guest $TARGET_NAME"
# -- Image Creation --------------
echo "Creating snapshot image"
qemu-img create -f qcow2 -b $SOURCE_IMG $TARGET_IMG
# -- Image Manipulation ----------
TMPDIR=$(mktemp -d $TARGET_NAME_XXXXXX)
echo "Configuring image volume"
guestmount -a $TARGET_IMG --rw $TMPDIR -i
echo "Setting MAC address"
sed -i -e "s/HWADDR=.*/HWADDR=$MAC/" $TMPDIR/etc/sysconfig/network-scripts/ifcfg-eth0
echo "Setting hostname"
sed -i -e "s/HOSTNAME=.*/HOSTNAME=$TARGET_NAME/" $TMPDIR/etc/sysconfig/network
sed -i -e "s/$SOURCE_NAME/$TARGET_NAME/" $TMPDIR/etc/hosts
umount $TMPDIR
# -- Image Provisioning ---------
echo "Provisioning guest"
virt-install --vcpus 1 --ram $MEM --import --name $TARGET_NAME --disk $TARGET_IMG --vnc --noautoconsole -b br0 -m "$MAC"