"Ubuntu One helps you store, sync and share"
Ubuntu One est très pratique lorsque l'on utilise plusieurs ordinateurs (Bureau Pro, Bureau Perso, Salon, Salle de bain :) ...) pour retrouver ses documents d'un ordinateur à l'autre.
Ubuntu One se charge de synchroniser nos documents sur tous nos ordinateurs.
MAIS, ubuntu One est gratuit seulement dans la limite de 2 GB, ensuite il faut payer un abonnement.
MAIS, le fait de déposer des documents perso, voir confidentiels, sur un serveur géré par une entreprise tierce en rebute peut être certains, dont moi.
MAIS, si vous souhaitez accéder à vos documents sur plusieurs ordinateurs de votre réseau domestique, Ubuntu One sera lent car limité par la bande passante de votre accès internet.
Bref, le service rendu par Ubuntu One m'intéresse mais je voudrais gérer mon propre serveur "One", d'où "myOne".
Je vous propose de mettre en oeuvre "myOne", un "Ubuntu One Like" mais rien que pour vous, ce sera certes un peu moins user friendly mais nous aurons la maitrise totale du dispositif. Dans la suite de ce tutoriel remplacez "fred" par votre nom d'utilisateur et "centralisateur" par l'ip ou le fqdn de votre serveur.
Comment ca marche :
Nous aurons besoin d'un serveur ssh (Debian ou Ubuntu par exemple), qui jouera le rôle de "centralisateur", toutes vos autres machines se réfèreront à ce centralisateur pour synchroniser leurs fichiers. Ce centralisateur peut être un serveur dédié chez un hébergeur ou un serveur chez vous visible sur le web via une redirection de port sur votre "xxxxBox".
Sur le centralisateur je créer un dossier "myOne" (n'importe quel nom convient) :
# mkdir /home/fred/myOne
Sur chacun de mes autres ordinateurs, je créer aussi un dossier "myOne" (pas forcément au même endroit, peu importe) :
# mkdir /home/fred/Bureau/myOne
Ce seront les deux dossiers qui seront synchronisés, je ne synchronise pas mon home entier : "/home/fred" car cela synchroniserait inutilement tout un tas de documents. Le fait de ne synchroniser qu'un sous dossier permet de choisir ce que l'on souhaite effectivement synchroniser, il suffira de copier dans myOne les documents que vous souhaitez retrouver sur vos autres machines.
La synchronisation sera toujours initiée du côté client, en effet le centralisateur est sencé toujours être allumé et joignable, ce n'est pas forcément le cas des ordinateurs clients.
Nous utiliserons l'excellent programme "unison" pour synchroniser nos dossiers.
Installation d'unison :
# sudo apt-get install unison
Utilisation d'unison, sur un ordinateur client :
# unison /home/fred/Bureau/myOne ssh://fred@centralisateur:port//home/fred/myOne
La première synchronisation sera plus longue car il faut qu'unison copie tous les documents déposés dans le dossier myOne de votre ordinateur sur votre centralisateur. Les synchronisations ultérieures iront beaucoup plus vite car seules les documents modifiés/ajoutés/supprimés seront synchronisés.
On pourrait se contenter de cela et synchroniser à la main nos dossiers quand on le jugerait nécessaire mais ce ne serait tout de même pas très pratique, et selon la loi de Murphy, on oublierait nécessairement de synchroniser lorsque cela aurait vraiment été utile.
Faisons donc en sorte que nos dossiers se synchronisent automatiquement.
Plusieurs "problèmes" à régler pour rendre l'automatisation possible :
- Ne plus avoir à taper de mot de passe SSH tout en conservant la sécurité d'accès :
Sur notre poste client :
On génère un couple de clef publique/privée sans passphrase :
# ssh-keygen
On copie la clef publique générée : id_rsa.pub, vers notre centralisateur
# scp .ssh/id_rsa.pub fred@centralisateur:/home/fred/.ssh/
On ajoute le contenu de id_rsa.pub dans l'authorized_keys du centralisateur pour qu'il puisse authentifier notre poste client :
# ssh fred@centralisateur "cat /home/fred/.ssh/id_rsa.pub >> /home/fred/.ssh/authorized_keys"
- Ne plus avoir à répondre aux questions et confirmations d'unison :
L'argument de commande "-batch" provoque le mutisme d'unison, il ne posera plus de question.
- Planifier l'exécution automatique périodique d'unison sans provoquer le chargements d'instances simultanées :
Lancer unison par cron risquerait de provoquer le chargement parallèle de plusieurs instances en cas de synchronisation longue, si on ne prenait pas de précaution particulière. Avec un petit script python nous allons vérifier qu'unison ne tourne plus avant de redemander une synchronisation.
#### Start Python Code ####
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from __future__ import with_statement
import time, subprocess
LogFilePath="/home/fred/myOne.log"
cmd_myOne = "/usr/bin/unison /home/fred/Bureau/myOne ssh://fred@centralisateur//home/fred/myOne -batch"
cmd_CheckIfRunning = "ps ax|grep /usr/bin/unison"
def TimeNow(): return time.strftime("%Y/%m/%d %H:%M:%S", time.localtime())
def AppendFile(TheFile,Content):
with open(TheFile,"a") as f:
f.write(Content)
CheckIfRunning = subprocess.Popen(cmd_CheckIfRunning, shell=True, stdout=subprocess.PIPE)
if cmd_myOne not in CheckIfRunning.communicate()[0]:
myOne = subprocess.Popen(cmd_myOne, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, errors = myOne.communicate()
if "Nothing to do: replicas have not changed since last sync." not in errors:
AppendFile(LogFilePath, "\n" + TimeNow() +' '+ str(myOne.returncode) +' '+ cmd_myOne + "\n" + str(output))
else:
AppendFile(LogFilePath, "\n" + TimeNow() + " Unison Process Already Running")
#### Stop Python Code ####
Enregistrez ce script sous /home/fred/scripts/myOne
Planifiez l'exécution automatique via cron toutes les 5 minutes :
# crontab -e
*/5 * * * * /usr/bin/python /home/fred/scripts/myOne
Et voilà , vous n'avez plus qu'à copier coller des documents dans le dossier myOne de vos ordinateurs, et vous les retrouverez sur tous les autres ordinateurs sur lesquels vous avez planifié la synchronisation.
Astuces :
Lancez la première synchronisation à la main pour voir les éventuels messages d'erreur.
Le fichier /home/fred/myOne.log (Variable LogFilePath) enregistre tous les transferts de fichiers.
Evitez de créer des conflits unison : Ne pas éditer en même temps deux fichiers portant le même nom sur deux clients, ils ne seront pas synchronisés en mode automatique (-batch).
Pour régler les conflits et choisir quelle version synchroniser, lancer unison à la main sans "-batch".
[ 2 Commentaires ] ( ( 6 vues ) ) | [ 0 Trackbacks ] | Lien permanent | Lien relatif

Calendrier



