Archivo

Archivo para la categoría ‘GNU/Linux’

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

 

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
[email protected] @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

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

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

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

Modificando el mensaje inicial de ssh en Ubuntu 18.04

sábado, 4 de abril de 2020 Sin comentarios

Cada vez que entramos por ssh a una máquina con Ubuntu 18.04 recibimos un mensaje a modo de bienvenida con información acerca de actualizaciones pendientes entre otras cosas. Para personalizarlo un poco me he basado en una entrada del blog de The Geek Stuff.

Básicamente he creado un fichero nuevo con el comando «nano /etc/update-motd.d/99-custom» y he agregado la siguiente información dentro:

#!/bin/sh
printf ‘\n%s\t%s\t%s\n’ «==========» «ESPACIO LIBRE» «==========»
/bin/df -h | grep «sd\|md»

printf ‘\n%s\t%s\t%s\n’ «==========» «ESTADO DEL RAID» «==========»
/bin/cat /proc/mdstat

Con esto, cada vez que accedo al servidor obtengo información sobre el espacio libre de los dispositivos que quiero y el estado del RAID.

Categories: Ubuntu Tags: , ,

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.