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).
tarsowiecurloderwget.- Internetzugang für den einmaligen Download (ca. 370 MB).
- Kein systemweites Python oder Perl, kein Docker, keine
sudo-Rechte. - Keine Änderungen an
/etcoder amPATH.
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
.envwird mitchmod 600angelegt und enthältAPP_ENCRYPTION_KEY,SESSION_SECRETund den Argon2id-Passwort-Hash.data/gehört dem Benutzer, der die Anwendung startet. Temporäre Secret-Dateien werden auf0600gesetzt, Arbeitsverzeichnisse auf0700.- Empfehlung: Betrieb im Benutzerverzeichnis,
chmod 700auf 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.shinklusive Downloads undcpanm-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.