Archivo

Archivo para la categoría ‘Virtualización’

GPU passthrough en Proxmox

lunes, 12 de agosto de 2019 Sin comentarios

Después de haber instalado Proxmox en un HP Gen8, mi intención era la de virtualizar LibreElenc para utilizarlo como centro multimedia y un Windows 10 para poder hacer uso de mi biblioteca de Steam. Tras un poco de modding en la pequeña torre e incorporar una GTX 1050Ti (concretamente la Gigabyte GV-N105TOC-4GL) me quedaba por delante configurar Proxmox para permitir dejar paso directo de la tarjeta gráfica a los sistemas virtualizados.

Configuración de la máquina virtual

Para ello la máquina virtual debía incorporar en su fichero de configuración («/etc/pve/qemu-server/100.conf») las siguientes opciones:

  • machine: q35
  • hostpci0: 07:00,pcie=1,x-vga=on

La segunda opción depende de cada equipo y es el resultado de haber obtenido lo siguiente tras lanzar el comando «lspci»:

07:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
07:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1)

Error al arrancar la máquina virtual

Cuando intentemos arrancar la máquina virtual, lo más probable es que nos indique lo siguiente:

vfio: failed to set iommu for container: Operation not permitted

Lo que parece en principio un problema de permisos tiene un trasfondo más complejo que afecta al kernel y que podemos comprobar con el comando «dmesg | grep -e DMAR -e IOMMU» que nos devolverá lo siguiente:

vfio-pci 0000:07:00.1: Device is ineligible for IOMMU domain attach due to platform RMRR requirement. Contact your platform vendor.

Recompilación del kernel

La forma de solucionar el problema es recompilando el kernel tras haber incorporado un pequeño parche al mismo.

Actualizaremos el sistema e instalaremos los paquetes que vamos a necesitar:

  • apt-get update
  • apt-get install git nano screen patch fakeroot build-essential devscripts libncurses5 libncurses5-dev libssl-dev bc flex bison libelf-dev libaudit-dev libgtk2.0-dev libperl-dev libperl-dev asciidoc xmlto gnupg gnupg2 rsync lintian debhelper libibery-dev libdw-dev libnuma-dev libsplang2-dev libiberty-dev libslang2-dev debhelper sphinxdoc-common

Descargaremos el código fuente del kernel que vamos a recompilar y de aquel de donde sacaremos el parche:

  • cd /usr/src/
  • git clone git://git.proxmox.com/git/pve-kernel.git
  • git clone git://git.proxmox.com/git/mirror_ubuntu-disco-kernel.git
  • mv mirror_ubuntu-disco-kernel ubuntu-disco

Hacemos una copia del parche que necesitamos y lo editamos con nano:

  • cp ubuntu-disco/drivers/iommu/intel-iommu.c ubuntu-disco/drivers/iommu/intel-iommu_new.c
  • nano ubuntu-disco/drivers/iommu/intel-iommu_new.c

En el editor de nano buscaremos con el comando «CTRL+W» el siguiente tecto:

if (device_is_rmrr_locked(dev)) {
dev_warn(dev, «Device is ineligible for IOMMU domain attach due to platform RMRR requirement. Contact your platform vendor.\n»);
return -EPERM;
}

Y lo cambiaremos a lo siguiente (se elimina el «return» y se añade al texto algo que nos haga saber más tarde que se está aplicando nuestro parche) :

if (device_is_rmrr_locked(dev)) {
dev_warn(dev, «Device was ineligible for IOMMU domain attach due to platform RMRR requirement. Parcheado.\n»);
}

De los dos ficheros generaremos un diff:

  • diff -u /usr/src/ubuntu-disco/drivers/iommu/intel-iommu.c /usr/src/ubuntu-disco/drivers/iommu/intel-iommu_new.c > remove_rmrr_check.patch

Habrá que adaptar la cabecera de ese diff generado, quedando de forma similar a este (se cambian las rutas de los ficheros y sus nombres):

— a/drivers/iommu/intel-iommu.c 2019-07-17 15:44:26.908520624 +0200
+++ b/drivers/iommu/intel-iommu.c 2019-07-17 15:48:09.380083344 +0200

Moveremos el diff al lugar donde la recompilación lo buscará:

  • cd /usr/src/pve-kernel/
  • mv ../remove_rmrr_check.patch ./patches/kernel/

Modificaremos un script que busca ficheros con nombres problemáticos:

  • nano debian/scripts/find-firmware.pl

Y comentaremos una de las primeras líneas para que quede más o menos de esta forma:

#die «strange directory name» if $dir !~ m|^(.*/)?(5.0.\d+\-\d+\-pve)(/+)?$|;

Configuraremos el Makefile:

  • nano /usr/src/pve-kernel/Makefile

En él buscaremos «EXTRAVERSION» y lo dejaremos de la siguiente forma:

  • EXTRAVERSION=-${KREL}-pve-removermrr

Y finalmente lanzaremos el make:

  • make

Si todo ha ido bien, nos habrá generado una serie de ficheros «.deb» que instalaremos de la siguiente forma:

  • dpkg -i *.deb

Si nos ha fallado por algún motivo y tenemos que relanzar de nuevo el «make» es posible que no nos deje y tengamos que añadir al fichero «Makefile» la opción «-d» quedando de esta forma:

