Compilar e instalar qemu-kvm y libvirt

¡Hola de nuevo! En este artículo queremos mostrar como compilar e instalar qemu-kvm y libvirt en varias distribuciones linux para tener una virtualización totalmente funcional.

En la instalación que ejecutaremos todo se gestionará desde CLI por lo que es valido tanto para sistemas de escritorio como para servidores.

¡Empezamos!

Compilar libvirt

Empezamos compilando e instalando libvirt. Para ello tenemos que instalar distintas dependencias dependiendo del sistema. Mostraremos como hacerlo tanto en CentOS como en Ubuntu. Antes de empezar, el sistema tiene que estar actualizado lo máximo posible.

Ubuntu:

apt install  ninja-build automake gcc  make zlib1g zlib1g-dev libpixman-1-0 libpixman-1-dev flex bison  numad libnuma-dev numactl  libtool gnutls-bin libghc-gnutls-dev libnl-genl-3-dev libxml2-dev  libtirpc-dev python3-docutils libdevmapper-dev libpciaccess-dev  rpcbind  libreadline-dev libyajl-dev libxslt-dev bzip2 meson libssh-4 libssh-dev libiscsi-bin libiscsi-dev xsltproc libcurl-ocaml libcurl-ocaml-dev fuse libfuse-dev libglusterfs-dev libgfapi0 libssh2-1 libssh2-1-dev libdevmapper-dev libparted-dev libxml2-utils pkg-config libglib2.0-dev

pip install -U meson==0.54.0

pip install ninja -U

groupadd --system libvirt
usermod -a -G libvirt $(whoami)
useradd -s /usr/bin/nologin libvirt-qemu

Centos7

yum install -y automake gcc  make glibc glibc-utils glib2-devel zlib-devel pixman-devel flex bison  numad numactl-devel numactl-libs numactl  libtool gnutls-utils  gnutls-devel  libnl3-devel libxml2-devel  libtirpc-devel python3-docutils device-mapper-devel libpciaccess-devel  rpcbind  readline-devel rpcgen yajl-devel libxslt-devel bzip2 meson libssh libssh-devel libiscsi libiscsi-devel

pip3 install rst2html5

pip install -U meson==0.54.0

pip install ninja -U

systemctl stop libvirtd

Ahora compilamos libvirt:

wget https://libvirt.org/sources/libvirt-6.9.0.tar.xz
tar xvfz libvirt-6.9.0.tar.xz 
xzcat libvirt-6.9.0.tar.xz | tar xv 
cd libvirt-6.9.0

meson build -D libssh2=enabled -D libssh=enabled -D glusterfs=enabled -D driver_qemu=enabled -D driver_vmware=enabled -D storage_mpath=enabled -D storage_lvm=enabled -D storage_iscsi=enabled -D storage_gluster=enabled -D storage_fs=enabled -D storage_disk=enabled -D driver_esx=enabled -D readline=enabled -D numad=enabled -D docs=disabled -D init_script=systemd -D system=true -D driver_qemu=enabled -D fuse=enabled -D prefix=/usr -D sharedstatedir=/var/lib -D localstatedir=/var -D curl=enabled -D sysctl_config=enabled

ninja -C build
sudo ninja -C build install

systemctl daemon-reload
systemctl start libvirtd-tcp.socket
systemctl enable libvirtd-tcp.socket
systemctl start libvirtd

Para poder hacer migraciones en caliente entre varios servidores de una forma rapida, configuraremos la migración sin autenticación.

[root@hypervisor1 libvirt-6.9.0]# cat /etc/libvirt/libvirtd.conf | grep auth_tcp
#auth_tcp = "sasl"
auth_tcp = "none"

También es necesario configurar la variable mech_list:

[root@hypervisor1 libvirt-6.9.0]# cat /etc/sasl2/libvirt.conf |grep -v "^#" |grep -v "^$"
mech_list: gssapi
[root@hypervisor1 libvirt-6.9.0]# 

Si reiniciamos libvirt-tcp.socket

[root@hypervisor1 libvirt-6.9.0]# systemctl restart libvirtd-tcp.socket
[root@hypervisor1 libvirt-6.9.0]# ss -putan|grep 16509
tcp LISTEN 0 4096 *:16509 *:* users:(("systemd",pid=1,fd=42))     

Qemu

Ahora que ya tenemos instalado libvirt, vamos a compilar Qemu a prepararlo para funcionar con libvirt. Al igual que ocurre en la compilación de livirt, para la compilación e instalación debemos realizar unos pasos previos que son distintos dependiendo del sistema operativo:

CentOS

 yum install -y spice-server spice-protocol SDL2-devel spice-protocol-devel spice-server-devel libusb libusb-devel libusb libusb-devel  usbredir usbredir-devel libnfs libnfs-devel wget; 

Ubuntu

apt install libcacard-dev libcacard0 pkg-config ninja-build libcurl-ocaml libcurl-ocaml-dev  libglib2.0-0 libglib2.0-dev libspice-server1 libspice-server-dev libusb-1.0-0 libusb-1.0-0-dev libusbredirhost1 libusbredirhost-dev libnfs-dev meson libpixman-1-0 libpixman-1-dev libsdl2-2.0-0 libsdl2-dev wget

Después debemos descargar el paquete de Qemu que vamos a compilar:

wget https://download.qemu.org/qemu-5.2.0.tar.xz
tar xvJf qemu-5.2.0.tar.xz
cd qemu-5.2.0

Ya estando dentro del directorio vamos a compilar con el siguiente comando:

./configure --prefix=/usr/local/qemu-kvm --enable-vhost-net --enable-kvm --enable-smartcard --enable-attr --enable-spice --enable-pie --enable-linux-user --enable-curl --enable-vnc --enable-sdl --enable-libusb --enable-usb-redir --enable-libnfs --enable-tools && make -j 20 && make install

Para finalizar tenemos que generar el enlace simbolico que hará que nuestro libvirt use la versión de qemu que acabamos de compilar e instalar:

ln -sf /usr/local/qemu-kvm/bin/qemu-system-x86_64 /usr/libexec/qemu-kvm

Para finalizar, debemos crear un enlace

Enlaces de interés

https://libvirt.org/sources/
https://libvirt.org/compiling.html#compiling
https://mesonbuild.com/Running-Meson.html

Deja una respuesta