«

»

déc 06

Installer son propre serveur Mozilla Sync pour Firefox – Saison 03 Episode FINAL

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 :

 

Lien Permanent pour cet article : http://www.docgreen.fr/2011/12/06/installer-son-propre-serveur-mozilla-sync-pour-firefox-saison-03-episode-final/

20 commentaires

2 pings

Passer au formulaire de commentaire

  1. Exca

    Encore une fois un billet très complet !
    Peut être juste une coquille à signaler, le lien pour le ArchWiki est : https://wiki.archlinux.org/index.php/Mozilla_Sync_Server_(Français)
    Je vais tester tout ça, et mettre à jour mon serveur par la même occasion !
    A+

    1. DocGreen

      Merci du retour, c’est corrigé !

  2. skc

    J’utilise la version avec virtualHost Apache SSL depuis quelques mois et je n’ai pas rencontré de problèmes particuliers.

    Est-ce que tu peux détailler les soucis que tu rencontres ?

    Sinon il doit être possible aussi de transformer un virtualHost en reverse-proxy pour éviter de faire des trous dans le firewall.

    1. DocGreen

      Salut skc,

      le problème vient en partie du fait qu’apache ne supporte officiellement qu’un seul certificat par nom de domaine et que je ne peux donc pas utiliser un autre certificat dans un virtualhost.

      L’idée d’utiliser HTTPS pour Sync est un réflexe de sécurité naturel. Dans le cas présent, les données étant chiffrées sur le client avant d’être envoyées au serveur, le seul risque de sécurité correspond au couple login/password qui voyage en clair, il faut donc penser à utiliser un couple unique.

      Maintenant, mes virtualhosts ne sont probablement pas parfaites, si tu peux poster une copie de ta config, je te remercie d’avance !

      Le reverse-proxy est une bonne idée, j’y jetterai un oeil un de ces jours.

      1. skc

        Hello,

        C’est effectivement un problème que j’ai rencontré bien avant d’installer un serveur sync.

        J’ai pris la solution de facilité parce que tous mes virtualHost sont dans le même domaine et que je n’ai pas les moyens ni l’envie de payer un certificat: j’ai installé un certificat wildcard. Mon certificat correspond donc à tous les virtualHost SSL que je fais fonctionner.

        Depuis, j’ai découverts deux autres pistes que je n’ai pas essayé.

        * La première consiste à passer la couche sécurité de OpenSSL à GnuTLS; qui supporte le SNI ( http://en.wikipedia.org/wiki/Server_Name_Indication ) mais ne fonctionne pas sous IE/XP. Il semblerait que ce soit aussi possible avec OpenSSL.

        * La seconde consiste à mettre tous les noms des virtualHost dans le champ subjectAltName du certificat, c’est un peu laborieux avec OpenSSL, les manipulations sont décrites sur http://linux-attitude.fr/post/virtualhost-ssl

        1. DocGreen

          Très intéressant, surtout l’utilisation de GnuTLS qui s’il pouvait poser problème il y a 2-3 ans avec encore une prédominance IE6-XP, ne doit plus en être un à l’heure actuelle. Une bonne idée pour un futur article :)

  3. Exca

    Voilà ! Testé et approuvé ! ^^

    Peut-être juste un problème à signaler : chez moi le fichier /var/log/sync/sync-error.log existait déjà d’une ancienne installation et appartenait à root:root. C’est la commande sudo su weave -c "cd /var/www/sync/ && bin/paster serve development.ini" qui m’a mis sur la piste.

    Et sinon, pour ceux qui comme moi utilisent Ubuntu, un patch qui résoud le message d’erreur renvoyé par sudo insserv sync-server.sh : https://bugs.launchpad.net/ubuntu/+source/insserv/+bug/467000

    Après ces péripéties, ça fonctionne bien et ça se lance au démarrage !

  4. deadspool

    Je me permet une petite proposition de mise à jour concernant le script de démarrage.

    MESSAGEDIR=/var/log/sync
    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 start
    $0 stop
    ;;
    *)
    echo "usage: $0 {start|stop|restart}"
    esac
    exit 0

    En effet, si le répertoire sync n’existe pas, il le créer.

    1. DocGreen

      Bien vu, je mets le script à jour !

      Merci pour le retour, deadspool .

  5. paglop

    Bonjour

    Nickel !!!

    J’ai essayé de modifier le backend de [auth]
    => backend = services.auth.ldap.LDAPAuth
    et fait un :
    ./bin/easy_install python-ldap
    mais au lancement j’ai :

    KeyError: « Unknown fully qualified name for the backend: ‘services.auth.ldap.LDAPAuth’, or error in the module: No module named ldap »

    Une idée ?

    Merci

  6. Laurent

    Pour auth.backend, essayer plutôt services.user.sql.SQLUser, si vous avez des soucis

  7. Laurent

    Et dans le script de démarrage, pour restart, ça serait mieux de faire stop puis start et non l’inverse ;-)

  8. DocGreen

    Salut Laurent, merci pour tes remarques :

    – effectivement c’est la méthode services.user.sql.SQLUser qui est privilégiée par Mozilla actuellement, bien que mon serveur perso fonctionne toujours avec services.auth.sql.SQLAuth

    – bien vu pour le restart, je modifie tout ça de ce pas !

    A+

    Doc

  9. caemir

    Ca sert à quoi de coller tout ça dans /var/www ? il y a une interface HTTP visible via navigateur ? je ne vois aucuns fichiers php/html ….

    1. DocGreen

      Bonjour Caemir,

      rien ne t’oblige à utiliser /var/www, si tu préfères /opt, /srv ou /mon_super_serveur_de_synchro_firefox_qui _y _a_que_moi_qui_le_met_là , c’est toi qui voit.

      Personnellement, je place tout ce qui utilise un serveur web dans /var/www, question d’organisation. Je serai curieux de savoir pourquoi seuls les sites « visibles » peuvent être placés dans /var/www ?

      Doc

  10. Benjamin

    Hello,
    j’ai mis en place cette solution, merci pour ce tuto, il était très clair :)
    Par contre, quand j’utilise ton script pour lancer le serveur sync, j’ai toujours la sortie (les logs) du serveur sync dans ma ligne de commande, as-tu le même problème ?

    1. DocGreen

      Salut Benjamin,

      je viens de tester sur mon serveur et je n’ai pas ce problème.

      Doc

  11. badmaniak

    Salut,

    Le paquet libmysqlclient-dev est remplacé par le libmysqlclient-dev18 dans Debian Wheezy.

    @+

    1. DocGreen

      Salut,

      merci pour la précision, je dois passer mon serveur sous Wheezy dans les semaines qui viennent, je tâcherai de mettre à jour l’article.

      Doc

  12. badmaniak

    Sinon j’ai changé cette ligne : grant all on sync.* to sync identified by ‘my_password’;
    par grant all on sync.* to ‘sync’@'localhost’ identified by ‘my_password’;

    j’avais une erreur de type :
    sqlalchemy.exc.OperationalError: (OperationalError) (1045, « Access denied for user ‘sync’@'localhost’ (using password: YES) ») None None
    @+

  1. Alma Great Clips Coupons

    Great Clips Coupons…

    [...]listed here are a few web page links to internet pages I always connect to seeing as we think they’re worth visiting[...]…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser les balises HTML suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>