Archivo

Archivo del autor

Configuración de LibreElec en KVM

lunes, 23 de marzo de 2020 Sin comentarios

Para lograr realizar un passthrough de la tarjeta gráfica (en este caso una Nvidia GTX 1050Ti) y que no se nos quede la pantalla en negro en el arranque de LibreElec hay que seguir una serie de pautas.

Primero necesitamos ocultar al sistema invitado (guest) que está siendo virtualizado, ya que a Nvidia no le gusta que sus tarjetas gráficas domésticas sean usadas en paravirtualización, porque para ello ya comercializa tarjetas más enfocadas al sector servidor.

Por eso ejecutaremos el comando «virsh edit 200-LibreElec» para editar la configuración de nuestra máquina llamada «200-LibreElec». Añadiremos los siguientes campos:

<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state=’on’/>
<vapic state=’on’/>
<spinlocks state=’on’ retries=’8191’/>
<vendor_id state=’on’ value=’123456789ab’/>
</hyperv>
<kvm>
<hidden state=’on’/>
</kvm>
<vmport state=’off’/>
<ioapic driver=’kvm’/>
</features>

Por otro lado, si tenemos problemas con el sonido por HDMI hay una fácil solución. Editaremos el fichero «/etc/modprobe.d/snd-hda-intel.conf» de nuestra máquina virtual y pondremos lo siguiente:

options snd-hda-intel enable_msi=1

Reiniciar y listo.

Sustituyendo Proxmox por una Ubuntu Server con KVM

lunes, 23 de marzo de 2020 Sin comentarios

Debido al hardware específico (HP Miniserver Gen8) que tengo y que para poder resolver los problemas de su BIOS con la paravirtualización se necesita aplicar un parche en el kernel que me dejó de funcionar en Proxmox en la última actualización, pues decir librarme de la comodidad de Proxmox en busca de algo más flexible.

Quería una distribución con software relativamente actualizado y documentado en el que me sintiese cómodo. Opté por una Ubuntu 18.04 para servidores que, aunque no está entre mis favoritas para el uso cotidiano, es bastante cómoda para funciones de servidor.

Software de virtualización

Después de la instalación básica necesitaba una serie de herramientas para virtualizar máquinas:

apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

adduser `id -un` libvirt

Preparación previa del hardware

Hice que no cargase ningún driver de la gráfica a la que tenía pensada hacerle passthrough :

echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf

echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf

echo blacklist snd_hda_intel > /etc/modprobe.d/blacklist-nvidia-nouveau.conf

Con el comando «lpsci -nn» encontré los datos de la gráfica que me interesaban:

07:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] [10de:1c82] (rev a1)
07:00.1 Audio device [0403]: NVIDIA Corporation GP107GL High Definition Audio Controller [10de:0fb9] (rev a1)

Y edité el fichero de configuración de Grub «/etc/default/grub»:

GRUB_CMDLINE_LINUX=»intel_iommu=on vfio_pci.ids=10de:1c82,10de:0fb9″

Para terminar de curarme en salud, creé el fichero «/etc/modprobe.d/vfio_pci.conf»:

options vfio_pci ids=10de:1c82,10de:0fb9

Y edité el de «/etc/initramfs-tools/modules»:

vfio
vfio_iommu_type1
vfio_virqfd
options vfio_pci ids=10de:1c82,10de:0fb9
vfio_pci ids=10de:1c82,10de:0fb9
vfio_pci

¿Excesivo? Puede ser. Quizás sobrase con sólo haber editado el fichero de Grub, pero se llega a un punto en el cual has dado tantas vueltas sobre lo mismo que no te fías con hacer lo mínimo indispensable.

Finalmente toca rehacer el arranque con los siguientes comandos:

update-grub
update-initramfs -u

Compilación del kernel

Editamos las fuentes de apt para poder descargar el fuente del software «/etc/apt/sources.list»:

deb-src http://es.archive.ubuntu.com/ubuntu/ bionic main restricted

deb-src http://es.archive.ubuntu.com/ubuntu/ bionic-updates main restricted

Descargamos el software necesario:

apt update

apt-get build-dep linux linux-image-$(uname -r) git fakeroot dkms default-jdk

Es posible que nos topemos con el siguiente error:

la descarga se realiza de forma desprotegida como superusuario, ya que al archivo «linux-signed_4.15.0-91.92.dsc» el usuario «_apt» no pudo acceder. – pkgAcquire::Run

Para solventarlo nos basta con hacer lo siguiente:

