Firefox Sync
Firefox Sync ist die Software, mit der alle Lesezeichen, Passwörter usw. unter allen Firefox Installationen synchronisiert werden können. Wer diese Daten nicht auf den Servern von Mozilla ablegen möchte, dem liegt es offen, sich einen eigenen ffsync-Server aufzusetzen. Mit Docker kann man sich ein entsprechendes Image bauen und den Service samt einer Postgres-Datenbank auf dem Heimserver laufen lassen.
Bauen eines eigenen ffsync-Servers
-
Auschecken des Git Repositories
git clone https://github.com/mozilla-services/syncserver
-
Bauen des Images
Der Name kann z. B. lauten: ffsyncdocker build -t NAME_DES_IMAGES .
-
Docker Container aufsetzen mit Postgres-Datenbank
-
docker-compose.yml
version: '3' services: ffsync_app: image: NAME_DES_IMAGES container_name: ffsync_app environment: - SYNCSERVER_PUBLIC_URL=https://ffsync.meine.domain - SYNCSERVER_SECRET=SECRET - SYNCSERVER_SQLURI=postgresql://ffsync:ffsync@ffsync_db:5432/ffsync - SYNCSERVER_BATCH_UPLOAD_ENABLED=true - SYNCSERVER_FORCE_WSGI_ENVIRON=true - SYNCSERVER_ALLOW_NEW_USER=true - PORT=5000 - TZ=Europe/Berlin ports: - 25000:5000 links: - ffsync_db ffsync_db: image: postgres:11.8 container_name: ffsync_db volumes: - ./db:/var/lib/postgresql/data environment: - TZ=Europe/Berlin - POSTGRES_USER=ffsync
-
- Folgende Werte in der docker-compse.yml Datei ersetzen
-
Erstellen des SECRETs
head -c 20 /dev/urandom | sha1sum
Diesen Wert in die Zeile SYNCSERVER_SECRET eintragen anstelle von SECRET
-
ffsync.meine.domain durch die eigene Domain ersetzen
- NAME_DES_IMAGES durch den Namen des Images von docker build ersetzen
-
- Nun muss natürlich noch ein entsprechender Proxy (z. B. nginx) auf die Adresse http://SERVER_IP:25000 geleitet werden, damit Firefox drauf zugreifen kann. Hier sollte auch ein gültiges Zertifikat genutzt werden, damit Firefox die Verbindung akzeptiert.
Verbindung mit dem eigenen ffsync-Server herstellen
Achtung: Wer bereits mit den Mozilla Servern synchronisiert hat, sollte unbedingt alle Daten vorher sichern!
Für eine erfolgreiche Verbindung muss zuerst ein eigenes Konto bei Mozilla erstellt worden sein. Danach kann die Adresse in "about:config" angepasst werden.
Wenn bereits ein Konto bei Mozilla existiert und nur auf den Heimserver wechseln möchte, genügt die Änderung der Adresse.
Anpassen der Adresse in "about:config"
- Öffnen der Einstellungen mit "about:config" in der Adressleiste
- Bestätigen des Hinweises
- Suchen nach "sync"
- Ersetzten der Adresse in "identity.sync.tokenserver.uri" durch den Wert "https://ffsync.meine.domain/token/1.0/sync/1.5"
- Klicken auf das "F"-Symbol oben rechts im Firefox-Browser und "Jetzt synchronisieren" anwählen.
Update 1: Problem nach Aktualisierung mit fehlenden Spalten "column "keys_changed_at" does not exist"
Sofern man den Server bereits seit einiger Zeit am Laufen hat, kann es nach dem Bauen einer neuen Version vorkommen, dass die Synchronisation nicht mehr funktioniert. Die Spalten key_changed_at und node fehlen in der Tabelle users.
In der Log-Dateien tritt folgender Fehler auf:
ffsync_app | ProgrammingError: (psycopg2.errors.UndefinedColumn) column "keys_changed_at" does not exist
ffsync_app | LINE 3: keys_changed_at, node
ffsync_app | ^
ffsync_app |
ffsync_app | [SQL: select
ffsync_app | uid, generation, client_state, created_at, replaced_at,
ffsync_app | keys_changed_at, node
ffsync_app | from
ffsync_app | users
ffsync_app | where
ffsync_app | email = %(email)s
ffsync_app | and
ffsync_app | service = %(service)s
ffsync_app | order by
ffsync_app | created_at desc, uid desc
ffsync_app | limit
ffsync_app | 20
ffsync_app | ]
Zu lösen ist das Problem, indem man die beiden Spalten erstellt.
Aufrufen der Bash im Docker Container:
# docker exec -it ffsync_db /bin/bash
Dann im Container sich mit dem entsprechenden Datenbankbenutzer anmelden:
# psql ffsync ffsync
psql (11.8 (Debian 11.8-1.pgdg90+1))
Type "help" for help.
Die Tabelle anzeigen lassen:
ffsync=# select * from users;
uid | service | email | generation | client_state | created_at | replaced_at
-----+----------+-----------------------------------------------------------+---------------+----------------------------------+---------------+-------------
1 | sync-1.5 | ID@api.accounts.firefox.com | 1561911882276 | ID | DT |
2 | sync-1.5 | IDapi.accounts.firefox.com | 1589809259083 | ID | DT |
(2 rows)
Erzeugen der beiden Spalten mit dem Typ bigint:
ffsync=# alter table users add column keys_changed_at bigint;
ALTER TABLE
ffsync=# alter table users add column node bigint;
ALTER TABLE
ffsync=# select * from users;
uid | service | email | generation | client_state | created_at | replaced_at | keys_changed_at | node
-----+----------+-----------------------------------------------------------+---------------+----------------------------------+---------------+-------------+-----------------+------
1 | sync-1.5 | ID@api.accounts.firefox.com | 1561911882276 | ID | DT | | |
2 | sync-1.5 | ID@api.accounts.firefox.com | 1589809259083 | ID | DT | | |
(2 rows)
Damit sollte die Anmeldung wieder möglich sein und sich die Clients synchronisieren.
No Comments