feat(oci): recover applications after a Proxmox reinstall, cluster records and AMD GPU profiles

The installation record of an OCI application travels with its container:
a copy inside the container and another in /etc/pve, written together
with the one kept on the host. A container restored on a newly installed
Proxmox, restored with another ID or moved to another node of a cluster
is recognised and registered again, with its private network, hookscript,
Rclone mount, host firewall rule and NVIDIA runtime. The Monitor offers
the same recovery from the Updates tab.

AMD GPUs are offered by generation. A GPU the ROCm image supports takes
the profile as it is; one of a supported family (Radeon 680M, 780M) is an
experimental option that asks for confirmation and is never proposed; an
older one is not offered. The GPU is checked with a real inference before
the installation accepts it. Recreate changes what runs recognition in an
installed Immich, between the CPU and a GPU of the host.

Updates:
- A failed update that is restored and checked removes its temporary
  container and the disks of the failed attempt.
- Every container volume is part of the backups, so Jellyfin, Plex and
  Hugo update with their default installation.
- An image published with a Docker-format manifest is recognised by its
  layers and build time and updates.
- The Proxmox notes of a multi-container application link to its LAN
  address.
This commit is contained in:
MacRimi
2026-10-04 20:32:17 +02:00
parent 7e9f16fdb3
commit 1f9d2acef5
67 changed files with 4464 additions and 126 deletions
+3
View File
@@ -1204,6 +1204,7 @@
"recover": "Wiederherstellen",
"terminalTitleUpdate": "OCI-Anwendung aktualisieren",
"terminalTitleRecreate": "OCI-Anwendung neu erstellen",
"terminalTitleRecover": "Wiederhergestellte OCI-Anwendung registrieren",
"terminalDescription": "Derselbe Ablauf wie OCI manager Apps → Installierte OCI-Anwendungen verwalten.",
"keepBackup": "Das vor dem Update erstellte Backup behalten",
"noKeepBackup": "Das vor dem Update erstellte Backup wird nicht behalten",
@@ -1415,6 +1416,8 @@
"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.",
"ociRestoredTitle": "Wiederhergestellte OCI-Anwendung",
"ociRestoredBody": "Dieser Container wurde aus einem Backup wiederhergestellt und dieser Host hat keinen Eintrag zu seiner Anwendung, daher kann er von hier aus noch nicht aktualisiert werden. Wiederherstellen registriert ihn erneut auf diesem Host, genauso wie OCI manager Apps → Installierte OCI-Anwendungen verwalten.",
"dockerImagesTitle": "Docker-Images",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Images",
+3
View File
@@ -1225,6 +1225,7 @@
"recover": "Recover",
"terminalTitleUpdate": "Update OCI application",
"terminalTitleRecreate": "Recreate OCI application",
"terminalTitleRecover": "Recover restored OCI application",
"terminalDescription": "The same flow as OCI manager Apps → Manage installed OCI applications.",
"keepBackup": "Keep the backup taken before updating",
"noKeepBackup": "The backup taken before updating is not kept",
@@ -1436,6 +1437,8 @@
"noManagedUpdateInfo": "No update information yet — check from Security → Secure Gateway.",
"ociTitle": "OCI image container",
"ociBody": "This container was created from an OCI image outside OCI manager Apps. It is updated by replacing its image, which ProxMenux does not manage for it.",
"ociRestoredTitle": "Restored OCI application",
"ociRestoredBody": "This container was restored from a backup and this host has no record of its application, so it cannot be updated from here yet. Recover registers it again on this host, the same as OCI manager Apps → Manage installed OCI applications.",
"dockerImagesTitle": "Docker images",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Images",
+3
View File
@@ -1204,6 +1204,7 @@
"recover": "Recuperar",
"terminalTitleUpdate": "Actualizar aplicación OCI",
"terminalTitleRecreate": "Recrear aplicación OCI",
"terminalTitleRecover": "Recuperar aplicación OCI restaurada",
"terminalDescription": "El mismo recorrido que OCI manager Apps → Gestionar aplicaciones OCI instaladas.",
"keepBackup": "Conservar el backup realizado antes de actualizar",
"noKeepBackup": "No se conserva el backup realizado antes de actualizar",
@@ -1415,6 +1416,8 @@
"noManagedUpdateInfo": "Aún no hay información de actualización: verifique desde Seguridad → Secure Gateway.",
"ociTitle": "Contenedor de imágenes OCI",
"ociBody": "Este contenedor se creó desde una imagen OCI fuera de OCI manager Apps. Se actualiza sustituyendo su imagen, algo que ProxMenux no gestiona en este caso.",
"ociRestoredTitle": "Aplicación OCI restaurada",
"ociRestoredBody": "Este contenedor se restauró desde un backup y este host no tiene el registro de su aplicación, así que todavía no se puede actualizar desde aquí. Recuperar lo registra de nuevo en este host, igual que OCI manager Apps → Gestionar aplicaciones OCI instaladas.",
"dockerImagesTitle": "Imágenes Docker",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Imágenes",
+3
View File
@@ -1204,6 +1204,7 @@
"recover": "Récupérer",
"terminalTitleUpdate": "Mettre à jour l'application OCI",
"terminalTitleRecreate": "Recréer l'application OCI",
"terminalTitleRecover": "Récupérer l'application OCI restaurée",
"terminalDescription": "Le même parcours que OCI manager Apps → Gérer les applications OCI installées.",
"keepBackup": "Conserver la sauvegarde prise avant la mise à jour",
"noKeepBackup": "La sauvegarde prise avant la mise à jour n'est pas conservée",
@@ -1415,6 +1416,8 @@
"noManagedUpdateInfo": "Aucune information de mise à jour pour l'instant - vérifiez depuis Sécurité → Secure Gateway.",
"ociTitle": "Conteneur d'images OCI",
"ociBody": "Ce conteneur a été créé à partir d'une image OCI (Docker). La gestion des mises à jour pour les conteneurs OCI est fournie avec la prochaine fonctionnalité d'installation OCI : les mises à jour reconstruiront le conteneur à partir d'une balise d'image plus récente plutôt que de corriger les packages à l'intérieur.",
"ociRestoredTitle": "Application OCI restaurée",
"ociRestoredBody": "Ce conteneur a été restauré depuis une sauvegarde et cet hôte n'a pas l'enregistrement de son application ; il ne peut donc pas encore être mis à jour d'ici. Récupérer l'enregistre à nouveau sur cet hôte, comme OCI manager Apps → Gérer les applications OCI installées.",
"dockerImagesTitle": "Images Docker",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Images",
+3
View File
@@ -1204,6 +1204,7 @@
"recover": "Recupera",
"terminalTitleUpdate": "Aggiorna applicazione OCI",
"terminalTitleRecreate": "Ricrea applicazione OCI",
"terminalTitleRecover": "Recupera applicazione OCI ripristinata",
"terminalDescription": "Lo stesso percorso di OCI manager Apps → Gestisci le applicazioni OCI installate.",
"keepBackup": "Conserva il backup eseguito prima dell'aggiornamento",
"noKeepBackup": "Il backup eseguito prima dell'aggiornamento non viene conservato",
@@ -1415,6 +1416,8 @@
"noManagedUpdateInfo": "Nessuna informazione di aggiornamento ancora: controlla da Sicurezza → Secure Gateway.",
"ociTitle": "Contenitore di immagini OCI",
"ociBody": "Questo contenitore è stato creato da un'immagine OCI (Docker). La gestione degli aggiornamenti per i contenitori OCI arriverà con la prossima funzionalità di installazione OCI: gli aggiornamenti ricostruiranno il contenitore da un tag immagine più recente anziché applicare patch ai pacchetti all'interno.",
"ociRestoredTitle": "Applicazione OCI ripristinata",
"ociRestoredBody": "Questo contenitore è stato ripristinato da un backup e questo host non ha il registro della sua applicazione, quindi non può ancora essere aggiornato da qui. Recupera lo registra di nuovo su questo host, come OCI manager Apps → Gestisci le applicazioni OCI installate.",
"dockerImagesTitle": "Immagini Docker",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Immagini",
+3
View File
@@ -1204,6 +1204,7 @@
"recover": "Recuperar",
"terminalTitleUpdate": "Atualizar aplicação OCI",
"terminalTitleRecreate": "Recriar aplicação OCI",
"terminalTitleRecover": "Recuperar aplicação OCI restaurada",
"terminalDescription": "O mesmo percurso de OCI manager Apps → Gerir aplicações OCI instaladas.",
"keepBackup": "Manter o backup feito antes da atualização",
"noKeepBackup": "O backup feito antes da atualização não é mantido",
@@ -1415,6 +1416,8 @@
"noManagedUpdateInfo": "Nenhuma informação de atualização ainda — verifique em Segurança → Secure Gateway.",
"ociTitle": "Contêiner de imagem OCI",
"ociBody": "Este contêiner foi criado a partir de uma imagem OCI (Docker). O gerenciamento de atualizações para contêineres OCI vem com o próximo recurso de instalação do OCI – as atualizações reconstruirão o contêiner a partir de uma tag de imagem mais recente, em vez de corrigir os pacotes internos.",
"ociRestoredTitle": "Aplicação OCI restaurada",
"ociRestoredBody": "Este contêiner foi restaurado a partir de um backup e este host não tem o registro da sua aplicação, por isso ainda não pode ser atualizado daqui. Recuperar o registra novamente neste host, tal como OCI manager Apps → Gerenciar aplicações OCI instaladas.",
"dockerImagesTitle": "Imagens Docker",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Imagens",
+3
View File
@@ -1225,6 +1225,7 @@
"recover": "Obnoviť",
"terminalTitleUpdate": "Aktualizovať OCI aplikáciu",
"terminalTitleRecreate": "Znovu vytvoriť OCI aplikáciu",
"terminalTitleRecover": "Obnoviť obnovenú OCI aplikáciu",
"terminalDescription": "Použije sa rovnaký postup ako v ponuke Správca OCI aplikácií → Spravovať nainštalované OCI aplikácie.",
"keepBackup": "Ponechať zálohu vytvorenú pred aktualizáciou",
"noKeepBackup": "Záloha vytvorená pred aktualizáciou sa neponecháva",
@@ -1436,6 +1437,8 @@
"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 mimo Správcu OCI aplikácií. Aktualizuje sa nahradením obrazu, čo ProxMenux pri tomto kontajneri nespravuje.",
"ociRestoredTitle": "Obnovená OCI aplikácia",
"ociRestoredBody": "Tento kontajner bol obnovený zo zálohy a tento hostiteľ nemá záznam o jeho aplikácii, preto ho zatiaľ nemožno aktualizovať odtiaľto. Obnoviť ho znova zaregistruje na tomto hostiteľovi, rovnako ako OCI manager Apps → Spravovať nainštalované OCI aplikácie.",
"dockerImagesTitle": "Docker obrazy",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Obrazy",
+3
View File
@@ -1204,6 +1204,7 @@
"recover": "Återställ",
"terminalTitleUpdate": "Uppdatera OCI-applikation",
"terminalTitleRecreate": "Återskapa OCI-applikation",
"terminalTitleRecover": "Återställ återställd OCI-applikation",
"terminalDescription": "Samma flöde som OCI manager Apps → Hantera installerade OCI-applikationer.",
"keepBackup": "Behåll säkerhetskopian som tas före uppdateringen",
"noKeepBackup": "Säkerhetskopian som tas före uppdateringen behålls inte",
@@ -1415,6 +1416,8 @@
"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.",
"ociRestoredTitle": "Återställd OCI-applikation",
"ociRestoredBody": "Den här behållaren återställdes från en säkerhetskopia och den här värden har ingen post för dess applikation, så den kan ännu inte uppdateras härifrån. Återställ registrerar den igen på den här värden, på samma sätt som OCI manager Apps → Hantera installerade OCI-applikationer.",
"dockerImagesTitle": "Docker-avbilder",
"dockerAppTitle": "Docker",
"dockerImagesSubheading": "Avbilder",