Servidor Airsonic

sábado, 4 de abril de 2020 Sin comentarios

Airsonic es un fork de Subsonic. Es software libre, programado en Java y permite hacer streaming por HTTP de una gran multitud de formatos de música. Lo que más me gusta es que me permite explorar mi colección de música bajo la estructura de carpetas, nada de etiquetas.

Requiere tener instaladas una serie de dependencias:

apt install wget openjdk-8-jre ffmpeg

La instalación no es complicada:

useradd airsonic

mkdir -p /opt/airsonic

cd /opt/airsonic

wget https://github.com/airsonic/airsonic/releases/download/v10.5.0/airsonic.war

ln -s /usr/bin/ffmpeg

chown -R airsonic:airsonic /opt/airsonic

Y para que arranque al inicio crearemos un script de este estilo («nano /etc/systemd/system/airsonic.service»):

[Unit]
Description=Airsonic Media Server
After=remote-fs.target network.target
AssertPathExists=/opt/airsonic

[Service]
Type=simple
Environment=»JAVA_JAR=/opt/airsonic/airsonic.war»
Environment=»JAVA_OPTS=-Xmx700m»
Environment=»AIRSONIC_HOME=/opt/airsonic»
Environment=»PORT=8080″
Environment=»CONTEXT_PATH=/airsonic»
Environment=»JAVA_ARGS=»
EnvironmentFile=-/etc/default/airsonic
ExecStart=/usr/bin/java \
$JAVA_OPTS \
-Dairsonic.home=${AIRSONIC_HOME} \
-Dserver.context-path=${CONTEXT_PATH} \
-Dserver.port=${PORT} \
-jar ${JAVA_JAR} $JAVA_ARGS
User=airsonic
Group=airsonic

# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
# for details
DevicePolicy=closed
DeviceAllow=char-alsa rw
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap
ReadWritePaths=/opt/airsonic

# You can uncomment the following line if you’re not using the jukebox
# This will prevent airsonic from accessing any real (physical) devices
PrivateDevices=yes

# You can change the following line to `strict` instead of `full`
# if you don’t want airsonic to be able to
# write anything on your filesystem outside of AIRSONIC_HOME.
ProtectSystem=full

# You can uncomment the following line if you don’t have any media
# in /home/…. This will prevent airsonic from ever reading/writing anything there.
ProtectHome=true

# You can uncomment the following line if you’re not using the OpenJDK.
# This will prevent processes from having a memory zone that is both writeable
# and executeable, making hacker’s lifes a bit harder.
#MemoryDenyWriteExecute=yes

[Install]
WantedBy=multi-user.target

Y si necesitamos añadir algún tipo de configuración especial crearemos un fichero con «nano /etc/default/airsonic» que, en principio, lleva el siguiente contenido:

# Set the location of the standalone war to use
JAVA_JAR=/opt/airsonic/airsonic.war

# Set any java opts separated by spaces
JAVA_OPTS=-Xmx700m

# Set a different location for the airsonic home.
# If this path is /opt/libresonic or even contains «libresonic»,
# the data from a previous libresonic can be used as is (i.e. without
# renaming libresonic.properties,db/libresonic*, etc
AIRSONIC_HOME=/opt/airsonic

# Change the port to listen on
PORT=8080

# Change the path that is listened to on
CONTEXT_PATH=/airsonic

# Add any java args. These are different than JAVA_OPTS in that
# they are passed directly to the program. The default is empty:
#JAVA_ARGS=

# Note that there are several settings for spring boot, not explicitly listed
# here, but can be used in either JAVA_OPTS or JAVA_ARGS. The full list
# can be found here:
# https://docs.spring.io/spring-boot/docs/1.4.5.RELEASE/reference/htmlsingle/#common-application-properties
# For example to set debug across the board:
#JAVA_ARGS=–debug

# Or to change the IP address that is listened to:
#JAVA_ARGS=–server.address=127.0.0.1

Habilitaremos el servicio:

systemctl daemon-reload

systemctl start airsonic

systemctl enable airsonic

Desactivar las actualizaciones de Windows 10

sábado, 4 de abril de 2020 Sin comentarios

Motivos pueden haber cientos para querer desactivar las actualizaciones de Windows 10 tanto como para dejarlas activadas pero no es motivo de debate en esta entrada.

Mi método favorito es hacerlo a través de las directivas de grupo local, editables desde la versión Profesional, aunque desde una versión Home también se podría hacer.

En el menú inicio escribiremos algo similar a «Editar directiva de grupo» (gpedit.msc). Dentro del mismo iremos a «Configuración del equipo->Plantillas administrativas». De entre «Todos los valores» buscaremos «Configurar Actualizaciones automáticas». La habilitaremos y escogeremos la opción número 2 («Notificar la descarga e instalar automáticamente») y de esta forma sólo nos saldrá un aviso indicándonos que hay actualizaciones, pero ni descargará ni instalará nada.

