From 3686d613e6ff4491d18e73919ffd4355d10d5473 Mon Sep 17 00:00:00 2001 From: MacRimi Date: Sun, 25 Oct 2026 19:22:44 +0100 Subject: [PATCH] ProxMenux 1.2.7: release notes, changelog and version --- AppImage/components/release-notes-modal.tsx | 72 ++- AppImage/lib/version.ts | 2 +- AppImage/messages/de/common.json | 5 +- AppImage/messages/en/common.json | 5 +- AppImage/messages/es/common.json | 5 +- AppImage/messages/fr/common.json | 5 +- AppImage/messages/it/common.json | 5 +- AppImage/messages/pt/common.json | 5 +- AppImage/messages/sk/common.json | 5 +- AppImage/messages/sv/common.json | 5 +- AppImage/package-lock.json | 4 +- AppImage/package.json | 2 +- CHANGELOG.md | 512 ++++++++++++++++++++ web/data/changelog/es.md | 512 ++++++++++++++++++++ 14 files changed, 1118 insertions(+), 26 deletions(-) diff --git a/AppImage/components/release-notes-modal.tsx b/AppImage/components/release-notes-modal.tsx index c8caa849..eda3659c 100644 --- a/AppImage/components/release-notes-modal.tsx +++ b/AppImage/components/release-notes-modal.tsx @@ -3,7 +3,7 @@ import { useState, useEffect } from "react" import { Button } from "./ui/button" import { Dialog, DialogContent, DialogTitle } from "./ui/dialog" -import { X, Sparkles, Thermometer, Activity, HardDrive, Shield, Globe, Cpu, Zap, Sliders, Wrench, RefreshCw, Server, BellOff, Bell, Calendar, DatabaseBackup, Smartphone, Languages, Package, ScrollText, ArrowUpCircle } from "lucide-react" +import { X, Sparkles, Thermometer, Activity, HardDrive, Shield, Globe, Cpu, Zap, Sliders, Wrench, RefreshCw, Server, BellOff, Bell, Calendar, DatabaseBackup, Smartphone, Languages, Package, ScrollText, ArrowUpCircle, Search } from "lucide-react" import { Checkbox } from "./ui/checkbox" import { useT } from "../lib/i18n/provider" import { APP_VERSION } from "../lib/version" @@ -18,6 +18,35 @@ interface ReleaseNote { } export const CHANGELOG: Record = { + "1.2.7": { + date: "October 26, 2026", + changes: { + added: [ + "Audit & Report — a new page under Admin that assesses the node against forty-three Proxmox checks, keeps a journal of everything ProxMenux changed on the host, lets the expected state be declared as a policy and prints focused reports.", + "OCI manager Apps (Technology Preview) — applications installed from their official container images as native Proxmox LXC, with no Docker engine: a catalog of 347 applications, multi-container applications, hardware acceleration, updates that keep the data and recovery after a restore.", + "OCI applications in the Monitor — registered in the App tab, updated and modified from the Updates tab, with a Logs tab that follows their console and a watchdog switch.", + "ProxMenux on Proxmox Backup Server — the same installer, a menu, post-install and a Monitor of its own; a remote PBS can also be watched from PVE with a read-only token (contributed by @jcastro).", + "Search in the main menu across ProxMenux options, OCI applications and Helper-Scripts, and Helper-Scripts addons run on the host or inside the LXC they belong to.", + "Backup jobs of VMs and LXCs listed, created, edited and run from the Backup tab (contributed by @MattiaC46); VM and CT backups can be deleted and the retention of each backup storage edited (contributed by @jcastro).", + "Notifications in the reader's language (contributed by @Vaso73), a delivery history in the notification settings and grouped application update notifications.", + "The NVIDIA Container Toolkit installs with the driver, a ZRAM swap profile joins the customizable post-install (contributed by @phyrexia) and FygoOS joins the NAS systems of Create VM.", + ], + changed: [ + "Read-only API tokens only read: every action that changes something, opening a terminal and revealing a stored credential require a full-admin token (reported by @f3rs3n).", + "Docker applications are registered with their own identity while their updates stay tied to the image (contributed by @byGarcia).", + "The observations of a disk belong to its serial number, and idle mechanical disks are left to spin down (reported by @spectante).", + "Find applications recognises services installed by hand and Docker containers with published ports, and LXC package checks and installs are separate steps (contributed by @Vaso73).", + "The node name in the header opens the other Monitors of the cluster and the configured PBS servers.", + ], + fixed: [ + "Proxmox notifications arrive with HTTPS enabled on the Monitor, through a local listener that needs no certificate.", + "The Monitor leaves /etc/pve alone while Proxmox restarts its cluster service (reported by @shtefko).", + "Host backups work on hosts with SELinux (reported by @sbaghdadi), and the node web certificate is restored on the node it belongs to (reported by @tropicaljoe).", + "Log2RAM keeps the newest records of the journal and compresses rotated logs at once (reported by @f3rs3n).", + "Changing the mode of a GPU leaves the devices that share its slot alone (reported by @LucasR3C3).", + ], + }, + }, "1.2.6": { date: "September 2, 2026", changes: { @@ -304,10 +333,30 @@ export const CHANGELOG: Record = { // build-i18n-messages workflow feeds to Google Translate for locales // that haven't been curated by hand. const CURRENT_VERSION_FEATURES = [ + { + icon: , + key: "releaseNotes.currentFeatures.auditAssessment", + text: "Audit & Report — a new page that documents and assesses the node. The Assessment runs a catalogue of checks across security, backups, capacity, storage, network, hardware, guests and system, classifying each finding as critical, warning, observation or conformant and stating what it read rather than judging it.", + }, + { + icon: , + key: "releaseNotes.currentFeatures.changeJournal", + text: "Change journal — a Changes view that lists exactly what ProxMenux modified on this host: every configuration file, package and service it touched, with the prior state of each, deduplicated to a current-state view that shows the host as it stands now rather than a log of every run.", + }, + { + icon: , + key: "releaseNotes.currentFeatures.auditReports", + text: "Reports — a full audit plus focused Security review, Backup assurance and Capacity & wear reports, each opening on its own posture header, and a printable Inventory; all export to PDF. A security assessment asks before running Lynis so a run stays fast.", + }, + { + icon: , + key: "releaseNotes.currentFeatures.auditPolicyBaseline", + text: "Policy and baseline — declare what the host is expected to be (backup requirements, firewall, root SSH login) so findings grade against it, mark a run as the reference, and see what changed since, with new, resolved and accepted findings kept apart.", + }, { icon: , - key: "releaseNotes.currentFeatures.ociManager", - text: "OCI manager Apps (Technology Preview) — a new entry in the ProxMenux menu installs applications from their official container images as native Proxmox LXC, with no Docker engine. The catalog carries over 360 applications.", + key: "releaseNotes.currentFeatures.ociCatalog", + text: "OCI manager Apps (Technology Preview) — a new entry in the ProxMenux menu installs applications from their official container images as native Proxmox LXC, with no Docker engine. The catalog carries 347 applications.", }, { icon: , @@ -325,14 +374,14 @@ const CURRENT_VERSION_FEATURES = [ text: "An OCI application travels with its backup — restored on this host or on another one, it is registered and managed again, and in a cluster it starts on whichever node it moves to.", }, { - icon: , - key: "releaseNotes.currentFeatures.ociWatchdog", - text: "Watchdog for OCI applications — an application that stops on its own is started again and a notification says so. It is not restarted when the user stops it, or while a backup or a migration is in progress.", + icon: , + key: "releaseNotes.currentFeatures.pbsSupport", + text: "ProxMenux on Proxmox Backup Server — it installs with the same command and opens a menu of its own, with post-install and a Monitor showing the health, datastores and tasks of the server (contributed by @jcastro).", }, { - icon: , - key: "releaseNotes.currentFeatures.shareCoveX", - text: "ShareCoveX joins the catalog — a file server with a web panel that shares host directories or container volumes over SMB, NFS and Time Machine.", + icon: , + key: "releaseNotes.currentFeatures.menuSearch", + text: "Search in the main menu — a name or part of it finds a ProxMenux option, an OCI application or a Helper-Script, and opens it at its first screen.", }, { icon: , @@ -344,11 +393,6 @@ const CURRENT_VERSION_FEATURES = [ key: "releaseNotes.currentFeatures.notificationLanguage", text: "Notifications in your language — titles, bodies and daily digests are written in the language chosen for notifications (contributed by @Vaso73).", }, - { - icon: , - key: "releaseNotes.currentFeatures.auditReviewDate", - text: "Audit & Report — an accepted finding can carry a review date that brings it back without withdrawing the decision, and the comparison says whether a finding got worse, got better or held (with @Vaso73).", - }, ] // Turn any "@handle" mention inside a release-notes string into a diff --git a/AppImage/lib/version.ts b/AppImage/lib/version.ts index f4e96d7d..f05fbfc0 100644 --- a/AppImage/lib/version.ts +++ b/AppImage/lib/version.ts @@ -8,4 +8,4 @@ // 3. beta_version.txt ← bash pipeline (build_appimage.sh) // // Keep the three in sync on every bump. -export const APP_VERSION = "1.2.6.2-beta" +export const APP_VERSION = "1.2.7" diff --git a/AppImage/messages/de/common.json b/AppImage/messages/de/common.json index ba197a33..bdd6238e 100644 --- a/AppImage/messages/de/common.json +++ b/AppImage/messages/de/common.json @@ -3723,7 +3723,10 @@ "shareCoveX": "ShareCoveX kommt in den Katalog – ein Dateiserver mit Web-Panel, der Host-Verzeichnisse oder Container-Volumes über SMB, NFS und Time Machine freigibt.", "guestBackupJobs": "Backup-Jobs von VMs und LXCs – die Backup-Registerkarte listet die geplanten Jobs von Proxmox auf und erstellt, bearbeitet, aktiviert und startet sie; es sind dieselben wie unter Datacenter → Backup (beigetragen von @MattiaC46).", "notificationLanguage": "Benachrichtigungen in Ihrer Sprache – Titel, Texte und tägliche Zusammenfassungen werden in der für Benachrichtigungen gewählten Sprache verfasst (beigetragen von @Vaso73).", - "auditReviewDate": "Audit & Report – ein akzeptierter Befund kann ein Überprüfungsdatum tragen, das ihn wieder vorlegt, ohne die Entscheidung zurückzuziehen, und der Vergleich gibt an, ob sich ein Befund verschlechtert, verbessert oder gehalten hat (mit @Vaso73)." + "auditReviewDate": "Audit & Report – ein akzeptierter Befund kann ein Überprüfungsdatum tragen, das ihn wieder vorlegt, ohne die Entscheidung zurückzuziehen, und der Vergleich gibt an, ob sich ein Befund verschlechtert, verbessert oder gehalten hat (mit @Vaso73).", + "ociCatalog": "OCI manager Apps (Technology Preview) – ein neuer Eintrag im ProxMenux-Menü installiert Anwendungen aus ihren offiziellen Container-Images als native Proxmox-LXC, ohne Docker-Engine. Der Katalog umfasst 347 Anwendungen.", + "pbsSupport": "ProxMenux auf Proxmox Backup Server – es wird mit demselben Befehl installiert und öffnet ein eigenes Menü, mit Post-Install und einem Monitor, der Zustand, Datastores und Aufgaben des Servers zeigt (beigetragen von @jcastro).", + "menuSearch": "Suche im Hauptmenü – ein Name oder ein Teil davon findet eine ProxMenux-Option, eine OCI-Anwendung oder ein Helper-Script und öffnet es auf seinem ersten Bildschirm." } }, "network": { diff --git a/AppImage/messages/en/common.json b/AppImage/messages/en/common.json index acba994a..54e8c81b 100644 --- a/AppImage/messages/en/common.json +++ b/AppImage/messages/en/common.json @@ -3850,7 +3850,10 @@ "shareCoveX": "ShareCoveX joins the catalog — a file server with a web panel that shares host directories or container volumes over SMB, NFS and Time Machine.", "guestBackupJobs": "Backup jobs of VMs and LXCs — the Backup tab lists the scheduled jobs of Proxmox and creates, edits, enables and runs them; they are the same ones as Datacenter → Backup (contributed by @MattiaC46).", "notificationLanguage": "Notifications in your language — titles, bodies and daily digests are written in the language chosen for notifications (contributed by @Vaso73).", - "auditReviewDate": "Audit & Report — an accepted finding can carry a review date that brings it back without withdrawing the decision, and the comparison says whether a finding got worse, got better or held (with @Vaso73)." + "auditReviewDate": "Audit & Report — an accepted finding can carry a review date that brings it back without withdrawing the decision, and the comparison says whether a finding got worse, got better or held (with @Vaso73).", + "ociCatalog": "OCI manager Apps (Technology Preview) — a new entry in the ProxMenux menu installs applications from their official container images as native Proxmox LXC, with no Docker engine. The catalog carries 347 applications.", + "pbsSupport": "ProxMenux on Proxmox Backup Server — it installs with the same command and opens a menu of its own, with post-install and a Monitor showing the health, datastores and tasks of the server (contributed by @jcastro).", + "menuSearch": "Search in the main menu — a name or part of it finds a ProxMenux option, an OCI application or a Helper-Script, and opens it at its first screen." } }, "network": { diff --git a/AppImage/messages/es/common.json b/AppImage/messages/es/common.json index d4f8b6b5..0768b5f8 100644 --- a/AppImage/messages/es/common.json +++ b/AppImage/messages/es/common.json @@ -3876,7 +3876,10 @@ "shareCoveX": "ShareCoveX se suma al catálogo — un servidor de archivos con panel web que comparte directorios del host o volúmenes del contenedor por SMB, NFS y Time Machine.", "guestBackupJobs": "Trabajos de backup de VM y LXC — la pestaña Backup lista los trabajos programados de Proxmox y permite crearlos, editarlos, activarlos y ejecutarlos; son los mismos de Datacenter → Backup (aportado por @MattiaC46).", "notificationLanguage": "Notificaciones en tu idioma — títulos, cuerpos y resúmenes diarios se escriben en el idioma elegido para las notificaciones (aportado por @Vaso73).", - "auditReviewDate": "Auditoría e Informes — un hallazgo aceptado puede llevar una fecha de revisión que lo trae de vuelta sin retirar la decisión, y la comparación indica si un hallazgo empeoró, mejoró o se mantuvo (con @Vaso73)." + "auditReviewDate": "Auditoría e Informes — un hallazgo aceptado puede llevar una fecha de revisión que lo trae de vuelta sin retirar la decisión, y la comparación indica si un hallazgo empeoró, mejoró o se mantuvo (con @Vaso73).", + "ociCatalog": "OCI manager Apps (Technology Preview) — una nueva entrada del menú de ProxMenux instala aplicaciones desde sus imágenes de contenedor oficiales como LXC nativos de Proxmox, sin motor Docker. El catálogo reúne 347 aplicaciones.", + "pbsSupport": "ProxMenux en Proxmox Backup Server — se instala con el mismo comando y abre un menú propio, con post-install y un Monitor que muestra la salud, los datastores y las tareas del servidor (aportado por @jcastro).", + "menuSearch": "Búsqueda en el menú principal — un nombre o parte de él encuentra una opción de ProxMenux, una aplicación OCI o un Helper-Script, y lo abre en su primera pantalla." } }, "network": { diff --git a/AppImage/messages/fr/common.json b/AppImage/messages/fr/common.json index bdb12c18..5f45f01e 100644 --- a/AppImage/messages/fr/common.json +++ b/AppImage/messages/fr/common.json @@ -3723,7 +3723,10 @@ "shareCoveX": "ShareCoveX rejoint le catalogue — un serveur de fichiers avec un panneau web qui partage des répertoires de l'hôte ou des volumes du conteneur via SMB, NFS et Time Machine.", "guestBackupJobs": "Tâches de sauvegarde des VM et des LXC — l'onglet Sauvegarde liste les tâches planifiées de Proxmox et permet de les créer, les modifier, les activer et les exécuter ; ce sont les mêmes que dans Datacenter → Backup (contribution de @MattiaC46).", "notificationLanguage": "Notifications dans votre langue — les titres, les corps et les résumés quotidiens sont rédigés dans la langue choisie pour les notifications (contribution de @Vaso73).", - "auditReviewDate": "Audit & Report — une constatation acceptée peut porter une date de révision qui la fait réapparaître sans retirer la décision, et la comparaison indique si une constatation s'est aggravée, améliorée ou maintenue (avec @Vaso73)." + "auditReviewDate": "Audit & Report — une constatation acceptée peut porter une date de révision qui la fait réapparaître sans retirer la décision, et la comparaison indique si une constatation s'est aggravée, améliorée ou maintenue (avec @Vaso73).", + "ociCatalog": "OCI manager Apps (Technology Preview) — une nouvelle entrée du menu ProxMenux installe les applications à partir de leurs images de conteneur officielles en tant que LXC Proxmox natifs, sans moteur Docker. Le catalogue réunit 347 applications.", + "pbsSupport": "ProxMenux sur Proxmox Backup Server — il s'installe avec la même commande et ouvre son propre menu, avec post-installation et un Monitor qui affiche la santé, les datastores et les tâches du serveur (contribution de @jcastro).", + "menuSearch": "Recherche dans le menu principal — un nom ou une partie du nom trouve une option de ProxMenux, une application OCI ou un Helper-Script, et l'ouvre sur son premier écran." } }, "network": { diff --git a/AppImage/messages/it/common.json b/AppImage/messages/it/common.json index 3cedb16f..f470c85b 100644 --- a/AppImage/messages/it/common.json +++ b/AppImage/messages/it/common.json @@ -3723,7 +3723,10 @@ "shareCoveX": "ShareCoveX entra nel catalogo: un file server con pannello web che condivide directory dell'host o volumi del container tramite SMB, NFS e Time Machine.", "guestBackupJobs": "Job di backup di VM e LXC: la scheda Backup elenca i job pianificati di Proxmox e li crea, modifica, abilita ed esegue; sono gli stessi di Datacenter → Backup (contributo di @MattiaC46).", "notificationLanguage": "Notifiche nella tua lingua: titoli, testi e riepiloghi giornalieri sono scritti nella lingua scelta per le notifiche (contributo di @Vaso73).", - "auditReviewDate": "Audit & Report: un risultato accettato può avere una data di revisione che lo ripresenta senza ritirare la decisione, e il confronto indica se un risultato è peggiorato, migliorato o rimasto invariato (con @Vaso73)." + "auditReviewDate": "Audit & Report: un risultato accettato può avere una data di revisione che lo ripresenta senza ritirare la decisione, e il confronto indica se un risultato è peggiorato, migliorato o rimasto invariato (con @Vaso73).", + "ociCatalog": "OCI manager Apps (Technology Preview): una nuova voce nel menu di ProxMenux installa le applicazioni dalle loro immagini container ufficiali come LXC nativi di Proxmox, senza motore Docker. Il catalogo contiene 347 applicazioni.", + "pbsSupport": "ProxMenux su Proxmox Backup Server: si installa con lo stesso comando e apre un menu proprio, con post-installazione e un Monitor che mostra lo stato, i datastore e le attività del server (contributo di @jcastro).", + "menuSearch": "Ricerca nel menu principale: un nome o parte di esso trova un'opzione di ProxMenux, un'applicazione OCI o un Helper-Script e lo apre alla sua prima schermata." } }, "network": { diff --git a/AppImage/messages/pt/common.json b/AppImage/messages/pt/common.json index bec98bb2..7ce987c2 100644 --- a/AppImage/messages/pt/common.json +++ b/AppImage/messages/pt/common.json @@ -3723,7 +3723,10 @@ "shareCoveX": "ShareCoveX junta-se ao catálogo — um servidor de ficheiros com painel web que partilha diretórios do host ou volumes do contentor por SMB, NFS e Time Machine.", "guestBackupJobs": "Tarefas de backup de VM e LXC — o separador Backup lista as tarefas agendadas do Proxmox e permite criá-las, editá-las, ativá-las e executá-las; são as mesmas de Datacenter → Backup (contribuição de @MattiaC46).", "notificationLanguage": "Notificações no seu idioma — títulos, corpos e resumos diários são escritos no idioma escolhido para as notificações (contribuição de @Vaso73).", - "auditReviewDate": "Auditoria & Relatório — uma constatação aceite pode ter uma data de revisão que a traz de volta sem retirar a decisão, e a comparação indica se uma constatação piorou, melhorou ou se manteve (com @Vaso73)." + "auditReviewDate": "Auditoria & Relatório — uma constatação aceite pode ter uma data de revisão que a traz de volta sem retirar a decisão, e a comparação indica se uma constatação piorou, melhorou ou se manteve (com @Vaso73).", + "ociCatalog": "OCI manager Apps (Technology Preview) — uma nova entrada no menu do ProxMenux instala aplicações a partir das suas imagens de contentor oficiais como LXC nativos do Proxmox, sem motor Docker. O catálogo reúne 347 aplicações.", + "pbsSupport": "ProxMenux no Proxmox Backup Server — instala-se com o mesmo comando e abre um menu próprio, com pós-instalação e um Monitor que mostra o estado, os datastores e as tarefas do servidor (contribuição de @jcastro).", + "menuSearch": "Pesquisa no menu principal — um nome ou parte dele encontra uma opção do ProxMenux, uma aplicação OCI ou um Helper-Script e abre-o no seu primeiro ecrã." } }, "network": { diff --git a/AppImage/messages/sk/common.json b/AppImage/messages/sk/common.json index 265187fa..225a7aee 100644 --- a/AppImage/messages/sk/common.json +++ b/AppImage/messages/sk/common.json @@ -3722,7 +3722,10 @@ "shareCoveX": "ShareCoveX pribudol do katalógu — súborový server s webovým panelom, ktorý zdieľa adresáre hostiteľa alebo zväzky kontajnera cez SMB, NFS a Time Machine.", "guestBackupJobs": "Úlohy zálohovania VM a LXC — karta Zálohovanie zobrazuje naplánované úlohy Proxmoxu a umožňuje ich vytvárať, upravovať, povoľovať a spúšťať; sú to tie isté ako v Datacenter → Backup (prispel @MattiaC46).", "notificationLanguage": "Upozornenia vo vašom jazyku — názvy, texty a denné súhrny sú napísané v jazyku zvolenom pre upozornenia (prispel @Vaso73).", - "auditReviewDate": "Audit a správy — akceptované zistenie môže mať dátum kontroly, ktorý ho znova pripomenie bez zrušenia rozhodnutia, a porovnanie ukáže, či sa zistenie zhoršilo, zlepšilo alebo zostalo rovnaké (s @Vaso73)." + "auditReviewDate": "Audit a správy — akceptované zistenie môže mať dátum kontroly, ktorý ho znova pripomenie bez zrušenia rozhodnutia, a porovnanie ukáže, či sa zistenie zhoršilo, zlepšilo alebo zostalo rovnaké (s @Vaso73).", + "ociCatalog": "OCI manager Apps (Technology Preview) — nová položka v ponuke ProxMenux inštaluje aplikácie z ich oficiálnych kontajnerových image ako natívne Proxmox LXC, bez enginu Docker. Katalóg obsahuje 347 aplikácií.", + "pbsSupport": "ProxMenux na Proxmox Backup Server — inštaluje sa rovnakým príkazom a otvára vlastnú ponuku s poinštaláciou a Monitorom, ktorý zobrazuje stav, úložiská dát a úlohy servera (prispel @jcastro).", + "menuSearch": "Vyhľadávanie v hlavnej ponuke — názov alebo jeho časť nájde možnosť ProxMenux, aplikáciu OCI alebo Helper-Script a otvorí ju na jej prvej obrazovke." } }, "network": { diff --git a/AppImage/messages/sv/common.json b/AppImage/messages/sv/common.json index 1b21688f..f9c96e2e 100644 --- a/AppImage/messages/sv/common.json +++ b/AppImage/messages/sv/common.json @@ -3723,7 +3723,10 @@ "shareCoveX": "ShareCoveX läggs till i katalogen — en filserver med webbpanel som delar värdkataloger eller containervolymer över SMB, NFS och Time Machine.", "guestBackupJobs": "Säkerhetskopieringsjobb för VM:ar och LXC:er — fliken Säkerhetskopiering listar Proxmox schemalagda jobb och skapar, redigerar, aktiverar och kör dem; de är desamma som i Datacenter → Backup (bidrag från @MattiaC46).", "notificationLanguage": "Meddelanden på ditt språk — titlar, brödtexter och dagliga sammanfattningar skrivs på det språk som valts för meddelanden (bidrag från @Vaso73).", - "auditReviewDate": "Audit & Report — ett accepterat fynd kan ha ett granskningsdatum som tar upp det igen utan att beslutet dras tillbaka, och jämförelsen visar om ett fynd blev värre, blev bättre eller låg kvar (med @Vaso73)." + "auditReviewDate": "Audit & Report — ett accepterat fynd kan ha ett granskningsdatum som tar upp det igen utan att beslutet dras tillbaka, och jämförelsen visar om ett fynd blev värre, blev bättre eller låg kvar (med @Vaso73).", + "ociCatalog": "OCI manager Apps (Technology Preview) — en ny post i ProxMenux-menyn installerar applikationer från deras officiella containeravbilder som inbyggda Proxmox LXC, utan Docker-motor. Katalogen innehåller 347 applikationer.", + "pbsSupport": "ProxMenux på Proxmox Backup Server — installeras med samma kommando och öppnar en egen meny, med efterinstallation och en Monitor som visar serverns hälsa, datalager och uppgifter (bidrag från @jcastro).", + "menuSearch": "Sökning i huvudmenyn — ett namn eller en del av det hittar ett ProxMenux-alternativ, en OCI-applikation eller ett Helper-Script och öppnar det på dess första skärm." } }, "network": { diff --git a/AppImage/package-lock.json b/AppImage/package-lock.json index fd2b2ee6..742aa56a 100644 --- a/AppImage/package-lock.json +++ b/AppImage/package-lock.json @@ -1,12 +1,12 @@ { "name": "ProxMenux-Monitor", - "version": "1.2.6.2-beta", + "version": "1.2.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ProxMenux-Monitor", - "version": "1.2.6.2-beta", + "version": "1.2.7", "dependencies": { "@hookform/resolvers": "^3.10.0", "@radix-ui/react-accordion": "1.2.2", diff --git a/AppImage/package.json b/AppImage/package.json index e1ec1d3c..48eac13b 100644 --- a/AppImage/package.json +++ b/AppImage/package.json @@ -1,6 +1,6 @@ { "name": "ProxMenux-Monitor", - "version": "1.2.6.2-beta", + "version": "1.2.7", "description": "Proxmox System Monitoring Dashboard", "private": true, "scripts": { diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f25a490..b446bdb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,516 @@ +## 2026-10-26 + +### New version ProxMenux v1.2.7 + +ProxMenux 1.2.7 brings two new tools. **Audit & Report**, a new page under Admin in ProxMenux Monitor, documents a Proxmox node, assesses it against forty-three checks and prints the result as a report you can hand to somebody else, next to a journal of everything ProxMenux itself has changed on the host. **OCI manager Apps**, a new entry in the main menu, installs applications straight from their official container images as native Proxmox LXC containers, with no Docker engine anywhere: a catalog of 347 applications, multi-container applications such as Immich, Nextcloud and Paperless, hardware acceleration profiles, updates that keep the data, and recovery after a restore or on another host, all of it also managed from the Monitor. + +Around them: a **search in the main menu** across ProxMenux options, OCI applications and Helper-Scripts, **ProxMenux on Proxmox Backup Server**, the **backup jobs of VMs and CTs** managed from ProxMenux, read-only API tokens that can only read, notifications written in the reader's language, Docker applications registered with their own identity, a disk history that follows each disk by its serial number, and a long list of improvements across backups, notifications, the Monitor, the installer and the translations, in eight languages. + +This version gathers everything the 1.2.6.1 and 1.2.6.2 betas brought. A special thank you goes to [@Vaso73](https://github.com/Vaso73), [@f3rs3n](https://github.com/f3rs3n) and [@jcastro](https://github.com/jcastro). Between them they contributed more than a hundred pull requests during this cycle: real installations compared against their Docker originals, ProxMenux on Proxmox Backup Server, private registries and faster operations in OCI manager, corrections across the Monitor, backups and notifications, a review of hundreds of messages so that each one says exactly what happened, the documentation reviewed in every language, and the Slovak and Italian of everything new. Their testing and debugging are a large part of why this version is available. + +--- + +## 🔎 Audit & Report — a new page under Admin + +The page holds three views, and every one of them only reads: an assessment never modifies the host. + +**Assessment** evaluates the node and lists what it finds. **Changes** shows what ProxMenux has done to it. **Policy** is where you declare what the host is supposed to be, which is what turns a description into a judgement. + +### The assessment + +- **Forty-three Proxmox-specific checks** across backup, system, guests, security, storage, network and hardware. Among them: which guests no enabled backup job covers and how old the copies the destinations actually hold are; whether Proxmox Backup Server verified the newest copy of each guest; how the recorded backup runs ended; space *and inodes* on the filesystems the node itself needs; ZFS pool integrity and device error counters; software RAID and multipath redundancy; Ceph's own verdict; cluster quorum and the corosync links carrying it; high availability where quorum cannot answer; the EFI partitions that would start the kernel; essential services and units systemd gave up on; certificate validity; how SSH admits root; the update chain; and whether the channels that would notify you are themselves working. +- **Every finding carries the evidence it rests on** — the command output or configuration fragment — together with what the check examines and where the reading came from. Evidence is presented as tables and labelled values, with field names humanised and figures formatted by what they are: bytes as a size, hours as a duration, an instant as a date in your own locale. +- **Six results, each with a definition it has to earn.** *Critical* is an interruption or an urgent threat to availability, integrity or recoverability, with evidence. *Warning* is a verified degradation, an absent protection that was expected, or a declared policy that is not met. *Observation* is configuration, a limit or planning information. *Conformant* means the criterion was verified and met. *Unverified* means there was not enough information to conclude. *Not applicable* means there was nothing to evaluate. +- **A check that could not be evaluated says what it could not read** — the destination that refused the connection, the command that failed — beside the result rather than two collapsed panels below it. Missing evidence is never counted as a favourable result. +- **Gravity belongs to the situation, not to the check.** A storage at 90% capacity and an unreachable storage come from the same check and no longer share a severity; a finding takes the gravest of the objects it reports on. +- **Accepted risks** are recorded against a finding with a mandatory reason and an optional review period. The technical classification stands and the decision sits beside it, so a report still shows that a critical finding was accepted and by whom. When the period ends, the finding returns to the active set. +- **An accepted risk can carry a review date without an expiry** ([#343](https://github.com/MacRimi/ProxMenux/discussions/343), with [@Vaso73](https://github.com/Vaso73)): the decision stays in force and comes back to be looked at. +- **The assessment describes its own effects accurately** ([PR #352](https://github.com/MacRimi/ProxMenux/pull/352), contributed by [@f3rs3n](https://github.com/f3rs3n)), and the Lynis removal says what happened ([PR #404](https://github.com/MacRimi/ProxMenux/pull/404)). +- **Lynis is read, not reimplemented.** Its warnings keep their test identifiers and are collapsed to one row per distinct warning with the number of times it was raised. Where Lynis is installed but has no usable report, the assessment offers to run one before it starts, so the choice of paying that minute is yours. +- Findings store the identity of their message and its values rather than a rendered sentence, so a report reads in the language of whoever opens it. + +### Changes — what ProxMenux did to this host + +The complaint that lands hardest against a tool like this one is not that it changes things: it is that afterwards nobody can say what it changed. Reading the script does not answer it either — a function of four hundred lines may alter two values, and the reader has no way to know which two. + +- **Three blocks answer the three questions an administrator actually asks**: what the post-install left configured, which ProxMenux scripts wrote to the host and what each one changed, and which packages and utilities are now installed. Every entry names the script it came from, so a change traces back to the menu that made it. +- **Only the change is shown.** `optimize_logrotate` reads as `rotate 7` → `rotate 14`, not as forty lines of shell. What was replaced is kept in a content store keyed by digest, so it survives somebody tidying `/etc`. +- **What was changed is separated from what was run.** A function that rewrites a file authored that change; an upgrade launched from a menu did not — apt decided what changed. Both are recorded, in different classes, and the interface says so. +- **How well the previous state is known travels with each entry**: captured as it happened, captured on re-application to an already-modified host, or never captured because it predates the journal. Each entry also declares how exactly it could be undone — exact, partial, or not at all. +- **Installations record the difference they made**, not the name that was asked for: the packages that were absent and are now present, dependencies included. +- **The journal shows the host as it stands now**, not a log of every time a script ran. Re-running the post-install, moving between the stable and beta channels or reinstalling a utility updates the existing entry in place, origin state on one side and current state on the other. +- **Recording never costs an operation.** One small JSON file written whole into a spool the Monitor consolidates: no database, no Python, no network on the writing side. If the journal cannot be written at all, the change still happens. +- **The customizable post-install is listed under its own option.** Figurine, Fastfetch and the other options applied from that menu appear in the post-install section by their name, next to the ones of the automatic post-install. +- The journal has its own section in the printable report, which is where it defends a host. + +### Policy — declaring what is expected + +- **An assessment can see what a host does, not what it is for.** Whether a guest needs a backup, whether a service must come back by itself, whether a storage is essential — none of that is discoverable, and guessing at it turns ordinary configurations into alarms. A host with nothing declared produces a complete report that describes rather than judges. +- **Declaring is picking from what is there.** Guests and storages are listed from this node's own inventory rather than typed in by identifier. Per guest: whether a backup is required, whether it is expected to start with the host, and a recovery objective in hours where the workload has one. Per storage: essential, optional, or nothing stated. Plus every threshold the checks measure against, each showing the shipped value as its placeholder — leaving a field empty keeps that value. +- **Inheritance is explicit.** *Inherit* shows the site default and removes the per-resource override; *Not stated* is stored as such, so it cannot silently reactivate an inherited requirement. +- **An exempt guest stays visible**, carrying the decision that removed it from the count: *excluded by policy*, which is a different thing from an accepted risk. The report also states which policy it applied, so two reports of the same host — one measured against stated expectations, one against none — no longer read identically. + +### What changed since last time + +- **An assessment now has a before.** Any run can be marked as the reference, and every later one is read against it. +- **Fixed is not the same as accepted.** A finding that stopped being reported because the host changed and one that stopped because somebody accepted the risk both leave the list, and only the first is progress. They are counted separately. +- **The comparison says which way a finding moved** ([#343](https://github.com/MacRimi/ProxMenux/discussions/343), with [@Vaso73](https://github.com/Vaso73)): worse, better or held, in the view and in the printed report. +- **A check that disappears is reported as no longer assessed**, not as resolved: nothing verified that it stopped failing, only that it stopped being asked. + +### Reports + +- **A report answers one question**, so the profile selects both the checks that run and the sections the document carries: *Full audit*, *Inventory*, *Security review*, *Backup assurance*, *Capacity and wear* and *Quick diagnosis*. Each focused report opens with its own posture header. Sections a profile did not ask for are absent rather than empty, so an omission is never read as a result. +- **The document describes the node before judging it.** Identity, cluster, architecture, disks, network, storage, guests, passthrough and managed software come first; the findings follow, because a finding about a bridge means little to a reader who has not been shown the bridge. +- **Diagrams carry the relations, not the lists**: processor and memory in their slots and what hangs off each controller; the path from the wire to each guest through adapter, bond, bridge; where guest disks live and which destination backs them up; cluster membership over the corosync links that join it. Every diagram is inline SVG, so it prints as vector and the document stays self-contained. +- **Quick diagnosis carries only what is asking to be decided** — the critical and warning findings with the evidence needed to act on them, and the readings that could not be taken. Every check still runs: a short report that skipped checks would be quick and untrustworthy. +- **The inventory profile runs no checks at all**, so a node that has never been assessed can still produce its structural document: memory module by module with slot, type, speed and part number; physical disks with model, serial, bus and SMART state; adapters with link speed, driver and PCI address; PCI passthrough with its IOMMU group; and network latency per target. +- **The disks section carries the observation log** — what happened over time, including events a disk recovered from, with type, severity, count and the first and last time each was seen. +- SMART, Lynis, latency and audit reports now share one shell: the same header, numbered sections, cards and callouts, and an icon-only action bar that disappears when the page is printed. +- **Audit findings and printable reports fit narrow screens** ([PR #399](https://github.com/MacRimi/ProxMenux/pull/399), contributed by [@f3rs3n](https://github.com/f3rs3n)). +- **The whole page works on a phone.** Dense tables stack into blocks where the heading travels with the value instead of scrolling sideways, controls take a row each below the small breakpoint, and the report opens as a real navigation so an installed web app keeps its own back and close controls. + +--- + +## 📦 OCI manager Apps (Technology Preview) — official container images as native Proxmox LXC + +ProxMenux does not build its own containers for these applications: it reads the published recipe of each one and turns it into a native Proxmox OCI LXC. OCI manager Apps carries the Technology Preview label that Proxmox VE gives to application containers from OCI images, until Proxmox VE marks them as stable. + +### The catalog + +- **347 applications** from LinuxServer.io, other public image repositories and recipes written for ProxMenux, in the same layout as the Helper-Scripts: a search, the full list, 29 categories and the installed applications. Every application carries its icon and the architectures its image supports. +- **A ✓ marks what was tested for real.** 43 applications read *Verified*: 41 tested in the ProxMenux lab, and PocketBase and Glances tested by the community, by [@Vaso73](https://github.com/Vaso73). An issue form records a new test, and the tester is credited in `oci/VALIDATION.md`. +- **Files & Sharing is a category of its own**, with the sixteen applications that serve or synchronise files. Among them is **ShareCoveX**, a file server with a web panel that publishes directories over SMB, NFS or both, with Samba users and Time Machine destinations. +- **An image that is not in the catalog can be installed too**, from its Compose file, a `docker run` command or its reference, with the result shown for review before any LXC is created. +- **An oci-compose written by hand can be installed.** *Install an image that is not in the catalog* takes the JSON file an application is installed from: pasted in the terminal, read from the host or downloaded from an address. The file states the image, its ports, variables and volumes, and what the installation asks; ProxMenux completes the rest, checks it and names each error by its field. `oci/README.md` describes the format block by block, with two examples in `oci/examples/`. + +### Installing an application + +- **The menus of OCI manager Apps number their options**, as the rest of ProxMenux does, so each description has the whole width; a storage, a bridge or a device keeps its name. +- **OCI manager Apps opens on Proxmox VE 9.1 or later**, the first release that runs OCI images as LXC containers. On an older host it says so, with the installed version, before installing anything. +- **The page of an application shows what it will create before anything is installed**: its image, the address it will answer on, where its persistent data goes, the acceleration profiles it offers and, for a multi-container application, every container of the set. +- **Two ways to install.** The default one asks what every installation decides (storage, where its data goes, DHCP or a static address, how it starts) and takes the rest from the recipe. The advanced one opens every decision in order: VMID and resources, each data path with its location, storage and size, extra paths and devices, the network, the application settings, the GPU and how it starts. +- **Every question says what it asks for**, with an example or a proposed value. An application that needs a database or a Redis server that is already running, such as BookStack, NetBox or Manyfold, says so first, with the address of its image documentation. +- **An application is not asked for its own address.** BookStack, Healthchecks, Speedtest Tracker and NetBox are given the address of the container: the fixed one, or the one DHCP gives, obtained before the application starts for the first time. +- **The data folders belong to the application.** Downloads, series, music, books and backups are created for the user the application runs as, as a container volume or as a host directory, and a new volume starts with what the image holds at that path. +- **FileBrowser Quantum opens the folder it is given.** It starts with the configuration of its recipe, written for version 2 of the application, which serves the folder chosen in the installation. The starting file a recipe writes takes the place of the copy the image ships in a new volume, and never of a file that was already there. +- **Images from private registries install and update** ([PR #460](https://github.com/MacRimi/ProxMenux/pull/460), contributed by [@jcastro](https://github.com/jcastro), and requested by several users). *Registry accounts* saves an account once the registry accepts it, and a registry that refuses an image offers to sign in on the spot. The accounts are kept in `/etc/pve/priv` for every node of the cluster, and updates, the watchdog and the Monitor use them. +- **USB and serial devices are chosen from a list**, by name and type, and every application accepts extra paths and devices in the advanced installation. +- **Applications start with the memory they need**: 1024 MB unless the recipe asks for more or sets a limit. +- **The summary ends with what is needed to use the application**: its address, and the user and password to sign in with. A service with no web interface, such as MariaDB, PostgreSQL or an SSH server, is given by its address and port. +- **A mistyped value asks the same question again**, a static address already in use on the network is not accepted, and creating the container shows its progress while a large image is unpacked. +- **Images built from scratch with a numeric user install**, such as ddns-updater: the container is created from a copy of the image that adds the `/etc/passwd` and `/etc/group` Proxmox VE needs, and the application runs with the user and group the image declares. The downloaded image is kept as it was. +- **The downloaded image can be deleted when the installation ends**, and images no installation uses are removed on their own. + +### Applications made of several containers + +- **One LXC per service**, wired through a private bridge of their own and started in order. Immich, Nextcloud, Paperless and Tandoor have their own recipes, ten more come from their published Compose file, and the Arr suite installs each application as an independent LXC connected to the others. +- **Immich asks what runs its video and its recognition**: the CPU or each GPU of the host, together or split between two GPUs, with VA-API or NVENC for video and OpenVINO, ROCm or CUDA for recognition. +- **The address offered is the one a browser can reach**: the LAN address of the container, in the summary and in its Proxmox notes. + +### Hardware acceleration + +- **The acceleration menu offers only what the host can run**: NVIDIA with the driver and the Container Toolkit, Intel or AMD where that GPU is present. The render node proposed is the one of that GPU. +- **AI applications take the image built for the chosen GPU.** Ollama gains an AMD (ROCm) profile, llama.cpp offers CPU, CUDA, ROCm and SYCL, and Faster Whisper and Piper offer NVIDIA. +- **Frigate detects objects on an AMD GPU, an Intel NPU or a Coral** (NPU and Coral suggested by [@jcastro](https://github.com/jcastro)), and its CPU detector runs on AMD processors. +- **ROCm is offered according to the generation of the AMD GPU**, as an experimental option on the ones the image does not carry kernels for, and Immich checks the GPU with a real inference before accepting it. + +### Storage and shared directories + +- **A host directory that already exists can be opened to the application that shares it**, with access rules (ACL) that leave the owner of the files as it is. +- **A shared host directory shows what the host has mounted inside it**: network shares, disks and ZFS datasets, also the ones mounted while the container runs. +- **A shared host directory is recognised by its filesystem**, so an application keeps being updated after the host restarts or a disk comes back under another device name (reported by Charly Silva). + +### Updating, modifying and recreating + +- **An update replaces the image and keeps the data.** The container is backed up, rebuilt from the new image and asked to answer before the operation is committed; if it does not, everything returns to how it was. Resource changes made from Proxmox are carried over. +- **Every installed application can be updated and modified**, privileged containers, host monitors and the applications of the Arr suite included. +- **Modify** changes the settings of an installed application; on a multi-container one it adds or removes extra paths and devices without rebuilding anything, and changes what runs recognition in Immich. +- **A multi-container application can be rebuilt as it is** ([PR #423](https://github.com/MacRimi/ProxMenux/pull/423), contributed by [@Vaso73](https://github.com/Vaso73)). *Recreate every container with its saved configuration* rebuilds each container from the image it was installed with. +- **Proxmox tags can be changed freely** ([PR #473](https://github.com/MacRimi/ProxMenux/pull/473), contributed by [@jcastro](https://github.com/jcastro)): Update, Modify and Recreate keep the tags a container has, or none if they were removed, also on the containers of a multi-container application. +- **A volume mounted read-only is left as it is** when a container is rebuilt ([PR #494](https://github.com/MacRimi/ProxMenux/pull/494), contributed by [@jcastro](https://github.com/jcastro)), such as `/run/secrets`; its files, owner and permissions are not touched. +- **An application that runs as a user its image does not list gets `/` as its home** ([PR #496](https://github.com/MacRimi/ProxMenux/pull/496), contributed by [@Vaso73](https://github.com/Vaso73)), as Docker does, and the image's user file is read without following links. +- **Services that are not web pages update and recover like the rest**: MariaDB, SSH or a speech server answer on their own protocol, and Update, Modify and Recover take that answer as the service being up. +- **The backup of an operation can be made on another storage** when it does not fit on the system disk, and an operation that has no room says so before anything is stopped. +- **A damaged image download or working backup is written a second time** before anything fails, and a failed update leaves no temporary container behind. +- **Modify is a menu of settings** ([PR #495](https://github.com/MacRimi/ProxMenux/pull/495), contributed by [@jcastro](https://github.com/jcastro)): each row shows the current value, only the chosen setting is edited, and the changes are kept until they are reviewed and applied together, or discarded. Refreshing the catalog options is one more entry of the menu. +- **Manage opens at once** ([PR #493](https://github.com/MacRimi/ProxMenux/pull/493), contributed by [@jcastro](https://github.com/jcastro)): the configuration of each application is read again only when it changed, so a host with 26 applications goes from 15 seconds to a fraction of a second. +- **Modify and Update open without waiting** ([PR #498](https://github.com/MacRimi/ProxMenux/pull/498), contributed by [@jcastro](https://github.com/jcastro)): the space for the backup is checked once the operation is accepted, and Escape goes back at once. +- **Modify changes the running container when it can** ([PR #497](https://github.com/MacRimi/ProxMenux/pull/497), contributed by [@jcastro](https://github.com/jcastro)): CPU and memory apply live, and the network, variables, host paths and devices are changed in place, with a rollback if a step fails. Only what cannot be changed in place rebuilds the container. +- **Variables changed in Proxmox are carried over.** A password changed after the first login, or a variable added from Proxmox, is listed by name, without its value, and saved in oci-compose before Update or Modify continues. +- **The downloaded image is offered for deletion only after a container was rebuilt from it**, not after a change applied to the running container. +- **The list of installed applications comes back after each operation**, an update, a change or a removal, without reading every application again. + +### Watchdog, backups and clusters + +- **An application can be put under watchdog.** Proxmox has no restart policy; with the watchdog on, an application that stops on its own is started again, with a notification. A stop asked by the user, a backup, a migration or a ProxMenux operation is never undone. +- **A multi-container application starts while one of its containers is being backed up.** Its start waits until vzdump releases that container and then continues, and the watchdog waits as well. Updating ProxMenux brings the new start hook to the applications already installed. +- **The record of an application travels with its container.** A copy lives inside it and another in `/etc/pve`, so a vzdump or PBS backup always carries it. +- **A restored application is offered for recovery**, on a new Proxmox installation, on another host or with another ID. The recovery puts back what the host kept for it, such as the private network of a multi-container application, and checks everything before the host is changed. +- **In a cluster, the record follows the container.** A migrated or HA-moved single-container application starts and is registered on the node it arrives at. +- **A container that reboots itself keeps its DHCP address**, as Home Assistant OS does from its settings. + +### Removing an application + +- **Everything the installation kept on the host goes with it** and the result says whether anything was left undone ([PR #402](https://github.com/MacRimi/ProxMenux/pull/402), contributed by [@f3rs3n](https://github.com/f3rs3n)). Host directories are kept, and an application of the Arr suite is removed on its own. + +### Tested against their Docker originals (contributed by [@Vaso73](https://github.com/Vaso73)) + +Real installations compared side by side with the same images under Docker, and what they brought: + +- **An image's initial data reaches its new volume** ([PR #394](https://github.com/MacRimi/ProxMenux/pull/394)), as PocketBase needs. +- **A host monitor is reached through the firewall, on request** ([PR #393](https://github.com/MacRimi/ProxMenux/pull/393), [PR #395](https://github.com/MacRimi/ProxMenux/pull/395)): Glances gets a narrow rule, confirmed separately and removed with the application. +- **Stack members keep their data on a prepared volume** ([PR #410](https://github.com/MacRimi/ProxMenux/pull/410)), including the data path of current PostgreSQL images. +- **Stremio, Uptime Kuma and images that need a home directory start as they do under Docker** ([PR #411](https://github.com/MacRimi/ProxMenux/pull/411), [PR #412](https://github.com/MacRimi/ProxMenux/pull/412), [PR #413](https://github.com/MacRimi/ProxMenux/pull/413)). + +--- + +## 📱 OCI applications in ProxMenux Monitor + +- **The App tab registers what ProxMenux installed.** The application of an OCI container is registered by itself with its name, logo, address and version tracking, read from the installation record, also while the container is stopped. Every service an application serves gets its own link, and a service with no web interface shows its address and port as text. +- **An application installed from the menu shows in the Monitor on its own.** The Apps page and the list of containers register it within seconds of the end of its installation, without opening its container. +- **Updates are tracked by the image.** The card shows the version of the application and the image it runs, with its build date and digest; a new image under the same tag is an update. +- **The Updates tab updates and modifies the container.** **Update** and **Modify** open the Monitor terminal on the same flow as the OCI menu. The backup taken before updating can be kept, image updates can be scheduled, a multi-container application is updated from its main container, and a restored application shows a **Recover** button. +- **A new Logs tab shows what the application writes to its console**, kept on the host from the first start: the last lines since the last start, followed live, with a filter and a download. +- **The Proxmox console of an OCI container opens a shell**, the equivalent of `docker exec`, whenever the image ships one. +- **The Watchdog switch** sits in the container modal, under Start at boot. +- **An OCI operation sends one notification with its result**, instead of one per step. Modify and the rebuild of a multi-container application have notifications of their own. +- **The update icon of the Apps page opens the Updates tab** of that container. + +--- + +## 🔎 Search in the main menu + +- **The main menu opens with Search options and applications.** A name or part of it finds an option of ProxMenux, an application of the OCI catalog or a Helper-Script, in that order, by name first and then by category. +- **Every result opens what its name says**: a script at its first screen, an application at its page, an option of the post-install or a system utility in its list with it already marked. Nothing is run by the search itself. +- **The Helper-Scripts catalog is kept on the host** and refreshed once a day, so the search also answers without a connection. + +--- + +## 🧩 Helper-Scripts addons run where they belong + +- **An addon is run where its catalog says**: on the Proxmox host, inside an LXC picked from a list, or wherever is chosen when it can be both. A stopped LXC is started on confirmation, and OCI containers are left out. +- **Descriptions and notes are shown as plain text**, and a script is downloaded whole before anything runs. + +--- + +## 🗄 ProxMenux on Proxmox Backup Server ([PR #467](https://github.com/MacRimi/ProxMenux/pull/467), contributed by [@jcastro](https://github.com/jcastro)) + +- **ProxMenux installs on a Proxmox Backup Server** with the same command as on PVE, and opens a menu of its own: version and packages, datastores, recent tasks, system utilities and a package update that shows its plan before applying it. +- **The post-install menu works on PBS**: Automated, Customizable, updates and uninstall, with the options that apply to a backup server. Without a subscription it offers the no-subscription repository before upgrading, and Community Scripts lists the Helper-Scripts PBS post-install and microcode. +- **The Monitor of a PBS has the design of the PVE one**: the same header, health and administration, CPU, memory and network charts from the history PBS keeps, a Datastores tab with the use of each datastore and the disks and pools of the server, and a Tasks tab with recent tasks and maintenance schedules. What only applies to PVE is left out, settings included. +- **The maintenance jobs of a PBS show the state of their last run** in its own Monitor too, read from the PBS API like a remote PBS. +- **Log2RAM compresses rotated logs at once**: the most recent rotated log no longer stays uncompressed in `/var/log`, which on a busy PBS filled a 128M Log2RAM and stopped its tasks from being recorded. Hosts that already have Log2RAM or the logrotate optimization are offered the update in *Settings → ProxMenux Optimizations*. +- **A remote PBS can be watched from PVE** in *Backup → Proxmox Backup Server*. Signing in with a PBS user and password creates a read-only API token for the Monitor and keeps only that token, or an existing token can be entered. The certificate fingerprint is checked before any credential is sent. The PBS servers configured as storage are offered with their address and fingerprint filled in, and a PBS installed on the same host is read directly, without a token. + +--- + +## 💾 VM and CT backup jobs managed from ProxMenux ([PR #421](https://github.com/MacRimi/ProxMenux/pull/421), contributed by [@MattiaC46](https://github.com/MattiaC46)) + +- **The Backup tab of the Monitor has two views, Host and VMs and LXCs.** The second one, and the Host Backup & Restore menu, list the scheduled jobs of Proxmox, the same ones as Datacenter → Backup, and create, edit, enable, disable, delete and run them through the Proxmox API. +- **Run now starts a Proxmox task on each node that has a guest of the job.** Changing a job needs an administrator session; a read-only API token can only list them. + +--- + +## 💾 Backups and restore + +- **VM and CT backups can be selected and deleted from the Monitor** ([PR #461](https://github.com/MacRimi/ProxMenux/pull/461), contributed by [@jcastro](https://github.com/jcastro)): up to 20 at a time, after a confirmation, through Proxmox itself. A protected backup cannot be selected, and a batch that includes one is refused whole. +- **The retention of each backup storage is edited from the Monitor** ([PR #462](https://github.com/MacRimi/ProxMenux/pull/462), contributed by [@jcastro](https://github.com/jcastro)): keep all, a number of backups per period, or the Proxmox default. Saving changes the policy in Proxmox and deletes no backup. +- **Backup notifications say how the job ended** ([PR #406](https://github.com/MacRimi/ProxMenux/pull/406), contributed by [@f3rs3n](https://github.com/f3rs3n)): clean, with warnings, failed or unconfirmed, naming the guest that failed, with long diagnostics kept readable. The recovery summary counts each guest once ([PR #356](https://github.com/MacRimi/ProxMenux/pull/356)). +- **A backup started from the Monitor runs in its own systemd unit** and continues whatever happens to the Monitor. +- **A host backup works on a host with SELinux** ([#398](https://github.com/MacRimi/ProxMenux/issues/398), reported by [@sbaghdadi](https://github.com/sbaghdadi)) and keeps all of ProxMenux's host state under `/var/lib/proxmenux`. +- **Every run of a host backup is notified** ([#425](https://github.com/MacRimi/ProxMenux/discussions/425), reported by @sahartford): each run is sent when it ends, like a VM or CT backup, also on a channel with the daily digest enabled and with HTTPS enabled in the Monitor. +- **A remote Borg repository authenticates with the key saved on its destination** ([#357](https://github.com/MacRimi/ProxMenux/issues/357), reported by [@bartclone](https://github.com/bartclone)), offering only that key, and keeps its remote path as it was written. +- **The host backup list shows this node's backups on a cluster** ([#445](https://github.com/MacRimi/ProxMenux/issues/445), requested by [@Joshua1264](https://github.com/Joshua1264)): a This node / All nodes choice, with a count that follows it, sets apart the backups of other nodes kept on a shared PBS or Borg repository. +- **A local host backup made by a job that no longer exists is marked as Former job** ([#446](https://github.com/MacRimi/ProxMenux/issues/446), requested by [@Joshua1264](https://github.com/Joshua1264)), read from the job and node recorded with the backup. It is kept until it is deleted, and deleting it also removes its metadata file and log. +- **A host restore is scheduled only once it is complete** ([PR #341](https://github.com/MacRimi/ProxMenux/pull/341), contributed by [@f3rs3n](https://github.com/f3rs3n)): each restore is prepared in its own directory and becomes the pending one only when every step succeeded. + +### 🔐 Node web certificate restore ([#333](https://github.com/MacRimi/ProxMenux/issues/333), reported by [@tropicaljoe](https://github.com/tropicaljoe)) + +- Host backups already preserved the node-local certificate pair; the post-boot restore now maps it from the source node to the current one instead of leaving Proxmox on its generated certificate. +- Before installing, ProxMenux validates the certificate, rejects encrypted or invalid private keys and confirms both public keys match; an incomplete pair leaves the current certificate untouched and adds a warning to the restore result. Installation goes through `pvenode cert set`, followed by fingerprint and service verification, with a fallback to the previous certificate if that verification fails. + +--- + +## 🟢 NVIDIA installer and GPU passthrough + +- **The NVIDIA Container Toolkit is installed with the driver.** It is what lets a container see the host's GPU. It can also be put back on its own, and it is recorded in the Changes view of Audit & Report. +- **The version picker offers the drivers that support the GPU and can build against the running kernel**, and opens in about five seconds. +- **A version is proved to build before the working driver is removed.** One that does not build returns to the list with the current driver untouched, and the answer is remembered for that kernel. +- **The result reports what the driver does**: a driver that installs but does not drive the GPU is recorded as failed, with the kernel's own reason. +- **Adding an NVIDIA GPU to a VM writes its VFIO rule again when it is missing** (reported by kn): a host whose rule was removed by hand gets it back, and is asked to reboot, instead of being taken as already configured. +- **Changing the mode of a GPU leaves its neighbours alone** ([#435](https://github.com/MacRimi/ProxMenux/issues/435), reported by [@LucasR3C3](https://github.com/LucasR3C3)). A GPU is its own function, the audio at its slot and the devices of its IOMMU group. On an AMD APU, a USB controller that shares the slot of the integrated graphics stays in the VM it was passed to when the GPU goes back to LXC mode or moves to another VM. +- **Containers created from an OCI image stay out of the LXC menus that install into a container**: driver propagation, Add GPU to LXC, Coral, disks and shares. Their devices and paths are changed from OCI manager Apps. + +--- + +## 💽 Disks + +- **The observations of a disk belong to its serial number.** A replaced disk starts with a clean history, the history follows a disk to another device name, and it is permanent: the same observation seen again adds to its count. +- **Mechanical disks are left to spin down** ([#347](https://github.com/MacRimi/ProxMenux/issues/347), reported by [@spectante](https://github.com/spectante)). A rotational disk nothing is using is not read at all, the storage view says *Idle* or *Excluded* beside *Standby*, and *Settings → Disk exclusions* keeps a disk out of every scheduled read. +- **The LVM checks leave excluded and idle disks alone** ([PR #464](https://github.com/MacRimi/ProxMenux/pull/464), contributed by [@jcastro](https://github.com/jcastro)): while a disk is excluded, idle or asleep, the scan reads only the LVM physical volumes on the other disks, and its own reads do not keep a disk counted as busy. +- **Disk formatting keeps what it promises to keep** ([PR #339](https://github.com/MacRimi/ProxMenux/pull/339), [PR #340](https://github.com/MacRimi/ProxMenux/pull/340), contributed by [@f3rs3n](https://github.com/f3rs3n)): removing signatures leaves the partition table alone, and the system disk is recognised through stacked LVM, RAID or ZFS. +- **The storage summary distinguishes unavailable disk temperatures and qualifies the SMART status** ([PR #365](https://github.com/MacRimi/ProxMenux/pull/365), [PR #372](https://github.com/MacRimi/ProxMenux/pull/372), contributed by [@f3rs3n](https://github.com/f3rs3n)). +- **A notice of smartd about its own configuration, or fstrim on a disk that cannot discard, is not reported as a failure.** +- **Volume mount points on block storage show their usage** in the Mount Points tab. + +--- + +## 🔔 Notifications + +- **Notifications in the reader's language** ([PR #348](https://github.com/MacRimi/ProxMenux/pull/348), contributed by [@Vaso73](https://github.com/Vaso73)): titles, bodies, channel labels and daily digests follow the language chosen for notifications, long Telegram messages are split without breaking their formatting, and the wording was reviewed by hand. +- **Temperature and health alerts carry their values** ([PR #408](https://github.com/MacRimi/ProxMenux/pull/408), contributed by [@f3rs3n](https://github.com/f3rs3n)): the reading, the threshold and the category in the reader's language. +- **A cluster event notification says what happened** ([PR #403](https://github.com/MacRimi/ProxMenux/pull/403), contributed by [@f3rs3n](https://github.com/f3rs3n)), with the original message from Proxmox. +- **A cluster node that goes down or comes back is notified by its name** ([PR #444](https://github.com/MacRimi/ProxMenux/pull/444), contributed by [@fklnc94](https://github.com/fklnc94)), read from the membership changes corosync reports on the other nodes. +- **A health problem that comes back is reported again** ([PR #443](https://github.com/MacRimi/ProxMenux/pull/443), contributed by [@f3rs3n](https://github.com/f3rs3n)): a condition that was resolved and returns is a new episode, listed as active and notified once. Dismissals, also the permanent ones, stay as they were set. +- **Apprise explains how to set up Slack and Matrix** ([PR #463](https://github.com/MacRimi/ProxMenux/pull/463), contributed by [@jcastro](https://github.com/jcastro)), with example addresses and their documentation, and a recovery is sent as a success, in green, as on the other channels. +- **The notification settings show the delivery history** ([#425](https://github.com/MacRimi/ProxMenux/discussions/425), reported by @sahartford): the last 20 notifications with the result of each send, the error when one failed, and every run of the daily digest, also on days with nothing to send. +- **Proxmox notifications arrive with HTTPS enabled on the Monitor**, through a local listener that answers only the notification webhook. +- **The Monitor leaves `/etc/pve` alone while Proxmox restarts its cluster service** ([#427](https://github.com/MacRimi/ProxMenux/issues/427), reported by [@shtefko](https://github.com/shtefko)). Notification settings are written only while `/etc/pve` is mounted and only when they change, their copies are kept with ProxMenux, and uninstalling the Monitor removes its target from Proxmox. +- **A log pattern is reported as persistent only while it keeps recurring** ([#386](https://github.com/MacRimi/ProxMenux/issues/386), reported by [@Joshua1264](https://github.com/Joshua1264)). +- **An alert dismissed permanently stays dismissed** (reported by Maragath): for as long as the condition lasts, when it recovers and comes back, and when the suppression settings are saved, until it is re-enabled from Active Suppressions. +- **Excluded storages stay out of the capacity alert** (reported by @christiannieveslauz), and a storage that is filling up says how full it is. +- **A private bridge with nothing connected is not reported as down.** + +### 📦 Grouped application update notifications + +- **An automatic check now produces one complete notification instead of one message per application.** Pending updates are grouped by LXC and keep the application name plus the installed and available versions, so a quieter inbox does not cost you the detail. +- A scan with a single pending application keeps the individual notification, and explicit checks you make yourself stay individual. The existing **App update available** setting controls both forms, and per-application exclusions are still respected. + +### 🧭 Cluster-owned guest health notifications + +- **LXC rootfs and VM filesystem capacity are evaluated only by the node that currently owns the guest**, so several Monitor instances in a cluster no longer record and notify the same condition independently. Guest Agent disk refreshes follow the same boundary. +- A guest that moves between nodes is retired quietly on the previous one. A migration is not reported as a recovery; the new owner is responsible for the current condition. + +### ⚙️ Attributable kernel diagnostics + +- **A kernel diagnostic is reported by the line that explains it.** Kernel warnings, blocked tasks, lockups, protection faults, oops and memory-safety diagnostics now name the diagnostic type, process and component when present, and carry the journal excerpt around them — instead of a bare `Call Trace:` marker that identifies nothing and could count one incident twice. +- **Kernel warnings and diagnostic traces have their own per-channel switch**, and hidden burst summaries inherit the category of the event they summarise, so silencing one event also silences its `+N more`. + +### 📮 Notification delivery + +- **Events buffered during Quiet Hours are released when the window closes**, and the release is recorded like any other delivery, so it appears in the history and the counters rather than arriving on the channel with no trace. The buffer is cleared only once the channel confirms delivery, so an overnight window is never discarded for a summary nobody received. +- The 24-hour digest is composed and delivered the same way. +- **Pending ProxMenux optimization updates re-fire on Monitor restart** alongside every other update report, so a host carrying optimizations it never applied surfaces them again after an update or a reboot. Each version is still announced once per service lifetime. + +--- + +## 🔐 Read-only API tokens only read (reported by [@f3rs3n](https://github.com/f3rs3n)) + +- **Every API action that changes something requires a full-admin token**: controlling guests, starting backups and SMART tests, running scripts, editing the firewall, Fail2Ban or SSL, and managing 2FA and API tokens. A read-only token keeps reading dashboards and metrics, and the session of the interface works as before. +- **Reading health data requires a token once authentication is set up**, and every Health Monitor route that changes something requires a full-admin token. `/api/system-info` stays public for external probes such as Uptime Kuma. +- **Opening a Monitor terminal and disabling authentication require a full-admin token.** Both the terminal-ticket route and the authentication-disable endpoint are guarded by the same admin-scope check the other privileged routes use, and the terminal WebSocket still accepts only a fresh single-use ticket — now issued exclusively to full-admin callers. +- **Reading a stored credential back in cleartext requires a full-admin token too.** The settings page masks every stored secret, and the one route that returns a value — the eye toggle beside a field — is guarded the same way. A read-only token issued to a monitoring integration reaches none of them: the GitHub token, the Telegram bot token, the mail password, the AI provider keys, the Discord webhook. A session login carries full-admin implicitly, so the toggle behaves as before for whoever is using the interface. +- **The API token dialog now asks which scope to mint.** Read-only is the default and is enough for dashboards and metrics; full-admin is there for integrations that drive the Actions API, and the dialog says plainly what each one can reach. +- **The GitHub API card names the token it needs**: that token exists only to raise the anonymous rate limit when checking upstream versions of registered applications, and every call made with it reads public data, so a fine-grained token with read-only access to public repositories and no account permissions is enough. + +--- + +## 🐳 Docker applications — one identity, one update state + +- **Applications running inside Docker can be registered in the App tab** with their own name, logo, web links and installed version, while their updates stay linked to the Docker image. They no longer appear twice in Updates: Portainer, Arcane and their equivalents keep their App entry, and the image row carries the versions. +- **Available versions can be read from image metadata** in Docker Hub, GHCR and other compatible registries when the image publishes a usable version label — which describes what the selected tag would install, not necessarily the latest upstream release. Digest-based detection remains available when no label can be read. +- **Installed versions follow the image the container actually uses**, including after recreation or when a pulled image has not been applied yet, and image aliases are matched to the workload's configured reference. +- Image metadata resolves in the background without holding up the inventory, and App and Updates share the result. + +Thank you to [@byGarcia](https://github.com/byGarcia) for the implementation, verified detectors and detailed testing in [PR #337](https://github.com/MacRimi/ProxMenux/pull/337) and [PR #338](https://github.com/MacRimi/ProxMenux/pull/338), building on the collaboration in [discussion #206](https://github.com/MacRimi/ProxMenux/discussions/206). + +### Docker web links in the App tab + +- **The VM and LXC inventory stays available while Docker data warms up.** A Docker inventory can exist before its optional application record is loaded, and that state is now an empty app list rather than an empty guest list. +- **Stopped Docker workloads keep their registrable links.** Discovery reads a container's persistent published-port configuration when the live mapping is empty, so a stopped Compose service such as HandBrake, MakeMKV or MKVToolNix keeps its detected name and host port ready for registration. +- **Docker LXCs retain every useful candidate**: named mappings keep their application, icon and published ports, while listening ports that belong to no mapping — host-network containers, native services in the same LXC — remain available as one-click suggestions, without duplicating a port a named mapping already covers. +- **Adding a detected link stays added.** Link insertion and the delayed catalogue-category response update the editor independently, so the category lookup can no longer restore a snapshot from before the insertion. +- Discovery remains suggestion-only: you choose which published ports actually expose a web interface and save only those. + +--- + +## 🖥 ProxMenux Monitor + +- **The node name in the header opens other Monitors**: the nodes of the cluster, the configured PBS servers and nodes added by hand, each with its state. Each Monitor keeps its own sign-in. Arriving from another one offers, in one dialog, to add it and the Monitors it links, so after visiting each node once every Monitor can reach all of them. A Proxmox Backup Server without a Monitor is shown as its web interface, a PBS installed on the node itself opens on the address in use, and the node form follows the edit-mode style of the other forms. +- **The terminal of a container that cannot be entered says why** and closes: an image that has no shell, as PeaNUT's, is pointed to its Logs tab, and a stopped container shows the reason Proxmox gives. +- **The web terminals send Ctrl+D from their Ctrl menu**, which ends a text pasted in the terminal, such as a Compose file or an oci-compose in OCI manager Apps, also from a phone or a tablet. A single Ctrl+D ends the paste, also right after its last line. +- **A VM or LXC edited from Proxmox shows its current settings** the next time its modal opens: start at boot, tags, cores, memory, network and mount points. +- **An LXC changed outside the Monitor shows its current data** ([PR #441](https://github.com/MacRimi/ProxMenux/pull/441), contributed by [@Vaso73](https://github.com/Vaso73)): a new DHCP address, a setting edited in Proxmox while its modal is open, and the operating system of a restored or reinstalled container. The Updates tab marks a result older than 48 hours as outdated, and the card keeps showing the number of pending updates. +- **Updating a stopped LXC keeps its result** ([PR #447](https://github.com/MacRimi/ProxMenux/pull/447), contributed by [@Vaso73](https://github.com/Vaso73)): its packages and applications are read before it is stopped again, so the Updates tab shows what was installed and what is still pending. A run that never got to start the container keeps the previous result. +- **Checking and installing LXC packages are separate steps** ([PR #448](https://github.com/MacRimi/ProxMenux/pull/448), contributed by [@Vaso73](https://github.com/Vaso73)): Check system packages refreshes the package indexes of a running container and counts what is pending without installing anything, and installing needs a recent successful check. A stopped container is asked to be started first and keeps its last result with its date. +- **A scheduled update leaves a stopped LXC stopped** ([PR #456](https://github.com/MacRimi/ProxMenux/pull/456), contributed by [@Vaso73](https://github.com/Vaso73)): the run is skipped and the Updates tab says why, while the container is still stopped and afterwards. An update started by hand still starts it. +- **Find applications recognises applications installed by hand in an LXC** ([PR #492](https://github.com/MacRimi/ProxMenux/pull/492), contributed by [@Vaso73](https://github.com/Vaso73)): systemd and OpenRC services, processes and listening ports of programs under `/opt`, `/srv`, `/usr/local` or a home directory are proposed with their evidence and version, and registered after confirming them in the editor. +- **JDownloader opens on HTTPS and Prowlarr shows its first-run address** ([PR #506](https://github.com/MacRimi/ProxMenux/pull/506), contributed by [@Vaso73](https://github.com/Vaso73)), as their images serve them. +- **Snapshot backups of OCI applications work on ZFS** ([PR #514](https://github.com/MacRimi/ProxMenux/pull/514), contributed by [@jcastro](https://github.com/jcastro)): the files an image ships where a data volume is mounted are kept aside in the container, so ZFS can mount each snapshot during a vzdump. They are kept, never deleted, also after an update or a recreation. +- **OCI applications start after a direct Proxmox restore** ([PR #507](https://github.com/MacRimi/ProxMenux/pull/507), contributed by [@Vaso73](https://github.com/Vaso73)): the empty `lost+found` that a restore creates on each data volume is removed before the application starts, also when ProxMenux recovers a running container. +- **The OCI menu shows which applications have an update and updates the ones selected** ([PR #504](https://github.com/MacRimi/ProxMenux/pull/504), contributed by [@jcastro](https://github.com/jcastro)): «Check for updates» asks ProxMenux Monitor, which checks every application at once and keeps the result the App tab shows; each selected update goes through the usual review, backup and recovery, one after another, with the number of each one on screen while its container is checked. +- **The App editor finds the real icon of a local application** ([PR #503](https://github.com/MacRimi/ProxMenux/pull/503), contributed by [@Vaso73](https://github.com/Vaso73)): «Find icon» reads the web port chosen inside the running container, from the container's own network, and keeps a cleaned copy that still shows while the container is stopped. The image is decoded by an unprivileged process. +- **Find applications also lists Docker containers with published ports** ([PR #505](https://github.com/MacRimi/ProxMenux/pull/505), contributed by [@Vaso73](https://github.com/Vaso73)): each one can be registered with its web address and scheme already filled in, and registering never configures updates. +- **Find applications on a stopped LXC says why it cannot search** ([PR #501](https://github.com/MacRimi/ProxMenux/pull/501), contributed by [@Vaso73](https://github.com/Vaso73)): the search needs the container running, and the cards and evidence found before are kept. +- **The power buttons of VMs and LXCs finish when Proxmox does** ([PR #449](https://github.com/MacRimi/ProxMenux/pull/449), contributed by [@Vaso73](https://github.com/Vaso73)): start, shutdown, reboot and stop follow their Proxmox task, also for guests managed by HA, and the guest is released for other actions when it ends. +- **The VM and LXC search finds a container by any of its addresses** ([PR #385](https://github.com/MacRimi/ProxMenux/pull/385), contributed by [@Vaso73](https://github.com/Vaso73)), and the card shows how many more it has. +- **Available updates on the overview follow the host** ([#359](https://github.com/MacRimi/ProxMenux/issues/359), reported by [@ash34](https://github.com/ash34)), whichever way the packages were installed. +- **The Proxmox update log says what was updated** ([#358](https://github.com/MacRimi/ProxMenux/issues/358), reported by [@ash34](https://github.com/ash34)), and the list of packages is shown before the update is accepted. +- **A dismissed remote mount warning stops counting in the health status** ([PR #453](https://github.com/MacRimi/ProxMenux/pull/453), contributed by [@wolly6973](https://github.com/wolly6973)): a stale or read-only NFS/CIFS mount, on the host or inside an LXC, can be dismissed from its row in Health, and the overall status returns to healthy. +- **Docker containers pinned by digest stay in the inventory** ([#206](https://github.com/MacRimi/ProxMenux/discussions/206), reported by [@byGarcia](https://github.com/byGarcia)), marked *Pinned to a digest* and never offered an update. +- **LazyLibrarian and PeaNUT join the LXC application catalog** (with [@pdafoto](https://github.com/pdafoto)); LazyLibrarian is the first entry tracked by commit. +- **The name of the node is read without waiting for the Proxmox API** ([#438](https://github.com/MacRimi/ProxMenux/issues/438), reported by [@sponger544](https://github.com/sponger544)), in the Monitor and in its storage check, so a host where `pvesh` answers slowly is not asked for it on every request. +- **Secure Gateway shows the same update state** on the Security page and in the Updates tab of its container. +- **Typing a number in a script terminal keeps the session open.** +- **The RAM Critical threshold set in Settings applies to the RAM check.** +- **`/api/health` reports the installed ProxMenux version**, and the Prometheus disk metrics are exported in bytes, as their names say. +- **A backup started from a VM or LXC notifies according to the notification settings**, the same as any other backup; its dialog no longer has its own notification menu. +- **Each notification channel keeps its own AI rewrite**, and a detailed email attaches the original message only when the AI rewrote it. + +### 🛠 Explicit application updater selection (feedback from [@SystemIdleProcess](https://github.com/MacRimi/ProxMenux/discussions/306)) + +- **Registering an application no longer enables an updater on your behalf.** Choose and save **Helper-Scripts** or **Custom command** before running an update; version tracking stays independent of that choice. +- Each application owns its choice, including in LXCs with several applications, and a custom command replaces that application's helper rather than running both. +- **Editing shows the command that will actually run** — the detected launcher or your saved custom command. Modifying a helper launcher switches to Custom command so your edits are used by manual, bulk and scheduled runs; leaving it untouched keeps the official method. +- **A failed or empty updater download stops before execution**, so an empty shell command can no longer be reported as a successful update. +- Information dialogs explain both options, link to each application's documentation and source, and include examples to adapt — which never fill in or execute anything by themselves. + +### 🔍 VM and LXC list — instant search and updates filter ([PR #334](https://github.com/MacRimi/ProxMenux/pull/334), contributed by [@Vaso73](https://github.com/Vaso73)) + +- **A search box that matches across name, ID, guest type, tags, PVE note, IP address and registered application names.** Multiple terms narrow together and the match ignores accents, so `nuria` finds `Núria` and `virtualny` finds `virtuálny`. +- **An Updates filter** isolates the LXCs with pending work — OS packages, registered applications and Docker images all count towards its badge — and its state is remembered per device. +- **Searching by guest type works in every Monitor language**: `contenedor`, `conteneur`, `contenitore`, `contêiner`, `kontajner` and `Container` all find the LXCs on the node. + +### 🗂 LXC mount points — targets written with a trailing slash ([PR #336](https://github.com/MacRimi/ProxMenux/pull/336), contributed by [@Vaso73](https://github.com/Vaso73)) + +- **A bind mount configured as `mp=/path/` is recognised as mounted.** Proxmox accepts the trailing slash while the container's mount table reports the path without it; both spellings now resolve to the same mount point. The path stays on screen exactly as written in the container configuration. +- The same match applies to ad-hoc detection, so a configured mount is no longer listed as an unmanaged one created inside the container. + +### 🔎 LXC application version detection — runtime-verified detectors ([PR #332](https://github.com/MacRimi/ProxMenux/pull/332), contributed by [@Vaso73](https://github.com/Vaso73)) + +- **A bundled override set ships inside the Monitor** with detectors proven against real containers, and it takes precedence over the remote catalog. It is deliberately not fetched remotely, so an installed Monitor cannot pull an older entry that would resurrect a stale marker over a detector already verified. +- **Legacy helper markers become a fallback** rather than disappearing, so containers installed with older layouts keep a valid version source while newer installs read the application's own binary, package or file. +- **Traefik** is the first application on-boarded to the new set, and **Changedetection.io** joins the catalog this cycle (suggested by [@SystemIdleProcess](https://github.com/SystemIdleProcess) in [discussion #306](https://github.com/MacRimi/ProxMenux/discussions/306)). +- A successful custom-command update marks the reported version unverified, so the refresh that follows re-reads the live version instead of re-affirming the old one. + +### 📦 Readable LXC package updates ([#342](https://github.com/MacRimi/ProxMenux/issues/342), reported by [@ash34](https://github.com/ash34)) + +- **Package names are no longer sacrificed to long Debian version strings.** Each pending package keeps its complete name on its own line, followed by the installed and available versions in separate, equally sized columns. +- Long names and version identifiers wrap inside the panel instead of truncating or overflowing, and the security marker stays attached to its package. + +### 🔐 Password change with two-factor authentication + +- **Changing the Monitor password works with and without 2FA enabled.** With two-factor authentication on, the form asks for the current authenticator code or a backup code and sends it with the change. Missing or invalid fields are rejected as validation errors. +- An already-open browser tab can still complete a password change after the Monitor is updated. + +### 🐍 Portable Python runtime for HTTPS and WebSockets ([#331](https://github.com/MacRimi/ProxMenux/issues/331), reported by [@f3rs3n](https://github.com/f3rs3n)) + +- The Monitor AppImage carries isolated gevent runtimes for both CPython 3.11 (Proxmox VE 8) and CPython 3.13 (Proxmox VE 9), and `AppRun` selects the matching tree from the host interpreter before starting Flask — restoring the intended gevent HTTPS/WSS server on every supported Proxmox VE generation. +- Native dependencies are pinned and packaged deterministically, and every build imports the bundled stack with real 3.11 and 3.13 interpreters before publishing. + +### 📊 Shared historical metrics on slower hosts (reported by Rafael Fernández Díez) + +- CPU, memory and network charts share one in-flight query per time range, with the default 24-hour view warmed in advance and a bounded budget per query. +- A temporary failure keeps the last valid snapshot with its retrieval time and a translated stale-data notice, and charts recover on their own without replacing a newer range with an older response. + +### 🔄 Consistent application versions across App and Updates (reported by Nicolas Ortuzar) + +- Registered LXC applications use one shared, file-versioned snapshot for the App tab, Updates and the modal cache, so the App tab can no longer show an older available version or check date than the notification you just received. +- Open App cards receive version-state changes through the existing data feed, without new polling, and a background refresh leaves unsaved editor fields untouched. + +--- + +## 📦 Installer, updates and post-install + +- **The installer shows its steps, not apt's output**, and a host without a subscription installs without apt errors on screen. Duplicate repository declarations are commented out. +- **Dependency checks keep the configured Proxmox repositories** ([PR #407](https://github.com/MacRimi/ProxMenux/pull/407), contributed by [@f3rs3n](https://github.com/f3rs3n)): the switch to no-subscription is offered, not applied, and it is recorded in Audit & Report. +- **pigz keeps working after a gzip update** ([PR #414](https://github.com/MacRimi/ProxMenux/pull/414), [PR #415](https://github.com/MacRimi/ProxMenux/pull/415), contributed by [@pbr85](https://github.com/pbr85)): gzip is diverted instead of replaced, and its compression level is applied. The journal helpers report a copy that cannot be written ([PR #417](https://github.com/MacRimi/ProxMenux/pull/417), [PR #418](https://github.com/MacRimi/ProxMenux/pull/418)). +- **The Bashrc customization never loses what is already there** ([PR #515](https://github.com/MacRimi/ProxMenux/pull/515), contributed by [@f3rs3n](https://github.com/f3rs3n)): a rerun keeps incomplete or nested blocks as they are, and the new file replaces the old one in a single step, so a failed write leaves it untouched. +- **Each optimization is described by what it does** ([PR #517](https://github.com/MacRimi/ProxMenux/pull/517), contributed by [@f3rs3n](https://github.com/f3rs3n)): Log2RAM, kexec, AMD, the guest agent and the backup limits no longer promise what their functions do not provide. +- **A VM is created only from a complete ISO** ([PR #458](https://github.com/MacRimi/ProxMenux/pull/458), contributed by [@f3rs3n](https://github.com/f3rs3n)): the image and the VirtIO drivers are published only once fully downloaded, a failed download stops before the VM is created, and the Debian 13, Rockstor and OpenMediaVault images point to their current sources. +- **The Synology loaders download and unpack again** ([PR #459](https://github.com/MacRimi/ProxMenux/pull/459), contributed by [@f3rs3n](https://github.com/f3rs3n)): the M-shell selector takes the Alpine image the publisher now provides, and a failed download or extraction stops before the VM is created, keeping the previous image. +- **FygoOS joins the NAS systems of Create VM.** ProxMenux downloads the latest installer published on fygonas.com and prepares the VM with the same wizard as TrueNAS or OpenMediaVault: UEFI without Secure Boot keys, the storage plan and the optional GPU. +- **The Cloud-Init VM installers of Helper-Scripts run again** ([PR #457](https://github.com/MacRimi/ProxMenux/pull/457), contributed by [@f3rs3n](https://github.com/f3rs3n)): Arch Linux, Debian and Ubuntu use the maintained scripts, which ask for the release themselves, and a failed download stops with an error before anything runs. +- **A system update stopped by a repository of another Proxmox version names it**: the message says which Proxmox VE or Ceph repository is for another Debian suite, in which file, and that it is disabled in Node > Updates > Repositories. +- **The PVE 8 → 9 upgrade stops when the plan would remove `proxmox-ve`** ([PR #349](https://github.com/MacRimi/ProxMenux/pull/349), contributed by [@f3rs3n](https://github.com/f3rs3n)), and a failed index refresh is reported as one. +- **Post-install reads the host's memory in any language** ([#353](https://github.com/MacRimi/ProxMenux/issues/353), reported by [@linux-fertxo](https://github.com/linux-fertxo)), and Log2RAM 1.6 sizes itself from it. +- **Log2RAM 1.7 keeps the newest records of the journal** (reported by [@f3rs3n](https://github.com/f3rs3n)). Its sync no longer leaves an old active journal file on disk, so after a reboot journald starts a new sequence and removes its oldest archives first. Hosts with Log2RAM are offered the update; it takes effect from the next reboot. +- **An update of several optimizations shows only its steps**, whichever post-install flow each one comes from. +- **The automated post-install tunes firewall bridges after the udev rules of systemd**, as the customizable one does (contributed by [@Vaso73](https://github.com/Vaso73)). Hosts with the network optimization are offered the update. +- **A ZRAM swap profile in the customizable post-install** ([PR #450](https://github.com/MacRimi/ProxMenux/pull/450), contributed by [@phyrexia](https://github.com/phyrexia)): a compressed swap in RAM, a tenth of its size, used before the swap on disk. It leaves any other ZRAM setup alone, can be reverted from Uninstall Optimizations, and the Memory card of the Monitor shows its use and compression ratio. +- **Figurine 2.1.1 installs the build for the host** ([PR #465](https://github.com/MacRimi/ProxMenux/pull/465), contributed by [@jcastro](https://github.com/jcastro)): amd64, arm64 or ARMv7. Hosts with Figurine are offered the update. +- **Fastfetch keeps its system modules on current releases** ([PR #355](https://github.com/MacRimi/ProxMenux/pull/355), contributed by [@f3rs3n](https://github.com/f3rs3n)). +- **The Proxmox VE 8 to 9 upgrade keeps the guests running while it prepares the host** and stops if the Proxmox VE 8 update fails or is cancelled, before any repository is moved to Trixie. Without a subscription, the enterprise repository that pve-manager 9 adds during the upgrade is left disabled. The unattended option starts the upgrade, and the interactive mode installs grub-efi-amd64 without waiting on a hidden prompt. +- **Uninstalling ProxMenux leaves nothing under its installation directory**, and Show version information counts jq installed from GitHub as installed. The release channel is called «canal de versiones» in Spanish. +- **The help menu adds `qm unlock` and `pct unlock`**, and choosing the CT users option no longer runs the previous command again. +- **Menu texts with a leading or trailing space are translated**, such as the prompts and the back option of the help menu, in every script. +- **The storage commands of the help menu scan an NFS server for its exports** with a valid `pvesm scan nfs` command, and `pveupgrade` is described as the interactive package upgrade it starts. +- **Uninstalling the post-install optimizations removes the open-file limits it set**, in systemd and in the root profile, and the Log2RAM check runs every 10 minutes at low priority in both post-install modes. +- **Adding a GPU to a VM lists the devices that share its IOMMU group** when it includes devices from another slot, which the VM receives together with the GPU, before the summary. +- **The NVIDIA installer keeps the NVENC patch state of the installed driver**, so the version menu recognises a patched driver. +- **The AMD fixes say when a CPU does not need them** ([#519](https://github.com/MacRimi/ProxMenux/issues/519), reported by [@rollingafull](https://github.com/rollingafull)): an AMD processor that is neither EPYC nor Ryzen is recognised as AMD and left unchanged, with a message that says so. + +### 🧰 Safe migration of historical Bashrc customizations ([#328](https://github.com/MacRimi/ProxMenux/issues/328), reported by [@f3rs3n](https://github.com/f3rs3n)) + +- The Bashrc customization migrates the exact unmarked block written by ProxMenux v1.1.3 and earlier — and the historical variant that wrote its markers literally — into one canonical block, instead of appending a second copy of the prompt, history settings and aliases. +- Detection requires the complete ProxMenux signature and leaves incomplete marker ranges untouched, so unrelated customizations are never removed. The selected short or full prompt path survives the migration, and atomic replacement keeps the original permissions and ownership. + +### 🛡 Log2RAM updates without interrupting the active journal ([#327](https://github.com/MacRimi/ProxMenux/issues/327), reported by [@f3rs3n](https://github.com/f3rs3n)) + +- Existing installations use an in-place ProxMenux migration instead of re-running the upstream installer, whose reinstall path removes both backing directories and temporarily leaves journald without its active `/var/log` mount. +- The update preserves the configuration, sync interval, active tmpfs mount and running services, replacing only the files ProxMenux manages. First-time installations defer activation to the reboot the post-install flow already asks for. + +### 🌀 Post-install prompts appear on their own line + +- Each step closes its progress spinner before the next question or menu is drawn, so a prompt such as the Log2RAM install choice is shown on a clean line instead of over a still-turning indicator. + +--- + +## 🌍 Languages and wording + +- **Messages say exactly what happened** (contributed by [@f3rs3n](https://github.com/f3rs3n)). A review of the menus, the backup, storage, Samba, Rclone, scheduler and OCI messages so that each one is a complete sentence that can be translated as a whole and claims only what was verified: [PR #363](https://github.com/MacRimi/ProxMenux/pull/363), [PR #364](https://github.com/MacRimi/ProxMenux/pull/364), [PR #367](https://github.com/MacRimi/ProxMenux/pull/367), [PR #368](https://github.com/MacRimi/ProxMenux/pull/368), [PR #369](https://github.com/MacRimi/ProxMenux/pull/369), [PR #370](https://github.com/MacRimi/ProxMenux/pull/370), [PR #371](https://github.com/MacRimi/ProxMenux/pull/371), [PR #375](https://github.com/MacRimi/ProxMenux/pull/375), [PR #384](https://github.com/MacRimi/ProxMenux/pull/384), [PR #389](https://github.com/MacRimi/ProxMenux/pull/389), [PR #390](https://github.com/MacRimi/ProxMenux/pull/390), [PR #397](https://github.com/MacRimi/ProxMenux/pull/397), [PR #400](https://github.com/MacRimi/ProxMenux/pull/400), [PR #401](https://github.com/MacRimi/ProxMenux/pull/401). +- **Terminal command descriptions in every language** ([PR #351](https://github.com/MacRimi/ProxMenux/pull/351), [PR #354](https://github.com/MacRimi/ProxMenux/pull/354), contributed by [@f3rs3n](https://github.com/f3rs3n); [PR #362](https://github.com/MacRimi/ProxMenux/pull/362), contributed by [@Vaso73](https://github.com/Vaso73)). +- **Italian** ([PR #422](https://github.com/MacRimi/ProxMenux/pull/422), [PR #424](https://github.com/MacRimi/ProxMenux/pull/424), [PR #426](https://github.com/MacRimi/ProxMenux/pull/426), [PR #429](https://github.com/MacRimi/ProxMenux/pull/429), [PR #432](https://github.com/MacRimi/ProxMenux/pull/432), [PR #437](https://github.com/MacRimi/ProxMenux/pull/437), [PR #516](https://github.com/MacRimi/ProxMenux/pull/516), contributed by [@f3rs3n](https://github.com/f3rs3n)) **and Slovak** ([PR #391](https://github.com/MacRimi/ProxMenux/pull/391), [PR #396](https://github.com/MacRimi/ProxMenux/pull/396), [PR #430](https://github.com/MacRimi/ProxMenux/pull/430), [PR #431](https://github.com/MacRimi/ProxMenux/pull/431), [PR #436](https://github.com/MacRimi/ProxMenux/pull/436), contributed by [@Vaso73](https://github.com/Vaso73)) cover everything new in this version, written by people who speak them. +- **Slovak of everything new, in the Monitor and the terminal** ([PR #508](https://github.com/MacRimi/ProxMenux/pull/508), [PR #509](https://github.com/MacRimi/ProxMenux/pull/509), [PR #510](https://github.com/MacRimi/ProxMenux/pull/510), [PR #511](https://github.com/MacRimi/ProxMenux/pull/511), [PR #512](https://github.com/MacRimi/ProxMenux/pull/512), [PR #513](https://github.com/MacRimi/ProxMenux/pull/513), contributed by [@Vaso73](https://github.com/Vaso73)): PBS connections and status, linked nodes, host backup, ZRAM and PBS post-install, OCI manager, the application editor and the optimization source viewer. Their errors are shown in the reader's language, a cancelled OCI update or modify says it was cancelled, and the same texts are complete in the other six languages. +- **German of the Monitor reviewed by a native speaker** ([PR #455](https://github.com/MacRimi/ProxMenux/pull/455), contributed by [@detlefs](https://github.com/detlefs)): mistranslated terms corrected and the wording made consistent across the interface. +- **A translation that exists is never replaced.** The translation builds only write where there is nothing, keep lists as lists and protect the names that are not words: `nouveau`, `initramfs`, `vfio-pci`, Debian release names and the rest. +- **Swedish can be chosen when installing ProxMenux, and every translation keeps commands and names intact** ([PR #475](https://github.com/MacRimi/ProxMenux/pull/475), contributed by [@jcastro](https://github.com/jcastro)): an offline check rejects a translation that changes a command, a path, a variable or a placeholder, in the menus and in the documentation, and the texts that did were corrected in every language. +- **Monitor labels corrected in German, Swedish, Portuguese and French**: the Port field, the 2FA buttons, the name of the backup codes and the European Portuguese words for user name, password and force stop. +- **The Spanish of the Monitor and the menus follows one style**: the reader is addressed as *tú*, buttons and menu options use the infinitive, and the vocabulary is that of Spain (*pulsar*, *introducir*, *añadir*, the key *Intro*). Backup, snapshot, host, pool and slot stay in English, and several mistranslated texts were corrected. The guide for translators describes it. +- **The Spanish of the menus and of the OCI catalog was rewritten by hand**, and the 28 catalog categories are written by hand in every language. +- **The offline test suites cover every shipped locale** ([PR #380](https://github.com/MacRimi/ProxMenux/pull/380), [PR #381](https://github.com/MacRimi/ProxMenux/pull/381), [PR #383](https://github.com/MacRimi/ProxMenux/pull/383), contributed by [@f3rs3n](https://github.com/f3rs3n)). +- **The Monitor is complete in Slovak**, Audit & Report included ([PR #329](https://github.com/MacRimi/ProxMenux/pull/329), [PR #330](https://github.com/MacRimi/ProxMenux/pull/330), [PR #344](https://github.com/MacRimi/ProxMenux/pull/344), [PR #345](https://github.com/MacRimi/ProxMenux/pull/345), contributed by [@Vaso73](https://github.com/Vaso73)). Application categories are translated for display while the catalogue's own values stay untouched for filtering, so search matches whichever of the two you type. +- **The remaining texts of the dashboard and the menus are translated** ([PR #470](https://github.com/MacRimi/ProxMenux/pull/470), contributed by [@jcastro](https://github.com/jcastro)), and adding a new message no longer breaks the translation tests ([PR #469](https://github.com/MacRimi/ProxMenux/pull/469)). +- **`host` and `cluster` read as themselves in every language**, in labels and in prose alike, each language using the term its own catalogue already established. +- **The network interface panel counts packets again**: errors and dropped packets are named for reception and transmission instead of being translated as ordinary sentences. +- **Numbers are formatted in the reader's language**, and the running state reads as a state rather than as the physical act of running, in German, Spanish, French, Italian, Portuguese and Swedish. +- Weekday names in scheduled updates resolve correctly, and VM and LXC power actions follow Proxmox's own Spanish wording: *Apagar* for the graceful action, *Parar* for the forced one. + +--- + +## 📚 Documentation + +- **The website documentation was reviewed in all seven translations** ([PR #476](https://github.com/MacRimi/ProxMenux/pull/476), [PR #477](https://github.com/MacRimi/ProxMenux/pull/477), [PR #478](https://github.com/MacRimi/ProxMenux/pull/478), [PR #479](https://github.com/MacRimi/ProxMenux/pull/479), [PR #480](https://github.com/MacRimi/ProxMenux/pull/480), [PR #481](https://github.com/MacRimi/ProxMenux/pull/481), [PR #482](https://github.com/MacRimi/ProxMenux/pull/482), [PR #483](https://github.com/MacRimi/ProxMenux/pull/483), [PR #484](https://github.com/MacRimi/ProxMenux/pull/484), [PR #485](https://github.com/MacRimi/ProxMenux/pull/485), [PR #486](https://github.com/MacRimi/ProxMenux/pull/486), [PR #487](https://github.com/MacRimi/ProxMenux/pull/487), [PR #488](https://github.com/MacRimi/ProxMenux/pull/488), [PR #489](https://github.com/MacRimi/ProxMenux/pull/489), [PR #490](https://github.com/MacRimi/ProxMenux/pull/490), [PR #491](https://github.com/MacRimi/ProxMenux/pull/491), contributed by [@jcastro](https://github.com/jcastro)): installation and reference pages, post-install, VM creation, disks, storage sharing, networking, backup and restore, security, settings, utilities, the Monitor, OCI manager, command references, practical guides and the GPU and Coral guides. +- **OCI manager has its own documentation**: what it installs and how, the catalog, multi-container applications, updates and recovery, the oci-compose format and its use from the Monitor, with diagrams and screenshots. +- **The contributors page thanks the people behind each release**: those developing, reviewing, translating and testing ProxMenux today, and those who helped it take its first steps. + +--- + +## 🙏 Acknowledgments + +- **[@Vaso73](https://github.com/Vaso73)** — the side-by-side testing of OCI applications against their Docker originals and the fixes that came from it, the rebuild of multi-container applications from their saved state, notifications in the reader's language, Find applications for services installed by hand and for Docker containers, the VM and LXC search and updates filter, the runtime-verified detectors, the update results of stopped containers and the power controls that follow their Proxmox task, the Audit & Report review dates and comparison, and the complete Slovak of the Monitor and the terminal. +- **[@f3rs3n](https://github.com/f3rs3n)** — the review of hundreds of messages across the menus, backups, storage and OCI manager, backup, health, temperature and cluster notifications, the disk formatting and host restore safeguards, the repository and PVE upgrade checks, the Synology loaders, the Bashrc and Log2RAM migrations, the API token scope report, the portable Python runtime, the test suites, and the complete Italian of this version. +- **[@jcastro](https://github.com/jcastro)** — ProxMenux on Proxmox Backup Server, the private registry accounts of OCI manager Apps, faster Manage, Modify and Update, Modify applied to the running container, update checks from the OCI menu, snapshot backups on ZFS, Proxmox tags kept across operations, Figurine for every architecture, the Slack and Matrix guide for Apprise, the retention of backup storages, the deletion of guest backups, LVM checks that respect disk exclusions, the translation checks, the remaining translations and the review of the documentation in every language. +- **[@byGarcia](https://github.com/byGarcia)** — Docker application registration and image version tracking, with verified detectors and lab testing, and Docker images pinned by digest. +- **[@MattiaC46](https://github.com/MattiaC46)** — the VM and CT backup jobs. +- **[@SystemIdleProcess](https://github.com/SystemIdleProcess)** — the explicit updater selection design and the Changedetection.io detector. +- **[@detlefs](https://github.com/detlefs)** — the review of the German of the Monitor. +- **[@pbr85](https://github.com/pbr85)** — the gzip diversion for pigz and the journal helpers. +- **[@phyrexia](https://github.com/phyrexia)** — the ZRAM swap profile and its metrics in the Monitor. +- **[@fklnc94](https://github.com/fklnc94)** and **[@wolly6973](https://github.com/wolly6973)** — the cluster node notifications and the dismissal of stale remote mounts. +- **[@pdafoto](https://github.com/pdafoto)**, **[@gabglus](https://github.com/gabglus)**, **[@dave100fuegos](https://github.com/dave100fuegos)** and **[@WRCAs](https://github.com/WRCAs)** — the applications suggested for the OCI catalog and their tests, and the LazyLibrarian and PeaNUT detectors. +- **[@shtefko](https://github.com/shtefko)**, **[@Joshua1264](https://github.com/Joshua1264)**, **[@sbaghdadi](https://github.com/sbaghdadi)**, **[@ash34](https://github.com/ash34)**, **[@bartclone](https://github.com/bartclone)**, **[@spectante](https://github.com/spectante)**, **[@linux-fertxo](https://github.com/linux-fertxo)**, **[@sponger544](https://github.com/sponger544)**, **[@LucasR3C3](https://github.com/LucasR3C3)**, **[@tropicaljoe](https://github.com/tropicaljoe)**, **[@rollingafull](https://github.com/rollingafull)**, **@sahartford**, **@christiannieveslauz**, **Maragath**, **Charly Silva**, **Nicolas Ortuzar** and **Rafael Fernández Díez** — the reports behind the `/etc/pve` handling, persistent log errors, host backups with SELinux, the update count and log, remote Borg repositories, disk spin-down, post-install on any locale, the node name on slow hosts, GPU passthrough on AMD APUs, the certificate restore, the AMD fixes, backup notifications over HTTPS, storage exclusions, permanent dismissals, shared host directories, host backups on a cluster, backups of former jobs, the notification history, application version consistency and historical metrics on slower hosts. + +Feedback is welcome in [Discussions](https://github.com/MacRimi/ProxMenux/discussions) or as an issue. + +--- + +For the full history of changes, see [Releases](https://github.com/MacRimi/ProxMenux/releases). + +--- + + ## 2026-09-02 ### New version ProxMenux v1.2.6 diff --git a/web/data/changelog/es.md b/web/data/changelog/es.md index 470d775c..007ed740 100644 --- a/web/data/changelog/es.md +++ b/web/data/changelog/es.md @@ -1,3 +1,515 @@ +## 2026-10-26 + +### Nueva versión ProxMenux v1.2.7 + +ProxMenux 1.2.7 incorpora dos herramientas nuevas. **Audit & Report** (Auditoría e informes), una página nueva en Admin de ProxMenux Monitor, documenta un nodo Proxmox, lo evalúa frente a cuarenta y tres comprobaciones e imprime el resultado como un informe que puedes entregar a otra persona, junto a un registro de todo lo que el propio ProxMenux ha cambiado en el host. **OCI manager Apps**, una entrada nueva del menú principal, instala aplicaciones directamente desde sus imágenes oficiales de contenedor como contenedores LXC nativos de Proxmox, sin ningún motor Docker: un catálogo de 347 aplicaciones, aplicaciones multicontenedor como Immich, Nextcloud y Paperless, perfiles de aceleración por hardware, actualizaciones que conservan los datos y recuperación tras una restauración o en otro host, todo ello gestionable también desde el Monitor. + +A su alrededor: una **búsqueda en el menú principal** entre las opciones de ProxMenux, las aplicaciones OCI y los Helper-Scripts, **ProxMenux en Proxmox Backup Server**, los **trabajos de backup de VM y CT** gestionados desde ProxMenux, tokens de API de solo lectura que solo pueden leer, notificaciones escritas en el idioma de quien las lee, aplicaciones Docker registradas con su propia identidad, un historial de discos que sigue a cada disco por su número de serie y una larga lista de mejoras en backups, notificaciones, el Monitor, el instalador y las traducciones, en ocho idiomas. + +Esta versión reúne todo lo que aportaron las betas 1.2.6.1 y 1.2.6.2. Un agradecimiento especial a [@Vaso73](https://github.com/Vaso73), [@f3rs3n](https://github.com/f3rs3n) y [@jcastro](https://github.com/jcastro). Entre los tres aportaron más de cien pull requests durante este ciclo: instalaciones reales comparadas con sus originales de Docker, ProxMenux en Proxmox Backup Server, registros privados y operaciones más rápidas en OCI manager, correcciones en el Monitor, los backups y las notificaciones, una revisión de cientos de mensajes para que cada uno diga exactamente lo que ha pasado, la documentación revisada en todos los idiomas, y el eslovaco y el italiano de todo lo nuevo. Sus pruebas y su depuración son en gran parte la razón de que esta versión esté disponible. + +--- + +## 🔎 Audit & Report — una página nueva en Admin + +La página reúne tres vistas, y todas ellas solo leen: una evaluación nunca modifica el host. + +**Evaluación** analiza el nodo y enumera lo que encuentra. **Cambios** muestra lo que ProxMenux le ha hecho. **Política** es donde declaras lo que se supone que debe ser el host, que es lo que convierte una descripción en un juicio. + +### La evaluación + +- **Cuarenta y tres comprobaciones específicas de Proxmox** en backup, sistema, guests, seguridad, almacenamiento, red y hardware. Entre ellas: qué guests no cubre ningún trabajo de backup habilitado y qué antigüedad tienen los backups que realmente guardan los destinos; si Proxmox Backup Server verificó el backup más reciente de cada guest; cómo terminaron las ejecuciones de backup registradas; el espacio *y los inodos* de los sistemas de archivos que necesita el propio nodo; la integridad de los pools ZFS y los contadores de errores de los dispositivos; la redundancia del RAID por software y de multipath; el veredicto del propio Ceph; el quórum del clúster y los enlaces corosync que lo sostienen; la alta disponibilidad allí donde el quórum no puede responder; las particiones EFI que arrancarían el kernel; los servicios esenciales y las unidades que systemd dio por perdidas; la validez de los certificados; cómo admite SSH a root; la cadena de actualizaciones; y si funcionan los propios canales que te avisarían. +- **Cada hallazgo lleva la evidencia en la que se basa** — la salida del comando o el fragmento de configuración — junto con lo que examina la comprobación y de dónde procede la lectura. La evidencia se presenta en tablas y valores etiquetados, con nombres de campo legibles y cifras formateadas según lo que son: los bytes como tamaño, las horas como duración, un instante como fecha en tu propia configuración regional. +- **Seis resultados, cada uno con una definición que tiene que ganarse.** *Crítico* es una interrupción o una amenaza urgente para la disponibilidad, la integridad o la recuperabilidad, con evidencia. *Advertencia* es una degradación verificada, una protección esperada que no está o una política declarada que no se cumple. *Observación* es configuración, un límite o información de planificación. *Conforme* significa que el criterio se verificó y se cumple. *Sin verificar* significa que no había información suficiente para concluir. *No aplicable* significa que no había nada que evaluar. +- **Una comprobación que no se pudo evaluar dice qué no pudo leer** — el destino que rechazó la conexión, el comando que falló — junto al resultado, en lugar de en dos paneles plegados debajo de él. La falta de evidencia nunca cuenta como un resultado favorable. +- **La gravedad pertenece a la situación, no a la comprobación.** Un almacenamiento al 90 % de su capacidad y un almacenamiento inaccesible salen de la misma comprobación y ya no comparten gravedad; un hallazgo toma la gravedad más alta de los objetos sobre los que informa. +- **Los riesgos aceptados** se registran sobre un hallazgo con un motivo obligatorio y un periodo de revisión opcional. La clasificación técnica se mantiene y la decisión queda a su lado, de modo que un informe sigue mostrando que un hallazgo crítico se aceptó y quién lo aceptó. Cuando termina el periodo, el hallazgo vuelve al conjunto activo. +- **Un riesgo aceptado puede llevar una fecha de revisión sin caducidad** ([#343](https://github.com/MacRimi/ProxMenux/discussions/343), con [@Vaso73](https://github.com/Vaso73)): la decisión sigue vigente y vuelve para que se revise. +- **La evaluación describe con precisión sus propios efectos** ([PR #352](https://github.com/MacRimi/ProxMenux/pull/352), aportado por [@f3rs3n](https://github.com/f3rs3n)), y la eliminación de Lynis dice lo que ha pasado ([PR #404](https://github.com/MacRimi/ProxMenux/pull/404)). +- **Lynis se lee, no se reimplementa.** Sus advertencias conservan sus identificadores de prueba y se agrupan en una fila por cada advertencia distinta, con el número de veces que se emitió. Si Lynis está instalado pero no tiene un informe utilizable, la evaluación ofrece ejecutar uno antes de empezar, así que la decisión de invertir ese minuto es tuya. +- Los hallazgos guardan la identidad de su mensaje y sus valores en lugar de una frase ya redactada, de modo que un informe se lee en el idioma de quien lo abre. + +### Cambios — lo que ProxMenux hizo en este host + +La queja que más pesa contra una herramienta como esta no es que cambie cosas: es que después nadie sabe decir qué cambió. Leer el script tampoco lo resuelve — una función de cuatrocientas líneas puede alterar dos valores, y quien la lee no tiene forma de saber cuáles. + +- **Tres bloques responden a las tres preguntas que de verdad se hace un administrador**: qué dejó configurado la post-instalación, qué scripts de ProxMenux escribieron en el host y qué cambió cada uno, y qué paquetes y utilidades hay ahora instalados. Cada entrada indica el script del que procede, así que un cambio se puede rastrear hasta el menú que lo hizo. +- **Solo se muestra el cambio.** `optimize_logrotate` se lee como `rotate 7` → `rotate 14`, no como cuarenta líneas de shell. Lo que se sustituyó se guarda en un almacén de contenido indexado por digest, así que sobrevive a que alguien ordene `/etc`. +- **Lo que se cambió se separa de lo que se ejecutó.** Una función que reescribe un archivo es la autora de ese cambio; una actualización lanzada desde un menú no lo es — apt decidió qué cambiaba. Ambas cosas se registran, en clases distintas, y la interfaz lo indica. +- **Cada entrada indica hasta qué punto se conoce el estado anterior**: capturado en el momento, capturado al volver a aplicarse sobre un host ya modificado, o nunca capturado porque es anterior al registro. Cada entrada declara además con qué exactitud podría deshacerse: exacta, parcial o de ninguna manera. +- **Las instalaciones registran la diferencia que produjeron**, no el nombre que se pidió: los paquetes que no estaban y ahora están, dependencias incluidas. +- **El registro muestra el host tal como está ahora**, no un log de cada vez que se ejecutó un script. Volver a ejecutar la post-instalación, pasar entre los canales estable y beta o reinstalar una utilidad actualiza la entrada existente en su sitio, con el estado de origen a un lado y el estado actual al otro. +- **Registrar nunca cuesta una operación.** Un pequeño archivo JSON escrito entero en una cola que el Monitor consolida: sin base de datos, sin Python y sin red en el lado que escribe. Si el registro no se puede escribir en absoluto, el cambio se hace igualmente. +- **La post-instalación personalizable aparece con su propia opción.** Figurine, Fastfetch y las demás opciones aplicadas desde ese menú aparecen en la sección de post-instalación con su nombre, junto a las de la post-instalación automática. +- El registro tiene su propia sección en el informe imprimible, que es donde defiende a un host. + +### Política — declarar lo que se espera + +- **Una evaluación puede ver lo que hace un host, no para qué sirve.** Si un guest necesita backup, si un servicio debe volver a arrancar por sí solo, si un almacenamiento es esencial: nada de eso se puede descubrir, y adivinarlo convierte configuraciones normales en alarmas. Un host sin nada declarado produce un informe completo que describe en lugar de juzgar. +- **Declarar es elegir entre lo que hay.** Los guests y los almacenamientos se listan a partir del inventario de este nodo, en lugar de escribirse por su identificador. Por guest: si se exige un backup, si se espera que arranque con el host y un objetivo de recuperación en horas cuando la carga de trabajo lo tiene. Por almacenamiento: esencial, opcional o sin especificar. Además, cada umbral con el que miden las comprobaciones, cada uno con el valor de serie como texto de ejemplo: dejar un campo vacío conserva ese valor. +- **La herencia es explícita.** *Heredar* muestra el valor predeterminado del sitio y elimina la excepción por recurso; *Sin especificar* se guarda como tal, así que no puede reactivar en silencio un requisito heredado. +- **Un guest exento sigue visible**, con la decisión que lo sacó del recuento: *excluido por política*, que es algo distinto de un riesgo aceptado. El informe indica también qué política aplicó, así que dos informes del mismo host — uno medido frente a expectativas declaradas y otro frente a ninguna — ya no se leen igual. + +### Qué ha cambiado desde la última vez + +- **Una evaluación tiene ahora un antes.** Cualquier ejecución puede marcarse como referencia, y cada una de las siguientes se lee frente a ella. +- **Corregido no es lo mismo que aceptado.** Un hallazgo que dejó de aparecer porque el host cambió y otro que dejó de aparecer porque alguien aceptó el riesgo salen ambos de la lista, y solo el primero es un avance. Se cuentan por separado. +- **La comparación dice hacia dónde se movió un hallazgo** ([#343](https://github.com/MacRimi/ProxMenux/discussions/343), con [@Vaso73](https://github.com/Vaso73)): peor, mejor o igual, en la vista y en el informe impreso. +- **Una comprobación que desaparece se indica como ya no evaluada**, no como resuelta: nada verificó que dejara de fallar, solo que se dejó de preguntar. + +### Informes + +- **Un informe responde a una pregunta**, así que el perfil selecciona tanto las comprobaciones que se ejecutan como las secciones que lleva el documento: *Auditoría completa*, *Inventario*, *Revisión de seguridad*, *Garantía de backups*, *Capacidad y desgaste* y *Diagnóstico rápido*. Cada informe específico empieza con su propia cabecera de situación. Las secciones que un perfil no pidió no aparecen, en lugar de aparecer vacías, para que una omisión nunca se lea como un resultado. +- **El documento describe el nodo antes de juzgarlo.** Primero van la identidad, el clúster, la arquitectura, los discos, la red, el almacenamiento, los guests, el passthrough y el software gestionado; después vienen los hallazgos, porque un hallazgo sobre un bridge significa poco para un lector al que no se le ha mostrado ese bridge. +- **Los diagramas recogen las relaciones, no las listas**: el procesador y la memoria en sus slots y lo que cuelga de cada controlador; el camino desde el cable hasta cada guest a través del adaptador, el bond y el bridge; dónde viven los discos de los guests y qué destino hace su backup; la pertenencia al clúster sobre los enlaces corosync que lo unen. Todos los diagramas son SVG en línea, así que se imprimen como vectores y el documento sigue siendo autónomo. +- **Diagnóstico rápido recoge solo lo que pide una decisión** — los hallazgos críticos y de advertencia con la evidencia necesaria para actuar sobre ellos, y las lecturas que no se pudieron tomar. Se siguen ejecutando todas las comprobaciones: un informe corto que se saltara comprobaciones sería rápido y poco fiable. +- **El perfil Inventario no ejecuta ninguna comprobación**, así que un nodo que nunca se ha evaluado puede generar igualmente su documento estructural: la memoria módulo a módulo con slot, tipo, velocidad y número de pieza; los discos físicos con modelo, número de serie, bus y estado SMART; los adaptadores con velocidad de enlace, driver y dirección PCI; el passthrough PCI con su grupo IOMMU; y la latencia de red por destino. +- **La sección de discos lleva el registro de observaciones**: lo que ha pasado a lo largo del tiempo, incluidos los eventos de los que un disco se recuperó, con tipo, gravedad, recuento y la primera y la última vez que se vio cada uno. +- Los informes de SMART, Lynis, latencia y auditoría comparten ahora un mismo armazón: la misma cabecera, secciones numeradas, tarjetas y avisos destacados, y una barra de acciones solo con iconos que desaparece al imprimir la página. +- **Los hallazgos de auditoría y los informes imprimibles se adaptan a pantallas estrechas** ([PR #399](https://github.com/MacRimi/ProxMenux/pull/399), aportado por [@f3rs3n](https://github.com/f3rs3n)). +- **Toda la página funciona en un móvil.** Las tablas densas se apilan en bloques en los que el encabezado acompaña al valor en lugar de desplazarse en horizontal, los controles ocupan una fila cada uno por debajo del punto de corte pequeño, y el informe se abre como una navegación real, de modo que una aplicación web instalada conserva sus propios controles para volver y cerrar. + +--- + +## 📦 OCI manager Apps (Technology Preview) — imágenes oficiales de contenedor como LXC nativos de Proxmox + +ProxMenux no construye sus propios contenedores para estas aplicaciones: lee la receta publicada de cada una y la convierte en un LXC OCI nativo de Proxmox. OCI manager Apps lleva la etiqueta Technology Preview que Proxmox VE da a los contenedores de aplicaciones creados a partir de imágenes OCI, hasta que Proxmox VE los marque como estables. + +### El catálogo + +- **347 aplicaciones** de LinuxServer.io, de otros repositorios públicos de imágenes y de recetas escritas para ProxMenux, con la misma disposición que los Helper-Scripts: una búsqueda, la lista completa, 29 categorías y las aplicaciones instaladas. Cada aplicación lleva su icono y las arquitecturas que admite su imagen. +- **Una ✓ marca lo que se ha probado de verdad.** 43 aplicaciones muestran *Verificado*: 41 probadas en el laboratorio de ProxMenux, y PocketBase y Glances probadas por la comunidad, por [@Vaso73](https://github.com/Vaso73). Un formulario de issue registra una prueba nueva, y quien la hace aparece en los créditos de `oci/VALIDATION.md`. +- **Files & Sharing es una categoría propia**, con las dieciséis aplicaciones que sirven o sincronizan archivos. Entre ellas está **ShareCoveX**, un servidor de archivos con panel web que publica directorios por SMB, NFS o ambos, con usuarios de Samba y destinos de Time Machine. +- **También se puede instalar una imagen que no está en el catálogo**, a partir de su archivo Compose, un comando `docker run` o su referencia, con el resultado a la vista para revisarlo antes de crear ningún LXC. +- **Se puede instalar un oci-compose escrito a mano.** *Instalar una imagen que no está en el catálogo* acepta el archivo JSON desde el que se instala una aplicación: pegado en la terminal, leído desde el host o descargado desde una dirección. El archivo indica la imagen, sus puertos, variables y volúmenes, y lo que pregunta la instalación; ProxMenux completa el resto, lo comprueba y señala cada error por su campo. `oci/README.md` describe el formato bloque a bloque, con dos ejemplos en `oci/examples/`. + +### Instalar una aplicación + +- **Los menús de OCI manager Apps numeran sus opciones**, como hace el resto de ProxMenux, así que cada descripción dispone de todo el ancho; un almacenamiento, un bridge o un dispositivo conserva su nombre. +- **OCI manager Apps se abre en Proxmox VE 9.1 o posterior**, la primera versión que ejecuta imágenes OCI como contenedores LXC. En un host más antiguo lo indica, con la versión instalada, antes de instalar nada. +- **La página de una aplicación muestra lo que va a crear antes de instalar nada**: su imagen, la dirección en la que responderá, dónde van sus datos persistentes, los perfiles de aceleración que ofrece y, en una aplicación multicontenedor, cada contenedor del conjunto. +- **Dos formas de instalar.** La predeterminada pregunta lo que decide cualquier instalación (almacenamiento, dónde van sus datos, DHCP o dirección estática, cómo arranca) y toma el resto de la receta. La avanzada abre todas las decisiones en orden: VMID y recursos, cada ruta de datos con su ubicación, almacenamiento y tamaño, rutas y dispositivos adicionales, la red, los ajustes de la aplicación, la GPU y cómo arranca. +- **Cada pregunta dice lo que pide**, con un ejemplo o un valor propuesto. Una aplicación que necesita una base de datos o un servidor Redis ya en marcha, como BookStack, NetBox o Manyfold, lo indica primero, con la dirección de la documentación de su imagen. +- **A una aplicación no se le pregunta su propia dirección.** BookStack, Healthchecks, Speedtest Tracker y NetBox reciben la dirección del contenedor: la fija o la que asigna DHCP, obtenida antes de que la aplicación arranque por primera vez. +- **Las carpetas de datos pertenecen a la aplicación.** Descargas, series, música, libros y backups se crean para el usuario con el que se ejecuta la aplicación, como volumen del contenedor o como directorio del host, y un volumen nuevo empieza con lo que la imagen contiene en esa ruta. +- **FileBrowser Quantum abre la carpeta que se le indica.** Arranca con la configuración de su receta, escrita para la versión 2 de la aplicación, que sirve la carpeta elegida en la instalación. El archivo inicial que escribe una receta sustituye a la copia que trae la imagen en un volumen nuevo, y nunca a un archivo que ya estuviera allí. +- **Las imágenes de registros privados se instalan y se actualizan** ([PR #460](https://github.com/MacRimi/ProxMenux/pull/460), aportado por [@jcastro](https://github.com/jcastro), y solicitado por varios usuarios). *Cuentas de registro* guarda una cuenta en cuanto el registro la acepta, y un registro que rechaza una imagen ofrece iniciar sesión en ese mismo momento. Las cuentas se guardan en `/etc/pve/priv` para todos los nodos del clúster, y las usan las actualizaciones, la vigilancia y el Monitor. +- **Los dispositivos USB y serie se eligen de una lista**, por nombre y tipo, y todas las aplicaciones aceptan rutas y dispositivos adicionales en la instalación avanzada. +- **Las aplicaciones arrancan con la memoria que necesitan**: 1024 MB, salvo que la receta pida más o fije un límite. +- **El resumen termina con lo necesario para usar la aplicación**: su dirección, y el usuario y la contraseña con los que iniciar sesión. Un servicio sin interfaz web, como MariaDB, PostgreSQL o un servidor SSH, se indica por su dirección y su puerto. +- **Un valor mal escrito vuelve a hacer la misma pregunta**, no se acepta una dirección estática que ya esté en uso en la red, y la creación del contenedor muestra su progreso mientras se desempaqueta una imagen grande. +- **Se instalan las imágenes construidas desde cero con un usuario numérico**, como ddns-updater: el contenedor se crea a partir de una copia de la imagen que añade los `/etc/passwd` y `/etc/group` que necesita Proxmox VE, y la aplicación se ejecuta con el usuario y el grupo que declara la imagen. La imagen descargada se conserva tal como estaba. +- **La imagen descargada se puede eliminar al terminar la instalación**, y las imágenes que no usa ninguna instalación se eliminan solas. + +### Aplicaciones formadas por varios contenedores + +- **Un LXC por servicio**, conectados a través de un bridge privado propio y arrancados en orden. Immich, Nextcloud, Paperless y Tandoor tienen sus propias recetas, otras diez proceden de su archivo Compose publicado, y la suite Arr instala cada aplicación como un LXC independiente conectado con los demás. +- **Immich pregunta qué ejecuta su vídeo y su reconocimiento**: la CPU o cada GPU del host, juntas o repartidas entre dos GPU, con VA-API o NVENC para el vídeo y OpenVINO, ROCm o CUDA para el reconocimiento. +- **La dirección que se ofrece es la que puede alcanzar un navegador**: la dirección de LAN del contenedor, en el resumen y en sus notas de Proxmox. + +### Aceleración por hardware + +- **El menú de aceleración ofrece solo lo que el host puede ejecutar**: NVIDIA con el driver y el Container Toolkit, Intel o AMD donde esa GPU está presente. El render node propuesto es el de esa GPU. +- **Las aplicaciones de IA usan la imagen construida para la GPU elegida.** Ollama incorpora un perfil AMD (ROCm), llama.cpp ofrece CPU, CUDA, ROCm y SYCL, y Faster Whisper y Piper ofrecen NVIDIA. +- **Frigate detecta objetos con una GPU AMD, una NPU Intel o un Coral** (NPU y Coral sugeridos por [@jcastro](https://github.com/jcastro)), y su detector de CPU funciona en procesadores AMD. +- **ROCm se ofrece según la generación de la GPU AMD**, como opción experimental en aquellas para las que la imagen no trae kernels, e Immich comprueba la GPU con una inferencia real antes de aceptarla. + +### Almacenamiento y directorios compartidos + +- **Un directorio del host que ya existe se puede abrir a la aplicación que lo comparte**, con reglas de acceso (ACL) que dejan intacto el propietario de los archivos. +- **Un directorio compartido del host muestra lo que el host tiene montado dentro de él**: recursos compartidos de red, discos y datasets ZFS, también los que se montan mientras el contenedor está en marcha. +- **Un directorio compartido del host se reconoce por su sistema de archivos**, así que una aplicación se sigue actualizando después de que el host se reinicie o de que un disco vuelva con otro nombre de dispositivo (reportado por Charly Silva). + +### Actualizar, modificar y recrear + +- **Una actualización sustituye la imagen y conserva los datos.** Se hace un backup del contenedor, se reconstruye a partir de la imagen nueva y se le pide que responda antes de dar la operación por buena; si no responde, todo vuelve a como estaba. Los cambios de recursos hechos desde Proxmox se mantienen. +- **Todas las aplicaciones instaladas se pueden actualizar y modificar**, incluidos los contenedores privilegiados, los monitores del host y las aplicaciones de la suite Arr. +- **Modificar** cambia los ajustes de una aplicación instalada; en una multicontenedor añade o elimina rutas y dispositivos adicionales sin reconstruir nada, y cambia lo que ejecuta el reconocimiento en Immich. +- **Una aplicación multicontenedor se puede reconstruir tal como está** ([PR #423](https://github.com/MacRimi/ProxMenux/pull/423), aportado por [@Vaso73](https://github.com/Vaso73)). *Recrear todos los contenedores con su configuración guardada* reconstruye cada contenedor a partir de la imagen con la que se instaló. +- **Las etiquetas de Proxmox se pueden cambiar libremente** ([PR #473](https://github.com/MacRimi/ProxMenux/pull/473), aportado por [@jcastro](https://github.com/jcastro)): Actualizar, Modificar y Recrear conservan las etiquetas que tiene un contenedor, o ninguna si se eliminaron, también en los contenedores de una aplicación multicontenedor. +- **Un volumen montado en solo lectura se deja tal como está** al reconstruir un contenedor ([PR #494](https://github.com/MacRimi/ProxMenux/pull/494), aportado por [@jcastro](https://github.com/jcastro)), como `/run/secrets`; no se tocan sus archivos, su propietario ni sus permisos. +- **Una aplicación que se ejecuta con un usuario que su imagen no incluye recibe `/` como directorio personal** ([PR #496](https://github.com/MacRimi/ProxMenux/pull/496), aportado por [@Vaso73](https://github.com/Vaso73)), como hace Docker, y el archivo de usuarios de la imagen se lee sin seguir enlaces. +- **Los servicios que no son páginas web se actualizan y se recuperan como los demás**: MariaDB, SSH o un servidor de voz responden por su propio protocolo, y Actualizar, Modificar y Recuperar toman esa respuesta como señal de que el servicio está en marcha. +- **El backup de una operación se puede hacer en otro almacenamiento** cuando no cabe en el disco del sistema, y una operación que no tiene espacio lo indica antes de detener nada. +- **Una descarga de imagen o un backup de trabajo dañados se escriben una segunda vez** antes de que nada falle, y una actualización fallida no deja ningún contenedor temporal. +- **Modificar es un menú de ajustes** ([PR #495](https://github.com/MacRimi/ProxMenux/pull/495), aportado por [@jcastro](https://github.com/jcastro)): cada fila muestra el valor actual, solo se edita el ajuste elegido, y los cambios se guardan hasta que se revisan y se aplican juntos, o se descartan. Actualizar las opciones del catálogo es una entrada más del menú. +- **Gestionar se abre al instante** ([PR #493](https://github.com/MacRimi/ProxMenux/pull/493), aportado por [@jcastro](https://github.com/jcastro)): la configuración de cada aplicación solo se vuelve a leer cuando ha cambiado, así que un host con 26 aplicaciones pasa de 15 segundos a una fracción de segundo. +- **Modificar y Actualizar se abren sin esperas** ([PR #498](https://github.com/MacRimi/ProxMenux/pull/498), aportado por [@jcastro](https://github.com/jcastro)): el espacio para el backup se comprueba una vez aceptada la operación, y la tecla Esc vuelve atrás al instante. +- **Modificar cambia el contenedor en marcha cuando puede** ([PR #497](https://github.com/MacRimi/ProxMenux/pull/497), aportado por [@jcastro](https://github.com/jcastro)): la CPU y la memoria se aplican en caliente, y la red, las variables, las rutas del host y los dispositivos se cambian en su sitio, con marcha atrás si falla un paso. Solo lo que no se puede cambiar en su sitio reconstruye el contenedor. +- **Las variables cambiadas en Proxmox se conservan.** Una contraseña cambiada tras el primer inicio de sesión, o una variable añadida desde Proxmox, se muestra por su nombre, sin su valor, y se guarda en el oci-compose antes de que Actualizar o Modificar continúen. +- **La imagen descargada solo se ofrece para eliminarla después de reconstruir un contenedor a partir de ella**, no después de un cambio aplicado al contenedor en marcha. +- **La lista de aplicaciones instaladas vuelve después de cada operación**, ya sea una actualización, un cambio o una eliminación, sin volver a leer todas las aplicaciones. + +### Vigilancia, backups y clústeres + +- **Una aplicación se puede poner bajo vigilancia.** Proxmox no tiene política de reinicio; con la vigilancia activada, una aplicación que se detiene por sí sola se vuelve a arrancar, con una notificación. Nunca se deshace una parada pedida por el usuario, un backup, una migración o una operación de ProxMenux. +- **Una aplicación multicontenedor arranca mientras se hace el backup de uno de sus contenedores.** Su arranque espera a que vzdump libere ese contenedor y después continúa, y la vigilancia también espera. Al actualizar ProxMenux, las aplicaciones ya instaladas reciben el nuevo hook de arranque. +- **El registro de una aplicación viaja con su contenedor.** Una copia vive dentro de él y otra en `/etc/pve`, así que un backup de vzdump o de PBS siempre lo lleva. +- **Se ofrece recuperar una aplicación restaurada**, en una instalación nueva de Proxmox, en otro host o con otro ID. La recuperación repone lo que el host guardaba para ella, como la red privada de una aplicación multicontenedor, y lo comprueba todo antes de modificar el host. +- **En un clúster, el registro sigue al contenedor.** Una aplicación de un solo contenedor migrada o movida por HA arranca y se registra en el nodo al que llega. +- **Un contenedor que se reinicia a sí mismo conserva su dirección DHCP**, como hace Home Assistant OS desde sus ajustes. + +### Eliminar una aplicación + +- **Todo lo que la instalación guardó en el host se elimina con ella** y el resultado indica si algo quedó sin hacer ([PR #402](https://github.com/MacRimi/ProxMenux/pull/402), aportado por [@f3rs3n](https://github.com/f3rs3n)). Los directorios del host se conservan, y una aplicación de la suite Arr se elimina por separado. + +### Probadas frente a sus originales de Docker (aportado por [@Vaso73](https://github.com/Vaso73)) + +Instalaciones reales comparadas una junto a otra con las mismas imágenes en Docker, y lo que aportaron: + +- **Los datos iniciales de una imagen llegan a su volumen nuevo** ([PR #394](https://github.com/MacRimi/ProxMenux/pull/394)), como necesita PocketBase. +- **Un monitor del host es accesible a través del firewall, si se pide** ([PR #393](https://github.com/MacRimi/ProxMenux/pull/393), [PR #395](https://github.com/MacRimi/ProxMenux/pull/395)): Glances recibe una regla acotada, que se confirma por separado y se elimina con la aplicación. +- **Los miembros de una pila guardan sus datos en un volumen preparado** ([PR #410](https://github.com/MacRimi/ProxMenux/pull/410)), incluida la ruta de datos de las imágenes actuales de PostgreSQL. +- **Stremio, Uptime Kuma y las imágenes que necesitan un directorio personal arrancan como en Docker** ([PR #411](https://github.com/MacRimi/ProxMenux/pull/411), [PR #412](https://github.com/MacRimi/ProxMenux/pull/412), [PR #413](https://github.com/MacRimi/ProxMenux/pull/413)). + +--- + +## 📱 Aplicaciones OCI en ProxMenux Monitor + +- **La pestaña App registra lo que instaló ProxMenux.** La aplicación de un contenedor OCI se registra sola con su nombre, logotipo, dirección y seguimiento de versiones, leídos del registro de la instalación, también mientras el contenedor está detenido. Cada servicio que sirve una aplicación tiene su propio enlace, y un servicio sin interfaz web muestra su dirección y su puerto como texto. +- **Una aplicación instalada desde el menú aparece sola en el Monitor.** La página Apps y la lista de contenedores la registran a los pocos segundos de terminar su instalación, sin abrir su contenedor. +- **Las actualizaciones se siguen por la imagen.** La tarjeta muestra la versión de la aplicación y la imagen que ejecuta, con su fecha de compilación y su digest; una imagen nueva con la misma etiqueta es una actualización. +- **La pestaña Actualizaciones actualiza y modifica el contenedor.** **Actualizar** y **Modificar** abren la terminal del Monitor con el mismo flujo que el menú OCI. El backup hecho antes de actualizar se puede conservar, las actualizaciones de imagen se pueden programar, una aplicación multicontenedor se actualiza desde su contenedor principal y una aplicación restaurada muestra un botón **Recuperar**. +- **Una pestaña Registros nueva muestra lo que la aplicación escribe en su consola**, guardado en el host desde el primer arranque: las últimas líneas desde el último arranque, seguidas en directo, con un filtro y una descarga. +- **La consola de Proxmox de un contenedor OCI abre una shell**, el equivalente a `docker exec`, siempre que la imagen incluya una. +- **El interruptor Vigilancia** está en el modal del contenedor, debajo de Iniciar al arrancar. +- **Una operación OCI envía una sola notificación con su resultado**, en lugar de una por paso. Modificar y la reconstrucción de una aplicación multicontenedor tienen notificaciones propias. +- **El icono de actualización de la página Apps abre la pestaña Actualizaciones** de ese contenedor. + +--- + +## 🔎 Búsqueda en el menú principal + +- **El menú principal se abre con Buscar opciones y aplicaciones.** Un nombre o una parte de él encuentra una opción de ProxMenux, una aplicación del catálogo OCI o un Helper-Script, en ese orden, primero por nombre y después por categoría. +- **Cada resultado abre lo que dice su nombre**: un script en su primera pantalla, una aplicación en su página, una opción de la post-instalación o una utilidad del sistema en su lista, ya marcada. La búsqueda en sí no ejecuta nada. +- **El catálogo de Helper-Scripts se guarda en el host** y se actualiza una vez al día, así que la búsqueda responde también sin conexión. + +--- + +## 🧩 Los addons de Helper-Scripts se ejecutan donde corresponde + +- **Un addon se ejecuta donde indica su catálogo**: en el host Proxmox, dentro de un LXC elegido de una lista, o donde se elija cuando puede ser en ambos. Un LXC detenido se arranca tras confirmarlo, y los contenedores OCI quedan fuera. +- **Las descripciones y las notas se muestran como texto plano**, y un script se descarga completo antes de ejecutar nada. + +--- + +## 🗄 ProxMenux en Proxmox Backup Server ([PR #467](https://github.com/MacRimi/ProxMenux/pull/467), aportado por [@jcastro](https://github.com/jcastro)) + +- **ProxMenux se instala en un Proxmox Backup Server** con el mismo comando que en PVE, y abre un menú propio: versión y paquetes, datastores, tareas recientes, utilidades del sistema y una actualización de paquetes que muestra su plan antes de aplicarlo. +- **El menú de post-instalación funciona en PBS**: Automático, Personalizable, actualizaciones y desinstalación, con las opciones que tienen sentido en un servidor de backups. Sin suscripción, ofrece el repositorio no-subscription antes de actualizar, y Scripts comunitarios muestra la post-instalación de PBS y el microcódigo de los Helper-Scripts. +- **El Monitor de un PBS tiene el diseño del de PVE**: la misma cabecera, salud y administración, gráficas de CPU, memoria y red a partir del histórico que guarda PBS, una pestaña Datastores con el uso de cada datastore y los discos y pools del servidor, y una pestaña Tareas con las tareas recientes y las programaciones de mantenimiento. Lo que solo aplica a PVE queda fuera, ajustes incluidos. +- **Los trabajos de mantenimiento de un PBS muestran el estado de su última ejecución** también en su propio Monitor, leído de la API de PBS como en un PBS remoto. +- **Log2RAM comprime al momento los logs rotados**: el log rotado más reciente ya no se queda sin comprimir en `/var/log`, algo que en un PBS con mucha actividad llenaba un Log2RAM de 128M e impedía registrar sus tareas. A los hosts que ya tienen Log2RAM o la optimización de logrotate se les ofrece la actualización en *Ajustes → ProxMenux Optimizations*. +- **Un PBS remoto se puede vigilar desde PVE** en *Backup → Proxmox Backup Server*. Al iniciar sesión con un usuario y una contraseña de PBS se crea un token de API de solo lectura para el Monitor y solo se guarda ese token, o se puede introducir un token existente. La huella del certificado se comprueba antes de enviar ninguna credencial. Los servidores PBS configurados como almacenamiento se ofrecen con su dirección y su huella ya rellenadas, y un PBS instalado en el mismo host se lee directamente, sin token. + +--- + +## 💾 Trabajos de backup de VM y CT gestionados desde ProxMenux ([PR #421](https://github.com/MacRimi/ProxMenux/pull/421), aportado por [@MattiaC46](https://github.com/MattiaC46)) + +- **La pestaña Backup del Monitor tiene dos vistas, «Host» y «VM y LXC».** La segunda, y el menú Backup y restauración del host, listan los trabajos programados de Proxmox, los mismos que Datacenter → Backup, y los crean, editan, habilitan, deshabilitan, eliminan y ejecutan a través de la API de Proxmox. +- **Ejecutar ahora inicia una tarea de Proxmox en cada nodo que tiene un guest del trabajo.** Cambiar un trabajo requiere una sesión de administrador; un token de API de solo lectura solo puede listarlos. + +--- + +## 💾 Backups y restauración + +- **Los backups de VM y CT se pueden seleccionar y eliminar desde el Monitor** ([PR #461](https://github.com/MacRimi/ProxMenux/pull/461), aportado por [@jcastro](https://github.com/jcastro)): hasta 20 a la vez, tras una confirmación, a través del propio Proxmox. Un backup protegido no se puede seleccionar, y un lote que incluya uno se rechaza entero. +- **La retención de cada almacenamiento de backups se edita desde el Monitor** ([PR #462](https://github.com/MacRimi/ProxMenux/pull/462), aportado por [@jcastro](https://github.com/jcastro)): conservar todos, un número de backups por periodo o el valor predeterminado de Proxmox. Al guardar se cambia la política en Proxmox y no se elimina ningún backup. +- **Las notificaciones de backup dicen cómo terminó el trabajo** ([PR #406](https://github.com/MacRimi/ProxMenux/pull/406), aportado por [@f3rs3n](https://github.com/f3rs3n)): limpio, con advertencias, fallido o sin confirmar, indicando el guest que falló y manteniendo legibles los diagnósticos largos. El resumen de recuperación cuenta cada guest una sola vez ([PR #356](https://github.com/MacRimi/ProxMenux/pull/356)). +- **Un backup iniciado desde el Monitor se ejecuta en su propia unidad de systemd** y continúa pase lo que pase con el Monitor. +- **El backup del host funciona en un host con SELinux** ([#398](https://github.com/MacRimi/ProxMenux/issues/398), reportado por [@sbaghdadi](https://github.com/sbaghdadi)) y guarda todo el estado de ProxMenux en el host bajo `/var/lib/proxmenux`. +- **Se notifica cada ejecución del backup del host** ([#425](https://github.com/MacRimi/ProxMenux/discussions/425), reportado por @sahartford): cada ejecución se envía al terminar, como un backup de VM o CT, también en un canal con el resumen diario activado y con HTTPS activado en el Monitor. +- **Un repositorio Borg remoto se autentica con la clave guardada en su destino** ([#357](https://github.com/MacRimi/ProxMenux/issues/357), reportado por [@bartclone](https://github.com/bartclone)), ofreciendo solo esa clave, y conserva su ruta remota tal como se escribió. +- **La lista de backups del host muestra los backups de este nodo en un clúster** ([#445](https://github.com/MacRimi/ProxMenux/issues/445), solicitado por [@Joshua1264](https://github.com/Joshua1264)): una opción Este nodo / Todos los nodos, con un recuento que la acompaña, separa los backups de otros nodos guardados en un PBS o un repositorio Borg compartidos. +- **Un backup local del host hecho por un trabajo que ya no existe se marca como Trabajo anterior** ([#446](https://github.com/MacRimi/ProxMenux/issues/446), solicitado por [@Joshua1264](https://github.com/Joshua1264)), a partir del trabajo y el nodo registrados con el backup. Se conserva hasta que se elimina, y al eliminarlo se eliminan también su archivo de metadatos y su log. +- **Una restauración del host solo se programa cuando está completa** ([PR #341](https://github.com/MacRimi/ProxMenux/pull/341), aportado por [@f3rs3n](https://github.com/f3rs3n)): cada restauración se prepara en su propio directorio y pasa a ser la pendiente solo cuando todos los pasos han tenido éxito. + +### 🔐 Restauración del certificado web del nodo ([#333](https://github.com/MacRimi/ProxMenux/issues/333), reportado por [@tropicaljoe](https://github.com/tropicaljoe)) + +- Los backups del host ya conservaban el par de certificados local del nodo; la restauración posterior al arranque lo asigna ahora del nodo de origen al actual, en lugar de dejar Proxmox con su certificado generado. +- Antes de instalarlo, ProxMenux valida el certificado, rechaza las claves privadas cifradas o no válidas y confirma que ambas claves públicas coinciden; un par incompleto deja intacto el certificado actual y añade una advertencia al resultado de la restauración. La instalación se hace mediante `pvenode cert set`, seguida de la verificación de la huella y del servicio, con vuelta al certificado anterior si esa verificación falla. + +--- + +## 🟢 Instalador de NVIDIA y passthrough de GPU + +- **El NVIDIA Container Toolkit se instala con el driver.** Es lo que permite que un contenedor vea la GPU del host. También se puede reinstalar por separado, y queda registrado en la vista Cambios de Audit & Report. +- **El selector de versiones ofrece los drivers que admiten la GPU y pueden compilarse para el kernel en uso**, y se abre en unos cinco segundos. +- **Se comprueba que una versión compila antes de eliminar el driver que funciona.** Una que no compila vuelve a la lista con el driver actual intacto, y la respuesta se recuerda para ese kernel. +- **El resultado indica lo que hace el driver**: un driver que se instala pero no controla la GPU se registra como fallido, con el motivo que da el propio kernel. +- **Añadir una GPU NVIDIA a una VM vuelve a escribir su regla VFIO cuando falta** (reportado por kn): un host al que se le eliminó la regla a mano la recupera, y se le pide reiniciar, en lugar de darlo por ya configurado. +- **Cambiar el modo de una GPU no afecta a sus vecinos** ([#435](https://github.com/MacRimi/ProxMenux/issues/435), reportado por [@LucasR3C3](https://github.com/LucasR3C3)). Una GPU es su propia función, el audio de su slot y los dispositivos de su grupo IOMMU. En una APU AMD, un controlador USB que comparte el slot de los gráficos integrados se queda en la VM a la que se pasó cuando la GPU vuelve al modo LXC o pasa a otra VM. +- **Los contenedores creados a partir de una imagen OCI quedan fuera de los menús LXC que instalan dentro de un contenedor**: propagación del driver, Añadir GPU a un LXC, Coral, discos y recursos compartidos. Sus dispositivos y rutas se cambian desde OCI manager Apps. + +--- + +## 💽 Discos + +- **Las observaciones de un disco pertenecen a su número de serie.** Un disco sustituido empieza con un historial limpio, el historial sigue a un disco a otro nombre de dispositivo y es permanente: la misma observación vista de nuevo suma a su recuento. +- **Los discos mecánicos pueden entrar en reposo** ([#347](https://github.com/MacRimi/ProxMenux/issues/347), reportado por [@spectante](https://github.com/spectante)). Un disco rotacional que no se está usando no se lee en absoluto, la vista de almacenamiento muestra *Inactivo* o *Excluido* junto a *En reposo*, y *Ajustes → Exclusiones de discos* deja un disco fuera de todas las lecturas programadas. +- **Las comprobaciones de LVM no tocan los discos excluidos ni los inactivos** ([PR #464](https://github.com/MacRimi/ProxMenux/pull/464), aportado por [@jcastro](https://github.com/jcastro)): mientras un disco está excluido, inactivo o dormido, el análisis lee solo los volúmenes físicos LVM de los demás discos, y sus propias lecturas no hacen que un disco se siga contando como ocupado. +- **El formateo de discos conserva lo que promete conservar** ([PR #339](https://github.com/MacRimi/ProxMenux/pull/339), [PR #340](https://github.com/MacRimi/ProxMenux/pull/340), aportado por [@f3rs3n](https://github.com/f3rs3n)): eliminar firmas deja intacta la tabla de particiones, y el disco del sistema se reconoce a través de LVM, RAID o ZFS apilados. +- **El resumen de almacenamiento distingue las temperaturas de disco no disponibles y matiza el estado SMART** ([PR #365](https://github.com/MacRimi/ProxMenux/pull/365), [PR #372](https://github.com/MacRimi/ProxMenux/pull/372), aportado por [@f3rs3n](https://github.com/f3rs3n)). +- **Un aviso de smartd sobre su propia configuración, o de fstrim en un disco que no admite discard, no se notifica como un fallo.** +- **Los puntos de montaje de volúmenes en almacenamiento de bloques muestran su uso** en la pestaña Puntos de montaje. + +--- + +## 🔔 Notificaciones + +- **Notificaciones en el idioma de quien las lee** ([PR #348](https://github.com/MacRimi/ProxMenux/pull/348), aportado por [@Vaso73](https://github.com/Vaso73)): los títulos, los cuerpos, las etiquetas de canal y los resúmenes diarios siguen el idioma elegido para las notificaciones, los mensajes largos de Telegram se dividen sin romper su formato y la redacción se revisó a mano. +- **Las alertas de temperatura y de salud incluyen sus valores** ([PR #408](https://github.com/MacRimi/ProxMenux/pull/408), aportado por [@f3rs3n](https://github.com/f3rs3n)): la lectura, el umbral y la categoría en el idioma de quien las lee. +- **Una notificación de evento del clúster dice lo que ha pasado** ([PR #403](https://github.com/MacRimi/ProxMenux/pull/403), aportado por [@f3rs3n](https://github.com/f3rs3n)), con el mensaje original de Proxmox. +- **Un nodo del clúster que cae o vuelve se notifica por su nombre** ([PR #444](https://github.com/MacRimi/ProxMenux/pull/444), aportado por [@fklnc94](https://github.com/fklnc94)), a partir de los cambios de pertenencia que corosync informa en los demás nodos. +- **Un problema de salud que vuelve se notifica de nuevo** ([PR #443](https://github.com/MacRimi/ProxMenux/pull/443), aportado por [@f3rs3n](https://github.com/f3rs3n)): una condición que se resolvió y reaparece es un episodio nuevo, que aparece como activo y se notifica una vez. Los descartes, también los permanentes, se mantienen tal como se establecieron. +- **Apprise explica cómo configurar Slack y Matrix** ([PR #463](https://github.com/MacRimi/ProxMenux/pull/463), aportado por [@jcastro](https://github.com/jcastro)), con direcciones de ejemplo y su documentación, y una recuperación se envía como éxito, en verde, como en los demás canales. +- **Los ajustes de notificaciones muestran el historial de entregas** ([#425](https://github.com/MacRimi/ProxMenux/discussions/425), reportado por @sahartford): las últimas 20 notificaciones con el resultado de cada envío, el error cuando alguno falló y cada ejecución del resumen diario, también los días sin nada que enviar. +- **Las notificaciones de Proxmox llegan con HTTPS activado en el Monitor**, a través de un listener local que solo responde al webhook de notificaciones. +- **El Monitor no toca `/etc/pve` mientras Proxmox reinicia su servicio de clúster** ([#427](https://github.com/MacRimi/ProxMenux/issues/427), reportado por [@shtefko](https://github.com/shtefko)). Los ajustes de notificaciones solo se escriben mientras `/etc/pve` está montado y solo cuando cambian, sus copias se guardan con ProxMenux, y al desinstalar el Monitor se elimina su destino de Proxmox. +- **Un patrón de log solo se notifica como persistente mientras sigue repitiéndose** ([#386](https://github.com/MacRimi/ProxMenux/issues/386), reportado por [@Joshua1264](https://github.com/Joshua1264)). +- **Una alerta descartada de forma permanente sigue descartada** (reportado por Maragath): mientras dure la condición, cuando se recupera y vuelve, y al guardar los ajustes de supresión, hasta que se vuelve a activar desde Supresiones activas. +- **Los almacenamientos excluidos quedan fuera de la alerta de capacidad** (reportado por @christiannieveslauz), y un almacenamiento que se está llenando indica cuánto está ocupado. +- **Un bridge privado sin nada conectado no se notifica como caído.** + +### 📦 Notificaciones agrupadas de actualizaciones de aplicaciones + +- **Una comprobación automática produce ahora una notificación completa en lugar de un mensaje por aplicación.** Las actualizaciones pendientes se agrupan por LXC y conservan el nombre de la aplicación y las versiones instalada y disponible, así que una bandeja de entrada más tranquila no te cuesta el detalle. +- Un análisis con una sola aplicación pendiente mantiene la notificación individual, y las comprobaciones explícitas que haces tú siguen siendo individuales. El ajuste existente **Actualización de aplicación disponible** controla ambas formas, y se siguen respetando las exclusiones por aplicación. + +### 🧭 Notificaciones de salud de guests según el nodo propietario en el clúster + +- **La capacidad del rootfs de los LXC y de los sistemas de archivos de las VM la evalúa solo el nodo que es propietario del guest en ese momento**, así que varias instancias del Monitor en un clúster ya no registran ni notifican la misma condición por separado. Las actualizaciones de disco del Guest Agent siguen el mismo límite. +- Un guest que se mueve entre nodos se retira en silencio en el anterior. Una migración no se notifica como una recuperación; el nuevo propietario es responsable de la condición actual. + +### ⚙️ Diagnósticos del kernel atribuibles + +- **Un diagnóstico del kernel se notifica por la línea que lo explica.** Las advertencias del kernel, las tareas bloqueadas, los lockups, los fallos de protección, los oops y los diagnósticos de seguridad de memoria indican ahora el tipo de diagnóstico, el proceso y el componente cuando están presentes, e incluyen el fragmento del journal que los rodea — en lugar de un simple marcador `Call Trace:` que no identifica nada y podía contar un incidente dos veces. +- **Las advertencias del kernel y las trazas de diagnóstico tienen su propio interruptor por canal**, y los resúmenes ocultos de ráfagas heredan la categoría del evento que resumen, así que silenciar un evento silencia también su `+N more`. + +### 📮 Entrega de notificaciones + +- **Los eventos retenidos durante las Horas tranquilas se liberan cuando se cierra la franja**, y la liberación se registra como cualquier otra entrega, así que aparece en el historial y en los contadores en lugar de llegar al canal sin dejar rastro. El búfer solo se vacía cuando el canal confirma la entrega, así que una franja nocturna nunca se descarta por un resumen que nadie recibió. +- El resumen de 24 horas se compone y se entrega de la misma forma. +- **Las actualizaciones pendientes de optimizaciones de ProxMenux se vuelven a notificar al reiniciar el Monitor** junto con el resto de informes de actualización, así que un host con optimizaciones que nunca aplicó vuelve a mostrarlas tras una actualización o un reinicio. Cada versión se sigue anunciando una sola vez por vida del servicio. + +--- + +## 🔐 Los tokens de API de solo lectura solo leen (reportado por [@f3rs3n](https://github.com/f3rs3n)) + +- **Toda acción de la API que cambia algo requiere un token de administrador completo**: controlar guests, iniciar backups y pruebas SMART, ejecutar scripts, editar el firewall, Fail2Ban o SSL, y gestionar la 2FA y los tokens de API. Un token de solo lectura sigue leyendo paneles y métricas, y la sesión de la interfaz funciona como antes. +- **Leer los datos de salud requiere un token una vez configurada la autenticación**, y cada ruta del Monitor de Salud que cambia algo requiere un token de administrador completo. `/api/system-info` sigue siendo pública para sondas externas como Uptime Kuma. +- **Abrir una terminal del Monitor y desactivar la autenticación requieren un token de administrador completo.** Tanto la ruta del ticket de terminal como el endpoint que desactiva la autenticación están protegidos por la misma comprobación de ámbito de administrador que usan las demás rutas privilegiadas, y el WebSocket de la terminal sigue aceptando solo un ticket nuevo de un solo uso — que ahora se emite exclusivamente a quien llama con permisos de administrador completo. +- **Leer en claro una credencial guardada también requiere un token de administrador completo.** La página de ajustes enmascara todos los secretos guardados, y la única ruta que devuelve un valor — el botón del ojo junto a un campo — está protegida de la misma forma. Un token de solo lectura emitido para una integración de monitorización no llega a ninguno de ellos: el token de GitHub, el token del bot de Telegram, la contraseña del correo, las claves de los proveedores de IA, el webhook de Discord. Un inicio de sesión lleva implícito el administrador completo, así que el botón se comporta como antes para quien usa la interfaz. +- **El diálogo de tokens de API pregunta ahora qué ámbito crear.** Solo lectura es el valor predeterminado y basta para paneles y métricas; administrador completo está para las integraciones que manejan la Actions API, y el diálogo dice claramente a qué puede llegar cada uno. +- **La tarjeta API de GitHub indica el token que necesita**: ese token solo sirve para aumentar el límite anónimo de peticiones al comprobar las versiones upstream de las aplicaciones registradas, y cada llamada hecha con él lee datos públicos, así que basta con un token fine-grained con acceso de solo lectura a repositorios públicos y sin permisos de cuenta. + +--- + +## 🐳 Aplicaciones Docker — una identidad, un estado de actualización + +- **Las aplicaciones que se ejecutan dentro de Docker se pueden registrar en la pestaña App** con su propio nombre, logotipo, enlaces web y versión instalada, mientras sus actualizaciones siguen ligadas a la imagen Docker. Ya no aparecen dos veces en Actualizaciones: Portainer, Arcane y sus equivalentes conservan su entrada en App, y la fila de la imagen lleva las versiones. +- **Las versiones disponibles se pueden leer de los metadatos de la imagen** en Docker Hub, GHCR y otros registros compatibles cuando la imagen publica una etiqueta de versión utilizable — que describe lo que instalaría la etiqueta seleccionada, no necesariamente la última release upstream. La detección por digest sigue disponible cuando no se puede leer ninguna etiqueta. +- **Las versiones instaladas siguen la imagen que usa realmente el contenedor**, también tras una recreación o cuando una imagen descargada todavía no se ha aplicado, y los alias de imagen se emparejan con la referencia configurada de la carga de trabajo. +- Los metadatos de imagen se resuelven en segundo plano sin retrasar el inventario, y App y Actualizaciones comparten el resultado. + +Gracias a [@byGarcia](https://github.com/byGarcia) por la implementación, los detectores verificados y las pruebas detalladas en [PR #337](https://github.com/MacRimi/ProxMenux/pull/337) y [PR #338](https://github.com/MacRimi/ProxMenux/pull/338), a partir de la colaboración en la [discusión #206](https://github.com/MacRimi/ProxMenux/discussions/206). + +### Enlaces web de Docker en la pestaña App + +- **El inventario de VM y LXC sigue disponible mientras se cargan los datos de Docker.** Un inventario de Docker puede existir antes de que se cargue su registro opcional de aplicaciones, y ese estado es ahora una lista de aplicaciones vacía y no una lista de guests vacía. +- **Las cargas de trabajo Docker detenidas conservan sus enlaces registrables.** El descubrimiento lee la configuración persistente de puertos publicados de un contenedor cuando el mapeo en vivo está vacío, así que un servicio Compose detenido como HandBrake, MakeMKV o MKVToolNix conserva su nombre detectado y su puerto del host listos para registrarse. +- **Los LXC con Docker conservan todos los candidatos útiles**: los mapeos con nombre conservan su aplicación, su icono y sus puertos publicados, mientras que los puertos en escucha que no pertenecen a ningún mapeo — contenedores con red del host, servicios nativos en el mismo LXC — siguen disponibles como sugerencias de un clic, sin duplicar un puerto que ya cubre un mapeo con nombre. +- **Un enlace detectado que se añade se queda añadido.** La inserción del enlace y la respuesta diferida de la categoría del catálogo actualizan el editor por separado, así que la consulta de categoría ya no puede restaurar un estado anterior a la inserción. +- El descubrimiento sigue siendo solo una sugerencia: tú eliges qué puertos publicados exponen realmente una interfaz web y guardas solo esos. + +--- + +## 🖥 ProxMenux Monitor + +- **El nombre del nodo en la cabecera abre otros Monitores**: los nodos del clúster, los servidores PBS configurados y los nodos añadidos a mano, cada uno con su estado. Cada Monitor mantiene su propio inicio de sesión. Al llegar desde otro, se ofrece, en un solo diálogo, añadirlo junto con los Monitores que enlaza, así que tras visitar cada nodo una vez todos los Monitores pueden llegar a todos. Un Proxmox Backup Server sin Monitor se muestra como su interfaz web, un PBS instalado en el propio nodo se abre en la dirección en uso, y el formulario de nodos sigue el estilo de modo de edición de los demás formularios. +- **La terminal de un contenedor en el que no se puede entrar dice por qué** y se cierra: una imagen que no tiene shell, como la de PeaNUT, remite a su pestaña Registros, y un contenedor detenido muestra el motivo que da Proxmox. +- **Las terminales web envían Ctrl+D desde su menú Ctrl**, lo que termina un texto pegado en la terminal, como un archivo Compose o un oci-compose en OCI manager Apps, también desde un móvil o una tableta. Un solo Ctrl+D termina el pegado, también justo después de su última línea. +- **Una VM o un LXC editados desde Proxmox muestran sus ajustes actuales** la siguiente vez que se abre su modal: inicio al arrancar, etiquetas, núcleos, memoria, red y puntos de montaje. +- **Un LXC cambiado fuera del Monitor muestra sus datos actuales** ([PR #441](https://github.com/MacRimi/ProxMenux/pull/441), aportado por [@Vaso73](https://github.com/Vaso73)): una dirección DHCP nueva, un ajuste editado en Proxmox mientras su modal está abierto y el sistema operativo de un contenedor restaurado o reinstalado. La pestaña Actualizaciones marca como desactualizado un resultado de hace más de 48 horas, y la tarjeta sigue mostrando el número de actualizaciones pendientes. +- **Actualizar un LXC detenido conserva su resultado** ([PR #447](https://github.com/MacRimi/ProxMenux/pull/447), aportado por [@Vaso73](https://github.com/Vaso73)): sus paquetes y aplicaciones se leen antes de volver a detenerlo, así que la pestaña Actualizaciones muestra lo que se instaló y lo que sigue pendiente. Una ejecución que no llegó a arrancar el contenedor conserva el resultado anterior. +- **Comprobar e instalar paquetes de un LXC son pasos separados** ([PR #448](https://github.com/MacRimi/ProxMenux/pull/448), aportado por [@Vaso73](https://github.com/Vaso73)): Comprobar paquetes del sistema actualiza los índices de paquetes de un contenedor en marcha y cuenta lo que está pendiente sin instalar nada, e instalar requiere una comprobación correcta reciente. A un contenedor detenido se le pide arrancarlo primero, y conserva su último resultado con su fecha. +- **Una actualización programada deja detenido un LXC detenido** ([PR #456](https://github.com/MacRimi/ProxMenux/pull/456), aportado por [@Vaso73](https://github.com/Vaso73)): la ejecución se omite y la pestaña Actualizaciones indica el motivo, mientras el contenedor sigue detenido y después. Una actualización iniciada a mano sigue arrancándolo. +- **Buscar aplicaciones reconoce las aplicaciones instaladas a mano en un LXC** ([PR #492](https://github.com/MacRimi/ProxMenux/pull/492), aportado por [@Vaso73](https://github.com/Vaso73)): los servicios de systemd y OpenRC, los procesos y los puertos en escucha de programas en `/opt`, `/srv`, `/usr/local` o un directorio personal se proponen con su evidencia y su versión, y se registran tras confirmarlos en el editor. +- **JDownloader se abre por HTTPS y Prowlarr muestra su dirección de primer arranque** ([PR #506](https://github.com/MacRimi/ProxMenux/pull/506), aportado por [@Vaso73](https://github.com/Vaso73)), tal como los sirven sus imágenes. +- **Los backups en modo snapshot de las aplicaciones OCI funcionan en ZFS** ([PR #514](https://github.com/MacRimi/ProxMenux/pull/514), aportado por [@jcastro](https://github.com/jcastro)): los archivos que trae una imagen donde se monta un volumen de datos se guardan aparte dentro del contenedor, para que ZFS pueda montar cada snapshot durante un vzdump. Se conservan, nunca se eliminan, también tras una actualización o una recreación. +- **Las aplicaciones OCI arrancan tras una restauración directa de Proxmox** ([PR #507](https://github.com/MacRimi/ProxMenux/pull/507), aportado por [@Vaso73](https://github.com/Vaso73)): el `lost+found` vacío que crea una restauración en cada volumen de datos se elimina antes de que arranque la aplicación, también cuando ProxMenux recupera un contenedor en marcha. +- **El menú OCI muestra qué aplicaciones tienen una actualización y actualiza las seleccionadas** ([PR #504](https://github.com/MacRimi/ProxMenux/pull/504), aportado por [@jcastro](https://github.com/jcastro)): «Buscar actualizaciones» consulta a ProxMenux Monitor, que comprueba todas las aplicaciones a la vez y guarda el resultado que muestra la pestaña App; cada actualización seleccionada pasa por la revisión, el backup y la recuperación habituales, una tras otra, con el número de cada una en pantalla mientras se comprueba su contenedor. +- **El editor de App encuentra el icono real de una aplicación local** ([PR #503](https://github.com/MacRimi/ProxMenux/pull/503), aportado por [@Vaso73](https://github.com/Vaso73)): «Buscar icono» lee el puerto web elegido dentro del contenedor en marcha, desde la propia red del contenedor, y guarda una copia saneada que se sigue mostrando mientras el contenedor está detenido. La imagen la decodifica un proceso sin privilegios. +- **Buscar aplicaciones también muestra los contenedores Docker con puertos publicados** ([PR #505](https://github.com/MacRimi/ProxMenux/pull/505), aportado por [@Vaso73](https://github.com/Vaso73)): cada uno se puede registrar con su dirección web y su esquema ya rellenados, y registrarlo nunca configura actualizaciones. +- **Buscar aplicaciones en un LXC detenido dice por qué no puede buscar** ([PR #501](https://github.com/MacRimi/ProxMenux/pull/501), aportado por [@Vaso73](https://github.com/Vaso73)): la búsqueda necesita el contenedor en marcha, y se conservan las tarjetas y la evidencia encontradas antes. +- **Los botones de encendido de las VM y los LXC terminan cuando termina Proxmox** ([PR #449](https://github.com/MacRimi/ProxMenux/pull/449), aportado por [@Vaso73](https://github.com/Vaso73)): iniciar, apagar, reiniciar y parar siguen su tarea de Proxmox, también en los guests gestionados por HA, y el guest queda libre para otras acciones cuando termina. +- **La búsqueda de VM y LXC encuentra un contenedor por cualquiera de sus direcciones** ([PR #385](https://github.com/MacRimi/ProxMenux/pull/385), aportado por [@Vaso73](https://github.com/Vaso73)), y la tarjeta muestra cuántas más tiene. +- **Las actualizaciones disponibles en la vista general siguen al host** ([#359](https://github.com/MacRimi/ProxMenux/issues/359), reportado por [@ash34](https://github.com/ash34)), se hayan instalado los paquetes de la forma que sea. +- **El log de actualización de Proxmox dice qué se actualizó** ([#358](https://github.com/MacRimi/ProxMenux/issues/358), reportado por [@ash34](https://github.com/ash34)), y la lista de paquetes se muestra antes de aceptar la actualización. +- **Un aviso de montaje remoto descartado deja de contar en el estado de salud** ([PR #453](https://github.com/MacRimi/ProxMenux/pull/453), aportado por [@wolly6973](https://github.com/wolly6973)): un montaje NFS/CIFS obsoleto o de solo lectura, en el host o dentro de un LXC, se puede descartar desde su fila en Salud, y el estado general vuelve a ser correcto. +- **Los contenedores Docker anclados por digest se mantienen en el inventario** ([#206](https://github.com/MacRimi/ProxMenux/discussions/206), reportado por [@byGarcia](https://github.com/byGarcia)), marcados como *Anclada a un digest* y sin que se les ofrezca nunca una actualización. +- **LazyLibrarian y PeaNUT se incorporan al catálogo de aplicaciones LXC** (con [@pdafoto](https://github.com/pdafoto)); LazyLibrarian es la primera entrada con seguimiento por commit. +- **El nombre del nodo se lee sin esperar a la API de Proxmox** ([#438](https://github.com/MacRimi/ProxMenux/issues/438), reportado por [@sponger544](https://github.com/sponger544)), en el Monitor y en su comprobación de almacenamiento, así que a un host en el que `pvesh` responde despacio no se le pregunta en cada petición. +- **Secure Gateway muestra el mismo estado de actualización** en la página Seguridad y en la pestaña Actualizaciones de su contenedor. +- **Escribir un número en la terminal de un script mantiene la sesión abierta.** +- **El umbral RAM Crítico definido en Ajustes se aplica a la comprobación de RAM.** +- **`/api/health` informa de la versión instalada de ProxMenux**, y las métricas de disco de Prometheus se exportan en bytes, como indican sus nombres. +- **Un backup iniciado desde una VM o un LXC notifica según los ajustes de notificaciones**, igual que cualquier otro backup; su diálogo ya no tiene un menú de notificaciones propio. +- **Cada canal de notificaciones conserva su propia reescritura por IA**, y un correo detallado adjunta el mensaje original solo cuando la IA lo ha reescrito. + +### 🛠 Selección explícita del actualizador de aplicaciones (comentarios de [@SystemIdleProcess](https://github.com/MacRimi/ProxMenux/discussions/306)) + +- **Registrar una aplicación ya no activa un actualizador por ti.** Elige y guarda **Helper-Scripts** o **Comando personalizado** antes de ejecutar una actualización; el seguimiento de versiones es independiente de esa elección. +- Cada aplicación tiene su propia elección, también en los LXC con varias aplicaciones, y un comando personalizado sustituye al helper de esa aplicación en lugar de ejecutarse ambos. +- **Al editar se muestra el comando que se ejecutará realmente** — el lanzador detectado o tu comando personalizado guardado. Modificar un lanzador del helper cambia a Comando personalizado, para que tus cambios se usen en las ejecuciones manuales, en bloque y programadas; dejarlo sin tocar mantiene el método oficial. +- **Una descarga del actualizador fallida o vacía se detiene antes de la ejecución**, así que un comando de shell vacío ya no puede notificarse como una actualización correcta. +- Los diálogos de información explican ambas opciones, enlazan a la documentación y al código fuente de cada aplicación e incluyen ejemplos para adaptar — que nunca rellenan ni ejecutan nada por sí mismos. + +### 🔍 Lista de VM y LXC — búsqueda instantánea y filtro de actualizaciones ([PR #334](https://github.com/MacRimi/ProxMenux/pull/334), aportado por [@Vaso73](https://github.com/Vaso73)) + +- **Un cuadro de búsqueda que coincide con el nombre, el ID, el tipo de guest, las etiquetas, la nota de PVE, la dirección IP y los nombres de las aplicaciones registradas.** Varios términos acotan juntos y la coincidencia ignora los acentos, así que `nuria` encuentra `Núria` y `virtualny` encuentra `virtuálny`. +- **Un filtro Actualizaciones** aísla los LXC con trabajo pendiente — los paquetes del sistema operativo, las aplicaciones registradas y las imágenes Docker cuentan para su insignia — y su estado se recuerda por dispositivo. +- **La búsqueda por tipo de guest funciona en todos los idiomas del Monitor**: `contenedor`, `conteneur`, `contenitore`, `contêiner`, `kontajner` y `Container` encuentran todos los LXC del nodo. + +### 🗂 Puntos de montaje de LXC — destinos escritos con barra final ([PR #336](https://github.com/MacRimi/ProxMenux/pull/336), aportado por [@Vaso73](https://github.com/Vaso73)) + +- **Un bind mount configurado como `mp=/path/` se reconoce como montado.** Proxmox acepta la barra final mientras que la tabla de montajes del contenedor informa de la ruta sin ella; ahora ambas formas de escribirla corresponden al mismo punto de montaje. La ruta se muestra en pantalla exactamente como está escrita en la configuración del contenedor. +- La misma coincidencia se aplica a la detección ad hoc, así que un montaje configurado ya no aparece como uno no gestionado creado dentro del contenedor. + +### 🔎 Detección de versiones de aplicaciones LXC — detectores verificados en ejecución ([PR #332](https://github.com/MacRimi/ProxMenux/pull/332), aportado por [@Vaso73](https://github.com/Vaso73)) + +- **Un conjunto de sustituciones integrado viaja dentro del Monitor** con detectores probados en contenedores reales, y tiene prioridad sobre el catálogo remoto. A propósito no se descarga en remoto, para que un Monitor instalado no pueda traer una entrada más antigua que resucite un marcador obsoleto sobre un detector ya verificado. +- **Los marcadores heredados del helper pasan a ser un fallback** en lugar de desaparecer, así que los contenedores instalados con estructuras antiguas conservan una fuente de versión válida, mientras que las instalaciones nuevas leen el binario, el paquete o el archivo de la propia aplicación. +- **Traefik** es la primera aplicación incorporada al nuevo conjunto, y **Changedetection.io** se incorpora al catálogo en este ciclo (sugerido por [@SystemIdleProcess](https://github.com/SystemIdleProcess) en la [discusión #306](https://github.com/MacRimi/ProxMenux/discussions/306)). +- Una actualización correcta con comando personalizado marca la versión informada como no verificada, así que la actualización de datos que sigue vuelve a leer la versión real en lugar de reafirmar la antigua. + +### 📦 Actualizaciones de paquetes de LXC legibles ([#342](https://github.com/MacRimi/ProxMenux/issues/342), reportado por [@ash34](https://github.com/ash34)) + +- **Los nombres de paquete ya no se sacrifican por las largas cadenas de versión de Debian.** Cada paquete pendiente conserva su nombre completo en su propia línea, seguido de las versiones instalada y disponible en columnas separadas y del mismo tamaño. +- Los nombres largos y los identificadores de versión se ajustan dentro del panel en lugar de cortarse o desbordarse, y el marcador de seguridad sigue junto a su paquete. + +### 🔐 Cambio de contraseña con autenticación de dos factores + +- **Cambiar la contraseña del Monitor funciona con y sin 2FA activada.** Con la autenticación de dos factores activada, el formulario pide el código actual del autenticador o un código de respaldo y lo envía con el cambio. Los campos que faltan o no son válidos se rechazan como errores de validación. +- Una pestaña del navegador ya abierta puede completar igualmente un cambio de contraseña después de actualizar el Monitor. + +### 🐍 Runtime de Python portable para HTTPS y WebSockets ([#331](https://github.com/MacRimi/ProxMenux/issues/331), reportado por [@f3rs3n](https://github.com/f3rs3n)) + +- La AppImage del Monitor lleva runtimes aislados de gevent tanto para CPython 3.11 (Proxmox VE 8) como para CPython 3.13 (Proxmox VE 9), y `AppRun` selecciona el árbol correspondiente a partir del intérprete del host antes de arrancar Flask — con lo que se recupera el servidor HTTPS/WSS de gevent previsto en todas las generaciones de Proxmox VE compatibles. +- Las dependencias nativas se fijan y se empaquetan de forma determinista, y cada compilación importa la pila integrada con intérpretes 3.11 y 3.13 reales antes de publicarse. + +### 📊 Métricas históricas compartidas en hosts más lentos (reportado por Rafael Fernández Díez) + +- Las gráficas de CPU, memoria y red comparten una sola consulta en curso por intervalo de tiempo, con la vista predeterminada de 24 horas precargada y un presupuesto limitado por consulta. +- Un fallo temporal conserva la última instantánea válida con su hora de obtención y un aviso traducido de datos desactualizados, y las gráficas se recuperan solas sin sustituir un intervalo más reciente por una respuesta más antigua. + +### 🔄 Versiones de aplicaciones coherentes entre App y Actualizaciones (reportado por Nicolas Ortuzar) + +- Las aplicaciones LXC registradas usan una única instantánea compartida y versionada en archivo para la pestaña App, Actualizaciones y la caché del modal, así que la pestaña App ya no puede mostrar una versión disponible o una fecha de comprobación más antigua que la notificación que acabas de recibir. +- Las tarjetas de App abiertas reciben los cambios de estado de versión a través del flujo de datos existente, sin nuevos sondeos, y una actualización en segundo plano no toca los campos del editor sin guardar. + +--- + +## 📦 Instalador, actualizaciones y post-instalación + +- **El instalador muestra sus pasos, no la salida de apt**, y un host sin suscripción se instala sin errores de apt en pantalla. Las declaraciones de repositorio duplicadas se comentan. +- **Las comprobaciones de dependencias conservan los repositorios de Proxmox configurados** ([PR #407](https://github.com/MacRimi/ProxMenux/pull/407), aportado por [@f3rs3n](https://github.com/f3rs3n)): el cambio a no-subscription se ofrece, no se aplica, y queda registrado en Audit & Report. +- **pigz sigue funcionando tras una actualización de gzip** ([PR #414](https://github.com/MacRimi/ProxMenux/pull/414), [PR #415](https://github.com/MacRimi/ProxMenux/pull/415), aportado por [@pbr85](https://github.com/pbr85)): gzip se desvía en lugar de sustituirse, y se aplica su nivel de compresión. Los helpers del registro informan de una copia que no se puede escribir ([PR #417](https://github.com/MacRimi/ProxMenux/pull/417), [PR #418](https://github.com/MacRimi/ProxMenux/pull/418)). +- **La personalización de Bashrc nunca pierde lo que ya hay** ([PR #515](https://github.com/MacRimi/ProxMenux/pull/515), aportado por [@f3rs3n](https://github.com/f3rs3n)): una nueva ejecución deja como están los bloques incompletos o anidados, y el archivo nuevo sustituye al antiguo en un solo paso, así que una escritura fallida lo deja intacto. +- **Cada optimización se describe por lo que hace** ([PR #517](https://github.com/MacRimi/ProxMenux/pull/517), aportado por [@f3rs3n](https://github.com/f3rs3n)): Log2RAM, kexec, AMD, el guest agent y los límites de backup ya no prometen lo que sus funciones no ofrecen. +- **Una VM solo se crea a partir de una ISO completa** ([PR #458](https://github.com/MacRimi/ProxMenux/pull/458), aportado por [@f3rs3n](https://github.com/f3rs3n)): la imagen y los drivers VirtIO solo se publican una vez descargados por completo, una descarga fallida se detiene antes de crear la VM, y las imágenes de Debian 13, Rockstor y OpenMediaVault apuntan a sus fuentes actuales. +- **Los loaders de Synology vuelven a descargarse y desempaquetarse** ([PR #459](https://github.com/MacRimi/ProxMenux/pull/459), aportado por [@f3rs3n](https://github.com/f3rs3n)): el selector de M-shell toma la imagen de Alpine que proporciona ahora el autor, y una descarga o extracción fallida se detiene antes de crear la VM, conservando la imagen anterior. +- **FygoOS se incorpora a los sistemas NAS de Crear VM.** ProxMenux descarga el último instalador publicado en fygonas.com y prepara la VM con el mismo asistente que TrueNAS u OpenMediaVault: UEFI sin claves de Secure Boot, el plan de almacenamiento y la GPU opcional. +- **Los instaladores de VM Cloud-Init de Helper-Scripts vuelven a funcionar** ([PR #457](https://github.com/MacRimi/ProxMenux/pull/457), aportado por [@f3rs3n](https://github.com/f3rs3n)): Arch Linux, Debian y Ubuntu usan los scripts mantenidos, que preguntan ellos mismos por la versión, y una descarga fallida se detiene con un error antes de ejecutar nada. +- **Una actualización del sistema detenida por un repositorio de otra versión de Proxmox lo indica**: el mensaje dice qué repositorio de Proxmox VE o Ceph es de otra suite de Debian, en qué archivo, y que se desactiva en Node > Updates > Repositories. +- **La actualización de PVE 8 → 9 se detiene cuando el plan eliminaría `proxmox-ve`** ([PR #349](https://github.com/MacRimi/ProxMenux/pull/349), aportado por [@f3rs3n](https://github.com/f3rs3n)), y una actualización fallida de los índices se notifica como tal. +- **La post-instalación lee la memoria del host en cualquier idioma** ([#353](https://github.com/MacRimi/ProxMenux/issues/353), reportado por [@linux-fertxo](https://github.com/linux-fertxo)), y Log2RAM 1.6 calcula su tamaño a partir de ella. +- **Log2RAM 1.7 conserva los registros más recientes del journal** (reportado por [@f3rs3n](https://github.com/f3rs3n)). Su sincronización ya no deja un archivo antiguo de journal activo en disco, así que tras un reinicio journald empieza una secuencia nueva y elimina primero sus archivos más antiguos. A los hosts con Log2RAM se les ofrece la actualización; surte efecto a partir del siguiente reinicio. +- **Una actualización de varias optimizaciones muestra solo sus pasos**, sea cual sea el flujo de post-instalación del que procede cada una. +- **La post-instalación automática ajusta los bridges del firewall después de las reglas udev de systemd**, como hace la personalizable (aportado por [@Vaso73](https://github.com/Vaso73)). A los hosts con la optimización de red se les ofrece la actualización. +- **Un perfil de swap ZRAM en la post-instalación personalizable** ([PR #450](https://github.com/MacRimi/ProxMenux/pull/450), aportado por [@phyrexia](https://github.com/phyrexia)): un swap comprimido en RAM, de una décima parte de su tamaño, que se usa antes que el swap en disco. No toca ninguna otra configuración de ZRAM, se puede revertir desde Desinstalar optimizaciones, y la tarjeta Memoria del Monitor muestra su uso y su ratio de compresión. +- **Figurine 2.1.1 instala la compilación correspondiente al host** ([PR #465](https://github.com/MacRimi/ProxMenux/pull/465), aportado por [@jcastro](https://github.com/jcastro)): amd64, arm64 o ARMv7. A los hosts con Figurine se les ofrece la actualización. +- **Fastfetch conserva sus módulos del sistema en las versiones actuales** ([PR #355](https://github.com/MacRimi/ProxMenux/pull/355), aportado por [@f3rs3n](https://github.com/f3rs3n)). +- **La actualización de Proxmox VE 8 a 9 mantiene los guests en marcha mientras prepara el host** y se detiene si la actualización de Proxmox VE 8 falla o se cancela, antes de mover ningún repositorio a Trixie. Sin suscripción, el repositorio enterprise que pve-manager 9 añade durante la actualización se deja desactivado. La opción desatendida inicia la actualización, y el modo interactivo instala grub-efi-amd64 sin quedarse esperando una pregunta oculta. +- **Desinstalar ProxMenux no deja nada en su directorio de instalación**, y Mostrar información de versión cuenta como instalado el jq instalado desde GitHub. En español, el canal de publicación se llama «canal de versiones». +- **El menú de ayuda añade `qm unlock` y `pct unlock`**, y elegir la opción de usuarios de CT ya no vuelve a ejecutar el comando anterior. +- **Se traducen los textos de menú con un espacio al principio o al final**, como las preguntas y la opción de volver del menú de ayuda, en todos los scripts. +- **Los comandos de almacenamiento del menú de ayuda buscan las exportaciones de un servidor NFS** con un comando `pvesm scan nfs` válido, y `pveupgrade` se describe como la actualización interactiva de paquetes que inicia. +- **Desinstalar las optimizaciones de la post-instalación elimina los límites de archivos abiertos que estableció**, en systemd y en el perfil de root, y la comprobación de Log2RAM se ejecuta cada 10 minutos con prioridad baja en los dos modos de post-instalación. +- **Añadir una GPU a una VM muestra los dispositivos que comparten su grupo IOMMU** cuando incluye dispositivos de otro slot, que la VM recibe junto con la GPU, antes del resumen. +- **El instalador de NVIDIA conserva el estado del parche NVENC del driver instalado**, así que el menú de versiones reconoce un driver parcheado. +- **Las correcciones para AMD indican cuándo una CPU no las necesita** ([#519](https://github.com/MacRimi/ProxMenux/issues/519), reportado por [@rollingafull](https://github.com/rollingafull)): un procesador AMD que no es EPYC ni Ryzen se reconoce como AMD y se deja sin cambios, con un mensaje que lo indica. + +### 🧰 Migración segura de las personalizaciones históricas de Bashrc ([#328](https://github.com/MacRimi/ProxMenux/issues/328), reportado por [@f3rs3n](https://github.com/f3rs3n)) + +- La personalización de Bashrc migra el bloque exacto sin marcadores que escribían ProxMenux v1.1.3 y anteriores — y la variante histórica que escribía sus marcadores de forma literal — a un único bloque canónico, en lugar de añadir una segunda copia del prompt, de los ajustes del historial y de los alias. +- La detección exige la firma completa de ProxMenux y deja intactos los rangos de marcadores incompletos, así que nunca se eliminan personalizaciones ajenas. La ruta de prompt corta o completa elegida se mantiene tras la migración, y la sustitución atómica conserva los permisos y el propietario originales. + +### 🛡 Log2RAM se actualiza sin interrumpir el journal activo ([#327](https://github.com/MacRimi/ProxMenux/issues/327), reportado por [@f3rs3n](https://github.com/f3rs3n)) + +- Las instalaciones existentes usan una migración de ProxMenux en su sitio en lugar de volver a ejecutar el instalador upstream, cuya ruta de reinstalación elimina los dos directorios de respaldo y deja temporalmente journald sin su montaje activo de `/var/log`. +- La actualización conserva la configuración, el intervalo de sincronización, el montaje tmpfs activo y los servicios en marcha, y sustituye solo los archivos que gestiona ProxMenux. Las instalaciones nuevas aplazan la activación al reinicio que ya pide el flujo de post-instalación. + +### 🌀 Las preguntas de la post-instalación aparecen en su propia línea + +- Cada paso cierra su indicador de progreso antes de dibujar la siguiente pregunta o menú, así que una pregunta como la elección de instalar Log2RAM se muestra en una línea limpia en lugar de sobre un indicador que sigue girando. + +--- + +## 🌍 Idiomas y redacción + +- **Los mensajes dicen exactamente lo que ha pasado** (aportado por [@f3rs3n](https://github.com/f3rs3n)). Una revisión de los menús y de los mensajes de backup, almacenamiento, Samba, Rclone, programador y OCI para que cada uno sea una frase completa que se pueda traducir entera y que afirme solo lo que se ha verificado: [PR #363](https://github.com/MacRimi/ProxMenux/pull/363), [PR #364](https://github.com/MacRimi/ProxMenux/pull/364), [PR #367](https://github.com/MacRimi/ProxMenux/pull/367), [PR #368](https://github.com/MacRimi/ProxMenux/pull/368), [PR #369](https://github.com/MacRimi/ProxMenux/pull/369), [PR #370](https://github.com/MacRimi/ProxMenux/pull/370), [PR #371](https://github.com/MacRimi/ProxMenux/pull/371), [PR #375](https://github.com/MacRimi/ProxMenux/pull/375), [PR #384](https://github.com/MacRimi/ProxMenux/pull/384), [PR #389](https://github.com/MacRimi/ProxMenux/pull/389), [PR #390](https://github.com/MacRimi/ProxMenux/pull/390), [PR #397](https://github.com/MacRimi/ProxMenux/pull/397), [PR #400](https://github.com/MacRimi/ProxMenux/pull/400), [PR #401](https://github.com/MacRimi/ProxMenux/pull/401). +- **Descripciones de los comandos de terminal en todos los idiomas** ([PR #351](https://github.com/MacRimi/ProxMenux/pull/351), [PR #354](https://github.com/MacRimi/ProxMenux/pull/354), aportado por [@f3rs3n](https://github.com/f3rs3n); [PR #362](https://github.com/MacRimi/ProxMenux/pull/362), aportado por [@Vaso73](https://github.com/Vaso73)). +- **El italiano** ([PR #422](https://github.com/MacRimi/ProxMenux/pull/422), [PR #424](https://github.com/MacRimi/ProxMenux/pull/424), [PR #426](https://github.com/MacRimi/ProxMenux/pull/426), [PR #429](https://github.com/MacRimi/ProxMenux/pull/429), [PR #432](https://github.com/MacRimi/ProxMenux/pull/432), [PR #437](https://github.com/MacRimi/ProxMenux/pull/437), [PR #516](https://github.com/MacRimi/ProxMenux/pull/516), aportado por [@f3rs3n](https://github.com/f3rs3n)) **y el eslovaco** ([PR #391](https://github.com/MacRimi/ProxMenux/pull/391), [PR #396](https://github.com/MacRimi/ProxMenux/pull/396), [PR #430](https://github.com/MacRimi/ProxMenux/pull/430), [PR #431](https://github.com/MacRimi/ProxMenux/pull/431), [PR #436](https://github.com/MacRimi/ProxMenux/pull/436), aportado por [@Vaso73](https://github.com/Vaso73)) cubren todo lo nuevo de esta versión, escritos por personas que los hablan. +- **Eslovaco de todo lo nuevo, en el Monitor y en la terminal** ([PR #508](https://github.com/MacRimi/ProxMenux/pull/508), [PR #509](https://github.com/MacRimi/ProxMenux/pull/509), [PR #510](https://github.com/MacRimi/ProxMenux/pull/510), [PR #511](https://github.com/MacRimi/ProxMenux/pull/511), [PR #512](https://github.com/MacRimi/ProxMenux/pull/512), [PR #513](https://github.com/MacRimi/ProxMenux/pull/513), aportado por [@Vaso73](https://github.com/Vaso73)): conexiones y estado de PBS, nodos enlazados, backup del host, ZRAM y post-instalación de PBS, OCI manager, el editor de aplicaciones y el visor del código fuente de las optimizaciones. Sus errores se muestran en el idioma de quien los lee, una actualización o modificación OCI cancelada dice que se ha cancelado, y los mismos textos están completos en los otros seis idiomas. +- **El alemán del Monitor revisado por un hablante nativo** ([PR #455](https://github.com/MacRimi/ProxMenux/pull/455), aportado por [@detlefs](https://github.com/detlefs)): términos mal traducidos corregidos y redacción coherente en toda la interfaz. +- **Una traducción que existe nunca se sustituye.** Las compilaciones de traducciones solo escriben donde no hay nada, mantienen las listas como listas y protegen los nombres que no son palabras: `nouveau`, `initramfs`, `vfio-pci`, los nombres de las versiones de Debian y el resto. +- **El sueco se puede elegir al instalar ProxMenux, y todas las traducciones mantienen intactos los comandos y los nombres** ([PR #475](https://github.com/MacRimi/ProxMenux/pull/475), aportado por [@jcastro](https://github.com/jcastro)): una comprobación offline rechaza una traducción que cambie un comando, una ruta, una variable o un marcador de posición, en los menús y en la documentación, y los textos que lo hacían se corrigieron en todos los idiomas. +- **Etiquetas del Monitor corregidas en alemán, sueco, portugués y francés**: el campo Puerto, los botones de 2FA, el nombre de los códigos de respaldo y las palabras del portugués europeo para nombre de usuario, contraseña y forzar la parada. +- **El español del Monitor y de los menús sigue un mismo estilo**: se trata al lector de *tú*, los botones y las opciones de menú usan el infinitivo y el vocabulario es el de España (*pulsar*, *introducir*, *añadir*, la tecla *Intro*). Backup, snapshot, host, pool y slot se mantienen en inglés, y se corrigieron varios textos mal traducidos. La guía para traductores lo describe. +- **El español de los menús y del catálogo OCI se reescribió a mano**, y las 28 categorías del catálogo están escritas a mano en todos los idiomas. +- **Los conjuntos de pruebas offline cubren todos los idiomas incluidos** ([PR #380](https://github.com/MacRimi/ProxMenux/pull/380), [PR #381](https://github.com/MacRimi/ProxMenux/pull/381), [PR #383](https://github.com/MacRimi/ProxMenux/pull/383), aportado por [@f3rs3n](https://github.com/f3rs3n)). +- **El Monitor está completo en eslovaco**, Audit & Report incluido ([PR #329](https://github.com/MacRimi/ProxMenux/pull/329), [PR #330](https://github.com/MacRimi/ProxMenux/pull/330), [PR #344](https://github.com/MacRimi/ProxMenux/pull/344), [PR #345](https://github.com/MacRimi/ProxMenux/pull/345), aportado por [@Vaso73](https://github.com/Vaso73)). Las categorías de aplicaciones se traducen para mostrarlas mientras los valores propios del catálogo no se tocan para el filtrado, así que la búsqueda coincide con cualquiera de los dos que escribas. +- **Se traducen los textos restantes del panel y de los menús** ([PR #470](https://github.com/MacRimi/ProxMenux/pull/470), aportado por [@jcastro](https://github.com/jcastro)), y añadir un mensaje nuevo ya no rompe las pruebas de traducción ([PR #469](https://github.com/MacRimi/ProxMenux/pull/469)). +- **`host` y `cluster` se leen como tales en todos los idiomas**, tanto en las etiquetas como en la prosa, y cada idioma usa el término que su propio catálogo ya había establecido. +- **El panel de interfaces de red vuelve a contar paquetes**: los errores y los paquetes descartados se nombran para recepción y transmisión en lugar de traducirse como frases normales. +- **Los números se formatean en el idioma de quien los lee**, y el estado «en ejecución» se lee como un estado y no como la acción física de correr, en alemán, español, francés, italiano, portugués y sueco. +- Los nombres de los días de la semana en las actualizaciones programadas se resuelven correctamente, y las acciones de encendido de VM y LXC siguen la redacción en español del propio Proxmox: *Apagar* para la acción ordenada, *Parar* para la forzada. + +--- + +## 📚 Documentación + +- **La documentación de la web se revisó en las siete traducciones** ([PR #476](https://github.com/MacRimi/ProxMenux/pull/476), [PR #477](https://github.com/MacRimi/ProxMenux/pull/477), [PR #478](https://github.com/MacRimi/ProxMenux/pull/478), [PR #479](https://github.com/MacRimi/ProxMenux/pull/479), [PR #480](https://github.com/MacRimi/ProxMenux/pull/480), [PR #481](https://github.com/MacRimi/ProxMenux/pull/481), [PR #482](https://github.com/MacRimi/ProxMenux/pull/482), [PR #483](https://github.com/MacRimi/ProxMenux/pull/483), [PR #484](https://github.com/MacRimi/ProxMenux/pull/484), [PR #485](https://github.com/MacRimi/ProxMenux/pull/485), [PR #486](https://github.com/MacRimi/ProxMenux/pull/486), [PR #487](https://github.com/MacRimi/ProxMenux/pull/487), [PR #488](https://github.com/MacRimi/ProxMenux/pull/488), [PR #489](https://github.com/MacRimi/ProxMenux/pull/489), [PR #490](https://github.com/MacRimi/ProxMenux/pull/490), [PR #491](https://github.com/MacRimi/ProxMenux/pull/491), aportado por [@jcastro](https://github.com/jcastro)): páginas de instalación y de referencia, post-instalación, creación de VM, discos, compartición de almacenamiento, red, backup y restauración, seguridad, ajustes, utilidades, el Monitor, OCI manager, referencias de comandos, guías prácticas y las guías de GPU y Coral. +- **OCI manager tiene su propia documentación**: qué instala y cómo, el catálogo, las aplicaciones multicontenedor, las actualizaciones y la recuperación, el formato oci-compose y su uso desde el Monitor, con diagramas y capturas de pantalla. +- **La página de colaboradores da las gracias a las personas que hay detrás de cada versión**: quienes desarrollan, revisan, traducen y prueban ProxMenux hoy, y quienes le ayudaron a dar sus primeros pasos. + +--- + +## 🙏 Agradecimientos + +- **[@Vaso73](https://github.com/Vaso73)** — las pruebas comparativas de las aplicaciones OCI frente a sus originales de Docker y las correcciones que salieron de ellas, la reconstrucción de las aplicaciones multicontenedor a partir de su estado guardado, las notificaciones en el idioma de quien las lee, Buscar aplicaciones para servicios instalados a mano y para contenedores Docker, la búsqueda y el filtro de actualizaciones de VM y LXC, los detectores verificados en ejecución, los resultados de actualización de los contenedores detenidos y los controles de encendido que siguen su tarea de Proxmox, las fechas de revisión y la comparación de Audit & Report, y el eslovaco completo del Monitor y de la terminal. +- **[@f3rs3n](https://github.com/f3rs3n)** — la revisión de cientos de mensajes en los menús, los backups, el almacenamiento y OCI manager, las notificaciones de backup, salud, temperatura y clúster, las salvaguardas del formateo de discos y de la restauración del host, las comprobaciones de repositorios y de actualización de PVE, los loaders de Synology, las migraciones de Bashrc y Log2RAM, el informe sobre el ámbito de los tokens de API, el runtime de Python portable, los conjuntos de pruebas y el italiano completo de esta versión. +- **[@jcastro](https://github.com/jcastro)** — ProxMenux en Proxmox Backup Server, las cuentas de registros privados de OCI manager Apps, Gestionar, Modificar y Actualizar más rápidos, Modificar aplicado al contenedor en marcha, la búsqueda de actualizaciones desde el menú OCI, los backups en modo snapshot en ZFS, la conservación de las etiquetas de Proxmox entre operaciones, Figurine para todas las arquitecturas, la guía de Slack y Matrix para Apprise, la retención de los almacenamientos de backups, la eliminación de backups de guests, las comprobaciones de LVM que respetan las exclusiones de discos, las comprobaciones de traducción, las traducciones restantes y la revisión de la documentación en todos los idiomas. +- **[@byGarcia](https://github.com/byGarcia)** — el registro de aplicaciones Docker y el seguimiento de versiones de imagen, con detectores verificados y pruebas de laboratorio, y las imágenes Docker ancladas por digest. +- **[@MattiaC46](https://github.com/MattiaC46)** — los trabajos de backup de VM y CT. +- **[@SystemIdleProcess](https://github.com/SystemIdleProcess)** — el diseño de la selección explícita del actualizador y el detector de Changedetection.io. +- **[@detlefs](https://github.com/detlefs)** — la revisión del alemán del Monitor. +- **[@pbr85](https://github.com/pbr85)** — el desvío de gzip para pigz y los helpers del registro. +- **[@phyrexia](https://github.com/phyrexia)** — el perfil de swap ZRAM y sus métricas en el Monitor. +- **[@fklnc94](https://github.com/fklnc94)** y **[@wolly6973](https://github.com/wolly6973)** — las notificaciones de nodos del clúster y el descarte de montajes remotos obsoletos. +- **[@pdafoto](https://github.com/pdafoto)**, **[@gabglus](https://github.com/gabglus)**, **[@dave100fuegos](https://github.com/dave100fuegos)** y **[@WRCAs](https://github.com/WRCAs)** — las aplicaciones sugeridas para el catálogo OCI y sus pruebas, y los detectores de LazyLibrarian y PeaNUT. +- **[@shtefko](https://github.com/shtefko)**, **[@Joshua1264](https://github.com/Joshua1264)**, **[@sbaghdadi](https://github.com/sbaghdadi)**, **[@ash34](https://github.com/ash34)**, **[@bartclone](https://github.com/bartclone)**, **[@spectante](https://github.com/spectante)**, **[@linux-fertxo](https://github.com/linux-fertxo)**, **[@sponger544](https://github.com/sponger544)**, **[@LucasR3C3](https://github.com/LucasR3C3)**, **[@tropicaljoe](https://github.com/tropicaljoe)**, **[@rollingafull](https://github.com/rollingafull)**, **@sahartford**, **@christiannieveslauz**, **Maragath**, **Charly Silva**, **Nicolas Ortuzar** y **Rafael Fernández Díez** — los informes detrás del tratamiento de `/etc/pve`, los errores de log persistentes, los backups del host con SELinux, el recuento y el log de actualizaciones, los repositorios Borg remotos, el reposo de los discos, la post-instalación en cualquier idioma, el nombre del nodo en hosts lentos, el passthrough de GPU en APU AMD, la restauración del certificado, las correcciones para AMD, las notificaciones de backup por HTTPS, las exclusiones de almacenamiento, los descartes permanentes, los directorios compartidos del host, los backups del host en un clúster, los backups de trabajos anteriores, el historial de notificaciones, la coherencia de las versiones de aplicaciones y las métricas históricas en hosts más lentos. + +Los comentarios son bienvenidos en [Discussions](https://github.com/MacRimi/ProxMenux/discussions) o como issue. + +--- + +Para el historial completo de cambios, consulta [Releases](https://github.com/MacRimi/ProxMenux/releases). + +--- + + ## 2026-09-02 ### Nueva versión ProxMenux v1.2.6