Eigener Sync-Server für Firefox (Rust): Difference between revisions

From
Jump to navigation Jump to search
No edit summary
No edit summary
Line 22: Line 22:
Die Einrichtung mit Podman wird kurz gezeigt. Die Kobination mit Ansible wird nicht betrachtet.
Die Einrichtung mit Podman wird kurz gezeigt. Die Kobination mit Ansible wird nicht betrachtet.


== Schritte ==
== Schritte für Native konfiguration (ohne Virtualisierung) ==


Die Installation wird auf Arch Linux im Oktober 2022 durchgeführt.
Die Installation wird auf [https://archlinux.org Arch Linux] im Oktober 2022 durchgeführt.
Die Technologien und Konfigurationen verändern sich mit der Zeit, vor allem bei der Konfiguration von dem Syncstorage-Server sollte auf die aktuelle Beispielconfig geschaut werden.
Die Technologien und Konfigurationen verändern sich mit der Zeit, vor allem bei der Konfiguration von dem Syncstorage-Server sollte auf die aktuelle Beispielconfig geschaut werden.
Die Anleitung auf dieser Seite nimmt [https://github.com/mozilla-services/syncstorage-rs/blob/3a18de01bbf5b5c0bcb87d4176fde14840629ae2/config/local.example.toml] als Basis.
Die Anleitung auf dieser Seite nimmt [https://github.com/mozilla-services/syncstorage-rs/blob/3a18de01bbf5b5c0bcb87d4176fde14840629ae2/config/local.example.toml] als Basis.
Line 55: Line 55:
=== Erster start vom Sync-Server ===
=== Erster start vom Sync-Server ===


In Configdatei: `mysql://syncstorage:**hidden**@localhost/syncstorage`
In Configdatei: <code>mysql://syncstorage:**hidden**@localhost/syncstorage</code>


$ head -c 20 /dev/urandom | sha1sum # generieren des master_secrets
$ head -c 20 /dev/urandom | sha1sum # generieren des master_secrets
Line 81: Line 81:
# Example Tokenserver settings:
# Example Tokenserver settings:
disable_syncstorage = false
disable_syncstorage = false
tokenserver.database_url = "mysql://syncstorage:ix79unOS0nF9jvTgVsQS9Q01jseiYFBq@localhost/syncstorage_rs"
tokenserver.database_url = "mysql://syncstorage:**hidden**@localhost/syncstorage_rs"
tokenserver.enabled = true
tokenserver.enabled = true
tokenserver.fxa_email_domain = "api.accounts.stage.mozaws.net"
tokenserver.fxa_email_domain = "api.accounts.stage.mozaws.net"
Line 96: Line 96:
cors_allowed_origin = "null"
cors_allowed_origin = "null"
# cors_max_age = 86400
# cors_max_age = 86400

</pre>
</pre>

=== Nginx Reverse Proxy ===

== Rootless Podman ==

Für rootless-podman müssen dem Nutzer. Siehe [https://docs.podman.io/en/latest/markdown/podman.1.html#rootless-mode Rootless mode] in der man page von podman.

$ sudo pacman -S podman
$ echo USERNAME:10000:65536 >> /etc/subuid
$ echo USERNAME:10000:65536 >> /etc/subgid
$ su USERNAME # neu anmelden in der aktuellen shell um Änderung Effektiv zu machen.

Anschließend muss das <code>Dockerfile</code> und die <code>docker-compose.yml</code> noch angepasst werden. Bei den Containernamen muss noch ein docker.io/ geprefixed werden (Dieser Schritt fällt weg, wenn [https://github.com/mozilla-services/syncstorage-rs/pull/1431 mein PR] gemerged wurde).


== Ressourcen ==
== Ressourcen ==
Line 104: Line 116:
# [[W2022-ITS#Eigener_Sync-Server_f.C3.BCr_Firefox_.28Rust.29|Projektbeschreibung]]
# [[W2022-ITS#Eigener_Sync-Server_f.C3.BCr_Firefox_.28Rust.29|Projektbeschreibung]]
# Arch linux AUR-Paket: https://aur.archlinux.org/packages/firefox-syncstorage-git#comment-840519
# Arch linux AUR-Paket: https://aur.archlinux.org/packages/firefox-syncstorage-git#comment-840519
# Möglicherweise hilfreicher issue zum debuggen vom Reverse-Proxy: https://github.com/mozilla-services/syncstorage-rs/issues/1217

== Zusätzliche Referenzen ==

* https://github.com/mozilla-services/syncstorage-rs/issues/1217
*

Revision as of 20:44, 30 October 2022

Firefox Sync ist ein Service zum Synchronisieren von Bookmarks, Passwörtern und Browser History. Diese werden zentral auf Mozilla-Servern verschlüsselt gespeichert.[1] Der Dienst ist Open Source (MPLv2) und lässt sich selbst hosten. Derzeit läuft in der Informatik ein eigener Sync-Server für Firefox der Version 1.5. Seitdem gab es eine Neuimplementierung in Rust[2]. Bei diesem Artikel handelt es sich um das Aufsetzen und Einrichten der Rust-Neuimplementierung.

Aufbau

Firefox Sync besteht aus zwei Komponenten:

  • Account Service
  • Sync Storage

Beide lassen sich mit der gleichen Datenbank und mit dem gleichen Programm parallel laufen lassen. Zwischenzeitlich sah es so aus, als müsste zusätzlich zu dem Rust-Storage der legacy python2 syncserver als tokenserver laufen[3]. Dies stellte sich als veraltete Information hearus heraus. Der Syncstorage-rs implementiert nun auch den Tokenserver und das Setup kommt ohne den legacy python2 syncserver aus.

Ausblick

Der nächste naheliegende Schritt ist das setup mit Docker bzw. Podman zu erweitern und möglicherweise mittels Ansible zu verwalten. Die Einrichtung mit Podman wird kurz gezeigt. Die Kobination mit Ansible wird nicht betrachtet.

Schritte für Native konfiguration (ohne Virtualisierung)

Die Installation wird auf Arch Linux im Oktober 2022 durchgeführt. Die Technologien und Konfigurationen verändern sich mit der Zeit, vor allem bei der Konfiguration von dem Syncstorage-Server sollte auf die aktuelle Beispielconfig geschaut werden. Die Anleitung auf dieser Seite nimmt [4] als Basis.

Einrichten von Mysql für Sync-Server

$ sudo pacman -S mariadb
$ sudo systemctl start mariadb
$ sudo mysql_secure_installation
$ mysql -u root -p
[mariadb]$ CREATE USER syncstorage IDENTIFIED BY '**hidden**';
[mariadb]$ CREATE DATABASE syncstorage_rs;
[mariadb]$ GRANT ALL PRIVILEGES on syncstorage_rs.* to syncstorage;

Tabellen für tokenserver erstellen.[5] Hier verwende ich die gleiche Datenbank `syncstorage_rs` für den Tokenserver, da sich die Tabellennamen nicht überschneiden und es so auch in der AUR-Diskussion beschrieben wird. Die Konsole befindet sich im Git-Verzeichnis von https://github.com/mozilla-services/syncstorage-rs

$ cargo install diesel_cli
$ diesel --database-url mysql://syncstorage:ix79unOS0nF9jvTgVsQS9Q01jseiYFBq@localhost/syncstorage_rs migration --migration-dir syncstorage/src/tokenserver/migrations/ run
$ mysql -u syncstorage -p
[mariadb]$ USE syncstorage_rs;
[mariadb]$ INSERT INTO `services` (`id`, `service`, `pattern`) VALUES ('1', 'sync-1.5', '{node}/1.5/{uid}');
[mariadb]$ INSERT INTO `nodes` (`id`, `service`, `node`, `available`, `current_load`, `capacity`, `downed`, `backoff`) VALUES ('1', '1', 'http://localhost:8000', '1', '0', '1', '0', '0');

Tokenserver starten. Die Konsole befindet sich weiterhin im Git-Verzeichnis von https://github.com/mozilla-services/syncstorage-rs

$ make run

Erster start vom Sync-Server

In Configdatei: mysql://syncstorage:**hidden**@localhost/syncstorage

$ head -c 20 /dev/urandom | sha1sum  # generieren des master_secrets
$ cp config/local.example.toml config/local.toml
$ vim config/local.toml
# Example MySQL DSN:
database_url = "mysql://syncstorage:ix79unOS0nF9jvTgVsQS9Q01jseiYFBq@localhost/syncstorage_rs"

# Example Spanner DSN:
# database_url="spanner://projects/SAMPLE_GCP_PROJECT/instances/SAMPLE_SPANNER_INSTANCE/databases/SAMPLE_SPANNER_DB"

"limits.max_total_records"=1666 # See issues #298/#333
master_secret = "7102dceffaf5ce47e5e16b94be8bd729cf74c3bc"

# removing this line will default to moz_json formatted logs (which is preferred for production envs)
human_logs = 1

# enable quota limits
enable_quota = 0
# set the quota limit to 2GB.
# max_quota_limit = 200000000

# Example Tokenserver settings:
disable_syncstorage = false
tokenserver.database_url = "mysql://syncstorage:**hidden**@localhost/syncstorage_rs"
tokenserver.enabled = true
tokenserver.fxa_email_domain = "api.accounts.stage.mozaws.net"
tokenserver.fxa_metrics_hash_secret = "7102dceffaf5ce47e5e16b94be8bd729cf74c3bc"
tokenserver.fxa_oauth_server_url = "https://oauth.accounts.firefox.com"
tokenserver.fxa_browserid_audience = "https://token.stage.mozaws.net"
tokenserver.fxa_browserid_issuer = "https://api-accounts.stage.mozaws.net"
tokenserver.fxa_browserid_server_url = "https://verifier.stage.mozaws.net/v2"
tokenserver.test_mode_enabled = false
tokenserver.additional_blocking_threads_for_fxa_requests = 2

# cors settings
# cors_allowed_origin = "localhost"
cors_allowed_origin = "null"
# cors_max_age = 86400

Nginx Reverse Proxy

Rootless Podman

Für rootless-podman müssen dem Nutzer. Siehe Rootless mode in der man page von podman.

$ sudo pacman -S podman
$ echo USERNAME:10000:65536 >> /etc/subuid
$ echo USERNAME:10000:65536 >> /etc/subgid
$ su USERNAME # neu anmelden in der aktuellen shell um Änderung Effektiv zu machen.

Anschließend muss das Dockerfile und die docker-compose.yml noch angepasst werden. Bei den Containernamen muss noch ein docker.io/ geprefixed werden (Dieser Schritt fällt weg, wenn mein PR gemerged wurde).

Ressourcen

  1. Artikel in diesem Wiki: Eigener Sync-Server für Firefox
  2. Projektbeschreibung
  3. Arch linux AUR-Paket: https://aur.archlinux.org/packages/firefox-syncstorage-git#comment-840519
  4. Möglicherweise hilfreicher issue zum debuggen vom Reverse-Proxy: https://github.com/mozilla-services/syncstorage-rs/issues/1217