Montar bibliotecas cifradas para Jellyfin con Google Drive y Rclone

8 minutos de lectura

En el artículo de hoy vamos a ver como utilizar Google Drive como almacenamiento para nuestra biblioteca de Jellyfin, si dispones de una cuenta ilimitada, imagina las posibilidades, además cifraremos el contenido de la biblioteca para evitar las “miradas de curiosos”".

Para ello vamos utilizar rclone para montar Google Drive en nuestro dispositivo como si fuese un sistema de ficheros local, aunque este articulo está realizado sobre OpenmediVault , lo puedes aplicar a cualquier otro sistema operativo o distribución linux o almacenamiento (hubic, yandex, etc).

Instalación de rclone

Tan facil como teclar el siguiente codigo:

1sudo apt install rclone

Configurando rclone

Debemos de configurar rclone para que pueda crear una unidad local en nuestro dispositvo de nuestro espacio en la nube.

1rclone config

Iniciara un pequeño wizard que nos ayudara en la configuración

Seleccionamos n puesto que vamos a crear una nueva unidad

1
2No remotes found - make a new one
3n) New remote
4s) Set configuration password
5q) Quit config
6n/s/q> n

Nos pide que le pongamos un nombre a la unidad que vamos a crear, yo he elegido gdrive_md, pon el que mas te guste.

1
2name> gdrive_md

Ahora seleccionaremos el tipo de nube con la vamos a trabajar, seleccionamos 7 (Google Drive), en mi version de rclone es la opción 7, puede variar según la versión de rclone que estés ejecutando

 1
 2Type of storage to configure.
 3Choose a number from below, or type in your own value
 4 1 / Amazon Drive
 5   \ "amazon cloud drive"
 6 2 / Amazon S3 (also Dreamhost, Ceph, Minio)
 7   \ "s3"
 8 3 / Backblaze B2
 9   \ "b2"
10 4 / Dropbox
11   \ "dropbox"
12 5 / Encrypt/Decrypt a remote
13   \ "crypt"
14 6 / Google Cloud Storage (this is not Google Drive)
15   \ "google cloud storage"
16 7 / Google Drive
17   \ "drive"
18 8 / Hubic
19   \ "hubic"
20 9 / Local Disk
21   \ "local"
2210 / Microsoft OneDrive
23   \ "onedrive"
2411 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
25   \ "swift"
2612 / Yandex Disk
27   \ "yandex"
28Storage> 7

A las siguientes dos preguntas las dejamos en blanco, pulsa Intro

1
2Google Application Client Id - leave blank normally.
3client_id>
4Google Application Client Secret - leave blank normally.
5client_secret>

Ahora es importante que en la configuración del sitio remoto, a la segunda pregunta contestemos n, ya que en OpenmediVault no disponemos de un navegador web para poder validar el token de nuestra cuenta de Gmail.

1
2Remote config
3Use auto config?
4 * Say Y if not sure
5 * Say N if you are working on a remote or headless machine or Y didn't work
6y) Yes
7n) No
8y/n> n

Como he dicho antes, al no disponer de navegador web, necesitamos copiar la dirección url que se muestra en la terminal, y la pegamos en un equipo que si disponga de navegador web, autorizamos a que rclone pueda acceder a nuestra cuenta de gmail, copiamos y pegamos el token en la terminal

 1
 2If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth?client_id=234235345.apps.googleusercontent.com&redirect_urisdfgsdgeroergnnvdvaeei.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=75ca33981d0d73ffaad73242c2911572
 3Log in and authorize rclone for access
 4Enter verification code> 4/hsddowerubnolaleob74jhg34fmh977
 52019/07/14 22:19:48 Failed to save new token in config file: section 'gdrive_md' not found
 6--------------------
 7[gdrive_md]
 8client_id =
 9client_secret =
10token = {"access_token":"yaewre.t8-86685784w4w-aeter034ewYu-awfa1EJOXhXDnNoQCKkV_i9Rts4qsgzyS4JKryBxWb2vkQofN42eqTdiwusCEKP","token_type":"Bearer","refresh_token":"1/zmRrq6F3_XkSyls0k4np3D3ONTdunw0xW0XImMSh5iE","expiry":"2019-07-14T23:19:48.689022+02:00"}
11--------------------

Por ultimo, si todo esta correcto, pulsamos en y

 1
 2y) Yes this is OK
 3e) Edit this remote
 4d) Delete this remote
 5y/e/d> y
 6Current remotes:
 7
 8Name                 Type
 9====                 ====
10gdrive_md            drive

Y terminamos, q

1
2e) Edit existing remote
3n) New remote
4d) Delete remote
5s) Set configuration password
6q) Quit config
7e/n/d/s/q> q

Con esta primera parte ya tendremos creado nuestra unidad para poder ser montada como un sistema de ficheros local en nuestro sistema.

Cifrando carpetas

Como dije al principio, podemos cifrar carpetas y su contenido para evitar “miradas indiscretas”".

Para ello debemos de volver a lanzar el asistente de configuración de rclone

 1
 2carlos@rockpro64:~$ rclone config
 3Current remotes:
 4
 5Name                 Type
 6====                 ====
 7gdrive_md            drive
 8
 9e) Edit existing remote
10n) New remote
11d) Delete remote
12s) Set configuration password
13q) Quit config
14e/n/d/s/q> n

Vemos que ya tenemos configurada una nube (remote) de Google Drive (drive), debemos de seleccionar n y darle un nombre al nuevo sitio, yo he elegido como nombre jellyfin, pon el que mas te guste.

1
2name> jellyfin

