Inicio
Artículos
Categorias
Etiquetas
Virtualizando con KMV libvirt y virt-manager en Mx-linux
publicado el: 2022-1-17   actualizado el: 2022-1-17   incluido en: Virtualización , Linux
palabras totales: 1965   tiempo de lectura: 10 mins  

Pequeño tutorial para la instalación de KMV en Mx-linux.

Instalar Qemu/KVM, libvirt y virt-manager en MX-Linux para Virtualización

libvirt está compuesto por una API de administración (de código abierto) y un demonio con el que se puede interactuar con su pila de virtualizaciónes. Es una herramienta para la administración de máquinas virtuales, soporta los siguientes hypervisores KVM/Qemu, Xen, LXC, OpenVZ, VirtualBox, Hyper-V, y de VMware soporta ESX y Workstation.

KVM (Kernel based Virtual Machine) es un módulo del kernel de linux que permite utilizar las extensiones de virtualización de los procesadores. KMV está soportado en casi todos los procesadores actuales ya sean Intel (vmx) o AMD (svm), tanto para arquitectura x86 como x86_64.

virt-manager es una aplicación de escritorio para administrar maquinas virtuales por medio de libvirt, su principal foco es para máquinas virtuales en KVM, pero también soporta Xen y LXC, su interfaz permite ver un resumen de las máquinas y una vista rápida de los recursos utilizados, tiene un asistente para crear Máquinas Virtuales, tiene un cliente VNC y SPICE para tener acceso a la consola gráfica de las máquinas virtuales.

Pasos para instalar y habilitar KVM en Mx-Linux

Confirmación del soporte de virtualización

Lo primero que hay que realizar es verificar que el procesador del equipo soporta las extensiones de virtualización, si la máquina donde voy a probar tiene un procesador fabricado aproximadamente después del 2006 no debería tener problema, siempre y cuando no sean de la gama baja, Intel Atom, Intel Celeron.

Como dije al principio, necesito un sistema con un procesador Intel o AMD que tenga habilitada la extensión de virtualización. Por lo tanto, para confirmarlo, abro el terminal de comandos y ejecuto los siguientes comandos:

1
2
$ egrep -c '(vmx | svm)' /proc/cpuinfo
$ grep -E --color '(vmx | svm)' /proc/cpuinfo

La salida del primer comando debería ser mayor que cero (podría ser 1, 2, 6 u 8). Si es así, el sistema admite la virtualización.

Y si no es así, primero debo reiniciar el sistema e ingresar al BIOS del sistema. Habilitar allí la virtualización y luego iniciar el sistema operativo donde nuevamente debo ejecutar el comando anterior para confirmar de nuevo que está habilitada la extensión de virtualización.

Con el segundo comando , obtengo información sobre su CPU, ya sea Intel o AMD. Si el texto de salida de color rojo es VMX, entonces es Intel, mientras que SVM significa AMD .

1
2
3
4
5
Enrique@esc-pc:~
$ egrep -c '(vmx | svm)' /proc/cpuinfo
8
Enrique@esc-pc:~
$ grep -E --color '(vmx | svm)' /proc/cpuinfo

Actualización del sistema.

Actualizo el sistema antes de continuar con la instalación.

1
2
$ sudo apt-get update
$ sudo apt-get dist-upgrade

Instalación de QEMU-KVM y Libvirt en Mx-Linux

El siguiente es el comando que descargará e instalará todo lo necesario para la instalación de Qemu, el hipervisor KVM y Libvirt en Mx-Linux.

1
$ sudo apt-get install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon

Antes de continuar, debo confirmar que el demonio de virtualización, libvritd-daemon, se está ejecutando. Para hacerlo, ejecuto el comando service libvirtd status.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$ service libvirtd status
● libvirtd.service - Virtualization daemon
     Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-01-16 18:57:14 CET; 2h 16min ago