chown _apt /var/lib/update-notifier/package-data-downloads/partial/

Dentro de la carpeta «/usr/src/» descargaremos los fuentes del kernel de Ubuntu Bionic:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git

Editaremos el fichero «/usr/src/ubuntu-bionic/drivers/iommu/intel-iommu.c» donde pone:

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;
}

Pondremos lo siguiente:

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

En este paso, si tratamos de compilar el kernel nos encontraremos con un error relacionado con el script «ubuntu-bionic/debian/scripts/retpoline-check» y que tuve que modificar de este código:

count=$( diff -u «$prev» «$curr» | grep ‘^+[^+]’ | wc -l )
if [ «$count» != 0 ]; then
rc=1

A este otro:

count=$( diff -u «$prev» «$curr» | grep ‘^+[^+]’ | wc -l )
if [ «$count» != 0 ]; then
rc=0

Sé que está relacionado con las mitigaciones sobre las CPU de Intel pero no es algo que en esta máquina me importase mucho.

Desde el directorio de «/usr/src/ubuntu-bionic» lancé la compilación que duró un periodo de tiempo considerable:

fakeroot debian/rules binary

De dicho proceso se generaron una serie de paquetes .deb que instalé:

dpkg -i *.deb

Una vez instalado el kernel modificado, ahora sólo necesitaba que el equipo siempre arrancase con él, con lo que había que realizar algunos cambios en el cargador de arranque. Para saber qué modificaciones tenía que aplicar lancé el siguiente comando:

sed -nre «/submenu|menuentry/s/(.? )'([^’]+)’.*/\1 \2/p» < /boot/grub/grub.cfg

Me devolvió el listado visual de Grub que tenía que tener en cuenta:

menuentry Ubuntu
submenu Opciones avanzadas para Ubuntu
menuentry Ubuntu, con Linux 4.15.0-91-generic
menuentry Ubuntu, con Linux 4.15.0-91-generic (recovery mode)
menuentry Ubuntu, con Linux 4.15.0-88-lowlatency
menuentry Ubuntu, con Linux 4.15.0-88-lowlatency (recovery mode)
menuentry Ubuntu, con Linux 4.15.0-88-generic
menuentry Ubuntu, con Linux 4.15.0-88-generic (recovery mode)
menuentry Ubuntu, con Linux 4.15.0-76-generic
menuentry Ubuntu, con Linux 4.15.0-76-generic (recovery mode)

Entonces edité el fichero «/etc/default/grub» acorde:

GRUB_DEFAULT=»Opciones avanzadas para Ubuntu>Ubuntu, con Linux 4.15.0-88-generic«

Y además bloquee la posibilidad de que sufriese cambios a través de alguna actualización del gestor de paquetes y regeneré la configuración de Grub:

apt-mark hold 4.15.0-88-generic

update-grub

Tras un reinicio del equipo y con el comando «dmesg | grep -i vfio» deberíamos poder ver lo siguiente:

[230727.140577] vfio-pci 0000:07:00.1: Device is ineligible for IOMMU domain attach due to platform RMRR requirement. PARCHEADO.
[230727.730169] vfio_ecap_init: 0000:07:00.0 hiding ecap 0x19@0x900

Configuración del puente de red

Para que las máquinas virtuales puedan tener acceso directo a nuestra y así poder hacer uso de los recursos que en ella se encuentran hay que configurar un puente de red. Modificaremos el fichero «/etc/netplan/01-netcfg.yaml»:

network:
version: 2
renderer: networkd

ethernets:
eno2:
dhcp4: false
dhcp6: false

bridges:
br0:
interfaces: [eno2]
addresses: [192.168.1.10/24]
gateway4: 192.168.1.1
mtu: 1500
nameservers:
addresses: [192.168.1.1]
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no

El dispositivo «eno2» sería nuestra tarjeta de red con conectividad y «br0» sería al puente hacia nuestras máquinas virtuales. Hay que tener en cuenta que yo he preferido establecer una IP fija para mi tarjeta con conectividad física pero se podría haber dejado con DHCP.

Gestión web del servidor

Para poder gestionar de manera fácil el servidor a través de un entorno web, he optado por hacer uso de Cockpit, el cual se puede instalar de la siguiente forma:

apt install cockpit cockpit-machines cockpit-docker cockpit-system cockpit-packagekit

Ahora podremos gestionar el servidor desde http://127.0.0.1:9090

Gestión de las máquinas virtuales