Asus RT-AC66U_B1 haciendo de cliente de VPN

sábado, 4 de abril de 2020 Sin comentarios

Haciendo uso del firmware de Asuswrt-Merlin se permiten hacer ciertas cosas bastante provechosas. En otra entrada comenté cómo montar un cliente OpenVPN bajo Proxmox y que no consumiese excesivos recursos, pero seguía sin ser todo lo óptimo que deseaba. Al final me decanté por dejar dicha carga al servicio de un router libre de Asus.

Lo primero de todo es ir a la sección «VPN->Cliente VPN» y configurar los parámetros según nuestro proveedor. Una vez en marcha y habiendo marcado la opción de «Force Internet traffic through tunnel» como «Policy Rules (strict)», podremos añadir la IP de las máquinas que queramos que pasen por dicha VPN.

Si además necesitamos redirigir puertos, la cosa de complica un poco más. Necesitaremos habilitar el acceso por ssh a nuestro router desde «Administración->Sistema->Enable SSH» y también habilitar la partición JFFS desde «Administración->Sistema->Enable JFFS custom scripts and configs». Accederemos por ssh con nuestro login habitual de la interfaz web y crearemos un nuevo fichero:

nano /jffs/scripts/nat-start

En él introduciremos reglas de enrutado:

#!/bin/sh

DEV=»tun11″
PROTO=»tcp»
EXT_PORT=»50001″
INT_IP=»192.168.1.100″
INT_PORT=»22″

ipt() {
# precede insert/append w/ deletion to avoid dupes
while iptables ${@/-[IA]/-D} 2> /dev/null; do :; done
iptables $@
}

# create internal port forward
ipt «-t nat -I PREROUTING -i $DEV -p $PROTO –dport $EXT_PORT -j DNAT –to $INT_IP:$INT_PORT»
ipt «-I FORWARD -i $DEV -p $PROTO -d $INT_IP –dport $INT_PORT -j ACCEPT»

exit 0

El parámetro «tun11» equivaldría al primer cliente de VPN configurado en nuestro router y el script debería funcionar sin problemas como se indica en este foro de donde lo saqué nada más reiniciar el router. Pero a mi no me funcionó, es más, perdía toda la conectividad hacia el exterior. Lo acabé solucionando dejando simplemente una línea tras mucho probar:

iptables -t nat -I PREROUTING -i tun11 -p tcp –dport 50001 -j DNAT –to 192.168.1.100:22

 

Contenedores LXC desde Virtual Machine Manager

sábado, 4 de abril de 2020 Sin comentarios

En una entrada anterior comenté la sustitución de Proxmox por Virtual Machine Manager y me quedó por indicar cómo administrar desde él el servicio LXC de forma remota. Y es que no permite la creación del sistema de ficheros raíz de nuestro nuevo contenedor de forma remota, por lo que hay que proveerle la ruta en la que se encuentra. Al final opté por una solución relativamente sencilla: instalar lxc pero no habilitarlo, simplemente usarlo para descargar nuestros sistemas de ficheros raíz:

apt install lxc
lxc-create -n ubuntu1804 -t download

Nos mostrará un listado y, en mi caso, seleccioné descargar una Ubuntu Bionic para arquitectura AMD64. Después, simplemente hice una copia para utilizarla para un servidor Seafile, dejando la descargada para usarla como plantilla cada vez que necesitase un nuevo contenedor:

