Install Cent 7 minimal as virtualised host with all options, enable EPEL repo and then update:
yum install epel-release
yum update
Install extras and start/enable required daemons:
yum install wget vim qemu-kvm libvirt libvirt-python libguestfs-tools virt-install policycoreutils-python
systemctl enable libvirtd && systemctl start libvirtd
Add the fedora virtIO RPM for paravirtualisation with Windows and auto download latest iso to /usr/share/virtio-win:
wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo
yum install virtio-win
Change hostname:
vim /etc/hostname
Get list of partitions:
fdisk -l
Delete the default home partition cent makes:
umount /dev/mapper/[ HOME PART NAME ]
lvremove /dev/mapper/[ HOME PART NAME ]
lvextend -l +100%FREE -r /dev/mapper/[ ROOT PART NAME ]
Remove the following entry in /etc/fstab:
/dev/mapper/[ HOME PART NAME ] /home xfs defaults 0 0
Create a bridge named ‘br0’:
vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=”br0″
BOOTPROTO=”dhcp”
IPV6INIT=”yes”
IPV6_AUTOCONF=”yes”
ONBOOT=”yes”
TYPE=”Bridge”
DELAY=”0″
Find out name of current ethernet adapter eg ‘enp3s0’:
ip addr
Add the bridge to the bottom line of the ethernet adapter file and optionally set IP:
vim /etc/sysconfig/network-scripts/ifcfg-[NAME OF ETH]
BRIDGE=br0
Enable network forwarding:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
Read the above file to modify kernel parameters used at boot time:
sysctl -p /etc/sysctl.conf
Restart NetworkManager so the bridge gets an IP address:
systemctl restart NetworkManager
Open ports ready for VNC or SPICE:
firewall-cmd --zone=public --permanent --add-port=5900/tcp
firewall-cmd --reload
Create directory:
mkdir /vmi
Add a custom rule to global SELinux policy:
semanage fcontext --add -t virt_image_t '/vmi(/.*)?'
Check it’s been added to global policy correctly:
semanage fcontext -l | grep virt_image_t
Apply the context required to the VM directory, it’s read from the custom rule we added to the global policy:
restorecon -R -v /vmi
Verify policy applied correctly:
ls -lashZ /
Virsh commands:
virsh list --all |
List all VMs |
virsh edit [ ] |
Edit XML |
virsh start [ ] |
Start |
virsh shutdown [ ] |
Shutdown |
virsh destroy [ ] |
Force shutdown |
virsh undefine [ ] |
Delete |
virsh pool-list --all |
List all (storage) pools |
virsh pool-destroy [ ] |
Delete pool |
virsh create /vmi/template.XML |
Create VM from template XML |
An example config:
virt-install \
–name=win7 \
–cpu Nehalem \
–vcpus sockets=2,cores=1,threads=1, \
–ram=2048 \
–os-type=windows \
–os-variant=win7 \
–connect qemu:///system \a
–graphics spice,listen=0.0.0.0,password=1 \
–video qxl \
–disk path=/win7u64.iso,device=cdrom \
–disk path=/usr/share/virtio-win/virtio-win.iso,device=cdrom \
–disk path=/vmi/win7.qcow2,size=35,format=qcow2,bus=virtio,cache=writeback \
–network=bridge:br0,model=virtio \
–autostart \
–noautoconsole
To enable two monitors using QXL in conjunction with a SPICE viewer:
<video>
<model type='qxl'>
</video>
<video>
<model type='qxl'>
</video>