TriggeredBy: ● libvirtd.socket
             ● libvirtd-admin.socket
             ● libvirtd-ro.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
   Main PID: 1008 (libvirtd)
      Tasks: 22 (limit: 32768)
     Memory: 34.4M
        CPU: 10.636s
     CGroup: /system.slice/libvirtd.service
             ├─1008 /usr/sbin/libvirtd
             ├─3090 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib>
             └─3091 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib>

Warning: some journal files were not opened due to insufficient permissions.
lines 1-18/18 (END)

Para verificar si los módulos KVM están cargados, ejecuto el comando $ lsmod | grep -i kvm:

1
2
3
4
$ lsmod | grep -i kvm
kvm_intel             327680  0
kvm                   921600  1 kvm_intel
irqbypass              16384  1 kvm

Puede observarse la presencia del módulo kvm_intel. Este es el caso de los procesadores Intel.

Para que no me pida la contraseña del usuario cada vez que inicio la aplicación voy a añadir el usuario al grupo libvirt.

1
$ sudo usermod -a -G libvirt Enrique

Instalación de la GUI Virt-Manager para KVM

Virt-Manager , es la interfaz gráfica de usuario desarrollada por RedHat para crear, administrar y ejecutar máquinas virtuales usando KVM pero gráficamente. La instalo desde la línea de comandos.

1
$ sudo apt install virt-manager -y

Configuración de la red

Para enumerar la red disponible para usar en máquinas virtuales KVM, puedo ejecutar el siguiente comando:

1
2
3
4
$ sudo virsh net-list --all
 Nombre    Estado     Inicio automático   Persistente
----------------------------------------------------------------------------
 default    inactivo     no                     si

Una vez ejecutado el comando, veo que la red predeterminada no está activa y tampoco configurada para iniciarse automáticamente con un reinicio del sistema. Por lo tanto, para activarlo e iniciarlo automáticamente, debo ejecutar los siguientes comandos:

1
2
$ sudo virsh net-start default
$ sudo virsh net-autostart default

Puedo comprobar la red de nuevo …

1
2
3
4
$ sudo virsh net-list --all
 Nombre    Estado   Inicio automático   Persistente
----------------------------------------------------------------------------
 default    activo     si                    si

Aparece activa. Ahora puedo encontrarla junto a las demás.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
$ ip ad show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 94:c6:91:ac:df:b5 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 18:1d:ea:a5:f3:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.3/24 brd 192.168.100.255 scope global noprefixroute wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::2eee:2aa7:4f7b:c13c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:89:f3:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

Agregando un “vhost_net”

Para mejorar el rendimiento de la transferencia de datos en la red y reducir la carga de virtio-net, se puede agregar un vhost_net en nuestro equipo linux usando el siguiente comando:

1
$ sudo modprobe vhost_net

vhost-net es el backend (lado del host) mientras que virtio-net (lado del invitado) es el frontend que se ejecuta en el espacio del kernel invitado. Para saber más sobre ellos, puedo consultar: Vhost-net y Virtio-networking

Para comprobar que se ha habilitado ejecuto el comando:

1
$ lsmod | grep vhost

Nota : Este paso no es necesario si no se desea.

Creando una red puente (opcional)

Aunque el KVM viene con una interfaz de red puente llamada “ virbr0 ″ , sin embargo, eso no nos permitirá acceder a la máquina virtual KVM desde la PC host utilizando alguna otra computadora en la red debido al rango de IP asignado. Por lo tanto, se puede crear nuestra propia interfaz de puente completo sobre el nic físico del sistema host que tendrá el rango de IP de nuestra red.

Busco la interfaz de red física adjunta a mi sistema host que desea utilizar para el puente

1
$ ip a

Veré todas las interfaces de red disponibles en mi máquina host. Anoto el que deseo utilizar para la red Bridge.

Por ejemplo , aquí tenemos wlan0 y la dirección IP es 192.168.100.3. Por lo tanto, el rango está entre 192.168.100.1-192.168.100.255

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
$ ip ad show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 94:c6:91:ac:df:b5 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 18:1d:ea:a5:f3:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.3/24 brd 192.168.100.255 scope global noprefixroute wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::2eee:2aa7:4f7b:c13c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:89:f3:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

