Jellyfin, el Media Center del Open Source

Por estos días el sitio se ha dedicado a brindar soluciones de streaming de multimedia. Hoy toca el turno a un proyecto que me he seguido de cerca desde que saliera. Se trata del «Netflix» del Open Source, Jellyfin.

1-¿Qué es Jellyfin?

Al llegar Emby a la versión 3.6 y decidió cerrar el código, pasando a ser privativo. Un equipo de desarrolladores, decidió hacer un Fork de la versión 3.5.2 de Emby para crear una alternativa 100% Software Libre y totalmente gratuita a Plex y Emby. Con esto, nace Jellyfin. Jellyfin es un servidor multimedia donde podremos tener todas nuestras películas, series, música, libros, todos organizados y centralizados en un único lugar.

El punto fuerte de Jellyfin, no solo es que sea 100% Software Libre y gratuito, sino que tenemos la total garantía que todo nuestro contenido Multimedia, así como nuestras fotos o vídeos domésticos, mantienen la total privacidad, ya que nuestro servidor de Jellyfin, en ningún caso se conectará a servidores de terceros del mismo modo que lo hace Plex o Emby.

El servidor podemos instalarlo en todo tipo de Sistemas Operativos, ya que es totalmente multiplataforma. Windows, Linux, Mac. Actualmente hay clientes disponibles para Jellyfin en Android, Android TV, Amazón Fire TV o Kodi. También podemos utilizar la versión web, mediante un navegador web, DLNA, Chromecast, Roku. El equipo de Jellyfin, está abierto como todo proyecto de Software Libre, a la colaboración para el resto de dispositivos y Sistemas Operativos, como IOS, entre otros.

El servidor actualmente se siente muchísimo más rápido y ligero que Emby y esto es debido, entre muchas otras, a que están optimizando la interfaz web, que ya es independiente del propio servidor.

2-Instalación y configuración de Jellyfin

Requisitos de la VM para el presente tutorial:

  • Sistema Operativo: Debian 10 (Buster)
  • CPU: 4 cores
  • M. RAM: 4GB
  • Disco de 32GB para los temporales de la transcodificación.
  • Disco de volumen redimensionable para los datos multimedia.

Actualizamos el sistema con los repos mas actualizados que se tengan:

apt update
apt upgrade -y

Creamos un directorio para albergar los medios audio-visuales en Jellyfin y sus permisos:

mkdir /mnt/jellyfin
mkdir /mnt/jellyfin/peliculas
mkdir /mnt/jellyfin/series
mkdir -p /mnt/jellyfin/musica/videoclips
chmod -R 755 /mnt/jellyfin

Dedicaremos un disco con un volumen lógico que se utilizará para montar el directorio “/mnt/jellyfin”. A continuación, se muestra la información del volumen (una vez realizadas las configuraciones), después de correr el comando “lsblk”:

# [...]
sdb 8:16 0 32G 0 disk
└─sdb1 8:17 0 32G 0 part
└─vg2-lv4 254:0 0 32G 0 lvm /mnt/jellyfin
# [...]

Creamos un directorio para los instaladores de Jellyfin y accedemos a este:

mkdir /opt/jellyfin
cd /opt/jellyfin

Descargamos las versiones mas recientes y estables de los paquetes necesarios para su instalación:

wget --no-check-certificate https://tor1.mirror.jellyfin.org/releases/server/debian/versions/stable/server/10.7.0~rc2/jellyfin-server_10.6.4-1_amd64.deb
wget --no-check-certificate https://tor1.mirror.jellyfin.org/releases/server/debian/versions/jellyfin-ffmpeg/4.3.1-3/jellyfin-ffmpeg_4.3.1-3-buster_amd64.deb
wget --no-check-certificate
https://tor1.mirror.jellyfin.org/releases/server/debian/versions/stable/web/10.7.0~rc2/jellyfin-web_10.6.4-1_all.deb
wget --no-check-certificate https://tor1.mirror.jellyfin.org/releases/server/debian/versions/stable/meta/10.7.0~rc2/jellyfin_10.6.4-1_all.deb

Procedemos con la instalación de los paquetes:

dpkg -i jellyfin-server*.deb jellyfin-web*.deb jellyfin_*.deb jellyfin-ffmpeg_*.deb