cp -a /var/lib/lxc/ubuntu1804/rootfs/* /lxc/001-seafile/

El problema es que lo que hemos descargado es un sistema Ubuntu cuyo usuario root no tiene contraseña. Para resolverlo deberemos cargar el sistema y asignarle una contraseña:

chroot /lxc/001-seafile/

passwd

exit

Ahora sencillamente podríamos desinstalar el paquete «lxc» y simplemente utilizar nuestra plantilla.

Lector de DNI electrónico en Gnu/Linux

sábado, 4 de abril de 2020 1 comentario

Compré un lector de DNI electrónico de la marca Woxter, cuya denominación bajo el comando «lsusb» es «Alcor Micro Corp. AU9540 Smartcard Reader». Para hacerlo reconocible para el sistema encontré muy útil la entrada en el blog de Informática Dantesca sobre ello. Básicamente el problema principal para que funcionase radicaba en la instalación de ciertos paquetes en OpenSuse:

pcsc-lite pcsc-tools perl-pcsc pcsc-ccid pcsc-acsccid libpcsclite1 libusb-1_0-0

Reiniciamos el servicio:

service pcscd restart

Con eso ya deberíamos de hacer funcionar el lector en el sistema (ejecutando «pcsc_scan» podremos comprobar que el lector no da información acerca de nuestro DNI-E) y sólo nos quedarían un par de pasos sobre el navegador web para que no dejase utilizarlo.

Habrá que instalar el paquete correspondiente a nuestra distribución desde el Cuerpo Nacional de Policia (en mi caso OpenSuse_Leap15.1_libpkcs11-dnie-1.5.3-1.x86_64.rpm ) y después, desde la sección de «Dispositivos de seguridad» de Firefox, cargaremos un nuevo controlador cuya ruta se encuentra en «/usr/lib64/libpkcs11-dnie.so».

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

Averiguar la dirección IP de una máquina virtual con KVM

sábado, 4 de abril de 2020 Sin comentarios

Con el siguiente comando el enlace de red disponible:

virsh net-list

Sabiendo el nombre del mismo («default») podremos encontrar más detalles:

virsh net-info default

Y lo interesante será que nos muestre las IP asignadas con el DHCP interno a cada una de las máquinas virtuales que tengamos:

virsh net-dhcp-leases default

Si la máquina virtual no está utilizando el DHCP interno, podemos sacar un listado de los nombres de nuestras máquinas con el siguiente comando:

virsh list

Sabiendo el nombre de la máquina (en nuestro caso suponemos que sea «Windows10») que nos interesa ejecutaremos el siguiente comando:

arp -an | grep `virsh dumpxml Windows10 | grep «mac address» | awk -F\’ ‘{ print $2}’`

Categories: Virtualización Tags: , , ,

Las actualizaciones de Windows 10 que se comen Grub

sábado, 4 de abril de 2020 Sin comentarios

Por algún motivo, en muchas de las actualizaciones que realiza Windows 10 hace desaparecer Grub o simplemente impone su arranque en la BIOS sobre el de Grub. Para prevenirlo simplemente hay que editar el registro de Windows para hacerle creer que su gestor de arranque es el de Grub.

Abrimos como administrador el cmd de Windows y escribimos lo siguiente:

bcdedit /enum firmware

Esto nos listará las entradas que existen en nuestra UEFI. Si no nos aclaramos con los datos que nos ofrece siempre podremos identificar las rutas de arranque para UEFI con el programa EasyUEFI.

Sabiendo la ruta de nuestro cargador Grub, sólo tendremos que ejecutar en el anterior terminal lo siguiente:

bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

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

Descargar cursos de Udemy

sábado, 4 de abril de 2020 1 comentario

Udemy es una plataforma de cursos en línea bastante completa. Si somos usuarios de esta y deseamos poder acceder a los materiales de alguno de los cursos que tengamos comprados sin necesidad de hacer uso de la conexión a Internet, podemos hacer uso de un script que nos lo descargará de forma automatizada.

El proyecto se llama Udemy Downloader GUI. La última versión data de hace 27 días y su creador promete cambios interesantes como una interfaz web en un futuro.

Categories: Sin categoría Tags: , ,

Acceso a discos KVM

sábado, 4 de abril de 2020 Sin comentarios

Para acceder a unidades de disco utilizadas por máquinas virtuales KVM sólo tenemos que seguir algunos sencillos pasos.

Lo primero es identificar la primera unidad loopback disponible:

losetup -f

Asociaremos la unidad que nos devuelve el paso anterior con nuestra imagen de disco:

losetup /dev/loop0 /rutaKVM/discoWindows.img

A continuación podremos identificar las particiones contenidas en el fichero anterior:

kpartx -av /dev/loop0

Podemos visualizar las particiones mapeadas con el siguiente comando:

ls -la /dev/mapper/

Y al final podremos montarla del siguiente modo:

mount /dev/mapper/loop0p2 /mnt/virtualHDD/

Cuando hayamos terminado de trabajar con la unidad de disco virtual desharemos lo hecho:

umount /mnt/virtualHDD/

kpartx -dv /dev/loop0

losetup -d /dev/loop0

Si lo que tenemos es un disco con formato «qcow2» podemos recurrir a otra estrategia. Habilitamos el módulo NBD (Network Block Devices):

modprobe nbd max_part=8

Conectamos al dispositivo como si fuese una unidad de red:

qemu-nbd –connect=/dev/nbd0 /rutaKVM/discoWindows.qcow2

Buscamos las particiones del disco:

fdisk /dev/nbd0 -l

Montamos la que deseemos:

mount /dev/nbd0p1 /mnt/virtualHDD/

Y para cuando terminemos, deshacemos lo hecho:

umount /mnt/virtualHDD/
qemu-nbd –disconnect /dev/nbd0
rmmod nbd

Recuperando archivos de medios dañados

sábado, 4 de abril de 2020 Sin comentarios

Cuando nos encontramos con una unidad de almacenamiento con daños que impiden la lectura de alguno de sus sectores y, por tanto, impiden la extracción de alguno de sus ficheros, podemos recurrir a ciertos métodos, sobretodo cuando se tratan de vídeos e imágenes que pueden subsistir de manera razonable a falta de algunos bytes de datos.

dd if=ArchivoConBloquesDañados of=ArchivoRecuperado bs=4k conv=noerror,sync