feat: Offline-Bibliothek + Download-only-Modus
Neuer Modus in der GUI: Image nur herunterladen und dauerhaft unter ./downloads/library/ ablegen, ohne USB-Stick. Baut sich so vorab eine komplette Offline-Sammlung aller macOS-Versionen auf (z.B. auf externe Platte kopierbar). Stick-Jobs pruefen jetzt IMMER zuerst die lokale Bibliothek und ueberspringen den Download bei Treffer -- jeder normale Stick-Bau traegt so nebenbei zur Bibliothek bei. Backend: installer.py bekommt job_type (stick|download), persistente Downloads in library/<name>/ mit meta.json + atomarem .part-Rename, neue /api/library. Frontend: Modus-Umschalter, Bibliotheks-Status, Offline-Badges in der Versionsliste. Live getestet auf aria-wohnung: Container neu gebaut, Katalog laedt 37 Installer, Download-Job End-to-End ueber die echte API (Cache-Miss dann Cache-Hit verifiziert), Stick-Job-Validierung weiterhin intakt.
This commit is contained in:
@@ -52,7 +52,35 @@ kein Bug im eigentlichen Sinn, sondern ein Zeichen dass sich intern was
|
||||
geaendert hat — dann muss `backend/installer.py` (`_extract_recovery_dmg`)
|
||||
angepasst werden.
|
||||
|
||||
### 3. USB-Geraete-Erkennung
|
||||
### 3. Offline-Bibliothek / "nur herunterladen"-Modus
|
||||
Oben in der GUI laesst sich per Umschalter zwischen zwei Modi waehlen:
|
||||
|
||||
- **"Auf USB-Stick schreiben"** (Standard) — wie bisher.
|
||||
- **"Nur herunterladen (Offline-Bibliothek)"** — laedt ausschliesslich das
|
||||
Original-Image (`BaseSystem.dmg`/`InstallESD.dmg` bzw. `InstallAssistant.pkg`,
|
||||
je nach Version) und legt es **dauerhaft** unter `./downloads/library/<name>/`
|
||||
ab (inkl. `meta.json` mit Titel/Version/Groesse/Download-Zeitpunkt). Kein
|
||||
Geraet noetig, nichts wird geloescht.
|
||||
|
||||
Damit kannst du dir vorab — solange Internet da ist — eine komplette
|
||||
Offline-Sammlung aller verfuegbaren macOS-Versionen aufbauen. Weil die
|
||||
Downloads im Bind-Mount `./downloads` liegen (siehe oben, kein Docker-Volume),
|
||||
reicht es, den kompletten Projektordner (inkl. `downloads/library/`) auf eine
|
||||
externe Platte zu kopieren — dort ist dann alles fuer den Stick-Bau parat,
|
||||
auch ganz ohne Internetzugang.
|
||||
|
||||
**Wichtig:** ein "Stick erstellen"-Job prueft VOR jedem Download automatisch,
|
||||
ob das Image schon in der Bibliothek liegt (`installer.get_cached_payload`),
|
||||
und ueberspringt den Download dann komplett — das gilt fuer beide Modi.
|
||||
Jeder normale Stick-Bau traegt also nebenbei zur Bibliothek bei, und ein
|
||||
spaeterer Stick-Bau aus derselben Bibliothek (z.B. von der externen Platte)
|
||||
laedt nichts erneut herunter.
|
||||
|
||||
Die GUI zeigt oben die Gesamtgroesse + Anzahl bereits heruntergeladener
|
||||
Installer an, und markiert bereits vorhandene Versionen in der Auswahlliste
|
||||
mit "bereits offline vorhanden".
|
||||
|
||||
### 4. USB-Geraete-Erkennung
|
||||
Der Container laeuft mit `privileged: true` und mountet `/dev` sowie
|
||||
`/run/udev` vom Host durch — noetig, um Sticks direkt zu partitionieren
|
||||
und zu beschreiben. Das ist bewusst so gebaut, bedeutet aber: der Container
|
||||
|
||||
Reference in New Issue
Block a user