Esto terminara en error por falta de dependencias. Para solucionarlo, corremos el siguiente comando, que instalara las dependencias faltantes y seguidamente los paquetes anteriores.

apt -f install -y

Hasta este punto contamos con un servidor medios basado en Jellyfin totalmente funcional, al cual se puede acceder mediante el enlace:

http://jellyfin.empresa.midominio.cu:8096

Nos recibe el “Wizard” de Jellyfin para ayudarnos con las configuraciones iniciales. Comenzamos especificando el idioma:

Creamos la cuenta de administración de Jellyfin:

Ahora podremos agregar los medios visuales, dando click en «Añadir biblioteca de medios»:

Los medios soportados por Jellyfin son los siguientes:

Para este ejemplo, comenzaremos agregando películas:

Realizado lo anterior, estamos en condiciones de avanzar y dar click en el botón “+”, para agregar una carpeta de medios a Jellyfin:

A continuación, agregamos el idioma con el que se descargaran las reseñas, los subtítulos y demás extras para el medio (requiere conexión a internet para ello). Las demás opciones las dejamos por defecto, ya que, así como están permiten el funcionamiento del servicio:

Una vez agregado correctamente el contenido, debería mostrarse así:

Al continuar, nos pedirá el idioma de las etiquetas y en este caso especificaremos el inglés, ya que, por lo general, los buenos filmes son anglosajones y las etiquetas para identificarlos mejor será con su propio idioma.

Deshabilitamos o habilitar todas las conexiones remotas al servidor Jellyfin dependerá de cada cual. En este caso lo dejamos por defecto:

Llegado aquí, ya tenemos toda la configuración lista.

Nos autenticamos con el usuario de administración creado:

SI nuestra carpeta de medios no tenía ninguna película, pues Jellyfin no podrá indexar nada y se visualizaría solamente como se muestra, a continuación:

Un servidor de medios audio-visuales no es nadie sin ellos, así que le agregamos contenido desde nuestro disco externo (en este caso) usando la herramienta WinSCP (muy cómoda para las transferencias Windows-Linux):

Una vez indexados los metadatos (esperar al 100%), nuestro servidor de medios nos mostrará el contenido agregado al servidor.

Una vista desde dentro de una película:

Otra vista con varios medios agregados:

A continuación, se muestra la estructura seguida para algunos de los medios indexados en el servidor Jellyfin:

#/mnt/jellyfin/peliculas
#Películas    
#|
#+-- Me Before You
#|   |-- Me Before You (2014).jpg
#|   +-- Me Before You (2014) - [480p].avi
#|
#+-- Soul
#|   |-- Soul (2020) - [1080p].jpg
#|   |-- Soul (2020) - [1080p].mkv
#|   |-- Soul (2020) - [1080p].spa.default.srt
#|   |-- Soul (2020) - [1080p].eng.srt
#|   +-- trailer.mp4
#|
#+-- The Croods 2
#|    |-- The Croods 2 (2020) - [1080p].jpg
#|    |-- The Croods 2 (2020) - [1080p].mkv
#|    |-- The Croods 2 (2020) - [1080p].spa.default.srt
#|    +-- The Croods 2 (2020) - [1080p].eng.srt
#|
#...

#/mnt/jellyfin/series
#Programas de TV   
#|
#+-- The Borgias
#|   |-- The Borgias.jpg
#|   +-- Season 01
#|       |-- Season 01.jpg
#|       |-- The Borgias S01E01 - E02.avi
#|       |-- The Borgias S01E01 - E02.srt
#|       |-- The Borgias S01E03.avi
#|       |-- The Borgias S01E03.srt
#|       +-- ...
#|
#+-- The Great
#|   |-- The Great.jpg
#|   +-- Season 01
#|       |-- Season 01.jpg
#|       |-- The Great S01E01.avi
#|       |-- The Great S01E01.srt
#|       |-- The Great S01E02.avi
#|       |-- The Great S01E02.srt
#|       +-- ...
#|
#+-- Warrior
#|   |-- Warrior.jpg
#|   |-- Season 01
#|   |   |-- Season 01.jpg
#|   |   |-- Warrior S01E01.avi
#|   |   |-- Warrior S01E01.srt
#|   |   |-- Warrior S01E02.avi
#|   |   |-- Warrior S01E02.srt
#|   |   +-- ...
#|   +-- Season 02
#|       |-- Season 02.jpg
#|       |-- Warrior S02E01.avi
#|       |-- Warrior S02E01.srt
#|       |-- Warrior S02E02.avi
#|       |-- Warrior S02E02.srt
#|       +-- ...
#...
#/mnt/jellyfin/musica/videoclips
#Videos Musicales
#|
#+-- Variado (2020)
#|   |-- Black Eyed Peas Ft Shakira - Girl Like Me
#|   |-- Justin Timberlake - Cry me a river - Dance Video
#|   |-- Maluma Ft The Weeknd - Hawái(Remix)
#|   |-- Rosalia Ft The Weeknd - Blinding Lights
#|   +-- Clean Bandit - Symphony (feat. Zara Larsson)
#|
#+-- Sia
#|   |-- Sia.jpg
#|   |-- California Dreamin.mp4
#|   |-- Chandelier.mp4
#|   +-- ...
#|
#...

