#!/bin/sh # depends on following packages: # apt-get install virtinst libvirt-bin dosfstools mtools kvm kvm-qemu # apt-get install -t wheezy util-linux # defaults, configurable in config VG='vg01' ETC='/etc/cloudinit' CONFIG="$ETC/cloudinit.cfg" VARDIR='/var/lib/libvirt/cloudinit' SCRIPTDIR='/usr/local/bin/leap_cloudadmin' KVM_URI='qemu:///system' # overwrite defaults [ -e $CONFIG] && . $CONFIG # unconfigurable variables # swapsize is swapsize of the base image SWAPSIZE=4 MIN_DISKSIZE=10 fail() { [ $# -eq 0 ] || echo "$@"; exit 1; } bad_usage() { usage 1>&2; [ $# -eq 0 ] || fail "$@"; exit 1; } usage() { cat <~/.mtoolsrc [ -e $VARDIR ] || ( mkdir $VARDIR ; chown libvirt-qemu $VARDIR ) vmname=$1 userdata="$ETC/$vmname-user-data" [ -e /dev/$VG/$vmname ] && fail "/dev/$VG/$vmname exists - please delete it or choose another guest name" [ -e $userdata ] || fail "please provide userdata in $userdata" echo echo "Creating guest VM $vmname with size: $size GB, using $userdata for clound-init" echo # is a VM with the same name defined ? virsh dominfo $vmname > /dev/null 2>&1 if [ $? -eq 0 ]; then fail "Domain $vmname is defined in libvirt. Please undefine first."; fi lvcreate -L ${size}g -n $vmname $VG virt-clone --connect $KVM_URI -o leap-baseimage-wheezy -n $vmname -f /dev/$VG/$vmname --force # resize second (root) partition echo ",+," | sfdisk -N2 /dev/$VG/$vmname > /dev/null $SCRIPTDIR/libvirt-make-seed-disk $VARDIR/$vmname-user-data.img $userdata $SCRIPTDIR/libvirt-write-disk-attach-xml $VARDIR/$vmname-user-data.img > $VARDIR/$vmname-disk-attach.xml echo echo "Attached userdata-disk is at $VARDIR/$vmname-user-data.img" echo echo "Finished creating guest $vmname. Enjoy." echo echo "Press to start the new guest." read bogus echo echo 'Starting new guest, attaching to console. Exit with Ctrl+]' echo virsh start $vmname sleep 2 virsh attach-device $vmname $VARDIR/$vmname-disk-attach.xml virsh console $vmname #do we really need to detach the cloud-init disk ? #virsh detach-device $vmname $VARDIR/$vmname-disk-attach.xml