Author: Jesús E.
Category: Tutorial
Date: 2020-05-03 03:12
Modified: 2022-03-22 05:55
Diaspora: https://diasp.org/u/heckyel
Image: 2020/05/virt-manager.jpg
Lang: es
Mastodom: https://masto.nobigtech.es/@heckyel
Slug: instalar-un-gestor-de-maquinas-virtuales-en-hyperbola-gnulinux-libre
Tags: maquinas virtuales, tutorial
Title: Instalar un gestor de máquinas virtuales en Hyperbola GNU/Linux-libre

Tu sistema principal puede ser Hyperbola GNU/Linux-libre de arquitectura
x86_64, por ejemplo, pero con suficiente memoria y poder de procesamiento
usted pordría ejecutar
[Trisquel][trisquel]{:target="_blank" rel="noopener noreferrer"} y
[Dragora][dragora]{:target="_blank" rel="noopener noreferrer"}
al mismo tiempo, dentro de la misma máquina.

## ¿Qué es un máquina virtual?

Una máquina virtual es un software que simula un sistema de computación
y puede ejecutar programas como si fuese una computadora real.
Este software en un principio fue definido como
"un duplicado eficiente y aislado de una máquina física".

## ¿Qué programas me permiten ejecutar una máquina virtual?

En los sistemas operativos totalmente libres existe un
programa llamado `qemu` que nos permite virtualizar.

[Qemu][qemu]{:target="_blank" rel="noopener noreferrer"}
funciona a través de línea de comandos.

## Habilitando la Virtualización

### Revisar si su PC soporta virtualización

    :::console
    $ LC_ALL=C lscpu | grep Virtualization

o ejecutar el comando:

    :::console
    $ lsmod | grep kvm

Si su computadora admite virtualización, debería ver
la salida como `Virtualización: VT-x` o `Virtualización: AMD-V`,
caso contrario su ordenador no es capaz de virtualizar.

### Instalando qemu

    :::console
    # pacman -Sy

    # pacman -S qemu vde2 dnsmasq bridge-utils

    # gpasswd -a <tu-usuario> kvm

### Habilitar módulos del kernel para virtualización

- Módulo kvm_intel (procesadores Intel)

        :::console
        # modprobe kvm_intel

- Módulo kvm_amd (procesadores AMD)

        :::console
        # modprobe kvm_amd

### Habilitar la virtualización anidada en KVM

La virtualización anidada le permite ejecutar una máquina virtual (VM)
dentro de otra VM mientras sigue utilizando la aceleración de hardware
del host.

#### Comprobando si la virtualización anidada es compatible

Para los procesadores Intel, verifique el archivo
`/sys/module/kvm_intel/parameters/nested`.
Para procesadores AMD, verifique el archivo
`/sys/module/kvm_amd/parameters/nested`.
Si ve `1` o `Y`, se admite la virtualización anidada;
si ve `0` o `N`, la virtualización anidada no es compatible.

Por ejemplo:

    :::console
    $ cat /sys/module/kvm_intel/parameters/nested
    Y

#### Habilitar la virtualización anidada para procesadores Intel:

1. Apague todas las máquinas virtuales en ejecución y recargue el módulo `kvm_intel`:

        :::console
        # modprobe -r kvm_intel

2. Activa la función de anidamiento

        :::console
        # modprobe kvm_intel nested=1

3. La virtualización anidada se habilita hasta que se reinicia el host.
   Para habilitarlo permanentemente, agregue la siguiente línea al
   archivo `/etc/modprobe.d/kvm.conf`:

        :::console
        # nano -w /etc/modprobe.d/kvm.conf
        ----------------------------------
        options kvm_intel nested=1

#### Habilitar la virtualización anidada para procesadores AMD:

1. Apague todas las máquinas virtuales en ejecución y recargue el módulo `kvm_amd`:

        :::console
        # modprobe -r kvm_amd

2. Activa la función de anidamiento

        :::console
        # modprobe kvm_amd nested=1

