Tabla de contenido
¡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