Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #!/bin/bash
  2. # Requirements: python-virtinst qemu-img libguestfs-mount
  3. # It also works with raw or LVM based images!
  4.  
  5. usage(){
  6.   echo "Usage: BASE_IMAGE_NAME TARGET_IMAGE_NAME [MEMORY IN MB]"
  7.   echo "Available base images:"
  8.   ls /var/lib/libvirt/images/ | grep base | sed 's/\.img//g'
  9. }
  10.  
  11. SOURCE_NAME=$1
  12. TARGET_NAME=$2
  13. MEM=${3:-512}
  14.  
  15. if [ -z "$SOURCE_NAME" -o -z "$TARGET_NAME" ]; then
  16.   usage
  17.   exit 1
  18. fi
  19.  
  20. IMAGE_DIR=/var/lib/libvirt/images
  21. SOURCE_IMG=$IMAGE_DIR/$SOURCE_NAME.img
  22. TARGET_IMG=$IMAGE_DIR/$TARGET_NAME.img
  23. MAC="52:54:00$(hexdump -e '/1 ":%02x"' -n 3 /dev/urandom)"
  24.  
  25. if [ -f "$TARGET_IMG" ]; then
  26.   echo "Target image already exists!"
  27.   exit 1
  28. fi
  29.  
  30. echo "Creating snapshot guest $TARGET_NAME"
  31.  
  32. # -- Image Creation --------------
  33.  
  34. echo "Creating snapshot image"
  35. qemu-img create -f qcow2 -b $SOURCE_IMG $TARGET_IMG
  36.  
  37. # -- Image Manipulation ----------
  38.  
  39. TMPDIR=$(mktemp -d $TARGET_NAME_XXXXXX)
  40. echo "Configuring image volume"
  41. guestmount -a $TARGET_IMG --rw $TMPDIR -i
  42. echo "Setting MAC address"
  43. sed -i -e "s/HWADDR=.*/HWADDR=$MAC/" $TMPDIR/etc/sysconfig/network-scripts/ifcfg-eth0
  44. echo "Setting hostname"
  45. sed -i -e "s/HOSTNAME=.*/HOSTNAME=$TARGET_NAME/" $TMPDIR/etc/sysconfig/network
  46. sed -i -e "s/$SOURCE_NAME/$TARGET_NAME/" $TMPDIR/etc/hosts
  47. umount $TMPDIR
  48.  
  49. # -- Image Provisioning ---------
  50.  
  51. echo "Provisioning guest"
  52. virt-install --vcpus 1 --ram $MEM --import --name $TARGET_NAME --disk $TARGET_IMG --vnc --noautoconsole -b br0 -m "$MAC"