${LINUX_TOOLS_DEB} ${HDR_DEB}: ${DST_DEB}
${DST_DEB}: ${BUILD_DIR}.prepared
cd ${BUILD_DIR}; dpkg-buildpackage –jobs=auto -b -uc -us -d
lintian ${DST_DEB}
#lintian ${HDR_DEB}
lintian ${LINUX_TOOLS_DEB}

Comprobación de la instalación

Una vez que tengamos el nuevo kernel instaldo mediante los «.deb» anteriores, reiniciaremos la máquina y cuando lancemos nuestra máquina virtual, mediante el comando «dmesg | grep -e DMAR -e IOMMU» obtendremos el mensaje:

vfio-pci 0000:07:00.1: Device is ineligible for IOMMU domain attach due to platform RMRR requirement. Parcheado.

Fuente

Las pautas han sido sacadas de lo que ahora es un pequeño tutorial pero en su día fue un verdadero quebradero de cabeza.

Redimensión de pantalla de la máquina invitada en KVM

lunes, 21 de agosto de 2017 Sin comentarios

Las características que provee SPICE a KVM resultan de los más prácticas, pero no funcionan del todo si en la máquina invitada no instalamos su parte del software y tampoco hay que olvidar la necesidad de configurar la máquina para indicarle que haga uso de él.

A fin de cuentas es lo primero que echamos de menos aquellos que venimos de las Guest Additions de VirtualBox o las VMware Tools.

Categories: Virtualización Tags: ,

Redirección de puertos USB en KVM

lunes, 21 de agosto de 2017 Sin comentarios

Ante la necesidad de querer redireccionar un dispotivo USB a nuestra máquina KVM nos podemos encontrar con un error similar al siguiente:

spice-client-error-quark: Could not redirect Nombre Del Dispositivo [0da4:0116] at 3-5: Error setting USB device node ACL: ‘Error setting facl: Operation not permitted’ (0)

Fácilmente lo podremos corregir utilizando el siguiente comando:

sudo chmod u+s /usr/bin/spice-client-glib-usb-acl-helper

Si además no queremos que nos pregunte por la contraseña de administrador cada vez que queramos realizar la redirreción del puerto USB, tendremos que modificar el fichero «/usr/share/polkit-1/actions/org.spice-space.lowlevelusbaccess.policy», donde cambiaremos lo siguiente:

<allow_any>auth_admin</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>auth_admin</allow_active>

Por esto:

<allow_any>yes</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>

Categories: GNU/Linux, Virtualización Tags: ,

KVM con problemas de conexión a la red

lunes, 3 de abril de 2017 Sin comentarios

Si cuando vamos a utilizar KVM, nos salta el siguiente mensaje de error:

Error starting domain: Requested operation is not valid: network ‘default’ is not active

Primeramente deberemos comprobar el estado de las conexiones:

virsh net-list –all

Dicho comando nos mostrará algo similar a esto:

Nombre               Estado     Inicio automático Persistente
———————————————————-
default              inactivo   no            si

Efectivamente el estado inactivo es el que debemos cambiar para resolver el problema. Para ello sólo tendremos que ejecutar lo siguiente:

virsh net-start default

Para más información podéis consultar el artículo original de donde saqué la solución.

Categories: Virtualización Tags: ,

VirtualBox en segundo plano

lunes, 2 de enero de 2012 Sin comentarios

Lanzar una máquina virtual en segundo plano desde línea de comando nos puede ser realmente útil si queremos prescindir de entorno gráfico o sólo tenemos una conexión ssh simple.

Para hacerlo posible debemos seguir unos pasos sencillos usando un terminal. Primero sacaremos un listado de máquinas virtuales en el equipo:

 # VBoxManage list vms

«Windows XP» {b3f13d76-dcc1-42e1-aca0-66290ea99202}

«CentOS» {h5f13d76-dde1-72f5-joe8-77800ea99568}

Nos ha devuelto un listado de máquinas virtuales con su respectivo nombre e identificador que usaremos para poner en marcha la deseada.

# VBoxManage startvm «Windows XP» –type headless

La opción «headless» le indica a VirtualBox que deberá ejecutar la máquina virtual en segundo plano, con lo que podremos cerrar la sesión SSH sin peligro de que se interrumpa la ejecución de la misma.

Para comprobar que está funcionando todo correctamente podremos sacar un listado de maquinas virtuales en ejecución.

# VBoxManage list runningvms

«Windows XP» {b3f13d76-dcc1-42e1-aca0-66290ea99202}

VirtualBox y la sincronización de hora

jueves, 17 de marzo de 2011 14 comentarios

Normalmente, cuando usamos una máquina virtual en VirtualBox ésta sincroniza su hora con el sistema operativo host, algo útil pero a veces conflictivo para nuestros intereses. Por ejemplo, si queremos comprobar el sistema de caducidad de una aplicación demo de 30 días, tendríamos que cambiar la fecha en el sistema host para que surta efecto en el sistema invitado (guest).

Una forma de desactivar la sincronización de hora es utilizando el siguiente comando, donde «nombreMV» es el nombre que recibe tu máquina virtual en VirtualBox.

vboxmanage setextradata «nombreMV» «VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled» «1»

Para volver a activar el servicio basta con volver a ejecutar el mismo comando pero cambiando el «1» por el «0» y, obviamente, se necesita apagar y encender la máquina virtual para que se apliquen los cambios.