mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 10:52:22 +00:00
docs: review utility documentation in all seven translations
This commit is contained in:
@@ -46,7 +46,7 @@
|
||||
{
|
||||
"format": "OVF",
|
||||
"output": "name-vmid-ts-ovf/",
|
||||
"pros": "~120% disk overhead. Easier to inspect (descriptor is plain XML). Can edit before importing.",
|
||||
"pros": "~120% of virtual disk size. Easier to inspect (descriptor is plain XML). Can edit before importing.",
|
||||
"cons": "Multiple files — must transfer all of them together."
|
||||
}
|
||||
]
|
||||
@@ -55,7 +55,7 @@
|
||||
"heading": "Destination directory",
|
||||
"body": "Pick from presets (<code>/var/lib/vz/dump</code>, <code>/var/lib/vz/template/iso</code>) or enter a manual path. The script validates the directory is writeable and warns if free space looks tight before starting.",
|
||||
"calloutTitle": "Free space rule of thumb",
|
||||
"calloutBody": "For an OVF export of a VM with disks totalling 100 GB virtual: budget ~120 GB free. For an OVA: budget ~220 GB. Sparse / mostly-empty disks may use less, but the conversion writes them out fully before the OVA TAR step compresses anything. If you run out of space mid-export, the temp directory is cleaned up by the EXIT trap and you start over."
|
||||
"calloutBody": "For an OVF export of a VM with disks totalling 100 GB virtual: budget ~120 GB free. For an OVA: budget ~220 GB. Actual usage may be lower for mostly-empty disks. The OVA archive is created with uncompressed TAR while the temporary VMDK files still exist, so allow space for both. If you run out of space mid-export, the temp directory is cleaned up by the EXIT trap and you start over."
|
||||
},
|
||||
"package": {
|
||||
"heading": "What ends up in the package",
|
||||
@@ -120,8 +120,8 @@
|
||||
"noSpaceBody": "Destination ran out of space. The temp directory is auto-cleaned by the EXIT trap. Pick a destination with more headroom (rule of thumb above) and re-run.",
|
||||
"unsupportedHwTitle": "Export completes but VMware refuses to import: \"Unsupported hardware family\"",
|
||||
"unsupportedHwBody": "Some ESXi versions reject OVF descriptors that declare a hardware family they don't recognise. Open the .ovf in a text editor (or extract the .ova first), find <code><vssd:VirtualSystemType></code> and edit it to a value ESXi accepts (e.g. <code>vmx-13</code> for ESXi 6.5+). For a quick workaround, try VirtualBox — it's more permissive.",
|
||||
"nicTitle": "Imported VM in VMware has e1000 NIC but I want VirtIO",
|
||||
"nicBody": "Expected — the OVF only stores the NIC count, not the model. Edit the imported VM's NIC settings in VMware after import. Same applies for SCSI controller (export uses lsilogic for VMware compatibility; change to <code>VirtIO SCSI</code> if your guest supports it).",
|
||||
"nicTitle": "Imported VM uses a different NIC or SCSI controller",
|
||||
"nicBody": "The OVF preserves the NIC count, not the original model. Review the imported VM’s network settings in the destination hypervisor. The export declares an lsilogic SCSI controller for VMware compatibility. When importing back into Proxmox, you can select <code>VirtIO SCSI</code> if the guest has suitable drivers.",
|
||||
"runningTitle": "VM was running and I declined to stop it — export aborted",
|
||||
"runningBody": "The script can't produce a consistent image while disks are being written. Either accept the shutdown prompt next time, or stop the VM manually first (<code>qm shutdown $VMID</code>) and re-run.",
|
||||
"slowTitle": "Disk conversion is slow",
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
},
|
||||
{
|
||||
"label": "qm create + importdisk",
|
||||
"detail": "qm create $VMID\nqm importdisk\n(VMDK → qcow2)\nqm set --scsiN",
|
||||
"detail": "qm create $VMID\nqm importdisk\n(VMDK → storage format)\nqm set --scsiN",
|
||||
"variant": "target"
|
||||
}
|
||||
]
|
||||
@@ -86,7 +86,7 @@
|
||||
},
|
||||
"memWarn": {
|
||||
"title": "Memory unit ambiguity",
|
||||
"body": "The parser <strong>assumes MiB</strong>. If the OVF declares memory in <em>GB</em> (e.g. some VMware exports do), the imported VM will have 1/1024th of the intended RAM. After import, double-check <code>qm config $VMID | grep memory</code> against the source VM's documented RAM and adjust with <code>qm set $VMID --memory <MiB></code> if it's off by a factor of 1024 or 1024²."
|
||||
"body": "The parser normalizes recognized memory units to <strong>MiB</strong>, including bytes, KiB, MiB, GiB and supported textual labels. Missing or unrecognized units are <em>treated as MiB</em>. After import, compare <code>qm config $VMID | grep memory</code> with the source VM’s documented RAM and, if needed, correct it using <code>qm set $VMID --memory <MiB></code>."
|
||||
},
|
||||
"dialog": {
|
||||
"heading": "Import dialog flow",
|
||||
@@ -108,7 +108,7 @@
|
||||
"heading": "Disk import loop",
|
||||
"intro": "For each disk reference in the OVF:",
|
||||
"items": [
|
||||
"<code>qm importdisk $VMID $disk_path $STORAGE</code> — converts the VMDK to the storage-native format (e.g. qcow2 on local-lvm, raw on ZFS) and creates an <code>unusedN:</code> entry in the VM config.",
|
||||
"<code>qm importdisk $VMID $disk_path $STORAGE</code> — imports the disk in a format supported by the target storage and creates an <code>unusedN:</code> entry in the VM configuration.",
|
||||
"The script greps the config for the just-created <code>unusedN</code> reference.",
|
||||
"<code>qm set $VMID --scsiN $unused_disk</code> — attaches the disk as <code>scsi0</code>, <code>scsi1</code>, …",
|
||||
"<code>qm set $VMID --delete unusedN</code> — clears the now-redundant unused marker."
|
||||
@@ -175,11 +175,11 @@
|
||||
"troubleshoot": {
|
||||
"heading": "Troubleshooting",
|
||||
"orphanTitle": "VM was created but disk import failed — orphan VM left behind",
|
||||
"orphanIntro": "Known limitation. The script doesn't auto-clean a partial import. Destroy the orphan with:",
|
||||
"orphanIntro": "When an import fails, the script offers to remove the partial VM and its imported disks. If you declined, or automatic deletion failed, inspect the VM and remove it manually with:",
|
||||
"orphanCode": "qm destroy $VMID --destroy-unreferenced-disks 1",
|
||||
"orphanOutro": "Then fix the underlying cause (likely disk space on the target storage) and re-import.",
|
||||
"memTitle": "Imported VM has 8 MB of RAM (or 8 TB)",
|
||||
"memIntro": "Memory unit ambiguity in the OVF parser. Off by a factor of 1024 → OVF used GB instead of MiB. Fix:",
|
||||
"memIntro": "The parser converts recognized AllocationUnits to MiB. Missing or unsupported units are treated as MiB, so inspect the OVF and compare the imported setting with the source VM. Correct the memory if necessary:",
|
||||
"memCode": "qm set $VMID --memory 8192 # 8 GiB",
|
||||
"bootTitle": "Imported VM doesn't boot — \"No bootable device\"",
|
||||
"bootIntro": "Most common cause: BIOS / UEFI mismatch. The VM was UEFI but Proxmox created it as BIOS. Set the matching firmware:",
|
||||
@@ -188,7 +188,7 @@
|
||||
"bsodTitle": "VMware-exported Windows VM imports but BSODs on first boot",
|
||||
"bsodBody": "Windows is sensitive to disk controller changes. Either: (a) install VirtIO drivers <em>before</em> exporting from VMware, or (b) keep the SCSI controller as <code>lsi</code> (the default) and only switch to VirtIO SCSI after the guest boots and you can install the VirtIO drivers in Windows.",
|
||||
"zeroTitle": "OVF parser reports 0 disks",
|
||||
"zeroBody": "The OVF descriptor uses an unusual disk reference style. Open the .ovf in a text editor and confirm each disk has a <code><File ovf:href=\"...vmdk\" ...></code> entry. If the file extension is unusual (e.g. just <code>.dat</code>), rename it to <code>.vmdk</code> and update the OVF reference, then re-run.",
|
||||
"zeroBody": "The OVF descriptor may use a disk reference style the parser does not recognize. Open the .ovf and look for each disk’s <code><File ovf:href=\"...vmdk\" ...></code> entry. If a disk really is VMDK but has an unusual extension such as <code>.dat</code>, rename it to <code>.vmdk</code> and update the OVF reference. Renaming does not convert a disk’s format.",
|
||||
"awkTitle": "awk: syntax error at or near , — parser fails on every OVA / OVF",
|
||||
"awkIntro": "The OVF parser uses gawk-specific syntax (3-argument <code>match()</code>) which mawk — the default <code>awk</code> on Debian / Proxmox — does not support. Recent versions of the script auto-install gawk on first use via the canonical <code>ensure_repositories</code> + <code>install_single_package</code> pair; if you're running an older copy, install it manually:",
|
||||
"awkCode": "apt-get install -y gawk",
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"title": "System maintenance",
|
||||
"body": "Keep the host healthy: CLI tooling, regular updates, and the major-version upgrade when it's time.",
|
||||
"bullets": [
|
||||
"System Utilities Installer (26 CLI tools)",
|
||||
"System Utilities Installer (25 CLI tools)",
|
||||
"Proxmox System Update (apt + dist-upgrade)",
|
||||
"PVE 8 → PVE 9 major upgrade"
|
||||
]
|
||||
@@ -73,7 +73,7 @@
|
||||
"options": [
|
||||
{
|
||||
"title": "System Utilities Installer",
|
||||
"description": "Curated picker for 26 CLI tools (htop, btop, iperf3, jq, tmux, ncdu, ...) with custom selection or predefined groups (basic, dev, compression, multiplexers, analysis, network). Uses the canonical repo + verify-command flow.",
|
||||
"description": "Curated picker for 25 CLI tools (htop, btop, iperf3, jq, tmux, ncdu, ...) with custom selection or predefined groups (basic, dev, compression, multiplexers, analysis, network). Uses the canonical repo + verify-command flow.",
|
||||
"href": "/docs/utils/system-utils"
|
||||
},
|
||||
{
|
||||
@@ -106,10 +106,10 @@
|
||||
},
|
||||
"diskSpaceCallout": {
|
||||
"title": "A note on disk space for export / import",
|
||||
"body": "Both tools convert disk formats: export uses <code>qemu-img convert -O vmdk -o subformat=streamOptimized</code>; import uses <code>qm importdisk</code> to convert back to the storage-native format (qcow2 / raw). Plan for <strong>~120% of virtual disk size</strong> for OVF and <strong>~220%</strong> for OVA — the conversion writes the full disk before any compression. Check the destination directory has the headroom before you start."
|
||||
"body": "Both tools convert disk formats: export uses <code>qemu-img convert -O vmdk -o subformat=streamOptimized</code>; import uses <code>qm importdisk</code> to convert back to the storage-native format (qcow2 / raw). For export, plan for <strong>~120% of virtual disk size</strong> for OVF and <strong>~220%</strong> for OVA. The OVA archive uses uncompressed TAR and is created while the temporary VMDK files still exist. Check the destination directory has the headroom before you start."
|
||||
},
|
||||
"fitsTogether": {
|
||||
"heading": "How the menu fits together",
|
||||
"body": "Each tool has a dedicated script under <code>scripts/utilities/</code>. The Proxmox System Update is a wrapper that delegates to one of two worker scripts in <code>scripts/global/</code> depending on the detected major version (PVE 8 or PVE 9). The PVE 8 → 9 upgrade exposes two extra menu actions inside its own flow — a stand-alone <em>Pre-upgrade check</em> (runs <code>pve8to9 --full</code>) and a read-only <em>Manual upgrade guide</em> (17-step runbook) — for users who want to inspect or operate by hand instead of the automated path."
|
||||
"body": "Each tool has a dedicated script under <code>scripts/utilities/</code>. Proxmox System Update calls one safe worker in <code>scripts/global/</code>, update-pve-safe.sh, which detects the major version and handles both PVE 8 and PVE 9. The PVE 8 → 9 upgrade offers two extra actions in its own menu: a stand-alone <em>Pre-upgrade check</em> (runs <code>pve8to9 --full</code>) and a read-only <em>Manual upgrade guide</em> (17-step runbook), for users who want to inspect the process or carry it out by hand."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Proxmox System Update | ProxMenux Documentation",
|
||||
"description": "Runs the official Proxmox upgrade sequence (apt update + apt full-upgrade -y) and adds the repo hygiene, essential-package check, LVM sanity scan, autoremove/autoclean and reboot prompt that the upgrade guide also recommends. Detects the running major version automatically.",
|
||||
"description": "Updates packages within the current Proxmox major version with apt-get update and apt full-upgrade -y. Checks disk space and configured repositories, attempts GPG key recovery, checks and repairs old LVM PV headers, rebuilds managed DKMS drivers when needed, runs autoremove/autoclean and offers a reboot when required.",
|
||||
"ogTitle": "Proxmox System Update | ProxMenux Documentation",
|
||||
"ogDescription": "Official apt full-upgrade / dist-upgrade wrapped with repo hygiene, autoremove and a smart reboot prompt."
|
||||
"ogDescription": "apt full-upgrade with repository checks, autoremove/autoclean and a reboot prompt when required."
|
||||
},
|
||||
"header": {
|
||||
"title": "Proxmox System Update",
|
||||
"description": "Wrapper that delegates to a single safe worker (<code>update-pve-safe.sh</code>) which detects the running Proxmox major version by itself. The configured repositories are read through the Proxmox API and kept as they are; a host with no active subscription whose only Proxmox repository is Enterprise is asked before switching to no-subscription. All packages are upgraded, ProxMenux-managed DKMS drivers are rebuilt if a new kernel landed, and the reboot prompt fires only when the kernel actually changed. Also launchable from the <em>Update Now</em> button in the ProxMenux Monitor dashboard header when pending updates are detected.",
|
||||
"description": "Delegates to a single worker (<code>update-pve-safe.sh</code>) that detects the running Proxmox major version. Configured repositories are read through the Proxmox API and preserved; an unsubscribed host with only Enterprise is asked before switching to no-subscription. The worker upgrades packages and rebuilds ProxMenux-managed DKMS drivers for a staged kernel. The wrapper offers a reboot when the system reboot marker exists or the newest installed kernel differs from the running kernel. Also available from <em>Update Now</em> in the ProxMenux Monitor header when pending updates are detected.",
|
||||
"section": "Utilities"
|
||||
},
|
||||
"calloutWhat": {
|
||||
@@ -22,25 +22,25 @@
|
||||
},
|
||||
"onTop": {
|
||||
"heading": "What ProxMenux runs on top — verified against the script",
|
||||
"intro": "This option runs <strong>exactly</strong> the apt command above, wrapped with the repo hygiene, DKMS rebuild for ProxMenux-managed drivers and post-upgrade cleanup the official upgrade guide also recommends. Everything below maps 1:1 to <code>scripts/utilities/proxmox_update.sh</code> and the single safe worker <code>scripts/global/update-pve-safe.sh</code> — nothing implied, every step is in the code:",
|
||||
"intro": "Uses <strong>the same apt full-upgrade operation</strong>, with repository checks, DKMS rebuilding and post-update cleanup. The steps below correspond to <code>scripts/utilities/proxmox_update.sh</code> and its single worker <code>scripts/global/update-pve-safe.sh</code>:",
|
||||
"items": [
|
||||
"<strong>Detects the PVE major version</strong> from inside the worker (<code>pveversion | grep -oP ''pve-manager/\\K[0-9]+''</code>) and adapts the base Proxmox / Debian repo URLs (bookworm on PVE 8, trixie on PVE 9). There is no fan-out to per-version worker scripts — a single safe worker handles both.",
|
||||
"<strong>Detects the PVE major version</strong> inside the worker (<code>pveversion | grep -oP ''pve-manager/\\K[0-9]+''</code>). A single worker handles PVE 8 and PVE 9; configured repositories are preserved unless an unsubscribed host accepts the offered switch.",
|
||||
"<strong>Keeps the configured repositories.</strong> <code>ensure_repositories</code> reads the repositories through the Proxmox repository API, together with the subscription status. A host with an active subscription, or one that already uses the no-subscription or test repository, is left unchanged. A host with no active subscription whose only Proxmox repository is Enterprise is asked whether to switch to no-subscription; declining stops the update with no source changed.",
|
||||
"<strong>Runs the upgrade non-interactively</strong> with <code>DEBIAN_FRONTEND=noninteractive</code> and <code>--force-confdef --force-confold</code> — if a configuration file you already modified also changed upstream, your version stays in place. No silent overwrites of custom configs.",
|
||||
"<strong>Runs the upgrade non-interactively</strong> with <code>DEBIAN_FRONTEND=noninteractive</code> and <code>--force-confdef --force-confold</code>. For dpkg conffile decisions, it accepts the default action when one exists; otherwise it keeps the existing configuration file.",
|
||||
"<strong>Skips forcing optional utilities.</strong> The safe worker does not push <code>zfsutils-linux</code>, <code>chrony</code>, <code>ifupdown2</code> or similar packages onto the host — a Proxmox install that opted out of any of them keeps its choice. Missing packages are surfaced by the higher-level installer flows, not by the update path.",
|
||||
"<strong>LVM metadata sanity check</strong> against stray PV headers from passthrough disks (warn-only, no automatic fix).",
|
||||
"<strong>LVM metadata check and repair.</strong> Detects old PV headers and runs vgck --updatemetadata and vgchange -ay for the affected volume groups. This can change LVM metadata; it is not a warning-only scan.",
|
||||
"<strong>Cleans up afterwards:</strong> <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code>.",
|
||||
"<strong>DKMS rebuild before the reboot prompt.</strong> When the upgrade staged a new kernel, the wrapper calls <code>pmx_rebuild_dkms_after_kernel</code> to rebuild every driver that ProxMenux installed via DKMS against the incoming kernel version — so the modules are ready before the box comes back up. Reboot detection uses <code>/var/run/reboot-required</code> when <code>needrestart</code> is present, and falls back to a <code>dpkg-query</code> comparison between the running kernel and the newest installed <code>proxmox-kernel-*-pve-signed</code> / <code>pve-kernel-*-pve</code> package when it isn't — a signal that survives the many Proxmox hosts that ship without <code>needrestart</code>."
|
||||
"<strong>DKMS rebuild before the reboot prompt.</strong> The worker calls <code>pmx_rebuild_dkms_after_kernel</code> when a newer installed kernel is staged. The wrapper checks <code>/var/run/reboot-required</code> and also uses <code>dpkg-query</code> to compare the kernel reported by <code>uname -r</code> with the newest installed <code>proxmox-kernel-*-pve-signed</code> / <code>pve-kernel-*-pve</code> package. The marker may be absent on hosts without <code>needrestart</code>; the kernel comparison still works in that case."
|
||||
]
|
||||
},
|
||||
"calloutOneSentence": {
|
||||
"title": "In one sentence",
|
||||
"body": "Same upgrade Proxmox tells you to run, plus the repo cleanup, the essential-package check, the LVM sanity scan, the autoremove/autoclean afterwards, and a reboot prompt only when it matters."
|
||||
"body": "Updates host packages, preserves configured repositories unless you accept a switch, checks LVM metadata, rebuilds managed DKMS drivers, cleans up with autoremove/autoclean and offers a reboot when needed."
|
||||
},
|
||||
"confirm": {
|
||||
"heading": "Confirmation dialog",
|
||||
"intro": "Selecting the option opens a summary of what the worker will do, requiring an explicit confirmation:",
|
||||
"imageAlt": "Proxmox System Update confirmation dialog listing repo hygiene, package updates, cleanup"
|
||||
"imageAlt": "Proxmox System Update confirmation dialog with repository checks, package updates and cleanup"
|
||||
},
|
||||
"routes": {
|
||||
"heading": "How the wrapper routes",
|
||||
@@ -61,14 +61,14 @@
|
||||
},
|
||||
"worker": {
|
||||
"heading": "What the worker does",
|
||||
"intro": "A single worker (<code>scripts/global/update-pve-safe.sh</code>) handles both PVE 8 and PVE 9. It detects the major version internally and uses the version-appropriate codename (<code>bookworm</code> or <code>trixie</code>) for its base sources. The stages are:",
|
||||
"intro": "One worker (<code>scripts/global/update-pve-safe.sh</code>) handles PVE 8 (<code>bookworm</code>) and PVE 9 (<code>trixie</code>). It detects the major version internally and checks the existing repository configuration without rewriting the Debian base sources. The stages are:",
|
||||
"items": [
|
||||
"<strong>Sanity checks.</strong> Verifies at least ~1 GB free in <code>/var/cache/apt/archives</code>. Aborts early with a clear message when it fails, so the run doesn't die in the middle of an apt transaction.",
|
||||
"<strong>Repository check.</strong> <code>ensure_repositories</code> reads the repositories and the subscription status. On a host with a usable Proxmox repository it changes nothing; on a host with no active subscription and only the Enterprise repository it asks before switching to no-subscription, and stops the update when the answer is no.",
|
||||
"<strong>Apt update with GPG auto-recovery.</strong> On <code>NO_PUBKEY</code> for any repo (yours or a third-party one) the worker imports the missing key and retries automatically before failing.",
|
||||
"<strong>Pending upgrades + security count.</strong> Reports how many packages will change and how many of those come from the security suite, so the confirmation dialog has real numbers to show.",
|
||||
"<strong>Confirmation dialog.</strong> The wrapper asks for an explicit yes before touching apt.",
|
||||
"<strong>apt full-upgrade.</strong> Runs with <code>DEBIAN_FRONTEND=noninteractive</code> and <code>--force-confdef --force-confold</code> so any configuration file you customised keeps its current contents when upstream also changed it. Never overwrites operator-edited configs silently.",
|
||||
"<strong>Confirmation dialog.</strong> After refreshing package lists, the worker asks for an explicit yes before running the package upgrade.",
|
||||
"<strong>apt full-upgrade.</strong> Uses <code>DEBIAN_FRONTEND=noninteractive</code> and <code>--force-confdef --force-confold</code>. Dpkg follows its default action for conffile decisions when available and otherwise retains the existing file.",
|
||||
"<strong>LVM sanity check.</strong> <code>lvm_repair_check</code> refreshes VG metadata when disks passed through to guest VMs (DSM, TrueNAS, storage appliances) come back with old PV headers.",
|
||||
"<strong>DKMS rebuild for ProxMenux-managed drivers.</strong> When the upgrade staged a new kernel, <code>pmx_rebuild_dkms_after_kernel</code> reads <code>components_status.json</code> for the drivers ProxMenux installed (currently <code>nvidia_driver</code> → module <code>nvidia</code>, <code>coral_driver</code> → module <code>gasket</code>), installs the matching kernel headers (<code>proxmox-headers-<newkver></code> when available, else <code>pve-headers-<newkver></code>) and runs <code>dkms autoinstall -k <newkver></code>. If <code>dkms status</code> then doesn't show the modules built against the new kernel, the worker falls back to re-running each installer with <code>--auto-reinstall</code>. Any failure is logged but does not abort the update — you land on the reboot prompt in every case.",
|
||||
"<strong>Post-cleanup.</strong> <code>apt-get autoremove</code> + <code>apt-get autoclean</code> before returning control to the wrapper."
|
||||
@@ -78,21 +78,21 @@
|
||||
"heading": "Post-update cleanup & reboot",
|
||||
"intro": "After the worker exits, the wrapper runs:",
|
||||
"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": "Then it checks whether a reboot is needed. Two signals trigger the prompt:",
|
||||
"afterCode": "The wrapper also checks whether a reboot is needed. Either of these signals triggers the prompt:",
|
||||
"items": [
|
||||
"<code>/var/run/reboot-required</code> exists (created by the kernel package post-install hook)",
|
||||
"The update log contains <code>linux-image</code> entries (kernel was actually upgraded)"
|
||||
"<code>/var/run/reboot-required</code> exists: a package or system tool has marked the host as needing a reboot.",
|
||||
"The newest installed Proxmox kernel package differs from the running kernel, as determined by <code>dpkg-query</code> and uname -r."
|
||||
],
|
||||
"outro": "If either is true, a whiptail dialog asks <em>\"Some changes require a reboot to take effect. Do you want to restart now?\"</em>. Decline to keep running on the old kernel until you choose to reboot manually (e.g. during a planned maintenance window)."
|
||||
},
|
||||
"end": {
|
||||
"heading": "What you see at the end",
|
||||
"intro": "When the worker finishes, the terminal shows the cleanup output and (if the kernel changed) the reboot prompt:",
|
||||
"intro": "When the worker finishes, the terminal shows the cleanup output and, if a reboot is required, the reboot prompt:",
|
||||
"imageAlt": "Proxmox System Update completion summary with cleanup output and reboot prompt"
|
||||
},
|
||||
"calloutDeclineReboot": {
|
||||
"title": "Decline reboot only if you know why",
|
||||
"body": "Running on an old kernel after upgrading <code>linux-image-*</code> means you're on a half-upgraded system: userspace is new, kernel is old. Most of the time things work, but ZFS modules, IOMMU groups, KSMBD and any out-of-tree drivers will only match the kernel they were built for — a mismatch produces obscure failures. Reboot at the earliest sensible moment."
|
||||
"body": "Installing a new <code>proxmox-kernel-*</code> package does not replace the running kernel until you reboot. The new kernel and its matching modules become active on the next boot. Plan the reboot for a suitable maintenance window, and review any DKMS build warnings beforehand."
|
||||
},
|
||||
"noSub": {
|
||||
"heading": "How the safe worker treats the Enterprise repository",
|
||||
@@ -117,7 +117,7 @@
|
||||
"<strong>Major-version upgrade.</strong> 8 → 9 is a separate operation — see <link>Upgrade PVE 8 to PVE 9</link>.",
|
||||
"<strong>Backup.</strong> No snapshots, no rollback. Apt operations are not transactional. Combine with your normal backup discipline (PBS, vzdump, ZFS snapshots).",
|
||||
"<strong>Container / VM updates.</strong> Only the host is upgraded; guests are left alone.",
|
||||
"<strong>Firmware updates.</strong> CPU microcode, NIC firmware, BIOS — out of scope."
|
||||
"<strong>Dedicated firmware flashing.</strong> This is not a BIOS or device-firmware flashing tool. Installed firmware or CPU-microcode packages can still receive updates through apt."
|
||||
]
|
||||
},
|
||||
"troubleshooting": {
|
||||
@@ -129,15 +129,15 @@
|
||||
},
|
||||
{
|
||||
"title": "dist-upgrade hangs at \"Configuring grub-pc\"",
|
||||
"body": "A dpkg prompt is asking which device(s) to install GRUB to. The wrapper passes <code>--force-confold</code> for config files but boot-loader install is a separate prompt. Use <kbd>Tab</kbd> + <kbd>Space</kbd> to select all your boot disks, then OK. Best avoided by selecting the boot disks once with <code>dpkg-reconfigure grub-pc</code> beforehand."
|
||||
"body": "If an interactive GRUB prompt is visible, it asks which devices should receive the boot loader. The <code>--force-confold</code> option applies to configuration-file decisions, not to this device selection. Use <kbd>Tab</kbd> + <kbd>Space</kbd> to select the appropriate boot disks, then OK. You can configure this selection beforehand with <code>dpkg-reconfigure grub-pc</code>."
|
||||
},
|
||||
{
|
||||
"title": "Kernel upgraded but the new modules are missing for an out-of-tree driver",
|
||||
"body": "The drivers ProxMenux installed via DKMS (currently <code>nvidia_driver</code> and <code>coral_driver</code>) are rebuilt automatically at the end of the upgrade against the incoming kernel version, using <code>dkms autoinstall -k <newkver></code> and, when needed, a fallback to each installer with <code>--auto-reinstall</code>. Confirm with <code>dkms status</code>. Third-party out-of-tree modules that aren't in ProxMenux's <code>components_status.json</code> registry (custom NIC drivers, hand-installed DKMS packages, …) still need a manual <code>dkms autoinstall</code> — the safe worker only touches what it originally installed."
|
||||
"body": "For managed drivers (<code>nvidia_driver</code> and <code>coral_driver</code>), the helper runs <code>dkms autoinstall -k <newkver></code> and can retry their installers with <code>--auto-reinstall</code>. Check the result with <code>dkms status</code>. The autoinstall command can also rebuild other registered DKMS modules; the installer fallback is limited to the managed entries in <code>components_status.json</code>. Inspect any third-party module that remains missing and rebuild it as needed with <code>dkms autoinstall</code>."
|
||||
},
|
||||
{
|
||||
"title": "The reboot prompt didn't appear but I'm sure the kernel changed",
|
||||
"body": "Two signals must agree (<code>/var/run/reboot-required</code> and <code>linux-image</code> in the upgrade log). If the marker file was cleared but the log is being parsed wrong, reboot manually with <code>shutdown -r now</code>. To confirm a kernel upgrade happened: <code>grep linux-image /var/log/apt/history.log</code>."
|
||||
"body": "The signals are alternatives: <code>/var/run/reboot-required</code> or a difference between the running and newest installed Proxmox kernel. The wrapper does not parse linux-image entries in the apt log. Check the running version with <code>uname -r</code> and the installed kernel packages with <code>dpkg-query</code>. If a reboot is needed, schedule it or run <code>shutdown -r now</code> when ready."
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "System Utilities Installer | ProxMenux Documentation",
|
||||
"description": "Curated installer for 26 CLI utilities (htop, btop, iperf3, jq, tmux, ncdu, ...) on Proxmox VE. Custom selection or predefined groups (basic, dev, compression, multiplexers, analysis, network). Uses the canonical ensure_repositories + install_single_package flow.",
|
||||
"description": "CLI utility installer for Proxmox VE, with 25 packages in the canonical list (htop, btop, iperf3, tmux, ...). Custom selection, install-all and predefined groups (basic, development, compression, multiplexers, analysis, network). Groups can include additional packages. Uses ensure_repositories + install_single_package.",
|
||||
"ogTitle": "System Utilities Installer | ProxMenux Documentation",
|
||||
"ogDescription": "Install curated CLI tools on Proxmox VE with one click or custom selection."
|
||||
},
|
||||
"header": {
|
||||
"title": "System Utilities Installer",
|
||||
"description": "Curated picker for 26 CLI utilities defined in the canonical PROXMENUX_UTILS list. Offers custom selection, install-all, six predefined groups and a verify-installations check. Uses the shared ensure_repositories() + install_single_package() pair so repo configuration and per-package feedback stay consistent across the project.",
|
||||
"description": "Picker for 25 CLI utilities in the canonical PROXMENUX_UTILS list. Offers custom selection, install-all, six predefined groups and an installation check. Groups can include tools outside the canonical list. Uses shared ensure_repositories() + install_single_package() helpers for consistent repository handling and per-package feedback.",
|
||||
"section": "Utilities"
|
||||
},
|
||||
"info": {
|
||||
"title": "What this does",
|
||||
"body": "Installs CLI tools from a curated list of 26 packages. Every installation goes through the same canonical flow: <code>ensure_repositories</code> checks that the host has a usable Proxmox repository for the running PVE major version, then <code>install_single_package</code> runs the install and verifies the resulting command is in PATH."
|
||||
"body": "Installs CLI tools from a list of 25 packages. Every installation uses the same flow: <code>ensure_repositories</code> checks that the host has a usable Proxmox repository for the running PVE major version, then <code>install_single_package</code> installs the package and checks that its command is in PATH."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Opening the installer",
|
||||
@@ -26,7 +26,7 @@
|
||||
"rows": [
|
||||
{
|
||||
"option": "1. Custom selection",
|
||||
"behaviourRich": "Dialog checklist of all 26 packages. Use SPACE to toggle, ENTER to confirm; only the selected ones are installed."
|
||||
"behaviourRich": "Checklist of all 25 packages. Use SPACE to toggle and ENTER to confirm; only the selected packages are installed."
|
||||
},
|
||||
{
|
||||
"option": "2. Install ALL utilities",
|
||||
@@ -63,7 +63,7 @@
|
||||
]
|
||||
},
|
||||
"packages": {
|
||||
"heading": "The 26 packages",
|
||||
"heading": "The 25 packages",
|
||||
"intro": "Defined in the shared <code>scripts/global/utils-install-functions.sh</code> as <code>PROXMENUX_UTILS</code> (format: <code>package:verify_command:description</code>). Other ProxMenux scripts (e.g. the network monitoring launchers for iftop / iptraf-ng / iperf3) reuse entries from this list so package + verify command stay in sync.",
|
||||
"headerPackage": "Package",
|
||||
"headerVerify": "Verify command",
|
||||
@@ -193,11 +193,6 @@
|
||||
"package": "zip",
|
||||
"verify": "zip",
|
||||
"description": "Create ZIP files"
|
||||
},
|
||||
{
|
||||
"package": "libguestfs-tools",
|
||||
"verify": "virt-filesystems",
|
||||
"description": "VM disk utilities"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -211,7 +206,7 @@
|
||||
"verifyOutcomes": [
|
||||
"<strong>0 (success):</strong> command available, package counted as <em>Successful</em>.",
|
||||
"<strong>1 (failed):</strong> apt failed, counted as <em>Failed</em>.",
|
||||
"<strong>2 (warning):</strong> apt succeeded but command not yet in PATH (hash refresh pending) — counted as <em>With warnings</em>."
|
||||
"<strong>2 (warning):</strong> apt succeeded but the expected command was not found in PATH — counted as <em>With warnings</em>."
|
||||
],
|
||||
"summary": "At the end of a group / custom install, a summary dialog shows <em>Successful / With warnings / Failed</em> counts."
|
||||
},
|
||||
@@ -226,7 +221,7 @@
|
||||
"reposTitle": "\"Failed to configure repositories. Installation aborted.\"",
|
||||
"reposBody": "The repository check did not pass: the switch to the no-subscription repository was declined, the subscription status could not be read, or a repository entry needs attention. The message printed above it states the cause. The repositories are listed in <em>Node → Updates → Repositories</em>, and <code>apt-get update</code> from a console shows the error apt reports.",
|
||||
"warningsTitle": "A package is reported \"With warnings\" but the command works after I close the menu",
|
||||
"warningsBody": "Expected. After <code>apt-get install</code>, the new binary is on disk but the current shell's PATH cache (<code>hash -t</code>) doesn't know yet. ProxMenux runs <code>hash -r</code> after each install, but in some shells the refresh only takes effect on the next prompt. Open a new shell and the command will work.",
|
||||
"warningsBody": "After <code>apt-get install</code>, the helper runs <code>hash -r</code>, waits briefly and checks the expected command with <code>command -v</code>. A warning means that check still failed; it does not identify the cause. Try a new shell, then check the package installation and PATH if the command is still missing.",
|
||||
"hangsTitle": "An apt install hangs",
|
||||
"hangsBody": "Most likely a debconf prompt is blocked behind the silenced output. The script wraps all apt calls with <code>DEBIAN_FRONTEND=noninteractive</code>, which usually suppresses prompts, but a few packages still require user input. Cancel with <kbd>Ctrl</kbd>+<kbd>C</kbd>, run <code>apt-get install -y <pkg></code> manually from a shell to see the prompt and decide."
|
||||
},
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -8,12 +8,12 @@
|
||||
},
|
||||
"header": {
|
||||
"title": "UUP Dump ISO Creator",
|
||||
"description": "Build an up-to-date Windows installation ISO on your Proxmox host using UUP Dump. ProxMenux handles the dependencies, downloads the UUP files in parallel, runs the official converter and drops the final ISO into the Proxmox ISO storage — ready to attach to a new Windows VM.",
|
||||
"description": "Build an up-to-date Windows installation ISO on your Proxmox host using UUP Dump. ProxMenux handles dependencies, downloads UUP files in parallel, runs the UUP Dump converter and moves the ISO to your chosen output directory, which defaults to the detected Proxmox ISO storage.",
|
||||
"section": "Utilities"
|
||||
},
|
||||
"intro": {
|
||||
"title": "What this script does",
|
||||
"body": "You provide a UUP Dump URL (the one uupdump.net generates after you pick the build, language and edition) and the script does the rest: installs any missing dependencies, downloads the UUP Dump converter, downloads every UUP payload file with aria2, assembles a bootable Windows ISO and moves it into the Proxmox ISO storage so the VM creator can mount it on first boot."
|
||||
"body": "Provide a UUP Dump URL generated by uupdump.net after choosing a build, language and edition. The script installs missing dependencies, downloads the UUP Dump converter and UUP payloads, assembles a bootable Windows ISO and moves it to the output directory you selected. The detected Proxmox ISO storage is offered as the default destination."
|
||||
},
|
||||
"hero": {
|
||||
"imageAlt": "UUP Dump ISO Creator entry in ProxMenux",
|
||||
@@ -77,7 +77,7 @@
|
||||
"Calls <code>https://uupdump.net/get.php?…&aria2=2</code> to generate an aria2 download list.",
|
||||
"Downloads every UUP payload into <code>UUPs/</code> with aria2 (parallel, resumable).",
|
||||
"Runs <code>convert.sh wim UUPs 1</code> from the converter to produce the final ISO.",
|
||||
"Moves the ISO into the Proxmox ISO storage and cleans up temporary files."
|
||||
"Moves the ISO to the chosen output directory and cleans up temporary files."
|
||||
]
|
||||
},
|
||||
"aria2": {
|
||||
@@ -88,7 +88,7 @@
|
||||
"<code>-s16</code> — splits each file into 16 segments.",
|
||||
"<code>-j5</code> — 5 files downloaded in parallel.",
|
||||
"<code>-c</code> — resumes partial downloads.",
|
||||
"<code>-R</code> — retries on failure."
|
||||
"<code>-R</code> — applies the remote file’s timestamp to the downloaded file when available."
|
||||
],
|
||||
"runtime": "Typical runtime is around 10 minutes, dominated by your internet link speed and UUP Dump's mirror load."
|
||||
},
|
||||
@@ -150,12 +150,12 @@
|
||||
"title": "Wait for the build to finish",
|
||||
"img": "/iso-creator/end-uupdump-iso-creator.png",
|
||||
"caption": "Build finished — ISO is ready in Proxmox ISO storage",
|
||||
"bodyRich": "The console shows aria2 progress and then the converter output. When it finishes, the ISO lands in the detected Proxmox ISO storage and is ready to pick from <strong>Create VM → System Windows → Install with ISO from UUP Dump</strong>."
|
||||
"bodyRich": "The console shows aria2 progress and then converter output. The finished ISO is moved to your chosen output directory. If it is in configured Proxmox ISO storage, it can be selected from <strong>Create VM → System Windows → Install with ISO from UUP Dump</strong>."
|
||||
}
|
||||
]
|
||||
},
|
||||
"tempFiles": {
|
||||
"title": "Temporary files",
|
||||
"body": "By default, temporary files live under <code>/root/uup-temp</code> (<code>uup-temp/</code> for downloads and <code>uup-converter/</code> for the converter script). The creator cleans both after a successful run. On failure it still cleans up and returns you to the menu so a retry starts from scratch."
|
||||
"body": "The default temporary folder is <code>/root/uup-temp</code>, with downloads in <code>UUPs/</code> and the converter in <code>converter/</code>. A custom temporary base path gets a separate session subdirectory. The successful-build and no-ISO-generated branches remove the temporary session. Earlier failures or cancellation can leave temporary files behind."
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user