ArchLinux:KVM: Difference between revisions

From Wiki³
No edit summary
Line 34: Line 34:
Then modify the libvirt QEMU config to reflect this.
Then modify the libvirt QEMU config to reflect this.
{{Console|title=/etc/libvirt/qemu.conf|prompt=false|1=user {{=}} "kvm"<br/>group {{=}} "kvm"}}
{{Console|title=/etc/libvirt/qemu.conf|prompt=false|1=user {{=}} "kvm"<br/>group {{=}} "kvm"}}
= {{Icon24|sitemap}} Packer =
Packer is a tool for automating the creating of virtual machines, in this instance it will be used to automate the creation of Vagrant boxes. I have already taken the time to create a packer template for Arch Linux based off of my installation tutorials, but I encourage you to use this only as a basis and delve deeper to create your own templates. I could have very easily just have downloaded someone elses templates but I would then not understand how they work.
{{GitHub|[//github.com/kyau/packer-kvm-templates kyau/packer-kvm-templates]}}
The template file {{mono|archlinux-x86_64-base-vagrant.json}}


= {{Icon24|book-brown}} References =
= {{Icon24|book-brown}} References =

Revision as of 17:10, 7 August 2017

Icon Introduction

This is a tutorial on how to automate the setup of VMs using KVM on Arch Linux. This tutorial uses QEMU as a back-end for KVM and libvirt, Packer and Vagrant.

IconThis tutorial is meant as a supplement to my OVH: Custom Installation tutorial

Icon Installation

Before getting started there are a few packages that will be needed to set all of this up.

# pacaur -S libvirt openssl-1.0 packer-io qemu-headless qemu-headless-arch-extra vagrant

Icon vagrant-libvirt

The libvirt plugin installation for vagrant requires some cleanup first.

# sudo mv /opt/vagrant/embedded/lib/libcurl.so{,.backup}
# sudo mv /opt/vagrant/embedded/lib/libcurl.so.4{,.backup}
# sudo mv /opt/vagrant/embedded/lib/libcurl.so.4.4.0{,.backup}
# sudo mv /opt/vagrant/embedded/lib/pkgconfig/libcurl.pc{,backup}

Then build the plugin.

# vagrant plugin install vagrant-libvirt

Icon Hugepages

Enabling hugepages can improve the performance of virtual machines. First add an entry to the fstab, make sure to first check what the group id of the group kvm is.

# grep kvm /etc/group
# sudoedit /etc/fstab


filename: /etc/fstab
hugetlbfs /dev/hugepages hugetlbfs mode=1770,gid=999 0 0

Instead of rebooting, remount instead.

# sudo umount /dev/hugepages
# mount /dev/hugepages

This can then be verified.

# sudo mount | grep huge
# ls -FalG /dev/ | grep huge

Now to set the number of hugepages to use. For this one has to do a bit of math, for each gigabyte of the system RAM that you want to use for VMs you divide the size in megabytes by two.

IconOn my setup I will dedicated 12GB out of the 16GB of system RAM to VMs. This means (12 * 1024) / 2 or 6144

Set the number of hugepages.

# echo 6144 | sudo tee /proc/sys/vm/nr_hugepages

Also set this permanently by adding a file to /etc/sysctl.d.

filename: /etc/sysctl.d/40-hugepages.conf
vm.nr_hugepages = 6144

Again verify the changes.

# grep HugePages_Total /proc/meminfo

Icon KVM User

Finally create a user for KVM.

# sudo useradd -g kvm -s /usr/bin/nologin kvm

Then modify the libvirt QEMU config to reflect this.

filename: /etc/libvirt/qemu.conf
user = "kvm"
group = "kvm"

Icon Packer

Packer is a tool for automating the creating of virtual machines, in this instance it will be used to automate the creation of Vagrant boxes. I have already taken the time to create a packer template for Arch Linux based off of my installation tutorials, but I encourage you to use this only as a basis and delve deeper to create your own templates. I could have very easily just have downloaded someone elses templates but I would then not understand how they work.

IconGitHub: kyau/packer-kvm-templates

The template file archlinux-x86_64-base-vagrant.json

Icon References