• Blog
  • Raspberry Pi
  • Über mich
  • Projekte
  • devowl.io

Raspberry Pi: Firefox Sync Server installieren

23. Juli 2014
Raspberry Pi
91 Kommentare

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.

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

serving on 0.0.0.0:5000 view at http://127.0.0.1:5000
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

@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

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
Quellen: Mozilla Services Doc, MozillaWiki User Services/Sync/SetupSyncNext

91 Kommentare. Hinterlasse eine Antwort

  • freeek3
    Juli 23, 2014 8:41 pm

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

    Antworten
  • Silvio
    Juli 23, 2014 9:12 pm

    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
    • Jan Karres
      Juli 23, 2014 10:16 pm

      Da hat sich mein Englisch mit dem Deutschen getroffen. Firefox 29 und neuer natürlich – und nicht älter.

      Antworten
  • Thorsten
    Juli 24, 2014 9:33 am

    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
  • Markus
    Juli 25, 2014 5:30 pm

    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
      Juli 26, 2014 12:35 pm

      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
        Januar 17, 2016 11:12 pm

        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
        Januar 18, 2016 12:20 am

        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
        • Firlefonz
          Januar 18, 2016 12:22 am

          Sorry. Der lange Beitrag sollte eigentlich unten hin. Ich brauch Schlaf….

          Antworten
  • Tom
    Juli 25, 2014 8:39 pm

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

    Antworten
    • Joe
      Juli 26, 2014 11:38 am

      Du musst nach Step 9 Firefox neustarten! Dann hat es bei mir funktioniert!

      Antworten
      • Jan Karres
        Juli 26, 2014 12:38 pm

        Probierte ich ebenfalls beim Schreiben aus. Einen Neustart hats bei mir nicht gebraucht.

        Antworten
    • Jan Karres
      Juli 26, 2014 12:37 pm

      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.

      Antworten
      • Tom
        Juli 26, 2014 3:02 pm

        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?

        Antworten
        • Jan Karres
          Juli 30, 2014 12:29 pm

          Wenn du ja deiner Ausdrucksweise zu entnehmen ja so firm bist weise doch den Unsinn nach. Eine zentrale Authentifizierung ist nichts so unübliches.

          Antworten
  • Joe
    Juli 26, 2014 11:41 am

    „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
      Juli 26, 2014 12:38 pm

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

      Antworten
  • Pathfinder
    Juli 27, 2014 2:25 pm

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

    Antworten
  • Sven112
    August 4, 2014 6:24 pm

    Klappt perfekt!! DANKE!!! 🙂

    Antworten
  • Eddy
    August 7, 2014 8:28 pm

    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
      August 8, 2014 3:20 pm

      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
  • Eike
    Oktober 12, 2014 1:51 am

    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
    • Jan Karres
      Oktober 12, 2014 4:12 pm

      Das scheint ein Bug im configparser 3.5.0b1 zu sein. Sollte beim nächsten Release in ein paar Tagen gefixt sein.

      Antworten
      • Eike
        Oktober 14, 2014 11:38 am

        Vielen Dank!

        Dann werde ich mal auf updates warten und danach nochmal probieren!

        Antworten
  • Harald
    Oktober 13, 2014 10:53 pm

    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
  • Marty
    November 1, 2014 12:24 am

    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
    • Jan Karres
      November 1, 2014 1:15 am

      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.

      Antworten
    • Marty
      November 1, 2014 1:39 am

      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…!

      Antworten
      • Thomas
        November 7, 2014 11:21 pm

        der Accountserver wird durch den Syncserver NICHT ersetzt. Dort muss also der Mozilla-Server drin sein / bleiben.

        Antworten
  • Katja
    November 17, 2014 10:25 am

    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
    • Jan Karres
      November 23, 2014 6:41 pm

      Die gesuchte Datei solltest du unter /opt/syncserver/syncserver.ini finden. Wie man SSL mittels nginx einrichtet wird in der Dokumentation des Projektes beschrieben.

      Antworten
  • Markus
    März 24, 2015 8:00 am

    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
    • Jan Karres
      März 31, 2015 7:21 pm

      Welches Betriebssystem verwendest du als Basis?

      Antworten
      • Markus
        März 31, 2015 8:14 pm

        Benutze Raspbmc und habe jetzt festgestellt, dass dort die Cronjobs nicht laufen.

        Antworten
  • Daniel
    März 26, 2015 8:05 pm

    Hi Jan,

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

    Antworten
    • Jan Karres
      März 31, 2015 7:28 pm

      Updaten solltest du durch Wiederholung von Step 1 und einem anschließenden Neustart des Firefox Sync Servers erreichen.

      Antworten
  • Fraunhofer
    April 2, 2015 9:42 am

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

    Antworten
    • Thomas
      April 2, 2015 8:19 pm

      ich dachte da gäbe es kein altes Syncprotokoll mehr. Aber im Changelog steht das jetzt doch nicht drin… vielleicht verschieben die das noch…

      Antworten
    • Jan Karres
      April 6, 2015 2:25 pm

      Mit Firefox 37 funktioniert es nach wie vor in der Weise, in der ich es in Step 9 beschrieb.

      Antworten
  • Jochen
    Mai 3, 2015 9:40 pm

    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
    • Jan Karres
      Mai 7, 2015 8:59 pm

      Evl. hilft dir dieses Issue aus der Entwicklung des Firefox Sync Servers weiter.

      Antworten
  • Jens
    Mai 12, 2015 9:55 pm

    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
      Januar 16, 2016 10:52 pm

      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
  • Felix_K
    Juni 4, 2015 3:04 pm

    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
      Juni 16, 2015 1:30 pm

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

      Antworten
      • Mike
        Juni 26, 2015 2:04 pm

        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
        • Jan Karres
          August 3, 2015 10:10 pm

          Den Artikel werde ich, sobald ich dafür Zeit finde, überarbeiten.

          Antworten
  • bernd
    August 24, 2015 2:41 am

    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
      August 25, 2015 6:58 pm

      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
        Januar 16, 2016 7:19 pm

        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
  • [email protected]
    September 3, 2015 4:51 pm

    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
  • Rapha
    September 22, 2015 10:06 am

    Yay, Danke Jan!
    Funktioniert scheinbar! 🙂

    Antworten
  • karabela
    November 24, 2015 10:36 am

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

    Antworten
  • Firlefonz
    Januar 16, 2016 7:09 pm

    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
  • tcrux
    Januar 17, 2016 12:49 pm

    Als Ergänzung https://docs.services.mozilla.com/howtos/run-sync-1.5.html ab Firefox 42.

    Antworten
  • Homer-S
    Januar 27, 2016 9:20 pm

    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
  • Franz
    Januar 30, 2016 11:48 pm

    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
      November 17, 2017 5:09 pm

      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
  • Daniel Dingeldein
    Februar 14, 2016 5:44 pm

    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
      Februar 14, 2016 11:33 pm

      @ 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
  • Dedl
    April 18, 2016 3:24 pm

    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
      April 18, 2016 3:57 pm

      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
        April 18, 2016 4:26 pm

        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
          April 18, 2016 4:33 pm

          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
            April 18, 2016 6:08 pm

            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…

  • Franz
    April 18, 2016 7:24 pm

    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
      April 19, 2016 8:42 am

      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
        April 19, 2016 8:21 pm

        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
        April 20, 2016 12:17 pm

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

        Antworten
  • Oliver Leitner
    Mai 14, 2016 3:41 pm

    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
      Mai 16, 2016 3:40 pm

      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
  • Jan
    Juli 6, 2016 3:33 pm

    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
      Juli 6, 2016 5:25 pm

      @ 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
  • Internetbenutzer
    Juli 9, 2016 2:07 pm

    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
      Juli 9, 2016 5:44 pm

      @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
        Juli 12, 2016 3:40 pm

        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
  • Dedl
    Juli 12, 2016 11:54 am

    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
      Juli 12, 2016 3:59 pm

      @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
  • firlefonz
    März 1, 2017 12:46 am

    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] 🙂

    Antworten
  • Constantin
    November 17, 2018 2:03 am

    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

    Antworten
  • kowo
    Februar 4, 2019 11:58 am

    Hi,

    Wenn das Build mit dem „Fehler ffi.h: No such file or directory“ abbricht

    sudo apt install libffi-dev

    ausführen.

    Antworten
    • Jörg
      April 27, 2019 9:45 pm

      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

      Antworten
  • Jörg
    April 26, 2019 2:47 pm

    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

    Antworten
  • Jörg
    April 26, 2019 2:54 pm

    Hallo ich nochmal,

    komisch ist, wenn ich den Dienst starte mit make server, scheint er zu laufen.

    Gruß
    Jörg

    Antworten
    • Jörg
      April 26, 2019 3:26 pm

      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

      Antworten
  • Jörg
    April 27, 2019 8:25 pm

    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

    Antworten
  • firlefonz
    August 29, 2020 6:26 pm

    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 ;(((

    Antworten
    • Franz
      August 29, 2020 11:47 pm

      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.

      Antworten
      • firlefonz
        September 25, 2020 11:25 am

        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

        Antworten
        • Franz
          September 25, 2020 5:40 pm

          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.

          Antworten
  • firlefonz
    September 10, 2020 12:57 pm

    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

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Jan Karres
Jan Karres
Wirtschaftsinformatiker
Facebook
Twitter
YouTube
LinkedIn
Xing
GitHub

Themen

  • Blogging
  • Debian (Linux)
  • Eine Geschichte aus dem Leben des Jan
  • Fotos
  • Gaming
  • Gedanken
  • Linksammlungen
  • Privates
  • Projekte
  • Raspberry Pi
    • Einplatinencomputer (außer Raspberry Pi)
  • Schule und Studium
  • Tipps und Tricks
  • Videos
  • Vorgestellt
  • WordPress

Projekte

Dieser Blog ist meine kleine Base im Internet, in der ich über Themen schreibe, die mich persönlich beschäftigen. Abseits davon habe ich weitere Projekte im Netz, die teils aus Spaß entstanden, jedoch zum Teil auch meinen Kühlschrank füllen.

Alle Projekte

JanKarres.de © 2007-2022

Neueste Beiträge

  • Raspberry Pi: WLAN Access Point mit NordVPN (VPN Router) einrichten Dezember 5, 2020
  • Real Cookie Banner: Wie das Opt-in Cookie Banner für WordPress entstand November 18, 2020
  • Blog Setup erneut: Aufräumen einer kleinen Historie Oktober 13, 2020
  • devowl.io: Auf geht’s in das WordPress Business! März 10, 2020
  • Kuschelpartys: Nähe und Geborgenheit einfach erleben September 30, 2018

devowl.io

Meine Brötchen verdiene ich im Internet. Dazu habe ich gemeinsam mit meinem Kollegen Matze die devowl.io GmbH gegründet. Gemeinsam entwickeln und vertreiben wir in unser Plugins und Entwickler-Tools im WordPress Umfeld.

Mehr erfahren
  • Datenschutzerklärung
  • Impressum