• v2.2.0 6824c954f6

    v2.2.0 Stable

    kerem released this 2026-03-02 22:39:34 +03:00 | 0 commits to main since this release

    📅 Originally published on GitHub: Mon, 02 Mar 2026 20:08:58 GMT
    🏷️ Git tag created: Mon, 02 Mar 2026 19:39:34 GMT

    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
    Downloads
  • v2.1.9 63a641148d

    v2.1.9 Stable

    kerem released this 2026-02-25 21:18:55 +03:00 | 2 commits to main since this release

    📅 Originally published on GitHub: Wed, 25 Feb 2026 18:22:16 GMT
    🏷️ Git tag created: Wed, 25 Feb 2026 18:18:55 GMT

    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

    https://github.com/coelacant1/ProxmoxScripts/issues/25

    Downloads
  • v2.1.6 fc91a2dc42

    v2.1.6 Stable

    kerem released this 2025-11-25 18:28:35 +03:00 | 7 commits to main since this release

    📅 Originally published on GitHub: Tue, 25 Nov 2025 15:35:31 GMT
    🏷️ Git tag created: Tue, 25 Nov 2025 15:28:35 GMT

    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: fc91a2dc42

    Downloads
  • v2.1.4 918e79fe6f

    v2.1.4 Stable

    kerem released this 2025-11-25 08:18:59 +03:00 | 9 commits to main since this release

    📅 Originally published on GitHub: Tue, 25 Nov 2025 05:21:54 GMT
    🏷️ Git tag created: Tue, 25 Nov 2025 05:18:59 GMT

    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: 918e79fe6f

    Downloads
  • v1.52 63c2ff17dd

    v1.52 Stable

    kerem released this 2025-10-06 17:21:51 +03:00 | 27 commits to main since this release

    📅 Originally published on GitHub: Mon, 06 Oct 2025 14:22:04 GMT
    🏷️ Git tag created: Mon, 06 Oct 2025 14:21:51 GMT

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

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

    Downloads