Firefox Sync-1.5 auf einem Uberspace einrichten

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
20. August 2016, 20:39 Uhr