mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-05-15 21:35:02 +00:00
update beta ProxMenux 1.2.1.1-beta
This commit is contained in:
@@ -4,9 +4,33 @@
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# Copyright : (c) 2024 MacRimi
|
||||
# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
|
||||
# License : GPL-3.0
|
||||
# https://github.com/MacRimi/ProxMenux/blob/main/LICENSE
|
||||
# Version : 1.0
|
||||
# Last Updated: 07/04/2026
|
||||
# ==========================================================
|
||||
# Description:
|
||||
# Exports a Proxmox VM to OVA (single TAR archive) or OVF
|
||||
# (descriptor + VMDK files) using the standard DMTF OVF schema.
|
||||
# The exported package is portable and importable on VMware
|
||||
# (ESXi / Workstation / Fusion), VirtualBox and Proxmox itself
|
||||
# (via the matching import_vm_ova_ovf.sh).
|
||||
#
|
||||
# Features:
|
||||
# - Dependency check (dialog, qm, pvesm, qemu-img, tar, sha1sum).
|
||||
# - VM picker from 'qm list'; offers graceful shutdown (qm
|
||||
# shutdown --timeout 120) or force-stop (qm stop) for running
|
||||
# VMs.
|
||||
# - Format selector: OVA (single portable file) or OVF
|
||||
# (descriptor + external VMDK files).
|
||||
# - Destination directory selector (presets + manual path), with
|
||||
# write-access and free-space pre-flight (~120% of virtual disk
|
||||
# for OVF, ~220% for OVA).
|
||||
# - Disk inventory excludes CD-ROMs and cloud-init drives.
|
||||
# - Conversion via 'qemu-img convert -O vmdk -o subformat=
|
||||
# streamOptimized' (single-pass VMware-friendly format).
|
||||
# - OVF descriptor with vCPU / memory / SCSI controller / disks /
|
||||
# NIC count, plus SHA1 manifest (.mf) of all files.
|
||||
# - Temporary working directory cleaned on EXIT via trap.
|
||||
# ==========================================================
|
||||
|
||||
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
|
||||
@@ -533,8 +557,20 @@ run_export() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Validate the produced VMDK. `qemu-img check` reports leaks /
|
||||
# corrupted clusters that the convert exit code might not have
|
||||
# surfaced (silent partial-write under disk pressure, qemu-img
|
||||
# bug, etc.). Audit Tier 7 — `export_vm_ova_ovf.sh` no valida
|
||||
# integridad del VMDK convertido.
|
||||
if command -v qemu-img >/dev/null 2>&1; then
|
||||
if ! qemu-img check -q "$dst" 2>/dev/null; then
|
||||
msg_error "$(translate "Integrity check failed on") $disk_name"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
EXPORT_DISK_FILES+=("$disk_name")
|
||||
msg_ok "$(translate "Converted:") $disk_name"
|
||||
msg_ok "$(translate "Converted + verified:") $disk_name"
|
||||
done
|
||||
|
||||
local ovf_file mf_file
|
||||
|
||||
@@ -4,33 +4,51 @@
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# Copyright : (c) 2024 MacRimi
|
||||
# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
|
||||
# License : GPL-3.0
|
||||
# https://github.com/MacRimi/ProxMenux/blob/main/LICENSE
|
||||
# Version : 1.0
|
||||
# Last Updated: 10/04/2026
|
||||
# ==========================================================
|
||||
# Description:
|
||||
# Imports a virtual machine from an OVA or OVF package into Proxmox VE.
|
||||
# Compatible with exports from VMware ESXi, VMware Workstation/Fusion,
|
||||
# VirtualBox, and Proxmox itself (via export_vm_ova_ovf).
|
||||
# Imports a virtual machine from an OVA or OVF package into
|
||||
# Proxmox VE. Compatible with exports from VMware (ESXi /
|
||||
# Workstation / Fusion), VirtualBox and Proxmox itself (via the
|
||||
# matching export_vm_ova_ovf.sh).
|
||||
#
|
||||
# What is imported:
|
||||
# - Disk images (VMDK converted to the target storage format)
|
||||
# - CPU and memory settings
|
||||
# - Number of network interfaces
|
||||
# - VM name and OS type hint
|
||||
# Features:
|
||||
# - File picker: scans /var/lib/vz/dump and /var/lib/vz/template/iso
|
||||
# by default, manual path also supported. Lists every .ova / .ovf.
|
||||
# - OVA auto-extracted to /tmp/.proxmenux-import-* with cleanup
|
||||
# trap; OVF used in place.
|
||||
# - OVF parsed via AWK to extract VM name, vCPU count, memory
|
||||
# (RASD ResourceType 4), NIC count (type 10) and disk file
|
||||
# references (.vmdk / .qcow2 / .img / .raw).
|
||||
# - OS-type heuristic: maps Linux -> l26, Windows -> win10,
|
||||
# anything else -> other.
|
||||
# - Dialog flow for VMID (suggests pvesh nextid), name, target
|
||||
# storage (pvesm status -content images), bridge (auto-picks
|
||||
# when only one exists).
|
||||
# - VM created with --scsihw lsi --net0 e1000,bridge=...; extra
|
||||
# NICs added per OVF NIC count.
|
||||
# - Disks imported with 'qm importdisk' (storage-native format),
|
||||
# then attached as scsiN and unusedN markers cleared.
|
||||
# - Boot config set to scsi0.
|
||||
#
|
||||
# What requires manual review after import:
|
||||
# - Network bridge assignment (vmbr0 assigned by default)
|
||||
# - NIC model (e1000 by default — change to VirtIO if guest supports it)
|
||||
# - Firmware (BIOS/UEFI — must match what the original VM used)
|
||||
# - Network bridge assignment (vmbr0 assigned by default).
|
||||
# - NIC model (e1000 by default -- change to VirtIO if guest
|
||||
# supports it).
|
||||
# - Firmware (BIOS / UEFI -- must match the original VM).
|
||||
# - VirtIO/qemu-guest-agent installation inside the guest (especially from ESXi)
|
||||
# - PCI passthrough, TPM, cloud-init, snapshots — not portable in OVF/OVA
|
||||
# ==========================================================
|
||||
|
||||
BASE_DIR="/usr/local/share/proxmenux"
|
||||
LOCAL_SCRIPTS="$BASE_DIR/scripts"
|
||||
UTILS_FILE="$BASE_DIR/utils.sh"
|
||||
INSTALL_HELPERS="$LOCAL_SCRIPTS/global/utils-install-functions.sh"
|
||||
|
||||
[[ -f "$UTILS_FILE" ]] && source "$UTILS_FILE"
|
||||
[[ -f "$INSTALL_HELPERS" ]] && source "$INSTALL_HELPERS"
|
||||
load_language
|
||||
initialize_cache
|
||||
|
||||
@@ -63,6 +81,46 @@ BRIDGE="vmbr0"
|
||||
# HELPERS
|
||||
# -------------------------------------------------------
|
||||
|
||||
# Ensure GNU awk (gawk) is installed before parsing OVF.
|
||||
# The OVF parser uses match($0, /regex/, array) — the 3-argument form
|
||||
# is a gawk extension; mawk (the Debian/Proxmox default 'awk') errors
|
||||
# with "syntax error at or near ,". Returns 0 on success, 1 if install
|
||||
# fails (caller is expected to abort with a clear error).
|
||||
ensure_gawk() {
|
||||
if command -v gawk >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
if type ensure_repositories &>/dev/null && type install_single_package &>/dev/null; then
|
||||
# Canonical path: install_single_package handles its own
|
||||
# msg_info / msg_ok / msg_error pair, so we don't open one here
|
||||
# (would leave an orphan spinner overlapping with theirs).
|
||||
if ! ensure_repositories; then
|
||||
msg_error "$(translate "Failed to configure repositories.")"
|
||||
return 1
|
||||
fi
|
||||
install_single_package "gawk" "gawk" "GNU awk (required for OVF parsing)"
|
||||
case $? in
|
||||
0|2) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Fallback when utils-install-functions.sh was not sourced.
|
||||
# Here we own the spinner: msg_info opens it, msg_ok / msg_error closes it.
|
||||
msg_info "$(translate "Installing gawk (required for OVF parsing)...")"
|
||||
if apt-get update -qq >/dev/null 2>&1 && apt-get install -y gawk >/dev/null 2>&1; then
|
||||
msg_ok "$(translate "gawk installed")"
|
||||
return 0
|
||||
fi
|
||||
|
||||
msg_error "$(translate "Failed to install gawk")"
|
||||
msg_warn "$(translate "Install manually with:") apt-get install gawk"
|
||||
return 1
|
||||
}
|
||||
|
||||
human_bytes() {
|
||||
local bytes="$1"
|
||||
local units=("B" "KB" "MB" "GB" "TB")
|
||||
@@ -194,8 +252,13 @@ prepare_ovf() {
|
||||
parse_ovf() {
|
||||
local ovf_file="$1"
|
||||
|
||||
# The parser below uses gawk's 3-argument match() form, which is
|
||||
# NOT supported by mawk (the default 'awk' on Debian/Proxmox).
|
||||
# ensure_gawk installs gawk on first use if missing.
|
||||
ensure_gawk || return 1
|
||||
|
||||
local result
|
||||
result=$(awk '
|
||||
result=$(gawk '
|
||||
BEGIN {
|
||||
in_item=0; rt=""; qty=""
|
||||
file_count=0; cap_count=0; net_count=0
|
||||
@@ -224,11 +287,29 @@ parse_ovf() {
|
||||
if (a[1]+0 > 0) caps[cap_count++] = a[1]
|
||||
}
|
||||
|
||||
/<Item>|<Item / { in_item=1; rt=""; qty="" }
|
||||
/<Item>|<Item / { in_item=1; rt=""; qty=""; au="" }
|
||||
/<\/Item>/ {
|
||||
if (in_item) {
|
||||
if (rt=="3" && qty ~ /^[0-9]+$/) vcpu=qty
|
||||
if (rt=="4" && qty ~ /^[0-9]+$/) mem=qty
|
||||
# ResourceType=4 is Memory. Normalise `qty` to MiB based
|
||||
# on AllocationUnits: VMware sometimes emits `byte`,
|
||||
# `byte * 2^10` (KiB), `byte * 2^30` (GiB) or textual
|
||||
# `MegaBytes`/`GigaBytes`. Defaulting to MiB blindly
|
||||
# (the previous behaviour) imported 8 GB VMs as 8 MiB
|
||||
# or vice-versa. Audit Tier 6 — OVF memory units.
|
||||
if (rt=="4" && qty ~ /^[0-9]+$/) {
|
||||
if (au ~ /byte \* 2\^30/ || au ~ /[Gg]iga[Bb]yte/) {
|
||||
mem = qty * 1024
|
||||
} else if (au ~ /byte \* 2\^10/ || au ~ /[Kk]ilo[Bb]yte/) {
|
||||
mem = int((qty + 1023) / 1024)
|
||||
} else if (au ~ /byte \* 2\^20/ || au ~ /[Mm]ega[Bb]yte/ || au == "") {
|
||||
mem = qty
|
||||
} else if (au == "byte" || au ~ /^bytes?$/) {
|
||||
mem = int((qty + 1048575) / 1048576)
|
||||
} else {
|
||||
mem = qty
|
||||
}
|
||||
}
|
||||
if (rt=="10") net_count++
|
||||
}
|
||||
in_item=0
|
||||
@@ -239,6 +320,9 @@ parse_ovf() {
|
||||
/VirtualQuantity>/ {
|
||||
match($0, /VirtualQuantity>([0-9]+)</, a); qty=a[1]
|
||||
}
|
||||
/AllocationUnits>/ {
|
||||
match($0, /AllocationUnits>([^<]+)</, a); au=a[1]
|
||||
}
|
||||
|
||||
END {
|
||||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", name)
|
||||
@@ -601,7 +685,23 @@ main() {
|
||||
else
|
||||
echo ""
|
||||
msg_error "$(translate "Import failed. VM $NEW_VMID may be in partial state.")"
|
||||
msg_info2 "$(translate "To remove partial VM:") qm destroy $NEW_VMID --destroy-unreferenced-disks 1"
|
||||
# Offer to clean up the orphan VM. Most users want this — it
|
||||
# otherwise sits in the PVE UI as a half-broken entry that the
|
||||
# user has to clean up manually with the command we hint at. Audit
|
||||
# Tier 6 — `import_vm_ova_ovf.sh` VM huérfana tras fallo.
|
||||
if dialog --backtitle "$BACKTITLE" \
|
||||
--title "$(translate "Cleanup partial VM?")" \
|
||||
--yesno "$(translate "Remove the partial VM ($NEW_VMID) and its imported disks?")" 8 60; then
|
||||
clear
|
||||
msg_info "$(translate "Removing partial VM") $NEW_VMID..."
|
||||
if qm destroy "$NEW_VMID" --destroy-unreferenced-disks 1 &>/dev/null; then
|
||||
msg_ok "$(translate "Partial VM removed")"
|
||||
else
|
||||
msg_warn "$(translate "Could not remove VM automatically. Run manually:") qm destroy $NEW_VMID --destroy-unreferenced-disks 1"
|
||||
fi
|
||||
else
|
||||
msg_info2 "$(translate "To remove partial VM:") qm destroy $NEW_VMID --destroy-unreferenced-disks 1"
|
||||
fi
|
||||
echo ""
|
||||
msg_success "$(translate "Press Enter to return...")"
|
||||
read -r
|
||||
|
||||
@@ -1,13 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==========================================================
|
||||
# ProxMenux - Manual Proxmox VE 8 to 9 Upgrade Guide
|
||||
# ProxMenux - Manual PVE 8 to 9 Upgrade Guide
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# Copyright : (c) 2024 MacRimi
|
||||
# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
|
||||
# License : GPL-3.0
|
||||
# https://github.com/MacRimi/ProxMenux/blob/main/LICENSE
|
||||
# Version : 1.0
|
||||
# Last Updated: 13/08/2025
|
||||
# ==========================================================
|
||||
# Description:
|
||||
# Read-only display of a 17-step manual upgrade procedure from
|
||||
# Proxmox VE 8 to 9. Modifies nothing on the host -- exposes the
|
||||
# exact commands the automated upgrade runs so an operator can
|
||||
# perform the upgrade by hand for full visibility, or use it as a
|
||||
# reference / runbook.
|
||||
#
|
||||
# Features:
|
||||
# - Numbered steps with description + command + recommended
|
||||
# answers for the dpkg prompts encountered during dist-upgrade.
|
||||
# - Prerequisite checklist (PVE 8.4+, console access, backups,
|
||||
# free disk space, ...).
|
||||
# - Covers Debian bookworm -> trixie sed migration, repository
|
||||
# deb822 conversion, Ceph 19.x (Squid) requirement and
|
||||
# cluster-upgrade caveats.
|
||||
# - Recommends running the upgrade inside tmux / screen.
|
||||
# ==========================================================
|
||||
|
||||
# Configuration ============================================
|
||||
|
||||
@@ -1,28 +1,34 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==========================================================
|
||||
# ProxMenux - A menu-driven script for Proxmox VE management
|
||||
# ProxMenux - Proxmox System Update
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# Copyright : (c) 2024 MacRimi
|
||||
# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
|
||||
# License : GPL-3.0
|
||||
# https://github.com/MacRimi/ProxMenux/blob/main/LICENSE
|
||||
# Version : 1.0
|
||||
# Last Updated: 04/07/2025
|
||||
# ==========================================================
|
||||
# Description:
|
||||
# This script safely updates your Proxmox VE system and underlying Debian packages
|
||||
# through an interactive and automated process.
|
||||
# Wrapper that detects the running Proxmox major version and
|
||||
# delegates to the matching worker script:
|
||||
# - PVE 8 -> scripts/global/update-pve8.sh
|
||||
# - PVE 9 -> scripts/global/update-pve9_2.sh
|
||||
# After the worker finishes, runs the post-update cleanup
|
||||
# (apt-get autoremove + autoclean) and prompts for an immediate
|
||||
# reboot if the kernel was updated or /var/run/reboot-required
|
||||
# was created.
|
||||
#
|
||||
# Main features:
|
||||
# - Repairs and optimizes APT repositories (Proxmox & Debian)
|
||||
# - Removes duplicate or conflicting sources
|
||||
# - Switches to the recommended 'no-subscription' Proxmox repository
|
||||
# - Updates all Proxmox and Debian system packages
|
||||
# - Installs essential packages if missing (e.g., zfsutils, chrony)
|
||||
# - Checks for LVM and storage issues and repairs headers if needed
|
||||
# - Removes conflicting time sync packages automatically
|
||||
# - Performs a system cleanup after updating (autoremove, autoclean)
|
||||
# - Provides a summary and prompts for reboot if necessary
|
||||
# Features (delegated to worker scripts):
|
||||
# - APT repository hygiene (Proxmox + Debian)
|
||||
# - Removal of duplicate / conflicting sources
|
||||
# - Switch to the no-subscription Proxmox repository
|
||||
# - Full apt update + dist-upgrade
|
||||
# - Installs essential packages if missing (zfsutils, chrony, ...)
|
||||
# - LVM / storage sanity checks and header repair
|
||||
# - Removes conflicting time-sync packages
|
||||
# - Post-update system cleanup
|
||||
# - Reboot prompt when kernel changed
|
||||
# ==========================================================
|
||||
#
|
||||
# The goal of this script is to simplify and secure the update process for Proxmox,
|
||||
# reduce manual intervention, and prevent common repository and package errors.
|
||||
@@ -46,11 +52,21 @@ export SCRIPT_TITLE="Proxmox system update"
|
||||
NECESSARY_REBOOT=1
|
||||
|
||||
apt_upgrade() {
|
||||
local pve_version
|
||||
pve_version=$(pveversion 2>/dev/null | grep -oP 'pve-manager/\K[0-9]+' | head -1)
|
||||
local pve_version pve_raw
|
||||
# Capture both stdout and the rc so a failure is visible in the
|
||||
# error message — silent `2>/dev/null` previously hid the real cause
|
||||
# (binary missing / output malformed). Audit Tier 6 — `proxmox_update.sh`
|
||||
# detección de versión silenciosa.
|
||||
pve_raw=$(pveversion 2>&1)
|
||||
local pve_rc=$?
|
||||
pve_version=$(echo "$pve_raw" | grep -oP 'pve-manager/\K[0-9]+' | head -1)
|
||||
|
||||
if [[ -z "$pve_version" ]]; then
|
||||
msg_error "Unable to detect Proxmox version."
|
||||
if (( pve_rc != 0 )); then
|
||||
msg_error "Unable to detect Proxmox version (pveversion exit $pve_rc): ${pve_raw:0:200}"
|
||||
else
|
||||
msg_error "Unable to parse Proxmox version from output: ${pve_raw:0:200}"
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,12 +1,28 @@
|
||||
#!/bin/bash
|
||||
# ==========================================================
|
||||
# ProxMenuX - Upgrade PVE 8 → 9 (Simplified, per official guide)
|
||||
# ProxMenux - PVE 8 to 9 Pre-upgrade Check
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# Copyright : (c) 2024 MacRimi
|
||||
# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
|
||||
# License : GPL-3.0
|
||||
# https://github.com/MacRimi/ProxMenux/blob/main/LICENSE
|
||||
# Version : 1.0
|
||||
# Last Updated: 14/08/2025
|
||||
# ==========================================================
|
||||
# Description:
|
||||
# Runs Proxmox's official 'pve8to9 --full' pre-upgrade check and
|
||||
# offers guided remediation for the common blocking issues. Stops
|
||||
# before the actual upgrade -- invoke upgrade_pve8_to_pve9.sh to
|
||||
# proceed once the check passes cleanly.
|
||||
#
|
||||
# Features:
|
||||
# - Captures full pve8to9 output to /var/log/pve8-a-pve9-<timestamp>.log
|
||||
# - Counts FAIL / WARN entries and surfaces a summary banner.
|
||||
# - Detects common failure patterns (systemd-boot meta-package,
|
||||
# Ceph version, repository conflicts, missing packages, low
|
||||
# disk space, network restart needed) and proposes the matching
|
||||
# repair command.
|
||||
# - Three-way prompt: auto-repair, show manual commands, abort.
|
||||
# - Re-runs the check after auto-repair to confirm resolution.
|
||||
# ==========================================================
|
||||
|
||||
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
|
||||
@@ -21,6 +37,15 @@ fi
|
||||
load_language
|
||||
initialize_cache
|
||||
|
||||
# Load shared global functions: cleanup_duplicate_repos and ensure_repositories
|
||||
# are referenced by the auto-repair flow below and live in these files.
|
||||
if [[ -f "$LOCAL_SCRIPTS/global/common-functions.sh" ]]; then
|
||||
source "$LOCAL_SCRIPTS/global/common-functions.sh"
|
||||
fi
|
||||
if [[ -f "$LOCAL_SCRIPTS/global/utils-install-functions.sh" ]]; then
|
||||
source "$LOCAL_SCRIPTS/global/utils-install-functions.sh"
|
||||
fi
|
||||
|
||||
|
||||
# ==========================================================
|
||||
|
||||
@@ -39,6 +64,19 @@ fi
|
||||
|
||||
|
||||
run_pve8to9_check2() {
|
||||
# Bound the auto-repair → re-check recursion. If repairs keep producing
|
||||
# FAILs (e.g. a missing repo can't be auto-fixed by `ensure_repositories`)
|
||||
# the user could keep picking "auto-repair" indefinitely and we'd grow
|
||||
# the bash call stack until it overflows. Cap at 3 attempts. Audit
|
||||
# Tier 6 — `pve8to9_check.sh` recursión sin guard.
|
||||
: "${_PVE8TO9_DEPTH:=0}"
|
||||
_PVE8TO9_DEPTH=$((_PVE8TO9_DEPTH + 1))
|
||||
if (( _PVE8TO9_DEPTH > 3 )); then
|
||||
msg_error "$(translate "Maximum auto-repair attempts reached (3). Please review the log and run any remaining commands manually.")"
|
||||
_PVE8TO9_DEPTH=0
|
||||
return 1
|
||||
fi
|
||||
|
||||
local tmp
|
||||
tmp="$(mktemp)"
|
||||
echo -e
|
||||
@@ -76,9 +114,9 @@ run_pve8to9_check2() {
|
||||
|
||||
# Error 3: Repository configuration issues
|
||||
if grep -q -E '(repository.*issue|repo.*problem|sources.*error)' "$tmp"; then
|
||||
repair_commands+=("cleanup_duplicate_repos && configure_repositories")
|
||||
repair_commands+=("cleanup_duplicate_repos && ensure_repositories")
|
||||
repair_descriptions+=("$(translate "Fix repository configuration")")
|
||||
echo -e "${YW}$(translate "Fix repositories:") ${CL}cleanup_duplicate_repos && configure_repositories"
|
||||
echo -e "${YW}$(translate "Fix repositories:") ${CL}cleanup_duplicate_repos && ensure_repositories"
|
||||
fi
|
||||
|
||||
# Error 4: Package conflicts
|
||||
|
||||
@@ -1,36 +1,32 @@
|
||||
#!/bin/bash
|
||||
# ==========================================================
|
||||
# ProxMenux - A menu-driven script for Proxmox VE management
|
||||
# ProxMenux - System Utilities Installer
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# Copyright : (c) 2024 MacRimi
|
||||
# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
|
||||
# License : GPL-3.0
|
||||
# https://github.com/MacRimi/ProxMenux/blob/main/LICENSE
|
||||
# Version : 1.2
|
||||
# Last Updated: 03/04/2026
|
||||
# ==========================================================
|
||||
# Description:
|
||||
# This script provides an interactive system utilities installer with a
|
||||
# comprehensive dialog-based interface for Proxmox VE and Linux systems.
|
||||
# It simplifies the installation and management of essential command-line
|
||||
# tools and utilities commonly used in server environments.
|
||||
#
|
||||
# The script offers both individual utility selection and predefined groups
|
||||
# for different use cases, ensuring administrators can quickly set up their
|
||||
# preferred toolset without manual package management.
|
||||
#
|
||||
# Supported utility categories:
|
||||
# - Basic utilities: grc, htop, tree, curl, wget
|
||||
# - Development tools: git, vim, nano, dos2unix
|
||||
# - Compression tools: zip, unzip, rsync, cabextract
|
||||
# - Network tools: iperf3, nmap, tcpdump, nethogs, iptraf-ng, sshpass
|
||||
# - Analysis tools: jq, ncdu, iotop, btop, iftop
|
||||
# - System tools: plocate, net-tools, ipset, msr-tools
|
||||
# - Virtualization tools: libguestfs-tools, wimtools, genisoimage, chntpw
|
||||
# - Download tools: axel, aria2
|
||||
#
|
||||
# The script automatically handles package name differences across distributions
|
||||
# and provides detailed feedback on installation success, warnings, and failures.
|
||||
# Interactive installer for 26 curated CLI utilities packaged in
|
||||
# the canonical PROXMENUX_UTILS list (defined in
|
||||
# global/utils-install-functions.sh). Uses the shared
|
||||
# ensure_repositories() + install_single_package() pair to keep the
|
||||
# repo configuration and feedback consistent with the rest of the
|
||||
# project.
|
||||
#
|
||||
# Features:
|
||||
# - Custom selection: dialog checklist of all 26 packages.
|
||||
# - Install ALL utilities: one-click for all of PROXMENUX_UTILS.
|
||||
# - Predefined groups (basic / dev / compression / multiplexers /
|
||||
# analysis / network) for quick targeted installs.
|
||||
# - Verify installations: checks every PROXMENUX_UTILS command for
|
||||
# availability and shows an Available / Missing summary.
|
||||
# - Per-package feedback (install_single_package returns 0 ok / 1
|
||||
# failed / 2 installed-but-command-not-found-yet).
|
||||
# - Hash refresh after each install to surface new commands.
|
||||
# ==========================================================
|
||||
|
||||
# Configuration ============================================
|
||||
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
|
||||
|
||||
@@ -1,12 +1,45 @@
|
||||
#!/bin/bash
|
||||
# ==========================================================
|
||||
# ProxMenuX - Upgrade PVE 8 → 9 (Simplified, per official guide)
|
||||
# ProxMenux - Upgrade PVE 8 to PVE 9
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# Copyright : (c) 2024 MacRimi
|
||||
# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
|
||||
# License : GPL-3.0
|
||||
# https://github.com/MacRimi/ProxMenux/blob/main/LICENSE
|
||||
# Version : 1.0
|
||||
# Last Updated: 14/08/2025
|
||||
# ==========================================================
|
||||
# Description:
|
||||
# Automated or interactive Proxmox VE 8 -> 9 major-version upgrade.
|
||||
# Follows the official Proxmox upgrade procedure (Debian Bookworm ->
|
||||
# Trixie + PVE 8 -> 9) with comprehensive safeguards, repository
|
||||
# migration, Ceph version validation and post-upgrade verification.
|
||||
#
|
||||
# A major-version upgrade is destructive and not reversible -- the
|
||||
# script enforces multiple safety gates and refuses to run from the
|
||||
# Proxmox web terminal.
|
||||
#
|
||||
# Features:
|
||||
# - Mode menu: Automatic (unattended), Interactive, Pre-check,
|
||||
# Manual guide.
|
||||
# - Blocks execution from the web terminal (termproxy / vncshell);
|
||||
# requires SSH or physical / IPMI / iKVM console.
|
||||
# - Pre-flight: pve8to9 --full, disk-space check
|
||||
# (/var/cache/apt/archives >= 1024 MB), connectivity to
|
||||
# download.proxmox.com, Ceph 19.x Squid validation when present.
|
||||
# - Brings PVE 8 to the latest 8.4.x patch level first via the
|
||||
# PVE 8 update worker.
|
||||
# - Repository migration: sed bookworm -> trixie, deb822 .sources
|
||||
# files for proxmox + debian + ceph, automatic fallback from
|
||||
# Enterprise to no-subscription on 401 Unauthorized.
|
||||
# - Validates 'proxmox-ve' candidate is 9.x and that the dry-run
|
||||
# dist-upgrade does not propose removing it (would indicate
|
||||
# broken repo config).
|
||||
# - dist-upgrade with --force-confdef --force-confold in
|
||||
# unattended mode; user-driven dpkg prompts in interactive mode.
|
||||
# - Post-upgrade: installs grub-efi-amd64 on EFI hosts, restarts
|
||||
# pve-manager, re-runs pve8to9 to surface residual issues.
|
||||
# - Reboot prompt at the end.
|
||||
# - Full log written to /var/log/pve8-a-pve9-<timestamp>.log.
|
||||
# ==========================================================
|
||||
|
||||
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
|
||||
@@ -21,6 +54,15 @@ fi
|
||||
load_language
|
||||
initialize_cache
|
||||
|
||||
# Load shared global functions: cleanup_duplicate_repos and ensure_repositories
|
||||
# are referenced by the auto-repair flow below and live in these files.
|
||||
if [[ -f "$LOCAL_SCRIPTS/global/common-functions.sh" ]]; then
|
||||
source "$LOCAL_SCRIPTS/global/common-functions.sh"
|
||||
fi
|
||||
if [[ -f "$LOCAL_SCRIPTS/global/utils-install-functions.sh" ]]; then
|
||||
source "$LOCAL_SCRIPTS/global/utils-install-functions.sh"
|
||||
fi
|
||||
|
||||
# ==========================================================
|
||||
|
||||
LOG="/var/log/pve8-a-pve9-$(date +%Y%m%d-%H%M%S).log"
|
||||
@@ -594,6 +636,17 @@ regenerate_pve_cache
|
||||
# ---------------------------
|
||||
|
||||
run_pve8to9_check() {
|
||||
# Same recursion guard as in pve8to9_check.sh — auto-repair followed by
|
||||
# re-check could otherwise loop indefinitely if repairs don't actually
|
||||
# resolve the FAIL. Cap at 3 attempts. Audit Tier 6.
|
||||
: "${_PVE8TO9_DEPTH:=0}"
|
||||
_PVE8TO9_DEPTH=$((_PVE8TO9_DEPTH + 1))
|
||||
if (( _PVE8TO9_DEPTH > 3 )); then
|
||||
msg_error "$(translate "Maximum auto-repair attempts reached (3). Please review the log and run any remaining commands manually.")"
|
||||
_PVE8TO9_DEPTH=0
|
||||
return 1
|
||||
fi
|
||||
|
||||
local tmp
|
||||
tmp="$(mktemp)"
|
||||
echo -e
|
||||
@@ -637,9 +690,9 @@ run_pve8to9_check() {
|
||||
|
||||
# Error 4: Repository configuration issues
|
||||
if grep -q -E '(repository.*issue|repo.*problem|sources.*error)' "$tmp"; then
|
||||
repair_commands+=("cleanup_duplicate_repos && configure_repositories")
|
||||
repair_commands+=("cleanup_duplicate_repos && ensure_repositories")
|
||||
repair_descriptions+=("$(translate "Fix repository configuration")")
|
||||
echo -e "${YW}$(translate "Fix repositories:") ${CL}cleanup_duplicate_repos && configure_repositories"
|
||||
echo -e "${YW}$(translate "Fix repositories:") ${CL}cleanup_duplicate_repos && ensure_repositories"
|
||||
fi
|
||||
|
||||
# Error 5: Package conflicts
|
||||
@@ -1003,9 +1056,9 @@ run_pve8to9_check2() {
|
||||
|
||||
# Error 4: Repository configuration issues
|
||||
if grep -q -E '(repository.*issue|repo.*problem|sources.*error)' "$tmp"; then
|
||||
repair_commands+=("cleanup_duplicate_repos && configure_repositories")
|
||||
repair_commands+=("cleanup_duplicate_repos && ensure_repositories")
|
||||
repair_descriptions+=("$(translate "Fix repository configuration")")
|
||||
echo -e "${YW}$(translate "Fix repositories:") ${CL}cleanup_duplicate_repos && configure_repositories"
|
||||
echo -e "${YW}$(translate "Fix repositories:") ${CL}cleanup_duplicate_repos && ensure_repositories"
|
||||
fi
|
||||
|
||||
# Error 5: Package conflicts
|
||||
|
||||
@@ -1,28 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# ==========================================================
|
||||
# ProxMenux - UUP Dump ISO Creator Custom
|
||||
# ProxMenux - UUP Dump ISO Creator
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# Copyright : (c) 2024 MacRimi
|
||||
# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
|
||||
# License : GPL-3.0
|
||||
# https://github.com/MacRimi/ProxMenux/blob/main/LICENSE
|
||||
# Version : 1.0
|
||||
# Last Updated: 30/06/2025
|
||||
# ==========================================================
|
||||
# Description:
|
||||
# This script is part of the ProxMenux tools for Proxmox VE.
|
||||
# It allows downloading and converting official Windows ISO images
|
||||
# from UUP Dump using a shared link (with ID, pack, and edition).
|
||||
# Downloads and converts official Windows ISO images from UUP Dump
|
||||
# using a shared link (ID + pack + edition). Produces an up-to-date
|
||||
# bootable ISO ready for VM creation in Proxmox VE.
|
||||
#
|
||||
# Key features:
|
||||
# - Automatically installs and verifies required dependencies (aria2c, cabextract, wimlib-imagex…)
|
||||
# - Downloads the selected Windows edition from UUP Dump using aria2
|
||||
# - Converts the downloaded files into a bootable ISO
|
||||
# - Stores the resulting ISO in the default template path (/var/lib/vz/template/iso)
|
||||
# - Provides a graphical prompt via whiptail for user-friendly usage
|
||||
#
|
||||
# This tool simplifies the creation of official Windows ISOs
|
||||
# for use in virtual machines within Proxmox VE.
|
||||
# Features:
|
||||
# - Automatically installs and verifies required dependencies
|
||||
# (aria2c, cabextract, wimlib-imagex, ...).
|
||||
# - Downloads the selected Windows edition from UUP Dump using
|
||||
# aria2 (multi-connection accelerator).
|
||||
# - Converts the downloaded files into a bootable ISO.
|
||||
# - Stores the resulting ISO in the default template path
|
||||
# (/var/lib/vz/template/iso) so it shows up in the Proxmox UI.
|
||||
# - Whiptail-driven UX (URL prompt, edition / pack confirmation,
|
||||
# progress reporting).
|
||||
# ==========================================================
|
||||
# ==========================================================
|
||||
|
||||
BASE_DIR="/usr/local/share/proxmenux"
|
||||
|
||||
Reference in New Issue
Block a user