3 Installation Linux
julian edited this page 2026-11-04 21:41:54 +01:00

Installation unter Linux

Status: vorbereitet, nicht ausgeführt getestet. Es stand keine Linux-Umgebung zur Verfügung. Die Skripte folgen derselben Logik wie unter Windows, sind dort aber nicht verifiziert.

Voraussetzungen

  • Linux x86_64 (Debian 12, Ubuntu 22.04 oder verwandt).
  • tar sowie curl oder wget.
  • Internetzugang für den einmaligen Download (ca. 370 MB).
  • Kein systemweites Python oder Perl, kein Docker, keine sudo-Rechte.
  • Keine Änderungen an /etc oder am PATH.

Download und Entpacken

tar xzf M365-to-Exchange-Sync-Linux.tar.gz
cd M365-to-Exchange-Sync

Das Archiv enthält bewusst keine Laufzeit. Nach dem Entpacken müssen setup.sh, start.sh und backend/ vorhanden sein.

Setup

chmod +x setup.sh start.sh update.sh
./setup.sh
Komponente Zielpfad Quelle (SHA-256 geprüft)
Python 3.12.16 runtime/python/bin/python3 python-build-standalone
Python-Pakete runtime/python/lib/python3.12/site-packages PyPI, gepinnt
Perl 5.44 runtime/perl/ relocatable-perl
imapsync 2.326 runtime/imapsync/imapsync offizielle Quelle des Autors

Die Perl-Module werden über cpanm in die portable Laufzeit installiert. Ein zweiter Lauf ergänzt nur Fehlendes und ändert die .env nicht.

./setup.sh --force-runtime     # Laufzeit vollständig neu einrichten

Erster Start

./start.sh

Der Start prüft die Laufzeit, erzeugt bei Bedarf die .env, migriert die Datenbank und bindet an 127.0.0.1. Der Browser wird über xdg-open erst geöffnet, nachdem der Server lauscht. Die tatsächliche Adresse steht in der Ausgabe, z. B. http://127.0.0.1:8000.

./start.sh --repair                  # Laufzeit prüfen und neu einrichten
M365SYNC_NO_BROWSER=1 ./start.sh     # ohne Browserstart

Bevorzugt wird APP_PORT, sonst der Port aus APP_BASE_URL, sonst 8000. Ist der Port belegt, wird der nächste freie Port verwendet und ausgegeben.

Verzeichnisse

M365-to-Exchange-Sync/
├── setup.sh, start.sh, update.sh
├── backend/              Anwendung und Migrationen
├── frontend/dist/        gebaute Oberfläche
├── runtime/              portable Laufzeit
├── data/
│   ├── database/app.db   SQLite-Datenbank
│   ├── logs/             Laufprotokolle
│   ├── tmp/              temporäre Secret-Dateien
│   └── updates/          Update-Arbeitsverzeichnis
└── .env                  Konfiguration und Schlüssel

Dateirechte

  • .env wird mit chmod 600 angelegt und enthält APP_ENCRYPTION_KEY, SESSION_SECRET und den Argon2id-Passwort-Hash.
  • data/ gehört dem Benutzer, der die Anwendung startet. Temporäre Secret-Dateien werden auf 0600 gesetzt, Arbeitsverzeichnisse auf 0700.
  • Empfehlung: Betrieb im Benutzerverzeichnis, chmod 700 auf den Programmordner.
chmod 700 /opt/m365sync
chmod 600 /opt/m365sync/.env

Beim Verschieben oder Kopieren müssen die Rechte erhalten bleiben. Geht die Rechteübernahme verloren, kann ein anderer Benutzer die Schlüssel und damit die gespeicherten Tokens lesen.

Verschieben, Deinstallation, Diagnose

Verschieben: Anwendung beenden, Ordner verschieben (alle Pfade in der .env sind relativ), ./start.sh im neuen Pfad ausführen.

Deinstallation: Anwendung beenden, bei Bedarf data/ sichern, Ordner löschen. Damit werden Datenbank, Tokens, Protokolle und Schlüssel entfernt; systemweite Einträge existieren nicht.

Diagnose aus backend/:

../runtime/python/bin/python3 -m app.cli check
../runtime/python/bin/python3 -m app.cli init     # Migrationen ausführen

check prüft Konfiguration, Datenverzeichnis, Datenbankrevision, Port, imapsync und Oberfläche; Exit-Code 0 bedeutet bereit.

Nicht getestet unter Linux

  • setup.sh inklusive Downloads und cpanm-Installation.
  • start.sh, Portauswahl und Browserstart.
  • Signalverhalten bei SIGINT/SIGTERM.
  • Dateirechte beim Verschieben oder Kopieren.
  • Die portable Perl-Laufzeit (relocatable-perl) im Zusammenspiel mit imapsync.

Diese Punkte stehen auch unter Einschränkungen.