Si bien se pueden gestionar las máquinas virtuales de Cockpit de manera fácil, el interfaz es algo limitado con respecto a lo que podía hacer con Proxmox. Pero esto es fácilmente solucionable si las gestionamos desde Virtual Machine Manager, un software que puede estar instalado en nuestro sobremesa o portátil y que permite gestionar tanto las máquinas virtuales en local como remotas.

Configuración de arranque de Seafile en Ubuntu 18.04

lunes, 23 de marzo de 2020 Sin comentarios

Si se da el caso de que albergamos Seafile en un dispositivo de almacenamiento en red, debemos generar una serie de scripst de arranque que tengan en cuenta esto para no adelantarse al montaje de la unidad en el arranque del sistema.

Teniendo una línea en el fichero «/etc/fstab» como la siguiente:

192.168.1.10:/mnt/almacenamiento                    /mnt/nas     nfs   soft,nolock           0  0

Con el comando «systemctl list-unit-files» podremos ver los procesos de los que se encarga SystemD y encontrar el que nos interesa, justamente en nuestro caso, uno denominado «mnt-nas.mount».

Por tanto, sólo tendremos que generar el fichero «/etc/systemd/system/seafile.service»:

[Unit]
Description=Seafile
After=mnt-nas.mount

[Service]
User=root
Group=root

Type=forking
ExecStart=/mnt/nas/seafile-server-latest/seafile.sh start
ExecStop=/mnt/nas/seafile-server-latest/seafile.sh stop

[Install]
WantedBy=multi-user.target

Y el fichero «/etc/systemd/system/seafile.service» que arrancará cuando el anterior lo haya hecho:

[Unit]
Description=SeafileHub
After=seafile.service

[Service]
User=root
Group=root
Type=forking

ExecStart=/mnt/nas/seafile-server-latest/seahub.sh start
ExecStop=/mnt/mas/seafile-server-latest/seahub.sh stop

[Install]
WantedBy=multi-user.target

Finalmente habilitaremos los servicios y recargaremos la información:

systemctl enable seafile

systemctl enable seahub

systemctl daemon-reload

Categories: GNU/Linux Tags: , , , , ,

Dirección IP estática en Ubuntu y Debian

lunes, 23 de marzo de 2020 Sin comentarios

En Ubuntu

Editamos el fichero que exista dentro de «/etc/netplan/», que en nuestro caso es «10-lxc.yaml» y lo dejamos de la siguiente forma:

network:

version: 2

ethernets:

eth0:

dhcp4: false

addresses: [192.168.1.10/24]

gateway4: 192.168.1.1

nameservers:

addresses: [8.8.8.8, 8.8.4.4]

Hay que tener en cuenta que no se debe tabular, sino utilizar espacios y que, en nuestro caso, el dispositivo de red es el denominado «eth0».

Tras la configuración sólo tenemos que ejecutar el siguiente comando:

netplan apply

En Debian

Necesitaremos modificar el fichero «/etc/network/interfaces» de la siguiente forma:

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

allow-hotplug ens3

auto ens3
iface ens3 inet static
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

Modificaremos el fichero «/etc/resolv.conf» para que tenga las DNS que necesitemos:

nameserver 8.8.8.8
nameserver 192.168.1.1

Reiniciaremos el servicio de red con el siguiente comando:

systemctl restart networking.service

Para comprobar que tenemos la IP correctamente asignada podemos recurrir a este comando:

ip -4 addr

Categories: Debian, GNU/Linux, Ubuntu Tags: ,

Ecualizador de sonido en Linux

sábado, 11 de enero de 2020 Sin comentarios

Si tenemos la necesidad de aplicar ciertos filtros o ecualizar el sonido de ciertas aplicaciones o todas en general de nuestro sistema Linux, podemos optar por PulseEffects que está disponible en los repositorios de la mayoría de distribuciones. Entre sus requisitos para funcionar está el tener instalado lo siguiente:

  • GStreamer Plugins Good. Version 1.12.5 or higher
  • GStreamer Plugins Bad. Version 1.12.5 or higher
  • Linux Studio Plugins (lsp)
  • Calf Studio Plugins. Version 0.90.1 or higher
  • ZamAudio Plugins
  • MDA.LV2
  • libsamplerate
  • libsndfile
  • zita-convolver
  • libebur128

No obstante, en OpenSuse tuve que instalar adicionalmente los paquetes «lv2-lsp-plugins» y «vst-lsp-plugins», de lo contrario el ecualizador aparecía deshabilitado sin posibilidad de activarlo.

Categories: GNU/Linux, OpenSuse Tags:

