Creating KVM Templates using native KVM procedure¶
Prepare a virtual server with a limited amount of disk space. For example to create a template of a minimal install of CentOS 2GB of disk is enough.
At the partitioning stage create the main / (slash) partition as a primary ext3 or ext4 as large as you can only leaving a few MB on the disk.
Use the existing space as swap creating it as a primary volume.
You should now have a / partition (sda1) and a swap partition (sda2).
Follow the rest of of the install/setup process making sure you set the networking as DHCP until it is complete.
The next step is to make sure the source virtual server is shutdown and ready for packaging. You will also need to know the KVMID and logical volume group name.
On the host node you will need to mount the virtual servers partitions:
kpartx -a /dev/VOLUME_GROUP/KVMID_img
mount /dev/mapper/VOLUME_GROUP-KVMID_img1 /mnt
This has now mounted the / partition on the host to /mnt.
/etc/fstab inside the virtual server needs to be modified to reflect the correct partitions:
It needs to look like this:
/dev/vda1 / ext3 defaults 1 1
/dev/vda2 swap swap defaults 0 0
none /dev/shm tmpfs defaults 0 0
Next lets remove any bash history:
Some distros need the following to get networking working:
chattr +i /mnt/etc/udev/rules.d/70-persistent-net.rules
Unmount the virtual server:
The next step is worth doing as libguestfs will then compress the swap partition. If you don't do this it will make your template a lot larger:
Remove the mappings:
kpartx -d /dev/VOLUME_GROUP/KVMID_img
Sysprep the virtual server:
virt-sysprep -a /dev/VOLUME_GROUP/KVMID_img
The last thing to do is package the template:
virt-sparsify -v /dev/VOLUME_GROUP/KVMID_img -o compat=0.10 --convert qcow2 --compress /home/solusvm/kvm/template/linux-centos-6.6-x86_64-min-gen2-v1.gz