3-Nginx como proxy inverso

Se configurará Nginx como proxy inverso, redireccionando las peticiones HTTP hacia HTTPS y especificando solo el nombre del servidor web.

Instalamos Nginx:

apt install nginx -y

A continuación, generaremos los certificados SSL auto-firmados con OpenSSL:

openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Respondemos según convenga:

Generating a RSA private key
......................................................................................+++++
..........................................................................................................+++++
writing new private key to '/etc/ssl/private/nginx-selfsigned.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CU
State or Province Name (full name) [Some-State]:HABANA
Locality Name (eg, city) []:LaHabana
Organization Name (eg, company) [Internet Widgits Pty Ltd]:EMPRESA
Organizational Unit Name (eg, section) []:REDES
Common Name (e.g. server FQDN or YOUR name) []:jellyfin.empresa.midominio.cu
Email Address []:[email protected]

Ambos archivos que se crearon fueron ubicados en los subdirectorios apropiados de “/etc/ssl”.
Como estamos usando OpenSSL, deberíamos también crear un grupo fuerte de Diffie-Hellman (DH), el cual es usado en la negociación Perfect Forward Secrecy (PFS) con los clientes:

openssl dhparam -out /etc/nginx/dhparam.pem 2048

Primero creamos un nuevo fragmento de configuración de Nginx en el directorio “/etc/nginx/snippets”.

Para distinguir apropiadamente el propósito de este fichero, le llamaremos “self-signed.conf”:

nano /etc/nginx/snippets/self-signed.conf

Dentro de este fichero, necesitamos establecer la directiva “ssl_certificate” a nuestro certificado y la directive “ssl_certificate_key” a la llave asociada. En nuestro caso, esto lucirá así:

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

Editamos el siguiente fichero para aumentar la seguridad de encriptación:

nano /etc/nginx/snippets/ssl-params.conf

Agregamos lo siguiente, adaptando a su red:

ssl_protocols TLSv1.3 TLSv1.2; # Requires nginx >= 1.13.0 else use TLSv1.2
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparam.pem;
#
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305-OLD:ECDHE-RSA-CHACHA20-POLY1305-OLD:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256;
#
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
# resolver NS1 NS2 valid=300s;
resolver pdc1.empresa.midominio.cu valid=300s;
resolver_timeout 5s;
# Disable strict transport security for now. You can uncomment the following
# line if you understand the implications.
# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

Creamos el bloque de configuración de Nginx para Jellyfin:

nano /etc/nginx/conf.d/jellyfin.conf

Agregamos lo siguiente:

server {
   listen 80;
   listen [::]:80;
   server_name jellyfin.empresa.midominio.cu;

   # enforce https
   return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl;
   listen [::]:443 ssl;
   server_name videos.*;

   access_log /var/log/nginx/jellyfin.access;
   error_log /var/log/nginx/jellyfin.error;

   include snippets/self-signed.conf;
   include snippets/ssl-params.conf;

   set $jellyfin 127.0.0.1;

   location / {
   proxy_pass http://$jellyfin:8096;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;

   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Forwarded-Protocol $scheme;
   proxy_set_header X-Forwarded-Host $http_host;

   # Disable buffering when the nginx proxy gets very resource heavy upon streaming
   proxy_buffering off;
   }

   # location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/
   location ~ ^/web/$ {
   # Proxy main Jellyfin traffic
   proxy_pass http://$jellyfin:8096/web/index.html/;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Forwarded-Protocol $scheme;
   proxy_set_header X-Forwarded-Host $http_host;
   }
}

