diff --git a/AppImage/components/host-backup.tsx b/AppImage/components/host-backup.tsx index 43371bb5..2759a837 100644 --- a/AppImage/components/host-backup.tsx +++ b/AppImage/components/host-backup.tsx @@ -413,7 +413,7 @@ const formatRunAt = (iso: string | null) => { // belong to matches "the key is a PBS thing" without dragging in // the fuller management surface. // ────────────────────────────────────────────────────────────── -function PbsKeyfileActions() { +function PbsKeyfileActions({ pbsRepository }: { pbsRepository?: string }) { const { data: info, mutate: mutateInfo } = useSWR<{ installed: boolean fingerprint?: string @@ -428,6 +428,22 @@ function PbsKeyfileActions() { const [busy, setBusy] = useState(false) const [err, setErr] = useState(null) + // Auto-discover a PVE-managed keyfile at /etc/pve/priv/storage/.enc + // that matches this specific PBS repository. When present, the Upload + // modal surfaces a one-click "Use PVE-managed key" shortcut at the + // top so the operator doesn't have to hunt down the file path — the + // exact convenience the shell TUI already provides during its import + // wizard. Only fetched while the modal is open + a repository is known. + const { data: pveDiscover } = useSWR<{ + entries: Array<{ name: string; server: string; datastore: string; path: string; matches_repository: boolean }> + }>( + uploadOpen && pbsRepository + ? `/api/host-backups/pbs-encryption/discover-pve-keyfiles?repository=${encodeURIComponent(pbsRepository)}` + : null, + fetcher, + ) + const pveMatch = pveDiscover?.entries?.find((e) => e.matches_repository) || null + const closeUpload = () => { setUploadOpen(false) setImportFile(null) @@ -572,6 +588,34 @@ function PbsKeyfileActions() {
+ {pveMatch && ( +
+
+ +
+
PVE-managed keyfile detected for this PBS
+
+ Proxmox already stores an encryption key for storage {pveMatch.name} at{" "} + {pveMatch.path}. Import it in one click. +
+
+
+
+ +
+
+ )} + {pveMatch &&
— or upload your own —
}
setImportPath(e.target.value)} disabled={busy || !!importFile} - placeholder="/usr/local/share/proxmenux/pbs-key.conf" + placeholder="e.g. /etc/pve/priv/storage/.enc or /root/my-pbs-key" className="h-9 mt-1 font-mono text-xs" />
@@ -1578,6 +1622,21 @@ function InspectModal({ fetcher, ) const needsKeyfile = !!(remoteArc?.encrypted && keyfileInfo && !keyfileInfo.installed) + // Same PVE-managed keyfile auto-discovery the setup wizards use: when + // the encrypted snapshot lives on a PBS whose PVE storage.cfg entry + // has an `encryption-key` file at /etc/pve/priv/storage/.enc, + // surface a one-click "Use this key" shortcut in the amber panel so + // the operator doesn't have to type the full path. Only fetched when + // the amber gate is actually rendered (encrypted + no keyfile). + const { data: pveDiscoverInspect } = useSWR<{ + entries: Array<{ name: string; server: string; datastore: string; path: string; matches_repository: boolean }> + }>( + needsKeyfile && remoteArc?.repo_repository + ? `/api/host-backups/pbs-encryption/discover-pve-keyfiles?repository=${encodeURIComponent(remoteArc.repo_repository)}` + : null, + fetcher, + ) + const pveMatchInspect = pveDiscoverInspect?.entries?.find((e) => e.matches_repository) || null const [importFile, setImportFile] = useState(null) const [importPath, setImportPath] = useState("") const [importing, setImporting] = useState(false) @@ -2041,8 +2100,37 @@ function InspectModal({
+ {pveMatchInspect && ( +
+
+ +
+
PVE-managed keyfile detected for this PBS
+
+ Proxmox stores an encryption key for storage {pveMatchInspect.name} at{" "} + {pveMatchInspect.path}. Import it in one click. +
+
+
+
+ +
+
+ )}
- + setImportPath(e.target.value)} disabled={importing || !!importFile} - placeholder="/usr/local/share/proxmenux/pbs-key.conf" + placeholder="e.g. /etc/pve/priv/storage/.enc or /root/my-pbs-key" className="h-8 text-[11px] font-mono" />
@@ -3834,7 +3922,7 @@ function CreateJobDialog({ value={pbsImportPath} onChange={(e) => setPbsImportPath(e.target.value)} disabled={pbsImportBusy || !!pbsImportFile} - placeholder="/usr/local/share/proxmenux/pbs-key.conf" + placeholder="e.g. /etc/pve/priv/storage/.enc or /root/my-pbs-key" className="h-8 text-[11px] font-mono" />

@@ -4808,7 +4896,7 @@ function ManualBackupDialog({ value={pbsImportPath} onChange={(e) => setPbsImportPath(e.target.value)} disabled={pbsImportBusy || !!pbsImportFile} - placeholder="/usr/local/share/proxmenux/pbs-key.conf" + placeholder="e.g. /etc/pve/priv/storage/.enc or /root/my-pbs-key" className="h-8 text-[11px] font-mono" />

@@ -5843,7 +5931,7 @@ function DestinationRow({ is host-wide but conceptually belongs to PBS usage, so the Download / Upload / Delete controls sit next to the destination(s) they support. */} - {item.kind === "pbs" && } + {item.kind === "pbs" && } ) } diff --git a/AppImage/config/verified_ai_models.json b/AppImage/config/verified_ai_models.json index 2279a21b..4472ea26 100644 --- a/AppImage/config/verified_ai_models.json +++ b/AppImage/config/verified_ai_models.json @@ -1,17 +1,18 @@ { "_description": "Verified AI models for ProxMenux notifications. Only models listed here will be shown to users. Models are tested to work with the chat/completions API format.", - "_updated": "2026-07-13", + "_updated": "2026-07-14", "_verifier": "Refreshed with tools/ai-models-verifier (private). Re-run before each ProxMenux release to keep the list current. The verifier and ProxMenux share the same reasoning/thinking-model handlers so their verdicts stay aligned with runtime behaviour.", "groq": { "models": [ "llama-3.3-70b-versatile", "llama-3.1-8b-instant", + "meta-llama/llama-4-scout-17b-16e-instruct", "openai/gpt-oss-120b", "openai/gpt-oss-20b" ], "recommended": "llama-3.3-70b-versatile", - "_note": "Verified 2026-07-13 against Groq's public production catalog. Legacy llama-3.1-70b-versatile / llama3-70b-8192 / llama3-8b-8192 / mixtral-8x7b-32768 / gemma2-9b-it removed (retired upstream). openai/gpt-oss-120b (500 T/s) and openai/gpt-oss-20b (1000 T/s) added — both listed as current production." + "_note": "Verified functionally 2026-07-14 with the Groq API (15 models discovered, 9 passed). Legacy llama-3.1-70b-versatile / llama3-70b-8192 / llama3-8b-8192 / mixtral-8x7b-32768 / gemma2-9b-it removed (retired upstream). llama-4-scout added (current-gen Llama 4, 0.47s). openai/gpt-oss-120b / gpt-oss-20b confirmed. Passing but excluded: allam-2-7b (Arabic-focused), qwen/qwen3-32b (Chinese-first, unreliable Spanish output), openai/gpt-oss-safeguard-20b (safety-classifier variant), groq/compound-mini (agentic system, wrong fit for notification translation)." }, "gemini": { @@ -69,7 +70,7 @@ "mistralai/mistral-small-3.2-24b-instruct" ], "recommended": "meta-llama/llama-3.3-70b-instruct", - "_note": "Verified 2026-07-13 against OpenRouter's public /api/v1/models catalog (343 models advertised). anthropic/claude-3.5-haiku / anthropic/claude-3.5-sonnet / google/gemini-flash-1.5 / mistralai/mistral-7b-instruct / mistralai/mixtral-8x7b-instruct removed (GONE from catalog). Modern replacements added: llama-4-scout (Meta's current gen), claude-haiku-4.5 / claude-sonnet-4.6 (Anthropic current gen via OpenRouter proxy), gemini-2.5-flash / flash-lite (Google current gen), mistral-small-3.2-24b (Mistral current small)." + "_note": "Verified functionally 2026-07-14 with the OpenRouter API — all 10 curated candidates pass the Spanish-translation notification test. Fastest: llama-4-scout (0.51s), gemini-2.5-flash-lite (1.14s), gemini-2.5-flash (1.94s), llama-3.3-70b-instruct (2.29s), claude-haiku-4.5 (2.71s). Legacy anthropic/claude-3.5-* / google/gemini-flash-1.5 / mistralai/mistral-7b-instruct / mixtral-8x7b-instruct removed (GONE from catalog). Modern replacements added: llama-4-scout (Meta's current gen — dramatically fastest), claude-haiku-4.5 / claude-sonnet-4.6, gemini-2.5-flash / flash-lite, mistral-small-3.2-24b. recommended kept as llama-3.3-70b for capability/latency balance; llama-4-scout is a faster alternative worth considering as recommended after a broader release." }, "ollama": { diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b37e3d1..7846da80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,119 @@ +## 2026-07-14 + +### New version ProxMenux v1.2.3 + + +![ProxMenux Backups](https://raw.githubusercontent.com/MacRimi/ProxMenux/main/images/ProxMenux_backup.png) + +Stable consolidation of the **v1.2.2.x beta cycle** (v1.2.2.1 → v1.2.2.2 → v1.2.2.3). The headline is a new **Backups** section inside the Monitor with a first-class create / schedule / restore flow against Local, PBS and Borg, a live post-restore progress card, a reworked PBS encryption dialog, and a direction-aware restore that handles cross-kernel jumps safely. Around it: a new Network Flow topology view, redesigned cards across Overview / VM & LXC / Storage / Network, richer plain-templated notifications that identify the affected object without needing AI, a refreshed Health Monitor Thresholds panel, and a full re-verification of the AI-model catalogue for the five supported providers. + +--- + +## 🗄️ Backups integrated in the Monitor + +- **Create / schedule / restore** host backups against **Local**, **Proxmox Backup Server** and **Borg** destinations from the dashboard. +- **Two scheduling modes**: dedicated systemd timer, or *attached* to an existing PVE vzdump job with retention live-inherited from the parent on every run. +- **PBS encryption with paired recovery blob**: encrypted backups store a passphrase-wrapped copy of the keyfile as a `-keyrecovery` group next to each snapshot, so a fresh install can always get the key back with the operator's passphrase. +- **Direction-aware restore**: reapplies IOMMU / VFIO / GRUB tunings on cross-kernel jumps, protects critical packages from cascade-remove, auto-remaps NICs after a motherboard swap. +- **Live post-restore progress card**: after the reboot, the Backups tab shows a real-time card with step-by-step milestones, per-component status (NVIDIA, Intel GPU tools, Coral, AMD tools), boot sanity warnings, a rollback delta widget listing anything on the host that was not in the backup, and a log tail with an Issues-only filter. Past restores are archived and browsable. +- **PBS keyfile management inline in the Monitor**: each PBS destination row exposes Download / Upload / Delete for the keyfile plus a Yes/No + passphrase + contextual Apply toggle for the escrow. When the installed keyfile does not match the backup's manifest, View contents / Download / Restore now show a structured amber panel with the required fingerprint so the operator knows which keyfile to import. + +--- + +## 🌐 Network Flow diagram + +- New live topology view on the **Network** tab: NICs → host → bridges → LXCs / VMs. +- Animated rx / tx pulses on every internal link — immediate answer to *"which guest is pulling / pushing right now"* without cross-referencing multiple panels. +- Tree layout designed to read cleanly on mobile devices. + +--- + +## 🎨 Redesigned cards across Overview / VM & LXC / Storage / Network + +- Layouts reworked for faster reading and denser, more practical information. +- Key numbers surface at a glance, grouped by relevance. +- Responsive grid behaves cleanly from a phone up to an ultrawide. +- **Physical Disks** and **Physical Interfaces** cards on Storage and Network get the largest visual change — clearer per-item presentation. + +--- + +## 🔔 Richer notifications out of the box + +For users who do **not** use an AI enhancement agent, the plain-templated body now carries more useful content: + +- Titles and reasons name the affected object (`Storage 'Tuxis' unavailable` instead of `1 Proxmox storage(s) unavailable`, `Network connectivity lost — vmbr0`, `3 health checks degraded — Storage (Tuxis), Network (vmbr0), CPU`). +- Long lists surface the top offenders with an `…and N more` tail so nothing is silently dropped. +- Recovery notifications preserve the same identity used in the alert. +- Users with AI enrichment keep getting their tailored rewrite on top of this improved base. + +--- + +## 🩺 Health Monitor Thresholds redesigned + +- The **Settings → Health Monitor Thresholds** panel that controls per-category Warning and Critical levels (CPU, memory, temperature, storage, disks, …) was reworked with clearer visual grouping and inline hints. +- Tuning a threshold now takes a couple of clicks instead of scrolling through a wall of numbers. + +--- + +## 🛠 Notable fixes + +- **USB-NVMe / USB-SATA SMART on `removable=0` enclosures** — enclosures reporting `removable=0` (ASMedia, JMicron, Realtek, ASM105x) now walk sysfs to detect USB attachment, so `-d snt*` pass-through is tried and the drive's real model, serial, temperature, power-on hours and health surface. Temperature history sampler picks up the same fix. +- **PBS encryption prompt reworked** to a single explicit *Encrypt this backup?* Yes/No — nothing is uploaded to PBS unless the answer is Yes. Only when a keyfile is not yet installed does a second dialog ask whether to generate a new one or import an existing one. Cancelling never leaves a phantom keyfile behind. +- **Attached scheduled backups now inherit retention on every run** — jobs attached to a PVE vzdump parent re-read the parent's `prune-backups` config at each run and rewrite `KEEP_*` accordingly. Previously frozen to the value at job creation time. +- **Installer no longer auto-relaunches `menu` after an update** — the `exec MENU_SCRIPT` at the tail of the update path triggered *"line: syntax"* errors when bash tried to read the just-rewritten `/usr/local/bin/menu` under its feet. Flow now exits cleanly; operator types `menu` when ready. `change_release_channel` in Settings unaffected. +- **PBS restore listing broken on Proxmox 9 / jq 1.7** — `hb_pbs_list_snapshots` switched from the prefix form `and not (...)` (rejected by jq 1.7) to the postfix form `and ((...) | not)` (accepted by both jq 1.6 and 1.7). Silent stderr redirect removed so future parse errors surface. +- **`run_scheduled_backup.sh` no longer crashes when `LANGUAGE` is unset** — cron / systemd invocations now load language + initialize the translation cache before sourcing utility functions that require it. +- **Local archive restore prompts no longer freeze silently** — `hb_prompt_restore_source_dir` and `hb_prompt_local_archive` use the fd-9 TTY handoff already applied elsewhere. +- **Terminal modal auto-focuses xterm** so `dialog --yesno` inside CLI scripts receives arrow keys instead of the Close button. +- **NVIDIA VFIO passthrough writes back `vfio_passthrough` in `components_status.json`** — `switch_gpu_mode.sh`, `switch_gpu_mode_direct.sh` and `add_gpu_vm.sh` update component status when they flip the driver posture. Post-restore auto-reinstall no longer kicks the NVIDIA installer on hosts intentionally left in VFIO mode. +- **Secure Gateway update notifications no longer trail a bare `— v`** — when only sidecar packages need updating (Tailscale itself unchanged), the title now reads `secure-gateway update available — v (packages only)` and the body shows a single line "Tailscale: v… (unchanged — only sidecar packages need updating)" instead of the confusing `v → v` arrow. +- **AI model auto-migration for deprecated aliases** — users with `claude-3-5-haiku-latest`, `claude-3-5-sonnet-latest` or `claude-3-opus-latest` (all 404 upstream now) are silently migrated to the current recommendation (`claude-haiku-4-5`, etc.) within 24 h of upgrade, with an `ai_model_migrated` notification explaining what happened. +- **NVIDIA installer no longer locked to the recommended branch** (#248) — `filter_option_c_branch` used to require an EXACT major match against the kernel-recommended branch, so kernel 7.0.14 users only saw 580.x drivers even when specific 580.x builds failed to compile on the newer PVE 9.1 toolchain. Filter now accepts branch ≥ recommended, so newer stable branches (590 / 595 / 600) are selectable in-menu when they compile. `MIN_DRIVER_VERSION` still gates the floor. +- **PBS keyfile auto-detection in the Monitor** — the *Upload PBS keyfile* modal (per-destination row) and the encrypted-backup keyfile-required panel (View contents / Download / Restore) now query `/etc/pve/priv/storage/.enc` for the selected PBS repository and, when a match is found, offer a one-click *Use this key* import — the same convenience the shell TUI already provided. +- **Upload PBS keyfile — clearer placeholder** — the *Absolute path on this host* input placeholder was showing the ProxMenux canonical destination path (`/usr/local/share/proxmenux/pbs-key.conf`), which reads as "reuse the file already there". Replaced with a source-path example (`e.g. /etc/pve/priv/storage/.enc or /root/my-pbs-key`). +- **Assorted minor** — PVE webhook URL follows the active SSL state; disk observations recorded before the SMART gate; Login screen no longer swallows a 401 forever after a brief stale-token state; toggles visible on light theme. + +--- + +## 🤖 AI providers refresh + +`AppImage/config/verified_ai_models.json` refreshed with functional verification against all five supported providers (`_updated: 2026-07-14`): + +| Provider | Removed (deprecated / 404) | Added / kept | Recommended | +|-------------|-----------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|-----------------------------------| +| groq | `llama-3.1-70b-versatile`, `llama3-70b/8b-8192`, `mixtral-8x7b`, `gemma2-9b-it` | `llama-3.3-70b-versatile`, `llama-3.1-8b-instant`, `llama-4-scout`, `openai/gpt-oss-20b`, `openai/gpt-oss-120b` | `llama-3.3-70b-versatile` | +| gemini | `gemini-2.0-flash*`, `gemini-1.5-flash`, `gemini-1.0-pro` | `gemini-flash-lite-latest`, `gemini-2.5-flash-lite/flash`, `gemini-3-flash-preview`, `gemini-3.1/3.5-flash-lite/flash` | `gemini-2.5-flash-lite` | +| openai | `gpt-5.4-nano`, `gpt-5.4-mini` (HTTP 400) | `gpt-4.1-nano/mini`, `gpt-4o-mini`, `gpt-4.1`, `gpt-4o`, `gpt-5-chat-latest`, `gpt-5-nano` | `gpt-4.1-nano` | +| anthropic | `claude-3-5-haiku-latest`, `claude-3-5-sonnet-latest`, `claude-3-opus-latest` (404 upstream) | `claude-haiku-4-5`, `claude-sonnet-5`, `claude-opus-4-8`, `claude-sonnet-4-6`, `claude-opus-4-6`, `claude-fable-5` | `claude-haiku-4-5` | +| openrouter | `claude-3.5-*`, `gemini-flash-1.5`, `mistral-7b`, `mixtral-8x7b` | `llama-4-scout`, `claude-haiku-4.5`, `claude-sonnet-4.6`, `gemini-2.5-flash/lite`, `mistral-small-3.2-24b` | `meta-llama/llama-3.3-70b-instruct` | + +Auto-migration is built-in: `PollingCollector._check_ai_model_availability()` runs every 24 h and moves users whose configured model was removed to the recommended replacement, with an `ai_model_migrated` notification explaining what happened. + +--- + +## ⬆ Upgrading from v1.2.2 + +- ProxMenux notifies stable users automatically on the next `menu` launch. +- Monitor service restarts in-place — **no host reboot is needed** for the upgrade itself. +- Users on the v1.2.2.x beta channel: the same `menu` flow detects the switch to stable and offers to move the install off the beta installer. +- Health Monitor settings, dismissed alerts and per-category suppression durations are preserved verbatim. +- AI configurations pointing at now-deprecated models (`claude-3-5-*-latest`, some `gemini-2.0-*`, retired Groq / OpenRouter IDs) are auto-migrated to the recommended replacement within 24 h of the first Monitor poll after the upgrade, with an explanatory notification sent through every enabled channel. + +--- + +## 🙏 Acknowledgments + +Special thanks to the community members who shaped this release with concrete designs, field reports and testing: + +- **[@JF_Car](https://github.com/JF_Car)** — proposed the tree layout for the new Network Flow diagram so it reads correctly on mobile devices. +- **[@ghosthvj](https://github.com/ghosthvj)** — contributed the design for the new **Physical Disks** and **Physical Interfaces** cards. +- **[@riglesias](https://github.com/riglesias)**, **[@princo56](https://github.com/princo56)** and **[@jonatanc](https://github.com/jonatanc)** — tested the beta cycle end-to-end and provided the suggestions that closed most of the operator-visible gaps. + +And to every user who opened an issue, commented in [GitHub Discussions](https://github.com/MacRimi/ProxMenux/discussions), reported a bug on the community channel, or told us what worked and what didn't on their hardware — most internal fixes in this release started as one of those reports. Keep them coming. + +--- + ## 2026-06-02 ### New version ProxMenux v1.2.2 — *Stable consolidation of the v1.2.1.x cycle* diff --git a/images/ProxMenux_backup.png b/images/ProxMenux_backup.png new file mode 100644 index 00000000..6c6bf5ce Binary files /dev/null and b/images/ProxMenux_backup.png differ diff --git a/install_proxmenux.sh b/install_proxmenux.sh index 8993fae1..ab267335 100755 --- a/install_proxmenux.sh +++ b/install_proxmenux.sh @@ -388,7 +388,7 @@ select_language() { # Show installation confirmation for new installations show_installation_confirmation() { if whiptail --title "ProxMenux Installation" \ - --yesno "ProxMenux will install:\n\n• dialog (interactive menus) - Official Debian package\n• curl (file downloads) - Official Debian package\n• jq (JSON processing) - Official Debian package\n• ProxMenux core files (/usr/local/share/proxmenux)\n• ProxMenux Monitor (Web dashboard on port 8008)\n• Pre-built translation files (English, Spanish, French, German, Italian, Portuguese)\n\nProceed with installation?" 20 70; then + --yesno "ProxMenux will install:\n\n• dialog (interactive menus) - Official Debian package\n• curl (file downloads) - Official Debian package\n• jq (JSON processing) - Official Debian package\n• ProxMenux core files (/usr/local/share/proxmenux)\n• ProxMenux Monitor (Web dashboard on port 8008)\n• Pre-built translation files\n\nProceed with installation?" 20 70; then return 0 else return 1 diff --git a/scripts/gpu_tpu/nvidia_installer.sh b/scripts/gpu_tpu/nvidia_installer.sh index 669c935a..e6cc015f 100644 --- a/scripts/gpu_tpu/nvidia_installer.sh +++ b/scripts/gpu_tpu/nvidia_installer.sh @@ -822,10 +822,19 @@ filter_option_c_branch() { return 0 fi + # Accept the target branch AND any newer branch (major ≥ target). + # Historical behaviour was an exact-major match, which locked kernel + # 7.x users to 580.x only. When a 580.x build happens to fail to + # compile on a very recent kernel + toolchain combo (reproduced on + # kernel 7.0.14-4-pve — see issue #248), the operator had no + # in-menu escape. `MIN_DRIVER_VERSION` from get_kernel_compatibility_info + # still gates the floor, so this only opens the ceiling: newer stable + # branches like 590 / 595 / 600 that satisfy the min version become + # selectable, while ancient branches remain filtered out. while IFS= read -r ver; do [[ -z "$ver" ]] && continue local ver_major="${ver%%.*}" - if [[ "$ver_major" == "$target_branch" ]]; then + if (( 10#$ver_major >= 10#$target_branch )); then printf '%s\n' "$ver" fi done <<< "$versions_in" diff --git a/web/app/[locale]/docs/installation/page.tsx b/web/app/[locale]/docs/installation/page.tsx index 4a3d2118..0cb44501 100644 --- a/web/app/[locale]/docs/installation/page.tsx +++ b/web/app/[locale]/docs/installation/page.tsx @@ -97,7 +97,7 @@ export default async function InstallationPage({ params }: { params: Promise<{ l

{t.rich("during.outro", { code, strong })}

{t("during.imageAlt")}8.x or later. PVE 7 and earlier are not supported. Internet access from the host (the installer downloads scripts, dependencies and — on the Translation install — Python packages from PyPI). Run as root on the Proxmox host.", + "reqBody": "Proxmox VE 8.x or later. PVE 7 and earlier are not supported. Internet access from the host (the installer downloads scripts, dependencies and the ProxMenux Monitor AppImage). Run as root on the Proxmox host.", "inspectTitle": "Always inspect scripts you run from the internet", "inspectReview": "Review the installer source before running.", "inspectCoc": "All executable links follow the ProxMenux Code of Conduct." diff --git a/web/messages/es/docs/installation.json b/web/messages/es/docs/installation.json index bbef587f..46d552f4 100644 --- a/web/messages/es/docs/installation.json +++ b/web/messages/es/docs/installation.json @@ -1,7 +1,7 @@ { "meta": { "title": "Instalar ProxMenux | ProxMenux Documentation", - "description": "Instalador de una línea para ProxMenux en hosts Proxmox VE 8+. Elige entre el sabor con traducción (multi-idioma) o normal (ligero, solo inglés). Canal beta también disponible para acceso temprano a nuevas funciones.", + "description": "Instalador de una línea para ProxMenux en hosts Proxmox VE 8+. Incluye ficheros de traducción pre-generados para seis idiomas (inglés, español, francés, alemán, italiano, portugués) — el idioma se elige una vez durante la instalación. Canal beta también disponible para acceso temprano a nuevas funciones.", "ogTitle": "Instalar ProxMenux | ProxMenux Documentation", "ogDescription": "Instala ProxMenux en Proxmox VE 8+ con un comando. Canales estable y beta disponibles." }, @@ -85,7 +85,7 @@ "requirements": { "heading": "Requisitos y buenas prácticas", "reqTitle": "Requisitos", - "reqBody": "Proxmox VE 8.x o posterior. PVE 7 y anteriores no están soportados. Acceso a internet desde el host (el instalador descarga scripts, dependencias y — en la instalación con traducción — paquetes de Python desde PyPI). Ejecuta como root en el host Proxmox.", + "reqBody": "Proxmox VE 8.x o posterior. PVE 7 y anteriores no están soportados. Acceso a internet desde el host (el instalador descarga scripts, dependencias y la AppImage de ProxMenux Monitor). Ejecuta como root en el host Proxmox.", "inspectTitle": "Revisa siempre los scripts que ejecutas desde internet", "inspectReview": "Revisa la fuente del instalador antes de ejecutarlo.", "inspectCoc": "Todos los enlaces ejecutables siguen el código de conducta de ProxMenux." diff --git a/web/public/install/install.png b/web/public/install/install.png index bc61449d..940fd589 100644 Binary files a/web/public/install/install.png and b/web/public/install/install.png differ