# 📦 Guide: Desktop App Packaging (Linux, Windows, macOS) Dieses Dokument beschreibt, wie die Meldestelle Desktop App für verschiedene Betriebssysteme paketiert wird. Wir nutzen einen hybriden Ansatz aus **Gradle (Compose-Desktop)** für lokale Linux-Builds und **Conveyor** für das Cross-Packaging (Windows/macOS) von Linux aus. --- ## 1. Voraussetzungen ### Linux (Entwicklungsrechner / Fedora) Um native Pakete bauen zu können, müssen folgende Werkzeuge auf dem System vorhanden sein: ```bash # Für RPM-Pakete (Fedora) sudo dnf install rpm-build # Für DEB-Pakete (Ubuntu/Debian) sudo apt install dpkg-dev fakeroot ``` ### Conveyor (Cross-Packaging Tool) Conveyor wird benötigt, um von Linux aus Windows-Installer (.msi) oder macOS-Pakete zu erzeugen. **Installation auf Fedora/Linux:** Da automatisierte Skripte manchmal unzuverlässig sind, hier der direkte Weg über das Binär-Paket: 1. **Tarball herunterladen:** Besuchen Sie [https://downloads.hydraulic.dev/conveyor/download.html](https://downloads.hydraulic.dev/conveyor/download.html) und laden Sie die neueste `linux-amd64.tar.gz` Datei herunter. 2. **Manuelle Installation:** ```bash # Entpacken tar -xvf hydraulic-conveyor-*-linux-amd64.tar.gz # In den Pfad verschieben sudo mv conveyor /usr/local/bin/ ``` 3. **Verifizieren:** ```bash conveyor --version ``` --- ## 2. Lokale Linux-Builds (Gradle) Die schnellste Methode, um während der Entwicklung ein installierbares Paket für das eigene System zu erstellen. ### RPM-Paket (Fedora) ```bash ./gradlew :frontend:shells:meldestelle-desktop:packageRpm ``` *Ausgabe: `frontend/shells:meldestelle-desktop/build/compose/binaries/main/rpm/`* ### DEB-Paket (Ubuntu/Debian) ```bash ./gradlew :frontend:shells:meldestelle-desktop:packageDeb ``` *Ausgabe: `frontend/shells:meldestelle-desktop/build/compose/binaries/main/deb/`* ### Portable Version (Ohne Installation) ```bash ./gradlew :frontend:shells:meldestelle-desktop:createDistributable ``` *Ausgabe: `frontend/shells:meldestelle-desktop/build/compose/binaries/main/app/`* --- ## 3. Cross-Packaging mit Conveyor Conveyor nutzt die kompilierte JAR-Datei und schnürt daraus Pakete für alle Zielplattformen. ### Schritt 1: JAR erstellen ```bash ./gradlew :frontend:shells:meldestelle-desktop:jvmJar ``` ### Schritt 2: Pakete bauen ```bash # Erstellt den Windows-Installer und die HTML-Downloadseite conveyor make site ``` ### Schritt 3: Ergebnisse Die fertigen Installer (z.B. `.msi` für Windows) befinden sich im neu erstellten Ordner `output/`. --- ## 4. Problembehandlung & Optimierung ### Native Access Warnungen Die App benötigt Zugriff auf native Bibliotheken (Netty/SQLite). Der notwendige Parameter `--enable-native-access=ALL-UNNAMED` ist bereits fest hinterlegt. ### Firewall-Konfiguration Für Netzwerk-Tests (Discovery/Chat) müssen die Ports 8090, 8080 und 5353 (UDP) geöffnet sein. Nutzen Sie dafür das bereitgestellte Skript: ```bash sudo ./setup-firewall-linux.sh ```