Verificamos que la configuración no tenga errores de sintaxis:

nginx -t

Si todo está bien, debe devolvernos lo siguiente:

nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/ssl/certs/nginx-selfsigned.crt"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Esta configuración en particular arroja una advertencia ya que nuestro certificado auto-firmado no puede usar el engrapado SSL. Esto se espera y nuestro servidor aún puede cifrar las conexiones correctamente, por lo que obviamos la advertencia.

Reiniciamos el servicio:

systemctl restart nginx

El servidor web Nginx está funcionando ahora como proxy inverso, para el servicio de Jellyfin en el puerto 80, redireccionando y asegurando la conexión por HTTPS 443, a través del siguiente enlace:

http://jellyfin.empresa.midominio.cu

4-JelLDAP. Autenticacion por LDAP para Jellyfin

Si nuestro servidor Jellyfin tiene salida a internet, basta con ir al «Panel de Control > Extensiones > Catálogo» e instalar el plugin “LDAP Authentication”:

Instalamos la versión 9.0.0.0, ya que la 10.0.0.0 no se instalaba en la versión de Jellyfin usada en este tutorial:

Reiniciamos el servicio de Jellyfin para terminar la instalación:

systemctl restart jellyfin

En caso que usted no cuente con conexión a internet en su servidor y no puede instalar el plugin por los repos oficiales de Jellyfin, puede bajar el plugin del siguiente enlace:

Una vez suba el plugin al servidor, debe ubicarlo en el directorio “/var/lib/jellyfin/plugins” (que no existe por defecto, pero que se crea tras habilitar/deshabilitar alguno de los plugins por defecto desde la web).

Luego se le debería dar los permisos necesarios:

cd /var/lib/jellyfin/plugins/
unzip LDAP_Authentication_9.0.0.0.zip
chown -R jellyfin:jellyfin /var/lib/jellyfin/plugins/
chmod 755 'LDAP Authentication'
chmod -R 644 'LDAP Authentication'/*

Reiniciamos el servicio de Jellyfin para terminar la instalación:

systemctl restart jellyfin

4.1-Configuraciones necesarias en el ADDC

Para un ADDC en Samba4, correr los siguientes comandos, adaptando a su red:

Creamos el grupo «JellyfinUsers»:

samba-tool group add "JellyfinUsers" \
--groupou="OU=Grupos" \
--description="Grupo para los usuarios con acceso a Jellyfin"

Agregamos un usuario al grupo creado anteriormente:

samba-tool group addmembers "JellyfinUsers" usuario1.apellido

Con esto, ya contamos con el grupo de Jellyfin y con un usuario como miembro del mismo.

4.2-Configuraciones del plugin “LDAP-Auth”

El plugin no funciona completamente bien, pues al autenticar que el usuario existe en el ADDC y la contraseña ingresada coincide, debería crear un usuario en Jellyfin con el mismo “uid” del ADDC, si se trata del primer login en el servidor (debe estar habilitada la opción en la configuración del plugin). Por eso, en este tutorial se va a optar por autenticar usuarios del ADDC, siempre y cuando sus cuentas hayan sido creadas previamente en el Jellyfin, especificando que la contraseña se verificará por LDAP.

Creamos un usuario del ADDC y especificamos el tipo de autenticación:

Nos desplazamos a “Panel de Control > Extensiones” y seleccionamos el plugin “LDAP-Auth”. Procedemos a configurarlo.

Inicialmente nos pide el servidor LDAP (o Directorio Activo):

En este caso usaremos LDAP sin cifrado (comunicación por defecto en texto plano entre el servidor LDAP y el Jellyfin):

Especificamos la raíz del nuestro árbol del directorio:

Como trabajaremos sin cifrado, especificamos el puerto por defecto de LDAP:

Los atributos que nos permitirán autenticarnos, cuando se nos pida el nombre de usuario. No puede faltar “sAMAccountName”, cuando se trata del LDAP de un Samba4 o Directorio Activo de Windows:

Similar a la lista anterior, pero es exige que se confirme que el atributo que identifica al usuario en el ADDC:

Filtro para encontrar los usuarios que pertenecen al grupo “JellyfinUsers”:

Esto se deja por defecto:

Especificamos la ruta del usuario que encuestara al LDAP para validar las autenticaciones de los usuarios de Jellyfin:

Especificamos la contraseña del usuario anterior, si no está permitida la exploración anónima del directorio:

Deshabilitamos la opción de creación del usuario en el primer login, que ya se explicó anteriormente, que no funciona correctamente en esta versión:

Luego de guardar los cambios, se requiere reiniciar el servicio de Jellyfin para que las configuraciones surtan efecto.

Si nos intentamos autenticar con un usuario que no pertenece al grupo “JellyfinUsers”, y tenga o no tenga una previamente creada en Jellyfin, saldrá el siguiente error tras intentar autenticarse:

Si nos intentamos autenticar con un usuario que pertenece al grupo “JellyfinUsers”, pero que no tiene una previamente creada en Jellyfin, saldrá el siguiente error tras intentar autenticarse:

Si nos autenticamos con un usuario que pertenezca al grupo de Jellyfin y tiene una cuenta previamente creada, pues éste accederá correctamente al servidor de medios audiovisuales.

5-Ajustes en los temporales de la transcodificación

Durante las pruebas realizadas, como resultado de la reproducción de contenido HD por varios usuarios simultáneamente, el directorio de los temporales de la transcodificación (/var/lib/jellyfin/transcodes) tuvo un crecimiento desproporcionado muy acelerado. Una vez que se llena la partición «/var» que contiene a dicho directorio, el servicio se detiene y puede provocar inestabilidad en el sistema.

Lo recomendable sería tener como espacio para los transcodes, aproximadamente el peso promedio de lo que normalmente se reproduce, multiplicado por el promedio de la cantidad de usuarios que normalmente tiene el servidor. Esta solución implicaría agregar un considerable espacio al servidor.

A continuación, proponemos una vía de solución más económica en cuanto a recursos hardware:

  • Agregar un disco de 32 GB exclusivamente para estos temporales y otros ficheros de reproducción de Jellyfin y montar el nuevo disco montado en «/jellyfin».
  • Crear un script que encueste el % de espacio de la particion «/jellyfin» y que borre los temporales «*.ts» (MPEG Transport Stream) que se crean tras reproducir contenido por web, una vez sea mayor al 70%.
  • Configurar una tarea en el cron que automatice la ejecución dell script cada cierto tiempo (lo pondremos que se ejecute cada 1 min).
  • Configurar el servidor para los nuevos cambios de directorios.

Identificamos el nuevo disco que servirá para albergar la información de multimedia:

fdisk -l

El nuevo disco se reconoce con la etiqueta «sdb». Procedemos a darle formato «ext4»:

mkfs.ext4 /dev/sdb

Creamos el nuevo directorio “/jellyfin”:

mkdir /jellyfin

Editamos “/etc/fstab” y agregamos el nuevo punto de montaje fijo:

nano /etc/fstab

Agregamos lo siguiente:

/dev/sdb1       /jellyfin         ext4 defaults 0 0

Aplicamos los cambios:

mount /dev/sdb1 /jellyfin

Verificamos los puntos de montaje:

lsblk

Entre los resultados, nos fijamos en este que nos interesa:

# [...]
sdb           8:16   0   32G  0 disk
└─sdb1        8:17   0   32G  0 part /jellyfin
# [...]

Creamos los nuevos directorios para los temporales de la transcodificacion y aprovechamos también el de los metadatos:

mkdir /jellyfin/transcodes/
chmod -R 777 /jellyfin/transcodes/
chown -R jellyfin:jellyfin /jellyfin/transcodes/
mkdir /jellyfin/metadata
chmod -R 777 /jellyfin/metadata
chown -R jellyfin:jellyfin /jellyfin/metadata

Vamos a la web de Jellyfin y nos autenticamos como administrador. Luego vamos a “Panel de Control > Reproducción”, habilitamos o no la aceleración por Hardware, tanto para la codificación como para decodificación (es su elección). Cambiamos la ruta de transcodificación a «/jellyfin/transcodes» y guardamos:

Luego vamos a “Panel de Control > General”, cambiamos la ruta de metadatos a «/jellyfin/metadata» y guardamos:

Creamos un directorio para scripts:

mkdir -p /config/scripts

Editamos el fichero del script:

nano /config/scripts/clean-transcodes-temp.sh

Agregamos lo siguiente:

#!/bin/bash
FECHA="$(date +%d-%b-%Y-%H:%M)"
peso="/config/scripts/peso"
x=`(df -h | grep -w "/jellyfin" | awk -F "" '{ print $41$42$43 }')`
logfile="/var/log/jellyfin/myjellyfin.log"

# Obtenemos el % de uso de la particion "/jellyfin" y lo guardamos en la variable "peso"
echo "$x" | sed 's/^[[:space:]]*//' > $peso

