Kernel-based Virtual Machine (KVM) is a virtualization module for the Linux kernel that turns it into a hypervisor. How can I install KVM with bridged networking, setup guest operating system as the back-end virtualization technology for non-graphic Ubuntu Linux 16.04 LTS server?
You can use KVM to run multiple operating systems such as Windows, *BSD, Linux distro using virtual machines. Each virtual machine has its private disk, graphics card, a network card and more.
Steps for installing KVM on Ubuntu Linux 16.04 LTS server
- The host server located in the remote data center and it is a headless server.
- All commands in this tutorial typed over the ssh based session.
- You need a vnc client to install the guest operating system.
- In this tutorial, you will learn how to install KVM software on Ubuntu 16.04 LTS server and use KVM to setup your first guest VM.
Follow installation steps of KVM on Ubuntu 16.04 LTS headless sever
Step 1: Install kvm
$ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker
Step 2: Verify kvm installation
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
Step 3: Configure bridged networking
$ sudo cp /etc/network/interfaces /etc/network/interfaces.bakup-1-july-2016
$ sudo vi /etc/network/interfaces
Edit/append as follows:
auto br0 iface br0 inet static address 10.18.44.26 netmask 255.255.255.192 broadcast 10.18.44.63 dns-nameservers 10.0.80.11 10.0.80.12 # set static route for LAN post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.18.44.1 post-up route add -net 161.26.0.0 netmask 255.255.0.0 gw 10.18.44.1 bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0 # br1 setup with static wan IPv4 with ISP router as a default gateway auto br1 iface br1 inet static address 208.43.222.51 netmask 255.255.255.248 broadcast 208.43.222.55 gateway 208.43.222.49 bridge_ports eth1 bridge_stp off bridge_fd 0 bridge_maxwait 0 |
Save and close the file. Restart the networking service, enter:
$ sudo systemctl restart networking
Verify it:
$ sudo brctl show
Step 4: Create your first virtual machine
I am going to create a CentOS 7.x VM. First, grab CentOS 7.x latest ISO image:
$ cd /var/lib/libvirt/boot/
$ sudo wget https://mirrors.kernel.org/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
Create CentOS 7 VM
In this example, I’m creating CentOS 7.x VM with 2GB RAM, 2 CPU core, 2 nics (1 for lan and 1 for wan) and 40GB disk space, enter:
$ sudo virt-install \
--virt-type=kvm \
--name centos7 \
--ram 2048 \
--vcpus=2 \
--os-variant=rhel7 \
--virt-type=kvm \
--hvm \
--cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-DVD-1511.iso \
--network=bridge=br0,model=virtio \
--network=bridge=br1,model=virtio \
--graphics vnc \
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2
To configure vnc login from another terminal over ssh and type:
$ sudo virsh dumpxml centos7 | grep vnc
<graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>
You can also use the following command:
$ sudo virsh vncdisplay centos7
Please note down the port value (i.e. 5901). You need to use an SSH client to setup tunnel and a VNC client to access the remote vnc server. Type the following SSH port forwarding command from your client/desktop:
$ ssh [email protected] -L 5901:127.0.0.1:5901
Useful commands
Let us see some useful commands.
Find the list of the accepted OS variants
$ osinfo-query os | less
$ osinfo-query os | grep debian
$ osinfo-query os | grep freebsd
List a running vms/domains
$ sudo virsh list
Shutodwn a vm/domain called openbsd
$ sudo virsh shutdown openbsd
Start a vm/domain called openbsd
$ sudo virsh start openbsd
Suspend a vm/domain called openbsd
$ sudo virsh suspend openbsd
Reboot (soft & safe reboot) a vm/domain called openbsd
$ sudo virsh reboot openbsd
Reset (hard reset/not safe) a vm/domain called openbsd
$ sudo virsh reset openbsd
Delete/remove a vm/domain called openbsd
$ sudo virsh undefine openbsd
$ sudo virsh destroy openbsd
To see a complete list of virsh command type
$ virsh help | less
$ virsh help | grep reboot