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