Raspberry Pi: Firefox Sync Server installieren

23 Jul
23. Juli 2014

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

Step 1

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

Step 2

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.

Step 3

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

Step 4

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

Step 5

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.

ersetzen durch (sync.example.com ersetzen durch eigene DynDNS Domain)

Die folgende Passage definiert wo die Datenbank, in der die Daten gespeichert werden, liegen soll.

ersetzen durch

Daraufhin setzen wir einen Secret, um die Sicherheit der Authentifizierung später zu erhöhen.

ersetzen durch (anstatt ZUFALLSZAHL die im vorherigen Schritt generierte Zufallszahl einsetzen)

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.

ersetzen durch

Step 6

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

Step 7

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.

Step 8

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

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

Step 9

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.

Step 10

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.

5000
Dir hat der Artikel gefallen?
Teile ihn mit deinen Freunden!
79 Antworten
  1. freeek3 says:

    Sobald mein neuer Rasperry Pi da ist wird er dafür verwendet

    Antworten
  2. Silvio says:

    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

    Antworten
  3. Thorsten says:

    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/

    Antworten
  4. Markus says:

    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.

    Antworten
    • Jan Karres says:

      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

      Antworten
      • Firlefonz says:

        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.

        Antworten
      • Firlefonz says:

        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 🙂

        Antworten
  5. Tom says:

    Die Anleitung funktioniert nicht. Ich werde grundsätzlich beim mozillaserver selber angemeldet bei der Accounterstelleung. Mehrfach ausprobiert.

    Antworten
  6. Joe says:

    „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?

    Antworten
    • Jan Karres says:

      Damit meine ich 1-2 Minuten. Durch den Button „Jetzt syncronisieren“ konnte ich persönlich keine sofortige Synchronisierung erwirken.

      Antworten
  7. Pathfinder says:

    Vielen Dank für die tolle Anleitung. Es hat alles prima geklappt.

    Antworten
  8. Sven112 says:

    Klappt perfekt!! DANKE!!! 🙂

    Antworten
  9. Eddy says:

    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.

    Antworten
    • Jan Karres says:

      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.

      Antworten
  10. Eike says:

    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!

    Antworten
  11. Harald says:

    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

    Antworten
  12. Marty says:

    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?

    Antworten
  13. Katja says:

    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ß

    Antworten
  14. Markus says:

    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

    Antworten
  15. Daniel says:

    Hi Jan,

    danke für die Anleitung. Hast du schonmal das git update gemacht? Reicht es wenn ich meine config Änderungen stashe?

    Antworten
  16. Fraunhofer says:

    Mit dem Firefox 37 kommt man nicht mehr dazu einen eigenen Server einzutragen ?

    Antworten
  17. Jochen says:

    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)

    Antworten
  18. Jens says:

    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

    Antworten
    • Firlefonz says:

      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.

      Antworten
  19. Felix_K says:

    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)

    Antworten
    • Jan Karres says:

      Kein Anlass zur Sorge. Sollte alles wie bislang funktionieren, gibts nur eine neue empfohlenere Methode.

      Antworten
      • Mike says:

        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!

        Antworten
  20. bernd says:

    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.

    Antworten
    • Jan Karres says:

      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.

      Antworten
      • Firlefonz says:

        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 🙂

        Antworten
  21. elvis89@gmail.com says:

    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

    Antworten
  22. Rapha says:

    Yay, Danke Jan!
    Funktioniert scheinbar! 🙂

    Antworten
  23. karabela says:

    Wollte gerade wegen der gleichen Thematik wie elvis89 einen Kommentar hinterlassen. Ein Update des ansonsten sehr guten Beitrags wäre wirklich toll!

    Antworten
  24. Firlefonz says:

    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.

    Antworten
  25. Homer-S says:

    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.

    Antworten
  26. Franz says:

    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

    Antworten
    • FischFuss says:

      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?

      Antworten
  27. Daniel Dingeldein says:

    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

    Antworten
    • Franz says:

      @ 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

      Antworten
  28. Dedl says:

    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…

    Antworten
    • Franz says:

      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?

      Antworten
      • Dedl says:

        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?

        Antworten
        • Franz says:

          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.

          Antworten
          • Dedl says:

            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…

  29. Franz says:

    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.

    Antworten
    • Dedl says:

      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…

      Antworten
      • Franz says:

        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.

        Antworten
      • Dedl says:

        Die Frage hat sich erledigt – jetzt läuft der Server…

        Antworten
  30. Oliver Leitner says:

    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…

    Antworten
    • Franz says:

      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.

      Antworten
  31. Jan says:

    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!?)

    Antworten
    • Franz says:

      @ 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.

      Antworten
  32. Internetbenutzer says:

    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ß

    Antworten
    • Franz says:

      @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.

      Antworten
      • Internetbenutzer says:

        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ß

        Antworten
  33. Dedl says:

    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?

    Antworten
    • Franz says:

      @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.

      Antworten
  34. firlefonz says:

    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 fsync@firlefonz.de 🙂

    Antworten

Antworten

Kommentar verfassen

JanKarres.de © 2007-2018