# VitosUpdater VitosUpdater ist eine einheitliche Oberfläche zum Suchen, Installieren, Aktualisieren und Deinstallieren von Software über mehrere Paketmanager unter Windows 10/11. Die Oberfläche ist vollständig deutsch. **Stand:** Phase 1 (WinGet, Entdecken/Installiert/Updates) und der Selbst-Updater sind umgesetzt. Warteschlange, weitere Paketmanager, Bundles, Tray und Backup folgen in den nächsten Phasen. ## Funktionen (aktueller Stand) - WinGet-Erkennung beim Start (PATH, danach `%LOCALAPPDATA%\Microsoft\WindowsApps`) mit Versionsanzeige; Hinweis und Ein-Klick-Installation des „App-Installers“, falls WinGet fehlt - Optional: PowerShell-Modul `Microsoft.WinGet.Client` (strukturierte JSON-Daten); ohne Modul wird die lokalisierte Tabellenausgabe von `winget.exe` ausgewertet - Ansichten: Pakete entdecken (Suche), Software-Updates (mit Zähler in der Seitenleiste), Installierte Pakete – mit Details-Panel und virtualisierter Tabelle (flüssig auch mit 5000+ Zeilen) - Dunkles Design (Standard), helles Design, „System folgen“, Akzentfarbe wählbar - Fensterposition und -größe werden gemerkt - **Selbst-Update** von VitosUpdater (siehe unten) ## Voraussetzungen | Komponente | Hinweis | |---|---| | Rust (rustup, MSVC-Toolchain) | `rustup default stable-x86_64-pc-windows-msvc` | | Node.js LTS | inkl. npm | | WebView2-Laufzeit | unter Windows 11 vorinstalliert | | Visual Studio Build Tools | Workload „Desktopentwicklung mit C++“ | | Tauri CLI | `cargo install tauri-cli --version "^2"` | | WinGet | Teil des „App-Installers“ (Microsoft Store) | ## Entwickeln und Bauen ```powershell npm install # einmalig cargo tauri dev # Entwicklungsmodus mit Hot Reload npm run check # Frontend-Typprüfung (svelte-check) cd src-tauri cargo check cargo clippy --all-targets -- -D warnings cargo test # inkl. Parser-Tests mit echter WinGet-Ausgabe .\build.ps1 # Prüfungen + Installer (NSIS) + portable EXE ``` Der portable Build liegt unter `src-tauri\target\release\vitos-updater.exe`, der Installer unter `src-tauri\target\release\bundle\nsis\`. Konfiguration, Zustand und Logs liegen in `%APPDATA%\VitosUpdater` (Logs unter `logs\`). ## Selbst-Update über Gitea VitosUpdater prüft nach dem Start und danach alle 30 Minuten (einstellbar unter *Einstellungen → Programm-Updates*, auch bei ausgeblendetem Fenster), ob eine neue Version vorliegt. Quelle: ``` https://gitea.davito.synology.me/Davito/VitosUpdater/releases/download/latest/latest.json ``` - Updates werden mit einem Minisign-Schlüsselpaar signiert und vor der Installation geprüft. Zusätzlich ist `requireSignedVersion` aktiv: Die Signatur ist an die Versionsnummer gebunden, ein Downgrade durch eine manipulierte `latest.json` ist nicht möglich. - Die Versionen werden nach SemVer verglichen; es werden nie ältere Versionen angeboten. - Bei einem neuen Update erscheint ein Popup mit Versionswechsel, Datum, Größe und den Release-Notizen. Möglich sind „Jetzt aktualisieren“, „Später erinnern“ (4 Stunden) und „Diese Version überspringen“. Eine übersprungene Version unter *Einstellungen* wieder freigeben. - Ist das Fenster ausgeblendet oder minimiert, erscheint zuerst eine Windows-Benachrichtigung. Das Popup wird gezeigt, sobald das Fenster wieder geöffnet wird. Nach der Installation startet VitosUpdater neu und zeigt „Aktualisiert auf Version x.y.z“ mit den Änderungen. ### Zertifikat (Synology / Gitea) Der Updater nutzt den Windows-Zertifikatsspeicher (Schannel) und prüft das TLS-Zertifikat immer. Die Prüfung wird **nicht** abgeschaltet. Der Server `gitea.davito.synology.me` verwendet derzeit ein öffentlich vertrauenswürdiges Let's-Encrypt-Zertifikat. Erscheint in der App die Meldung „… weil Windows dem Zertifikat nicht vertraut“ (z. B. bei einem selbst signierten Synology-Zertifikat), die Zertifizierungsstelle in Windows als vertrauenswürdig eintragen: 1. DSM: *Systemsteuerung → Sicherheit → Zertifikat → Aktion → Zertifikat exportieren*; aus dem Archiv die Datei `syno-ca-cert.crt` (die CA, nicht den privaten Schlüssel) entnehmen. 2. In PowerShell (ohne Administratorrechte, gilt für den aktuellen Benutzer): ```powershell Import-Certificate -FilePath "$env:USERPROFILE\Downloads\syno-ca-cert.crt" -CertStoreLocation Cert:\CurrentUser\Root ``` Für alle Benutzer (Administrator): `-CertStoreLocation Cert:\LocalMachine\Root`. 3. VitosUpdater neu starten. Prüfen lässt sich die Verbindung mit `curl.exe -I https://gitea.davito.synology.me`. ## Release veröffentlichen Alles erledigt `scripts\release.ps1` (Version erhöhen, bauen, signieren, `latest.json`, Commit, Tag, Push, Gitea-Release, rollendes Release `latest`, Prüfung): ```powershell powershell -ExecutionPolicy Bypass -File scripts\release.ps1 # Patch-Version powershell -ExecutionPolicy Bypass -File scripts\release.ps1 -Bump minor powershell -ExecutionPolicy Bypass -File scripts\release.ps1 -Version 1.2.0 powershell -ExecutionPolicy Bypass -File scripts\release.ps1 -NoPublish # nur bauen, Ergebnis in release-out\ ``` Commit-Nachrichten auf Deutsch schreiben: Sie bilden die Release-Notizen im Update-Popup. ### Einmalige Einrichtung 1. **Zugriffstoken:** Gitea → *Einstellungen → Anwendungen → Zugriffstoken*, Berechtigung *Repository: Lesen und Schreiben* (`write:repository`). Danach entweder dauerhaft `setx GITEA_TOKEN ""` (neues Terminal öffnen) oder die Zeile `GITEA_TOKEN=` in die Datei `.env.local` im Projektordner schreiben. Beides ist von Git ausgeschlossen. 2. **Git-Push:** läuft über den Windows Git Credential Manager (beim ersten Push anmelden). 3. **Signierschlüssel:** liegt unter `%USERPROFILE%\.vitosupdater\updater.key` (außerhalb des Repos, nur für den Benutzer lesbar). **Unbedingt sichern** (z. B. Passwortmanager oder verschlüsseltes Backup): Ohne diesen Schlüssel können keine Updates für bereits installierte Versionen signiert werden. Neu erzeugen: `cargo tauri signer generate -w "%USERPROFILE%\.vitosupdater\updater.key"` – danach den öffentlichen Schlüssel in `src-tauri\tauri.conf.json` (`plugins.updater.pubkey`) eintragen; alle bereits installierten Versionen müssten dann manuell neu installiert werden. Optional kann der Schlüssel über `TAURI_SIGNING_PRIVATE_KEY` bzw. `TAURI_SIGNING_PRIVATE_KEY_PATH` (und `TAURI_SIGNING_PRIVATE_KEY_PASSWORD`) bereitgestellt werden. ## Bekannte Einschränkungen - Das PowerShell-Modul `Microsoft.WinGet.Client` wird beim Start erkannt und genutzt, wenn vorhanden. Diese Strecke ist mangels installiertem Modul auf dem Entwicklungsrechner noch nicht mit echten Daten getestet; bei jedem Fehler wird automatisch auf die Kommandozeile zurückgegriffen. - Die Beschreibung in den Paketdetails übernimmt die Zeilenumbrüche von WinGet. - Ein Klick auf die Windows-Benachrichtigung öffnet das Fenster nicht zuverlässig; das Popup erscheint, sobald das Fenster geöffnet oder fokussiert wird.