Ein Browser ist auf fast allen Plattformen wohl das am meisten genutzte Programm. Nach den Browserkriegen sind leider viele Browser auf der Strecke geblieben, so dass es heutzutage nur noch zwei ernstzunehmende Alternativen gibt: Firefox und Chrome.
Wer Wert auf Datenschutz und Privatsphäre legt, wird allerdings um Chrome einen großen Bogen machen und stattdessen lieber Firefox nutzen.
Firefox bietet schon sehr lange ein Feature mit dem alle Browser-Einstellungen in der Cloud synchronisiert werden: Firefox Sync. Dazu wird ein Firefox-Konto benötigt, mit dem man sich im Browser einloggt. Anschließend können alle Firefox-Einstellungen (Lesezeichen, Chronik, verwendete Addons, etc.) mit der Mozilla-Cloud synchronisiert werden und sind so auch auf mehreren Endgeräten immer auf dem aktuellsten Stand.
Damit vertraut man der Mozilla Foundation seine Daten an. Die Speicherung erfolgt dabei meistens auf US-Servern. Wer dies nicht möchte, kann zunächst einmal keine Synchronisierung bei Firefox verwenden, so dass alle Einstellungen und Addons mit jeder Browser-Installation immer manuell konfiguriert werden müssen.
Allerdings kann man auch auf dem eigenen Server einen Firefox Sync Server installieren und über diesen synchronisieren. In diesem Fall profitiert man von den Sync-Funktionen des Browsers und stellt sicher, dass alle Daten nur auf dem privaten Server gespeichert werden.
Dieser Artikel zeigt nun die Installation und Konfiguration eines eigenen Firefox Sync Servers.
Wichtiger Hinweis: Die hier gezeigte Version des Firefox Sync Servers basiert noch auf Python 2. Python 2 ist allerdings seit Anfang 2020 „End of Life“, d.h. diese Version wird nicht mehr unterstützt. Damit findet auch keine Weiterentwicklung oder die Behebung von Bugs/Sicherheitslücken mehr statt. Aus diesem Grund ist meiner Meinung nach davon abzuraten, diese Version des Firefox Sync Servers aufzusetzen.
Eine neue Version des Sync Servers (auf der Basis von Rust) ist bereits in der Entwicklung, allerdings ist hier nicht bekannt, wann diese neue Version als stabil anzusehen ist.
Hinweis: Dieser Artikel ist eher etwas für Fortgeschrittene. Den Firefox Sync Server kann man nicht einfach installieren, sondern dieser muss erst aus dem entsprechenden Repository auf GitHub gecloned und anschließend selbst gebaut werden. Auch die Konfiguration ist alles andere als trivial. Daher sollte man schon etwas Erfahrung mit Linux mitbringen.
Übrigens: Wem es hauptsächlich nur um die Synchronisierung von Lesezeichen im Browser geht, der muss nicht unbedingt einen eigenen Firefox Sync Server betreiben. In diesem Fall können bei einer vorhandenen Nextcloud-Instanz die Lesezeichen auch einfach über die private Cloud synchronisiert werden. Wie das genau funktioniert, wurde bereits in einem anderen Artikel erklärt: Nextcloud: Lesezeichen synchronisieren mit Chrome/Firefox
Update-Historie (letztes Update 22.03.2021)- 22.03.2021:
- Hinweise bzgl. „End of Life“ Python 2 hinzugefügt.
- 08.05.2019:
- Hinwies hinzugefügt, dass die Angabe eines eigenen Sync Servers für Firefox auf iOS nicht funktioniert (siehe hier).
- 05.05.2019:
- Ergänzende Informationen hinzugefügt, falls andere Datenbank-Systeme für den Sync Server zum Einsatz kommen sollen (PostgreSQL oder MySQL/MariaDB).
Inhalt
Voraussetzungen
Alle Schritte wurden mit Ubuntu Server 18.04 LTS durchgeführt, sollten aber auch mit anderen Distributionen funktionieren.
Voraussetzung ist auf jeden Fall ein bereits fertig konfigurierter Webserver (in diesem Fall nginx). Dieser muss bereits so eingerichtet sein, dass Verbindungen mittels HTTPS möglich sind.
Die gezeigte Konfiguration basiert darauf, dass der Firefox Sync Server auf einer eigenen Subdomain (firefox-sync.meinedomain.de) betrieben wird. Es ist allerdings auch möglich, den Server in einem Unterverzeichnis des Webservers zu betreiben (z.B. meinedomain.de/firefox-sync). Hier unterscheidet sich lediglich die Webserver-Konfiguration (vHost). Dies wird im Abschnitt über die Webserver-Konfiguration behandelt.
Da eine detaillierte Beschreibung der Webserver-Konfiguration den Rahmen des Artikels sprengen würde, verweise ich an dieser Stelle auf weitere Artikel, die für das Thema relevant sind:
- Let’s Encrypt Zertifikate mit acme.sh und nginx
- RSA und ECDSA-Zertifikate mit nginx (Hybrid-Lösung)
- Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban
- Zweite Web-Anwendung neben ownCloud/Nextcloud einrichten (am Beispiel WordPress)
Installation
Wie bereits erwähnt, kann der Firefox Sync Server nicht einfach über die Paketverwaltung installiert werden, sondern es sind einige manuelle Handgriffe notwendig.
Wir beginnen wie üblich damit, das System auf den neusten Stand zu bringen:
apt-get update && apt-get upgrade -V
Anschließend werden die Pakete installiert, die wir zum Bauen des Sync Servers benötigen:
apt-get install make python-dev git-core python-virtualenv g++
Nun wird das entsprechende GitHub-Repository gecloned und der Sync Server gebaut:
cd /opt git clone https://github.com/mozilla-services/syncserver cd syncserver make build
Die Dateien für den Sync Server liegen dann unter /opt/syncserver.
Konfiguration
Nun geht es an die Konfiguration des Sync Servers.
Als erstes benötigen wir ein „Secret“, welches dann später in der Konfiguration angegeben wird. Auch wenn es so wirkt: Dieser Schritt ist nicht optional, ohne Angabe des Secrets wird der Sync Server später nicht funktionieren.
Um das Secret zu erzeugen, nutzen wir einfach folgenden Befehl (anschließend in die Zwischenablage kopieren):
head -c 20 /dev/urandom | sha1sum
Danach kann es auch schon an die Bearbeitung der Konfiguration gehen:
cd /opt/syncserver nano syncserver.ini
Hier zunächst die komplette Datei zur Übersicht:
[server:main] use = egg:gunicorn host = 127.0.0.1 port = 5000 workers = 1 timeout = 30 [app:main] use = egg:syncserver [syncserver] # This must be edited to point to the public URL of your server, # i.e. the URL as seen by Firefox. public_url = https://firefox-sync.meinedomain.de # By default, syncserver will accept identity assertions issued by # any BrowserID issuer. The line below restricts it to accept assertions # from just the production Firefox Account servers. If you are hosting # your own account server, put its public URL here instead. identity_provider = https://accounts.firefox.com/ # This defines the database in which to store all server data. sqluri = sqlite:////opt/syncserver/syncserver.db # This is a secret key used for signing authentication tokens. # It should be long and randomly-generated. # The following command will give a suitable value on *nix systems: # # head -c 20 /dev/urandom | sha1sum # # If not specified then the server will generate a temporary one at startup. secret = b6ff9a32108ca32272bcf8322b5274e93031fb90 # Set this to "false" to disable new-user signups on the server. # Only requests by existing accounts will be honoured. # allow_new_users = true # Set this to "true" to work around a mismatch between public_url and # the application URL as seen by python, which can happen in certain reverse- # proxy hosting setups. It will overwrite the WSGI environ dict with the # details from public_url. This could have security implications if e.g. # you tell the app that it's on HTTPS but it's really on HTTP, so it should # only be used as a last resort and after careful checking of server config. force_wsgi_environ = true
Erläuterungen zu den einzelnen Einstellungen:
-
host = 127.0.0.1
Sorgt dafür, dass der Sync Server nur lokal aufgerufen werden kann – die Kommunikation „nach außen“ übernimmt später ja nginx.
-
public_url = https://firefox-sync.meinedomain.de
Dies ist die öffentliche URL des Sync Servers. Die konkrete URL hängt dabei von der Webserver-Konfiguration ab (siehe nächster Abschnitt).
-
identity_provider = https://accounts.firefox.com/
Zur Authentifizierung wird ein vorhandener Firefox-Account eingesetzt.
-
sqluri = sqlite:////opt/syncserver/syncserver.db
Angabe der Datenbank, in der die synchonisierten Objekte gespeichert werden. Hier verwenden wir einfach eine SQLite Datenbank, es wäre aber auch möglich, eine PostgreSQL oder MySQL/MariaDB Datenbank zu verwenden (Erläuterungen siehe unten).
-
secret = b6ff9a32108ca32272bcf8322b5274e93031fb90
Hier wird einfach der Wert eingetragen, den wir gerade über die Kommandozeile generiert haben.
-
allow_new_users =true
Dies sorgt dafür, dass automatisch neue Benutzerkonten angelegt werden, wenn sich diese zum erstem Mal mit diesem Sync Server verbinden. Wenn dieser Wert auf false gesetzt wird, wird die Synchronisierung für neue Accounts nicht mehr funktionieren (dazu später mehr).
-
force_wsgi_environ = true
Diese Einstellung muss in der gezeigten Konfiguration auf true gesetzt werden und sogt dafür, dass der Sync Server auch dann noch funktioniert, wenn die Public URL (die über nginx konfiguriert wird) von der URL abweicht, die der Sync Server intern „sieht“. Durch die Verwendung von nginx als Proxy für den Sync Server werden diese beiden URLs in diesem Kontext nie gleich sein, daher muss der Wert an dieser Stelle angepasst werden.
Ergänzende Informationen bei anderen Datenbanken
Für kleinere Sync Server Instanzen reicht die SQLite-Datenbank vollkommen aus. Ebenso ist diese am einfachsten zu konfigurieren, da hier keine zusätzlichen Schritte erforderlich sind.
Allerdings können auch andere Datenbank-Systeme zum Speichern der Daten eingesetzt werden, z.B. PostgreSQL oder MySQL/MariaDB. Empfehlenswert dürfte dies nur bei Servern sein, die sehr viele Nutzer bedienen müssen, oder wenn das entsprechende Datenbank-System bereits auf dem Server installiert ist. Aus diesem Grund gehe ich bei den folgenden Schritten davon aus, dass PostgreSQL bzw. MySQL/MariaDB bereits auf dem System installiert und konfiguriert ist.
PostgreSQL
Um eine Verbindung zu PostgreSQL herstellen zu können, sind ein paar zusätzliche Programme zu installieren:
apt-get install postgresql-server-dev-10 python-pip cd /opt/syncserver ./local/bin/pip install psycopg2
Nun muss noch eine Datenbank speziell für den Sync Server erstellt werden. Am besten geschieht das über die PostgreSQL Kommandozeile:
sudo -u postgres psql
Die Datenbank mit dem entsprechenden User wird dann folgendermaßen angelegt:
CREATE USER firefox_sync_db_user WITH PASSWORD 'MeInPaSsw0rT'; CREATE DATABASE firefox_sync_db WITH OWNER firefox_sync_db_user TEMPLATE template0 ENCODING 'UTF8'
Beendet wird die PostgreSQL Kommandozeile durch die Eingabe von /q.
In der syncserver.ini wird die Verbindung zur Datenbank dann mittels dieser Einstellung konfiguriert:
sqluri = postgresql://firefox_sync_db_user:MeInPaSsw0rT@localhost/firefox_sync_db
MySQL/MariaDB
Ähnliche Schritte sind durchzuführen, wenn MySQL/MariaDB zum Einsatz kommt:
apt-get install python-pip cd /opt/syncserver ./local/bin/pip install PyMySQL
Anschließend öffnet man die MySQL-Kommandozeile:
mysql -u root -p
Nun folgt die Anlage der Datenbank:
CREATE USER firefox_sync_db_user@localhost IDENTIFIED BY 'MeInPaSsw0rT'; CREATE DATABASE firefox_sync_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; GRANT ALL PRIVILEGES on firefox_sync_db.* to firefox_sync_db_user@localhost; FLUSH privileges; exit;
In der syncserver.ini wird die Datanbnak dann folgendermaßen angesprochen:
sqluri = pymysql://firefox_sync_db_user:MeInPaSsw0rT@localhost/firefox_sync_db
Webserver konfigurieren
Bevor das System nun einsatzfähig ist, muss zunächst noch der Webserver entsprechend konfiguriert werden. Die genauen Details zur Konfiguration des Webservers würden leider den Rahmen des Artikels sprengen, daher erwähne ich hier nur zwei mögliche Webserver-Konfigurationen.
Wichtig ist hier nur, dass der Webserver bereits so konfiguriert ist, dass dieser mittels HTTPS angesprochen werden kann und die Verbindung damit stets verschlüsselt ist.
Nach der Anpassung des Webserver muss dieser in jedem Fall noch neu gestartet werden:
service nginx restart
Wichtig: Je nach verwendeter Konfiguration unterscheidet sich die URL, unter der der Sync Server erreichbar ist. Dies muss im weiteren Verlauf des Tutorials beachtet werden, da entsprechende URLs angepasst werden müssen.
Sync Server mit eigener Subdomain
Wenn der Sync Server mit einer eigenen Subdomain betrieben werden soll (https://firefox-sync.meinedomain.de), dann benötigt man einen separaten vHost, der für diese Subdomain verantwortlich ist.
server { listen 80 default_server; listen [::]:80 default_server; server_name firefox-sync.meinedomain.de; root /var/www; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name firefox-sync.meinedomain.de; # Include SSL configuration (and certificates) include /etc/nginx/snippets/ssl.conf; # Include headers include /etc/nginx/snippets/headers.conf; # # Configuration for Firefox Sync Server # location / { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_read_timeout 120; proxy_connect_timeout 10; proxy_pass http://127.0.0.1:5000/; } }
Sync Server in einem Unterverzeichnis des Webservers
Man kann den Sync Server allerdings auch in einem Unterverzeichnis einer bereits bestehenden (Sub-)Domain installieren. Die URL lautet dann beispielsweise https://meindomain.de/firefox-sync
Hierzu muss ein bereits bestehender vHost, der für die Domain meinedomain.de verantworlich ist, um folgenden location-Block erweitert werden. Die hinzuzufügenden Zeilen sind hier markiert:
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name meinedomain.de; # Include SSL configuration include /etc/nginx/snippets/certs_pub.conf; include /etc/nginx/snippets/ssl.conf; # Include headers include /etc/nginx/snippets/headers.conf; location ^~ /firefox-sync/ { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_read_timeout 120; proxy_connect_timeout 10; proxy_pass http://127.0.0.1:5000/; } }
Sync Server starten
Manueller Start
Nun kann der Sync Server über folgenden Befehl gestartet werden:
cd /opt/syncserver make serve
Hier sollten keine Fehler angezeigt werden. Die Anzeige ist allerdings „live“, d.h. es scheint erst einmal so, als ob nichts weiter passieren würde:
./local/bin/gunicorn –paste ./syncserver.ini
[2019-04-27 17:23:21 +0000] [2292] [INFO] Starting gunicorn 19.6.0
[2019-04-27 17:23:21 +0000] [2292] [INFO] Listening at: http://127.0.0.1:5000 (2292)
[2019-04-27 17:23:21 +0000] [2292] [INFO] Using worker: sync
[2019-04-27 17:23:21 +0000] [2296] [INFO] Booting worker with pid: 2296
Daher stoppen wir nach diesem kurzen Test den Prozess mit STRG+C.
Nun ist es natürlich nicht optimal, wenn man den Sync Server immer manuell starten muss und dieser dann immer die Konsole blockiert. Hier könnte man sich zwar mit einem Screen weiterhelfen, aber das ist auch nicht die beste Lösung. Der Sync Server sollte im Idealfall direkt bei Systemstart automatisch mitgestartet werden.
Autostart
Um dies zu erreichen, legen wir zunächst einen eigenen User für den Sync Server an:
useradd firefox-sync -s /bin/false --no-create-home
Dieser User muss der Owner des Programmverzeichnisses sein:
chown -R firefox-sync:firefox-sync /opt/syncserver
Nun kann auch schon eine systemd Unit angelegt werden:
nano /etc/systemd/system/firefox-sync.service
Mit folgenden Zeilen wird die Unit definiert:
[Unit] Description=Firefox Sync Server After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple User=firefox-sync Group=firefox-sync Umask=007 Restart=on-abort ExecStart=/opt/syncserver/local/bin/gunicorn --paste /opt/syncserver/syncserver.ini [Install] WantedBy=multi-user.target
Nun sollte der Service über folgenden Befehl gestartet werden können (anschließend mit service firefox-sync status testen):
service firefox-sync start
Damit der Service nun immer automatisch bei Systemstart hochgefahren wird, ist noch ein Befehl notwendig:
systemctl enable firefox-sync
Am besten auch hier nochmal das System neu starten und dann mit service firefox-sync status prüfen, ob der Autostart auch wirklich klappt.
Browser-Konfiguration
Bevor nun Firefox den neuen Sync Server nutzen kann, sollte noch ein kurzer Test erfolgen, ob der Sync Server wie gewünscht zu erreichen ist. Dazu einfach die URL des eigenen Sync Servers in die Adress-Leiste des Browsers eingeben (https://firefox-sync.meinedomain.de). Der Browser sollte dies mit einer simplen Meldung „it works!“ quittieren. Wenn es noch nicht wie erwartet funktioniert, wird eine Meldung ausgegeben, die einen Hinweis auf das Problem liefern sollte. In diesem Fall muss zunächst dieses Problem beseitigt werden, da ansonsten kein Browser mit dem Sync Server synchronisieren kann.
Wenn der Sync Server einwandfrei läuft, kann man nun Firefox so konfigurieren, dass dieser auch den eigenen Sync Server nutzt.
Wenn der Browser schon über ein Firefox-Konto synchronisiert wurde, muss die Verknüpfung mit diesem Konto zunächst einmal getrennt werden, da sich ansonsten kein neuer Sync Server konfigurieren lässt. Dazu einfach in die Browser-Einstellungen gehen, unter Firefox-Konto findet man die Schaltfläche zum Trennen des Kontos.
Nun fragt Firefox, ob er die bereits synchronisierten Daten auch lokal entfernen soll. Hier sollte man keine Optionen anhaken, sondern einfach nur auf Nur trennen klicken.

Für die Angabe des eigenen Sync Servers muss man nun in die erweiterte Browser-Konfiguration wechseln, indem man in der Adress-Leiste about:config eingibt.
Hier suchen wir nun nach folgendem Wert: identity.sync.tokenserver.uri
Mit einem Doppelklick kann der Wert geändert werden und wir geben hier die URL des eigenen Sync Servers an: https://firefox-sync.meinedomain.de/token/1.0/sync/1.5

Wichtig ist, dass neben der eigentlichen Domain, die man in der syncserver.ini angegeben hat, noch die Erweiterung token/1.0/sync/1.5 notwendig ist.
Nachdem die Einstellung gesetzt ist, muss der Browser kurz beendet und neu gestartet werden. Nun kann man wieder in die Account-Einstellungen in Firefox gehen und die Verbindung zum Firefox-Konto wieder herstellen. Der Account an sich ist dabei der gleiche, aber der verwendete Sync Server ist nun ein anderer.
Nach ein paar Augenblicken sollte die erste Synchronisierung erfolgreich durchgelaufen sein. Allerdings erhält man keine Fehlermeldung, wenn der Sync aus irgendeinem Grund nicht klappen sollte. Daher gibt man am besten nach der ersten Synchronisierung about:sync-log in die Adress-Zeile des Browsers ein. Hier sollten dann keine Einträge zu finden sein, die zeitlich zur ersten Synchronisierung passen.
Falls doch, kann man dem Eintrag öffnen und Firefox gibt technische Details zu diesem Fehler preis. Damit sollte man den Fehler dann weiter eingrenzen können.
Diese Schritte zur Verbindung vom Firefox zum eigenen Sync Server müssen dann auf allen Rechnern wiederholt werden, damit nur noch der eigene Sync Server genutzt wird.
Auf Mobilgeräten (z.B. Firefox auf Android) funktioniert das Vorgehen übrigens analog: Firefox-Konto trennen, about:config bearbeiten und erneut mit dem Firefox-Konto anmelden. Leider funktioniert die Angabe eines eigenen Sync Servers unter Firefox für iOS (noch) nicht (siehe hier).
Die mobile Version von Firefox zeigt hier übrigens in den Einstellungen Details zum verwendeten Sync Server an (bei Firefox für den Desktop ist das leider nicht der Fall).

Abschließende Schritte
Wenn man nun alle Firefox-Konten auf den eigenen Sync Server umgehoben hat, sollten noch ein paar Schritte durchgeführt werden.
Sync Server auf bekannte Accounts beschränken
Der Sync Server wäre nun öffentlich über das Internet erreichbar. Damit niemand sonst den Server nutzen kann, wird das Anlegen neuer User im Sync Server einfach unterbunden:
cd /opt/syncserver nano syncserver.ini
Hier ändern wir einfach den entsprechenden Konfig-Eintrag:
allow_new_users = false
Ab jetzt können sich keine neuen Accounts mehr am Sync Server anmelden. Wenn man hier nachträglich doch noch andere Firefox-Accounts hinzufügen möchte (z.B. für Familienmitglieder), dann muss man diesen Wert natürlich temporär wieder auf true ändern.
Abschließend wird der Sync Server neu gestartet:
service firefox-sync restart
Daten auf den Mozilla-Servern entfernen
Ganz zum Schluss kann man ebenfalls sämtliche Daten von den Mozilla-Servern entfernen. Hier kann ein einfaches Script genutzt werden. Wenn die Zwei-Faktor-Authentifizierung für den Firefox-Account aktiv ist, muss diese zuvor alledings deaktiviert werden, da das Skript ansonsten auf Fehler läuft. Nach dem Ausführen des Skripts kann diese wieder aktiviert werden.
apt-get update && apt-get install python-pip cd /opt/syncserver pip install PyFxA python ./bin/delete_user_data.py meine@email.de
Die E-Mail-Adresse muss natürlich die Adresse des eigenen Mozilla-Accounts sein.
Sync Server updaten
Von Zeit zu Zeit können Updates für den Sync Server erscheinen. In diesem Fall kann man das Update auch lokal „nachziehen“.
Zunächst wird dazu der Service gestoppt:
service firefox-sync stop
Da Update an sich funktioniert dann wieder über git:
cd /opt/syncserver git stash git pull git stash pop make build
Nun werden noch die Rechte entsprechend angepasst:
chown -R firefox-sync:firefox-sync /opt/syncserver
Der Service sollte sich danach problemlos mit service firefox-sync start gestartet werden können. Auch das automatische Starten nach Systemstart sollte weiterhin funktionieren.
Fazit
Zugegeben: Die Einrichtung eines eigenen Firefox Sync Servers ist nicht gerade einfach, da dieser nicht einfach aus der Paketverwaltung der verwendeten Distribution installiert werden kann. Da ist schon einiges an Handarbeit notwendig.
Wenn man die Schritte durchgearbeitet hat, kann man aber sicher sein, dass die Browser-Daten nicht mehr in „irgendeiner Cloud“ synchronisiert werden, sondern ausschließlich auf dem eigenen Server gespeichert werden.
Es wird zur Synchronisierung zwar weiterhin ein Firefox-Konto benötigt, dieses dienst von nun an allerdings nur noch zur Authentifizierung. Die Daten werden nur noch mit dem eigenen Firefox Sync Server abgeglichen.
Weiterführende Artikel
- Let’s Encrypt Zertifikate mit acme.sh und nginx
- RSA und ECDSA-Zertifikate mit nginx (Hybrid-Lösung)
- Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban
- Zweite Web-Anwendung neben ownCloud/Nextcloud einrichten (am Beispiel WordPress)
- Nextcloud: Lesezeichen synchronisieren mit Chrome/Firefox
Hallo Jan, klasse Artikel. Vielen Dank
Gruß Hans
Klasse Anleitung, danke dafür.
Hab hier noch was gefunden, um einem eigenen Account-Server aufzusetzten.
https://moz-services-docs.readthedocs.io/en/latest/howtos/run-fxa.html#howto-run-fxa
Sieht auf den ersten Blick machbar aus, was meinst du?
Cu
Hi,
ist auf den ersten Blick zwar etwas aufwändiger, aber machbar.
Allerdings ist das wichtigste ja, dass die Daten an sich auf dem eigenen Server liegen. Der Firefox-Account wird ja nur noch zur Authentifizierung benötigt. Damit kann ich erst einmal gut leben. ;-)
Gruß,
Jan
Hi Jan, bezüglich die hier beschriebenen Subdomain Lösung, beziehst du dich da auf den Artikel https://decatec.de/home-server/nextcloud-online-office-mit-onlyoffice-mit-eigener-subdomain/ von dir, speziell die Einstellungen beim Hoster?
Vielen Dank
Gruß Hans
Hi Hans,
zunächst brauchst du nur irgendeine (Sub-)Domain, mit der du bei deinem Server „rauskommst“. Wenn du schon andere Webdienste über eine DynDNS-Domain laufen lässt, dann ist der von dir verlinkte Artikel genau der richtige. Ich überlege gerade, ob ich einen separaten Artikel über dieses Thema angehen sollte.
Ansonsten tut es – wie in diesem Artikel erwähnt – auch ein Unterverzeichnis einer Domain.
Gruß,
Jan
Hallo Jan,
Du machst echt super klasse Anleitungen hier. Was ich vor allem mag ist die Ausführlichkeit. Somit hat man einfach ein besseres Verständnis für die ganze Materie. Vielen Dank dafür.
Gruß,
Christian
Hallo Christian,
danke für das Lob!
Gerade bei diesem Thema hier sollte ein bisschen Verständnis für das Thema herrschen, da es doch etwas tricky ist.
Bist du also mit dem Artikel und dem Vorgehen gut zurecht gekommen?
Gruß,
Jan
Hi Jan,
sorry für die späte Antwort. Also ich bin gut klar gekommen mit allem.
Es funktioniert alles tadellos. Es kommt immer drauf, ich fand den Artikel zur Nextcloud und einigen Erweiterungen komplexer, aber mit deinen Atrikeln und ein wenig experimentierfreude klappt das schon. Ist ja eher ein Hobby von mir. ;)
Aber wei gesagt toll, dass es so gute Anleitungen gibt.
Gruß
Christian
Hi Jan,
wieder mal eine super Anleitung von Dir!
Wie würde denn der Code aussehen, wenn man MariaDB benutzen möchte?
Vielen Dank
Hi,
ich habe den Artikel mal um einen speziellen Abschnitt erweitert, der auf die Verbindung zu anderen Datenbank-Systemen (MySQL/MariaDB und PostgreSQL) eingeht.
Gruß,
Jan
Super!
Ein kleiner Schreibfehler hat sich eingeschlichen: „apt-get install phthon-pip“
sollte „apt-get install python-pip“ heißen.
Dann hat sich MariaDB noch wegen des Bindestrichs in „firefox-sync_db_user“ beschwert. Mit Unterstrich funktioniert es: „firefox_sync_db_user“
Vielen Dank nochmal für die tollen Anleitungen
Beste Grüße
Hi,
danke für die Rückmeldung. Ich habe es gleich ausgebessert.
Gruß,
Jan
Hallo Jan,
klappt soweit ganz gut jedoch unter iOS kann der Sync-Server so nicht eigerichtet werden.
Dies nur zur Info.
Gruß Hans
Hi Hans,
warum geht das unter iOS nicht? Bietet hier Firefox die entsprechende Option in der about:config nicht an?
Gruß,
Jan
Hi Jan, leider nein. Nutze es eher unter Linux, Windows und MacOS und da funktioniert es ohne Probleme.
Gruß Hans
Hi Hans,
OK, dann passe ich den Artikel gleich mal an.
Sorry, aber ich habe kein iPhone, mit dem ich das testen könnte.
Danke für den Hinweis!
Gruß,
Jan
Hallo,
sehr interessantes Thema und danke für den Artikel.
Beim Verfolgen des fxa-account links ( https://moz-services-docs.readthedocs.io/en/latest/howtos/run-fxa.html ) ist mir folgende Passage aufgefallen (Zitat):
—
For Firefox for iOS version 9.0 or later:
Go to Settings.
Tap on the Version number 5 times.
Tap on “Advance Account Settings”
Enter your content-server URL
Toggle “Use Custom Account Service” to on.
—
Vielleicht geht es ja doch…
Gruß
M
Hi,
OK, das klingt vielversprechend. Da ich allerdings immer noch kein iPhone habe, müsste dies jemand anderes mal testen. Würde mich interessieren, ob es mit dieser Anleitung funktioniert.
Gruß,
Jan
Hallo Jan,
erstmal Danke für deine Super Tutorials.
Ich will mir einen FF-Sync Server und einen Nextcloud Server auf einem Raspberry Pi einrichten. Dazu werde ich wohl auch dein anderes Tutorial https://decatec.de/home-server/eigener-firefox-sync-server-mit-nginx/ durcharbeiten.
Auf jeden Fall sehr gute Arbeit, die du da machst.
Jetzt zu meiner Frage:
Wenn der Account-Server von Firefox die Authentifizierung übernimmt, haben die aber doch auch die Zugangsdaten zu meinem Sync Server. So KÖNNTEN die doch trotzdem auf meine Daten auf meinem Server zugreifen, oder?
Ich will denen aber nix unterstellen, aber dann wäre der eigene Sync-Server für mich eigentlich sinnlos.
Beste Wünsche und weiter so!
Daniel
Hi Daniel,
erst einmal danke für dein Lob!
Dein Einwand ist meiner Meinung nach aber eher theoretischer Natur. Es gibt allerdings zwei Möglichkeiten, dies auszuschließen:
Du könntest zum einen neben dem Sync-Server auch noch einen Account-Server betreiben (siehe hier). Dann wird die Authentifizierung auch nur lokal durchgeführt.
Die wesentlich einfachere Variante wäre, dass du für den FF-Account die Zwei-Faktor-Authentifizierung aktivierst.
Gruß,
Jan
Hallo Jan,
vielen Dank für dieses weitere tolle Tutorial. Großes Lob für deine Arbeit! :-)
Ich habe mir den Sync-Server erfolgreich eingerichtet.
Nun wollte ich meine Daten bei Mozilla löschen per genannten Script. Die 2FA für mein Konto habe ich vorher deaktiviert.
Leider bekomme ich jedoch beim ausführen des Scripts, trotz korrekter E-Mailadresse, immer folgenden Fehler:
Traceback (most recent call last):
File „./delete_user_data.py“, line 91, in
main(sys.argv[1:])
File „./delete_user_data.py“, line 50, in main
s = c.login(args.email, password, keys=True)
File „/.local/lib/python2.7/site-packages/fxa/core.py“, line 90, in login
resp = self.apiclient.post(url, body)
File „/.local/lib/python2.7/site-packages/fxa/_utils.py“, line 335, in post
return self.request(„POST“, url, json, **kwds)
File „/.local/lib/python2.7/site-packages/fxa/_utils.py“, line 321, in request
raise fxa.errors.ClientError(body)
fxa.errors.ClientError: Incorrect email case
Kannst du mir dazu weiterhelfen?
Danke!
Gruß
Hi Ben,
das einzige, was mir an der Fehlermeldung auffällt, ist folgendes:
In der Theorie sind E-Mail-Adressen case-sensitive. Hast du diese beim Löschen der Daten entsprechend angegeben?
Gruß,
Jan
Hallo Jan,
Nach erfolgreicher Installation von Nextcloud, versuche ich nun mir zusätzlich einen Firefox Sync Server einzurichten.
Es hat bis zum Aufruf von der Url https://meinedomain.de/firefox-sync alles ohne Probleme funktioniert.
Beim Aufruf der Url https://meinedomain.de/firefox-sync bekomme ich eine Fehlermeldung 404 Not found.
Beim Aufruf von 127.0.0.1:5000 bekomme ich die Rückmeldung: It works
Ich habe unter /etc/nginx/conf.d/meinedomain.de im Serverblock (443) Deine blau marktierten Block eingefügt.
Wo kann hier der Fehler liegen, dass die Seite nicht gefunden wird?
Muss ich beim Router einen Port freischalten?
Gruß Andreas
Hi Andreas,
nein, einen Port brauchst du nicht freizuschalten, da die Kommunikation nach außen immer über Port 443 abläuft (darauf basiert ja das ganze Konstrukt).
Ich würde zunächst das nginx error.log checken. Hier sollte drin stehen, welche Datei er unter welchem Verzeichnis sucht und nicht finden kann. Das bringt einen meistens dann schon auf die richtige Fährte.
Gruß,
Jan
Hallo Jan,
nach einem Neustart funktioniert nun auch der Sync-Server.
Die offenen Tabs von meinem Handy, werden nun auf meinem PC angezeigt.
Am Handy werden die Lesezeichen von meinem PC angezeigt.
Nun habe ich „nur noch“ in der about:sync-log einige Fehler:
1567089287309 Sync.LogManager DEBUG Flushing file log
1567089287311 FirefoxAccounts TRACE not checking freshness of profile as it remains recent
1567089287318 FirefoxAccounts TRACE not checking freshness of profile as it remains recent
1567089287353 Sync.LogManager DEBUG Log cleanup threshold time: 1566225287353
1567089287392 Sync.LogManager DEBUG Done deleting files.
1567089295378 Sync.Service DEBUG User-Agent: Firefox/60.8.0 (Linux x86_64) FxSync/1.62.0.20190703131111.desktop
1567089295378 Sync.Service INFO Starting sync at 2019-08-29 16:34:55 in browser session u0R4cwQKjT3z
1567089295378 Sync.Service DEBUG In sync: should login.
1567089295379 Sync.Service INFO User logged in successfully – verifying login.
1567089295380 Sync.BrowserIDManager DEBUG unlockAndVerifyAuthState already has (or can fetch) sync keys
1567089295380 Sync.Status DEBUG Status.login: error.login.reason.network => success.status_ok
1567089295380 Sync.Status DEBUG Status.service: error.login.failed => error.login.failed
1567089295380 Sync.Service DEBUG Fetching unlocked auth state returned success.status_ok
1567089295381 Sync.BrowserIDManager INFO Getting keys
1567089295381 Sync.BrowserIDManager INFO Getting an assertion from: https://meinedomain.de/firefox-sync/token/1.0/sync/1.5
1567089295382 FirefoxAccounts DEBUG enter getAssertion()
1567089295382 FirefoxAccounts DEBUG getKeypairAndCertificate: already have keyPair and certificate
1567089295382 FirefoxAccounts DEBUG getAssertionFromCert
1567089295383 FirefoxAccounts DEBUG getAssertionFromCert returning signed: true
1567089295384 Sync.BrowserIDManager DEBUG Getting a token
1567089295384 Services.Common.TokenServerClient DEBUG Beginning BID assertion exchange: https://meinedomain.de/firefox-sync/token/1.0/sync/1.5
1567089295385 Services.Common.RESTRequest DEBUG GET request to https://meinedomain.de/firefox-sync/token/1.0/sync/1.5
1567089295385 Services.Common.RESTRequest TRACE HTTP Header accept: application/json
1567089295385 Services.Common.RESTRequest TRACE HTTP Header authorization: ***** (suppressed)
1567089295385 Services.Common.RESTRequest TRACE HTTP Header x-client-state: 35467e9ab2f98599379d0af59e8c5247
1567089295412 Services.Common.RESTRequest TRACE onStartRequest: GET https://meinedomain.de/firefox-sync/token/1.0/sync/1.5
1567089295413 Services.Common.RESTRequest TRACE Channel for GET https://meinedomain.de/firefox-sync/token/1.0/sync/1.5 returned status code 0
1567089295413 Services.Common.RESTRequest DEBUG GET https://meinedomain.de/firefox-sync/token/1.0/sync/1.5 502
1567089295413 Services.Common.RESTRequest TRACE GET body:
502 Bad Gateway
502 Bad Gateway
nginx
1567089295413 Services.Common.TokenServerClient DEBUG Got token response: 502
1567089295413 Services.Common.RESTResponse TRACE Processing response headers.
1567089295413 Services.Common.TokenServerClient WARN Did not receive JSON response. Misconfigured server?
1567089295413 Services.Common.TokenServerClient DEBUG Content-Type: text/html
1567089295413 Services.Common.TokenServerClient DEBUG Body:
502 Bad Gateway
502 Bad Gateway
nginx
1567089295414 Sync.BrowserIDManager ERROR Non-authentication error in _fetchTokenForUser: TokenServerClientServerError({„now“:“2019-08-29T14:34:55.413Z“,“message“:“Non-JSON response.“,“cause“:“malformed-response“,“response_body“:“\r\n502 Bad Gateway\r\n\r\n502 Bad Gateway\r\nnginx\r\n\r\n\r\n“,“response_headers“:{„server“:“nginx“,“date“:“Thu, 29 Aug 2019 14:34:55 GMT“,“content-type“:“text/html“,“content-length“:“150″,“strict-transport-security“:“max-age=63072000; includeSubdomains; preload;“,“x-content-type-options“:“nosniff“,“x-xss-protection“:“1; mode=block“,“x-robots-tag“:“none“,“x-download-options“:“noopen“,“x-permitted-cross-domain-policies“:“none“,“referrer-policy“:“no-referrer“,“x-firefox-spdy“:“h2″},“response_status“:502}) (resource://services-common/tokenserverclient.js:36:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.js:103:16
_processTokenResponse@tokenserverclient.js:280:19
getTokenFromBrowserIDAssertion@tokenserverclient.js:251:14
1567089295414 Sync.Status DEBUG Status.login: success.status_ok => error.login.reason.network
1567089295414 Sync.Status DEBUG Status.service: error.login.failed => error.login.failed
1567089295415 Sync.BrowserIDManager INFO Failed to fetch the cluster URL: TokenServerClientServerError({„now“:“2019-08-29T14:34:55.413Z“,“message“:“Non-JSON response.“,“cause“:“malformed-response“,“response_body“:“\r\n502 Bad Gateway\r\n\r\n502 Bad Gateway\r\nnginx\r\n\r\n\r\n“,“response_headers“:{„server“:“nginx“,“date“:“Thu, 29 Aug 2019 14:34:55 GMT“,“content-type“:“text/html“,“content-length“:“150″,“strict-transport-security“:“max-age=63072000; includeSubdomains; preload;“,“x-content-type-options“:“nosniff“,“x-xss-protection“:“1; mode=block“,“x-robots-tag“:“none“,“x-download-options“:“noopen“,“x-permitted-cross-domain-policies“:“none“,“referrer-policy“:“no-referrer“,“x-firefox-spdy“:“h2″},“response_status“:502}) (resource://services-common/tokenserverclient.js:36:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.js:103:16
_processTokenResponse@tokenserverclient.js:280:19
getTokenFromBrowserIDAssertion@tokenserverclient.js:251:14
1567089295415 Sync.Service DEBUG verifyLogin failed: TokenServerClientServerError({„now“:“2019-08-29T14:34:55.413Z“,“message“:“Non-JSON response.“,“cause“:“malformed-response“,“response_body“:“\r\n502 Bad Gateway\r\n\r\n502 Bad Gateway\r\nnginx\r\n\r\n\r\n“,“response_headers“:{„server“:“nginx“,“date“:“Thu, 29 Aug 2019 14:34:55 GMT“,“content-type“:“text/html“,“content-length“:“150″,“strict-transport-security“:“max-age=63072000; includeSubdomains; preload;“,“x-content-type-options“:“nosniff“,“x-xss-protection“:“1; mode=block“,“x-robots-tag“:“none“,“x-download-options“:“noopen“,“x-permitted-cross-domain-policies“:“none“,“referrer-policy“:“no-referrer“,“x-firefox-spdy“:“h2″},“response_status“:502}) (resource://services-common/tokenserverclient.js:36:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.js:103:16
_processTokenResponse@tokenserverclient.js:280:19
getTokenFromBrowserIDAssertion@tokenserverclient.js:251:14
1567089295415 Sync.Status DEBUG Status.login: error.login.reason.network => error.login.reason.network
1567089295415 Sync.Status DEBUG Status.service: error.login.failed => error.login.failed
1567089295416 Sync.ErrorHandler ERROR Sync encountered a login error
1567089295417 Sync.SyncScheduler DEBUG Clearing sync triggers and the global score.
1567089295418 Sync.SyncScheduler DEBUG Next sync in 600000 ms. (why=schedule)
1567089295426 Sync.Service DEBUG Exception calling WrappedLock: Error: Login failed: error.login.reason.network (resource://services-sync/service.js:853:15) JS Stack trace: onNotify@service.js:853:15
1567089295429 Sync.Service DEBUG Not syncing: login returned false.
1567089295435 Sync.ErrorHandler DEBUG Addons installed: 4
1567089295435 Sync.ErrorHandler DEBUG – uBlock Origin, version 1.21.2, id uBlock0@raymondhill.net
1567089295436 Sync.ErrorHandler DEBUG – Geschlossenen Tab wiederherstellen, version 4.7.0, id {4853d046-c5a3-436b-bc36-220fd935ee1d}
1567089295437 Sync.ErrorHandler DEBUG – New Tab Homepage, version 0.6.2, id {66E978CD-981F-47DF-AC42-E3CF417C1467}
1567089295439 Sync.ErrorHandler DEBUG – Startpage.com — Datenschutz-Suchmaschine, version 1.1.4, id {20fc2e06-e3e4-4b2b-812b-ab431220cada}
Sind diese normal oder läuft etwas noch nicht rund?
Gruß Andreas
Hallo Andreas,
wenn alles so weit funktioniert, dann sollte der Fehler nicht kritisch sein. Tritt das immer mal wieder auf, oder war das eine einmalige Sache?
Ich würde da jetzt nicht weiter rumprobieren, sondern die Sache einfach mal die nächste Zeit etwas beobachten.
Gruß,
Jan
Hallo,
ich bekomme leider eine fehlermeldung:
Error: HTTP 507 Insufficient Storage
Was kann man da machen??
1570649472529 Sync.CollectionKeyManager INFO Clearing collection keys…
1570649472529 Sync.CollectionKeyManager INFO Saving downloaded keys.
1570649472529 Sync.CollectionKeyManager INFO Bumping last modified to 1570583874224
1570649472557 Sync.Engine.Extension-Storage INFO Successfully synced ‚https-everywhere@eff.org‘
1570649472816 Sync.Engine.Extension-Storage ERROR Syncing {73a6fe31-595d-460b-a920-fcc0f8843232}: request failed: Error: HTTP 507 Insufficient Storage: Resource access is forbidden for this user (Maximum bytes per object exceeded “ „(17255 > 16384 Bytes.)(resource://services-common/kinto-http-client.js:2771:5) JS Stack trace: ServerResponse@kinto-http-client.js:2771:5
processResponse@kinto-http-client.js:2918:13
1570649472816 Sync.Engine.Extension-Storage WARN Syncing failed: Error: HTTP 507 Insufficient Storage: Resource access is forbidden for this user (Maximum bytes per object exceeded “ „(17255 > 16384 Bytes.)(resource://services-common/kinto-http-client.js:2771:5) JS Stack trace: ServerResponse@kinto-http-client.js:2771:5
processResponse@kinto-http-client.js:2918:13
1570649472816 Sync.Status DEBUG Status for engine extension-storage: error.engine.reason.unknown_fail
1570649472817 Sync.Status DEBUG Status.service: success.status_ok => error.sync.failed_partial
1570649472817 Sync.ErrorHandler DEBUG extension-storage failed: Error: HTTP 507 Insufficient Storage: Resource access is forbidden for this user (Maximum bytes per object exceeded “ „(17255 > 16384 Bytes.)(resource://services-common/kinto-http-client.js:2771:5) JS Stack trace: ServerResponse@kinto-http-client.js:2771:5
processResponse@kinto-http-client.js:2918:13
1570649472817 Sync.Doctor INFO Skipping check of prefs – disabled via preferences
1570649472817 Sync.Doctor INFO Skipping check of passwords – disabled via preferences
1570649472817 Sync.Doctor INFO Skipping check of tabs – disabled via preferences
1570649472817 Sync.Doctor INFO Skipping check of bookmarks – disabled via preferences
1570649472818 Sync.Doctor INFO Skipping check of addons – disabled via preferences
1570649472818 Sync.Doctor INFO Skipping check of forms – disabled via preferences
1570649472818 Sync.Doctor INFO Skipping check of history – disabled via preferences
1570649472818 Sync.Doctor INFO Skipping check of extension-storage – disabled via preferences
1570649472818 Sync.Doctor INFO Skipping validation: no engines qualify
1570649472818 Sync.Synchronizer INFO Sync completed at 2019-10-09 21:31:12 after 2.61 secs.
Hi,
hierzu gibt es bereits einen Issue (siehe hier).
Anscheinend muss man die Synchronisierung im Firefox nochmals komplett trennen. Hast du das schon mal ausprobiert?
Gruß,
Jan
Hi. Ich versuche das auf einem ODROID-C2 umzusetzen (ARM-Basis), und bekomme schon beim Compilen einen Abbruch.
Ich habe hier mal einen Teil der Ausgabe
https://paste.escher.cc/view/02496b2b
Sagt das jemandem schon was?
LG, Tom
Hallo Tom,
ich bin mir nicht sicher, ob der Sync Server auf ARM gebaut werden kann. Ich betreibe das normal unter einer amd64 Architektur.
Gruß,
Jan
Hallo Jan,
super Beschreibung, funktioniert alles 1a! Nur auf dem iPhone kann ich den eigenen Sync Server leider nicht eintragen.
Gruß
Jan
Hi,
ja, das wurde auch schon mal von einem anderen Leser berichtet. Schau dir mal diesen Kommentar an, vielleicht funktioniert es ja so.
Gruß,
Jan
Erstmal Danke für den Beitrag.
Python 2 erreicht in ein paar Tagen den EOL Status. Hat von euch jemand die „Nachfolgeversion“ auf Basis von Rust am laufen?
https://github.com/mozilla-services/syncstorage-rs
Die hier genutzte Version wird nicht auf Python 3 portiert
Hi,
dies ist mir durchaus bewusst und daher habe ich mir syncstorage-rs auch schon einmal angesehen. Leider kann ich dies momentan nicht wirklich empfehlen, da das Projekt noch sehr nach „Work in progress“ aussieht.
Wie es sich für mich darstellt, wird der „alte“ Sync Server auch für die neue Lösung benötigt, lediglich das (Storage-)Backend wird durch eine Rust-Implementierung ausgetauscht.
Dennoch ist es momentan nicht wirklich möglich, syncstorage-rs zu bauen (weder lokal, noch per Docker). Das liegt v.a. daran, dass eine Dependency (mozilla-rust-sdk) nicht aufgelöst werden kann. Dabei handelt es sich wohl um Code, der Abhängigkeiten zu Libraries von Google hat, die leider nicht als Open Source zur Verfügung stehen.
Ich werde das Thema daher auf meine Todo-Liste setzen und weiterhin beobachten. Wenn es hier etwas neues gibt, wird es einen neuen Artikel über Firefox Sync (mit neuem Storage-Backend) geben.
Gruß,
Jan
Das ist irgendwie unschön. Python 2 erreicht EOL, die neue Lösung ist aktuell noch WIP & benötigt den alten Sync Server und Mozilla weigert sich den alten Syncserver auf Python 3 zu migrieren…
Letzteres wäre wahrscheinlich, zumindest vorübergehend, die beste Lösung aber Mozilla weigert sich. Echt super das ganze…
Mozilla lässt also lieber Menschen ab dem 01.01.20 auf Software sitzen, dessen Basis den EOL Status erreicht hat und in absehbarer Zeit Sicherheitslücken aufweisen könnte.
Oder seh ich das falsch?
Hi,
das siehst du meiner Meinung nach leider richtig.
Ich frage mich ja, welchen Stand die offizielle Synchronisierung bei Firefox hat…
Auf jeden Fall werde ich das Thema weiterhin beobachten.
Gruß,
Jan
Danke für die schöne Anleitung.
Nur falls jemand auch auf dieses Problem stößt (solange es noch keine brauchbare Alternative gibt), hier meine Lösung.
IOS geht sehr wohl mit dem Sync Server. Der Tipp mit dem 5 mailigen auf die Version tippen und dann den Sync Server eintragen Funktioniert.
Allerdings synchronierste danach immer noch nichts richtig auf die IOS Geräte.
Hier war das Problem, dass es wohl zwischen IOS / Firefox und dem Server Probleme mit http2 gibt. Nachdem ich meinem NGINX Reverse Proxy http2 für den VHOST (achtung,dazu muss dieser VHOST auf einem anderen Port laufen, sonst deaktiviert NGINX http2 nicht. Bei mir lauscht der VHOST für den Sync Server z.B. auf 8443) deaktiviert habe, und die URL auf den neuen Port angepasst habe, klappt nun alles (Bookmarks, und auch geöffnete Tabs).
Bin gespannt, wann der Nachfolger erscheint.
Vielleicht hilft es ja jemanden.
Hallo Georg,
danke für diesen Hinweis!
Wundert mich aber etwas, denn das bedeutet ja, dass iOS (oder der iOS-Firefox) nicht kompatibel zu HTTP/2 ist. Da es ein schon recht alter Standard ist, hätte ich nun erwartet, dass es auch unter iOS funktioniert.
Gruß,
Jan
Hallo,
großes Lob und vielen Dank für diese Anleitung auch von mir! Hat prima geklappt.
Ich hab gerade festgestellt, dass die firefox_sync_db im mysql-Ordner bereits 1,5GB groß ist. Ich synchronisiere damit zwar um die 10 Geräte – teils Desktop-Broswer, teils Android mit zig offenen Tabs -, aber das kommt mir doch sehr viel vor. Gerade die Tabelle „batch_upload_items“ nimmt ~97% des Platzes ein.
Ist das normal?
Kann man das irgendwie reduzieren/bereinigen?
Wächst die Datenbank weiter an oder ist die Größe gedeckelt bei 1,5GB?
An und für sich ist die Größe *noch* kein Problem, aber sollte sie noch weiter anwachsen, muss ich wohl die entsprechende Partition erweitern.
Gruß, Bodo
Hi Bodo,
OK, das scheint doch viel Speicherplatz zu sein, weil hier wird ja nicht wirklich viel gespeichert.
Ich habe den SyncServer schon sehr lange im Betrieb und synchronisiere hier ca. 5 Geräte. Bei mit hat die batch_upload Datei gerade einmal 19 MB.
Hast du die Registrierung weiterer Accounts in der ini-Datei vom Sync Server ausgeschaltet?
Gruß,
Jan
„allow_new_users“ hatte ich bisher auskommentiert, also war es wohl nicht ausgeschaltet. Jetzt aber. Mal schauen, ob es was ändert.
Laut der Accountverwaltung sind aber auch nicht mehr Geräte registriert, als ich selbst registriert hatte.
Es gibt eine „batch_uploads“ und eine „batch_upload_items“. Erstere ist bei mir keine 100 KB groß. Reden wir hier von der gleichen Tabelle?
Hi Bodo,
bei mir sieht das z.B. so aus:
/var/lib/mysql/firefox_sync_db# ls -lh
total 76M
-rw-rw---- 1 mysql mysql 1,2K Jun 2 2019 batch_upload_items.frm
-rw-rw---- 1 mysql mysql 19M Mär 8 14:39 batch_upload_items.ibd
-rw-rw---- 1 mysql mysql 989 Jun 2 2019 batch_uploads.frm
-rw-rw---- 1 mysql mysql 96K Mär 8 14:39 batch_uploads.ibd
-rw-rw---- 1 mysql mysql 2,2K Jun 2 2019 bso.frm
-rw-rw---- 1 mysql mysql 56M Mär 8 14:39 bso.ibd
-rw-rw---- 1 mysql mysql 1,5K Jun 2 2019 collections.frm
-rw-rw---- 1 mysql mysql 112K Jun 2 2019 collections.ibd
-rw-rw---- 1 mysql mysql 67 Jun 2 2019 db.opt
-rw-rw---- 1 mysql mysql 997 Jun 2 2019 user_collections.frm
-rw-rw---- 1 mysql mysql 96K Mär 8 14:39 user_collections.ibd
-rw-rw---- 1 mysql mysql 2,9K Jun 2 2019 users.frm
-rw-rw---- 1 mysql mysql 112K Jun 2 2019 users.ibd
Gruß,
Jan
Vielen Dank für die Anleitung. Nach mehrfacher Installation stehe ich immer wieder am Punkt dass ich folgende Meldung in den Logs sehe:
Services.Common.RESTRequest DEBUG GET https://ff.domain.tld/1.0/sync/1.5 404
Services.Common.TokenServerClient DEBUG Got token response: 404
Services.Common.TokenServerClient WARN Error processing token server response: TypeError: right-hand side of ‚in‘ should be an object, got number(resource://services-common/tokenserverclient.js:308:11) JS Stack trace: _processTokenResponse@tokenserverclient.js:308:11
[Domain geändert]
Ich kann tun was ich will. In den nginx error.log steht kein Hinweis darauf. Nur dass „conflicting server name“ (verursacht durch certbot) ignoriert wurde. Ist aktuell ein Fehler in der Source? – Stehe endgültig am Berg.
Danke & Grüsse
René
Hallo René,
hast du einfach die aktuellsten Sourcen genommen?
Da würde ich mal ausprobieren, die Sourcen eines Releases zu nehmen.
Wegen nginx und „conflicting server name“: Das sollte eigentlich auch nicht passieren. Was sagt „nginx -t“?
Gruß,
Jan
Du hast einen Fehler in deiner Sync-Adresse: vor „1.0/sync/1.5“ fehlt „token“. Der Link muss heißen https://ff.domain.tld/token/1.0/sync/1.5
MfG
Gunther
Danke für die tolle Anleitung.
Mein Sync Server läuft auf einem Proxmox Container ohne Probleme.
Leider habe ich ein Problem mit dem Skript zum löschen auf dem Server von Mozilla.
python ./bin/delete_user_data.py email@emailprovider.org
Traceback (most recent call last):
File „./bin/delete_user_data.py“, line 91, in
main(sys.argv[1:])
File „./bin/delete_user_data.py“, line 50, in main
s = c.login(args.email, password, keys=True)
File „/usr/local/lib/python2.7/dist-packages/fxa/core.py“, line 90, in login
resp = self.apiclient.post(url, body)
File „/usr/local/lib/python2.7/dist-packages/fxa/_utils.py“, line 335, in post
return self.request(„POST“, url, json, **kwds)
File „/usr/local/lib/python2.7/dist-packages/fxa/_utils.py“, line 321, in request
raise fxa.errors.ClientError(body)
fxa.errors.ClientError: The request was blocked for security reasons
Kann es vielleicht daran liegen, dass ich vorher noch nichts mit Mozilla syncronisiert hatte? Hab erst bevor ich meinen eigenen Server in Betrieb genommen habe, ein Konto bei Mozilla angelegt – ohne zu syncronisieren.
Hi Andreas,
wenn noch nichts in das Mozilla-Konto synchronisiert wurde, dann brauchst du das Skript auch nicht aufzurufen.
„Blocked for security reasons“ klingt aber eher nach einer aktiven Zwei-Faktor-Authentifizierung. Wenn diese aktiv ist, dann bitte kurz vor dem Aufruf des Skripts deaktivieren.
Gruß,
Jan
Hallo Jan,
danke für die Antwort.
Zwei-Faktor-Authntifizierung habe ich nicht aktiviert.
Dafür bin ich auf einen anderen Fehler drauf gekommen, bin mir aber nicht sicher ob der dafür verantwortlich ist.
Beim Ausführen von systemctl status firefox-sync bekam ich nachstehende Fehlermeldung:
firefox-sync.service: Failed to reset devices.list: Operation not permitted
Kannst Du etwas damit anfangen?
Hi Andreas,
direkt kann ich damit leider nichts anfangen. Schau dir mal den erweiterten Output von folgendem Befehl an: journalctl -u firefox-sync.service
Vielleicht taucht hier ja eine Fehlermeldung auf, die auf die Ursache schließen lässt.
Gruß,
Jan
Hallo,
super Artikel.
Ich selbst habe den Syncserver schon länger laufen, jedoch bekomme ich meine Androids nicht gesynct. Tokenserver ist eingestellt und ich bin auch eingeloggt.
Wenn ich auf „Jetzt synchronisieren“ drücke, dreht es sich kurz und „Letzte Synchronisation: nie“ steht immer da.
Hat schon jemand dieses Problem gelöst?
Serverlog finde ich irgendwie nichts…
Danke und viele Grüße
Basti
Hi Basti,
schau mal im Firefox unter about:sync-log nach. Da stehen die Logs vom Firefox, wenn beim Sync etwas schief gegangen ist.
Gruß,
Jan
Hi Jan,
danke für den Artikel. Ich komme beim Löschen der Daten vom Server mit dem verlinkten Code-Snippet jedoch nicht weiter.
Alle Quellen, die ich bisher gefunden haben beinhalten genau diese Code-Zeilen aus deinem Artikel, aber weder unter Manjaro Linux noch unter Debian funktionieren sie.
Es kommt immer die gleiche Fehlermeldung:
can’t open file ‚./bin/delete_user_data.py‘: [Errno 2] No such file or directory
Auch finde ich nirgends im Dateisystem die Datei „delete_user_data.py“, so dass ich wenigstens den Source ansehen und den Fehler eingrenzen könnte.
Es spielt auch keine Rolle, ob ich es mit python2.7, python 3.7 oder python 3.8 ausführe. Auch mit dem neuesten pip 20.1 keine Veränderung bei der Installation. Diese läuft ohne Fehler durch.
Nochmal die ausgeführten Befehle:
pip install PyFxA
python ./bin/delete_user_data.py meine@email.de
Upgrade von pip ohne Verbesserung:
python2.7 -m pip install –user –upgrade pip
Ausgabe nach der Installation von PyFxA unter Debian mit python2.7 als root:
Requirement already satisfied: PyFxA in /usr/local/lib/python2.7/dist-packages (0.7.7)
Requirement already satisfied: PyJWT in /usr/local/lib/python2.7/dist-packages (from PyFxA) (1.7.1)
Requirement already satisfied: hawkauthlib in /usr/local/lib/python2.7/dist-packages (from PyFxA) (2.0.0)
Requirement already satisfied: six>=1.14 in /usr/local/lib/python2.7/dist-packages (from PyFxA) (1.15.0)
Requirement already satisfied: PyBrowserID in /usr/local/lib/python2.7/dist-packages (from PyFxA) (0.14.0)
Requirement already satisfied: cryptography in /usr/lib/python2.7/dist-packages (from PyFxA) (2.6.1)
Requirement already satisfied: requests>=2.4.2 in /usr/local/lib/python2.7/dist-packages (from PyFxA) (2.24.0)
Requirement already satisfied: webob in /usr/local/lib/python2.7/dist-packages (from hawkauthlib->PyFxA) (1.8.6)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,=1.21.1 in /usr/local/lib/python2.7/dist-packages (from requests>=2.4.2->PyFxA) (1.25.10)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python2.7/dist-packages (from requests>=2.4.2->PyFxA) (2020.6.20)
Requirement already satisfied: chardet=3.0.2 in /usr/local/lib/python2.7/dist-packages (from requests>=2.4.2->PyFxA) (3.0.4)
Requirement already satisfied: idna=2.5 in /usr/local/lib/python2.7/dist-packages (from requests>=2.4.2->PyFxA) (2.10)
Ausgabe nach der Installation mit python3.8 unter Manjaro Linux als user:
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: PyFxA in ./.local/lib/python3.8/site-packages (0.7.7)
Requirement already satisfied: hawkauthlib in ./.local/lib/python3.8/site-packages (from PyFxA) (2.0.0)
Requirement already satisfied: PyBrowserID in ./.local/lib/python3.8/site-packages (from PyFxA) (0.14.0)
Requirement already satisfied: PyJWT in ./.local/lib/python3.8/site-packages (from PyFxA) (1.7.1)
Requirement already satisfied: six>=1.14 in /usr/lib/python3.8/site-packages (from PyFxA) (1.15.0)
Requirement already satisfied: requests>=2.4.2 in /usr/lib/python3.8/site-packages (from PyFxA) (2.24.0)
Requirement already satisfied: cryptography in /usr/lib/python3.8/site-packages (from PyFxA) (2.9.2)
Requirement already satisfied: webob in ./.local/lib/python3.8/site-packages (from hawkauthlib->PyFxA) (1.8.6)
Requirement already satisfied: chardet>=3.0.2 in /usr/lib/python3.8/site-packages (from requests>=2.4.2->PyFxA) (3.0.4)
Requirement already satisfied: idna>=2.5 in /usr/lib/python3.8/site-packages (from requests>=2.4.2->PyFxA) (2.10)
Requirement already satisfied: urllib3>=1.21.1 in /usr/lib/python3.8/site-packages (from requests>=2.4.2->PyFxA) (1.25.9)
Requirement already satisfied: cffi!=1.11.3,>=1.8 in /usr/lib/python3.8/site-packages (from cryptography->PyFxA) (1.14.0)
Requirement already satisfied: pycparser in /usr/lib/python3.8/site-packages (from cffi!=1.11.3,>=1.8->cryptography->PyFxA) (2.20)
Ich weiß nicht, wo ich noch schauen soll :/
Vielleicht hast du eine Idee?
Gruß
Christian
Hi Christian,
hier bin ich leider auch überfragt. Daher am besten einen Issue im entsprechenden GitHub-Repo erstellen.
Gruß,
Jan
Hmm.. Die Einrichtung des Sync-Servers hat soweit geklappt, d.h. das sync-log vom ersten Gerät schaut ok aus.. allerdings kann ich mich auf dem 2ten Gerät nicht richtig bei FF Sync anmelden..
Wenn ich mich mit meinen Zugangsdaten auf dem 2ten Gerät im FF anmelde, so öffnet sich die site accounts.firefox.com auf welcher ich auch erfolgreich bei meinem account eingeloggt bin.. ich kann dort unter „Geräte & Apps“ auch die Web-Sitzung dieses Gerätes sehen, aber der FF-Browser selbst möchte von der Anmeldung nichts wissen – da steht im Menu immer noch „Bei Firefox anmelden“ .. Natürlich hat dieser FF auch keine Einträge im about:sync-log ..
Ich werde es mal zusätzlich auf nem Androiden probieren..
Auf einem weiteren Gerät hat alles wunderbar funktioniert – d.h. ich werde die bookmarks sichern und den FF auf dem erwähnten Gerät neu installieren, dann sollte es wohl auch gehen..
Danke für die Kommentar-Möglichkeit :-)
Hi Robert,
um welches OS/Version handelt es sich bei dem Gerät, auf dem die Anmeldung nicht wirklich funktioniert hat?
Gruß,
Jan
Hallo Jan,
ich wollte grade den Sync-Server neben einer frischen NC-Installation auf Ubuntu Server 20.04 LTS installieren, allerdings benötige ich dafür python2-virtualenv. Das ist unter der 20.04 nicht installiert, deshalb kann man den Server nicht bauen:
apt-get install make python-dev git-core python-virtualenv g++
Reading package lists… Done
Building dependency tree
Reading state information… Done
Note, selecting ‚python-dev-is-python2‘ instead of ‚python-dev‘
Note, selecting ‚git‘ instead of ‚git-core‘
Package python-virtualenv is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
Wie bekomme ich die richtige python-virtualenv installiert?
Gruß und vielen Dank für Deine tollen Anleitungen,
Sascha
E: Package ‚python-virtualenv‘ has no installation candidate
Hi Sascha,
als Workaround würde ich zunächst mal ausprobieren, das Paket „python-virtualenv“ per deb-Datei manuell herunter zu laden und zu installieren.
Ansonsten wird es wohl etwas komplizierter, siehe z.B. hier.
Gruß,
Jan
Hallo Jan,
der einfache Weg hat leider nicht geklappt, vielleicht habe ich auch einen Denkfehler:
1. phyton2 und virtualenv installiert:
https://computingforgeeks.com/how-to-install-python2-with-virtualenv-on-ubuntu/
2. um zwischen phyton 2 und 3 umschalten zu können:
https://www.fosslinux.com/39384/switching-between-python-2-and-3-versions-on-ubuntu-20-04.htm
Dann wie unter 1. beschrieben ein virtualenv erzeugt, über pip virtualenv installiert, in das sycserver-verzeichniss gegangen und:
(env) root@sukufum-cloud:/opt/syncserver# make build
`which python2 python | head -n 1` -m virtualenv –python=`which python2 python | head -n 1` –no-site-packages ./local
usage: virtualenv [–version] [–with-traceback] [-v | -q] [–app-data APP_DATA] [–reset-app-data] [–upgrade-embed-wheels] [–discovery {builtin}] [-p py] [–creator {builtin,cpython2-posix}] [–seeder {app-data,pip}] [–no-seed]
[–activators comma_sep_list] [–clear] [–system-site-packages] [–symlinks | –copies] [–no-download | –download] [–extra-search-dir d [d …]] [–pip version] [–wheel version] [–setuptools version] [–no-pip]
[–no-wheel] [–no-setuptools] [–no-periodic-update] [–symlink-app-data] [–prompt prompt] [-h]
dest
virtualenv: error: unrecognized arguments: –no-site-packages
SystemExit: 2
make: *** [Makefile:27: local/COMPLETE] Error 2
Irgendwo ist da noch ein Knoten drin….
Gruß,
Sascha
Hi Sascha,
der Fehler sagt mir nun nichts. Vielleicht mal im GitHub-Repository vom Syncserver nachfragen?
Gruß,
Jan
Hi Jan,
seit dem neuen Firefox for Android (ab Version 79) lässt sich about:config auf der Android-Version nicht mehr aufrufen. So kann der Sync-Server nicht mehr angepasst werden.
Wie sich dieser trotzdem einstellen lässt steht hier:
https://www.soeren-hentzschel.at/firefox-android/fenix-eigener-sync-server/
Nicht verwirren lassen, hier ist zwar von Nightly usw. die Rede, aber mit dem neuen Firefox funktionierit es immer noch.
Für alle anderen noch die Info, beim Update auf den neuen Firefox auf Andorid wird der benutzerdefinierte Sync-Server aus den Einstellungen gelöscht! Der muss also nach dem Update neu gesetzt werden!
Gruß
Ben
Hi Ben,
das ist in der Tat ein guter Hinweis, da es in der aktuellen App kein „about:config“ mehr gibt. Dies soll aber in einer zukünftigen Version wieder zur Verfügung stehen.
Ist auf jeden Fall meiner Meinung nach nicht der richtige Weg von Mozilla, ich hoffe, dass sie dies in Zukunft anders lösen werden. Auch dass nach jedem Update der Sync Server weg ist, ist äußerst ärgerlich.
Auf jeden Fall danke für den Hinweis!
Gruß,
Jan