Archivo

Archivo para abril, 2020

Autofs para unidades NFS

viernes, 17 de abril de 2020 Sin comentarios

Autofs nos permite montar unidades bajo demanda. En mi caso mi intención era evitar montar las unidades NFS en el arranque y dejarlo para cuando realmente necesitase acceder a ellas. Esto nos ahorra tiempo de carga y libera recursos cuando no estemos haciendo uso de ellos.

Su instalación es bastante simple en OpenSuse:

zypper install autofs

Editaremos un fichero «/etc/auto.master» que contendrá el punto de montaje de nuestras unidades NFS, el fichero con la información acerca de las unidades y el tiempo que dejará pasar después de su último uso para desmontarla:

+auto.master
/mnt/nfs /etc/auto.nfs –timeout=60

Crearemos el fichero «auto.nfs» que contendrá el nombre de la carpeta donde queremos montar la unidad NFS, el tipo de sistema de fichero incluyendo algunos parámetros de conexión y la ruta hasta la unidad de red:

equipo100 -fstype=nfs,soft,nolock 192.168.1.100:/mnt/Equipo100Share
equipo200 -fstype=nfs,soft,nolock 192.168.1.200:/mnt/Equipo200Share

Esto hará que tengamos dos directorios «/mnt/nas/equipo100» y «/mnt/nas/equipo200». Para que se monten tendremos que escribir la ruta completa en nuestro gestor de ficheros («dolphin» en mi caso) o simplemente hacer accesos directos a ellos.

Para terminar reiniciaremos el servicio para que cargue la configuración y, si no lo está por defecto, habilitaremos el servicio en el arranque del sistema:

systemctl restart autofs

systemctl enable autofs

Categories: GNU/Linux, OpenSuse Tags: , ,

Mejorando los tiempos de arranque en Gnu/Linux

viernes, 17 de abril de 2020 Sin comentarios

En Linux tenemos una serie de herramientas que nos permiten analizar qué servicios tardan más en arrancar que otros y observar como afecta a sus dependencias.

Con el siguiente comando obtenemos los tiempos generales en segundo que tarda cada parte del sistema en estar preparado:

systemd-analyze

A veces no te puedes fiar al 100% y se recomienda el uso de un cronómetro para comprobarlo, pero indudablemente nos da una valoración aproximada.

Con el siguiente comando obtendremos un listado de los procesos que intervienen en el arranque del sistema ordenados por tiempo:

systemd-analyze blame

Y el comando que más utilidad me proporciona personalmente es el que nos genera un gráfico con barras que nos hacen entender los tiempos de los procesos y sus dependencias:

systemd-analyze plot > boot_analysis.svg

El fichero «.svg» que se genera lo podemos abrir con Gimp o algún navegador web.

En mi caso, con OpenSuse Tumbleweed, teniendo dos unidades montadas a través de «autofs» hice lo siguiente:

  • «systemctl disable NetworkManager-wait-online.service» un servicio que simplemente retrasa al resto hasta que tenemos conexión de red. En mi caso, al no tener ningún servicio dependiente de la red pude deshabilitarlo y ahorrarme 7 segundos.
  • Cambié la administración de red de «Wicked» a «NetworkManager», con lo que la conexión de red queda relegada a la carga de escritorio del usuario.
  • Deshabilité el servicio «btrfsmaintenance-refresh.service» ya que no tenía ningún dispositivo de almacenamiento con BTRFS.
  • Desinstalé «Postfix» porque no le daba ningún uso, no envío correo electrónico ni espero recibir notificaciones por ese medio en la cuenta «root».

Con todo lo anterior realizado pasé de más de 40 segundos a 18. Puede parecer poco ahorro, pero se agradece.

De Ubuntu 18.04 Server a cliente Kodi

miércoles, 15 de abril de 2020 Sin comentarios

Partiendo del hecho de que una Ubuntu Server carece de interfaz gráfica tal cual la conocemos habitualmente, a la hora de instalar un Kodi y que sea lo único que aparezca se hace algo laborioso.

Instalaremos Kodi con lo siguiente:

add-apt-repository ppa:team-xbmc/ppa
apt install kodi

En caso de tener una tarjeta gráfica de Nvidia, instalaremos su driver propietario:

apt install ubuntu-drivers-common
ubuntu-drivers devices
ubuntu-drivers autoinstall

Observando los diferentes escritorios a los que podemos optar, yo elegí Lubuntu por su ligereza:

tasksel –list-task
tasksel install lubuntu-core
service lightdm start

Con lo anterior ya deberíamos tener una interfaz gráfica donde hacer login que hará que arranque Kodi nada más entrar. Para no necesitar introducir la contraseña podemos hacer que entre automáticamente creando un fichero «/etc/lightdm/lightdm.conf.d/50-myconfig.conf» que incluya lo siguiente:

[Seat:*]
autologin-user=nombre_de_usuario
autologin-user-timeout=0

Sin embargo, nos encontraremos con problemas para hacer passthrough de sonido a través del HDMI de la gráfica. Tendremos que crear un script que se inicie con la sesión que recoja estos comandos:

echo autospawn = no > $HOME/.config/pulse/client.conf
pulseaudio –kill > /dev/null 2>&1

 

Software libre para servicios en red

domingo, 5 de abril de 2020 Sin comentarios

Desde la comunidad Self-Hosted de Reddit encontré un repertorio lleno de alternativas de software libre para cubrir las necesidades que se nos puedan pasar por la cabeza y que podemos implantar con mayor o menor dificultad en nuestro servidor. Desde luego sirve como buen punto de partida cuando sabemos que queremos algo pero no sabemos por dónde empezar a probar proyectos.

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: , , ,