En el tipo de almacenamiento seleccionamos 5 (crypt), en mi versión de rclone es la opción 5, puede varios según la versión de rclone que estés ejecutando.

 1
 2Type of storage to configure.
 3Choose a number from below, or type in your own value
 4 1 / Amazon Drive
 5   \ "amazon cloud drive"
 6 2 / Amazon S3 (also Dreamhost, Ceph, Minio)
 7   \ "s3"
 8 3 / Backblaze B2
 9   \ "b2"
10 4 / Dropbox
11   \ "dropbox"
12 5 / Encrypt/Decrypt a remote
13   \ "crypt"
14 6 / Google Cloud Storage (this is not Google Drive)
15   \ "google cloud storage"
16 7 / Google Drive
17   \ "drive"
18 8 / Hubic
19   \ "hubic"
20 9 / Local Disk
21   \ "local"
2210 / Microsoft OneDrive
23   \ "onedrive"
2411 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
25   \ "swift"
2612 / Yandex Disk
27   \ "yandex"
28Storage> 5

Ahora debemos de seleccionar la ubicación dentro del Google Drive (gdrive_md) de la carpeta a cifrar, yo he elegido Media, si no existe la crea.

1
2Remote to encrypt/decrypt.
3Normally should contain a ':' and a path, eg "myremote:path/to/dir",
4"myremote:bucket" or maybe "myremote:" (not recommended).
5remote> gdrive_md:Media

Seleccionamos como queremos que se realice el cifrado, 1 par que no cifre el nombre de los ficheros y 2 para que cifre los nombres, seleccionamos 2

1
2How to encrypt the filenames.
3Choose a number from below, or type in your own value
4 1 / Don't encrypt the file names.  Adds a ".bin" extension only.
5   \ "off"
6 2 / Encrypt the filenames see the docs for the details.
7   \ "standard"
8filename_encryption> 2

Para el cifrado se necesitan un par de claves, puedes dárselas tu o elegir que sea rclone el que lass genere de forma aleatorio, yo he seleccionado que las genere de forma aleatoria, g y la fortaleza de la clave 128, por último pulso y si todo esta correcto.

 1
 2Password or pass phrase for encryption.
 3y) Yes type in my own password
 4g) Generate random password
 5y/g> g
 6Password strength in bits.
 764 is just about memorable
 8128 is secure
 91024 is the maximum
10Bits> 128
11Your password is: Z_19asdfsdffyiuuirew
12Use this password?
13y) Yes
14n) No
15y/n> y
16Password or pass phrase for salt. Optional but recommended.
17Should be different to the previous password.
18y) Yes type in my own password
19g) Generate random password
20n) No leave this optional password blank
21y/g/n> g
22Password strength in bits.
2364 is just about memorable
24128 is secure
251024 is the maximum
26Bits> 128
27Your password is: 640jkq-kbGWzkzjnVdQPFA
28Use this password?
29y) Yes
30n) No
31y/n> y
32Remote config
33--------------------
34[gdrive_md_cifrado]
35remote = gdrive_md:Media
36filename_encryption = standard
37password = *** ENCRYPTED ***
38password2 = *** ENCRYPTED ***
39--------------------
40y) Yes this is OK
41e) Edit this remote
42d) Delete this remote
43y/e/d> y
44Current remotes:
45
46Name                 Type
47====                 ====
48gdrive_md            drive
49jellyfin             crypt

Como se ve, ahora tenemos dos puntos de montaje para nuestra cuenta de Gmail Drive, gdrive_md y jellfin, como veremos mas adelante, si monto gdrive_md y exploro su contenido veremos que el contenido de la carpeta Media está cifrado, en cambio si montamos jellyfin, podemos ver el contenido sin cifrar.

Para finalizar pulsamos la tecla q

1
2e) Edit existing remote
3n) New remote
4d) Delete remote
5s) Set configuration password
6q) Quit config
7e/n/d/s/q> q

PD: Evidetemente, las claves que he puesto son ejemplos ;-)

Montando almacenamiento remoto

Una vez creados las unidades toca montarlas, el procedimiento es el mismo tanto para la carpeta sin cifrar como la cifrada, dependerá de en cual de ellas quieras trabajar. Puesto que lo que quiero es tener mi biblioteca de medios de Jellyfin cifrada, voy a montar la unidad que he llamado Jellyfin, en la carpeta */sharefolders/Rclone/Media/ desde la terminal escribimos:

1
2sudo rclone mount --config "/home/carlos/.rclone.conf" --allow-non-empty --dir-cache-time 15m --allow-other jellyfin: /sharedfolders/Rclone/ &

Copiando ficheros

Podemos copiar ficheros con el comando rclone copy, en el ejemplo copio mi biblioteca de series que tengo en la carpeta sharedfolders/Media/Series a la carpeta remota cifrada jellyfin:/Series

1
2rclone copy --verbose --transfers 50 --checkers 20 --contimeout 60s --timeout 300s --retries 3 --low-level-retries 10 --stats 1s /sharedfolders/Media/Series/ jellyfin:/Series

Desmontando almacenamiento remoto

Para desmontar las unidades montadas:

1
2fusermount -u -z /sharedfolders/Rclone

Montar de forma automática

Podemos añadir la orden de montaje como una tarea programada para que se monte en cada vez que se inicie el servidor

Si lo usas OpenmediVault lo puedes añadir como una tarea del contrab

1
2@reboot sudo rclone mount -v --config "/home/carlos/rclone.conf" --allow-non-empty --dir-cache-time 15m --allow-other jellyfin: /sharedfolders/Rclone/Media/ &

Bibliotecas en Jellyfin

Una vez tengamos la unidad montada, solo queda configurar las bibliotecas dentro de Jellyfin con la nueva ubicación.