Ahora, edito el archivo de interfaz de red :

1
sudo nano / etc / network / interfaces

Agrego las siguientes líneas:

Nota : cambiar los valores según la red de cada cual.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#Configure bridge y dele una ip estática 
auto virbr0 
iface virbr0 inet static 
        address 192.168.0.100 //cambiar
        netmask 255.255.255.0 
        network 192.168.0.1 //cambiar
        broadcast 192.168.0.255 //cambiar
        gateway 192.168.0.1 //cambiar
        bridge_ports wlan0 
        bridge_stp off 
        bridge_fd 0 
        bridge_maxwait 0 
        dns-nameservers 8.8.8.8 4.4.2.2

Guardar el archivo pulsando Ctrl + O, y la salida usando Ctrl + X .

Nota : Si desea que el puente obtenga una dirección IP mediante DHCP :

Luego, en lugar de la configuración anterior, use esta:

1
2
3
4
5
6
## DHCP ip config file for virbr0 ##
auto virbr0
 
# Bridge setup
 iface virbr0 inet dhcp
    bridge_ports wlan0

Reinicio el administrador de red para aplicar los cambios.

1
2
3
$ sudo systemctl restart networking.service
or
$ sudo /etc/init.d/networking restart

Verifico la dirección IP

1
$ ip a

Esta vez veré mi interface puente virtbr0 recién creada junto con otras.

Creando máquinas virtuales usando Virt-Manager GUI

Nota: para realizar la creación y ejecución de máquinas virtuales desde la línea de comando con Virt y KVM, simplemente seguiría el enlace anterior.

Desde el entorno gráfico, Mx-Linux puedo utilizar Virt-Manager.

Ejecuto Virt-Manager

Voy al lanzador de aplicaciones, busco “Administrador de máquinas virtuales” (VVM) y lo ejecuto. Antes de que se abra, el sistema me pide que proporcione la contraseña de root. Esto me permite crear y administrar máquinas virtuales.

Creo una máquina virtual:

Hago clic en el icono de la PC para crear una nueva máquina virtual en Virt-Manager usando KVM.

Localizo el volumen de medios ISO

Hago clic en el botón Examinar y luego ubico el archivo ISO que deseo usar para instalar un sistema operativo en mi máquina virtual como sistema operativo invitado.

Después de eso, desmarco la casilla " Detectar automáticamente desde el medio / fuente de instalación " y luego hago clic en el botón Adelante .

Elijo la configuración de memoria y CPU

Establezco la cantidad de memoria virtual que deseo asignar a la VM y luego la cantidad de núcleos de CPU.

Crear imagen de disco virtual Qemu

Para instalar el sistema operativo invitado de VM, necesito algo de espacio de almacenamiento y para eso, tengo que crear un archivo de imagen de disco. Simplemente indico la cantidad de espacio en el disco duro que deseo asignar y sigo adelante.

Red

Nombro mi máquina virtual, aquí. Además, de forma predeterminada, Virt-manager usará el NAT , sin embargo, puedo seleccionar la interfaz Bridge, ya sea la predeterminada, es decir , vibr0 , o la que he creado. En caso de duda, seleccionaria la NAT predeterminada.

Máquina virtual Qemu KVM en Mx-Linux

Finalmente, tengo una máquina virtual iniciada que se puede controlar como cualquier computadora física usando un teclado y un mouse.

Nota: para poder utilizar correctamente la consola gráfica de cada máquina virtual debo seleccionar la máquina a ejecutar y hacer clic en el botón Abrir del gestor de máquinas virtuales. Se abre una ventana que muestra los detalles y la consola gráfica de la máquina virtual. En ella elijo el botón (fondo azul con una letra i en blanco) que me permite mostrar los detalles del hardware virtual. Selecciono Monitor VNC y en los detalles elijo en la pestaña Tipo la opción Servidor VCN, en mi caso con la opción Servidor Spice no funciona la consola gráfica.