tovotu

20. August 2016
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

Andree 29. August 2016

Ich habe das Ganze auf einem frischen Account mal ausprobiert. Da funktionierte es einwandfrei. Ich konnte mir aber auch nicht erklären, worin da jetzt der Unterschied lag. Jedenfalls bin ich anschließend noch einmal auf meinen eigentlichen Account zurück und hab dort noch einmal "make build" ausgeführt. Wie erwartet: "Nothing to be done for 'build'". Syncserver runtergeschmissen, nochmal das Ganze von vorne. Nun läuft es, inklusive dem Serverstart!

Anschließend ist mir aufgefallen, dass Firefox die Daten angeblich synct, aber niemals Daten in die DB geschrieben werden, obwohl ich den Token-Server in Firefox auf meinen umgeleitet habe. Stellte sich heraus, dass das ein kleiner Fehler in deinem Guide war, den du zwischenzeitlich offenbar selbst korrigiert hast. Bei der RewriteRule in der .htaccess war die Portnummer in < i > </ i >* Tags gefasst. Wenn man so blöd war, wie ich, das blind zu übernehmen, kam in der DB nix an. Ohne Tags wird die DB nun erfolgreich populiert.

Bei der Einrichtung des Dienstes befindet sich übrigens noch so ein kleiner Stolperstein für Unbedarfte: du schreibst "2>& amp ;1" anstelle von "2 > & 1"*

Vielen Dank, dass du dir für mich Zeit genommen hast!

(* Zusätzliche Leerzeichen hinzugefügt, falls das Kommentarsystem die Tags und Char-Codes automatisch umwandeln sollte.)

Administrator 29. August 2016

Okay, dann dürfte es an den unterschiedlichen Uberspace-Servern liegen. Vielleicht fehlt auf älteren Servern etwas, was dazu führt, dass "make build" fehlschlägt oder abweichende Resultate liefert.

Im Zweifel richte dir doch einfach einen neuen Account ein. Vor allem, wenn dein Uberspace-Account ohnehin recht jungfräulich ist. Ich habe das Tutorial mit einem frisch aufgesetzten Account getestet und es funktioniert ganz einwandfrei.

Andree 29. August 2016

Mein Uberspace-Account ist zwar schon etwas älter, aber was die Konfiguration anbelangt im Grunde recht jungfräulich. Außer der Einrichtung von Domains, MySQL und ein paar Symlinks ist da gar nichts verändert worden.

gunicorn kann ich ausführen, weil ich es nach nach einiger Recherche selbst via pip installiert habe, nachdem ich an vorgenannter Stelle die Fehlermeldung erhielt. Ich schlussfolgerte daraus nämlich, dass gunicorn zunächst noch installiert werden müsste und du schlicht verpasst hättest, diesen Schritt zu erwähnen.

Davon abgesehen habe ich deinen Guide 1:1 befolgt. Ohne Abweichung, ohne Typo.

Administrator 29. August 2016

Mir ist nicht klar, wieso du "gunicorn" ausführen kannst. Eigentlich dürftest du es nur unter Angabe des Pfads ausführen können, weil es bei uberspace nicht vorinstalliert ist. Außerdem muss irgendwas vorher schon schiefgelaufen sein. Entweder du bist nicht im richtigen Verzeichnis oder "make build" ist fehlgeschlagen. Anders kann ich mir das nicht erklären. Die Anleitung kann man stumpf befolgen, habe es gerade nochmal versucht.

Andree 29. August 2016

Zunächst einmal vielen Dank für deine Mühe, diesen Guide zusammenzustellen.

Ich versuche gerade anhand deiner Anleitung selbst einen Syncserver auf meinem Uberspace anzulegen, stecke aber bei der Einrichtung des Daemons fest.
Wenn ich "./local/bin/gunicorn --paste syncserver.ini" eingebe, bekomme ich lediglich die Fehlermeldung:
-bash: ./local/bin/gunicorn: No such file or directory

An diesem Punkt ist dein Guide leider ein wenig unpräzise. Ich, als "Noob", weiß hier nicht weiter. Vielleicht kannst du den Part mit gunicorn noch ein bisschen ausführen. Andere Quellen sind hier (bisher) leider auch nicht sonderlich hilfreich.

gunicorn selbst lässt sich übrigens ausführen. "gunicorn -b localhost:port syncserver.ini" startet den Daemon zwar, fährt diesen aber auch sofort wieder runter. "Syntax error: invalid token" in __init__py, oder so.
« 1 2
Neue Kommentare zu diesem Artikel bitte per Mail an kommentare-521(at)tovotu.de!