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
@@ -1162,7 +1162,15 @@
"targetBoth": "Systém + aplikácia",
"lastRun": "Posledné spustenie: {date}",
"runSuccess": "✓ úspešné",
"runPartial": "čiastočne dokončené",
"runFailed": "✗ zlyhalo",
"runDeferred": "odložené z bezpečnostných dôvodov",
"runSkipped": "nič nečaká",
"releaseDelaySummary": "odklad {days} deň/dní",
"releaseDelayLabel": "Počkať po novej verzii aplikácie",
"releaseDelayNone": "Bez čakacej doby",
"releaseDelayDays": "Počkať {days} deň/dní",
"releaseDelayHelp": "Platí iba pre vybrané aplikácie so sledovaním verzie. Ich čakajúce verzie musia dosiahnuť tento vek; aplikácie bez sledovania spustia aktualizátor pri každom naplánovanom termíne.",
"notScheduled": "Bez plánu",
"frequency": "Frekvencia",
"cronExpression": "Cron výraz",
@@ -1171,6 +1179,11 @@
"targetOptionOs": "Iba balíky systému",
"targetOptionApp": "Iba aplikáciu",
"targetOptionBoth": "Systém + aplikáciu",
"dockerComposeTarget": "Docker Compose · {project}",
"dockerContainerTarget": "Docker kontajner · {container}",
"dockerEngineTarget": "Docker Engine",
"noTargets": "Nie sú vybrané žiadne ciele",
"selectAtLeastOne": "Vyberte aspoň jeden cieľ aktualizácie.",
"deleteButton": "Odstrániť plán",
"deleteConfirm": "Odstrániť plánované aktualizácie tohto kontajnera? Predvolené nastavenia (záloha a reštart) zostanú zachované."
},
@@ -1216,7 +1229,7 @@
"osPlusApp": "Aktualizácie systému + {appName}",
"osPlusApps": "Aktualizácie systému + aplikácií",
"noUpdateMethodTitle": "Aktualizácia nie je nastavená",
"noUpdateMethodBody": "Pre túto aplikáciu nie je nastavený spôsob aktualizácie. Aktualizujte ju priamo v aplikácii alebo nastavte vlastný príkaz na karte Aplikácia.",
"noUpdateMethodBody": "Pre túto aplikáciu nebola identifikovaná žiadna metóda aktualizácie. Pridajte vlastný aktualizačný príkaz.",
"ociImmutableTitle": "Kontajner z OCI obrazu",
"ociImmutableBody": "Balíky systému sú súčasťou obrazu a nemožno ich aktualizovať priamo. Aktualizujte ich ručne alebo kontajner preinštalujte z novšieho obrazu.",
"hideNoticeButton": "Skryť toto upozornenie pre aplikáciu",
@@ -1229,6 +1242,7 @@
"applicationDefaultName": "Aplikácia",
"installedLabel": "nainštalované",
"upToDateAtLabel": "Aktuálna verzia",
"versionLabel": "verzia {version}",
"versionTrackingPending": "Čaká sa na údaje o verzii — nainštalovaná a dostupná verzia sa doplnia pri najbližšej plánovanej kontrole.",
"customCommandTitle": "Vlastný príkaz na aktualizáciu",
"customCommandBody": "Spustí v kontajneri vlastný shell príkaz, ktorý aktualizuje túto aplikáciu.",
@@ -1237,6 +1251,7 @@
"hideNoticeAction": "Skryť upozornenie pre {appName}",
"detectedByPrefix": "Zistené cez",
"editApp": "Upraviť",
"configureUpdater": "Nastaviť",
"alsoDetectedTitle": "V tomto kontajneri sa našli aj:",
"detectedInline": "· zistené cez {method}",
"customCommandLabel": "Vlastný príkaz na aktualizáciu",
@@ -1244,9 +1259,9 @@
"removeButton": "Odstrániť",
"cancelButton": "Zrušiť",
"saveButton": "Uložiť",
"editCommandButton": "Upraviť príkaz",
"wireUpCommandButton": "Pridať vlastný príkaz na aktualizáciu",
"versionTrackingPendingShort": "Čaká sa na údaje o verzii.",
"versionTrackingNotConfigured": "Sledovanie verzie nie je nastavené.",
"managedByOsPackages": "Táto aplikácia sa aktualizuje prostredníctvom akcie balíkov operačného systému.",
"noMethodBody": "Pre túto aplikáciu nie je nastavený spôsob aktualizácie. Aktualizujte ju priamo v aplikácii alebo pridajte vlastný príkaz, ktorý ProxMenux spustí v kontajneri.",
"noMethodHideBody": "Táto aplikácia nemá nastavený spôsob aktualizácie. Nastavte ho na karte Aplikácia alebo toto upozornenie skryte.",
"hideForApp": "Skryť upozornenie pre {appName}",
@@ -1265,15 +1280,59 @@
"noManagedUpdateInfo": "Zatiaľ nie sú žiadne informácie o aktualizácii – skontrolujte ich v časti Zabezpečenie → Secure Gateway.",
"ociTitle": "Kontajner z OCI obrazu",
"ociBody": "Tento kontajner bol vytvorený z OCI (Docker) obrazu. Pripravovaná podpora aktualizácií OCI kontajnerov vytvorí kontajner znova z novšieho tagu obrazu namiesto aktualizácie balíkov vo vnútri.",
"helperNotUpdateable": "Register community-scripts označuje túto aplikáciu ako neaktualizovateľnú.",
"helperDetectedTitle": "Našiel sa aktualizačný skript z helper-scripts",
"helperDetectedBody": "Najbezpečnejšie je spustiť aktualizáciu ručne.",
"dockerImagesTitle": "Docker obrazy",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Obrazy",
"dockerImagesReadOnly": "Značky sa porovnávajú podľa digestu registra. Služby Compose môžu stiahnuť obraz a znova sa vytvoriť z deklarovaného projektu.",
"dockerEngineManagedByOs": "Docker Engine {version} je spravovaný balíkmi a aktualizuje sa vyššie uvedenou akciou balíkov OS.",
"dockerEngineSubheading": "Engine",
"dockerEngineDetected": "Zistený Docker Engine {version}",
"dockerEngineUpdateHelp": "Aktualizuje iba nainštalované balíky Docker a potrebné závislosti. Ostatné balíky OS ani kontajnery nemení.",
"updateDockerEngineOnly": "Aktualizovať Docker Engine",
"adguardWebUpdateOnly": "Táto inštalácia AdGuard Home sa aktualizuje vo vlastnom webovom rozhraní.",
"openAdguard": "Otvoriť AdGuard Home",
"updateDockerImage": "Aktualizovať obraz",
"recreateStandaloneContainer": "Aktualizovať {container}",
"standaloneRecreatePending": "Samostatné kontajnery vyžadujú chránené opätovné vytvorenie: {names}",
"noDockerImages": "Docker je nainštalovaný, ale nenašli sa žiadne označené obrazy.",
"dockerInventoryStarting": "Čaká sa na dokončenie spustenia Dockeru…",
"dockerInventoryUnavailable": "Inventár Dockeru sa nepodarilo načítať. Skontrolujte ho znova, keď bude Docker dostupný.",
"usedByContainers": "Používa: {names}",
"imageUpdateAvailable": "Dostupný nový obraz",
"imageUpToDate": "Aktuálne",
"imageInstalledTag": "nainštalovaná značka",
"imageDigestUnknown": "Digest nie je dostupný",
"dockerPendingSummary": "Zistené aktualizácie Docker obrazov: {count}. Použite príslušný postup Docker alebo Compose.",
"postApplyChecking": "Overuje sa výsledok aktualizácie…",
"postApplyAllOk": "{count} balíkov bolo úspešne použitých – nič sa nečaká.",
"postApplyNothingPending": "Nič sa nečaká – všetko je aktuálne.",
"postApplyPartial": "{pending} balíkov, ktoré po spustení stále čakajú.",
"postApplyPartialSubline": "Použilo sa {applied}. Niektoré aktualizácie sa nedokončili – skontrolujte výstup terminálu vyššie."
},
"bulkUpdate": {
"title": "Hromadná aktualizácia",
"description": "Nastavte jednu akciu na aktualizáciu operačného systému a vybraných metód v tomto kontajneri.",
"loading": "Načítava sa konfigurácia…",
"notConfigured": "Nenakonfigurované.",
"configure": "Nastaviť",
"edit": "Upraviť",
"apply": "Použiť aktualizácie",
"osTarget": "Operačný systém",
"osRequired": "Povinné pre hromadnú aktualizáciu.",
"includesDependencies": "Zahŕňa aj deklarované závislosti: {names}",
"noMethod": "Nie je dostupná žiadna spustiteľná metóda aktualizácie.",
"staleTarget": "Tento výber už nie je dostupný. Pred uložením ho odstráňte.",
"dockerInventoryPending": "Čaká sa na inventár obrazov Docker…",
"missingDockerTarget": "Obraz Docker nie je dostupný",
"selectAtLeastOne": "Okrem operačného systému vyberte aspoň jeden cieľ aktualizácie.",
"cancel": "Zrušiť",
"save": "Uložiť",
"delete": "Odstrániť konfiguráciu",
"deleteConfirm": "Odstrániť túto konfiguráciu hromadnej aktualizácie?",
"saveFailed": "Konfiguráciu hromadnej aktualizácie sa nepodarilo uložiť.",
"deleteFailed": "Konfiguráciu hromadnej aktualizácie sa nepodarilo odstrániť.",
"planFailed": "Hromadnú aktualizáciu sa nepodarilo pripraviť. Skontrolujte nedostupné metódy."
},
"appEditor": {
"closePanel": "Zavrieť panel",
"cancelButton": "Zrušiť",
@@ -1283,6 +1342,17 @@
"hiddenBadge": "Momentálne skryté — po obnovení sa znova zobrazí v zozname nájdených aplikácií",
"registerDifferent": "Pridať inú aplikáciu",
"detectedInContainer": "Nájdené v tomto kontajneri",
"versionDetected": "Verzia {version} zistená v tomto kontajneri",
"legacyDetectorUsed": "Zistené pomocou staršieho kompatibilného detektora",
"dockerImagesTitle": "Aktualizácie Docker obrazov",
"dockerImagesHelp": "Kontroluje každý lokálny obraz oddelene od Docker enginu porovnaním nemenných digestov registra.",
"refreshDockerImages": "Skontrolovať teraz",
"noDockerImages": "Nenašli sa žiadne označené Docker obrazy",
"usedByContainers": "Používa: {names}",
"imageUpdateAvailable": "Dostupný nový obraz",
"imageUpToDate": "Aktuálne",
"imageDigestUnknown": "Digest nie je dostupný",
"dockerReadOnlyNote": "Kontrola iba na čítanie: žiadny obraz sa nesťahuje a žiadny kontajner sa nereštartuje.",
"installedManaged": "Nainštalované a spravované cez ProxMenux",
"nameLabel": "Názov",
"installedViaLabel": "Spôsob inštalácie",
@@ -1339,6 +1409,17 @@
"jsonPathPlaceholder": "napr. data.version alebo releases[0].tag_name",
"dockerImageLabel": "Obraz na Docker Hub",
"dockerImagePlaceholder": "napr. linuxserver/plex alebo nginx",
"dockerVersionedTagsHelp": "Použite iba pre verziované tagy. Pre latest, stable alebo lts použite aktualizácie Docker obrazov podľa digestu.",
"dockerPresetSemver": "Iba SemVer",
"dockerPresetSemverSuffix": "SemVer + prípona",
"dockerTagFilterHelp": "Filtruje skutočné tagy pred výberom najvyššej verzie.",
"dockerTagPreviewLabel": "Náhľad skutočných tagov",
"dockerTagPreviewCount": "{matched} zhodných z {scanned}",
"dockerTagPreviewLoading": "Kontroluje sa Docker Hub…",
"dockerTagPreviewFailed": "Tagy Docker Hub sa nepodarilo zobraziť",
"dockerTagPreviewEmpty": "Tomuto filtru nezodpovedá žiadny skutočný tag.",
"dockerMovingTag": "pohyblivý tag",
"dockerMovingTagHelp": "Pohyblivé tagy neobsahujú verziu. Sledujte ich podľa digestu v aktualizáciách Docker obrazov.",
"tagRegexLabel": "Regex tagu (so zachytávacou skupinou)",
"tagRegexPlaceholder": "napr. v?(\\d+\\.\\d+\\.\\d+)",
"tagRegexBare": "v?(\\d+\\.\\d+\\.\\d+)",
@@ -1371,7 +1452,14 @@
"registerCustom": "Pridať vlastnú aplikáciu",
"noAppsTitle": "Nie sú pridané žiadne aplikácie",
"noAppsBody": "Pridajte aplikácie, ktoré bežia v tomto kontajneri. Získate odkazy na ich webové rozhranie a voliteľne aj sledovanie dostupných verzií s upozorneniami na nové vydania.",
"registerApplication": "Pridať aplikáciu",
"registerApplication": "Registrovať aplikáciu",
"searchApplications": "Hľadať aplikácie",
"searchingApplications": "Hľadajú sa aplikácie…",
"noApplicationsDetected": "Neboli zistené žiadne aplikácie.",
"noNewApplicationsDetected": "Neboli zistené žiadne nové aplikácie.",
"oneNewApplicationDetected": "Bola zistená jedna nová aplikácia.",
"newApplicationsDetected": "Boli zistené {count} nové aplikácie.",
"detectionFailed": "Zisťovanie aplikácií zlyhalo",
"hiddenSuffix": "skryté: {count}",
"confirmHide": "Natrvalo skryť nájdenú aplikáciu „{name}“ v tomto kontajneri?\n\nAk ju budete chcieť neskôr vrátiť, kliknite na „Pridať inú aplikáciu“. V zozname skrytých aplikácií ju potom môžete obnoviť.",
"saveFailed": "Uloženie zlyhalo",
@@ -1382,6 +1470,13 @@
"binaryArgsHintGrafana": "Grafana potrebuje",
"loadFailed": "Nastavenia aplikácií sa nepodarilo načítať",
"checkFailed": "Kontrola zlyhala",
"testDetectorButton": "Otestovať detektor",
"testingDetectorButton": "Testovanie detektora…",
"detectorTestTitle": "Výsledok testu detektora",
"detectorTestNotSaved": "Iba koncept · neuložené",
"detectorTestNoVersion": "Nebola zistená žiadna verzia",
"detectorTestNoUpstream": "Nie je nastavený zdroj upstream",
"detectorTestFailed": "Test detektora zlyhal",
"deleteFailed": "Odstránenie zlyhalo",
"dismissFailed": "Nájdenú aplikáciu sa nepodarilo skryť",
"restoreFailed": "Nájdenú aplikáciu sa nepodarilo obnoviť",
@@ -1398,6 +1493,10 @@
"webLinks": "Webové odkazy",
"addPort": "Pridať port",
"detectedPorts": "Porty nájdené v kontajneri — kliknutím ich pridáte:",
"dockerPublishedServicesTitle": "Služby Docker so zverejnenými portmi",
"dockerPublishedServicesHelp": "Vyberte iba porty, ktoré poskytujú webové rozhranie. ProxMenux tieto kontajnery nezaregistruje ako samostatné aplikácie LXC.",
"dockerPublishedAdd": "Pridať odkaz",
"dockerPublishedPort": "port kontajnera {containerPort} → {hostPort} v LXC",
"noWebPorts": "Nenašli sa žiadne aktívne webové porty. Odkaz môžete vytvoriť ručne cez Pridať port.",
"trackUpstream": "Sledovať dostupnú verziu (voliteľné)",
"trackOff": "Vypnuté — iba odkaz",
@@ -1415,7 +1514,7 @@
"checkButton": "Skontrolovať",
"editFieldsButton": "Upraviť údaje",
"alsoDetectedContainer": "Ďalšie aplikácie nájdené v kontajneri",
"addAnotherApplication": "Pridať ďalšiu aplikáciu",
"addAnotherApplication": "Registrovať ďalšiu aplikáciu",
"doneButton": "Hotovo",
"editButton": "Upraviť",
"upstreamErrorTimeout": "Časový limit siete pri kontaktovaní upstream",