Pocos de los servicios de almacenamiento en la nube disponen de cliente de sincronización para el sistema operativo GNU/Linux. La mayoría se limitan a sistemas Windows y MacOS.

Hece tiempo descubrí un estupendo software que permite acceder a la mayoría de los almacenamientos en Internet disponibles a día de hoy. Además, para nuestra alegría y tranquilidad es software libre. No me resultaría cómodo ceder el control de mi almacenamiento en la nube a software propietario.

Este software se llama RClone y, a pesar de su sencillez inicial, esconde una infinidad de opciones para gestionar archivos en la nube y sincronizarlos con el sistema de archivos local.



Hay que decir que RClone está programado con el lenguaje Go, lo que significa que es multiplataforma. En esta ocasión me voy a centrar exclusivamente en la instalación en un sistema GNU/Linux, concretamente Ubuntu 18.04. De todas formas, la mayoría del proceso de instalación en otras variantes de GNU/Linux o en otros sistemas operativos es el mismo y está muy bien explicado en su sitio web en rclone.org.

RClone soporta muchos tipos de almacenamiento. Tienes la lista completa en su web. De todos, tienes que saber que Amazon Drive no está soportado realmente, aunque aparezca en dicha lista. El desarrollador tuvo un problema con Amazon y le retiraron su clave de desarrollador. Si tienes una aún podrías usarlo, pero a día de hoy Amazon mantiene su plan de desarrolladores en modo privado.

Instalación

El proceso de instalación es muy sencillo y está perfectamente documentado, paso a paso, en su página.

Para facilitar aún mas el proceso, han programado un script de instalación que automatiza todo el proceso. Se puede instalar directamente desde el script en la web aunque, como no facilitan una firma digital para su validación, explicaré el proceso paso a paso.

El primero es descargar el binario precompilado. En la línea de terminal ejecura el siguiente comando:

$ curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip

Si obtienes un mensaje de error como este significa que no tienes instalado el comando curl.

Command 'curl' not found, but can be installed with:
sudo apt install curl

Para instalarlo solamente tienes que ejecutar el comando

$ sudo apt install curl

A continuación descomprime el archivo. Esto crea un nuevo directorio.

$ unzip rclone-current-linux-amd64.zip
$ cd rclone-*-linux-amd64

El siguiente paso es instalar el ejectutable en el directorio adecuado para que sea accesible por todos los usuarios del sistema

$ sudo cp rclone /usr/bin/
$ sudo chown root:root /usr/bin/rclone
$ sudo chmod 755 /usr/bin/rclone

El último paso consiste en añadir la ayuda de RClone al comando man

$ sudo mkdir -p /usr/local/share/man/man1
$ sudo cp rclone.1 /usr/local/share/man/man1/
$ sudo mandb

Comprobamos que la instalación es correcta llamando directamente al comando rclone version. Deberías obtener una respuesta parecida a ésta.

rclone v1.42
- os/arch: linux/amd64
- go version: go1.10.1

Configuración

Para configurar RClone has de configurar las credenciales. Toda la configuración se almacena en el fichero

~/<usuario>/.config/rclone/rclone.conf

Fíjate que la configuración de cada usuario es independiente, por lo que solamente tú podrás acceder a tus ajustes y credenciales. Se puede dar instrucciones a rclone para utilizar un archivo de configuración diferente, pero por ahora no vamos a utilizar esta opción.

Cada tipo de almacenamiento necesita unos datos diferentes. La buena noticia es que RClone adapta los datos que pide a este hecho, de manera que solamente te tienes que dejar guiar.

Para utilizar durante el ejemplo, he creado una cuenta de Microsoft OneDrive

Siempre que queramos administrar los almacenamientos tenemos que ejecutar el comando siguiente

$ rclone config

A continuación añado la salida del programa junto con mi entrada.

2018/08/27 18:16:57 NOTICE: Config file "/home/gmartin/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> mi_disco_OneDrive
Type of storage to configure.
Choose a number from below, or type in your own value
 1 / Alias for a existing remote
   \ "alias"
 2 / Amazon Drive
   \ "amazon cloud drive"
 3 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
   \ "s3"
 4 / Backblaze B2
   \ "b2"
 5 / Box
   \ "box"
 6 / Cache a remote
   \ "cache"
 7 / Dropbox
   \ "dropbox"
 8 / Encrypt/Decrypt a remote
   \ "crypt"
 9 / FTP Connection
   \ "ftp"
