6,203 bytes added ,  16 October 2020
m
no edit summary
iwu
 
mNo edit summary
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''Kernel-based Virtual Machine'''. A hypervisor technology featuring tight integration to Linux kernel.
'''Kernel-based Virtual Machine'''. A hypervisor technology featuring tight integration to Linux kernel.
= Installation =
== Creating a RHEL 8.2 VM ==
{{testedon|2020-06-30|RHEL 8.2}}
<source lang="console">
# virt-install --name=iqbal --vcpus=2 --memory=2048 --cdrom=/home/mhan/Downloads/rhel-8.2-x86_64-boot.iso --disk size=5 --os-variant=rhel8.2 --graphics vnc
</source>
Checking which port VNC is connected to
<source lang="console">
# virsh vncdisplay vm-name
</source>
Attaching a CD-ROM
<source lang="console">
# virsh attach-disk iqbal /var/lib/libvirt/boot/rhel-8.2-x86_64-boot.iso --type cdrom --mode readonly --target sda --targetbus sata
</source>
== Installing on CentOS 7.5 ==
* ''Tested on CentOS 7.5.1804''
== Install packages and start libvirtd ==
Install required packages:
<source lang="bash">
# yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
</source>
Start the libvirtd service:
<source lang="bash">
# systemctl enable libvirtd
# systemctl start libvirtd
</source>
Make sure KVM module loaded using lsmod command:
<source lang="bash">
# lsmod | grep -i kvm
kvm_intel            178927  0
kvm                  578558  1 kvm_intel
irqbypass              13503  1 kvm
</source>
= Configuration =
== Configure bridged networking ==
Libvirtd configures a dhcpd-based network bridge by default.  You can check in the following way:
<source lang="bash">
# brctl show
bridge name    bridge id              STP enabled    interfaces
virbr0          8000.525400f0c02d      yes            virbr0-nic
# virsh net-list
Name                State      Autostart    Persistent
----------------------------------------------------------
default              active    yes          yes
</source>
Default configuration allows all VMs to access other VMs but not the network that the host machine is on. You can check the private network created by default:
<source lang="bash">
# virsh net-dumpxml default
<network>
  <name>default</name>
  <uuid>51beab57-eb0c-40b9-bb5e-957f31c1b489</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:f0:c0:2d'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>
</source>
Add the following line to <span class="package">/etc/sysconfig/network-scripts/ifconfig-enp3s0</span>:
<source lang="ini">
BRIDGE=br0
</source>
Create a new file <span class="package">/etc/sysconfig/network-scripts/ifcfg-br0</span>:
<source lang="ini">
DEVICE="br0"
# I am getting ip from DHCP server #
BOOTPROTO="dhcp"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
ONBOOT="yes"
TYPE="Bridge"
DELAY="0"
</source>
Restart the networking service:
<source lang="bash">
# systemctl restart NetworkManager
</source>
Check with brctl command:
<source lang="bash">
# brctl show
</source>
== Create and set up a storage pool ==
Define a storage pool:
<source lang="bash">
# virsh pool-define-as --name libvirt-images --type dir --target /var/lib/libvirt/images --source-format raw
Pool libvirt-images defined
</source>
Set it to autostart on boot:
<source lang="bash">
# virsh pool-autostart libvirt-images
Pool libvirt-images marked as autostarted
</source>
Start for now:
<source lang="bash">
# virsh pool-start libvirt-images
Pool libvirt-images started
</source>
== Instantiation ==
== Create a VM ==
This example creates an Ubuntu VM:
<source lang="bash">
# virt-install --virt-type=kvm --name ubuntu1 --memory 4096  --vcpus 2 --os-variant ubuntu17.04 --os-type Linux --cdrom=/var/lib/libvirt/boot/ubuntu-18.04-desktop-amd64.iso --network bridge=br0,model=virtio --graphics vnc --disk path=/var/lib/libvirt/images/ubuntu1.qcow2,size=40,bus=virtio,format=qcow2
WARNING  Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package.
WARNING  No console to launch for the guest, defaulting to --wait -1
Starting install...
Allocating 'ubuntu1.qcow2'                                                                                              |  40 GB  00:00:00
Domain installation still in progress. Waiting for installation to complete.
</source>
== Connect via VNC and complete installation ==
Get port number for VNC:
<source lang="bash">
# virsh dumpxml ubuntu1 | grep vnc
    <graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
</source>
Create a SSH tunnel:
<source lang="bash">
$ ssh mhan@chara -L 5900:127.0.0.1:5900
</source>
and then use a VNC client to connect to 127.0.0.1 (aka localhost) with port of 5900.
== Mount guest image ==
Make sure to have right packages:
<source lang="bash">
# yum install libguestfs-tools
</source>
Mount to /mnt:
<source lang="bash">
# guestmount -a /var/lib/libvirt/images/ubuntu1.qcow2 -m /dev/sda1 /mnt
</source>
Unmount /mnt:
<source lang="bash">
# guestunmount /mnt
</source>
= Commands =
== Deleting ==
Note storage files. Shutdown. And delete.
<source lang="console">
# virsh dumpxml --domain openbsd | grep 'source file'
# virsh shutdown --domain openbsd
# virsh destroy -- domain openbsd
# virsh undefine -- domain openbsd
# rm -rf /var/lib/libvirt/images/openbsd.qcow2
</source>
When there are snapshots.
<source lang="console">
# virsh snapshot-list --domain openbsd
# virsh snapshot-delete --domain openbsd --snapshotname 3sep2016u1
</source>
Removing with all storage.
<source lang="console">
# virsh undefine --domain mysql-server
</source>
= Links =
* https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/
* https://www.thegeekstuff.com/2014/10/linux-kvm-create-guest-vm/
* https://www.techotopia.com/index.php/Installing_a_KVM_Guest_OS_from_the_Command-line_(virt-install)
* https://www.tecmint.com/kvm-management-tools-to-manage-virtual-machines/
* https://www.server-world.info/en/note?os=Ubuntu_18.04&p=kvm&f=2
* Image management
** https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c02814204
* QEMU (System Emulation)
** [https://www.qemu.org/docs/master/system/quickstart.html System Emulation User Guide]
** [https://www.kraxel.org/blog/2019/09/display-devices-in-qemu/ VGA and other display devices in qemu]