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:
MacRimi
2026-08-23 12:43:03 +02:00
parent 7244201810
commit 0251f77331
27 changed files with 11631 additions and 893 deletions
+107 -8
View File
@@ -1163,7 +1163,15 @@
"targetBoth": "OS + applikation",
"lastRun": "Senaste körningen: {date}",
"runSuccess": "✓ framgång",
"runPartial": "delvis slutförd",
"runFailed": "✗ misslyckades",
"runDeferred": "uppskjuten av säkerhetsskäl",
"runSkipped": "inget väntar",
"releaseDelaySummary": "{days} dagars väntetid",
"releaseDelayLabel": "Vänta efter en ny appversion",
"releaseDelayNone": "Ingen väntetid",
"releaseDelayDays": "Vänta {days} dag(ar)",
"releaseDelayHelp": "Gäller endast valda appar med versionsspårning. Deras väntande versioner måste vara så här gamla; appar utan versionsspårning kör sin uppdaterare vid varje schemalagt tillfälle.",
"notScheduled": "Inte schemalagt",
"frequency": "Frekvens",
"cronExpression": "Cron uttryck",
@@ -1172,6 +1180,11 @@
"targetOptionOs": "Endast OS-paket",
"targetOptionApp": "Endast ansökan",
"targetOptionBoth": "OS + applikation",
"dockerComposeTarget": "Docker Compose · {project}",
"dockerContainerTarget": "Docker-container · {container}",
"dockerEngineTarget": "Docker Engine",
"noTargets": "Inga mål valda",
"selectAtLeastOne": "Välj minst ett uppdateringsmål.",
"deleteButton": "Ta bort schema",
"deleteConfirm": "Vill du ta bort de schemalagda uppdateringarna för den här behållaren? Tillämpa standardvärden (säkerhetskopiering + omstart) behålls."
},
@@ -1217,7 +1230,7 @@
"osPlusApp": "OS + {appName} uppdateringar",
"osPlusApps": "OS + Apps-uppdateringar",
"noUpdateMethodTitle": "Ingen uppdateringsmetod tillgänglig",
"noUpdateMethodBody": "Ingen uppdateringsmetod tillgänglig. Uppdatera från själva appen eller ställ in ett anpassat kommando på fliken App.",
"noUpdateMethodBody": "Ingen uppdateringsmetod har identifierats för den här appen. Lägg till ett anpassat uppdateringskommando.",
"ociImmutableTitle": "OCI-bildbehållare",
"ociImmutableBody": "OS-paket bakas in vid bildbyggetid och kan inte uppdateras på plats. Tillämpa uppdateringar manuellt eller installera om med en nyare bild.",
"hideNoticeButton": "Dölj det här meddelandet för den här appen",
@@ -1230,6 +1243,7 @@
"applicationDefaultName": "Tillämpningen",
"installedLabel": "installerat",
"upToDateAtLabel": "Uppdaterad kl",
"versionLabel": "version {version}",
"versionTrackingPending": "Versionsspårning väntar – nästa schemalagda kontroll visar installerad och tillgänglig version.",
"customCommandTitle": "Anpassat uppdateringskommando",
"customCommandBody": "Kör ett användardefinierat skalkommando för att uppdatera den här appen inuti behållaren.",
@@ -1238,6 +1252,7 @@
"hideNoticeAction": "Dölj detta meddelande för {appName}",
"detectedByPrefix": "Upptäckt av",
"editApp": "Redigera",
"configureUpdater": "Konfigurera",
"alsoDetectedTitle": "Detekteras även i den här behållaren:",
"detectedInline": "· upptäckt av {method}",
"customCommandLabel": "Anpassat uppdateringskommando",
@@ -1245,9 +1260,9 @@
"removeButton": "Ta bort",
"cancelButton": "Avbryt",
"saveButton": "Spara",
"editCommandButton": "Redigera kommando",
"wireUpCommandButton": "Lägg till anpassat uppdateringskommando",
"versionTrackingPendingShort": "Väntande versionsspårning.",
"versionTrackingNotConfigured": "Versionsspårning är inte konfigurerad.",
"managedByOsPackages": "Den här appen uppdateras via åtgärden för operativsystemspaket.",
"noMethodBody": "Ingen uppdateringsmetod tillgänglig. Uppdatera från själva appen, eller koppla upp ett anpassat kommando som ProxMenux kommer att köra inuti behållaren.",
"noMethodHideBody": "Denna app har ingen uppdateringsmetod registrerad. Ställ in en från fliken App eller avvisa det här meddelandet.",
"hideForApp": "Dölj meddelande för {appName}",
@@ -1266,15 +1281,59 @@
"noManagedUpdateInfo": "Ingen uppdateringsinformation ännu — kolla från Säkerhet → Secure Gateway.",
"ociTitle": "OCI-bildbehållare",
"ociBody": "Den här behållaren skapades från en OCI-bild (Docker). Uppdateringshantering för OCI-behållare kommer med den kommande OCI-installationsfunktionen - uppdateringar kommer att bygga om behållaren från en nyare bildtagg snarare än att patcha paket inuti.",
"helperNotUpdateable": "Community-scripts-registret markerar denna app som inte uppdateringsbar.",
"helperDetectedTitle": "Upptäckte en hjälparskriptuppdatering",
"helperDetectedBody": "Att applicera manuellt är säkrast.",
"dockerImagesTitle": "Docker-avbilder",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Avbilder",
"dockerImagesReadOnly": "Taggar jämförs med registrets digest. Compose-tjänster kan hämta avbilden och återskapas från sitt deklarerade projekt.",
"dockerEngineManagedByOs": "Docker Engine {version} hanteras som paket och uppdateras av OS-paketåtgärden ovan.",
"dockerEngineSubheading": "Motor",
"dockerEngineDetected": "Docker Engine {version} identifierad",
"dockerEngineUpdateHelp": "Uppdaterar endast installerade Docker-paket och nödvändiga beroenden. Andra operativsystemspaket och behållare ändras inte.",
"updateDockerEngineOnly": "Uppdatera Docker Engine",
"adguardWebUpdateOnly": "Den här installationen av AdGuard Home uppdateras i dess eget webbgränssnitt.",
"openAdguard": "Öppna AdGuard Home",
"updateDockerImage": "Uppdatera avbild",
"recreateStandaloneContainer": "Uppdatera {container}",
"standaloneRecreatePending": "Fristående containrar kräver skyddad återskapning: {names}",
"noDockerImages": "Docker är installerat men inga taggade avbilder hittades.",
"dockerInventoryStarting": "Väntar på att Docker ska starta klart…",
"dockerInventoryUnavailable": "Docker-inventeringen kunde inte läsas. Kontrollera igen när Docker är tillgängligt.",
"usedByContainers": "Används av: {names}",
"imageUpdateAvailable": "Ny avbild tillgänglig",
"imageUpToDate": "Uppdaterad",
"imageInstalledTag": "installerad tagg",
"imageDigestUnknown": "Digest saknas",
"dockerPendingSummary": "{count} uppdateringar av Docker-avbilder hittades. Använd tillhörande Docker- eller Compose-flöde.",
"postApplyChecking": "Verifierar uppdateringsresultat...",
"postApplyAllOk": "{count} paket(en) har tillämpats framgångsrikt — inget väntande.",
"postApplyNothingPending": "Inget väntande — allt är uppdaterat.",
"postApplyPartial": "{pending} paket som fortfarande väntar efter körningen.",
"postApplyPartialSubline": "{applied} tillämpas.Vissa uppdateringar slutfördes inte – granska terminalutgången ovan."
},
"bulkUpdate": {
"title": "Gruppuppdatering",
"description": "Konfigurera en åtgärd som uppdaterar operativsystemet och de valda metoderna i behållaren.",
"loading": "Läser in konfiguration…",
"notConfigured": "Inte konfigurerad.",
"configure": "Konfigurera",
"edit": "Redigera",
"apply": "Tillämpa uppdateringar",
"osTarget": "Operativsystem",
"osRequired": "Krävs för en gruppuppdatering.",
"includesDependencies": "Inkluderar även deklarerade beroenden: {names}",
"noMethod": "Ingen körbar uppdateringsmetod är tillgänglig.",
"staleTarget": "Det här valet är inte längre tillgängligt. Ta bort det innan du sparar.",
"dockerInventoryPending": "Väntar på inventeringen av Docker-avbilder…",
"missingDockerTarget": "Docker-avbilden är inte tillgänglig",
"selectAtLeastOne": "Välj minst ett uppdateringsmål utöver operativsystemet.",
"cancel": "Avbryt",
"save": "Spara",
"delete": "Ta bort konfiguration",
"deleteConfirm": "Ta bort den här gruppuppdateringskonfigurationen?",
"saveFailed": "Det gick inte att spara gruppuppdateringskonfigurationen.",
"deleteFailed": "Det gick inte att ta bort gruppuppdateringskonfigurationen.",
"planFailed": "Det gick inte att förbereda gruppuppdateringen. Kontrollera otillgängliga metoder."
},
"appEditor": {
"closePanel": "Stäng panelen",
"cancelButton": "Avbryt",
@@ -1284,6 +1343,17 @@
"hiddenBadge": "För närvarande dold — kommer att dyka upp igen i upptäcktslistan",
"registerDifferent": "Registrera en annan app",
"detectedInContainer": "Upptäcks på den här behållaren",
"versionDetected": "Version {version} identifierad i den här containern",
"legacyDetectorUsed": "Upptäckt med en äldre kompatibilitetsreserv",
"dockerImagesTitle": "Uppdateringar av Docker-avbilder",
"dockerImagesHelp": "Kontrollerar varje lokal avbild separat från Docker-motorn genom att jämföra oföränderliga register-digests.",
"refreshDockerImages": "Kontrollera nu",
"noDockerImages": "Inga taggade Docker-avbilder hittades",
"usedByContainers": "Används av: {names}",
"imageUpdateAvailable": "Ny avbild tillgänglig",
"imageUpToDate": "Uppdaterad",
"imageDigestUnknown": "Digest saknas",
"dockerReadOnlyNote": "Skrivskyddad kontroll: ingen avbild hämtas och ingen container startas om.",
"installedManaged": "Installerad och hanterad av ProxMenux",
"nameLabel": "Namn",
"installedViaLabel": "Installerad via",
@@ -1340,6 +1410,17 @@
"jsonPathPlaceholder": "t.ex. data.version eller releases[0].tag_name",
"dockerImageLabel": "Docker Hub-bild",
"dockerImagePlaceholder": "t.ex. linuxserver/plex eller nginx",
"dockerVersionedTagsHelp": "Använd endast för versionerade taggar. För latest, stable eller lts använder du Docker-avbildningsuppdateringar med digest-jämförelse.",
"dockerPresetSemver": "Endast SemVer",
"dockerPresetSemverSuffix": "SemVer + suffix",
"dockerTagFilterHelp": "Filtrerar verkliga taggar innan ProxMenux väljer den högsta versionen.",
"dockerTagPreviewLabel": "Förhandsvisning av verkliga taggar",
"dockerTagPreviewCount": "{matched} matchade av {scanned}",
"dockerTagPreviewLoading": "Kontrollerar Docker Hub…",
"dockerTagPreviewFailed": "Kunde inte visa Docker Hub-taggar",
"dockerTagPreviewEmpty": "Inga verkliga taggar matchar filtret.",
"dockerMovingTag": "rörlig tagg",
"dockerMovingTagHelp": "Rörliga taggar innehåller ingen version. Spåra dem i stället via digest under Docker-avbildningsuppdateringar.",
"tagRegexLabel": "Taggregex (med fångstgrupp)",
"tagRegexPlaceholder": "t.ex. v?(\\d+\\.\\d+\\.\\d+)",
"tagRegexBare": "v?(\\d+\\.\\d+\\.\\d+)",
@@ -1372,7 +1453,14 @@
"registerCustom": "Registrera en anpassad app",
"noAppsTitle": "Inga ansökningar registrerade",
"noAppsBody": "Registrera apparna som körs i behållaren för att få webblänkar och, om du vill, spårning av tillgängliga versioner med aviseringar om nya utgåvor.",
"registerApplication": "Registrera ansökan",
"registerApplication": "Registrera app",
"searchApplications": "Sök appar",
"searchingApplications": "Söker efter appar…",
"noApplicationsDetected": "Inga appar identifierades.",
"noNewApplicationsDetected": "Inga nya appar identifierades.",
"oneNewApplicationDetected": "En ny app identifierades.",
"newApplicationsDetected": "{count} nya appar identifierades.",
"detectionFailed": "Appidentifieringen misslyckades",
"hiddenSuffix": "{count} dold",
"confirmHide": "Vill du dölja \"{name}\"-detekteringen permanent på den här behållaren?\n\nFör att ta tillbaka den senare, klicka på \"Registrera en annan app\" - den dolda listan visas där med ett återställningsalternativ.",
"saveFailed": "Det gick inte att spara",
@@ -1383,6 +1471,13 @@
"binaryArgsHintGrafana": "Grafana behöver",
"loadFailed": "Det gick inte att läsa in appkonfigurationen",
"checkFailed": "Kontrollen misslyckades",
"testDetectorButton": "Testa detektor",
"testingDetectorButton": "Testar detektorn…",
"detectorTestTitle": "Resultat av detektortest",
"detectorTestNotSaved": "Endast utkast · inte sparat",
"detectorTestNoVersion": "Ingen version identifierades",
"detectorTestNoUpstream": "Ingen uppströmskälla är konfigurerad",
"detectorTestFailed": "Detektortestet misslyckades",
"deleteFailed": "Det gick inte att ta bort",
"dismissFailed": "Det gick inte att avvisa upptäckten",
"restoreFailed": "Det gick inte att återställa upptäckten",
@@ -1399,6 +1494,10 @@
"webLinks": "Webblänkar",
"addPort": "Lägg till port",
"detectedPorts": "Portar upptäckta i behållaren — klicka för att lägga till:",
"dockerPublishedServicesTitle": "Docker-tjänster med publicerade portar",
"dockerPublishedServicesHelp": "Välj endast portar som tillhandahåller ett webbgränssnitt. ProxMenux registrerar inte dessa containrar som fristående LXC-appar.",
"dockerPublishedAdd": "Lägg till länk",
"dockerPublishedPort": "containerport {containerPort} → {hostPort} i LXC",
"noWebPorts": "Inga webbportar lyssnar. Använd Lägg till port om du fortfarande vill skapa en länk manuellt.",
"trackUpstream": "Spåra tillgänglig version (valfritt)",
"trackOff": "Av – endast länk",
@@ -1416,7 +1515,7 @@
"checkButton": "Kontrollera",
"editFieldsButton": "Redigera fält",
"alsoDetectedContainer": "Detekteras även på denna behållare",
"addAnotherApplication": "Lägg till ytterligare ett program",
"addAnotherApplication": "Registrera en annan app",
"doneButton": "Gjort",
"editButton": "Redigera",
"upstreamErrorTimeout": "Nätverkstimeout vid kontakt uppströms",