10 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
11 / Google Drive
   \ "drive"
12 / Hubic
   \ "hubic"
13 / Local Disk
   \ "local"
14 / Mega
   \ "mega"
15 / Microsoft Azure Blob Storage
   \ "azureblob"
16 / Microsoft OneDrive
   \ "onedrive"
17 / OpenDrive
   \ "opendrive"
18 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
19 / Pcloud
   \ "pcloud"
20 / QingCloud Object Storage
   \ "qingstor"
21 / SSH/SFTP Connection
   \ "sftp"
22 / Webdav
   \ "webdav"
23 / Yandex Disk
   \ "yandex"
24 / http Connection
   \ "http"
Storage> 16
Microsoft App Client Id - leave blank normally.
client_id> 
Microsoft App Client Secret - leave blank normally.
client_secret>
Remote config
Choose OneDrive account type?
 * Say b for a OneDrive business account
 * Say p for a personal OneDrive account
b) Business
p) Personal
b/p> p
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...

En este punto, si estás utilizando una sesión gráfica, contesta Y. Se abrirá un navegador web con la página de autenticación del servicio de almacenamiento en la nube.

Después de escribir el usuario y la contraseña OneDrive te pedirá permiso para compartir tus datos con RClone. Tranquilo, se refiere a tu copia local de RClone ya que ésta no se comunica con ningún servidor de terceros ni de su desarrollador.


Sabrás que todo ha ido bien si tienes un mensaje como éste

Si estás usando una sesión que no dispone de modo gráfico tendrás que escribir "N" en la respuesta anterior. RClone te mostrará las instrucciones de lo que tienes que hacer. El proceso consiste en utilizar otro ordenador con modo gráfico para obtener la credencial y pegarla en el primero.

 Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> n
For this to work, you will need rclone available on a machine that has a web browser available.
Execute the following on your machine:
    rclone authorize "onedrive"
Then paste the result below:
result>

El proceso continúa en la ventana de la terminal. Ya puedes cerrar el navegador.

Got code
--------------------
[mi_disco_OneDrive]
type = onedrive

