mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-09-14 18:56:52 +00:00
overhaul app tracking and update orchestration
- Generate and ship a verified 389-app tracking catalog with 23 runtime overrides, fallback detectors, ports, logos, and Docker Hub tag previews. - Support modern Proxmox VE Helper-Scripts markers, historical installations, and official or manual app deployments. - Rework the LXC App and Updates tabs with cached suggestions, explicit discovery, version tracking, web links, custom updaters, and complete i18n. - Add independent OS, app, Docker Engine, Docker image, bulk, and scheduled update targets. - Add digest-based Docker inventory, Compose dependency grouping, safe standalone-container recreation with rollback, and package-scoped Docker Engine updates. - Refresh per-LXC caches after lifecycle and update tasks, then emit idempotent notifications based on the verified final state. - Harden Coral USB recovery by removing orphaned gasket DKMS registrations and validating that dpkg is healthy before reporting success.
This commit is contained in:
@@ -1163,7 +1163,15 @@
|
||||
"targetBoth": "Betriebssystem + Anwendung",
|
||||
"lastRun": "Letzte Ausführung: {date}",
|
||||
"runSuccess": "✓ Erfolg",
|
||||
"runPartial": "teilweise abgeschlossen",
|
||||
"runFailed": "✗ fehlgeschlagen",
|
||||
"runDeferred": "zur Sicherheit zurückgestellt",
|
||||
"runSkipped": "nichts ausstehend",
|
||||
"releaseDelaySummary": "{days} Tag(e) Freigabesperre",
|
||||
"releaseDelayLabel": "Nach neuer App-Version warten",
|
||||
"releaseDelayNone": "Keine Wartezeit",
|
||||
"releaseDelayDays": "{days} Tag(e) warten",
|
||||
"releaseDelayHelp": "Gilt nur für ausgewählte Apps mit Versionsüberwachung. Deren ausstehende Versionen müssen dieses Alter erreicht haben; Apps ohne Versionsüberwachung führen ihren Updater bei jedem Zeitplan aus.",
|
||||
"notScheduled": "Nicht geplant",
|
||||
"frequency": "Frequenz",
|
||||
"cronExpression": "Cron-Ausdruck",
|
||||
@@ -1172,6 +1180,11 @@
|
||||
"targetOptionOs": "Nur Betriebssystempakete",
|
||||
"targetOptionApp": "Nur Bewerbung",
|
||||
"targetOptionBoth": "Betriebssystem + Anwendung",
|
||||
"dockerComposeTarget": "Docker Compose · {project}",
|
||||
"dockerContainerTarget": "Docker-Container · {container}",
|
||||
"dockerEngineTarget": "Docker Engine",
|
||||
"noTargets": "Keine Ziele ausgewählt",
|
||||
"selectAtLeastOne": "Wählen Sie mindestens ein Aktualisierungsziel aus.",
|
||||
"deleteButton": "Zeitplan löschen",
|
||||
"deleteConfirm": "Geplante Updates für diesen Container entfernen? Die Standardeinstellungen (Sicherung + Neustart) werden beibehalten."
|
||||
},
|
||||
@@ -1217,7 +1230,7 @@
|
||||
"osPlusApp": "Betriebssystem + {appName}-Updates",
|
||||
"osPlusApps": "Betriebssystem- und Apps-Updates",
|
||||
"noUpdateMethodTitle": "Keine Aktualisierungsmethode verfügbar",
|
||||
"noUpdateMethodBody": "Keine Aktualisierungsmethode verfügbar. Aktualisieren Sie über die App selbst oder legen Sie einen benutzerdefinierten Befehl auf der Registerkarte „App“ fest.",
|
||||
"noUpdateMethodBody": "Für diese Anwendung wurde keine Aktualisierungsmethode erkannt. Fügen Sie einen benutzerdefinierten Aktualisierungsbefehl hinzu.",
|
||||
"ociImmutableTitle": "OCI-Image-Container",
|
||||
"ociImmutableBody": "Betriebssystempakete werden zum Zeitpunkt der Image-Erstellung integriert und können nicht direkt aktualisiert werden. Wenden Sie Updates manuell an oder installieren Sie sie mit einem neueren Image neu.",
|
||||
"hideNoticeButton": "Diesen Hinweis für diese App ausblenden",
|
||||
@@ -1230,6 +1243,7 @@
|
||||
"applicationDefaultName": "Anwendung",
|
||||
"installedLabel": "installiert",
|
||||
"upToDateAtLabel": "Aktuell unter",
|
||||
"versionLabel": "Version {version}",
|
||||
"versionTrackingPending": "Versionsverfolgung ausstehend – bei der nächsten geplanten Prüfung werden die installierte und die verfügbare Version angezeigt.",
|
||||
"customCommandTitle": "Benutzerdefinierter Update-Befehl",
|
||||
"customCommandBody": "Führen Sie einen benutzerdefinierten Shell-Befehl aus, um diese App im Container zu aktualisieren.",
|
||||
@@ -1238,6 +1252,7 @@
|
||||
"hideNoticeAction": "Diesen Hinweis für {appName} ausblenden",
|
||||
"detectedByPrefix": "Erkannt von",
|
||||
"editApp": "Bearbeiten",
|
||||
"configureUpdater": "Konfigurieren",
|
||||
"alsoDetectedTitle": "Außerdem in diesem Container entdeckt:",
|
||||
"detectedInline": "· erkannt von {method}",
|
||||
"customCommandLabel": "Benutzerdefinierter Update-Befehl",
|
||||
@@ -1245,9 +1260,9 @@
|
||||
"removeButton": "Entfernen",
|
||||
"cancelButton": "Stornieren",
|
||||
"saveButton": "Speichern",
|
||||
"editCommandButton": "Befehl bearbeiten",
|
||||
"wireUpCommandButton": "Fügen Sie einen benutzerdefinierten Aktualisierungsbefehl hinzu",
|
||||
"versionTrackingPendingShort": "Versionsverfolgung steht aus.",
|
||||
"versionTrackingNotConfigured": "Die Versionsüberwachung ist nicht konfiguriert.",
|
||||
"managedByOsPackages": "Diese Anwendung wird über die Aktion für Betriebssystempakete aktualisiert.",
|
||||
"noMethodBody": "Keine Aktualisierungsmethode verfügbar. Aktualisieren Sie über die App selbst oder verknüpfen Sie einen benutzerdefinierten Befehl, den ProxMenux im Container ausführt.",
|
||||
"noMethodHideBody": "Für diese App ist keine Update-Methode registriert. Legen Sie eine auf der Registerkarte „App“ fest oder schließen Sie diesen Hinweis.",
|
||||
"hideForApp": "Hinweis für {appName} ausblenden",
|
||||
@@ -1266,15 +1281,59 @@
|
||||
"noManagedUpdateInfo": "Noch keine Update-Informationen – prüfen Sie unter Sicherheit → Secure Gateway.",
|
||||
"ociTitle": "OCI-Image-Container",
|
||||
"ociBody": "Dieser Container wurde aus einem OCI-Image (Docker) erstellt. Die Updateverwaltung für OCI-Container wird mit der kommenden OCI-Installationsfunktion geliefert – Updates erstellen den Container anhand eines neueren Image-Tags neu, anstatt Pakete darin zu patchen.",
|
||||
"helperNotUpdateable": "Die Community-Scripts-Registrierung markiert diese App als nicht aktualisierbar.",
|
||||
"helperDetectedTitle": "Es wurde ein Hilfsskript-Updater erkannt",
|
||||
"helperDetectedBody": "Die manuelle Anwendung ist am sichersten.",
|
||||
"dockerImagesTitle": "Docker-Images",
|
||||
"dockerAppTitle": "Docker",
|
||||
"dockerImagesSubheading": "Images",
|
||||
"dockerImagesReadOnly": "Image-Tags werden anhand des Registry-Digests verglichen. Compose-Dienste können aus ihrem deklarierten Projekt geladen und neu erstellt werden.",
|
||||
"dockerEngineManagedByOs": "Docker Engine {version} wird über Pakete verwaltet und durch die obige Betriebssystem-Paketaktion aktualisiert.",
|
||||
"dockerEngineSubheading": "Engine",
|
||||
"dockerEngineDetected": "Docker Engine {version} erkannt",
|
||||
"dockerEngineUpdateHelp": "Aktualisiert nur die installierten Docker-Pakete und erforderlichen Abhängigkeiten. Andere Betriebssystempakete und Container bleiben unverändert.",
|
||||
"updateDockerEngineOnly": "Docker Engine aktualisieren",
|
||||
"adguardWebUpdateOnly": "Diese AdGuard-Home-Installation wird über die eigene Weboberfläche aktualisiert.",
|
||||
"openAdguard": "AdGuard Home öffnen",
|
||||
"updateDockerImage": "Image aktualisieren",
|
||||
"recreateStandaloneContainer": "{container} aktualisieren",
|
||||
"standaloneRecreatePending": "Eigenständige Container benötigen eine geschützte Neuerstellung: {names}",
|
||||
"noDockerImages": "Docker ist installiert, aber es wurden keine getaggten Images gefunden.",
|
||||
"dockerInventoryStarting": "Warten, bis Docker vollständig gestartet ist…",
|
||||
"dockerInventoryUnavailable": "Das Docker-Inventar konnte nicht gelesen werden. Prüfen Sie es erneut, sobald Docker verfügbar ist.",
|
||||
"usedByContainers": "Verwendet von: {names}",
|
||||
"imageUpdateAvailable": "Neues Image verfügbar",
|
||||
"imageUpToDate": "Aktuell",
|
||||
"imageInstalledTag": "installierter Tag",
|
||||
"imageDigestUnknown": "Digest nicht verfügbar",
|
||||
"dockerPendingSummary": "{count} Docker-Image-Update(s) erkannt. Aktualisiere sie mit dem zugehörigen Docker- oder Compose-Workflow.",
|
||||
"postApplyChecking": "Aktualisierungsergebnis wird überprüft…",
|
||||
"postApplyAllOk": "{count} Paket(e) erfolgreich angewendet – nichts ausstehend.",
|
||||
"postApplyNothingPending": "Nichts ausstehend – alles ist auf dem neuesten Stand.",
|
||||
"postApplyPartial": "{pending} Paket(e) stehen nach der Ausführung noch aus.",
|
||||
"postApplyPartialSubline": "{applied} angewendet.Einige Aktualisierungen wurden nicht abgeschlossen – sehen Sie sich die Terminalausgabe oben an."
|
||||
},
|
||||
"bulkUpdate": {
|
||||
"title": "Sammelaktualisierung",
|
||||
"description": "Konfiguriert eine Aktion für das Betriebssystem und die ausgewählten Aktualisierungsmethoden dieses Containers.",
|
||||
"loading": "Konfiguration wird geladen…",
|
||||
"notConfigured": "Nicht konfiguriert.",
|
||||
"configure": "Konfigurieren",
|
||||
"edit": "Bearbeiten",
|
||||
"apply": "Aktualisierungen anwenden",
|
||||
"osTarget": "Betriebssystem",
|
||||
"osRequired": "Für eine Sammelaktualisierung erforderlich.",
|
||||
"includesDependencies": "Enthält auch deklarierte Abhängigkeiten: {names}",
|
||||
"noMethod": "Keine ausführbare Aktualisierungsmethode verfügbar.",
|
||||
"staleTarget": "Diese Auswahl ist nicht mehr verfügbar. Entfernen Sie sie vor dem Speichern.",
|
||||
"dockerInventoryPending": "Warten auf das Docker-Image-Inventar…",
|
||||
"missingDockerTarget": "Docker-Image nicht verfügbar",
|
||||
"selectAtLeastOne": "Wählen Sie zusätzlich zum Betriebssystem mindestens ein Aktualisierungsziel.",
|
||||
"cancel": "Abbrechen",
|
||||
"save": "Speichern",
|
||||
"delete": "Konfiguration entfernen",
|
||||
"deleteConfirm": "Diese Sammelaktualisierungskonfiguration entfernen?",
|
||||
"saveFailed": "Die Sammelaktualisierungskonfiguration konnte nicht gespeichert werden.",
|
||||
"deleteFailed": "Die Sammelaktualisierungskonfiguration konnte nicht entfernt werden.",
|
||||
"planFailed": "Die Sammelaktualisierung konnte nicht vorbereitet werden. Prüfen Sie die nicht verfügbaren Methoden."
|
||||
},
|
||||
"appEditor": {
|
||||
"closePanel": "Panel schließen",
|
||||
"cancelButton": "Stornieren",
|
||||
@@ -1284,6 +1343,17 @@
|
||||
"hiddenBadge": "Derzeit ausgeblendet – wird wieder in der Erkennungsliste angezeigt",
|
||||
"registerDifferent": "Registrieren Sie eine andere App",
|
||||
"detectedInContainer": "Auf diesem Container erkannt",
|
||||
"versionDetected": "Version {version} in diesem Container erkannt",
|
||||
"legacyDetectorUsed": "Mit einem alten Kompatibilitäts-Fallback erkannt",
|
||||
"dockerImagesTitle": "Docker-Image-Updates",
|
||||
"dockerImagesHelp": "Prüft jedes lokale Image getrennt von der Docker-Engine anhand unveränderlicher Registry-Digests.",
|
||||
"refreshDockerImages": "Jetzt prüfen",
|
||||
"noDockerImages": "Keine getaggten Docker-Images gefunden",
|
||||
"usedByContainers": "Verwendet von: {names}",
|
||||
"imageUpdateAvailable": "Neues Image verfügbar",
|
||||
"imageUpToDate": "Aktuell",
|
||||
"imageDigestUnknown": "Digest nicht verfügbar",
|
||||
"dockerReadOnlyNote": "Nur-Lese-Prüfung: Es wird kein Image geladen und kein Container neu gestartet.",
|
||||
"installedManaged": "Installiert und verwaltet von ProxMenux",
|
||||
"nameLabel": "Name",
|
||||
"installedViaLabel": "Installiert über",
|
||||
@@ -1340,6 +1410,17 @@
|
||||
"jsonPathPlaceholder": "z. B. data.version oder releases[0].tag_name",
|
||||
"dockerImageLabel": "Docker Hub-Bild",
|
||||
"dockerImagePlaceholder": "z. B. linuxserver/plex oder nginx",
|
||||
"dockerVersionedTagsHelp": "Nur für versionierte Tags. Für latest, stable oder lts die Docker-Image-Updates mit Digest-Vergleich verwenden.",
|
||||
"dockerPresetSemver": "Nur SemVer",
|
||||
"dockerPresetSemverSuffix": "SemVer + Suffix",
|
||||
"dockerTagFilterHelp": "Filtert echte Tags, bevor ProxMenux die höchste Version auswählt.",
|
||||
"dockerTagPreviewLabel": "Live-Tag-Vorschau",
|
||||
"dockerTagPreviewCount": "{matched} von {scanned} passend",
|
||||
"dockerTagPreviewLoading": "Docker Hub wird geprüft…",
|
||||
"dockerTagPreviewFailed": "Docker-Hub-Tags konnten nicht angezeigt werden",
|
||||
"dockerTagPreviewEmpty": "Keine echten Tags entsprechen diesem Filter.",
|
||||
"dockerMovingTag": "beweglicher Tag",
|
||||
"dockerMovingTagHelp": "Bewegliche Tags enthalten keine Version. Stattdessen über den Digest bei Docker-Image-Updates verfolgen.",
|
||||
"tagRegexLabel": "Tag-Regex (mit Capture-Gruppe)",
|
||||
"tagRegexPlaceholder": "z.B. v?(\\d+\\.\\d+\\.\\d+)",
|
||||
"tagRegexBare": "v?(\\d+\\.\\d+\\.\\d+)",
|
||||
@@ -1372,7 +1453,14 @@
|
||||
"registerCustom": "Registrieren Sie eine benutzerdefinierte App",
|
||||
"noAppsTitle": "Keine Bewerbungen registriert",
|
||||
"noAppsBody": "Registrieren Sie die Anwendungen in diesem Container, um Weblinks und optional die Verfolgung verfügbarer Versionen mit Benachrichtigungen zu neuen Releases zu erhalten.",
|
||||
"registerApplication": "Bewerbung registrieren",
|
||||
"registerApplication": "Anwendung registrieren",
|
||||
"searchApplications": "Apps suchen",
|
||||
"searchingApplications": "Apps werden gesucht…",
|
||||
"noApplicationsDetected": "Keine Apps erkannt.",
|
||||
"noNewApplicationsDetected": "Keine neuen Apps erkannt.",
|
||||
"oneNewApplicationDetected": "Eine neue App wurde erkannt.",
|
||||
"newApplicationsDetected": "{count} neue Apps wurden erkannt.",
|
||||
"detectionFailed": "App-Suche fehlgeschlagen",
|
||||
"hiddenSuffix": "{count} ausgeblendet",
|
||||
"confirmHide": "Die Erkennung „{name}“ dauerhaft in diesem Container ausblenden?\n\nUm es später wiederherzustellen, klicken Sie auf „Andere App registrieren“ – die ausgeblendete Liste wird dort mit einer Wiederherstellungsoption angezeigt.",
|
||||
"saveFailed": "Speichern fehlgeschlagen",
|
||||
@@ -1383,6 +1471,13 @@
|
||||
"binaryArgsHintGrafana": "Grafana braucht",
|
||||
"loadFailed": "Die App-Konfiguration konnte nicht geladen werden",
|
||||
"checkFailed": "Prüfung fehlgeschlagen",
|
||||
"testDetectorButton": "Detektor testen",
|
||||
"testingDetectorButton": "Detektor wird getestet…",
|
||||
"detectorTestTitle": "Ergebnis des Detektortests",
|
||||
"detectorTestNotSaved": "Nur Entwurf · nicht gespeichert",
|
||||
"detectorTestNoVersion": "Keine Version erkannt",
|
||||
"detectorTestNoUpstream": "Keine Upstream-Quelle konfiguriert",
|
||||
"detectorTestFailed": "Detektortest fehlgeschlagen",
|
||||
"deleteFailed": "Das Löschen ist fehlgeschlagen",
|
||||
"dismissFailed": "Die Erkennung konnte nicht verworfen werden",
|
||||
"restoreFailed": "Die Erkennung konnte nicht wiederhergestellt werden",
|
||||
@@ -1399,6 +1494,10 @@
|
||||
"webLinks": "Weblinks",
|
||||
"addPort": "Port hinzufügen",
|
||||
"detectedPorts": "Im Container erkannte Ports – klicken Sie zum Hinzufügen:",
|
||||
"dockerPublishedServicesTitle": "Docker-Dienste mit veröffentlichten Ports",
|
||||
"dockerPublishedServicesHelp": "Wählen Sie nur Ports aus, die eine Weboberfläche bereitstellen. ProxMenux registriert diese Container nicht als eigenständige LXC-Anwendungen.",
|
||||
"dockerPublishedAdd": "Link hinzufügen",
|
||||
"dockerPublishedPort": "Container-Port {containerPort} → {hostPort} im LXC",
|
||||
"noWebPorts": "Keine Web-Ports lauschen. Verwenden Sie Port hinzufügen, wenn Sie dennoch manuell einen Link erstellen möchten.",
|
||||
"trackUpstream": "Verfügbare Version verfolgen (optional)",
|
||||
"trackOff": "Aus – nur Link",
|
||||
@@ -1416,7 +1515,7 @@
|
||||
"checkButton": "Überprüfen",
|
||||
"editFieldsButton": "Felder bearbeiten",
|
||||
"alsoDetectedContainer": "Auch auf diesem Container erkannt",
|
||||
"addAnotherApplication": "Fügen Sie eine weitere Anwendung hinzu",
|
||||
"addAnotherApplication": "Weitere Anwendung registrieren",
|
||||
"doneButton": "Erledigt",
|
||||
"editButton": "Bearbeiten",
|
||||
"upstreamErrorTimeout": "Netzwerk-Timeout beim Kontaktieren des Upstreams",
|
||||
|
||||
Reference in New Issue
Block a user