# Verificar si el espacio esta lleno completamente
num=`cat $peso`
if [ $num -eq 100 ];
        then
                # Si esta lleno, borrar los ficheros MPEG Transport Stream (.ts)
                rm -rf /jellyfin/transcodes/*.ts
                echo "$FECHA: Se borraron los temporales de Jellyfin al llegar al 100% de uso /jellyfin/transcodes/" >> $logfile
        else
                # Si no esta lleno completamente, pero es superior al 70%, entonces borrar los ficheros ".ts"
                if [ $num -ge 70 ];
                        then
                                rm -rf /jellyfin/transcodes/*.ts
                                echo "$FECHA: Se borraron los temporales de Jellyfin al tener $num% de espacio" >> $logfile
                fi
fi

Damos permisos de ejecución:

chmod +x /config/scripts/clean-transcodes-temp.sh

Creamos una tarea en el cron que se ejecute cada 1 min:

crontab -e

Agregamos lo siguiente:

###########
# LEYENDA #
###########
# "m": minutos (0-59)
# "h": horas (0-23)
# "dow": dia de la semana (0-6)
# "dom": dia del mes (1-28/1-30/1-31)
# "mon": mes (1-12)
# "*": cualquiera
# ",": separa valores dentro de la misma variable (0,5,10)
# "-": define rangos dentro de la misma variable (0-5)
# <m> <h> <dom> <mon> <dow> <directorio del script>
############
# JELLYFIN #
############
* * * * * /config/scripts/clear-transcoding-temp.sh

Reiniciamos el cron:

systemctl restart cron

Referencias Bibliográficas

  1. https://jellyfin.org/docs/. “Documentación oficial de Jellyfin”.
  2. https://ugeek.github.io/blog/post/2019-05-07-el-adios-a-plex-y-emby.-llega-jellyfin.html. “El Adiós a Plex y Emby. Llega Jellyfin”. Mayo, 2019. Ángel.
  3. https://en.wikipedia.org/wiki/Jellyfin. “Wikipedia”.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.8 / 5. Recuento de votos: 15

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Franco Diaz Hurtado 27 artículos
Ing. Telecomunicaciones y Electrónica; 1er Especialista en Redes de ECASA Nivel Central

6 comentarios

  1. Google Chrome 95.0.4638.69 Google Chrome 95.0.4638.69 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36

    Socio buen tuto…

    Que se podria hacer cuando, no se visualiza el preview cuando reproduces una pelicula?

    Saludos.

  2. Google Chrome 90.0.4430.212 Google Chrome 90.0.4430.212 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36

    en mi caso, no puedo agregar una boblioteca que se encuentra en otra particion que es de windows 10, y mi sistema es debian 11

  3. Google Chrome 93.0.4577.82 Google Chrome 93.0.4577.82 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36

    Exelente tuto , en mi caso estoy teniendo problemas para installar en windows 7

  4. Firefox 85.0 Firefox 85.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0

    Una pregunta no configuraste por algun lado del proxy inverso en el nginx el ProxyPass /socket pq resuelta que en los log estoy viendo este error ahora mismo y veo que no está puesto en el ejemplo que tenias.

    [ERR] Could not find handler for «/socket»


  5. Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
    Firefox 81.0 Firefox 81.0 Ubuntu x64 Ubuntu x64
    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0

    Hola, funciona solamente en VM o pude ser instalado en container lxc???

    • Firefox 84.0 Firefox 84.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0

      Hola Eduardo. Puedes montarlo donde quieras.

Responder a Eduardo R. Barrera Pérez Cancelar la respuesta

Tu dirección de correo electrónico no será publicada.


*