tovotu

20. August 2016, 20:39 Uhr
Firefox Sync-1.5 auf einem Uberspace einrichten
Sprache:Apache,Python - OS:Uberspace

Firefox bietet seinen Nutzern die Synchronisation von Lesezeichen über verschiedene Geräte (oder Instanzen von Firefox) an. Dazu wird der Mozilla-eigene Dienst Firefox Sync eingesetzt, der die Benutzerdaten auf von Mozilla betriebenen Webservern speichert. Weil Firefox Sync (so wie alle Mozilla-Projekte) ein Open-Source-Projekt ist, muss man seine Daten aber nicht den Mozilla-Servern anvertrauen: Mit wenigen Handgriffen lässt sich auf dem eigenen Webserver ein Firefox-Sync-Dienst (der syncserver) einrichten.

Den syncserver kann man auch mit einem Account auf uberspace.de betreiben. Die offizielle Installations-Anleitung von Mozilla lässt sich aber auf den Uberspace nicht ohne Weiteres übertragen. Weil die angepasste Vorgehensweise noch nicht dokumentiert zu sein scheint,[1] habe ich die nötigen Schritte in diesem Artikel festgehalten.

Den syncserver auschecken und bauen

Ganz gemäß der offiziellen Mozilla-Anleitung installieren wir mittels

$ easy_install virtualenv

das Tool virtualenv, das von syncserver vorausgesetzt wird, checken den offiziellen Quellcode aus und bauen den syncserver mit den folgenden Befehlen:

$ cd /var/www/virtual/$USER/html
$ git clone https://github.com/mozilla-services/syncserver
$ cd syncserver
$ make build

So wird der syncserver letztendlich unter der Adresse

http://username.servername.uberspace.de/syncserver/

erreichbar sein. Will man den syncserver in einem anderen Verzeichnis oder unter einer Subdomain hosten, sollte man entsprechend das git-Repository in das passende Verzeichnis auschecken.[2]

Wie man ohne mod_wsgi auskommt

Mozilla möchte den Sync-Dienst gerne mit dem Webserver (in der offiziellen Anleitung Apache oder nginx) verheiraten. Auf einem Uberspace fehlen uns dafür aber die Rechte. Stattdessen lassen wir gunicorn auf einem lokalen Port lauschen. Apache kann Anfragen an das syncserver-Verzeichnis entsprechend weiterreichen.

Dazu suchen wir uns gemäß der Anleitung im Uberspace-Wiki einen freien Port zwischen 61000 und 65535 und erstellen in unserem syncserver-Verzeichnis die Datei .htaccess mit dem folgenden Inhalt:

RewriteEngine On
RewriteRule (.*) http://localhost:PORTNUMMER/$1 [P]

Außerdem müssen in der syncserver.ini die folgenden Einstellungen vorgenommen werden:

[server:main]
use = egg:gunicorn
host = 127.0.0.1
port = PORTNUMMER
# (...)
[syncserver]
public_url = http://USERNAME.SERVERNAME.uberspace.de/syncserver/
sqluri = pymysql://USERNAME:PASSWORD@localhost/USERNAME_ffsync
allow_new_users = true
force_wsgi_environ = true
# (...)

Entscheidend ist hier die Option force_wsgi_environ, ohne die sich der syncserver an der internen Weiterleitung verschluckt.[3] Außerdem sind unter sqluri die Uberspace-MySQL-Zugangsdaten einzutragen. Hinter dem Schrägstrich steht der Name einer MySQL-Datenbank, die vorher angelegt werden muss.

An diesem Punkt lässt sich der Server bereits starten (und mit Strg+C wieder beenden):

$ cd /var/www/virtual/$USER/html/syncserver
$ ./local/bin/gunicorn --paste syncserver.ini

Den syncserver als Daemon einrichten

Wie in der (leider inzwischen unbrauchbaren) Anleitung für die Installation von Sync-1.1 auf einem Uberspace beschrieben, sollte man gunicorn zukünftig als Daemon starten. Dazu richtet man Daemontools ein und legt einen neuen Service an:

$ test -d ~/service || uberspace-setup-svscan
$ uberspace-setup-service ffsync_daemon echo

Anschließend ersetzen wir die letzte Zeile der Datei ~/service/ffsync_daemon/run durch die folgenden beiden Zeilen:

cd /var/www/virtual/USERNAME/html/syncserver/
exec ./local/bin/gunicorn --paste syncserver.ini 2>&1

Mit dem Befehl

svc -du ~/service/ffsync_daemon

starten wir den Daemon schließlich neu.

Firefox die neue Sync-Adresse beibringen

In den Firefox-Instanzen, die sich mit dem Uberspace-syncserver verbinden sollen, muss der Schlüssel identity.sync.tokenserver.uri in der internen Konfiguration about:config auf

http://username.servername.uberspace.de/syncserver/token/1.0/sync/1.5

gesetzt werden. Wichtig ist hier der Suffix /token/1.0/sync/1.5, ohne den es nicht geht!

Registrierung neuer Nutzer verhindern

Um zu verhindern, dass fremde Benutzer den eigenen syncserver verwenden können, muss nach erstmaliger Anmeldung die Option allow_new_users in der Datei syncserver.ini auf false gesetzt und der syncserver mit

svc -du ~/service/ffsync_daemon

neu gestartet werden.

Einen eigenen Firefox Accounts Server betreiben

