FireFox Sync Server


Da ich vor kurzem meine gespeicherten Favoriten und Passwörter verloren habe, bin ich zu dem Schluss gelangt, dass ich ein System brauche mit dem ich diese Dinge sichern und wo anders speichern kann. Allerdings wäre es schön, wenn meine ganzen Firefox Installationen auf den verschiedenen Rechnern sich das auch abholen können. Genau dafür gibt es den FireFox Sync-Server. Hierzu muss man seine Passwörter usw. nicht aus der Hand geben. Man kann einen eigenen aufsetzten. Allerdings ist das nicht so einfach. Bei Mozilla gibt es eine recht gute Anleitung zu diesem Thema, leider funktioniert sie nicht ganz.Der Sync Server enthält kein Authentifizierungsmodul, sondern nutzt den „Firefox Accounts for user authentication Service“. Allerdings gibt es diesen Service auch auf GitHub und man kann ihn also auch lokal installieren. Dies werde ich allerdings nicht tun (vielleicht später).

Voraussetzungen

Ich möchte den Firefox Sync Server über einen Webserver bereitstellen, das erleichtert später die Konfiguration der Clients. Außerdem benötige ich nicht noch ein zusätzliches Loch in der Firewall.
Da der Quelltext auf Git gehostet wird, benötigt man noch einen Git-Client zum Download. Der ist im Armbian schon enthalten und muss nicht seperat installiert werden.

apt-get install apache

Ist das erledigt, kann man mit den Voraussetzungen für den Sync Server beginnen.

apt-get install python-dev git-core python-virtualenv g++

Installation

Nun muss man in das root- Verzeichnis des Webservers wechseln (da Betrieb hinter Webserver) und sich von Git der Sync-Server laden

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

und durch „make“ erstellen.

cd syncserver
make build

Nun kommt der erste Fehler der umschifft werden muss. Das Build Script findet „virtualenv“ nicht, obwohl es installiert wurde.

virtualenv --python=`which python2 python | head -n 1` --no-site-packages ./local
/bin/sh: 1: virtualenv: not found
Makefile:22: recipe for target 'local/COMPLETE' failed
make: *** [local/COMPLETE] Error 127

Ob „virtualenv“ wirklich installiert ist, bekommt man eingentlich ganz schnell heraus.

-rw-r--r-- 1 root root 98K Nov  1  2014 /usr/lib/python2.7/dist-packages/virtualenv.py
-rw-r--r-- 1 root root 82K Jan  3 14:38 /usr/lib/python2.7/dist-packages/virtualenv.pyc

„virtualenv“ ist also vorhanden. Es scheint nur nicht so einfach aufrufbar zu sein. Die Lösung ist relativ einfach. Wir brauchen einen statischen Link.

ln -s /usr/lib/python2.7/dist-packages/virtualenv.py  /usr/bin/virtualenv

Nun wird zwar „virtualenv“ gefunden, allerdings wird der Aufruf mit einem „Permission denied“ quitiert.

virtualenv --python=`which python2 python | head -n 1` --no-site-packages ./local
/bin/sh: 1: virtualenv: Permission denied
Makefile:22: recipe for target 'local/COMPLETE' failed
make: *** [local/COMPLETE] Error 126

Es fehlen also noch Rechte. Da es eine ausführbare Datei ist, fehlt also das „x“-Bit. Das darf aber nicht auf dem Link sondern muss im ursprünglichen Verzeichnis gesetzt werden.

chmod u+x /usr/lib/python2.7/dist-packages/virtualenv.py

Nun läuft das Build-Script ohne Probleme durch. Zum Testen des Ganzen kann man

make test

eingeben. Als Resultat bekommt man einen kleine Benchmark angezeigt. Wenn das funktioniert hat, kann man sehr sicher sein, dass der Sync-Server funktionert. Jetzt muss noch die „syncserver.ini“ angepasst werden. Ich habe folgende Änderungen vorgenommen:

sqluri = pymysql://benutzer:passwort@127.0.0.1/sync
secret = geheimerschlüssel
public_url = http://192.168.0.6:5000/
allow_new_users = true

Die Variable „allow_new_users“ wird nach Abschluss der Einrichtung aller Clients wieder auf „false“ geändert. Zum Erzeugen eines geheimen SHA-1 Schlüssels kann man folgende Befehlszeile eingeben.

head -c 2000 /dev/urandom | sha1sum

Nun muss der Sync- Server zum Test gestartet werden.

make serve

Gibt man nun in die Adresszeile eines Browsers folgende Zeile ein:

http://192.168.0.6:5000/token/1.0/sync/1.5

erscheint eine Json Ausgabe und der Server ist korrekt konfiguriert und läuft.

{"status": "error", "errors": [{"location": "body", "name": "", "description": "Unauthorized"}]}

Betrieb hinter einem Webserver

Als erstes benötigen der Webserver noch ein Modul.

apt-get install libapache2-mod-wsgi

Nun müssen noch die Dateisystem Rechte angepasst werden. Der Besitzer und die Gruppe stimmen noch nicht.

chown -R www-data:www-data /var/www/syncserver

Nun muss noch eine zusätzliche Site in der Apache2 Konfiguration erstellt werden.

<Directory /var/www/syncserver>
  Require all granted
</Directory>

<VirtualHost *:80>
  ServerName sync.zuhause.lan
  DocumentRoot /var/www/sync/syncserver
  WSGIProcessGroup sync
  WSGIDaemonProcess sync user=www-data group=www-data processes=2 threads=25 python-path=/var/www/syncserver/local/lib/python2.7/site-packages/
  WSGIPassAuthorization On
  WSGIScriptAlias / /var/www/syncserver/syncserver.wsgi
  CustomLog /var/log/apache2/syncserver.log combined
  ErrorLog  /var/log/apache2/syncserver-error.log
</VirtualHost>

Zu guter Letzt noch ein

a2ensite ffsync.conf
service apache2 reload

und wenn das Ganze ohne Fehlermeldung abläuft, kann man sein Werk ausprobieren.

Damit der Sync-Server auch auf seinen Namen hört, muss noch die syncserver.ini angepasst werden.

public_url = http://sync.zuhause.lan

Mein Sync-Server soll unter http://sync.zuhause.lan erreichbar (DNS Eintrag nicht vergessen) sein. Wenn man das nun in den Browser eintippt, sollte folgendes erscheinen.

it works!

Erhält man hingegeben eine Fehlermeldung (http 500 Fehler), so wurde der Build nicht im richtigen Verzeichnis erstellt und die Pfade stimmen nicht.

Einstellungen im FireFox

Unter der Webseite

about:config

braucht man eigentlich nur einen Eintrag machen. Der Wert für

identity.sync.tokenserver.uri

muss auf

http://sync.zuhause.lan/token/1.0/sync/1.5

gesetzt werden.

Allerdings ist immer noch ein Mozilla Sync-Konto erforderlich. Dieses dient aber nur noch zu Authentifizierung. Falls Fehler beim Sync entstehen, können die unter

about:sync-log

eingesehen werden.

Links:
Mozilla Doc Service

 


Schreibe einen Kommentar