Skip to content

Releases: coelacant1/ProxmoxScripts

Release v2.2.0

02 Mar 20:08
6824c95

Choose a tag to compare

V2.2.0 - Security hardening, performance optimizations, and GUI improvements

Security

  • SSH Password Exposure - Switched all sshpass -p calls to sshpass -e (environment variable)
    • Passwords no longer visible in ps aux process listing
    • Applied to all 4 sites in SSH.sh (__wait_for_ssh__, __ssh_exec__, __scp_send__, __scp_fetch__)
    • SSHPASS environment variable is unset immediately after each command
  • Container Password Exposure - Changed __ct_change_password__ to pipe credentials via stdin
    • Previously embedded password in bash -c command string (visible in /proc)
    • Now pipes directly to pct exec -- chpasswd
  • Guacamole Token Security - Token file now created with restricted permissions
    • Directory created with mkdir -p -m 700, token file set to chmod 600
    • Prevents other system users from reading authentication tokens
  • Guacamole API Credentials - Switched to --data-urlencode for curl authentication
    • Prevents special characters in passwords (e.g., &, =) from breaking API calls
  • Eval Removal - Replaced eval with safer alternatives across 10 sites in 6 files
    • Command execution contexts now use bash -c instead of eval "$cmd"
    • ArgumentParser.sh uses declare -g instead of eval for variable assignment
  • ArgumentParser Blocklist - Extended reserved variable name list
    • Added high-risk names (HOSTNAME, RANDOM, SECONDS, GROUPS, etc.) to prevent overwrites

Fixed

  • Filename Typo - Renamed EnableCPUScalingGoverner.sh to EnableCPUScalingGovernor.sh
    • Updated all references in CHANGELOG.md, .docs/TODO.md, and internal SCRIPT_NAME
  • CreateFromISO Structure - Moved set -euo pipefail after header comment block
    • Added shellcheck source directive for sourced utility files
  • RemoveStorage Race Condition - Cached VM/CT config per iteration
    • Added || continue to skip VMs/CTs deleted between list and config check
  • Locale-Dependent Parsing - Fixed AWK decimal parsing in CreateFromISO.sh
    • Added LC_NUMERIC=C and comma-to-dot conversion for European locale compatibility
  • GUI Unicode Symbols - Replaced all Unicode checkmarks/crosses with plain text

Changed

  • GUI Breadcrumb Navigation - Path display now shows cc_pve > Storage > Ceph style
  • GUI Script Descriptions - Menu listings show inline description extracted from script headers
  • GUI Log Level Hint - "Type 'l' to change log level" only shown in remote execution mode
  • SSH Error Context - Connection failures now display the SSH error reason at all 7 failure sites
  • SSH Keepalive - Added ServerAliveInterval=5 and ServerAliveCountMax=3 to SSH and SCP
  • Multi-Node Recovery - Execution summary now lists per-node results with retry option
    • Shows OK: node1 node2 and FAIL: node3 after multi-remote execution
    • Prompts to retry only the failed nodes
  • CreateFromISO ArgumentParser Migration - Replaced getopts with __parse_args__
    • Arguments now use --vm-name, --iso-url, --vm-storage style flags
    • All 8 arguments optional with interactive fallback preserved

Added

  • CI Unit Tests - Added unit test stage to .github/workflows/checks.yml
    • Runs Utilities/RunAllTests.sh after static analysis checks
  • BulkOperations Source Guards - Defensive guards on source calls in BulkOperations.sh
  • GUI Update Safety Guard - Validates BASE_DIR before cleanup in update_scripts()
  • Documentation - Added Manuals/README.md table of contents and Documentation section in main README

