Mettre en place un Dropbox-like / Google Drive-like
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.
Sommaire
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.