Mettre en place un Dropbox-like / Google Drive-like

De e-glop

Qu'est-ce que ce charabia ?

Il s'agit ici de décrire la mise en place d'un système de synchronisation automatique de fichiers, éventuellement collaboratif, sans dépendre de sociétés comme Dropbox, Google ou autres, ne permettant pas de maîtriser où se trouvent nos données et qui peut y accéder. Il est évident que ce système d'adresse particulièrement aux entreprises, aux services de l'État, ainsi qu'aux individus soucieux de leur vie privée mais ayant goûté aux avantages du numérique et des réseaux.

L'idée est donc d'avoir un répertoire local et un espace de stockage distant, tous deux accessibles permettant de lire les fichiers en clair, en rajouter et en enlever. Et moins l'usage du compte "root" sera nécessaire mieux nous nous porterons... surtout quand il s'agira de gérer des mots de passe utilisateur.


Prérequis

  • Fonctionner sous GNU/Linux, même si ce tutoriel doit pouvoir aisément s'appliquer à MacOSX et éventuellement à MSWindows.
  • Disposer d'un système de stockage en ligne "brut".
  • Avoir les droits pour installer des logiciels sur son système.


Cas pratique

Ici nous utiliserons un système basé sur le "porte document" ("Briefcase") Zimbra, accédé en WebDAV. Nous veillerons à respecter les droits de chaque utilisateur à accéder à ses fichiers, y compris partagés.

Utiliser ce cas pratique permet une mise en situation nécessaire à la bonne compréhension du principe. Il montre aussi la délicatesse du déploiement le plus difficile que nous ayons pu rencontrer (WebDAV). Ainsi, si un lecteur comprend ce qui est dit ici, il devrait être en mesure (sauf cas particulier imprévisible) de réutiliser ces exemples avec un autre support de sauvegarde distant (SSH, FTPS, NFS, etc.)


Installations de base

Installer Syncany, si possible en utilisant les dépôts Debian

curl -sL https://get.syncany.org/debian/ | sh

Installer fuse si ce n'est déjà fait :

apt-get install fuse

Installer wdfs via la dernière archive trouvable sur Github :

wget https://github.com/jmesmon/wdfs/archive/master.zip
unzip master.zip
cd wdfs-master
./configure
# régler les pbs de dépendances... plus de détails viendra, avec même éventuellement un fichier .deb
make
sudo make install


Tester

La structure de base :

$ mkdir ~/tests/ # un répertoire vide où faire nos essais
$ cd ~/tests/
$ mkdir repository local dav

Initialisation de la synchronisation en local

Nous allons donc initialiser un répertoire local synchronisé (avec un système de synchronisation local) :

$ cd local
$ sy init

Connection details for local connection:
- Path to local repository: /home/beta/tmp/wdfs/repository

The password is used to encrypt data on the remote storage.
Choose wisely!

Password (min. 10 chars): 
Confirm: 

Creating master key from password (this might take a while) ...

Repository created, and local folder initialized. To share the same repository
with others, you can share this link:

   syncany://2/2198qsdQSNw,...sazrOQZ58

This link is encrypted with the given password, so you can safely share it.
using unsecure communication (chat, e-mail, etc.)

Note: The link contains the details of your repo connection which typically
      consist of usernames/password of the connection (e.g. FTP user/pass).

Maintenant, le système de synchronisation est initialisé via un "repository" situé dans ~/tests/repository. Ajoutons alors un fichier et préparer sa future synchronisation distante :

$ touch NEWFILE
$ sy up

A .syignore
A NEWFILE
Sync up finished.

Initialisation de la synchronisation distante

Créons le lien entre notre porte-documents Zimbra distant, accédé en WebDAV :

$ cd ~/tests/
$ wdfs https://ZIMBRA/dav/USERNAME/Briefcase dav

WARNING: untrusted server certificate for 'ZIMBRA':
 do you wish to accept this certificate? (y/n) y
username: USERNAME
password: 
fusermount: failed to open /etc/fuse.conf: Permission denied

Si vous obtenez un avertissement concernant l'accès à /etc/fuse.conf n'est pas important dans ce cas de figure, ne pas en tenir compte.

Initialisons maintenant le répertoire distant, stocké dans notre porte-documents Zimbra distant, accédé en WebDAV :

$ cd ../dav
$ sy connect syncany://2/2198qsdQSNw,...sazrOQZ58
Password: 

Creating master key from password (this might take a while) ...

Repository connected, and local folder initialized.
You can now use 'sy up' and 'sy down' to sync your files.
$ sy down

A .syignore                   
A NEWFILE
Sync down finished.

Tout semble opérationnel.

Vérifications

Maintenant vérifions que le répertoire distant (WebDAV) est bien à jour :

$ cd ~/tests/dav
$ ls -a
.  ..  NEWFILE  .syignore  .syncany

Cela semble bon... Contre-vérifions en allant sur une autre interface que celle montée dans l'arborescence locale, par exemple dans l'interface web de Zimbra, et là encore le fichier NEWFILE est bien présent.

Essayons de créer un fichier sur l'espace de stockage WebDAV distant, afin de voir s'il redescend bien en local :

$ cd ~/tests/dav
$ touch DISTANTFILE
$ sy up

A DISTANTFILE                        
M .syignore
M NEWFILE
Sync up finished.

Le nouveau fichier semble bien être synchronisé avec le repository Syncany. Vérifions maintenant via le répertoire local :

$ cd ~/tests/local
$ sy down
A DISTANTFILE               
M .syignore
M NEWFILE
Sync down finished.

$ ls -a
.  ..  DISTANTFILE  NEWFILE  .syignore  .syncany

Impeccable

Synchronisation automatique

Dans un premier terminal, nous laçons un daemon Syncany sur le répertoire local :

$ cd ~/tests/local
$ sy watch

Et dans un second nous laçons un daemon Syncany sur le répertoire WebDAV distant :

$ cd ~/tests/dav
$ sy watch

Dans un troisième créons un répertoire et voyons comme les choses se comportent :

$ cd ~/tests/dav
$ mkdir yes
$ ls
DISTANTFILE  NEWFILE  yes

Vérifions dans la foulée ce qui se passe en local :

$ cd ~/tests/local
$ ls
DISTANTFILE  NEWFILE  yes

CQFD.

Mise en production

L'enjeu : plusieurs utilisateurs ont besoin de se tenir synchronisés avec un répertoire distant commun sur Zimbra/WebDAV, tout en travaillant uniquement en local. L'idée est de ne jamais avoir besoin, au-delà de l'installation de composants logiciels (et encore... on le verra), d'un accès super-utilisateur, et tout doit pouvoir se gérer depuis l'espace utilisateur sans avoir besoin de privilèges particuliers.