Raspberry Pi: Firefox Sync Server installieren
Der Mozilla Firefox ist neben Google Chrome, Apple Safari und Microsoft Internet Explorer ein weit verbreiteter Browser. Ähnlich wie Chrome bietet auch der Firefox die Synchronisierung von Tabs, Passwörtern, Verläufen, Add-ons, Einstellungen und mehr an. Dabei bietet Mozilla mit dem Firefox Sync Server auch die Möglichkeit, die synchronisierten Daten auf einen eigenen Server zu hosten, womit man diese niemandem anvertrauen muss. Dafür bietet sich der Raspberry Pi mit dessen geringen Leistungsaufnahme an. Jedoch ist die Installation des Firefox Sync Servers im 1.5 Standard, den es seit Mozilla Firefox 29 gibt, zwar einfacher als zuvor, jedoch noch immer etwas umständlich. Wie man einen Firefox Sync Server auf dem Raspberry Pi installiert und diesen auf dem Firefox Browser verwendet, erkläre ich euch im folgenden Artikel.
Voraussetzungen: Raspbian oder vergleichbare Distribution auf dem Raspberry Pi und Verwendung des Mozilla Firefox Browsers in Version 29 oder neuer
Zunächst müssen wir mittels folgenden Kommandos ein paar Python Pakete und Git installieren, was wir später für den Firefox Sync Server benötigen.
sudo apt-get install python-dev git-core python-virtualenv screen
Ebenfalls sollten wir sicherstellen, dass wir eine DynDNS Domain verwenden. Wie man eine solche einrichtet, erklärte ich in dem Artikel DynDNS einrichten. Außerdem sollte Port 5000 im Router bereits jetzt freigegeben sein. Sofern du nicht wissen solltest wie du dies bewerkstelligst, findest du weitere Informationen am Ende dieses Artikels.
Nun müssen wir den Sourcecode des Firefox Sync Servers von dessen Git Repository holen und anschließend kompilieren.
cd /opt
sudo git clone https://github.com/mozilla-services/syncserver
cd syncserver
sudo make build
Mittels folgenden Kommandos sollten wir nun noch eine Zufallszahl generieren, die wir im kommenden Schritt benötigen. Der am Ende stehende Bindestrich gehört nicht mehr zu dem Zufallswert.
head -c 20 /dev/urandom | sha1sum
Jetzt ist es an der Zeit, die Konfigurationsdatei des Sync Servers anzupassen. Ich verwende in diesem Tutorial den Editor nano in dem man mittels STRG + X, Y und Enter speichern kann.
sudo nano syncserver.ini
Zunächst müssen wir die verwendete DynDNS Domain eintragen.
public_url = http://localhost:5000/
ersetzen durch (sync.example.com ersetzen durch eigene DynDNS Domain)
public_url = http://sync.example.com:5000/
Die folgende Passage definiert wo die Datenbank, in der die Daten gespeichert werden, liegen soll.
#sqluri = sqlite:////tmp/syncserver.db
ersetzen durch
sqluri = sqlite:////opt/syncserver/file.db
Daraufhin setzen wir einen Secret, um die Sicherheit der Authentifizierung später zu erhöhen.
#secret = INSERT_SECRET_KEY_HERE
ersetzen durch (anstatt ZUFALLSZAHL die im vorherigen Schritt generierte Zufallszahl einsetzen)
secret = ZUFALLSZAHL
Zuletzt sollten wir es noch erlauben, Benutzer auf dem Firefox Sync Server anzulegen. Wenn diese alle eingerichtet sind, können wir den Wert später von true auf false anpassen.
# allow_new_users = false
ersetzen durch
allow_new_users = true
Wir geben unserem Benutzer (im Normalfall pi) noch die Rechte an dem Firefox Sync Server, damit wir diesen unter dem Benutzer pi ausführen können. Außerdem setzen wir einen Link, sodass wir den Firefox Sync Server später einfach starten können.
sudo chown -R pi:pi /opt/syncserver
sudo ln -s /opt/syncserver/local/bin/pserve /usr/bin/pserve
Es ist an der Zeit, die Anwendung zu starten.
pserve /opt/syncserver/syncserver.ini
Wenn man folgende Ausgabe erhält, ist der Firefox Sync Server ordentlich gestartet. Mittels STRG + C können wir den Server wieder stoppen.
serving on 0.0.0.0:5000 view at http://127.0.0.1:5000
Damit der Server künftig automatisch beim Hochfahren des Raspberry Pis startet und dauerhaft läuft, legen wir diesen in eine Screen. Dazu fügen wir folgende Zeile am Ende der Crontab Datei ein.
crontab -e
@reboot screen -dmS firefoxSyncServer pserve /opt/syncserver/syncserver.ini
Des Weiteren führen wir folgendes Kommando aus, damit der Firefox Sync Server auch jetzt schon läuft.
screen -dmS firefoxSyncServer pserve /opt/syncserver/syncserver.ini
Nun geht es weg vom Raspberry Pi und hin zum Mozilla Firefox Browser. Dort müssen wir about:config in der Adresszeile aufrufen. Wir werden darauf aufmerksam gemacht vorsichtig zu sein, was wir bestätigen. Anschließend bekommen wir ein Suchfeld, in dem wir nach services.sync.tokenServerURI suchen. Daraufhin erscheint lediglich noch die gesuchte Zeile, die wir mittels eines Doppelklicks auf diese bearbeiten können.
Dort tragen wir als Wert http://sync.example.com:5000/token/1.0/sync/1.5 (sync.example.com ersetzen durch die eigene DynDNS Domain) ein.
Dieser Schritt muss bei jedem Firefox Browser ausgeführt werden, der in die Synchronisation eingebunden werden soll. Unter Android gibt es momentan leider keine Möglichkeit, einen eigenen Firefox Sync Server zu verwenden. Laut des Blogs @ncalexander (Englisch) soll es inzwischen auch unter Android funktionieren. Dabei ist zu beachten, dass wir Port 5000, und nicht wie dort angegeben Port 5001, verwenden.
Wir können jetzt einen Firefox Sync Account anlegen. Dazu gehen wir im Firefox Browser in Einstellungen > Sync > Konto erstellen. Im sich öffnenden Formular füllen wir die Felder aus und setzen, falls gewünscht, die Checkbox bei Auswählen, was synchronisiert werden soll. Anschließend erhalten wir einen Bestätigungslink per E-Mail, auf den wir klicken müssen. Wenn alles geklappt hat, meldet Firefox wenig später Sync aktiviert.
Unser eigener Firefox Sync Server ist installiert und wird künftig die gewählten Teile des Browsers unter den Geräten aktuell halten. Was ich schade finde ist, dass es bislang keine Möglichkeit gibt, in der Android Version von Firefox einen eigenen Sync Server zu verwenden. Außerdem musste ich feststellen, dass es häufig etwas länger dauert bis Änderungen synchronisiert werden. Dies liegt jedoch nicht an dem Raspberry Pi, sondern an der Art wie Firefox Sync arbeitet.
Zugriff außerhalb des eigenen Netzwerks
Portfreigabe im Router
Soll der soeben installierte Dienst auch außerhalb des eigenen Netzwerkes verfügbar sein, so müssen folgende Ports im Router freigegeben werden. Wie man freigibt, beschrieb ich in dem Artikel Portforwarding bei Fritz!Box und Speedport.
91 Kommentare. Hinterlasse eine Antwort
Sobald mein neuer Rasperry Pi da ist wird er dafür verwendet
Du schreibst zum einen „1.5 Standard, den es seit Mozilla Firefox 29 gibt“ und zum anderen „Mozilla Firefox Browsers in Version 29 oder älter“.
Funktioniert diese Lösung nun mit älteren oder neueren Versionen der Version 29?
Danke dir.
Ciao
Silvio
Da hat sich mein Englisch mit dem Deutschen getroffen. Firefox 29 und neuer natürlich – und nicht älter.
Super Anleitung. Danke. Übrigens gibt es für Android den „Pale Moon“-Browser, der auf Firefox basiert und bei dem sich der Sync-Server ändern lässt. Ich muss allerdings selbst noch herausfinden, wie man den „Pale Moon“ überredet, den Firefox-Sync zu benutzen. Ist allerdings noch alpha: http://www.xda-developers.com/android/pale-moon-browser-android/
Woher weis ich das die Daten nun auf meinen Server gehen?
Immerhin melde ich mich bei Firefox an und bekomme von denen eine e-mail zur Accountaktivierung.
Was kann ich den wie wo sichern wenn ich meinen Server mal neu aufsetzten möchte oder Sichere ich dann am besten wie gehabt lokal auf dem Rechner.
Wenn du dir den Output Log des Firefox Sync Servers ansiehst wirst du bemerken, dass dort GET, POST und PUT Requests von deinem Firefox Browser rein kommen. Kannst du dir mittels folgendem Kommando anzeigen lassen:
screen -r firefoxSyncServer
An der Stelle vielleicht Hilfreich: Den screen kann man verlassen mit STRG-A und dann STRG-D.
Macht man es mit STRG-C beendet sich der screen und damit auch der syncserver.
Also hier mal mein Ergebnis nebst gemachten Erfahrungen:
Also den Server mit „make serve“ zu starten geht zwar und steht auch so in der Mozilla Doku. Als ich dass das erste mal tat, war mir aber nicht klar ob der Syncserver jetzt läuft oder nicht. Weil „make“ benutzt man eigentlich eher zum bauen. Ich finde das zum starten ungewöhnlich.
Mir ist auch nicht ganz klar was „pserve“ macht. Ich starte mit „gunicorn“.
Bei mir sieht der Start mit vollen Pfad also so aus:
/home/pn/syncserver/local/bin/gunicorn –paste /home/pn/syncserver/syncserver.ini
Aber Obacht:
Ich habe hier Step 3 NICHT gemacht, weil ich anfangs nach Mozilla Doku vorgegangen bin.
Daher liegt bei mir alles in meinem Home (und da eben ein Unterverzeichnis „syncserver“)
Im Falle DIESER Anleitung von Jan wäre der Pfad dann entsprechend
/opt/syncserver/…usw…
Unsicher bin ich mir auch noch bei der Datenbank-Sache. Eine sqluri habe ich jetzt gar nicht. Mozilla schreibt was von „in memory database“, also eine Datenbank die NUR im Speicher gehalten wird. Ich habe aber in meinem „syncserver“-Verzeichnis eine Datei „syncserver.db“, die wohl offensichtlich benutzt wird.
Ich bin jetzt nicht sicher ob das nicht schon bereits eine Dateibasierte Datenbank ist.
Und bei Step 5, das mit dem „allow_new_users“ hat sich wohl auch geändert. Weil in dem Repository das ich aktuell hier habe ist das komplett einkommentiert. Also da steht:
# Set this to „false“ to disable new-user signups on the server.
# Only request by existing accounts will be honoured.
# allow_new_users = false
Ich gehe also mal davon aus, das neue Benutzer „per Default“ zugelassen sind.
Ich habe dann zudem versucht das ganze per Skript in rc.local zu starten. Bekam aber dann dauernd den Output auf die Konsole und bin wohl zu doof das Umzuleiten.
Also daher ist die screen Variante wohl tatsächlich am besten.
Ob der Syncserver läuft sagt einem ein „ps waux | grep sync“ oder eben besagter „screen -r“ (Siehe Kommentare)
Den screen könnte man auch mit „screen -dmS fsync …“ starten, dann ist der Name nicht so furchtbar lang zum tippen 🙂
Bei mir also:
screen -dmS fsync /home/pn/syncserver/local/bin/gunicorn –paste /home/pn/syncserver/syncserver.ini
und in der crontab eben ein Eintrag:
# Firefox Sync
@reboot screen -dmS fsync /home/pn/syncserver/local/bin/gunicorn –paste /home/pn/syncserver/syncserver.ini
Manchmal war mir auch nicht so ganz klar wann ich was als User machen darf und wann ich etwas als root tun muss. Die Stolperfallen stecken halt meistens in den Deails.
Die Schalter bei dem screen stehen für
dm: „Detached Mode“ – Startet eben eine screen session.
S: Gibt der Session einen hübschen Name. Sonst wird da irgendein tty.host suffix angehängt.
Screen ist glaube ich ein Thema für sich. Genau wie Ein- Ausgabeumleitung oder Prozessbehandlung (im hintergrund starten, in den hintergrund schieben, wieder vorholen, etc…)
Beim Start via rc.local musste noch ein „&“ ans Ende der Befehlszeile. Vergisst man das, bekommt man kein Login Prompt weil das rc.local Script dann stehen bleibt (und wartet bis es sich beendet, was aber nie passiert solange der syncserver läuft).
rc.local MUSS Fehlerfrei DURCHlaufen (eben mit „exit 0“. Was bedeutet „Ohne Fehler“
Also auf die schnelle da was eintragen war nicht drin.
Und dann war da ja noch der Output und den wollte ich noch loggen und…und…und…..
Aber da bin ich dann echt an meine Grenzen gekommen.
Oh und ja: Mittlerweile bin ich auf Firefox Version 43 umgestiegen. Überall. Weil entweder haben sich nur die Version 38 Füchse unterhalten oder die Version 43. Vermutlich wegen den Unterschiedlichen Strings die man da in about:config angeben muss. Siehe Kommentare weiter oben. Also derzeit ist Firefox Version 42 und höher Ideal.
Und prompt wurden meine Bookmarks mit alten Bookmarks durcheinandergewürfelt. Ich empfehle vor der Sync-Einrichtung ein Backup der Bookmarks! Oder gleich das ganze Benutzerprofil. Es kann sonst echt sein, dass wenn ein Rechner startet, der selten läuft, beim Starten von Firefox seine alten Bookmarks verteilt und dann hat man ganz tolles Durcheinander. Foxmarks/XMarks hat bei Konflikten wenigstens gefragt. Nicht aber das Supertolle 1.5 Sync. Und bei mehreren hundert Lesezeichen in Unter-Unter-Unterordnern merkt man das unter Umständen nicht sofort.
Ein weiteres Problem war dann noch eenn man Einstellungen synchronisieren will. Dann geht das nur für Firefox an sich. Nicht aber für PlugIns (?). Da ich das Classic Theme Restore PlugIn benutze, wird, was Schalter und Buttons angeht, gar nichts synchronisiert.
Also die Oberfläche musste ich praktisch dann überall von Hand ändern.
Bis dann auch endlich mal alle PlugIns verteilt waren musste ich ein paar mal den Firefox neu starten.
Und meine ESR Versionen (Version 38) haben natürlich prompt diese Sync URI auf Mozilla zurückgesetzt, so das sämtliche Bookmarks mitsamt Beschreibungen DORT gelandet sind. Wahrscheinlich auch noch die komplette Chronik. Wegen dieser dämlichen Anmeldung bei Mozilla.
Wer das also noch alles vor sich hat: Viel Glück und gute Nerven 🙂
Sorry. Der lange Beitrag sollte eigentlich unten hin. Ich brauch Schlaf….
Die Anleitung funktioniert nicht. Ich werde grundsätzlich beim mozillaserver selber angemeldet bei der Accounterstelleung. Mehrfach ausprobiert.
Du musst nach Step 9 Firefox neustarten! Dann hat es bei mir funktioniert!
Probierte ich ebenfalls beim Schreiben aus. Einen Neustart hats bei mir nicht gebraucht.
Der Account wird bei dem Mozilla Server angemeldet, das ist richtig. Der Sync läuft jedoch über den Raspberry Pi. Siehe meine Antwort auf Markus seinen Kommentar.
Eigener Syncserver und dafür ein Account bei Mozilla, roffel. Das kannste jemand erzählen der die Hose mit der Kneifzange zu macht. Wenn das stimmen sollte frage ich mich wofür dann ein eigenen Syncserver?
Wenn du ja deiner Ausdrucksweise zu entnehmen ja so firm bist weise doch den Unsinn nach. Eine zentrale Authentifizierung ist nichts so unübliches.
„Außerdem musste ich feststellen, dass es häufig etwas länger dauert bis Änderungen synchronisiert werden.“ Wie lange ist etwas „länger“? Mehr als 2 Stunden? Hat die Funktion ‚Jetzt syncronisieren‘ unter ‚Extras‘ irgendeine Auswirkung auf den Firefox Sync Server?
Damit meine ich 1-2 Minuten. Durch den Button „Jetzt syncronisieren“ konnte ich persönlich keine sofortige Synchronisierung erwirken.
Vielen Dank für die tolle Anleitung. Es hat alles prima geklappt.
Klappt perfekt!! DANKE!!! 🙂
Hallo,
bei mir funktioniert es irgendwie nicht. Ich versuche es mit firefox in einer virtuellen Maschine zu virtualisieren.
Mit dem Befehl
screen -r firefoxSyncServer
kommen immer ganz viele Meldungen mit GET , POST … aber die Lesezeichnen werden nicht synchronisiert. Muss man bei beiden Firefox Browsern mit einem Sync Account arbeiten oder für jeden einen eigenen registrieren? Habe bei beiden Browsern mit about:config meine dyndns eingetragen.
Hoffe jemand kann mir weiterhelfen.
Du musst dich auf beiden Geräten mit dem selben Konto anmelden. Das Synchronisieren kann schon mal ein paar Minuten bei dem Furefox Sync System verzögert sein.
Hey Jan,
erstmal vorweg vielen dank für deine sehr guten Anleitungen!! funktionierten bisher alle reibungslos!
aber wenn ich hier step 7 ausführe, bekomme ich folgende Meldung:
Traceback (most recent call last):
File „/usr/bin/pserve“, line 9, in
load_entry_point(‚pyramid==1.5‘, ‚console_scripts‘, ‚pserve‘)()
File „/opt/syncserver/local/local/lib/python2.7/site-packages/pyramid/scripts/pserve.py“, line 51, in main
return command.run()
File „/opt/syncserver/local/local/lib/python2.7/site-packages/pyramid/scripts/pserve.py“, line 316, in run
global_conf=vars)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/pyramid/scripts/pserve.py“, line 340, in loadapp
return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 247, in loadapp
return loadobj(APP, uri, name=name, **kw)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 271, in loadobj
global_conf=global_conf)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 296, in loadcontext
global_conf=global_conf)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 320, in _loadconfig
return loader.get_context(object_type, name, global_conf)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 454, in get_context
section)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 476, in _context_from_use
object_type, name=use, global_conf=global_conf)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 406, in get_context
global_conf=global_conf)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 296, in loadcontext
global_conf=global_conf)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 328, in _loadegg
return loader.get_context(object_type, name, global_conf)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 620, in get_context
object_type, name=name)
File „/opt/syncserver/local/local/lib/python2.7/site-packages/paste/deploy/loadwsgi.py“, line 646, in find_egg_entry_point
possible.append((entry.load(), protocol, entry.name))
File „/opt/syncserver/local/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg/pkg_resources.py“, line 1989, in load
entry = __import__(self.module_name, globals(),globals(), [‚__name__‘])
File „/opt/syncserver/syncserver/__init__.py“, line 12, in
import mozsvc.config
File „/opt/syncserver/local/local/lib/python2.7/site-packages/mozsvc/config.py“, line 10, in
from konfig import Config, SettingsDict
File „/opt/syncserver/local/local/lib/python2.7/site-packages/konfig/__init__.py“, line 11, in
from configparser import ConfigParser, ExtendedInterpolation
ImportError: cannot import name ExtendedInterpolation
Woran kann das liegen?
Bitte Hilf mir!
Das scheint ein Bug im configparser 3.5.0b1 zu sein. Sollte beim nächsten Release in ein paar Tagen gefixt sein.
Vielen Dank!
Dann werde ich mal auf updates warten und danach nochmal probieren!
ich habe folgendes in /opt/syncserver/local/local/lib/python2.7/site-packages/konfig/__init__.py editiert:
Anstatt (Zeile 11): from configparser import ConfigParser, ExtendedInterpolation
ersetzt durch:
#from configparser import ConfigParser, ExtendedInterpolation
from backports import configparser as CP
ConfigParser=CP.ConfigParser
ExtendedInterpolation=CP.ExtendedInterpolation
dann klappt’s.
Beste Grüße!
Harald
Die Installation auf dem Rasppi klappte einwandfrei – vielen Dank!
Laut http://www.ncalexander.net/blog/2014/07/05/how-to-connect-firefox-for-android-to-self-hosted-services/ soll jetzt der Sync mit Custom-Servern auch unter Android klappen – ich kriege es aber einfach nicht hin!
Hatte jemand Erfolg? Wie müssen die Adressen des Sync-Servers auf dem Raspberry im Add-on „fxa-custom-server-addon“ aussehen?
Cool. Die Adresse sollte laut diese Anleitung http://domain.com:5000/token/1.0/sync/1.5 (domain.com durch DynDNS Domain des Raspberry Pis ersetzen) lauten.
Danke für die Rückmeldung. Leider kann mein Android-Firefox (Version 33.0) mit Hilfe des genannten Add-ons “fxa-custom-server-addon” keine Verbindung zum Sync-Server herstellen (der Desktop-Firefox macht das ohne Probleme).
Das Add-on fragt nach zwei Adressen:
– „Account server“ („Konto auf Server verwenden“)
– Sync server“ („Sync-Dateien auf Server speichern“)
An beiden Stellen habe ich es sowohl mit https://domain.com:5000/token/1.0/sync/1.5 als auch mit https://domain.com:5000/ probiert – mal mit, mal ohne HTTPS – mal mit, mal ohne Port…
Ich hoffe so sehr, dass es eine Lösung gibt…!
der Accountserver wird durch den Syncserver NICHT ersetzt. Dort muss also der Mozilla-Server drin sein / bleiben.
Danke an Jan für die Anleitung.
Auf meinem Cubie läuft nun der FFSyncServer.
Wie stelle ich nun auf SSL um, bzw wo finde ich nun die Datei syncserver.ini?
Danke Gruß
Die gesuchte Datei solltest du unter /opt/syncserver/syncserver.ini finden. Wie man SSL mittels nginx einrichtet wird in der Dokumentation des Projektes beschrieben.
Hallo, danke für die klasse Anleitung. Mit meinem Raspberry habe ich nur ein Problem, der Server wird nicht automatisch nach dem Reboot gestartet.
Ich habe den Befehl @reboot screen -dmS firefoxSyncServer pserve /opt/syncserver/syncserver.ini eingetragen, aber nach jedem Neustart muss ich den Server von Hand starten. Ich habe auch schon versucht, es über sudo crontab -e einzutragen, das funktioniert auch nicht.
Ich habe bei mir noch Kodi installiert, hat es eventuell damit etwas zu tun?
Gruß,
Markus
Welches Betriebssystem verwendest du als Basis?
Benutze Raspbmc und habe jetzt festgestellt, dass dort die Cronjobs nicht laufen.
Hi Jan,
danke für die Anleitung. Hast du schonmal das git update gemacht? Reicht es wenn ich meine config Änderungen stashe?
Updaten solltest du durch Wiederholung von Step 1 und einem anschließenden Neustart des Firefox Sync Servers erreichen.
Mit dem Firefox 37 kommt man nicht mehr dazu einen eigenen Server einzutragen ?
ich dachte da gäbe es kein altes Syncprotokoll mehr. Aber im Changelog steht das jetzt doch nicht drin… vielleicht verschieben die das noch…
Mit Firefox 37 funktioniert es nach wie vor in der Weise, in der ich es in Step 9 beschrieb.
Hi Jan,
zunächst mal vielen Dank für die Anleitung. Bisher funktionierte es wunderbar bei mir.
Nach einer Neuinstallation spuckt der Raspberry allerdings folgende Fehlermeldung aus:
ERROR:syncserver:The public_url setting doesn’t match the application url.
This will almost certainly cause authentication failures!
public_url setting is: http://XXX.YYY.ZZZ.AAA:5000
application url is: http://X,X,X,.,Y,Y,Y,.,Z,Z,Z.,A,A,A,:,5,0,0,0
You can disable this check by setting the force_wsgi_environ
option in your config file, but do so at your own risk.
Tatsächlich gibt es neuerdigs eine Variable
force_wsgi_environ = false
in der syncserver.ini. Setzt man diese Variable true, kommt statt der oben zitierten Fehlermeldung folgende:
INFO:mozsvc.metrics:{„code“: 401, „request_time“: 0.026875972747802734, „remoteAddressChain“: [„CLIENT_IP_ADRESSE“], „agent“: „M,o,z,i,l,l,a,/,5,.,0, ,(,W,i,n,d,o,w,s, ,N,T, ,6,.,3,;, ,W,O,W,6,4,;, ,r,v,:,3,7,.,0,), ,G,e,c,k,o,/,2,0,1,0,0,1,0,1, ,F,i,r,e,f,o,x,/,3,7,.,0“, „path“: „http://XXX.YYY.ZZZ.AAA:5000/token/1.0/sync/1.5“, „method“: „GET“}
Auch hier werden also wild irgendwelche Kommas hinzugefügt. Welchen Grund könnte es hierfür geben und was kann ich dagegen tun (neuinstallation des Servers und der Firefox Clients brachten keine Abhilfe)
Evl. hilft dir dieses Issue aus der Entwicklung des Firefox Sync Servers weiter.
Hallo jan,
Warum bleibt der eingestellte Wert in der services.sync.tokenServerURI mit meinen Daten im Firefox nicht erhalten ??
Es steht dann wieder mozilla Mist drin!!
Grüße
Könnte vielleicht daran liegen. Es passiert beim ab- und wieder anmelden bei Sync. Mozilla faselt da was von
„(Prior to Firefox 42, the TokenServer preference name for Firefox Desktop was “services.sync.tokenServerURI”. While the old preference name will work in Firefox 42 and later, the new preference is recommended as the old preference name will be reset when the user signs out from Sync causing potential confusion.)“
Also wenn ich es richtig verstanden habe (mein Englisch ist bescheiden) sollte man „identity.sync.tokenserver.uri“ benutzen.
In meinen virtuellen Rechnern fahre ich aktuelle Füchse. Hingegen sind meine Füchse die ich ernsthaft zum arbeiten benutze ESR Versionen. Und dies stehen gerae bei Version 38 irgendwas…. Siehe: https://www.mozilla.org/en-US/firefox/organizations/faq/
Ich habe mit den ERS Versionen angefangen unter anderem gerade wegen dem Wechsel von Sync 1.0 auf Sync 1.5 und weil mir „ständig neue Features“ die ich nicht haben will auf die Nerven gingen.
Auch so ein Punkt den ich bemängele. Es wäre doch einfach dem User die Entscheidung zu überlassen: „Willst du Klassik Version oder immer neueste Features?“. Also war meine Lösung eben ESR Versionen und eben das Classic Theme Restore PlugIn.
Das ist die Ausgabe die ich bekommen ,wenn ich den Befehl pserve /opt/syncserver/syncserver.ini ausführe:
pi@raspberrypi ~ $ pserve /opt/syncserver/syncserver.ini
Starting server in PID 2608.
!!!
!!! WARNING: This command is deprecated.
!!!
!!! You should now use the `–paste` option. Ex.:
!!!
!!! gunicorn –paste development.ini
!!!
!!!
Exiting 1 (-v to see traceback)
Kein Anlass zur Sorge. Sollte alles wie bislang funktionieren, gibts nur eine neue empfohlenere Methode.
Hallo Jan, auch von mir ein herzliches „danke“…
Eine gute… nein… sehr gute und verständliche Anleitung. Das gilt auch für die „Raspberry Pi: DynDNS einrichten“ und „Raspberry Pi: Portforwarding bei Fritz!Box und Speedport“
Ich beschäftige mich erst seit wenigen Tagen mit dem RasPi und Linux überhaupt. Soweit habe ich alles ohne grosse Schwierkeiten umsetzen können- auch wenn ich des öfteren nicht wusste was genau ich da eigentlich gerade mit der ein oder anderen Variable mache. 😉 Aber es scheint zu funktionieren- FF gibt mir jedenfals keine Fehlermeldung aus…
Dennoch eine- eigentlich die wichtigste- Frage will ich hier auch stellen. Ich bekomme auch diese „Meldung“ sowohl bei dem oben genannten Befehl von Felix sowie deine Antwort hier:
„Wenn du dir den Output Log des Firefox Sync Servers ansiehst wirst du bemerken, dass dort GET, POST und PUT Requests von deinem Firefox Browser rein kommen. Kannst du dir mittels folgendem Kommando anzeigen lassen:
screen -r firefoxSyncServer“
Als „noob“ kann ich, in der Tat, so nicht erkennen ob alles funktioniert…
Was ist- oder wie funktioniert- die neue Methode? Würdest du das hier in deiner Anleitung mit aufnehmen?
Nochmals vielen Dank!
Den Artikel werde ich, sobald ich dafür Zeit finde, überarbeiten.
Also wenn ich mir das so ansehe würde ich nicht unbedingt sagen das “ man diese[Daten] niemandem anvertrauen muss“ .
Zum einen muss man sich ja mit allen Geräten bei Mozilla anmelden, das heißt astreine verknüpfung von Daten und zum Anderen findet das ganze ohne Verschlüsselung statt, was zb. beim sync über ein kompromittiertes Wlan komplette naktmachung bedeutet.
Oder irre ich ?
Alternativ kann man sich einen Firefox portable in die cloud legen, ist zwar minimal langsamer aber erfüllt den Zweck ebenso.
Eine SSL-Verschlüsselung wäre in der Tat nicht verkehrt für das Tutorial – habe ich mal auf die Todo-Liste gesetzt. Jedoch erhält Mozilla bei dieser Variante nur die Geräte-ID (in welcher Form diese im Firefox auch immer definiert ist), jedoch nicht die synchronisierten Daten an sich.
Verschlüsselung wäre zumindest nicht verkehrt. Ich brauch Sync nur im lokalen LAN. Aber wer „von aussen“ synct und seine Passwörter synct, dem sollte klar sein dass das alles unverschlüsselt über die Leitung geht und eben auch im LAN mitsniffbar ist. Ich war schon froh als es überhaupt mal lief! Das mit der Datenbank, dem Secret-Key und dem screen habe ich bei mir jetzt z.B. gar nicht benutzt. Mir ist in Anleitungen immer wichtig, das es erst mal überhaupt funktioniert. So das es möglichst einfach bleibt und nur mal das Grundlegendste. Alles andere, (Datenbank, Verschlüsselung, screen, starten per cron, …) kann man dann immer noch per „optionale Schritte“ anbieten. Mensch weiß dann, dass es zumindest dann mal grundlegend funktioniert. Wenn 🙂
Hey, bis dahin eine super Anleitung. Konstruktive Kritik: Vom ändern der .ini im Nano-Editor springst du direkt weiter, für Linux Neulinge wie mich fehlt da der Hinweis „Speichern und beenden“.
Mein Problem: Step 7 – nach Eingabe der Zeile zum starten meldet das Terminal folgendes
Starting server in PID 13271
!!!
!!! WARNING: This command is deprecated.
!!! You shoult now use the ‚–paste‘ option. Ex.:
!!!
!!! gunicorn — paste deveöopment.ini
!!!
!!!
Erbitte Hilfe
Yay, Danke Jan!
Funktioniert scheinbar! 🙂
Wollte gerade wegen der gleichen Thematik wie elvis89 einen Kommentar hinterlassen. Ein Update des ansonsten sehr guten Beitrags wäre wirklich toll!
Danke, danke, danke danke! Ich habe es zuerst per Mozilla Anleitung versucht bis ich hier dann den entscheidenden Hinweis laß, bei dem URI String noch die Portnummer (:5000) mit anzugeben.
Als Ergänzung https://docs.services.mozilla.com/howtos/run-sync-1.5.html ab Firefox 42.
Hallo Jan,
ich bin mittlerweile echt Fan von deinen Tutorials, denn sie klappen (meistens). Leider hab ich bei diesem ein Problem. Ich hab alles so gemacht wie hier beschrieben und zusätzlich die SSL EInstellungen von hier: https://docs.services.mozilla.com/howtos/run-sync-1.5.html
Mein error-log unter about:sync-log zeigt folgendens, hast du eine Idee was ich verbockt habe?
Danke
1453921125149 Common.TokenServerClient DEBUG Beginning BID assertion exchange: https://myserveradress-dns.com:5000/token/1.0/sync/1.5
1453921125151 FirefoxAccounts TRACE finished write of json user data – took: 17
1453921125151 FirefoxAccounts DEBUG writing secure storage: [„kA“,“kB“]
1453921125151 FirefoxAccounts TRACE starting write of user data to the login manager
1453921125158 FirefoxAccounts TRACE finished write of user data to the login manager
1453921125220 Sync.Tracker.Passwords DEBUG Saving changed IDs to passwords
1453921127603 Sync.SyncScheduler DEBUG Global Score threshold hit, triggering sync.
1453921127603 Sync.Service DEBUG User-Agent: Firefox/43.0.4 FxSync/1.45.0.20160105164030.
1453921127603 Sync.Service INFO Starting sync at 2016-01-27 19:58:47
1453921127603 Sync.Service DEBUG In sync: should login.
1453921127603 Sync.Service DEBUG Exception: Could not acquire lock. Label: „service.js: login“. No traceback available
1453921127603 Sync.Service INFO Cannot start sync: already syncing?
1453921127603 Sync.Service DEBUG Not syncing: login returned false.
1453921128507 Sync.BrowserIDManager ERROR Non-authentication error in _fetchTokenForUser: TokenServerClientNetworkError({„error“:{}}) (resource://gre/modules/services-common/tokenserverclient.js:36:36) JS Stack trace: @tokenserverclient.js:36:36 < @browserid_identity.js:14:1 < @status.js:15:1 < lazyImport/getter/<@main.js:20:5 < WeaveService.prototype.observe/<.notify error.login.reason.network
1453921128507 Sync.Status DEBUG Status.service: success.status_ok => error.login.failed
1453921128508 Sync.BrowserIDManager ERROR Background fetch for key bundle failed: TokenServerClientNetworkError({„error“:{}}) (resource://gre/modules/services-common/tokenserverclient.js:36:36) JS Stack trace: @tokenserverclient.js:36:36 < @browserid_identity.js:14:1 < @status.js:15:1 < lazyImport/getter/<@main.js:20:5 < WeaveService.prototype.observe/<.notify<@Weave.js:154:13
1453921128509 Sync.Tracker.History DEBUG Saving changed IDs to history
1453921128743 Hawk DEBUG (Response) /account/status?uid=8d93c1dc1b594d6ab9d3b3ffdc509c6c: code: 200 – Status text: OK
1453921128743 Sync.RESTResponse TRACE Processing response headers.
1453921128744 Hawk DEBUG Clock offset vs https://api.accounts.firefox.com/v1: 2256
1453921128744 Sync.BrowserIDManager ERROR Could not authenticate: TokenServerClientNetworkError({"error":{}}) (resource://gre/modules/services-common/tokenserverclient.js:36:36) JS Stack trace: @tokenserverclient.js:36:36 < @browserid_identity.js:14:1 < @status.js:15:1 < lazyImport/getter/<@main.js:20:5 < WeaveService.prototype.observe/<.notify<@Weave.js:154:13
1453921128746 browserwindow.syncui DEBUG observed: weave:service:login:error
1453921128746 browserwindow.syncui DEBUG onActivityStop with numActive: 1
1453921128747 Sync.SyncScheduler DEBUG Clearing sync triggers and the global score.
1453921128748 Sync.SyncScheduler DEBUG Next sync in 3600000 ms.
Hallo Jan,
auch diesmal mein herzliches Dankeschön für diese Anleitung. Ich habe bisher Sync 1.1 mit Owncloud genutzt und mich lange darum gedrückt, auf Sync 1.5 umzusteigen. Einige Versuche, Sync 1.5 auf dem Pi zu installieren, scheiterten. Ich habe auch die komplizierteste Variante inklusive FxA-Server etc. probiert. Nun ist die Zeit gekommen, dass Sync 1.1 aus Firefox verschwindet, mein Leidensdruck stieg 😉 Ich fand Deine Anleitung, und sie ist mal wieder die beste die ich fand. Einige Kleinigkeiten möchte ich ergänzen, vielleicht ist es für andere nützlich:
Bei mir läuft sowieso ein MySQL-Server. Deshalb wollte ich nicht zusätzlich Sqlite nehmen. Die entsprechende Zeile in der Konfigurationsdatei lautet deshalb:
sqluri = pymysql://user:passwort@localhost:3306/syncserver
Datenbank und Benutzer müssen natürlich noch angelegt werden:
mysql -u root -p
CREATE DATABASE syncserver;
GRANT ALL PRIVILEGES ON syncserver.* TO sync IDENTIFIED BY „password“;
exit;
Weil auch ein Apache auf meinem Pi läuft, habe ich den als Reverse-Proxy für den Syncserver aufgesetzt. Das spart mit die zusätzliche Portfreigabe auf Port 5000 und ich habe, weil mein Webserver mit HTTPS läuft, gleichzeitig eine verschlüsselte Kommunikation. Wichtig ist, dass die Zeile public_url … exakt die Adresse enthält, mit der der Syncserver angesprochen wird. Anderfalls gibt es ungültige Tokens.
Um die von Felix ganz oben genannte Meldung zu vermeiden:
sudo ln -s /opt/syncserver/local/bin/gunicorn /usr/bin/gunicorn
gunicorn –paste /opt/syncserver/syncserver.ini
Außerdem habe ich eine Möglichkeit gesucht, den Syncserver nicht per screen zu starten. Irgendwie war mit das zu wenig elegant. Ich habe nun ein init-Script, mit dem ich den Server über service syncserver start|stop|restart steuern und natürlich beim Booten automatisch starten kann:
#!/bin/bash
### BEGIN INIT INFO
# Provides: syncserver
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the Firefox Sync Server
# Description: Starts the Firefox Sync Server
### END INIT INFO
PROJECT=/opt/syncserver
VIRTUALENV=/opt/syncserver/local
PID_DIR=/opt/syncserver
PID_FILE=/opt/syncserver/syncserver.pid
LOG_FILE=/opt/syncserver/logs/syncserver.log
USER=pi
GROUP=pi
PROD_FILE=/opt/syncserver/syncserver.ini
source $VIRTUALENV/bin/activate
cd $PROJECT
case „$1″ in
start)
gunicorn –paste $PROD_FILE –daemon –log-file=$LOG_FILE \
–pid $PID_FILE –user=$USER –group=$GROUP
;;
stop)
kill `cat $PID_FILE`
;;
restart)
kill `cat $PID_FILE`
gunicorn –paste $PROD_FILE –daemon –log-file=$LOG_FILE \
–pid $PID_FILE –user=$USER –group=$GROUP
;;
*)
echo $“Usage: $0 {start|stop|restart}“
exit 1
esac
exit $RET_VAL
So brauche ich kein Screen und die Abhängigkeit Python 2.6 spare ich mir so auch. Das Logging werde ich noch nach /var/log/syncserver verschieben und Logrotate entsprechend aufräumen lassen.
Viele Grüße,
Franz
Ich habe den Syncserver auch HTTPS, also verschlüsselt am laufen. Klappt auch wunderbar mit meinen Desktop Firefoxen. Nur mit meinem Android Firefox will das einfach nicht klappen. Ich benutze ein selbst erstelltes Certificat. Kann es sein das es daran liegt?
Läuft dein Sync über gesicherte Verbindung auf Android?
Hallo Jan,
vielen Dank an dieser Stelle für deine großartigen Tutorials.
Dank dir konnte ich einen tollen Server bauen und selbst warten.
Auch der ff sync server funktioniert einwandfrei, jedoch möchte ich ihn ohne SSL nicht über das Internet benutzen und würde mich wahnsinnig freuen wenn du das Tutorial noch darum erweitern könntest.
LG Daniel
@ Daniel Dingeldein:
So wie es aussieht, kann der Syncserver selbst kein SSL/TLS. Du musst ihn deshalb hinter einem Webserver betreiben, wobei der Webserver dann für SSL/TLS konfiguriert sein muss. Eine mögliche Anleitung findest Du hier: https://sathya.de/blog/how-tos/setup-your-own-firefox-1-5-sync-server-on-debian-with-apache2-and-mysql/
Mir selbst war das komisch, hier noch ein Apache-Modul mod_wsgi zu installieren. Ich nutze den Apache schon für andere Dinge als Revers-Proxy und habe das für den Syncserver ebenfalls gemacht – es funktioniert. Es sind nur wenige Konfigurationszeilen in der /etc/apache2/sites-enabled/default-ssl:
ProxyRequests off
Order deny,allow
Allow from all
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SetOutputFilter proxy-html
ProxyHTMLExtended On
ProxyPass /syncserver http://localhost:5000
ProxyPassReverse /syncserver http://localhost:5000
ProxyHTMLURLMap http://localhost:5000 /syncserver
Order allow,deny
Allow from all
Satisfy any
Hallo,
Dankschön zunächst einmal für die Anleitung und den Support drumherum!
Ich habe eine vermutlich dumme Anfängerfrage: Wenn ich den Raspberry ausschalte, dürfte keine Synchronisation der Geräte mehr erfolgen, oder?
Bei mir synchronisieren sich die Geräte dennoch. Ein Zeichen, dass ich etwas falsch gemacht habe? Eigentlich alles abgearbeitet inkl. Firefox-Einstellungen; der einzige Fehler war der bereits oben beschriebene „WARNING: This command is deprecated.“.
Danke für einen Tipp…
Richtig, wenn der Pi ausgeschaltet ist, sollte keine Synchronisation mehr erfolgen.
Schau doch mal bitte in die Logdatei hinein und stoße einen Sync-Vorgang an. Kommen da neue Einträge? Hast Du in about:config den Wert für identity.sync.tokenserver.uri richtig angepasst?
Danke für die schnelle Antwort!!
ich hatte in about:config nach Anleitung die Zeile „services.sync.tokenServerURI“ erstellt und angepasst – muss ich das statt dessen mit „identity.sync.tokenServerURI“ machen? Jetzt habe ich den Hinweis in den Diskussionen gesehen…
Mit der Logdatei ist „screen -r firefoxSyncServer“ gemeint, richtig? Da kommt dann „there is no screen to be resumed“ Vermutlich läuft also auch der Server nicht richtig… oje. Wo könnte ich ansetzen, um das zu überprüfen?
Ja, identity.sync.tokenserver.uri ist richtig. Der von Dir genommene Parameter ist alt.
Welche Logdatei die richtige ist, weiß ich leider nicht. Ich habe das bei mir etwas anders gelöst, siehe meinen Kommentar vom 30. Januar 2016 um 23:48 und vom 14. Februar 2016 um 23:33. Bei mir muss ich in die Access-Logs des Webservers schauen.
Ich fürchte, ich habe noch zu wenig Fachwissen, um Deinen Ansatz in allen Punkten nachvollziehen zu können 🙁
Einstweilen eine andere Frage: Wenn der Syncserver von außen nicht erreichbar sein muss (nur innerhalb des eigenen Netzwerks), dann braucht man weder externe IP noch DynDNS, oder? Ich habe irgendwo gelesen, dass man dann auch die IP des Raspi eintragen kann? ebenfalls mit Port 5000? Ist auch in diesem Fall im Router eine Portfreigabe erforderlich?
Sorry, mir fehlen da die Basics…
Richtig, wenn der Syncserver nicht von außen erreichbar sein muss, reicht eine private, statische IP-Adresse (192.168.x.x). Es braucht keinen Namen, kein DynDNS und auch keine Portfreigabe im Router. Im Parameter identity.sync.tokenserver.uri trägst Du dann http://192.168.x.x:5000/token/1.0/sync/1.5 ein. Die beiden x musst Du natürlich anpassen.
ich bekomme es nicht hin… Die IP des Raspi ist (geändert) 192.168.62.2
Entsprechend habe ich die Einstellungen angepasst. Beim Start des syncservers kommt die Fehlermeldung:
Error:syncserver:The public_url setting doesn’t match the application url.
public_url setting is: http://192.168.62:2:5000
application url is: http://192.168.62:2
Was muss ich hier noch ändern? Dankeschön für einen Tipp…
Eine ähnliche Fehlermeldung hatte ich auch, kann sie aber nicht mehr reproduzieren. Wichtig war, dass in der syncserver.ini die Zeile
public_url = http://192.168.62.2:5000
exakt die Adresse enthält, die Du auch von Firefox aufrufen lässt. Die letzte Zeile der Fehlermeldung enthält die Adresse http://192.168.62:2 – die ist garantiert nicht richtig. Vor der letzten 2 steht ein Doppelpunkt, das muss ein Punkt sein. Und danach wohl :5000 – dann müsste es passen. Kontrolliere also bitte die syncserver.ini und den Parameter identity.sync.tokenserver.uri im Firefox.
Die Frage hat sich erledigt – jetzt läuft der Server…
sehr guter artikel, das funktioniert auch alles soweit wirklich toll.
nur mal eine „erweiternde“ frage… ist es irgendwie möglich, ohne den Einsatz von 3rd parties, dass man den chromium browser (google chrome open source basis) auch dazu bringt, auf und von dem mozilla syncserver zu syncen?
das waere mal das killer feature…
Richtig, wenn Chrome des Syncserver nutzen könnte, wäre das ein Killerfeature. Wer schreibt das Plugin? … In der Tat kenne ich nur externe Lösungen, die Chrome und Firefox synchron halten. Früher gab es XMarks, aktuell fällt mir EverSync ein. Da sind wir wieder bei den Daten auf fremden Servern, also eigentlich keine Lösung. Für Passwörter würde sich noch LastPass anbieten. Für die Bookmarks fällt mir keine Alternative ein.
Hallo,
eine sehr gute Anleitung .,…. Vielen Dank.
Ich verstehe nur nicht warum ein Mozilla-Konto angelegt werden muss (wenn doch alles Lokal auf dem PI abgelegt wird!?)
@ Jan: Wir müssen hier zwei Dinge unterscheiden: Die Syncrionisation der Daten einerseits und die Authentisierung andererseits. Für die Synchronisierung benötigt man den Syncserver. Für die Authentisierung benötigt man den Accounts Authentication Server (fxa-auth-db-server), den Accounts Server (fxa-auth-server) und den Accounts Content Server (fxa-content-server). Die Installation und Konfiguration dieser Komponenten ist ein erheblicher Aufwand. Ich habe auch nach langer Suche niemanden im Netz gefunden, der das auf dem Pi geschafft hat. Ein ganzes Pfund an Abhängigkeiten, Installation über npm mit nodes.js etc. machen das richtig schmerzhaft. Hier ist das beschrieben für Ubuntu: https://www.pixelcontainer.net/firefox-syncserver-1-5-installieren/ Wie gesagt, aufgrund der Abhängigkeiten ist das auf dem Pi nicht wirklich möglich.
Deshalb haben wir hier nur den Syncserver. Die Authentisierung machst Du mit einem Firefox-Account auf dem Firefox-Server. Dort bekommst Du nach erfolgter Authentisierung einen Token zurück, der die Kommunikation mit Deinem Server ermöglicht. Die Daten bleiben also tatsächlich bei Dir, lediglich die Authentisierung machst Du extern. Das ist ähnlich wie hier im Blog bei den Kommentaren, wo Du Dich auch mit einem Twitter-, WordPress-, Facebook- oder Google-Account einloggen kannst.
Hallo, gutes Tutorial. Danke dafür.
Ist es bei Verwendung von der Sync Funktion auch sicher dass sich die gesicherten Daten nur auf dem Pi befinden?
In den Datenschutzbestimmungen von Mozilla steht ja:
Sync: Wenn Sie die Synchronisierungsfunktion verwenden, erhalten wir eine Reihe von Daten zur Synchronisierung Ihrer Tabs, Adressleiste, Passwörter, Lesezeichen, Browser-Einstellungen und anderen Daten von mehreren Geräten.
Da Mozilla ja eine US Firma ist, würden die Daten dann vermutlich 1:1 an die NSA Parasiten übertragen. Das müsste nicht unbedingt sein 😉
Gruß
@Internetbenutzer: Wofür setzen wir den Syncserver auf? Damit die Daten trotzdem auf einem fremden Server landen? Wohl nicht. Der Browser überträgt die Daten ausschließlich zum dort eingetragenen Syncserver.
Alles klar. Es war halt weil eine Anmeldung im Firefox Konto notwendig ist. Aber wenn das nur zur Verifizierung der Klients dient ist das schon ok.
Gruß
Liebe Experten,
ich habe noch ein Problem mit der Synchronisation verschiedener Geräte. Wenn ich auf dem PC Lesezeichen verändere, dann passiert es öfters, dass dies später bei Synchronisation eines Handys oder Tablets wieder rückgängig gemacht wird. Es ist also nicht so, dass sich die neueste Änderung auf allen Geräten durchsetzt.
Woran könnte das liegen?
@Dedl: Das sollte normalerweise nicht vorkommen. Ein möglicher, aber unwahrscheinlicher Fehler sind nicht sychrone Zeiteinstellungen auf den Geräten. Möglicherweise kommt es aber zu dem Fehler, weil auf beiden Geräten Änderungen vorgenommen wurden, aber dazwischen nicht snchronisiert. Du änderst auf dem PC die Lesezeichen, anschließend nimmst Du eine andere Änderunge am Tablet vor. Das Tablet hat sich aber vorher nicht synchronisiert. Dann hat das Tablet den neueste Zeitstempel und überschreibt die älteren Lesezeichen auf dem PC.
Ich habe das nicht verifiziert, möglicherweise liegt dort aber die Ursache. Allerdings sehe ich gerade, dass wohl jeder Eintrag in der Datenbank des Syncservers, also wohl auch jedes Lesezeichen, einen eigenen Zeitstempel hat. Das würde zu meiner Erklärung nicht so recht passen.
Update 🙂
Aufgrund eines Wechsels von einem Multiboot zu einem Raspian Debian8/Jessie musste ich nochmal einen Syncserver einrichten.
Bei der Gelegenheit gleich ein Crash-Update der Anleitung. Man beachte vor allem die Änderungen in Schritt 6 und 9 !
Das Betriebssystem war jedenfalls noch komplett jungfräulich. Kein Apache, kein SQL, kein PHP oder sonstwas.
Zugriff von ausserhalb meines LANs habe ich hierbei nicht benötigt. Auch sonst gings mir eher erst mal um „Hauptsache läuft erst mal“ 🙂
Schritt 1:
Nach Anleitung
Schritt 2:
Nicht ausgeführt
Schritt 3:
Nach Anleitung
Schritt 4:
Nicht ausgeführt
Schritt 5 (Bei mir: Kein DynDNS, sondern der Raspi hat eine feste IP):
Daher public_url = http://192.168.2.10:5000/
sqluri: lass ich auskommentiert (Default)
#sqluri = sqlite:////tmp/syncserver.db
Secret:
Benutze ich nicht. Sollte auch ohne gehen
Bleibt also ebenfalls auskommentiert.
Allow New Users:
Default ist auskommentiert. Lass ich so (Default)
# allow_new_users = false
Schritt 6 (ES WIRD NICHT MEHR MIT „pserve“ GESTARTET SONDERN MIT „gunicorn“):
sudo chown -R pi:pi /opt/syncserver -> wie gehabt
aber „pserve“ ist veraltet. Bei einem Start mit pserve kommt:
pi@raspi8:/opt/syncserver/local/bin $ ./pserve /opt/syncserver/syncserver.ini
Starting server in PID 812.
!!!
!!! WARNING: This command is deprecated.
!!!
!!! You should now use the `–paste` option. Ex.:
!!!
!!! gunicorn –paste development.ini
!!!
!!!
Also daher mach ich den Symlink anstelle von pserve auf gunicorn
pi@raspi8:/opt $ sudo ln -s /opt/syncserver/local/bin/gunicorn /usr/bin/gunicorn
Schritt 7:
Ich starte also mit gunicorn anstelle von pserve
pi@raspi8:/opt $ gunicorn –paste /opt/syncserver/syncserver.ini
Da sollte dann was kommen wie:
[2017-02-28 22:51:30 +0000] [873] [INFO] Starting gunicorn 19.6.0
[2017-02-28 22:51:30 +0000] [873] [INFO] Listening at: http://0.0.0.0:5000 (873)
[2017-02-28 22:51:30 +0000] [873] [INFO] Using worker: sync
[2017-02-28 22:51:30 +0000] [878] [INFO] Booting worker with pid: 878
Schritt 8:
crontab -e
Mein Eintrag (Ich benutze als Screen Name nur „fsync“ weil „firefoxSyncServer“ ist mir zu lange):
@reboot screen -dmS fsync gunicorn –paste /opt/syncserver/syncserver.ini
Auf der Konsole dann gleich noch starten, wie in der Anleitung beschrieben
screen -dmS fsync gunicorn –paste /opt/syncserver/syncserver.ini
Schritt 9 (HIER HAT SICH DER SERVERSTRING GEÄNDERT):
Der String „services.sync.tokenServerURI “ ist nicht mehr gültig !
Daher nach „identity.sync.tokenserver.uri“ suchen und DORT dann die DynDNS Adresse eintragen.
Bzw. die IP Adresse des Syncservers. In meinem Fall:
http://192.168.2.10:5000/token/1.0/sync/1.5
Schritt 10:
Nach Anleitung.
Notizen:
Der Server ist nicht gerade sehr gesprächig. Zum nachschauen ob der Firefox wirklich mit dem Raspberry spricht habe ich die „Holzhammer Methode genommen“
sudo tcpdump port 5000
Wenn tcpdum nicht installiert ist, nachinstallieren mit
sudo apt-get install tcpdump
Aber falls jemand eine elegantere Methode hat….
Was mir gerade auffällt ist: Sync klappt nicht, wenn keine Internetverbindung besteht?
Evtl. wegen fehlendem Token?
Auf der anderen Seite: Ich habe den Raspi mal vom Netzwerk getrennt. Ein Sync fand erst nach anstöpseln wieder statt.
Also gehe ich mal davon aus die Lesezeichen landen wirklich auf dem Pi.
Was jetzt noch interessant wäre ob es nach dieser Anleitung auch auf einem anderen Linux läuft. Ubuntu oder so. Wenn das jemand macht/gemacht hat würde ich mich über Feedback freuen.
Laut Mozilla Webseite kann man wohl auch noch einen eigenen Authentifizierungs-Server bauen.
https://docs.services.mozilla.com/howtos/run-fxa.html
Aber: „This guide is preliminary and vastly incomplete.“
Aber vielleicht wagt sich da mal jemand daran.
Falls sich jemand daran macht und nen Helfer braucht:
Ich bin zu erreichen unter [email protected] 🙂
Hallo Jan!
Danke für die schöne Anleitung.
Eine kleine Ergänzung: statt screen lässt sich auch sehr gut & einfach supervisor (https://supervisor.readthedocs.io) verwenden.
Einfach die Kommandos zum Starten des gunicorn mit Nutzer und Pfaden in die entsprechende conf-Datei eintragen und schon lässt sich der syncserver bequem starten, stoppen und beim Systemstart mit-starten.
Viele Grüße,
Constantin
Hi,
Wenn das Build mit dem „Fehler ffi.h: No such file or directory“ abbricht
sudo apt install libffi-dev
ausführen.
Hallo Jan,
ich bin Deiner Anleitung gefolgt und es hat auch alles gut geklappt. Nun weiß ich aber nicht, ob mein syncserver auch richtig funktioniert. Es kommen bei screen -r keine GET, PUT oder sonstige Befehle. Wenn ich den Raspi vom Netz nehme, dann funktioniert die Synchronisation nicht. Wenn ich mit tcpdump während einer Synchronisation auf den Port 5000 schaue, dann kommt da einiges was ich aber leider nicht interpretieren kann.
Gibt es eine Möglichkeit dem syncserver über die Schulter zu schauen? Kann man vielleicht mit einem sqlight Browser in der Datenbank etwas sehen?
Vielen Dank
Gruß
Jörg
Hallo Jan,
das ist eine gute Anleitung, hat soweit gut bei mir geklappt.
Jetzt habe ich nur noch einen Fehler beim Starten des Syncservers:
[2019-04-26 14:20:53 +0000] [9355] [INFO] Starting gunicorn 19.6.0
[2019-04-26 14:20:53 +0000] [9355] [INFO] Listening at: http://127.0.0.1:8000 (9355)
[2019-04-26 14:20:53 +0000] [9355] [INFO] Using worker: sync
[2019-04-26 14:20:53 +0000] [9359] [INFO] Booting worker with pid: 9359
[2019-04-26 14:20:53 +0000] [9359] [ERROR] Exception in worker process
Traceback (most recent call last):
File „/usr/lib/python2.7/dist-packages/gunicorn/arbiter.py“, line 557, in spawn_worker
worker.init_process()
File „/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py“, line 126, in init_process
self.load_wsgi()
File „/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py“, line 136, in load_wsgi
self.wsgi = self.app.wsgi()
File „/usr/lib/python2.7/dist-packages/gunicorn/app/base.py“, line 67, in wsgi
self.callable = self.load()
File „/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py“, line 65, in load
return self.load_wsgiapp()
File „/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py“, line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File „/usr/lib/python2.7/dist-packages/gunicorn/util.py“, line 384, in import_app
__import__(module)
ImportError: Import by filename is not supported.
[2019-04-26 14:20:53 +0000] [9359] [INFO] Worker exiting (pid: 9359)
[2019-04-26 14:20:53 +0000] [9355] [INFO] Shutting down: Master
[2019-04-26 14:20:53 +0000] [9355] [INFO] Reason: Worker failed to boot.
Gibt es dafür eine Lösung?
Danke und Gruß
Jörg
Hallo ich nochmal,
komisch ist, wenn ich den Dienst starte mit make server, scheint er zu laufen.
Gruß
Jörg
Und nochmals Jörg,
nach etwas experimentieren habe ich heraus gefunden, dass das gunicorn vom syncserver/local/bin Ordner gestartet werden muss und nicht der gunicorn aus /usr/bin, dann geht es auch.
Gruß
Jörg
Hallo Jan,
ich würde gerne wissen, wie ich erkennen kann, dass der syncserver läuft. Mit screen -r sehe ich dass er gestartet ist, es kommen aber keine weiteren Meldungen an. Mit tcpdump sehe ich dann einiges, kann es aber nicht interpretieren. GET, POST und PUT Meldungen sehe ich leider keine. Wenn ich den Raspi vom Netz nehme, funktioniert die Synchronisation wohl gar nicht, somit gehe ich davon aus, dass mein syncserver funktioniert. Kann man eventuell auch in der syncserver.db etwas erkennen?
An deiner Anleitung liegt es sicher nicht, da bin ich gut durchgekommen.
Danke und Gruß
Jörg
Tja und das wars wohl. Seit ich Firefox 80 habe kommt dauern „Mit Firefox Konto wieder verbinden“ und wenn man das macht, kommt es wieder. Weiter gehts nicht mehr. In der Folge kann mauch nicht mehr syncen Danke auch, Mozilla ;(((
Hier mit FF 80 (Ubuntu) kein Problem. Auch FF für Android in der aktuellen Version kann sich synchronisieren. Ich fürchte, das Problem liegt auf Deiner Seite. Wenn Du bei „Mit Firefox Konto wieder verbinden“ hängst, ist es ja auch die Authentisierung, die Du gegenüber Firefox machst. Das hat also mit dem Syncserver nichts zu tun.
Ich fürchte doch. Weil wenn ich einen FF 79 installiere geht wieder alles. Und ein anderer User hat ebenfalls von Problemen berichtet. Meinte aber, das er sich per Git ein Server 1.8 (War ja 1.5) runterzog und dann ging wieder alles. Aber dessen Lösung passt nicht zu der Anleitung hier.
Siehe: https://support.mozilla.org/de/questions/1301869
Hier läuft inzwischen FF 81 ohne Probleme (Win 10 und Ubuntu 20.04).
Der Verweis auf Syncserver 1.8 ist interessant, den werde ich mir merken und irgendwann mal ausprobieren.
Ich bin da nicht der Einzige. Hier berichtet ein User das er mit 80 und 80.0.1 mit dem *eigenen* Syncserver nicht mehr syncen kann. Der schreibt was von Server 1.8 als Lösung:
https://support.mozilla.org/de/questions/1301869
Allerdings via git. Ich bräucht ne kleine Anleitung für die RasPi Version von hier.
Der Witz ist, als ich auf 79 zurück bin, ging wieder alles!
Allerdings will Firefox dann ein komplett neues Profil anlegen 🙁 Das kann man aber mit einem -allow-downgrade unter Windows in der Verknüpfung unter „Ziel“ umschiffen.
Also wenn mit 79 alles geht, mit 80 aber nicht, dann aber wieder mit 79, klingt das eben nicht nach Problem auf meiner Seite.
Und ich rede nicht von mobilen Geräten, sondern Desktop Versionen und – nur um Missverständissen vorzubeugen – einem *eigenen* Syncserver.
Wenn ich 80 oder 80.0.1 installiere, melde ich mich wie gehabt bei mozilla an, weil erst dann kann ich syncen, vorher gibt es den Button nicht – es kommt dann auch „erfolgreich angemeldet“ aber wenn ich dann syncen will kommt muss ich mich wieder anmelden. Und so gehts dann in Schleife endlos weiter.
Siehe Bild hier:
https://user-media-prod-cdn.itsre-sumo.mozilla.net/uploads/images/thumbnails/uploads/images/2020-08-29-09-36-12-a672c1.png