complete i18n migration to /[locale]/ with EN+ES content

Full rewrite of the docs site under app/[locale]/ with next-intl
in localePrefix:"always" mode. Every page now exists at both
/en/<path> and /es/<path>; the root / shows a meta-refresh + JS
redirect to /<defaultLocale>/ so GitHub Pages serves something
on the apex URL.

Highlights:
- 107 doc pages migrated to file-per-page JSON namespaces under
  messages/en/ and messages/es/. Spanish content is fully
  translated (no copy-of-English placeholders).
- New documentation for the Active Suppressions section in the
  Settings tab and the per-event Dismiss dropdown in the Health
  Monitor modal.
- New screenshots: dismiss-duration-dropdown.png and an updated
  health-suppression-settings.png.
- Pagefind integrated for client-side search; index is built on
  every CI deploy (not committed).
- RSS feeds: per-locale at /<locale>/rss.xml plus root /rss.xml
  for backward compat.
- Removed the dead app/[locale]/guides/[slug]/ route — every
  guide now has its own static page and no markdown source
  remains.
- Fixed orphan link /guides/nvidia -> /guides/nvidia-manual in
  docs/hardware/nvidia-host.
- Removed obsolete components (footer2, calendar, drawer).

Verified locally with `npm ci && npm run build`: 2804 files in
out/, 231 pages indexed by pagefind, root redirect intact, both
locale roots and the new Active Suppressions docs render OK.
This commit is contained in:
MacRimi
2026-05-31 12:41:10 +02:00
parent 875910b4d7
commit 5ca3463bf6
649 changed files with 83958 additions and 11096 deletions
+145
View File
@@ -0,0 +1,145 @@
{
"meta": {
"title": "Exportar VM a OVA / OVF | ProxMenux Documentation",
"description": "Exporta una VM de Proxmox a un archivo OVA portable o un directorio OVF usando el esquema estándar DMTF. Discos VMDK en formato streamOptimized, manifiesto SHA1. Importable en VMware ESXi / Workstation / Fusion, VirtualBox y de vuelta a Proxmox.",
"ogTitle": "Exportar VM a OVA / OVF | ProxMenux Documentation",
"ogDescription": "Convierte una VM de Proxmox en un paquete portable OVA / OVF compatible con VMware y VirtualBox."
},
"header": {
"title": "Exportar VM a OVA / OVF",
"description": "Convierte una VM de Proxmox en un paquete portable OVA (un único archivo TAR) o OVF (descriptor + archivos VMDK) usando el esquema OVF estándar de DMTF. Los discos se convierten con qemu-img a VMDK streamOptimized. El resultado es importable en VMware (ESXi / Workstation / Fusion), VirtualBox y de vuelta a Proxmox vía la herramienta de importación.",
"section": "Utilidades"
},
"intro": {
"title": "Qué hace",
"body": "Lee la configuración de una VM parada, convierte cada disco a VMDK streamOptimized, genera un descriptor OVF y un manifiesto SHA1, y empaqueta todo como un único archivo <code>.ova</code> o como un directorio <code>-ovf</code>. La VM origen nunca se modifica."
},
"picker": {
"heading": "Selector de VM",
"body": "Al arrancar, el script lista cada VM de <code>qm list</code> con VMID, nombre y estado. Elige la que quieras exportar:",
"imgAlt": "Diálogo selector de VM para exportar listando todas las VMs"
},
"stopped": {
"heading": "La VM debe estar parada",
"intro": "Una imagen de disco consistente requiere una VM parada. Si la VM seleccionada está corriendo, ProxMenux ofrece detenerla:",
"items": [
"Apagado controlado vía <code>qm shutdown $VMID --timeout 120</code> (espera 2 min al apagado ACPI del guest).",
"Si hay timeout, ofrece parada forzosa: <code>qm stop $VMID</code> (equivalente a quitar la corriente).",
"Si declinas ambas, la exportación se aborta — no se toca ningún dato."
],
"warnTitle": "La parada forzosa es como quitar la corriente",
"warnBody": "<code>qm stop</code> equivale a tirar del cable. El guest puede necesitar reparación del sistema de archivos en su siguiente arranque. Prefiere el apagado controlado siempre que sea posible; reserva la parada forzosa para guests que no responden."
},
"format": {
"heading": "Selector de formato: OVA vs OVF",
"headerFormat": "Formato",
"headerOutput": "Salida",
"headerPros": "Ventajas",
"headerCons": "Inconvenientes",
"rows": [
{
"format": "OVA",
"output": "name-vmid-ts.ova",
"pros": "Un único archivo — fácil de mover, sftp, adjuntar a un ticket. Autocontenido.",
"cons": "Necesita ~220% del tamaño virtual del disco (overhead de TAR durante la creación)."
},
{
"format": "OVF",
"output": "name-vmid-ts-ovf/",
"pros": "~120% de overhead de disco. Más fácil de inspeccionar (el descriptor es XML plano). Editable antes de importar.",
"cons": "Varios archivos — hay que transferirlos todos juntos."
}
]
},
"destination": {
"heading": "Directorio de destino",
"body": "Elige entre presets (<code>/var/lib/vz/dump</code>, <code>/var/lib/vz/template/iso</code>) o introduce una ruta manual. El script valida que el directorio es escribible y avisa si el espacio libre va justo antes de empezar.",
"calloutTitle": "Regla del pulgar de espacio libre",
"calloutBody": "Para una exportación OVF de una VM con discos que suman 100 GB virtuales: presupuesta ~120 GB libres. Para OVA: presupuesta ~220 GB. Los discos sparse / mayormente vacíos pueden usar menos, pero la conversión los escribe enteros antes de que el paso TAR de OVA comprima nada. Si te quedas sin espacio a mitad de la exportación, el directorio temporal se limpia con el trap de EXIT y vuelves a empezar."
},
"package": {
"heading": "Qué acaba en el paquete",
"intro": "Para un OVA / OVF llamado <code>myvm-100-2026-04-26_18-30-15</code>:",
"code": "# OVA mode (single .ova file is a TAR of):\nmyvm-100-2026-04-26_18-30-15.ovf # XML descriptor (DMTF OVF 1.0 + RASD + VSSD)\nmyvm-100-2026-04-26_18-30-15.mf # SHA1 manifest\nmyvm-100-2026-04-26_18-30-15-disk0.vmdk\nmyvm-100-2026-04-26_18-30-15-disk1.vmdk\n...\n\n# OVF mode (a directory):\nmyvm-100-2026-04-26_18-30-15-ovf/\n├── myvm-100-2026-04-26_18-30-15.ovf\n├── myvm-100-2026-04-26_18-30-15.mf\n├── myvm-100-2026-04-26_18-30-15-disk0.vmdk\n└── myvm-100-2026-04-26_18-30-15-disk1.vmdk"
},
"exported": {
"heading": "Qué se exporta",
"items": [
"<strong>Discos:</strong> todas las entradas <code>scsi*</code>, <code>sata*</code>, <code>virtio*</code>, <code>ide*</code> de la configuración de la VM, convertidas a VMDK streamOptimized.",
"<strong>Número de vCPUs</strong> (RASD ResourceType 3) y <strong>memoria</strong> en MiB (ResourceType 4).",
"<strong>Número de NICs</strong> (ResourceType 10 — solo el recuento, no el bridge ni el modelo).",
"<strong>Nombre de la VM</strong> y una pista del tipo de SO."
],
"notTitle": "Qué NO se exporta",
"notItems": [
"Montajes de CD-ROM / ISO (excluidos por diseño).",
"Drives de cloud-init (excluidos por diseño).",
"Bridge / modelo específico de NIC (solo se preserva el recuento).",
"Elección de BIOS / UEFI — hay que volver a configurarla al importar.",
"Configuración de passthrough PCI.",
"Snapshots — solo se captura el estado actual.",
"Opciones a nivel de VM (NUMA, hugepages, hotplug, …)."
]
},
"conversion": {
"heading": "Conversión de discos",
"intro": "Cada disco se convierte con:",
"code": "qemu-img convert -p -O vmdk -o subformat=streamOptimized \\\n \"$source_path\" \\\n \"$work_dir/<base_name>-disk<N>.vmdk\"",
"outro": "<code>streamOptimized</code> es el formato legible en una sola pasada de VMware — soportado por ESXi 6.7+, VMware Workstation, VirtualBox y obviamente el propio Proxmox. Es el subformato VMDK más ampliamente compatible y la elección correcta para portabilidad. Contrapartida: no es accesible aleatoriamente, así que no puedes montarlo directamente sin conversión."
},
"manifest": {
"heading": "Manifiesto SHA1",
"intro": "Todo paquete incluye un archivo <code>.mf</code> con hashes SHA1 del descriptor OVF y de cada VMDK:",
"code": "SHA1(myvm-100-2026-04-26_18-30-15.ovf)= 3a7bd3e2360a3d29eea436fcfb7e44c735d117c9\nSHA1(myvm-100-2026-04-26_18-30-15-disk0.vmdk)= b7e23ec29af22b0b4e41da31e868d57226121c84\nSHA1(myvm-100-2026-04-26_18-30-15-disk1.vmdk)= a87ff679a2f3e71d9181a67b7542122c",
"outro": "Opcional en la especificación OVF — muchos lectores lo ignoran — pero útil para verificar que el paquete llegó intacto. Verifica manualmente con <code>sha1sum -c file.mf</code>."
},
"import": {
"heading": "Importar el resultado",
"intro": "El paquete exportado lo pueden consumir:",
"items": [
{
"href": "/docs/utils/import-vm",
"preRich": "<strong>Proxmox</strong> — usa la herramienta correspondiente ",
"linkLabel": "Importar VM desde OVA / OVF",
"tailRich": "."
},
{
"tailRich": "<strong>VMware ESXi</strong> — Datacenter → Deploy OVF Template, apunta al .ova o .ovf."
},
{
"tailRich": "<strong>VMware Workstation / Fusion</strong> — File → Open, elige el .ova o .ovf."
},
{
"tailRich": "<strong>VirtualBox</strong> — File → Import Appliance, elige el .ova o .ovf."
}
]
},
"troubleshoot": {
"heading": "Solución de problemas",
"noSpaceTitle": "qemu-img convert falla a mitad con \"No space left on device\"",
"noSpaceBody": "El destino se quedó sin espacio. El directorio temporal se limpia automáticamente con el trap de EXIT. Elige un destino con más margen (regla del pulgar más arriba) y vuelve a ejecutar.",
"unsupportedHwTitle": "La exportación termina pero VMware se niega a importar: \"Unsupported hardware family\"",
"unsupportedHwBody": "Algunas versiones de ESXi rechazan descriptores OVF que declaran una hardware family que no reconocen. Abre el .ovf en un editor de texto (o extrae primero el .ova), busca <code>&lt;vssd:VirtualSystemType&gt;</code> y edítalo a un valor que ESXi acepte (p. ej. <code>vmx-13</code> para ESXi 6.5+). Como solución rápida, prueba con VirtualBox — es más permisivo.",
"nicTitle": "La VM importada en VMware tiene NIC e1000 pero quiero VirtIO",
"nicBody": "Esperado — el OVF solo almacena el recuento de NICs, no el modelo. Edita la configuración de NIC de la VM importada en VMware después de importar. Lo mismo aplica para el controlador SCSI (la exportación usa lsilogic por compatibilidad con VMware; cámbialo a <code>VirtIO SCSI</code> si tu guest lo soporta).",
"runningTitle": "La VM estaba corriendo y decliné pararla — exportación abortada",
"runningBody": "El script no puede producir una imagen consistente mientras se escribe en los discos. O bien aceptas el prompt de apagado la próxima vez, o paras la VM manualmente primero (<code>qm shutdown $VMID</code>) y vuelves a ejecutar.",
"slowTitle": "La conversión de discos es lenta",
"slowBody": "<code>qemu-img convert</code> es de un solo hilo y lee el origen a velocidad máxima. Para un disco de 100 GB en disco mecánico, espera 15-30 minutos. NVMe a NVMe es 5-10x más rápido. Las VMs multi-disco se convierten secuencialmente — el tiempo escala linealmente con el tamaño virtual total."
},
"related": {
"heading": "Relacionado",
"items": [
{
"href": "/docs/utils/import-vm",
"label": "Importar VM desde OVA / OVF",
"tail": " — el compañero del viaje de ida y vuelta."
},
{
"href": "/docs/utils",
"label": "Resumen de Utilidades",
"tail": " — volver al resumen de la sección."
}
]
}
}
+218
View File
@@ -0,0 +1,218 @@
{
"meta": {
"title": "Importar VM desde OVA / OVF | ProxMenux Documentation",
"description": "Importa una VM de VMware ESXi / Workstation / Fusion / VirtualBox / ProxMenux en Proxmox VE. Extrae OVA automáticamente, parsea los metadatos OVF, crea la VM e importa cada disco al formato nativo del almacenamiento (qcow2 / raw).",
"ogTitle": "Importar VM desde OVA / OVF | ProxMenux Documentation",
"ogDescription": "Trae VMs de exportaciones de VMware, VirtualBox o ProxMenux a Proxmox. Los discos se convierten automáticamente al formato nativo del almacenamiento."
},
"header": {
"title": "Importar VM desde OVA / OVF",
"description": "Importa un paquete OVA / OVF en Proxmox VE: extrae archivos OVA, parsea el descriptor OVF en busca de vCPU / memoria / recuento de NICs y referencias a discos, después crea la VM e importa cada disco vía qm importdisk al almacenamiento elegido. Compatible con exportaciones de VMware (ESXi / Workstation / Fusion), VirtualBox y del propio ProxMenux.",
"section": "Utilidades"
},
"intro": {
"title": "Qué hace",
"body": "Coloca una VM completa en Proxmox desde un paquete portable. Tras la importación, la VM está lista para arrancar — pero se recomiendan unos retoques post-importación (modelo de NIC, firmware, validación del tipo de SO) por rendimiento y compatibilidad."
},
"picker": {
"heading": "Selector de archivo",
"intro": "Al arrancar, el script ofrece dos directorios preset o una ruta manual:",
"items": [
"<code>/var/lib/vz/dump</code> — el directorio por defecto de backups vzdump de Proxmox.",
"<code>/var/lib/vz/template/iso</code> — útil si subiste el OVA por sftp ahí.",
"Ruta manual — para archivos OVA / OVF en cualquier otro sitio del host."
],
"outro": "Después lista todos los archivos <code>.ova</code> y <code>.ovf</code> en el directorio elegido.",
"imageAlt": "Diálogo selector de archivo para importar VM"
},
"flow": {
"heading": "Cómo funciona la importación",
"nodes": [
{
"label": "OVA / OVF de entrada",
"detail": ".ova → tar xf a\n /tmp/.proxmenux-import-*\n.ovf → uso en sitio",
"variant": "source"
},
{
"label": "Parseo + diálogos",
"detail": "AWK lee OVF\n(nombre, vCPU, RAM, NICs,\ndiscos). El usuario elige\nVMID / almacenamiento / bridge",
"variant": "bridge"
},
{
"label": "qm create + importdisk",
"detail": "qm create $VMID\nqm importdisk\n(VMDK → qcow2)\nqm set --scsiN",
"variant": "target"
}
]
},
"ovf": {
"heading": "Parseo de OVF",
"intro": "Un parser <strong>gawk</strong> lee el descriptor OVF y extrae los metadatos de la VM. El parser usa la forma de 3 argumentos de <code>match()</code>, específica de gawk (mawk — el <code>awk</code> por defecto en Debian / Proxmox — no la soporta). En la primera importación, el script instala automáticamente gawk vía el par canónico <code>ensure_repositories</code> + <code>install_single_package</code> si falta; las importaciones siguientes arrancan al instante. Campos extraídos:",
"headerField": "Campo",
"headerSource": "Origen en OVF",
"headerDefault": "Valor por defecto si falta",
"rows": [
{
"field": "Nombre de VM",
"source": "<Name> (primera coincidencia)",
"default": "imported-vm"
},
{
"field": "Número de vCPUs",
"source": "RASD ResourceType 3 → VirtualQuantity",
"default": "1"
},
{
"field": "Memoria (MiB)",
"source": "RASD ResourceType 4 → VirtualQuantity",
"default": "1024"
},
{
"field": "Número de NICs",
"source": "recuento de ResourceType 10",
"default": "1"
},
{
"field": "Tipo de SO",
"source": "/Linux/ o /Windows/ en la descripción",
"default": "other"
},
{
"field": "Referencias a discos",
"source": "atributos href acabados en .vmdk / .qcow2 / .img / .raw",
"default": "ninguno (la importación se aborta)"
}
]
},
"memWarn": {
"title": "Ambigüedad de unidad de memoria",
"body": "El parser <strong>asume MiB</strong>. Si el OVF declara la memoria en <em>GB</em> (p. ej. algunas exportaciones de VMware lo hacen), la VM importada tendrá 1/1024 de la RAM prevista. Tras la importación, contrasta <code>qm config $VMID | grep memory</code> contra la RAM documentada de la VM origen y ajusta con <code>qm set $VMID --memory &lt;MiB&gt;</code> si está desviada por un factor de 1024 o 1024²."
},
"dialog": {
"heading": "Flujo de diálogos de importación",
"items": [
"<strong>VMID</strong> — por defecto el siguiente disponible (<code>pvesh get /cluster/nextid</code>).",
"<strong>Nombre de VM</strong> — por defecto el nombre parseado del OVF; puedes sobrescribirlo.",
"<strong>Almacenamiento de destino</strong> — menú con todos los almacenamientos con contenido <code>images</code> (de <code>pvesm status -content images</code>).",
"<strong>Bridge de red</strong> — menú de bridges (de <code>ip link show type bridge</code>); autoselecciona si solo hay uno; por defecto <code>vmbr0</code>.",
"<strong>Confirmación</strong> — diálogo de resumen con VMID, nombre, vCPU, memoria, NICs, almacenamiento, bridge y la lista de discos a importar. Cancelar aquí = no cambia nada."
]
},
"create": {
"heading": "Creación de la VM",
"intro": "Tras la confirmación, el script ejecuta:",
"code": "qm create $VMID \\\n --name \"$NAME\" \\\n --memory $MEMORY \\\n --cores $VCPU \\\n --ostype $OSTYPE \\\n --scsihw lsi \\\n --net0 e1000,bridge=$BRIDGE\n\n# For each additional NIC:\nqm set $VMID --netN e1000,bridge=$BRIDGE",
"outro": "El controlador SCSI por defecto es <code>lsi</code> (LSI Logic) por compatibilidad con VMDK. Las NICs por defecto son <code>e1000</code> (compatibilidad universal) en el bridge elegido."
},
"diskLoop": {
"heading": "Bucle de importación de discos",
"intro": "Para cada referencia de disco en el OVF:",
"items": [
"<code>qm importdisk $VMID $disk_path $STORAGE</code> — convierte el VMDK al formato nativo del almacenamiento (p. ej. qcow2 en local-lvm, raw en ZFS) y crea una entrada <code>unusedN:</code> en la configuración de la VM.",
"El script busca con grep en la configuración la referencia <code>unusedN</code> recién creada.",
"<code>qm set $VMID --scsiN $unused_disk</code> — asocia el disco como <code>scsi0</code>, <code>scsi1</code>, …",
"<code>qm set $VMID --delete unusedN</code> — elimina el marcador unused ya redundante."
],
"outro": "El arranque se fija en el primer disco SCSI: <code>qm set $VMID --boot c --bootdisk scsi0</code>."
},
"postImport": {
"heading": "Retoques recomendados tras la importación",
"intro": "La importación usa deliberadamente ajustes de mínimo común denominador para maximizar la probabilidad de que la VM arranque a la primera. Una vez confirmes que arranca, pasa a valores por defecto mejores vía la UI de Proxmox o CLI:",
"headerSetting": "Ajuste",
"headerDefault": "Por defecto tras importar",
"headerRecommended": "Recomendado (si el guest lo soporta)",
"rows": [
{
"setting": "Modelo de NIC",
"default": "e1000",
"recommended": "VirtIO (mucho más rápido, requiere driver en el guest)"
},
{
"setting": "Controlador SCSI",
"default": "LSI",
"recommended": "VirtIO SCSI single (Linux moderno + Windows con drivers VirtIO)"
},
{
"setting": "Firmware (BIOS / UEFI)",
"default": "Por defecto de Proxmox (BIOS)",
"recommended": "Igualar al firmware de la VM origen (desigualados = no arranca)"
},
{
"setting": "QEMU guest agent",
"default": "Off",
"recommendedRich": "On + instalar <code>qemu-guest-agent</code> en el guest (mejores backups, reporte de IP)"
},
{
"setting": "Tipo de SO",
"default": "l26 / win10 / other (heurística)",
"recommended": "Verificar contra el SO real del guest"
},
{
"setting": "Display",
"default": "Default",
"recommended": "VirtIO-GPU o SPICE (mejor rendimiento de consola)"
}
]
},
"fwWarn": {
"title": "Desigualdad de firmware = no arranca",
"body": "Si la VM origen era UEFI pero Proxmox la crea como BIOS (o viceversa), el guest no encontrará un disco arrancable. Comprueba el OVF o los ajustes de la VM original buscando <em>FirmwareType / firmware</em> y configura lo mismo en Proxmox: <code>qm set $VMID --bios ovmf</code> para UEFI; por defecto es <code>seabios</code> para BIOS."
},
"notImported": {
"heading": "Qué NO se importa",
"items": [
"<strong>Bridges específicos de NIC</strong> — solo el recuento. Todas las NICs aterrizan en el bridge que elegiste al importar.",
"<strong>Modelo de NIC</strong> — por defecto e1000.",
"<strong>Tipo de firmware BIOS / UEFI</strong> — por defecto el de Proxmox (BIOS).",
"<strong>Configuración de passthrough PCI</strong>.",
"<strong>TPM</strong> (vTPM).",
"<strong>Drives de cloud-init</strong>.",
"<strong>Snapshots</strong> — solo el estado actual.",
"<strong>Dispositivos USB / serie / paralelo</strong> declarados en el OVF.",
"<strong>Tags de VM / notas / arranque al inicio</strong>."
]
},
"troubleshoot": {
"heading": "Solución de problemas",
"orphanTitle": "La VM se creó pero la importación de discos falló — VM huérfana en el sistema",
"orphanIntro": "Limitación conocida. El script no limpia automáticamente una importación parcial. Destruye la huérfana con:",
"orphanCode": "qm destroy $VMID --destroy-unreferenced-disks 1",
"orphanOutro": "Después corrige la causa raíz (probablemente espacio en disco en el almacenamiento de destino) y vuelve a importar.",
"memTitle": "La VM importada tiene 8 MB de RAM (o 8 TB)",
"memIntro": "Ambigüedad de unidad de memoria en el parser de OVF. Desviado por un factor de 1024 → el OVF usó GB en lugar de MiB. Arreglo:",
"memCode": "qm set $VMID --memory 8192 # 8 GiB",
"bootTitle": "La VM importada no arranca — \"No bootable device\"",
"bootIntro": "Causa más común: desigualdad BIOS / UEFI. La VM era UEFI pero Proxmox la creó como BIOS. Configura el firmware coincidente:",
"bootCode": "qm set $VMID --bios ovmf # UEFI\n# also add an EFI disk for the EFI vars:\nqm set $VMID --efidisk0 $STORAGE:1,format=qcow2,efitype=4m,pre-enrolled-keys=1",
"bootOutro": "Segunda más común: el orden de arranque apunta a scsi0 pero el disco real del SO es scsi1. Edita el orden de arranque en la pestaña VM Options.",
"bsodTitle": "Una VM Windows exportada desde VMware se importa pero hace BSOD al primer arranque",
"bsodBody": "Windows es sensible a cambios de controlador de disco. Bien: (a) instala los drivers VirtIO <em>antes</em> de exportar desde VMware, o (b) mantén el controlador SCSI como <code>lsi</code> (el valor por defecto) y solo cambia a VirtIO SCSI tras que el guest arranque y puedas instalar los drivers VirtIO en Windows.",
"zeroTitle": "El parser de OVF reporta 0 discos",
"zeroBody": "El descriptor OVF usa un estilo inusual de referencia a disco. Abre el .ovf en un editor de texto y confirma que cada disco tiene una entrada <code>&lt;File ovf:href=\"...vmdk\" ...&gt;</code>. Si la extensión del archivo es inusual (p. ej. solo <code>.dat</code>), renómbralo a <code>.vmdk</code> y actualiza la referencia en el OVF, después vuelve a ejecutar.",
"awkTitle": "awk: syntax error at or near , — el parser falla en cada OVA / OVF",
"awkIntro": "El parser de OVF usa sintaxis específica de gawk (<code>match()</code> con 3 argumentos) que mawk — el <code>awk</code> por defecto en Debian / Proxmox — no soporta. Versiones recientes del script instalan automáticamente gawk en el primer uso vía el par canónico <code>ensure_repositories</code> + <code>install_single_package</code>; si estás ejecutando una copia más antigua, instálalo manualmente:",
"awkCode": "apt-get install -y gawk",
"awkOutro": "Después vuelve a ejecutar la importación.",
"netTitle": "La red no funciona tras el primer arranque",
"netBody": "El modelo de NIC en Proxmox (e1000) puede no coincidir con el que tiene drivers el SO guest, o el bridge que elegiste no es el correcto. Desde la pestaña Hardware de la VM en la UI de Proxmox: cambia Network Device → Model. Comprueba también <code>ip a</code> dentro del guest — a veces la interfaz aparece con un nombre distinto (eth0 vs ens18) y la configuración de red del guest sigue referenciando la antigua."
},
"files": {
"heading": "Archivos implicados",
"code": "scripts/utilities/import_vm_ova_ovf.sh # this script\n/tmp/.proxmenux-import-*/ # temp extraction dir for OVA\n/etc/pve/nodes/<node>/qemu-server/<vmid>.conf # created by qm create\n<storage>/<vmid>/<vmid>-disk-<n>.<fmt> # disk images, format depends on storage"
},
"related": {
"heading": "Relacionado",
"items": [
{
"href": "/docs/utils/export-vm",
"label": "Exportar VM a OVA / OVF",
"tail": " — el compañero del viaje de ida y vuelta."
},
{
"href": "/docs/utils",
"label": "Resumen de Utilidades",
"tail": " — volver al resumen de la sección."
}
]
}
}
+115
View File
@@ -0,0 +1,115 @@
{
"meta": {
"title": "Utilidades de Proxmox — UUP Dump, actualización PVE 8 a 9, exportación/importación OVA | ProxMenux",
"description": "Utilidades del día a día para Proxmox VE: crear ISOs de Windows desde UUP Dump, instalar herramientas CLI curadas, ejecutar una actualización segura del sistema Proxmox, hacer el salto de versión mayor PVE 8 a PVE 9, exportar VMs a OVA / OVF e importar VMs OVA / OVF desde VMware o VirtualBox.",
"ogTitle": "Utilidades de Proxmox — UUP Dump, actualización PVE 8 a 9, exportación/importación OVA",
"ogDescription": "Crear ISOs de Windows, instalar herramientas CLI, ejecutar una actualización segura, actualizar PVE 8 a PVE 9, exportar / importar VMs OVA / OVF.",
"twitterTitle": "Utilidades de Proxmox | ProxMenux",
"twitterDescription": "Creación de ISOs, herramientas CLI, actualización de Proxmox, salto PVE 8→9, portabilidad de VMs OVA / OVF."
},
"header": {
"title": "Utilidades",
"description": "Seis herramientas que completan el flujo de trabajo del día a día en Proxmox VE: creación de ISOs, mantenimiento del sistema y portabilidad de VMs. Cada opción es independiente — elige la que necesites; nada se instala hasta que lo pidas.",
"section": "Utilidades"
},
"intro": {
"title": "Para qué sirve este menú",
"body": "Tres grupos de herramientas no relacionadas pero habitualmente necesarias: <strong>crear una ISO de Windows</strong> desde UUP Dump, <strong>mantener el host Proxmox</strong> (utilidades CLI, actualizaciones, el salto de versión mayor) y <strong>mover VMs dentro y fuera</strong> de Proxmox usando el formato estándar OVA / OVF."
},
"opening": {
"heading": "Abrir el menú",
"body": "Desde el menú principal de ProxMenux, selecciona <strong>Utilities</strong>. Verás esto:",
"imageAlt": "Menú de utilidades con UUP Dump, utilidades del sistema, actualización, upgrade, exportar e importar"
},
"groups": {
"heading": "Tres grupos de herramientas",
"intro": "Las seis herramientas se reparten en tres grupos independientes. Pulsa una tarjeta para saltar a la sección correspondiente.",
"iso": {
"title": "Creación de ISOs",
"body": "Crea ISOs oficiales de Windows desde UUP Dump en el propio host Proxmox.",
"bullets": [
"Enlace compartido de UUP Dump → ISO arrancable",
"Dependencias instaladas automáticamente",
"El resultado aterriza en la ruta de plantillas ISO de Proxmox"
]
},
"maintenance": {
"title": "Mantenimiento del sistema",
"body": "Mantén el host sano: herramientas CLI, actualizaciones periódicas y el salto de versión mayor cuando toca.",
"bullets": [
"Instalador de utilidades del sistema (26 herramientas CLI)",
"Actualización del sistema Proxmox (apt + dist-upgrade)",
"Salto de versión mayor PVE 8 → PVE 9"
]
},
"portability": {
"title": "Portabilidad de VMs",
"body": "Mueve VMs dentro y fuera de Proxmox usando el formato estándar OVA / OVF.",
"bullets": [
"Exportar VM de Proxmox → OVA / OVF",
"Importar OVA / OVF → VM de Proxmox",
"Compatible con VMware y VirtualBox"
]
}
},
"upgradeWarn": {
"title": "El salto PVE 8 → 9 es destructivo y no reversible",
"body": "Un salto de versión mayor reescribe la base Debian (Bookworm → Trixie) y el stack de Proxmox en sitio. No hay ruta de rollback — necesitas <strong>backups verificados</strong> de cada VM y CT y <strong>acceso por consola / IPMI / iKVM</strong> antes de empezar. La herramienta de upgrade se niega a ejecutarse desde el terminal web de Proxmox por esta razón."
},
"isoSection": {
"heading": "Creación de ISOs",
"body": "Crea una ISO de instalación de Windows actualizada directamente en el host Proxmox. El script automatiza todo el flujo de UUP Dump: instalación de dependencias (aria2c, cabextract, wimlib-imagex, …), descarga paralelizada de los archivos de actualización vía aria2 y conversión en una única ISO arrancable que aterriza en <code>/var/lib/vz/template/iso</code> lista para asociar a una VM.",
"options": [
{
"title": "UUP Dump ISO Creator",
"description": "Crea una ISO de instalación de Windows actualizada desde un enlace compartido de UUP Dump. Dependencias, descarga y conversión totalmente automatizadas; la ISO resultante aterriza en /var/lib/vz/template/iso lista para crear una VM.",
"href": "/docs/utils/UUp-Dump-ISO-Creator"
}
]
},
"maintenanceSection": {
"heading": "Mantenimiento del sistema",
"body": "Tres herramientas cubren el trabajo del host del día a día y el ocasional. <strong>Instalador de utilidades del sistema</strong> configura las herramientas CLI que realmente usas tras una instalación recién hecha. <strong>Actualización del sistema Proxmox</strong> es la rutina semanal / mensual de higiene. <strong>Actualizar PVE 8 a PVE 9</strong> es la gran mudanza una vez por ciclo mayor — se trata con compuertas de seguridad adicionales porque no es reversible.",
"options": [
{
"title": "Instalador de utilidades del sistema",
"description": "Selector curado para 26 herramientas CLI (htop, btop, iperf3, jq, tmux, ncdu, ...) con selección personalizada o grupos predefinidos (básico, dev, compresión, multiplexores, análisis, red). Usa el flujo canónico de repo + comando de verificación.",
"href": "/docs/utils/system-utils"
},
{
"title": "Actualización del sistema Proxmox",
"description": "Higiene de repos + apt update + apt dist-upgrade con preguntar antes de reiniciar. Detecta la versión mayor de PVE (8 o 9) y enruta al worker correspondiente. Cambia a sin suscripción, elimina paquetes conflictivos, ejecuta autoremove.",
"href": "/docs/utils/system-update"
},
{
"title": "Actualizar PVE 8 a PVE 9",
"description": "Salto de versión mayor (Debian Bookworm → Trixie + PVE 8 → 9). Comprobaciones previas, migración de repositorios, modo automatizado o interactivo, validación post-upgrade y reinicio. Se niega a ejecutarse desde el terminal web.",
"href": "/docs/utils/upgrade-pve8-pve9"
}
]
},
"portabilitySection": {
"heading": "Portabilidad de VMs (OVA / OVF)",
"body": "OVA y OVF son los formatos de empaquetado entre hipervisores del estándar DMTF — soportados por VMware, VirtualBox y Proxmox. Las dos herramientas están diseñadas para hacer ida y vuelta: una VM exportada desde Proxmox se puede importar de vuelta, y viceversa. Úsalas para migrar cargas de trabajo desde ESXi, hacer un backup portable de una VM o compartir una VM preparada con alguien que use VirtualBox.",
"options": [
{
"title": "Exportar VM a OVA / OVF",
"description": "Convierte una VM de Proxmox en un archivo OVA portable o un directorio OVF. Esquema estándar DMTF, manifiesto SHA1, discos VMDK en formato streamOptimized. Importable en VMware (ESXi / Workstation / Fusion), VirtualBox y de vuelta a Proxmox.",
"href": "/docs/utils/export-vm"
},
{
"title": "Importar VM desde OVA / OVF",
"description": "Trae una exportación de VMware / VirtualBox / ProxMenux de vuelta a Proxmox. Extrae OVA automáticamente, parsea los metadatos OVF, crea la VM e importa cada disco al formato nativo del almacenamiento.",
"href": "/docs/utils/import-vm"
}
]
},
"diskSpaceCallout": {
"title": "Nota sobre espacio en disco para exportar / importar",
"body": "Ambas herramientas convierten formatos de disco: la exportación usa <code>qemu-img convert -O vmdk -o subformat=streamOptimized</code>; la importación usa <code>qm importdisk</code> para convertir de vuelta al formato nativo del almacenamiento (qcow2 / raw). Planea <strong>~120% del tamaño virtual del disco</strong> para OVF y <strong>~220%</strong> para OVA — la conversión escribe el disco completo antes de cualquier compresión. Comprueba que el directorio de destino tiene margen antes de empezar."
},
"fitsTogether": {
"heading": "Cómo encaja el menú",
"body": "Cada herramienta tiene un script dedicado bajo <code>scripts/utilities/</code>. La Actualización del sistema Proxmox es un wrapper que delega en uno de dos scripts worker en <code>scripts/global/</code> según la versión mayor detectada (PVE 8 o PVE 9). El salto PVE 8 → 9 expone dos acciones extra de menú dentro de su propio flujo — una <em>Comprobación previa al upgrade</em> independiente (ejecuta <code>pve8to9 --full</code>) y una <em>Guía manual de upgrade</em> de solo lectura (runbook de 17 pasos) — para los usuarios que quieren inspeccionar u operar a mano en lugar de la ruta automatizada."
}
}
@@ -0,0 +1,162 @@
{
"meta": {
"title": "Actualización del sistema Proxmox | ProxMenux Documentation",
"description": "Ejecuta la secuencia oficial de upgrade de Proxmox (apt update + apt full-upgrade -y) y añade la higiene de repos, comprobación de paquetes esenciales, escaneo de sanity de LVM, autoremove/autoclean y preguntar antes de reiniciar que la guía de upgrade también recomienda. Detecta la versión mayor en ejecución automáticamente.",
"ogTitle": "Actualización del sistema Proxmox | ProxMenux Documentation",
"ogDescription": "apt full-upgrade / dist-upgrade oficial envuelto con higiene de repos, autoremove y un preguntar antes de reiniciar inteligente."
},
"header": {
"title": "Actualización del sistema Proxmox",
"description": "Wrapper que detecta la versión mayor de Proxmox en ejecución y delega en el worker correspondiente (PVE 8 o PVE 9). Los repos se limpian, se habilita la fuente sin suscripción, se actualizan todos los paquetes, se eliminan los paquetes conflictivos y el sistema se limpia después. El preguntar antes de reiniciar solo se dispara cuando el kernel realmente se ha actualizado.",
"section": "Utilidades"
},
"calloutWhat": {
"title": "Qué hace",
"body": "Lleva el host al último nivel de parches de su versión mayor actual. <strong>No</strong> hace el salto entre versiones mayores — para PVE 8 → PVE 9 mira <link>Actualizar PVE 8 a PVE 9</link>."
},
"official": {
"heading": "La recomendación oficial de Proxmox",
"intro": "La guía de upgrade de la propia Proxmox para un host en ejecución (dentro de la misma versión mayor) es ejecutar:",
"code": "apt update && apt full-upgrade -y",
"outro": "Esa única línea es el comando oficial en cualquier release actual de Proxmox. La parte difícil no es el upgrade en sí; es asegurar que los repositorios están limpios, que están habilitados los correctos y que el host queda en un estado razonable después."
},
"onTop": {
"heading": "Qué hace ProxMenux encima — verificado contra el script",
"intro": "Esta opción ejecuta <strong>exactamente</strong> el comando apt de arriba, envuelto con la higiene de repos y la limpieza post-upgrade que la guía oficial de upgrade también recomienda. La lista de abajo mapea 1:1 a <code>scripts/utilities/proxmox_update.sh</code> y a los scripts worker por versión — nada implícito, cada paso está en el código:",
"items": [
"<strong>Detecta la versión mayor de PVE</strong> (<code>pveversion | grep -oP ''pve-manager/\\K[0-9]+''</code>) y despacha a <code>update-pve8.sh</code> o <code>update-pve9_2.sh</code> para que se usen el codename y las URLs de repo correctas.",
"<strong>Limpia los repositorios</strong> antes de tocar apt: deshabilita la fuente enterprise (que devuelve 401 sin suscripción), elimina archivos de repo heredados y escribe una fuente sin suscripción limpia para el codename del host.",
"<strong>Ejecuta el upgrade no interactivamente</strong> con <code>DEBIAN_FRONTEND=noninteractive</code> y <code>--force-confdef --force-confold</code> — esto significa que si un archivo de configuración que ya modificaste también cambió upstream, tu versión se queda en su sitio. Sin sobrescrituras silenciosas de configuraciones propias.",
"<strong>Instala paquetes esenciales de Proxmox</strong> si falta alguno (<code>zfsutils-linux</code>, <code>proxmox-backup-restore-image</code>, <code>chrony</code>).",
"<strong>Comprobación de sanity de metadatos LVM</strong> contra cabeceras PV sueltas de discos en passthrough (solo aviso, sin arreglo automático).",
"<strong>Limpia después:</strong> <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code>.",
"<strong>Preguntar antes de reiniciar</strong> solo si el kernel realmente cambió (presencia de <code>/var/run/reboot-required</code> o <code>linux-image</code> en el log del upgrade)."
]
},
"calloutOneSentence": {
"title": "En una frase",
"body": "El mismo upgrade que Proxmox te dice que ejecutes, más la limpieza de repos, la comprobación de paquetes esenciales, el escaneo de sanity de LVM, el autoremove/autoclean después y un preguntar antes de reiniciar solo cuando toca."
},
"confirm": {
"heading": "Diálogo de confirmación",
"intro": "Seleccionar la opción abre un resumen de lo que va a hacer el worker, requiriendo una confirmación explícita:",
"imageAlt": "Diálogo de confirmación de Actualización del sistema Proxmox listando higiene de repos, actualizaciones de paquetes, limpieza"
},
"routes": {
"heading": "Cómo enruta el wrapper",
"nodes": {
"source": {
"label": "proxmox_update.sh",
"detail": "pveversion |\ngrep -oP ''pve-manager/\\K[0-9]+''"
},
"bridge": {
"label": "Selección del worker",
"detail": "PVE 8 → update-pve8.sh\nPVE 9 → update-pve9_2.sh"
},
"target": {
"label": "Post-actualización",
"detail": "apt-get autoremove\napt-get autoclean\nPreguntar antes de reiniciar si toca"
}
}
},
"worker": {
"heading": "Qué hace el worker",
"intro": "Ambos workers (<code>scripts/global/update-pve8.sh</code> para PVE 8 y <code>scripts/global/update-pve9_2.sh</code> para PVE 9) siguen el mismo esquema, con URLs de repo y nombres de paquete propios de cada versión:",
"items": [
"<strong>Higiene de repos.</strong> Elimina entradas duplicadas de <code>/etc/apt/sources.list</code> y <code>/etc/apt/sources.list.d/</code>. Comenta el repo enterprise si el host no tiene suscripción y escribe / habilita la fuente sin suscripción.",
"<strong>Apt update + full-upgrade.</strong> Trae las últimas listas de paquetes y aplica todas las actualizaciones disponibles para la versión mayor actual, ejecutándose con <code>DEBIAN_FRONTEND=noninteractive</code> y <code>--force-confdef --force-confold</code> para que cualquier archivo de configuración que personalizaste mantenga su contenido actual cuando upstream también lo cambió.",
"<strong>Comprobación de paquetes esenciales.</strong> Instala <code>zfsutils-linux</code>, <code>chrony</code>, <code>ifupdown2</code> y unos pocos más si el host no los tiene.",
"<strong>Comprobación de sanity de LVM / almacenamiento.</strong> Repara cabeceras PV faltantes si se detectan.",
"<strong>Eliminación de paquetes conflictivos.</strong> Quita paquetes conocidos por chocar en Proxmox (p. ej. algunos demonios de sincronización horaria que pelean con chrony)."
]
},
"post": {
"heading": "Limpieza post-actualización y reinicio",
"intro": "Tras salir el worker, el wrapper ejecuta:",
"code": "apt-get autoremove -y # drop unused dependencies pulled in by old packages\napt-get autoclean # drop downloaded .deb files no longer in the index",
"afterCode": "Después comprueba si hace falta un reinicio. Dos señales disparan el prompt:",
"items": [
"<code>/var/run/reboot-required</code> existe (creado por el hook post-install del paquete del kernel)",
"El log del upgrade contiene entradas de <code>linux-image</code> (el kernel se actualizó de verdad)"
],
"outro": "Si alguna es cierta, un diálogo whiptail pregunta <em>\"Some changes require a reboot to take effect. Do you want to restart now?\"</em>. Decline para seguir corriendo en el kernel antiguo hasta que elijas reiniciar manualmente (p. ej. durante una ventana de mantenimiento planificada)."
},
"end": {
"heading": "Qué ves al final",
"intro": "Cuando el worker termina, el terminal muestra la salida de la limpieza y (si el kernel cambió) el preguntar antes de reiniciar:",
"imageAlt": "Resumen de finalización de Actualización del sistema Proxmox con salida de limpieza y preguntar antes de reiniciar"
},
"calloutDeclineReboot": {
"title": "Decline el reinicio solo si sabes por qué",
"body": "Correr en un kernel antiguo tras actualizar <code>linux-image-*</code> significa que estás en un sistema medio actualizado: userspace nuevo, kernel viejo. La mayoría del tiempo las cosas funcionan, pero los módulos ZFS, grupos IOMMU, KSMBD y cualquier driver fuera del árbol solo cuadran con el kernel para el que fueron construidos — un desajuste produce fallos oscuros. Reinicia en el primer momento razonable."
},
"noSub": {
"heading": "Cuándo ocurre el cambio a sin suscripción",
"intro": "Proxmox entrega los hosts con el repo enterprise habilitado por defecto. Sin una suscripción de pago, ese repo devuelve 401 en <code>apt-get update</code>. El worker detecta esto y:",
"items": [
"Comenta (o deshabilita) <code>/etc/apt/sources.list.d/pve-enterprise.list</code> (o el equivalente deb822)",
"Escribe <code>/etc/apt/sources.list.d/pve-no-subscription.list</code> (o el deb822 <code>proxmox.sources</code> para PVE 9) con el codename correspondiente (<code>bookworm</code> para PVE 8, <code>trixie</code> para PVE 9)",
"Vuelve a ejecutar <code>apt-get update</code>"
],
"outro": "Si tienes una suscripción de pago, comenta la fuente sin suscripción y descomenta la enterprise antes de ejecutar esta opción."
},
"cluster": {
"heading": "Consideraciones de clúster",
"calloutTitle": "En clústeres: actualiza un nodo a la vez",
"calloutBody": "En un clúster Proxmox, ejecuta esta opción en <strong>un nodo a la vez</strong> y espera a que el reinicio se complete antes de pasar al siguiente. Migra primero los guests fuera del nodo para evitar una interrupción de servicio en todo el clúster. Versiones menores mezcladas (p. ej. 8.4.1 y 8.4.5) funcionan bien durante horas; kernels en ejecución mezclados pueden producir comportamientos inesperados en guests gestionados por HA."
},
"doesnt": {
"heading": "Qué no hace",
"items": [
"<strong>Salto de versión mayor.</strong> 8 → 9 es una operación aparte — mira <link>Actualizar PVE 8 a PVE 9</link>.",
"<strong>Backup.</strong> Sin snapshots, sin rollback. Las operaciones de apt no son transaccionales. Combínalo con tu disciplina normal de backups (PBS, vzdump, snapshots ZFS).",
"<strong>Actualizaciones de contenedores / VMs.</strong> Solo se actualiza el host; los guests se quedan en paz.",
"<strong>Actualizaciones de firmware.</strong> Microcódigo de CPU, firmware de NIC, BIOS — fuera de alcance."
]
},
"troubleshooting": {
"heading": "Solución de problemas",
"items": [
{
"title": "apt update falla con 401 Unauthorized",
"body": "El repo enterprise sigue habilitado pero no tienes suscripción. El worker debería detectarlo y cambiar automáticamente; si no lo hizo, comenta la línea en <code>/etc/apt/sources.list.d/pve-enterprise.list</code> (o pon <code>Enabled: false</code> en el deb822 <code>pve-enterprise.sources</code>) y vuelve a ejecutar."
},
{
"title": "dist-upgrade se queda colgado en \"Configuring grub-pc\"",
"body": "Un prompt de dpkg está preguntando en qué dispositivo(s) instalar GRUB. El wrapper pasa <code>--force-confold</code> para archivos de configuración pero la instalación del cargador de arranque es un prompt aparte. Usa <kbd>Tab</kbd> + <kbd>Space</kbd> para seleccionar todos tus discos de arranque, después OK. Mejor evitarlo seleccionando los discos de arranque una vez con <code>dpkg-reconfigure grub-pc</code> de antemano."
},
{
"title": "El kernel se actualizó pero los nuevos módulos faltan para un driver fuera del árbol",
"body": "Los módulos fuera del árbol (NVIDIA, ZFS vía DKMS, drivers de NIC propios) necesitan reconstruirse contra el nuevo kernel. La mayoría los gestiona automáticamente DKMS durante el upgrade — confirma con <code>dkms status</code>. Si falta algo: <code>dkms autoinstall</code>."
},
{
"title": "El preguntar antes de reiniciar no apareció pero estoy seguro de que el kernel cambió",
"body": "Tienen que coincidir dos señales (<code>/var/run/reboot-required</code> y <code>linux-image</code> en el log del upgrade). Si el archivo marcador se borró pero el log se está parseando mal, reinicia manualmente con <code>shutdown -r now</code>. Para confirmar que hubo una actualización de kernel: <code>grep linux-image /var/log/apt/history.log</code>."
}
]
},
"files": {
"heading": "Archivos implicados",
"code": "scripts/utilities/proxmox_update.sh # this script (wrapper)\nscripts/global/update-pve8.sh # worker for PVE 8 hosts\nscripts/global/update-pve9_2.sh # worker for PVE 9 hosts\nscripts/global/common-functions.sh # cleanup_duplicate_repos used by workers\n/etc/apt/sources.list # may be edited\n/etc/apt/sources.list.d/* # may be edited / created\n/var/run/reboot-required # read to decide on reboot prompt\n/var/log/apt/history.log # read to detect kernel changes"
},
"related": {
"heading": "Relacionado",
"items": [
{
"href": "/docs/utils/upgrade-pve8-pve9",
"label": "Actualizar PVE 8 a PVE 9",
"tail": " — para el salto de versión mayor (herramienta distinta, modelo de seguridad distinto)."
},
{
"href": "/docs/utils/system-utils",
"label": "Instalador de utilidades del sistema",
"tail": " — para instalar las herramientas CLI que quieras alrededor de las actualizaciones (htop / btop / ncdu)."
},
{
"href": "/docs/utils",
"label": "Resumen de Utilidades",
"tail": " — volver al resumen de la sección."
}
]
}
}
@@ -0,0 +1,257 @@
{
"meta": {
"title": "Instalador de utilidades del sistema | ProxMenux Documentation",
"description": "Instalador curado para 26 utilidades CLI (htop, btop, iperf3, jq, tmux, ncdu, ...) en Proxmox VE. Selección personalizada o grupos predefinidos (básico, dev, compresión, multiplexores, análisis, red). Usa el flujo canónico ensure_repositories + install_single_package.",
"ogTitle": "Instalador de utilidades del sistema | ProxMenux Documentation",
"ogDescription": "Instala herramientas CLI curadas en Proxmox VE con un clic o con selección personalizada."
},
"header": {
"title": "Instalador de utilidades del sistema",
"description": "Selector curado para 26 utilidades CLI definidas en la lista canónica PROXMENUX_UTILS. Ofrece selección personalizada, instalar todo, seis grupos predefinidos y una comprobación de verificación de instalaciones. Usa el par compartido ensure_repositories() + install_single_package() para que la configuración de repos y el feedback por paquete se mantengan consistentes en todo el proyecto.",
"section": "Utilidades"
},
"info": {
"title": "Qué hace",
"body": "Instala herramientas CLI de una lista curada de 26 paquetes. Cada instalación pasa por el mismo flujo canónico: <code>ensure_repositories</code> configura los repos Proxmox + Debian para la versión mayor de PVE en ejecución, después <code>install_single_package</code> ejecuta la instalación y verifica que el comando resultante esté en PATH."
},
"opening": {
"heading": "Abrir el instalador",
"intro": "Desde el menú Utilities, elige <strong>System Utilities Installer</strong>. El menú principal ofrece nueve opciones:",
"imageAlt": "Menú del instalador de utilidades del sistema con selección personalizada, ALL, grupos predefinidos y verificar"
},
"actions": {
"heading": "Las 9 acciones del menú",
"headerOption": "Opción",
"headerBehaviour": "Comportamiento",
"rows": [
{
"option": "1. Selección personalizada",
"behaviourRich": "Checklist de diálogo con los 26 paquetes. Usa SPACE para alternar, ENTER para confirmar; solo se instalan los seleccionados."
},
{
"option": "2. Instalar TODAS las utilidades",
"behaviourRich": "Instalación de un tirón de todos los paquetes en <code>PROXMENUX_UTILS</code>. Úsalo tras una instalación recién hecha de Proxmox."
},
{
"option": "3. Básico",
"behaviourRich": "<code>grc</code>, <code>htop</code>, <code>tree</code>, <code>curl</code>, <code>wget</code>"
},
{
"option": "4. Desarrollo",
"behaviourRich": "<code>git</code>, <code>vim</code>, <code>nano</code>"
},
{
"option": "5. Compresión",
"behaviourRich": "<code>zip</code>, <code>unzip</code>, <code>rsync</code>"
},
{
"option": "6. Multiplexores de terminal",
"behaviourRich": "<code>screen</code>, <code>tmux</code>"
},
{
"option": "7. Análisis",
"behaviourRich": "<code>jq</code>, <code>ncdu</code>, <code>iotop</code>"
},
{
"option": "8. Red",
"behaviourRich": "<code>iperf3</code>, <code>nethogs</code>, <code>nmap</code>, <code>tcpdump</code>, <code>lsof</code>"
},
{
"option": "9. Verificar instalaciones",
"behaviourRich": "Recorre cada entrada de <code>PROXMENUX_UTILS</code>, comprueba si el comando de verificación está en PATH, imprime un resumen Disponible / Faltante."
}
]
},
"packages": {
"heading": "Los 26 paquetes",
"intro": "Definidos en el compartido <code>scripts/global/utils-install-functions.sh</code> como <code>PROXMENUX_UTILS</code> (formato: <code>package:verify_command:description</code>). Otros scripts de ProxMenux (p. ej. los lanzadores de monitorización de red para iftop / iptraf-ng / iperf3) reutilizan entradas de esta lista para que paquete + comando de verificación se mantengan sincronizados.",
"headerPackage": "Paquete",
"headerVerify": "Comando de verificación",
"headerDescription": "Descripción",
"rows": [
{
"package": "axel",
"verify": "axel",
"description": "Acelerador de descargas"
},
{
"package": "aria2",
"verify": "aria2c",
"description": "Descargador multi-origen"
},
{
"package": "btop",
"verify": "btop",
"description": "Monitor de recursos moderno"
},
{
"package": "cabextract",
"verify": "cabextract",
"description": "Extraer archivos CAB"
},
{
"package": "chntpw",
"verify": "chntpw",
"description": "Editar registro / contraseñas de Windows"
},
{
"package": "dos2unix",
"verify": "dos2unix",
"description": "Convertir archivos de texto DOS / Unix"
},
{
"package": "genisoimage",
"verify": "genisoimage",
"description": "Crear imágenes ISO"
},
{
"package": "grc",
"verify": "grc",
"description": "Coloreador genérico de logs"
},
{
"package": "htop",
"verify": "htop",
"description": "Visor interactivo de procesos"
},
{
"package": "iftop",
"verify": "iftop",
"description": "Uso de red en tiempo real"
},
{
"package": "intel-gpu-tools",
"verify": "intel_gpu_top",
"description": "Herramientas para GPU Intel"
},
{
"package": "iotop",
"verify": "iotop",
"description": "Monitorizar uso de I/O de disco"
},
{
"package": "iperf3",
"verify": "iperf3",
"description": "Pruebas de ancho de banda de red"
},
{
"package": "ipset",
"verify": "ipset",
"description": "Gestionar conjuntos de IPs"
},
{
"package": "iptraf-ng",
"verify": "iptraf-ng",
"description": "Herramienta de monitorización de red"
},
{
"package": "libguestfs-tools",
"verify": "virt-filesystems",
"description": "Utilidades de disco de VM"
},
{
"package": "msr-tools",
"verify": "rdmsr",
"description": "Acceso a MSRs de la CPU"
},
{
"package": "net-tools",
"verify": "netstat",
"description": "Herramientas de red heredadas"
},
{
"package": "plocate",
"verify": "locate",
"description": "Localizar archivos rápidamente"
},
{
"package": "s-tui",
"verify": "s-tui",
"description": "Stress-Terminal UI"
},
{
"package": "sshpass",
"verify": "sshpass",
"description": "Login SSH no interactivo"
},
{
"package": "tmux",
"verify": "tmux",
"description": "Multiplexor de terminal"
},
{
"package": "unzip",
"verify": "unzip",
"description": "Extraer archivos ZIP"
},
{
"package": "wimtools",
"verify": "wimlib-imagex",
"description": "Gestionar imágenes WIM"
},
{
"package": "zip",
"verify": "zip",
"description": "Crear archivos ZIP"
},
{
"package": "libguestfs-tools",
"verify": "virt-filesystems",
"description": "Utilidades de disco de VM"
}
]
},
"howItWorks": {
"heading": "Cómo funciona la instalación de un paquete",
"items": [
"<code>ensure_repositories</code> detecta PVE 8 o 9, escribe los archivos de fuentes Proxmox sin suscripción + Debian si faltan, ejecuta <code>apt-get update</code>.",
"<code>install_single_package \"pkg\" \"verify_cmd\" \"description\"</code> ejecuta <code>apt-get install -y \"$pkg\"</code> con feedback (<code>msg_info</code> / <code>msg_ok</code> / <code>msg_error</code>)."
],
"verifyIntro": "Tras instalar, el comando de verificación se comprueba con <code>command -v \"$verify_cmd\"</code>. Tres desenlaces:",
"verifyOutcomes": [
"<strong>0 (éxito):</strong> comando disponible, paquete contado como <em>Successful</em>.",
"<strong>1 (fallido):</strong> apt falló, contado como <em>Failed</em>.",
"<strong>2 (advertencia):</strong> apt tuvo éxito pero el comando aún no está en PATH (refresco de hash pendiente) — contado como <em>With warnings</em>."
],
"summary": "Al final de una instalación de grupo / personalizada, un diálogo de resumen muestra los conteos de <em>Successful / With warnings / Failed</em>."
},
"verify": {
"heading": "Verificar instalaciones",
"intro": "La opción 9 es de solo lectura: recorre <code>PROXMENUX_UTILS</code> y ejecuta <code>command -v</code> para cada comando de verificación. La salida se ve así:",
"code": "Total: 26\nAvailable: 18\nMissing: 8\n\n✓ axel - Download accelerator\n✓ aria2c - Multi-source downloader\n✓ btop - Modern resource monitor\n✗ cabextract - Extract CAB files\n✓ dos2unix - Convert DOS / Unix text files\n✗ genisoimage - Create ISO images\n✓ grc - Generic log colorizer\n...",
"outro": "Útil antes de ejecutar scripts que dependen de estas herramientas (p. ej. <code>uup_dump_iso_creator.sh</code> necesita <code>aria2c</code> + <code>cabextract</code> + <code>wimlib-imagex</code>). Si falta algo, ejecuta la instalación del grupo correspondiente o elige los paquetes que faltan mediante selección personalizada."
},
"troubleshoot": {
"heading": "Solución de problemas",
"reposTitle": "\"Failed to configure repositories. Installation aborted.\"",
"reposBody": "El host no puede alcanzar los repos de Proxmox o Debian, o no tiene la configuración base esperada. Desde una consola: <code>cat /etc/apt/sources.list /etc/apt/sources.list.d/*.sources</code> y <code>apt-get update</code> manualmente para ver el error real.",
"warningsTitle": "Un paquete se reporta como \"With warnings\" pero el comando funciona tras cerrar el menú",
"warningsBody": "Esperado. Tras <code>apt-get install</code>, el nuevo binario está en disco pero la caché de PATH del shell actual (<code>hash -t</code>) aún no lo sabe. ProxMenux ejecuta <code>hash -r</code> tras cada instalación, pero en algunos shells el refresco solo surte efecto en el siguiente prompt. Abre un nuevo shell y el comando funcionará.",
"hangsTitle": "Un apt install se queda colgado",
"hangsBody": "Lo más probable es que un prompt de debconf esté bloqueado detrás de la salida silenciada. El script envuelve todas las llamadas de apt con <code>DEBIAN_FRONTEND=noninteractive</code>, que normalmente suprime los prompts, pero algunos paquetes aún requieren entrada del usuario. Cancela con <kbd>Ctrl</kbd>+<kbd>C</kbd>, ejecuta <code>apt-get install -y &lt;pkg&gt;</code> manualmente desde un shell para ver el prompt y decidir."
},
"files": {
"heading": "Archivos implicados",
"code": "scripts/utilities/system_utils.sh # this script\nscripts/global/utils-install-functions.sh # PROXMENUX_UTILS, ensure_repositories,\n # install_single_package\n/etc/apt/sources.list # may be touched by ensure_repositories\n/etc/apt/sources.list.d/proxmox.sources # created if missing (PVE 9)\n/etc/apt/sources.list.d/debian.sources # created if missing (PVE 9)\n/etc/apt/sources.list.d/pve-no-subscription.list # created if missing (PVE 8)"
},
"related": {
"heading": "Relacionado",
"items": [
{
"href": "/docs/utils/system-update",
"label": "Actualización del sistema Proxmox",
"tailRich": " — para el <code>apt dist-upgrade</code> real en el host."
},
{
"href": "/docs/network/monitoring",
"label": "Herramientas de monitorización en vivo (Red)",
"tailRich": " — usa iftop / iptraf-ng / iperf3 de esta misma lista."
},
{
"href": "/docs/utils",
"label": "Resumen de Utilidades",
"tailRich": " — volver al resumen de la sección."
}
]
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,161 @@
{
"meta": {
"title": "UUP Dump ISO Creator | ProxMenux Documentation",
"description": "Crea una ISO de instalación de Windows actualizada en tu host Proxmox usando el UUP Dump ISO Creator de ProxMenux. Automatiza la instalación de dependencias, descarga y conversión de archivos UUP en una ISO arrancable lista para crear una VM.",
"ogTitle": "UUP Dump ISO Creator | ProxMenux Documentation",
"ogDescription": "Crea una ISO de Windows actualizada desde UUP Dump usando ProxMenux. Dependencias, descarga y conversión totalmente automatizadas.",
"ogImageAlt": "UUP Dump ISO Creator de ProxMenux"
},
"header": {
"title": "UUP Dump ISO Creator",
"description": "Crea una ISO de instalación de Windows actualizada en tu host Proxmox usando UUP Dump. ProxMenux se encarga de las dependencias, descarga los archivos UUP en paralelo, ejecuta el conversor oficial y deja la ISO final en el almacenamiento de ISOs de Proxmox — lista para asociar a una nueva VM Windows.",
"section": "Utilidades"
},
"intro": {
"title": "Qué hace este script",
"body": "Tú aportas una URL de UUP Dump (la que uupdump.net genera tras elegir build, idioma y edición) y el script hace el resto: instala las dependencias que falten, descarga el conversor de UUP Dump, descarga cada archivo de payload UUP con aria2, ensambla una ISO arrancable de Windows y la mueve al almacenamiento de ISOs de Proxmox para que el creador de VM pueda montarla en el primer arranque."
},
"hero": {
"imageAlt": "Entrada UUP Dump ISO Creator en ProxMenux",
"caption": "Entrada UUP Dump ISO Creator en ProxMenux"
},
"what": {
"heading": "¿Qué es UUP Dump?",
"intro": "UUP Dump es un servicio comunitario que te permite descargar los payloads en bruto de la Unified Update Platform (UUP) que el propio Windows Update usa para entregar Windows. Esos payloads se pueden volver a ensamblar en una ISO arrancable estándar. Es la manera de obtener:",
"items": [
"El último build de Windows (incluyendo canales Insider Preview).",
"Un build histórico específico que ya no aparece en la página de descargas de Microsoft.",
"Archivos limpios y sin modificar, sacados directamente de los servidores de Microsoft.",
"La combinación exacta de ediciones e idiomas que quieres en una sola ISO."
],
"learnMore": "Más información en la <extlink>página del proyecto UUP Dump</extlink>."
},
"automates": {
"heading": "Qué automatiza el script"
},
"dependencies": {
"heading": "Dependencias",
"intro": "Lo primero que hace el script es comprobar las herramientas necesarias para descargar los payloads UUP y ensamblar la ISO. Las que falten se instalan con <code>apt-get</code>:",
"headerPackage": "Paquete",
"headerRole": "Rol",
"rows": [
{
"pkg": "curl",
"roleRich": "Peticiones HTTP (bootstrap del conversor)."
},
{
"pkg": "aria2",
"roleRich": "Descargador paralelo usado para cada payload UUP."
},
{
"pkg": "cabextract",
"roleRich": "Extrae paquetes CAB de Microsoft."
},
{
"pkg": "wimtools",
"roleRich": "Construye <code>install.wim</code> (wimlib-imagex)."
},
{
"pkg": "genisoimage",
"roleRich": "Escribe la ISO arrancable final (o <code>mkisofs</code>)."
},
{
"pkg": "chntpw",
"roleRich": "Ajusta hives del registro de Windows durante la construcción."
}
],
"manualIntro": "Equivalente manual — si alguna vez necesitas instalarlas tú mismo:",
"manualCode": "apt-get install curl aria2 cabextract wimtools genisoimage chntpw"
},
"flow": {
"heading": "Descarga y conversión",
"steps": [
"Detecta el almacenamiento de ISOs de Proxmox (vía <code>pvesm status -content iso</code>) o recae en <code>/var/lib/vz/template/iso</code>.",
"Pregunta por una carpeta base para archivos temporales (por defecto <code>/root/uup-temp</code>).",
"Descarga el conversor de UUP Dump desde <code>git.uupdump.net</code>.",
"Parsea <code>id</code>, <code>pack</code> y <code>edition</code> de la URL que pegas.",
"Llama a <code>https://uupdump.net/get.php?…&aria2=2</code> para generar una lista de descargas de aria2.",
"Descarga cada payload UUP en <code>UUPs/</code> con aria2 (paralelo, reanudable).",
"Ejecuta <code>convert.sh wim UUPs 1</code> del conversor para producir la ISO final.",
"Mueve la ISO al almacenamiento de ISOs de Proxmox y limpia los archivos temporales."
]
},
"aria2": {
"heading": "Flags de descarga de Aria2 usados",
"code": "aria2c --no-conf --console-log-level=warn --log-level=info \\\n --log=aria2_download.log \\\n -x16 -s16 -j5 -c -R \\\n -d\"$destDir\" -i\"$tempScript\"",
"flags": [
"<code>-x16</code> — hasta 16 conexiones por servidor.",
"<code>-s16</code> — divide cada archivo en 16 segmentos.",
"<code>-j5</code> — 5 archivos descargados en paralelo.",
"<code>-c</code> — reanuda descargas parciales.",
"<code>-R</code> — reintenta tras fallos."
],
"runtime": "El tiempo típico ronda los 10 minutos, dominado por la velocidad de tu enlace de internet y la carga del mirror de UUP Dump."
},
"step1": {
"heading": "Paso 1 · Obtener una URL de UUP Dump",
"intro": "Antes de ejecutar el script necesitas una URL de UUP Dump que incluya los parámetros de consulta <code>id</code>, <code>pack</code> y <code>edition</code>. Genérala en <extlink>uupdump.net</extlink>:",
"stepBadge": "Paso",
"items": [
{
"title": "Elige una versión de Windows",
"img": "/iso-creator/step-1-select-version-windows.png",
"caption": "Página principal de UUP Dump — elige una versión de Windows",
"body": "Abre la página de inicio de UUP Dump y elige la versión de Windows que quieres."
},
{
"title": "Elige un build concreto",
"img": "/iso-creator/step-2-select-version-windows.png",
"caption": "Elige un build concreto",
"body": "Elige el build: último, canal Insider Preview o un build más antiguo concreto que aún aparezca listado."
},
{
"title": "Elige un idioma",
"img": "/iso-creator/step-3-select-version-windows.png",
"caption": "Elige un idioma",
"body": "Elige el idioma con el que debe entregarse la ISO."
},
{
"title": "Elige ediciones",
"img": "/iso-creator/step-4-select-version-windows.png",
"caption": "Elige las ediciones a incluir",
"body": "Elige las ediciones a empaquetar en la ISO (Home, Pro, Enterprise, …). Puedes combinar varias."
},
{
"title": "Copia la URL",
"img": "/iso-creator/step-5-select-version-windows.png",
"caption": "Copia la URL desde la barra de direcciones",
"bodyRich": "En la página final, copia la URL <em>desde la barra de direcciones del navegador</em>. Debe contener <code>id=…</code>, <code>pack=…</code> y <code>edition=…</code>. Esa es la cadena que el script va a parsear."
}
]
},
"step2": {
"heading": "Paso 2 · Ejecutar el creador",
"intro": "Con la URL en mano, abre ProxMenux y lanza el creador:",
"stepBadge": "Paso",
"items": [
{
"title": "Arranca UUP Dump ISO Creator",
"img": "/iso-creator/start-uupdump-iso-creator.png",
"caption": "Arranca UUP Dump ISO Creator desde ProxMenux",
"bodyRich": "En ProxMenux ve a <strong>Utilities → UUP Dump ISO Creator</strong>. El script comprueba dependencias y el directorio de almacenamiento de ISOs antes de pedir entrada."
},
{
"title": "Pega la URL de UUP Dump",
"img": "/iso-creator/add-url-iso-creator.png",
"caption": "Pega la URL que copiaste de uupdump.net",
"body": "Pega la URL en el diálogo de entrada. El script valida que los tres parámetros requeridos están presentes; si falta alguno, aborta limpiamente."
},
{
"title": "Espera a que termine la construcción",
"img": "/iso-creator/end-uupdump-iso-creator.png",
"caption": "Construcción terminada — la ISO está lista en el almacenamiento de ISOs de Proxmox",
"bodyRich": "La consola muestra el progreso de aria2 y luego la salida del conversor. Cuando termina, la ISO aterriza en el almacenamiento de ISOs de Proxmox detectado y está lista para elegirse desde <strong>Create VM → System Windows → Install with ISO from UUP Dump</strong>."
}
]
},
"tempFiles": {
"title": "Archivos temporales",
"body": "Por defecto, los archivos temporales viven bajo <code>/root/uup-temp</code> (<code>uup-temp/</code> para descargas y <code>uup-converter/</code> para el script conversor). El creador limpia ambos tras una ejecución exitosa. En caso de fallo igual limpia y te devuelve al menú para que un reintento empiece desde cero."
}
}