Firefox_Sync_logo

Mise à jour : depuis Firefox 29, l'outil de synchronisation a changé afin de correspondre entre autres, aux besoins de Firefox OS. Du coup avec la méthode décrite ci-dessous, il n'est plus possible synchroniser avec un nouveau navigateur de version 29 et plus. Seule la synchronistaion des navigateurs déjà "attachés" au serveur continuera à fonctionner correctement mais jusqu'à quand, impossible de le savoir. Autant dire que cette méthode est obsolète et revolue. La bonne nouvelle c'est que Mozilla propose son nouveau serveur de synchonisation pour l'auto-hébergement, la mauvaise c'est que je ne suis pas parvenu à relier le navigateur et mon serveur. Pour l'heure, je vais donc confier mes données à Mozilla (si on ne peut pas leur faire confiance, à qui peut-on le faire sur le Web ? ), si d'aventure je parviens à une solution viable cela fera l'objet d'un nouvel article.

 

D’aucuns diront que je fais une fixation sur ce fameux serveur. D’aucuns auront raison car je ne suis pas satisfait de son installation et que ça me reprend les jours fériés. Le point délicat, c’est le serveur Apache dont le virtualhost me cause du soucis, le but était de ne pas utiliser plusieurs serveurs web et tant qu’à faire, de ne pas ouvrir de port supplémentaire dans le firewall (TCP 5000). Mais après un test concluant de la solution native, je me suis résolu à l’appliquer telle quelle (avec MySQL et en ajoutant quelques améliorations quand même), tant pis pour le trou supplémentaire dans mon Iptables et tant mieux pour mes jours fériés.

Pré-requis :

  • Un serveur GNU/Linux (ici Debian Squeeze i386)
  • Base de données MySQL
  • Un navigateur Mozilla Firefox (ici Nightly 11)/IceWeasel PC/Mobile (ici 8 )

Conventions :

  • prompt : # commande : exécuter la commande sous le compte root ou précédée de la commande « sudo »
  • prompt : $ commande : exécuter la commande sous le compte utilisateur

 

1. Installation

– Installer les dépendances :

# apt-get install python-dev mercurial python-virtualenv mysql-server build-essential libmysqlclient-dev

– Créer la base de données sync :

# mysql -u root -p
mysql> create database sync;
mysql> grant all on sync.* to sync identified by 'my_password';
mysql> flush privileges;
mysql> exit;

– Aller dans /var/www et télécharger la dernière version du serveur :

# cd /var/www
# hg clone https://hg.mozilla.org/services/server-full

– Renommer le dossier /var/www/server-full en /var/www/sync :

# mv /var/www/server-full /var/www/sync

– Se placer dans le dossier /var/www/sync et compiler le serveur :

# cd sync
# make build

– Installer Mysql-Python

# bin/easy_install Mysql-Python

– Configurer le fichier /var/www/sync/etc/sync.conf pour MySQL (directives [storage] sqluri et [auth] sqluri), le quota – 25 Mio pour prendre large, le serveur web (directive [auth] fallback_node) et SMTP (directive [smtp] sender) :

# nano /var/www/sync/etc/sync.conf
[global]
clean_shutdown = false

[captcha]
use = false
public_key = 6Le8OLwSAAAAAK-wkjNPBtHD41v5OmoNFANIa1JL
private_key = 6Le8OLwSAAAAAEKoqfc-DmoF4HNswD7RNdGwxRij
use_ssl = false

[storage]
backend = syncstorage.storage.sql.SQLStorage
sqluri = mysql://sync:my_password@localhost/sync
standard_collections = false
use_quota = true
quota_size = 25120
pool_size = 100
pool_recycle = 3600
reset_on_return = true
display_config = true
create_tables = true

[auth]
backend = services.user.sql.SQLUser
sqluri = mysql://sync:my_password@localhost/sync
pool_size = 100
pool_recycle = 3600
create_tables = true
fallback_node = http://my_server.net:5000/

[smtp]
host = localhost
port = 25
sender = my_account@email.net

[cef]
use = true
file = syslog
vendor = mozilla
version = 0
device_version = 1.3
product = weave

– Configurer le fichier /var/www/sync/development.ini pour changer l’emplacement des logs :

# nano /var/www/sync/development.ini
[DEFAULT]
debug = True
translogger = False
profile = False

[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 5000
use_threadpool = True
threadpool_workers = 60

[app:main]
use = egg:SyncServer
configuration = file:%(here)s/etc/sync.conf

#
# logging
#
[loggers]
keys = root,syncserver

[handlers]
keys = global,syncserver,syncserver_errors

[formatters]
keys = generic

[logger_root]
level = WARNING
handlers = global

[logger_syncserver]
qualname = syncserver
level = ERROR
handlers = syncserver,syncserver_errors
propagate = 0

[logger_syncserver_errors]
qualname = syncserver
level = ERROR
handlers = syncserver_errors
propagate = 0

[handler_global]
class = StreamHandler
args = (sys.stderr,)
level = DEBUG
formatter = generic

[handler_syncserver]
class = StreamHandler
args = (sys.stderr,)
level = INFO
formatter = generic

[handler_syncserver_errors]
class = handlers.RotatingFileHandler
args = ('/var/log/sync/sync-error.log',)
level = ERROR
formatter = generic

[formatter_generic]
format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %Y-%m-%d %H:%M:%S

– Créer le dossier des logs /var/log/sync :

# mkdir /var/log/sync

– Créer un group sync :

# groupadd sync

– A ce stade, une petite modification par rapport au précédent tutoriel car nous allons cette fois créer un utilisateur weave que nous ajoutons à ce groupe (car le compte sync existait déjà sur mon serveur et étant lié à un exécutable du même nom, il mettait le bazar dans mes scripts) :

# useradd -d /var/www/sync -g sync -r -s /bin/bash weave

– Donner les droits sur les dossiers /var/www/sync et /var/log/sync à l’utilisateur/groupe sync :

# chown -R weave:sync /var/www/sync
# chown -R weave:sync /var/log/sync

– Ajouter une règle IPTABLES ouvrant le port TCP 5000 :

# iptables -A INPUT -p tcp -m tcp --dport 5000 -j ACCEPT

– Démarrer le serveur sync en arrière-plan pour le tester :

$ cd /var/www/sync
$ bin/paster serve development.ini &

– Si tout fonctionne, créer un script pour démarrer automatiquement le service :

# nano /etc/init.d/sync-server.sh
#!/bin/bash 

### BEGIN INIT INFO
# Provides:          Mozilla Sync HomeServer
# Required-Start:    $syslog $network
# Required-Stop:     $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Mozilla Sync HomeServer initscript
# Description:       Mozilla Sync HomeServer
### END INIT INFO
 
MESSAGELOG=/var/log/sync/sync-messages.log
PID=`pidof -x -o %PPID paster`
 
case "$1" in
  start)
    echo "Starting Mozilla Sync HomeServer"
    [ ! -d $MESSAGEDIR ] && mkdir -p $MESSAGEDIR
    su weave -c "cd /var/www/sync/ && bin/paster serve development.ini &>$MESSAGELOG &"
    ;;
  stop)
    echo "Stopping Mozilla Sync HomeServer"
    kill $PID &>/dev/null
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
    echo "usage: $0 {start|stop|restart}"
esac
exit 0

– Rendre le script exécutable et ajouter le service :

# chmod 755 /etc/init.d/sync-server.sh
# insserv sync-server.sh

Pour le reste, référez-vous à l’article précédent.

Sources :