• v0.8.0-beta.3 8800e781b0

    v0.8.0-beta.3 (Beta) Pre-release

    julian released this 2026-11-04 21:03:08 +01:00 | 3 commits to main since this release

    Release Notes — v0.8.0-beta.3

    Status: Vorabversion (Beta / Prerelease). Nicht produktionsreif, nicht vollständig getestet.
    Datum: 2026-11-04

    Neu in 0.8.0-beta.3: vollständig portable Architektur

    Die Anwendung bringt ihre komplette Laufzeit im eigenen Ordner unter und startet
    nichts aus dem System.

    M365-to-Exchange-Sync/
    ├── setup.bat | start.bat | setup.sh | start.sh
    ├── backend/            FastAPI
    ├── frontend/dist/      gebautes React-Frontend
    ├── runtime/
    │   ├── python/         CPython 3.12.16 (python-build-standalone)
    │   ├── perl/           Windows: Strawberry Perl 5.42.3 · Linux: relocatable-perl 5.44
    │   └── imapsync/       imapsync 2.326
    ├── data/
    │   ├── database/       SQLite (app.db)
    │   ├── logs/
    │   └── tmp/
    └── .env
    
    • Kein systemweites Python mehr nötig. setup.bat lädt CPython 3.12
      (portable, SHA-256 geprüft) nach runtime/python und installiert die
      gepinnten Pakete dort hinein. start.bat startet ausschließlich diesen
      Interpreter.
    • Kein systemweites Perl, kein PATH-Eintrag. Perl kommt als portable
      Verteilung nach runtime/perl, imapsync als Skript nach runtime/imapsync.
      Der Runner startet runtime\perl\perl\bin\perl.exe runtime\imapsync\imapsync
      mit kontrollierter Umgebung (PATH/PERL5LIB nur mit lokalen Pfaden).
    • Fremde Installationen werden ignoriert. Ein imapsync.bat 0.22 oder ein
      systemweites Perl im PATH beeinflusst die Anwendung nicht mehr (früher wurde
      genau das als „inkompatibel (0.22)" erkannt).
    • Alle Daten im Programmordner: data/database (SQLite), data/logs,
      data/tmp. Ältere Installationen mit data/app.db werden beim ersten Start
      automatisch übernommen.
    • Relative Pfade in .env (DATA_DIR=data,
      IMAPSYNC_PATH=runtime/imapsync/imapsync, PERL_PATH=…) — der komplette
      Ordner lässt sich verschieben, auch in Pfade mit Leerzeichen.
    • Verständliche Fehlermeldungen, wenn die Laufzeit fehlt:
      [Fehler] Portable Laufzeit ist unvollständig (Perl, imapsync). Bitte setup.bat ausführen.
    • Keine Systemänderung: keine Registry-Einträge, keine Dienste, keine
      geplanten Aufgaben, keine AppData/ProgramData-Daten. Deinstallation =
      Ordner löschen (entfernt auch Tokens, Datenbank und Logs).

    Enthalten aus den Vorgängerversionen: Portauswahl mit Fallback
    (WinError 10013), Browser erst nach Serverstart, Erkennung einer zweiten
    Instanz, Migration über OAuth2/XOAUTH2 mit imapsync, persistente Warteschlange
    mit Scheduler/Retry/Recovery, React-Oberfläche, MIT-Lizenz.

    Unterstützte Betriebssysteme

    Plattform Status
    Windows 10 (1803+)/11, Server 2019+ getestet (portable Laufzeit, Start, Verschieben, Migration)
    Debian 12 / Ubuntu 22.04+ vorbereitet, nicht getestet (keine Linux-Umgebung)

    Installation

    Windows:

    ZIP entpacken → setup.bat (Administratorpasswort, min. 12 Zeichen) → start.bat
    

    Linux:

    tar xzf M365-to-Exchange-Sync-Linux.tar.gz
    cd M365-to-Exchange-Sync && ./setup.sh && ./start.sh
    

    Download der Laufzeit beim Setup: ca. 360 MB (Windows) bzw. 370 MB (Linux),
    einmalig. Bei erneutem Setup wird der Cache in runtime/.cache genutzt, solange
    die Prüfsumme passt.

    Voraussetzungen

    • Windows 10 1803+ (nutzt tar.exe) bzw. Linux x86_64 mit tar und curl/wget.
    • Internetzugang beim Setup (offizielle Quellen, SHA-256-geprüft).
    • Für Migrationen: eigene Entra-App-Registrierung (Public Client, Redirect-URI
      http://127.0.0.1:<port>/api/v1/oauth/callback, Scope
      https://outlook.office.com/IMAP.AccessAsUser.All).
    • Kein Docker, keine Administratorrechte, keine PATH-/Registry-Änderungen.

    Getestete Funktionen

    • Portable Python-Laufzeit (runtime/python/python.exe, CPython 3.12.16),
      inklusive Installation der gepinnten Pakete in diese Laufzeit.
    • Portable Perl-Laufzeit (Strawberry 5.42.3) mit 27 Modulen (u. a.
      Net::SSLeay, IO::Socket::SSL, Mail::IMAPClient).
    • Lokales imapsync 2.326 (Start über runtime/perl, --version geprüft).
    • Fremdes imapsync.bat 0.22 im PATH wird ignoriert — die Anwendung meldet
      2.326 aus runtime/imapsync.
    • Start aus dem entpackten Archiv in einem leeren Verzeichnis, ohne
      APP_PORT, mit Ausweichport; Health, Oberfläche, Login, CRUD.
    • Verschieben des Programmordners (inkl. Pfad mit Leerzeichen), Neustart
      danach, Daten und Laufzeit intakt.
    • Wiederholtes Setup ändert .env nicht und lädt die Laufzeit nicht neu.
    • Echte lokale IMAP-Migration mit dem lokalen imapsync.
    • Automatisierte Tests: Backend-Suite inkl. neuer Runtime-/Porttests,
      Frontend-Suite, TypeScript-Prüfung, Produktionsbuild.

    Nicht getestete Funktionen

    • Microsoft-365-Live-Anmeldung und -Migration: kein Testkonto, keine
      Entra-App. OAuth ist implementiert und mit Mocks getestet, nicht live.
    • Linux-Betrieb: setup.sh/start.sh und die Linux-Laufzeit
      (relocatable-perl) sind vorbereitet, aber nie ausgeführt.
    • Echtes Strg+C in einer Windows-Konsole: Signalzustellung in der
      Testumgebung nicht reproduzierbar; geordnetes Herunterfahren wurde in-process
      mit echtem uvicorn geprüft.
    • Browser-Klicktest: Werkzeug blockiert Loopback; ersetzt durch HTTP-Tests.

    Bekannte Einschränkungen

    • Setup benötigt Internet (kein Offline-Bundle).
    • Strawberry Perl veröffentlicht keine Prüfsummen-Datei; die SHA-256 wurde
      einmalig aus dem offiziellen Release ermittelt (im Skript dokumentiert).
    • Genau eine Backend-Instanz pro Datenverzeichnis.
    • Der Ausweichport ist nicht dauerhaft; für eine fest registrierte
      OAuth-Redirect-URI APP_PORT setzen.
    • runtime/ ist groß (Windows: ca. 1,3 GB nach dem Setup) — bewusst, dafür
      keine Systeminstallationen.

    Sicherheitshinweise

    • Keine Microsoft-Passwörter in der Anwendung; Anmeldung im Browser,
      Tokens verschlüsselt (Fernet) in data/database/app.db.
    • .env enthält APP_ENCRYPTION_KEY, SESSION_SECRET und den
      Argon2id-Passwort-Hash — Datei schützen (Windows: ACL, Linux: chmod 600).
    • Temporäre Token-/Passwortdateien in data/tmp/<run-id>/ mit 0600 bzw.
      restriktiver DACL, Löschung nach jedem Lauf; Logs werden redigiert.
    • Bindung ausschließlich an 127.0.0.1.
    • Der Download der Laufzeit erfolgt ausschließlich von den dokumentierten
      Quellen und wird vor dem Entpacken per SHA-256 geprüft.
    • Beim Verschieben des Ordners bleiben die Dateirechte erhalten; bei
      Kopien auf Datenträger ohne Rechteübernahme (FAT/exFAT) können Tokens und
      Schlüssel für andere Benutzer lesbar werden.

    Lizenz

    Eigener Code: MIT (LICENSE). Nicht gebündelt: imapsync (NO LIMIT PUBLIC
    LICENSE, wird beim Setup von der offiziellen Quelle geladen), Python
    (PSF), Strawberry Perl (Artistic/GPL) bzw. relocatable-perl, CPAN-Module,
    Frontend-Bibliotheken (MIT/ISC). Details: LICENSE.md.

    Upgrade von 0.8.0-beta.2

    1. Server beenden, Ordner sichern.
    2. Neues Archiv in einen neuen Ordner entpacken (oder alten Ordner ersetzen).
    3. setup.bat — übernimmt .env und data/ falls vorhanden; die alte
      data/app.db wird beim Start automatisch nach data/database/app.db
      verschoben.
    4. start.bat.

    Die Migrationen laufen automatisch.

    Prüfsummen

    SHA256SUMS.txt enthält die SHA-256-Werte für beide Archive und diese Release
    Notes.

    Downloads