3. La virtualización anidada se habilita hasta que se reinicia el host.
   Para habilitarlo permanentemente, agregue la siguiente línea al
   archivo `/etc/modprobe.d/kvm.conf`:

        :::console
        # nano -w /etc/modprobe.d/kvm.conf
        ----------------------------------
        options kvm_amd nested=1

## Uso de Qemu

Escribir el disco virtual a usar por la máquina virtual.

    :::console
    $ qemu-img create -f qcow2 hyper.qcow2 10G

### Uso simple:

    :::bash
    #!/bin/bash
    qemu-system-x86_64 \
      -monitor stdio \
      --enable-kvm -m 512 \
      -cpu host -smp 4 \
      -cdrom /path/to/hyperbola-milky-way-v0.4-dual.iso \
      -drive file=/path/to/hyper.qcow2,if=virtio \
      -boot c -rtc base=localtime \
      -device virtio-keyboard-pci \
      -net nic \
      -net user \
      -vga virtio

`-cpu host -smp 4` para usar 4 CPUs con el nombre original del
CPU-hostpedador.

`-net user` es importante para tener acceso a Internet dentro
de su nuevo sistema. `-m 512` es el tamaño de RAM virtual
establecido (megabytes), el valor predeterminado es 128 MB,
elegí 512.

Usted puede agregar `-vga virtio -display sdl,gl=on` para la emulación 3D

También usted puede agregar `-device intel-hda -device hda-duplex` para el soporte
de audio en tarjetas de audio de Intel.

> Véase <https://wiki.archlinux.org/title/QEMU#Audio>

### Qemu + VNC como servidor

    :::bash
    #!/bin/bash
    qemu-system-x86_64 \
      -monitor stdio \
      --enable-kvm -m 512 \
      -cpu host -smp 4 \
      -cdrom /path/to/hyperbola-milky-way-v0.4-dual.iso \
      -drive file=/path/to/hyper.qcow2,if=virtio \
      -boot c -rtc base=localtime \
      -device virtio-keyboard-pci \
      -net nic -net user \
      -vga virtio -display none \
      -vnc :0

Se puede agregar la opción `-vnc :X` para que QEMU redirija la pantalla VGA a la sesión VNC.
Sustituya X por el número de la pantalla (0 entonces escuchará en 5900, 1 en 5901,
2 en 5902, etc).

>Recuerda! Ctrl + Alt + G para salir de la captura del mouse, Ctrl + Alt + F para pantalla
>completa!
<!--- -->
>Advertencia: la configuración predeterminada del servidor VNC no
>utiliza ninguna forma de autenticación. Cualquier usuario puede
>conectarse desde cualquier host.
> Puedes revisar: <https://wiki.archlinux.org/title/QEMU#Basic_password_authentication>

### Capturas de pantalla de Qemu

<figure>
    <a href="{filename}/wp-content/uploads/article/images/2020/05/vm-hyperbola.png">
        <img src="{filename}/wp-content/uploads/article/images/2020/05/vm-hyperbola.png" alt="Hyperbola en Qemu">
    </a>
    <figcaption>Captura de pantalla de Hyperbola GNU/Linux en Qemu</figcaption>
</figure>

<figure>
    <a href="{filename}/wp-content/uploads/article/images/2020/05/vm-trisquel.png">
        <img src="{filename}/wp-content/uploads/article/images/2020/05/vm-trisquel.png" alt="Trisquel en Qemu">
    </a>
    <figcaption>Captura de pantalla de Trisquel GNU/Linux en Qemu</figcaption>
</figure>

### Módulos con problemas de seguridad

El módulo `vhost_net` tiene problemas de seguridad
[CVE-2018-3646][spectre]{:target="_blank" rel="noopener noreferrer"}
que es un error de CPU L1TF y SMT con posible fuga
de datos. Lo recomendable es desactivarlo de la
siguiente manera:

    :::console
    # modprobe -r vhost_net

Si estás en Hyperbola GNU/Linux-libre este módulo
viene desactivado.

[dragora]: https://dragora.org
[trisquel]: https://trisquel.info
[qemu]: https://wiki.qemu.org/Main_Page
[spectre]: https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html