Montar unidades de red con SystemD

miércoles, 1 de enero de 2020 Sin comentarios

En su día tuve problemas montando unidades NFS en el arranque de un sistema Debian que solucioné haciendo estática la IP de la máquina, pero hoy me ha estado dando otra vez problemas con lo que le he querido dar una solución mejor planteada. Para ello he seguido las indicaciones de James Oguya que básicamente aprovecha las características de SystemD para hacer el montaje y definir los requisitos previos que, en mi caso, era que la conexión a la red estuviese en marcha.

Crearemos el fichero «/etc/systemd/system/var-lib-tftpboot.mount» ya que la carpeta donde quiero realizar el montaje es en «/var/lib/tftpboot». Dentro del anterior fichero incluiremos lo siguiente:

[Unit]
Description=Mount TFTPBoot directory

[Mount]
What=10.10.10.2:/mnt/tftpboot
Where=/var/lib/tftpboot
Type=nfs
Options=defaults,soft

[Install]
WantedBy=network-online.target

Lo siguiente será activarlo con el comando:

systemctl enable var-lib-tftpboot.mount

La próxima vez que reiniciemos lo tendremos en funcionamiento.

Categories: Debian, GNU/Linux Tags: , ,

Manipular la pantalla de nuestro Android desde el ordenador

martes, 31 de diciembre de 2019 Sin comentarios

Hace algún tiempo que salió el proyecto de Scrcpy pero hasta hace un rato no lo había vuelto a probar y la cuestión es que funciona a la primera y con nuevas características bastante interesantes. Es multiplataforma y su última versión se puede instalar en OpenSuse desde repositorios de la comunidad habiendo tenido previamente la precaución de instalar las herramientas de desarrollo de Android.

Una vez instalado, simplemente tendremos que tener habilitado el modo de depuración en las Opciones de Desarrollador de nuestro terminal y conectarlo por USB a nuestro equipo. Escribiremos el comando «scrcpy» y, tras la confirmación en nuestro móvil, ya podremos utilizarlo. Con el comando CRTL+O podremos apagar la pantalla del móvil mientras lo seguimos utilizando desde el ordenador. También permite su conexión a través de la Wifi con lo que lo convierte en algo bastante cómodo.

Categories: Android Tags: ,

InRelease de Debian

domingo, 8 de diciembre de 2019 Sin comentarios

Si cuando realizamos un «apt update» en nuestra Debian recibimos el siguiente mensaje:

N: Repository ‘http://deb.debian.org/debian buster InRelease’ changed its ‘Version’ value from ‘10.1’ to ‘10.2’

Debemos ejecutar el siguiente comando para aceptar los cambios de forma explícita:

apt-get –allow-releaseinfo-change update

Categories: Debian, GNU/Linux Tags:

Reiniciando Plasma de KDE sin reiniciar el sistema

sábado, 23 de noviembre de 2019 Sin comentarios

A veces el uso de una versión inestable del entorno de escritorio puede hacer que éste sufra algún tipo de error que fuerce su cerrado y nos deje sin barra de tareas. Si en dicha ocasión reiniciar el ordenador es un inconveniente, siempre nos quedará la posibilidad de, en versiones Plasma superiores a la 5.10, usar los siguiente comandos desde un terminal o desde ALT+F2:

kquitapp5 plasmashell
kstart5 plasmashell

En versiones inferiores a Plasma 5.10, supuestamente (no lo he probado) se deben utilizar los siguientes comandos:

killall plasmashell
kstart plasmashell

Categories: GNU/Linux, Software Libre Tags: , ,

Jellyfin como sustituto de Plex

sábado, 9 de noviembre de 2019 Sin comentarios

Jellyfin es un gestor de contenido multimedia que permite hacer streaming de nuestra música, películas, series, etc. Es como un sustituto de Plex y Emby (del cual proviene) de código totalmente abierto y gratuito.

Existe una imagen preparado con él en Turnkey que nos permite tener funcionando el sistema en cuestión de pocos minutos.

Si queremos tener la posibilidad de trascodificar nuestro contenido puede ser que nos salga el siguiente error al querer utilizar, por ejemplo, nuestro navegador:

PlaybackErrorNoCompatibleStream

Para darle solución sólo tendremos que instalar ffmpeg de la siguiente forma:

apt install ffmpeg

Después, desde el panel de control de Jellyfin dentro de la sección de «Reproducción» tendremos que poner la siguiente ruta en «Ruta de FFmpeg:»:

/usr/bin/ffmpeg