Commit Graph

8 Commits

Author SHA1 Message Date
duffyduck 1a1b4500d6 Korrupte/verwaiste Repos sichtbar machen + Live-GC sicher
Zwei Probleme nach dem alten --delete-untagged-Schaden:

1) Repos mit Tags aber ohne _layers (verwaist) tauchen nicht im
   Registry-Katalog auf -> waren in der Web-Oberflaeche unsichtbar und
   nicht loeschbar. images() listet jetzt zusaetzlich direkt aus dem
   Dateisystem (scan_fs_repositories/repo_tags), Vereinigung mit dem
   Katalog. So sind auch korrupte Repos sichtbar und ueber den
   Loeschen-Button entfernbar.

2) Die GC laeuft als separater Prozess auf dem gemounteten Speicher.
   Der In-Memory-Blob-Cache der laufenden Registry hielt geloeschte
   Blobs faelschlich fuer vorhanden -> erneuter Pull legte keine
   _layers-Verknuepfung an (Image fehlte im Katalog). Cache via
   REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR="" deaktiviert -> Live-GC sicher.

Verifiziert: korruptes Repo -> in Liste sichtbar -> Loeschen -> GC ->
erneut pushen -> Katalog korrekt und docker pull erfolgreich, ohne
Registry-Neustart.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 13:06:18 +02:00
duffyduck b24bd96917 GC: --delete-untagged entfernen (zerstoerte Multi-Arch-Images)
registry garbage-collect --delete-untagged loescht bei Multi-Arch-Images
die per-Architektur-Manifeste, die nur ueber die Manifest-Liste (Index)
referenziert sind. Die Liste/der Tag bleibt, die Kind-Manifeste sind weg
-> beim Pull "manifest unknown".

Reproduziert: zwei Multi-Arch-Images, garbage-collect --delete-untagged
markiert die Kind-Manifeste als "eligible for deletion" und loescht sie;
danach schlaegt "skopeo copy --all" mit manifest unknown fehl. Ohne das
Flag bleiben die Images intakt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 12:41:31 +02:00
duffyduck cd5beeedd3 Verwaiste Tags loeschbar machen
Ein Tag konnte im Katalog stehen, dessen Manifest aber nicht mehr
abrufbar war (Rest aus frueherem Loeschen/GC). Der Loeschen-Button
schlug dann mit "Tag nicht gefunden" fehl, der Eintrag liess sich nicht
entfernen.

delete_image entfernt jetzt zusaetzlich den Tag-Verweis direkt aus dem
Speicher: faellt der Manifest-Lookup ueber die API aus, wird der
verwaiste Tag trotzdem entfernt (und bei letztem Tag das Repository).
Pfad-Sicherheit in _safe_repo_path() gebuendelt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 12:15:58 +02:00
duffyduck 4a11aabdf3 Leeres Repository nach Loeschen des letzten Tags entfernen
Die Registry-API loescht nur Manifeste/Tags, das Repository-Verzeichnis
bleibt im Speicher und damit im Katalog ("keine Tags") stehen. Da der
Auth-Container den Registry-Speicher gemountet hat, wird das leere
Verzeichnis jetzt entfernt:
- beim Loeschen des letzten Tags direkt
- bei der Garbage Collection werden zusaetzlich alle Tag-losen
  Repositories aufgeraeumt (fuer bereits vorhandene Reste)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 11:10:27 +02:00
duffyduck b273098b50 Compose: Variablen mit Default aufloesen (${VAR:-default})
Viele docker-compose-Dateien (z. B. Graylog) setzen Images per
${IMAGE:-default}. Bisher wurde alles mit "$" uebersprungen, sodass genau
diese Images nicht gefunden wurden. Jetzt werden ${VAR:-default} und
${VAR-default} mit ihrem Standardwert aufgeloest; nur Variablen ohne
Default (${VAR}, ${VAR:?...}) bleiben uebersprungen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 10:59:01 +02:00
duffyduck 41daacd56c Images aus Fremd-Registries holen, loeschen und Speicher aufraeumen
Tab "Images" um Verwaltungsfunktionen erweitert:
- Einzel-Pull: Image aus anderer Registry (z. B. Docker Hub) per skopeo
  in die eigene Registry kopieren, optional mit Benutzername/Kennwort
  oder Access Token fuer private Quell-Registries
- Bulk-Pull: alle image-Eintraege einer docker-compose (Textfeld oder
  Datei-Upload) auf einmal holen; Variablen/eigene Registry werden ignoriert
- Digest-Dedup: bereits mit gleichem Digest vorhandene Images werden
  uebersprungen (kopiert mit --all, damit Multi-Arch-Digests matchen)
- Loeschen: Muelltonne hinter jedem Tag mit Rueckfrage
- Garbage Collection: gibt belegten Speicher frei, laeuft per registry-Binary
  (Multi-Stage-Build) direkt auf dem gemounteten Speicher, kein Docker-Socket

gunicorn: 1 Worker (gemeinsames Service-Passwort) + 8 Threads, Timeout 1800s
fuer lange Kopiervorgaenge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 10:34:42 +02:00
duffyduck 244138b6bd added list images 2026-02-25 02:52:36 +01:00
Stefan Hacker 272e2d6090 first commit 2026-02-12 12:10:30 +01:00