Comment créer votre PROPRE serveur firefox SYNC 1.5

Posted on mer. 30 avril 2014 in misc

Note : Ce contenu date d'avril 2014, il pourrait ne plus être à jour.

La nouvelle version de firefox (29) intègre un nouveau moyen de synchroniser et sauvegarder ses onglets, favoris, historique, mots de passe, add-ons et les préférences entre ces différents appareils. La version actuelle de Firefox sync (1.1) continuera à fonctionner dans les prochaines versions. (il fonctionne toujours dans la version 31 en tout cas). Cette nouvelle version fonctionne avec Firefox accounts qui est le serveur d'identification de Mozilla, il sert aussi (entre-autre) pour le marketplace qui est le magasin d'applications pour Firefox OS. Firefox accounts n'est pas obligatoire pour le marketplace en revanche il est nécessaire pour Firefox Sync. Ce service est centralisé chez Mozilla comme tiers de confiance pour le marketplace, mais peut être installé chez vous pour d'autre usage, comme par exemple pour Firefox sync. Je ne vais pas vous expliquer comment installer Firefox accounts ici, mais comment installer Firefox sync sur votre propre serveur. On va donc utiliser le serveur Firefox accounts de Mozilla et notre propre serveur firefox sync. NOTE : Il n'y a pas encore la possibilité d'avoir son propre serveur paramètré sur Firefox sur Android, mais c'est prévu. EDIT : C'est maintenant disponible en nightly, cella arrivera dans firefox for android 33 ou 34. Je vais vous expliquer comment créer votre propre serveur firefox sync et comment passer les données depuis la dernière version. Ce tutoriel est détaillé et adapté à tout type de personne utilisant linux (même si vous n'avez jamais utilisé de terminal aussi appeler ligne de commande) et ayant un peu de bon sens. Ce tuto peut sembler long mais il juste est détailé. Il est directement inspiré des instructions de Mozilla

Crée un serveur firefox sync 1.5

Pour cela vous avez besoin de :

  • Un ordinateur sous linux allumé 24h/24 et connecté à internet (J'utilise un raspberry pi sous raspbian ici)
  • Python 2.7 (un exécutant du langage du même nom)
  • Virtualenv (crée un environnement virtuel pour python)
  • make (un compilateur)
  • git (un système de gestion de version)
  • Il faut accéder à l'ordinateur : soit vous mettez un écran, soit vous utilisez SSH ( mettre un lien d'explication) 1. On va donc installer tout ça, il suffit de taper cela dans un terminal :

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install python-dev git-core python-virtualenv

Explication : sudo : obtenir les droits d'administrateur, il est possible qu'il vous demande votre mot de passe, tapez-le, il est normal de ne rien voir s’afficher (pas de ****) apt : logiciel pour installer des programmes en ligne de commande sous de nombreuses distributions GNU/Linux. (apt-get pour dire qu'on veut prendre) update : paramètre d'apt-get, met à jour la liste des logiciels upgrade : paramètre d'apt-get, met à jour tous les logiciels install : paramètre d'apt-get, demande l'installation Ensuite, ce sont les programmes que l'on veut installer Appuyer sur ENTRER à chaque fin de commande, des lignes vont défiler, c'est normal, attendez la fin, cela peut être long. Si le terminal demande : "Need to get 34.8 MB of archives. After this operation, 44.5 MB of additional disk space will be used. Do you want to continue ?" Répondez "y" 2.On va se mettre dans le bon dossier pour installer des logiciels de cette façon:

cd /opt

Explication : cd : c'est le programme qui permet en ligne de commande de parcourir des dossiers. 3. On va ensuite créer un "clone" du code source de firefox sync, si vous souhaitez le lire il est disponible ici Pour cela tapez dans votre terminal:

git clone https://github.com/mozilla-services/syncserver

Explication : git : c'est le programme que l'on va utiliser clone : paramètre de git qui permet de "cloner" le code source https://github.com/mozilla-services/syncserver : adresse url du code source 4. On va aller dans le dossier cloner :

cd syncserver

Explication : syncserver : nom du dossier Vous pouvez aussi voir ce dossier dans votre explorateur de fichier : /opt/syncserver 5. On va compiler le code :

make build

Explication : make : nom du programme qui permet la compilation, le compilateur build : donne des indications au compilateur Il va télécharger d'autre chose dont il a besoin. Vous pouvez aller vous chercher un café et même faire la sieste 6. C'est installé ! On va vérifier que tout marche :

make test

Là aussi vous pouvez aller faire une sieste. Normalement des choses vont s'afficher (si vous voyez un truc comme "F............................SSSSSSSSS" c'est normal) Si vous avez à la fin "[test] Killed" c'est que tout marche bien, sinon il vous retournera l'erreur. 7. On lance le serveur une première fois le serveur:

make serve

Le serveur démarre sur http://localhost:5000/, c'est-à-dire sur le port 5000 de votre machine. Lorsque le terminal affiche "serving on 0.0.0.0:5000 view at http://127.0.0.1:5000" vous pouvez arrêter l'exécution de la commande avec ctrl + c. 8. On va récupérer l'adresse ip local :

sudo ifconfig eth0 | awk -F'[: ]' '/inet ad/ {print $13}'

Explication: ifconfig : programmes pour voir les paramètres de votre connexion. eth0 : l'interface de sortie de votre connexion, il faut peut-être changer cette valeur (faites un sudo ifconfig pour le savoir) | : permet d'enchainer les commandes dans la ligne de commandes awk : logiciel permettant de chercher par motif dans les chaînes de caractères. -F : option du logiciel précédent '/inet ad/ {print $13}' : paramètres donné au logiciel 9.On va générer une clé pour signez les requettes vers le serveur Firefox sync :

head -c 20 /dev/urandom | sha1sum

Copier ce que la ligne de commande vous retourne. Explication: head : afficher le Début d'un fichier -c 20 : limiter au 20 première ligne sha1sum : sert à faire un sum en sha1 10. On va maintenant paramétrer le serveur Firefox sync, pour cela le fichier syncserver.ini est utilisé :

sudo nano syncserver.ini

Explication: nano : c'est un éditeur de texte en ligne de commande, déplacez vous dans le ficher avec les flèches de votre clavier. Pour enregistrer faites ctrl + o pour quitter faites ctrl +x /etc/sync.conf : nom du fichier que l'on veut modifier trouver la ligne (juste sous [syncserver]) public_url = http://localhost:5000/ et changer-la par : public_url = http://[ip]:5000/ Remplacer [ip] par l'adresse ip trouver plus haut, c'est une adresse ip privée, c'est à dire que Firefox sync ne marchera que chez vous. Vous pouvez aussi utiliser une adresse ip publique ou un nom de domaine. trouver la ligne (juste sous [syncserver]) #sqluri = sqlite:////path/to/database/file.db et changer-la par : sqluri = sqlite:///syncserver.db (la base de données sera stocker dans le dossier) trouver la ligne (juste sous [syncserver]) (ligne commenter par un #) secret = INSERT_SECRET_KEY_HERE et changer-la par: secret = [coller la clé générer à l'étape précédente] On vient de donner une adresse vers une base de données pour firefox sync, car par défaut les données de sync sont enregistrées sur la mémoire vive , et au redémarrage tout est perdu... Il est aussi possible d'utiliser une base de données mysql : sqluri = pymysql://username:password@db.example.com/sync 11. On démarre maintenant le serveur :

sudo local/bin/pserve syncserver.ini

12. On va réaliser un script pour qu'il démarrage sync au démarrage du serveur tout seul :

sudo nano /etc/init.d/sync

On ajoute ce contenu dedans :

!/bin/sh # le nom du service SERVICE_NAME=Firefox sync # le répertoire où se trouvent les exécutables du service SERVICE_DIRECTORY=/opt/syncserver usage() { echo "-----------------------" echo "Usage: $0 (stop|start|restart)" echo "-----------------------" } if [ -z $1 ]; then usage fi service_start() { echo "Starting service '${SERVICE_NAME}'..." OWD=pwd cd ${SERVICE_DIRECTORY} local/bin/pserve syncserver.ini & cd $OWD echo "Service '${SERVICE_NAME}' started successfully" } service_stop() { echo "Stopping service '${SERVICE_NAME}'..." OWD=pwd pkill pserve cd $OWD echo "Service '${SERVICE_NAME}' stopped" } case $1 in stop) service_stop ;; start) service_start ;; restart) service_stop service_start ;; *) usage esac exit 0

Téléchargez-le Changer [nom d'utilisateur] par votre nom d'utilisateur. Explication : init.d : dossier des scripts de démarrage Nano (que nous avons vu plus haut) va s'ouvrir. Quittez avec ctrl + o puis ctrl + x, le terminal va afficher. 13.On va donner au fichier le droit de s'exécuter :

sudo chmod +x /etc/init.d/sync

Explication: chmod : sert à donner des droits +x : option pour donner les droits d'exécution /etc/init.d/sync: le fichier 14.On l'ajoute ensuite comme programme à démarrer :

sudo update-rc.d sync defaults

Explication: update-rc.d : programme pour ajouter des scripts au démarrage. sync : notre script defaults : profil par défaut

Récuperer les données et configurer dans Firefox

Par mesure de précaution on va sauvegarder les favoris, allez voir la méthode ici On va ensuite retirer la version actuelle de sync si vous l'utilisiez déjà : allez cliquer sur les 3 barres à droite, cliquez sur préférences, puis sur sync, cliquez sur "retirer cet appareil". On va configurer Firefox, pour cela tapez about:config dans la barre d'adresse de firefox. chercher "services.sync.tokenServerURI" cliquez/double cliquez dessus et mettrez la valeur a http://[ip]:5000/token/1.0/sync/1.5 (remplacer [ip] par l'adresse ip récuperer à l'étape 9. Voilà Firefox sync est configuré. Il faut ensuite crée un compte Accounts pour cela tapez about:accounts dans la barre d'adresse. Emplissez le formulaire et valider. Cliquez sur le lien qui vous allez recevoir par emaill. On va vérifier que tout marche. Pour cela cliquez sur les 3 barres à droite, et vérifié qu'en bas vous avez votre adresse email et une image qui synchronise. Si ce n'est pas le cas tapez about:sync-log pour voir les log dans la barre d'adresse et cliquez sur le dernier fichier, ce sont les logs de firefox sync qui explique ce qu'il fait et ce qui ne va pas. Regarder ce qu'il ne va pas, chercher sur internet, si vous ne trouvez pas de solution vous pouvez laisser un commentaire en dessous (pour que tout le monde en profite). Lorsque tout marche très bien, retourner sur le serveur, dans le fichier syncserver.ini avec nano(sudo nano syncserver.ini dans le dossier syncserver), et enlever le # au debut de la ligne : #allow_new_users = false. Cela empêchera d'autres utilisateurs de se crée un compte sur le serveur. Sachez que sync marchera uniquement sur votre réseau local si vous utilisez une machine chez vous (sauf si vous avez ouvert des ports sur votre box plus d'informations sur cela ici ). Si vous utilisez iptables penser à ouvrir le port. Veuillez aussi noter qu'aucune sécurité n'est mis à place dans ce tuto, c'est à dire qu'il n'y à pas de httpS. Toutes les données passent en clair sur le réseaux, même s'il y a du chiffrement entre Firefox et le serveur de base. Vous pouvez ajouter du https en exécutant le serveur derrière un serveur web, vous pouvez voir comment faire ici, cela nécessite un serveur web (apache ou nginx) Si vous avez un problème, décrivez-le dans un commentaire. Si il y a quelque chose que vous ne comprenez pas, laissez aussi un commentaire, il n'y a aucune question bête. Mais par pitié si vous avez une question laissez la en commentaire pour que tout le monde en profite. Je suis ouvert à toutes remarques constructives. L'ensemble du contenu de ce tuto est sous license CC BY-NC 4.0

Pour aller plus loin

La sécurité : architecture et sécurité des données La page Wiki : ici L'API : description de l'API Le protocole de Firefox Accounts : ici