Montar bibliotecas cifradas para Jellyfin con Google Drive y Rclone

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:

sudo 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.

rclone config

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

Seleccionamos n puesto que vamos a crear una nueva unidad


No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/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.


name> 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


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

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


Google Application Client Id - leave blank normally.
client_id>
Google Application Client Secret - leave blank normally.
client_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.


Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/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


If 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
Log in and authorize rclone for access
Enter verification code> 4/hsddowerubnolaleob74jhg34fmh977
2019/07/14 22:19:48 Failed to save new token in config file: section 'gdrive_md' not found
--------------------
[gdrive_md]
client_id =
client_secret =
token = {"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"}
--------------------

Por ultimo, si todo esta correcto, pulsamos en y


y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
gdrive_md            drive

Y terminamos, q


e) Edit existing remote
n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/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


carlos@rockpro64:~$ rclone config
Current remotes:

Name                 Type
====                 ====
gdrive_md            drive

e) Edit existing remote
n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/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.


name> 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.


Type of storage to configure.
Choose a number from below, or type in your own value
 1 / Amazon Drive
   \ "amazon cloud drive"
 2 / Amazon S3 (also Dreamhost, Ceph, Minio)
   \ "s3"
 3 / Backblaze B2
   \ "b2"
 4 / Dropbox
   \ "dropbox"
 5 / Encrypt/Decrypt a remote
   \ "crypt"
 6 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
 7 / Google Drive
   \ "drive"
 8 / Hubic
   \ "hubic"
 9 / Local Disk
   \ "local"
10 / Microsoft OneDrive
   \ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
12 / Yandex Disk
   \ "yandex"
Storage> 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.


Remote to encrypt/decrypt.
Normally should contain a ':' and a path, eg "myremote:path/to/dir",
"myremote:bucket" or maybe "myremote:" (not recommended).
remote> 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


How to encrypt the filenames.
Choose a number from below, or type in your own value
 1 / Don't encrypt the file names.  Adds a ".bin" extension only.
   \ "off"
 2 / Encrypt the filenames see the docs for the details.
   \ "standard"
filename_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.


Password or pass phrase for encryption.
y) Yes type in my own password
g) Generate random password
y/g> g
Password strength in bits.
64 is just about memorable
128 is secure
1024 is the maximum
Bits> 128
Your password is: Z_19asdfsdffyiuuirew
Use this password?
y) Yes
n) No
y/n> y
Password or pass phrase for salt. Optional but recommended.
Should be different to the previous password.
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank
y/g/n> g
Password strength in bits.
64 is just about memorable
128 is secure
1024 is the maximum
Bits> 128
Your password is: 640jkq-kbGWzkzjnVdQPFA
Use this password?
y) Yes
n) No
y/n> y
Remote config
--------------------
[gdrive_md_cifrado]
remote = gdrive_md:Media
filename_encryption = standard
password = *** ENCRYPTED ***
password2 = *** ENCRYPTED ***
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
gdrive_md            drive
jellyfin             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


e) Edit existing remote
n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/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:


sudo 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


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


fusermount -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 oo usas OpenmediVault lo puedes añadir como una tarea del contrab


@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.