From d39052c1ea7710585e0e24a2fd1125c2eb54caf8 Mon Sep 17 00:00:00 2001
From: Server-Bibliothek <server-bibliothek@lokal>
Date: Do, 23 Jul 2026 14:53:39 +0200
Subject: [PATCH] Installer-Dateien direkt ins Einrichtungs-Paket buendeln
---
ARCHITEKTUR.md | 43 ++++++++++++++++++++++++++++++++-----------
1 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/ARCHITEKTUR.md b/ARCHITEKTUR.md
index 3d69a05..e90bc6b 100644
--- a/ARCHITEKTUR.md
+++ b/ARCHITEKTUR.md
@@ -146,32 +146,53 @@
## 6. "Rechner einrichten" – Verteilungs-Mechanismus
Route `/einrichten` (app.py) erzeugt bei Bedarf ein individuelles
-Installations-Paket (ZIP mit `einrichten.ps1` + `Rechner-einrichten-starten.bat`),
+Installations-Paket (ZIP mit `einrichten.ps1` + `Rechner-einrichten-starten.bat`
+**+ den echten Installer-Dateien/ZIPs selbst** unter `tools/<id>.<endung>`),
statt vorab für jede Mitarbeiter/Tool-Kombination ein festes Skript zu pflegen.
+**Wichtige Design-Entscheidung (Runde r16):** Die Installer-Dateien werden
+bereits beim Erzeugen des Pakets (auf dem PC, der die Checkliste ausfüllt)
+eingebettet, nicht erst beim Ausführen auf dem Zielrechner nachgeladen. Ein
+früherer Ansatz lud die Dateien per `Invoke-WebRequest` zur Laufzeit vom
+Server nach – das erforderte Netzwerkzugriff des Zielrechners auf den Server
+in genau dem Moment der Einrichtung, was in der Praxis nicht immer gegeben
+ist (z. B. Rechner noch nicht ans Firmennetz angebunden). Jetzt braucht der
+Zielrechner für die eigentliche Installation **kein Netzwerk mehr** – nur die
+abschließende, optionale Meldung ans zentrale Protokoll (`/zuweisungen/neu`)
+versucht noch einen Netzwerkzugriff, scheitert dieser, bleibt trotzdem das
+lokale Protokoll (`protokoll.log`) vollständig.
+
Ablauf beim Ausführen auf dem Zielrechner:
-1. `.bat` kopiert sich selbst + das `.ps1` nach `C:\ClientBibliothek`
+1. `.bat` kopiert den **kompletten entpackten Ordner** (inkl. `tools/`-
+ Unterordner mit den echten Installer-Dateien) nach `C:\ClientBibliothek`
+ (per `xcopy /E /I /Y`)
2. Self-Elevation (Admin-Rechte-Anfrage) über `Start-Process -Verb RunAs`
3. Automatische Windows-Defender-Ausnahme für `C:\ClientBibliothek`
(`Add-MpPreference -ExclusionPath`) – ein einziger Pfad statt vieler
Einzelausnahmen
-4. Pro ausgewähltem Tool: entweder stille Installation (Download + Ausführung
- mit hinterlegtem Silent-Parameter, `.msi` läuft über `msiexec`) oder – bei
- Tools ohne einzelne Installer-Datei ("Ordner-Typ", z. B. portable
- Programme wie Blender) – Download als ZIP nach `C:\ClientBibliothek\pakete\`,
- **bewusst ohne automatisches Entpacken** (Entscheidung in Runde r14: der
- Zielort für portable Tools variiert, das soll eine Person bewusst
+4. Pro ausgewähltem Tool: entweder stille Installation aus der **lokal
+ mitgelieferten** Datei unter `tools/<id>.<endung>` (mit hinterlegtem
+ Silent-Parameter, `.msi` läuft über `msiexec`) oder – bei Tools ohne
+ einzelne Installer-Datei ("Ordner-Typ", z. B. portable Programme wie
+ Blender) – die mitgelieferte ZIP-Datei wird nach `C:\ClientBibliothek\pakete\`
+ kopiert, **bewusst ohne automatisches Entpacken** (Entscheidung in Runde
+ r14: der Zielort für portable Tools variiert, das soll eine Person bewusst
entscheiden)
5. Lokales Protokoll unter `C:\ClientBibliothek\protokoll.log`
-6. Automatischer POST an `/zuweisungen/neu` auf dem Server, um das zentrale
+6. Optionaler POST an `/zuweisungen/neu` auf dem Server, um das zentrale
Protokoll zu befüllen (Rechnername wird dabei über `$env:COMPUTERNAME`
- automatisch erkannt)
+ automatisch erkannt) – best effort, kein Abbruch bei Fehlschlag
Die Ordner-Struktur unter `C:\ClientBibliothek`:
-- `\downloads` – transiente Installer-Dateien, werden nach Gebrauch gelöscht
+- `\tools` – die mitgelieferten Installer-Dateien/ZIPs (Quelle für die
+ Installation, kommen direkt aus dem heruntergeladenen Paket)
- `\pakete` – ZIPs von portablen Tools, bleiben bewusst liegen
- `\protokoll.log` – lokale Mitschrift
+Serverseitig teilen sich `/einrichten` (POST) und `/software/<id>/download`
+die Hilfsfunktion `_zippe_ordner_in_bytes()` für das ZIP-Packen eines
+Ordners, um Code-Duplikation zu vermeiden.
+
**Der Client-Ordner-Pfad ist eine Konstante** (`CLIENT_ORDNER` in `app.py`,
aktuell `C:\ClientBibliothek`) – zentral anpassbar, falls die Infrastruktur
einen anderen Standardpfad vorgibt.
--
Gitblit v1.9.3