Performance

  • FindVMIDFromIP Caching - Config fetched once per VMID instead of 3 times (~67% fewer API calls)
  • Double-Sed Consolidation - Merged 9 paired sed | sed calls into single sed -e ... -e ...
    • Applied to BulkConfigureNetworkBandwidth, BulkConfigureDiskIOPS, BulkConfigureDiskBandwidth
  • Bash Builtins - Replaced echo | tr subprocesses with native ${var^^} case conversion
    • Applied to FindVMIDFromIP, BulkCloneSetIP_Proxmox, BulkReconfigureMacAddresses, Conversion.sh, ChangeAllMACPrefix.sh
  • Carriage Return Removal - Replaced echo | tr -d '\r' with ${var//$'\r'/} in GUI.sh

Technical Details

  • sshpass -e reads from SSHPASS environment variable; inline assignment (SSHPASS=x cmd) used where possible
  • declare -g requires Bash 4.2+
  • eval retained in TestFramework.sh (dynamic function stubs) and RemoteExecutor.sh (SSH parameter expansion) - both legitimate uses
  • Multi-node retry uses recursive __execute_remote_script__ call with filtered target list
  • FindVMIDFromIP caches both JSON and plain-text config formats per VMID for reuse
  • --data-urlencode sends each parameter separately, preventing URL parameter injection

Release v2.1.9

25 Feb 18:22
63a6411

Choose a tag to compare

V2.1.9 - Remote execution cancellation, live output streaming, and custom port support improvements

Fixed

  • Script Cancellation - Ctrl+C now kills the remote script process via SSH
    • Tracks remote PID and sends targeted SIGTERM/SIGKILL on interrupt
    • Replaced unsafe killall/pkill with process-specific cleanup
  • ArgumentParser Hyphenated Flags - Flag names with hyphens now map correctly to variable names
    • Converts hyphens to underscores in variable names (e.g. --my-flag -> MY_FLAG)
  • Custom Port Passthrough - Fixed port not being passed through in manual node entry and IP/VMID range flows

Changed

  • Live Remote Output - Remote script output now streams directly to terminal
    • Replaced deferred log download with real-time tee-based streaming
    • Output log still saved locally for review
  • Git File Modes - All .sh files tracked as executable (100755)

Technical Details

  • Added REMOTE_CURRENT_* tracking globals and remote_pid_file for targeted cleanup in __remote_cleanup__
  • __add_remote_target__ and __clear_remote_targets__ now handle port parameter
  • Manual node entry prompts for SSH port in GUI single-remote, multi-IP, and multi-VMID flows
  • Node selection prompts for SSH port in __select_nodes__

Issues Fixed

#25

Release v2.1.6

25 Nov 15:35
fc91a2d

Choose a tag to compare

Release v2.1.6 - Bug fixes, username support, and validation improvements

Added

  • Username Configuration - Support for specifying SSH usernames per node
    • Added username field to nodes.json configuration
    • Username prompts in all node configuration flows (manual entry, saved nodes, IP ranges, VMID ranges)
    • Default username is "root" with option to specify alternatives
    • Display format changed to username@ip throughout GUI
  • Dependency Checking - Runtime validation before remote execution
    • __check_remote_dependencies__() function checks for sshpass and jq
    • Helpful error messages with installation commands for all major distros
    • Notes that sshpass is not required when using SSH keys
  • Syntax Validation - Basic shell syntax checking added to validation suite
    • New Check 1a. in _RunChecks.sh runs bash -n on all .sh files
    • Catches structural errors and orphaned code blocks
    • Shows file names and line numbers for syntax errors
  • Enhanced Source Verification - Improved validation of shellcheck directives
    • VerifySourceCalls.py now validates shellcheck comments have matching source statements
    • Detects orphaned shellcheck directives within 5 lines
    • Prevents mismatched documentation and code

Changed

  • Remote Execution UI - Scripts hidden in remote mode for better UX
    • GUI.sh and CCPVE.sh hidden from root menu when in remote execution mode
    • Prevents accidental execution of control scripts on remote nodes
    • Scripts still shown in local mode and subdirectories
  • README.md - Clarified dependency requirements
    • Updated installation command to include jq and sshpass
    • Documented that sshpass is only needed for password-based authentication
    • Separated build-time tools from runtime dependencies

Fixed

  • Critical: Orphaned Error Handler - Fixed syntax error in Host/HostInfo.sh
    • Removed orphaned error handler code block (lines 34-36)
    • File had error message without matching source statement
    • Bug prevented script execution on remote nodes
  • Username Hardcoding - Removed hardcoded "root@" from all remote operations
    • Updated all SSH/SCP operations in RemoteExecutor.sh to use configured username
    • __ssh_exec__, __scp_exec__, __scp_exec_recursive__, __scp_download__ now accept username parameter
    • ConfigManager.sh tracks username per node in NODE_USERNAMES associative array
  • Missing Validation - Syntax check gap closed
    • _RunChecks.sh never validated basic syntax :C
    • Now catches structural errors that bash -n would detect
    • Prevents orphaned code and malformed control structures from entering repository

Technical Details

  • nodes.json.template - Added username field with "root" default
  • Utilities/ConfigManager.sh - Added NODE_USERNAMES tracking and get_node_username() function
  • Utilities/RemoteExecutor.sh - All remote operations parameterized with username
  • GUI.sh - Dependency checking, username prompts, and script filtering
  • .check/VerifySourceCalls.py - Enhanced shellcheck directive validation
  • .check/_RunChecks.sh - Added Check 1a. for syntax validation

Developer Notes

The orphaned error handler bug existed because:

  • bash -n syntax check was not being run in validation suite
  • DeadCodeCheck.py only checks unused functions/variables, not code structure
  • VerifySourceCalls.py didn't validate orphaned error handlers
    The fix adds syntax validation to prevent similar issues...

Commit: fc91a2d

Release v2.1.4

25 Nov 05:21
918e79f

Choose a tag to compare

Release v2.1.4

Version 2.0 is an architectural refactor that provides comprehensive utility frameworks, standardizes script behavior across the entire codebase, and adds remote cluster management capabilities.

Key Improvements:

Unified Utility Framework

  • ArgumentParser.sh - Standardized argument parsing with built-in validation, automatic help text generation, and support for common types (vmid, string, integer, boolean, range)
  • BulkOperations.sh - Unified framework for bulk VM/LXC operations with consistent error handling, progress reporting, and operation summaries
  • Operations.sh (formerly ProxmoxAPI.sh) - Centralized Proxmox API wrapper functions for VM/LXC operations, disk management, and pool operations
  • Network.sh - Network utility functions for IP validation, manipulation, and network configuration
  • TestFramework.sh - Comprehensive testing framework with unit testing, integration testing, and automated testing

Remote Cluster Management

  • Execute scripts on single or multiple Proxmox nodes without re-downloading the repository
  • Temporary multi-remote mode supporting IP ranges (192.168.1.100-200) or VMID ranges
  • Dual log output with separate .log and .debug.log files for structured logging (local and remote)
  • Debug flag support (./GUI.sh -d) for detailed remote execution logging
  • Interrupt handling (Ctrl+C) cleanly cancels remaining nodes during remote operations

Comprehensive Testing System

  • Test suites for all major utility frameworks (_TestArgumentParser.sh, _TestBulkOperations.sh, _TestNetwork.sh, _TestOperations.sh, _TestStateManager.sh)
  • RunAllTests.sh for automated test execution across all utilities
  • Integration test examples demonstrating proper framework usage
  • Unit testing capabilities with assertion functions and result reporting

Script Compliance Standards

  • All scripts refactored with consistent headers: shebang -> documentation -> Function Index -> set -euo pipefail -> code
  • Standardized set -euo pipefail for robust error handling (fixed duplicates and misplaced commands)
  • All bulk operation scripts (80+ files) migrated to use ArgumentParser and BulkOperations frameworks
  • Consistent error handling and user feedback across entire codebase
  • Automated source dependency verification with VerifySourceCalls.py

Quality Assurance Tools

  • Enhanced .check/_RunChecks.sh with better validation and reporting
  • UpdateUtilityDocumentation.py for automatic utility function documentation
  • VerifySourceCalls.py with fix mode for adding/removing dependencies and shellcheck directives
  • _ScriptComplianceChecklist.md for code quality verification

Cross-Platform GUI Improvements

  • Auto-detects package manager (apt, dnf, yum, zypper, pacman) for any Linux distribution
  • Polymorphic menu system with centralized common operations (settings, help, back, exit)
  • Branch management accessible from all menus
  • Simplified navigation with consistent input prompts
  • Parameter history with readline shortcuts

New Utility Scripts

  • VirtualMachines/Operations/BulkHibernate.sh, BulkSuspend.sh, BulkResume.sh
  • VirtualMachines/Hardware/BulkToggleTabletPointer.sh
  • VirtualMachines/Storage/BulkConfigureDisk.sh
  • Storage/AddStorage.sh (NFS, SMB/CIFS, PBS support)
  • Storage/RemoveStorage.sh (safe removal with usage checks)

Commit: 918e79f

v1.52

06 Oct 14:22
63c2ff1

Choose a tag to compare

Commit Message: Merge pull request #18 from coelacant1/testing

Implemented BatchRunCLI for nested calls to virtualized proxmox hosts
Build Number: 52

v1.51

03 Oct 18:11

Choose a tag to compare

Commit Message: Add CLI calls to script library and refactor bulk remote scripts

  • Added BatchRunCLI.sh for interactive/non-interactive bulk CLI execution
  • Refactored Proxmox bulk remote scripts to use new utilities
  • Updated CCPVE.sh to set up CLI calls
  • Consolidated script style guide
    Build Number: 51

v1.50

01 Oct 21:58

Choose a tag to compare

Commit Message: Added bulk scripts and added style guide

  • Added bulk disable autostart on all nested VMs
  • Added bulk unmount ISOs on all nested VMs
  • Added ChangeAllMACPrefix.sh for editing the prefix' of a single host instance.
  • Added the script style guide so I can try to not suck and actually keep things consistent
  • Changed the example script so it was more useful

Amend:

  • Fixed nested call for non root users
    Build Number: 50

v1.49

01 Oct 21:43

Choose a tag to compare

Commit Message: Added bulk scripts and added style guide

  • Added bulk disable autostart on all nested VMs

  • Added bulk unmount ISOs on all nested VMs

  • Added ChangeAllMACPrefix.sh for editing the prefix' of a single host instance.

  • Added the script style guide so I can try to not suck and actually keep things consistent

  • Changed the example script so it was more useful

  • Amend: fixed nested call for non root users
    Build Number: 49

v1.48

01 Oct 21:25

Choose a tag to compare

Commit Message: Added bulk scripts and added style guide

  • Added bulk disable autostart on all nested VMs
  • Added bulk unmount ISOs on all nested VMs
  • Added ChangeAllMACPrefix.sh for editing the prefix' of a single host instance.
  • Added the script style guide so I can try to not suck and actually keep things consistent
  • Changed the example script so it was more useful
    Build Number: 48

v1.47

16 Sep 16:28

Choose a tag to compare

Commit Message: Added feature for bulk reconfiguring Mac Addresses

Bulk clone and set IP now randomizes all mac addresses and changes the MAC prefix to BC:XX:XX with XXXX being the VMID
Build Number: 47