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
Hej Jan! :) Vielen Dank für dein Tutorial. Leider habe ich ein Problem bei der Aktualisierung. Wenn ich „git stash pop“ ausführe, dann beschwer er sich über ein merge conflict:
„KONFLIKT (Inhalt): Zusammenführungskonflikt in syncserver.ini“
Wenn ich die Datei entsprechend bearbeite und es noch einmal versuche, dann bekomme ich:
syncserver.ini: needs merge
unfähig die Bereitstellung zu aktualisieren
..ich kenne mich mit Git nicht so aus und komme hier nicht weiter.
Hi Karsten,
bevor wir hier nun mit groß mit git rummachen, ist es glaube ich einfacher, wenn du einfach die Änderungen aus der ini-Datei manuell in die neue Version übernimmst.
Gruß,
Jan
funktioniert nicht, zuerst gibt es einen merge conflict und dann ist es egal ob man die remote oder die local version als merge nimmt kommt es zu folgendem Fehler:
cwd: /tmp/pip-install-y3j5Eo/mysqlclient/
Complete output (12 lines):
sh: 1: mysql_config: not found
sh: 1: mariadb_config: not found
sh: 1: mysql_config: not found
Traceback (most recent call last):
…
EnvironmentError: mysql_config not found
Den zuvor funktionierenden firefox-sync service hatte ich gestoppt.
Ratlos.
Hi Ronald,
sieht so aus, dass hier der „Connector“ für das gewählte DBMS fehlt. Hier sollte dann z.B. ein
pip install mysql-connector-python
helfen.Bitte beachten: Hier ist noch Python 2 im Einsatz, dies sollte so langsam aus den Distributionen herausaltern.
Gruß,
Jan
Hi Jan,
ich habe vor kurzem meine SyncServer von einem Unterverzeichnis meine-domain.de/firefox-sync auf eine Subdomain firefox.meine-domain.de umgezogen.
Vor dem Umzug hat alles funktioniert, inklusive Nextcloud Instanz auf dem gleichen Webserver.
Seit dem Umzug bekomm ich nun im Sync Log des Firefox einen Fehler 500 Internal Server Error beim Token Austausch:
1614978477653 Services.Common.TokenServerClient DEBUG Beginning OAuth token exchange: https://firefox.meine-domain.de/token/1.0/sync/1.5
1614978477653 Services.Common.RESTRequest DEBUG GET request to https://firefox.meine-domain.de/token/1.0/sync/1.5
1614978477661 Services.Common.RESTRequest DEBUG GET request to https://api.accounts.firefox.com/v1/account/device/commands?index=0
1614978478358 Services.Common.RESTRequest DEBUG GET https://profile.accounts.firefox.com/v1/profile 304
1614978478364 Services.Common.RESTRequest DEBUG GET https://api.accounts.firefox.com/v1/account/device/commands?index=0 200
1614978478365 Hawk DEBUG (Response) /account/device/commands?index=0: code: 200 – Status text: OK
1614978478365 Hawk DEBUG Clock offset vs https://api.accounts.firefox.com/v1: -2365
1614978479026 Services.Common.RESTRequest DEBUG GET https://firefox.meine-domain.de/token/1.0/sync/1.5 500
1614978479026 Services.Common.TokenServerClient DEBUG Got token response: 500
1614978479026 Services.Common.TokenServerClient WARN Did not receive JSON response. Misconfigured server?
1614978479026 Services.Common.TokenServerClient DEBUG Content-Type: text/html
1614978479026 Services.Common.TokenServerClient DEBUG Body:
Internal Server Error
Internal Server Error
1614978479027 Sync.BrowserIDManager ERROR Non-authentication error in _fetchTokenForUser: TokenServerClientServerError({„now“:“2021-03-05T21:07:59.026Z“,“message“:“Non-JSON response.“,“cause“:“malformed-response“,“response_body“:“\n \n Internal Server Error\n \n \n Internal Server Error\n \n \n\n“,“response_headers“:{„server“:“nginx“,“date“:“Fri, 05 Mar /
Im Nginx Error.log findet sich leider nichts.
Hast du dazu noch eine Idee?
Hi Ben,
wenn du hier im nginx-Log (nicht nur im error.log, sondern auch mal im access.log nachsehen) nichts findest, sagt mir das eigentlich, dass er gar nicht auf deinem Server „rauskommt“.
Kommt evtl. eine ausführlichere Fehlermeldung, wenn du den Sync Server nicht als Service, sondern direkt über die Kommandozeile startest und dann die Verbindung in Firefox herstellen möchtest?
Gruß,
Jan
Hi Jan,
bei mir kommt folgende Meldung beim Start des Service:
/opt/syncserver/local/local/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.25.2) or chardet (3.0.4) doesn’t match a supported version!
Mar 09 21:02:04 server gunicorn[765378]: RequestsDependencyWarning
Ich habe versucht ein den sync-server upzudaten, gab aber nichts bei „make build“.
Hat das was mit EOL von python zu tun?
LG
Hi Amelia,
ja, ich denke, dass Python 2 hier das Problem ist. Den Sync Server wird man also auf einem Ubuntu 20.04 nicht mehr zum Laufen bekommen. Der „neue Sync-Server“ ist anscheinend bereits in der Mache, ist aber noch „experimentell“ (zumindest das letzte mal, als ich mir das mal angesehen habe).
Gruß,
Jan
Hi Jan,
ja das ist irgendwie komisch, denn ich habe den ff-syncserver nach deiner Anleitung auf meinem Server mit Ubuntu 20.04 eingerichtet. Ich erinner mich noch ich musste ziemlich rumspielen damit die pakete (vor allem python) liefen, ich habe es aber irgendwie hinbekommen. Der Syncserver läuft jedenfalls, ich weiß nicht ob alles funktioniert. In den about:sync-logs sind auch immer Fehlermeldungen, aber teilweise funktioniert er auf jeden Fall.
Wie schätzt du den neuen Sync Server ein? Ist das ein vielversprechendes Projekt?
LG und vielen Dank
Hi Amelia,
ich habe mir den „neuen Sync-Server“ mal vor einem halben Jahr angesehen und hier war das Teil leider noch nicht wirklich nutzbar. Leider muss ich also sagen, dass dies momentan noch nicht sonderlich gut aussieht. Ich hoffe natürlich, dass sich das noch ändern wird.
Gruß,
Jan
Hallo Jan,
könntest Du beim update noch den Hinweis hinzufügen, dass dieser unbedingt als root bzw. alle Befehle mit sudo erfolgen müssen ?
Ich habe den git stash als normaler user begonnen und dann kommt man in Teufels Küche, habs zwar dann mit sudo wiederholt, aber jetzt mag er die Unterschiede im Makefile nicht mergen:
ronald@homeserver:/opt/syncserver$ sudo git stash pop
On branch master
Your branch is ahead of ‚origin/master‘ by 2 commits.
(use „git push“ to publish your local commits)
Changes not staged for commit:
(use „git add …“ to update what will be committed)
(use „git restore …“ to discard changes in working directory)
modified: Makefile
no changes added to commit (use „git add“ and/or „git commit -a“)
im Makefile sehe ich diese markierten Änderungen, wüsste jetzt aber nicht, was ich davon löschen kann/muss:
…
.PHONY: build
build: | $(ENV)/COMPLETE
$(ENV)/COMPLETE: requirements.txt
<<<<<<< Updated upstream
<<<<<<< Updated upstream
# Install the latest Python 2 compatible setuptools manually:
# https://github.com/mozilla-services/syncserver/issues/239
$(VIRTUALENV) $(ENV) –no-setuptools
$(INSTALL) -U "setuptools>>>>>> Stashed changes
$(INSTALL) -i https://pypi.python.org/simple -U pip
>>>>>>> Stashed changes
$(INSTALL) -r requirements.txt
$(ENV)/bin/python ./setup.py develop
touch $(ENV)/COMPLETE
.PHONY: test
…
Hi Ronald,
OK, das steht nicht explizit im Artikel mit dabei. Ich dachte eigentlich, dass dies klar sein sollte, v.a. wenn man ein Stück Software installieren will. Hier braucht man ja immer Root-Rechte.
Ich werde dies aber in zukünftigen Artikeln besser betonen.
Danke für deinen Hinweis!
Gruß,
Jan
Danke!
Und was kann ich jetzt mit dem kaputten Makefile machen bzw. wie sollte dieser aussehen in diesem Bereich ?
Dann weiss ich, welche Zeilen ich löschen kann..
Hi,
am besten/schnellsten wäre es vermutlich, nochmal ganz von vorn zu beginnen. Also das geclonte Git-Repo nochmal komplett löschen. Die Konfiguration (ini) kannst du dir ja vorher wegsichern.
Allerdings kann ich auch keine Garantie mehr geben, ob sich das alles noch so durchführen lässt, da Python 2 schon länger aus der Support-Phase raus ist. Auf einem frischen Ubuntu 20.04 bekommt man das sicher nicht mehr so einfach installiert.
Edit: Bzgl. der Problematik mit Python 2 habe ich den Artikel mal um einen Hinweis ergänzt.
Gruß,
Jan
Danke für die Hilfe!
Danke Jan!
Ich habe nun den Original-Makefile vom git-Repo genommen und musste vor dem build noch ein „apt install libmariadb-dev“ absetzen.
Funktioniert wieder, nur mit welchem Befehl ich die nun aktuell aktive Versionsnummer vom firefox-syncserver in der bash anzeigen kann, das konnte ich auch auf der mozilla doku page nicht heraus finden..
Hi Ronald,
OK, super, dass das geklappt hat. Danke für die Rückmeldung!
Wie man die tatsächliche Versionsnummer heraus bekommt, konnte ich leider auch noch nicht herausfinden.
Gruß,
Jan
Hi,
wie schätzt Du die Aussichten auf eine Weiterentwicklung unter Rust ein?
Kann man den firefox-sync server jetzt weiterlaufen lassen oder sollte man das Projekt lieber direkt beenden?
LG
Samuel
Hi,
ich habe was zum Stand des Projekts gefunden, vielleicht kennst du das schon Jan, ist aber vielleicht für andere interessant?
Nur ein paar Infos zum Umstieg auf rust und den Betrieb unter python-2.7.
LG
Samuel
https://github.com/mozilla-services/syncserver/issues/189
Hi Samuel,
ich hatte mich schon vor einiger Zeit mal damit befasst und hier lief erst mal gar nichts mit der neuen Implementierung.
Mozilla hat das ganze ja auch gerade auf den mobilen Plattformen verschlimmbessert. Ich bin mir also nicht sicher, ob dies zukünftig noch eine große Rolle spielen wird.
Gruß,
Jan
Okay, danke für die Antwort. Ich habe den sync-server nach Deiner Anleitung unter Ubuntu 20.04 focal aufgesetzt und er läuft so einigermaßen. Ist das vertretbar den weiterlaufen zu lassen wegen EOL von python?
LG
Samuel
Hi Samuel,
momentan sehe ich da keine andere Möglichkeit, als den alten Sync Server fürs erste weiter zu verwenden.
Gruß,
Jan
Ich wollte da eigentlich den Link zum github Issue dazu, das etwas informativer ist:
https://github.com/mozilla-services/syncserver/issues/189