client_id = 
client_secret = 
token = {"access_token":"EwAQA61DBAAU ...... Sfl9C8e8k$","expiry":"2018-08-27T19:35:33.290331155+02:00"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
mi_disco_OneDrive    onedrive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Solamente queda aceptar el cambio pulsando "y". RClone ya tiene lo necesario para acceder a nuestro almacenamiento en la nube.

Acceder al contenido

Para gestionar el contenido del almacenamiento también se utiliza el comando rclone, añadiendo el subcomando que necesitemos junto con uno o más parámetros.

Siempre que queramos hacer referencia a un almacenamiento lo haremos con le nombre que le dimos al crearlo, terminando con ":". En nuestro ejemplo el almacenamiento se llama "midiscoOneDrive:"

La lista de comandos la puedes obtener con rclone help

  about           Get quota information from the remote.
  authorize       Remote authorization.
  cachestats      Print cache stats for a remote
  cat             Concatenates any files and sends them to stdout.
  check           Checks the files in the source and destination match.
  cleanup         Clean up the remote if possible
  config          Enter an interactive configuration session.
  copy            Copy files from source to dest, skipping already copied
  copyto          Copy files from source to dest, skipping already copied
  cryptcheck      Cryptcheck checks the integrity of a crypted remote.
  cryptdecode     Cryptdecode returns unencrypted file names.
  dbhashsum       Produces a Dropbox hash file for all the objects in the path.
  dedupe          Interactively find duplicate files and delete/rename them.
  delete          Remove the contents of path.
  deletefile      Remove a single file path from remote.
  genautocomplete Output completion script for a given shell.
  gendocs         Output markdown docs for rclone to the directory supplied.
  hashsum         Produces an hashsum file for all the objects in the path.
  help            Help about any command.
  link            Generate public link to file/folder.
  listremotes     List all the remotes in the config file.
  ls              List the objects in the path with size and path.
  lsd             List all directories/containers/buckets in the path.
  lsf             List directories and objects in remote:path formatted for parsing.
  lsjson          List directories and objects in the path in JSON format.
  lsl             List the objects in path with modification time, size and path.
  md5sum          Produces an md5sum file for all the objects in the path.
  mkdir           Make the path if it doesn't already exist.
  mount           Mount the remote as a mountpoint. **EXPERIMENTAL**
  move            Move files from source to dest.
  moveto          Move file or directory from source to dest.
  ncdu            Explore a remote with a text based user interface.
  obscure         Obscure password for use in the rclone.conf
  purge           Remove the path and all of its contents.
  rc              Run a command against a running rclone.
  rcat            Copies standard input to file on remote.
  rmdir           Remove the path if empty.
  rmdirs          Remove empty directories under the path.
  serve           Serve a remote over a protocol.
  sha1sum         Produces an sha1sum file for all the objects in the path.
  size            Prints the total size and number of objects in remote:path.
  sync            Make source and dest identical, modifying destination only.
  touch           Create new file or change file modification time.
  tree            List the contents of the remote in a tree like fashion.
  version         Show the version number.

Por ejemplo. El comando rclone ls mi_disco_OneDrive: lista todos los ficheros, pero lo hace de manera recursiva. Así que si tienes muchas carpetas listará todas ellas.

Voy a hacer la prueba con rclone lsd mi_disco_OneDrive:, que lista las carpetas del directorio raiz del almacenamiento. El resultado es éste.

          -1 2018-08-27 18:03:44         0 Documentos
          -1 2018-08-27 18:03:43         0 Imágenes

Lee la lista de comandos anterior para ver todo lo que puedes hacer. Algunos tipos de almacenamiento no permiten ciertas funciones. Por ejemplo, OneDrive no admite renombrar directorios, por lo que si lo intentas RClone dará un error explicando la razón.

Seguridad

Hay que tener en cuenta que el fichero rclone.conf contiene todos los detalles para acceder a los datos de tu almacenamiento en la nube. Por tanto si alguien te lo roba podrá acceder a los mismos como si fueses tú mismo, por lo que tardarás tiempo en darte cuenta.

Normalmente, los proveedores de almacenamiento en la nube detectan cuando un mismo acceso se está utilizando desde direcciones diferentes y probablemente te avisaría. Pero tampoco queremos llegar a este punto.

Para proteger los datos, RClone te permite cifrar el contenido del fichero de configuración. Para ello ejecutaremos de nuevo el comando rclone config

Si seleccionamos la opción "s" te pedirá la contraseña de cifrado.

Current remotes:

Name                 Type
====                 ====
mi_disco_OneDrive    onedrive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> s
Your configuration is not encrypted.
If you add a password, you will protect your login information to cloud services.
a) Add Password
q) Quit to main menu
a/q> a
Enter NEW configuration password:
password:
Confirm NEW configuration password:
password:
Password set
Your configuration is encrypted.
c) Change Password
u) Unencrypt configuration
q) Quit to main menu
c/u/q> 

A partir de ahora, cada vez que llames al comando rclone, éste te pedirá la contraseña.

$ rclone lsd mi_disco_OneDrive:
Enter configuration password:
password:
          -1 2018-08-27 18:03:44         0 Documentos
          -1 2018-08-27 18:03:43         0 Imágenes

Esto puede ser un inconveniente si quieres realizar tareas automáticas. Para solucionar esto se utiliza la variable RCLONE_CONFIG_PASS. Si ésta está configurada RClone intentará descifrar la configuración con ella y, si falla, te pedirá la correcta.

También puedes evitar que te pida contraseña si añades --ask-password=false al final del comando.

$ RCLONE_CONFIG_PASS=<password> rclone lsd mi_disco_OneDrive: --ask-password=false
          -1 2018-08-27 18:03:44         0 Documentos
          -1 2018-08-27 18:03:43         0 Imágenes

Si en algún momento necesitas eliminar el cifrado RClone también lo permite.

Conclusión

RClone es una gran herramienta con la que obtendrás una gran libertad para manejar tus archivos en la nube. En próximas entradas veremos cómo sincronizar nuestros archivos locales con la nube para, por ejemplo, realizar copias de seguridad deslocalizadas.