Ein nach obiger Anleitung eingerichteter syncserver kann weiterhin nur benutzt werden, wenn man ein Konto bei einem Firefox Accounts Server (FAS) besitzt. Für vollständige Unabhängigkeit kann man auch den FAS auf einem eigenen Webserver betreiben. Die offizielle Installationsanleitung ist aber etwas abschreckend, weshalb ich diesen Schritt bisher nicht gewagt habe.

  1. twitter.com/ubernau...us/452008331465744384
  2. Nähere Informationen zur Verwendung von Domains und Subdomains gibt es im Uberspace-Wiki: wiki.uberspace.de/domain:verwalten
  3. github.com/mozilla-.../syncserver/issues/53

Kommentare

Administrator vor einer Minute

Auf Uberspace 7 funktioniert die Anleitung übrigens mit einigen Anpassungen. Der freie Port kann mit der Vorgehensweise aus dem UberLab (lab.uberspace.de/in...es/generate-port.html) ermittelt werden. Den Service richtet man unter ~/etc/services.d/syncserver.ini mit Verweis auf ein Skript unter ~/bin/syncserver.sh ein und startet den Service mit supervisorctl.

Ich traue mich weiterhin nicht an den eigenen Firefox Account Server heran. Dafür wird nämlich beispielsweise der Hilfsserver fxa-auth-db-mysql benötigt, der auf eine Datenbank mit dem (nicht konfiguriebaren!) Namen "fxa" zugreifen möchte (siehe github.com/mozilla/...h-db-mysql/issues/290). Unter Uberspace müssen MySQL-Datenbanken aber mit dem usereigenen Präfix beginnen. Das kriegt man nicht so einfach umschifft, fürchte ich. Und selbst wenn: Die Struktur des Firefox Account Servers hat sich in den letzten 3 Jahren so häufig verändert, dass es mir schlicht zu aufwendig erscheint, eine eigene Infrastruktur ständig nach deren Gutdünken umzustellen.

egal 7. Januar 2017, 22:01 Uhr

Nach einem kleineren Kampf heute, um eine Verbindung zu erreichen hier noch ein Hinweis: die Anleitung funktioniert zwar auch noch im Januar 2017, aber folgende zwei Dinge musste ich minimal anders machen:

1. syncserver.ini - bei der public_url musste ich https statt http eintragen
public_url = USERNAME.SERVERNAME...erspace.de/syncserver

2. Im about:config von Firefox musste ich für die identity.sync.tokenserver.uri ebenfalls https statt http nutzen.

Uberspace erzwingt wohl inzwischen an diversen Stellen https, auch wenn man eine Adresse über http aufruft.

Das Logging kann man übrigens unter about:sync-log einsehen, dort fand ich dann, dass ein Redirect von http auf https stattfand und der Server mit Fehler 401 (Unauthorized) antwortete.

Mit dem jetzigen Stand sehe ich, dass in der Datenbank ein paar tausend Einträge erschienen sind. Irritierenderweise ändert sich die Anzahl der Einträge in der Tabelle "bso" alle paar Sekunden und schwankt bei mir zwischen 1100 und 1500 Einträgen hin und her.
Mein Firefox unter Android zeigt allerdings bisher die gesyncten Bookmarks (nur die habe ich syncen lassen) nicht an, hat aber angeblich eine Verbindung hergestellt. Hier kann man das Logging leider nicht so bequem einsehen und benötigt LogView-Plugins.

Administrator 5. Oktober 2016, 18:55 Uhr

Du hast mehrere Möglichkeiten, zu überprüfen, ob dein Firefox jetzt wirklich die Daten an deinen Server schickt. Zum einen kannst du in phpMyAdmin einsehen, wie sich deine MySQL-Datenbank mit Sync-Daten füllt (alles verschlüsselt - du kannst also nicht sehen, welche Daten dort sind). Du könntest deinen Netzwerk-Traffic aufzeichnen. Und du könntest den Firefox-Quellcode lesen: github.com/mozilla/gecko-dev

Auch wenn du deinen eigenen FF-Account-Server betreibst, kann Firefox deine Daten immernoch sonstwohin syncen. Ich sehe eigentlich nicht wirklich, welchen Unterschied das machen würde.

Sebastian Salzgeber 5. Oktober 2016, 00:05 Uhr

Danke für das Totorial. Es hat bei mir soweit alles geklappt wie es scheint. Allerdings am Ende die ernüchterung mit "...ein Firefox Account wird dennoch gebraucht" war überraschend. Ich habe den Sync service nun am laufen denke ich (kann man das einsehen?) und mein FF hat auch den about:config wert angepasst um ihn zu mir umzuleiten. Aber nutzt er ihn nun auch? Mein Account unter FF > Einstellungen > sync ist ein firefox.com account. Wie kann ich sicher sein dass er meine Daten mit meinem server synct und nicht mit dem ff.com account? Ich würde auf jedenfall die Hand heben wenn du fragst ob jemand Lust an dem FF Account Server Setup auf Uberspace hat ☺

Sebbo

Administrator 30. August 2016, 19:02 Uhr

Ja, das mit den "<i>" ist mir beim Drüberschauen aufgefallen und ich habe es korrigiert, ohne hier nochmal darauf hinzuweisen. Sorry! Danke für deinen Hinweis bzgl. "&amp;". Das ist nun korrigiert.
1 2 »
Neue Kommentare zu diesem Artikel bitte per Mail an kommentare-521(at)tovotu.de!