core: standardize exit codes and add mappings (#12467)

* Standardize exit codes and add mappings

Replace generic exit 1 usages with specific numeric exit codes and add corresponding explanations to the error lookup. This commit updates multiple misc/* scripts to return distinct codes for validation, Proxmox/LXC, networking, download and curl errors (e.g. 103-123, 64, 107-120, 206, 0 for explicit user cancels). It also updates curl error handling to propagate the original curl exit code and adds new entries in explain_exit_code and the error handler to improve diagnostics.

* Set exit code 115 for update_os errors

Change exit status from 6 to 115 in misc/alpine-install.func's update_os() error handlers when failing to download tools.func or when the expected functions are missing. This gives a distinct exit code for these specific failure cases.

* Add tools/addon exit codes and use them

Introduce exit codes 232-238 for Tools & Addon scripts in misc/api.func and misc/error_handler.func. Update addon scripts (tools/addon/adguardhome-sync.sh, tools/addon/copyparty.sh, tools/addon/cronmaster.sh) to return specific codes instead of generic exit 1: 238 for unsupported OS and 233 when the application is not installed/upgrade prerequisites are missing. This makes failures more descriptive and aligns scripts with the central error explanations.

* Standardize exit codes in exporter addons

Unify exit codes across exporter addon scripts: return 238 for unsupported OS detections and 233 when an update is requested but the exporter is not installed. Applied to nextcloud-exporter.sh, pihole-exporter.sh, prometheus-paperless-ngx-exporter.sh, and qbittorrent-exporter.sh to make failure modes distinguishable for callers/automation.

* Use specific exit codes in addon scripts

Replace generic exit 1 with distinct exit codes across multiple addon scripts to enable finer-grained error handling in automation. Exit codes introduced: 10 for Docker/Compose missing or user-declined Docker install, 233 for "nothing to update" cases, and 238 for unsupported OS cases. Affected files: tools/addon/arcane.sh, coolify.sh, dockge.sh, dokploy.sh, filebrowser-quantum.sh, filebrowser.sh, immich-public-proxy.sh, jellystat.sh, runtipi.sh.

* Use specific exit codes in addon scripts

Replace generic exit 1 with specific exit codes across multiple addon scripts to improve error signaling and handling. Files updated: tools/addon/add-netbird-lxc.sh (exit 238 on unsupported distro), tools/addon/add-tailscale-lxc.sh (treat user cancel as exit 0), tools/addon/glances.sh (exit 233 when not installed), tools/addon/komodo.sh (distinct exits for missing compose, legacy DB, backup/download failures, docker checks), tools/addon/netdata.sh (distinct exits for unsupported PVE versions, OS/codename detection, repo lookups), and tools/addon/phpmyadmin.sh (distinct exits for unsupported OS, network/download issues, package install/start failures, and invalid input). These changes make failures easier to identify and automate recovery or reporting.

* Use specific exit codes in PVE scripts

Replace generic exit 1 with distinct exit codes across tools/pve scripts to provide clearer failure signals for callers. post-pve-install.sh now returns 105 for unsupported Proxmox versions; pve-privilege-converter.sh uses 104 for non-root, 234 when no containers, and 235 for backup/conversion failures; update-apps.sh maps backup failures to 235, missing containers/selections to 234 (and UI cancellations to 0), missing backup storage to 119, and returns the actual container update exit code on failure. These changes improve diagnostics and allow external tooling to react to specific error conditions.

* Standardize exit codes and behaviors

Adjust exit codes and abort handling across multiple PVE helper scripts to provide clearer outcomes for automation and interactive flows. Changes include:

- container-restore-from-backup.sh, core-restore-from-backup.sh: return 235 when no backups found (was 1).
- fstrim.sh: treat user cancellation of non-ext4 warning as non-error (exit 0 instead of 1).
- kernel-clean.sh: treat no selection or user abort as non-error (exit 0 instead of 1).
- lxc-delete.sh: return 234 when no containers are present; treat no selection as non-error (exit 0).
- nic-offloading-fix.sh: use specific non-zero codes for root check and tool install failures (exit 104, 237) and 236 when no matching interfaces (was 1).
- pbs_microcode.sh, post-pmg-install.sh, post-pbs-install.sh: use distinct exit codes (232 and 105) for detected VM/PVE/unsupported distro conditions instead of generic 1.

These modifications make scripts return distinct codes for different failure modes and ensure user-initiated aborts or benign conditions exit with 0 where appropriate.

* Use exit 105 for unsupported PVE versions

Standardize error handling by replacing generic exit 1 with exit 105 in pve_check() across multiple VM template scripts to indicate unsupported Proxmox VE versions. Also add API exit code 226 message for "Proxmox: VM disk import or post-creation setup failed" in misc/api.func. Affected files include misc/api.func and various vm/*-vm.sh scripts.

* Use specific exit codes in VM scripts

Replace generic exit 1 with distinct exit codes across vm/*.sh to make failures more actionable for callers. Changes include: use 226 for missing imported-disk references, 237 for pv installation failures, 115 for download/extract/ISO-related failures, 214 for insufficient disk space during FreeBSD decompression, and 119 for missing storage detection. Updated scripts: archlinux-vm.sh, docker-vm.sh, haos-vm.sh, openwrt-vm.sh, opnsense-vm.sh, truenas-vm.sh, umbrel-os-vm.sh.
This commit is contained in:
CanbiZ (MickLesk)
2026-03-02 10:55:20 +01:00
committed by GitHub
parent 9f15ca6242
commit 5dc244a8c1
58 changed files with 266 additions and 198 deletions

View File

@@ -79,7 +79,7 @@ setting_up_container() {
if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" = "" ]; then if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" = "" ]; then
echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}"
echo -e "${NETWORK}Check Network Settings" echo -e "${NETWORK}Check Network Settings"
exit 1 exit 121
fi fi
msg_ok "Set up Container OS" msg_ok "Set up Container OS"
msg_ok "Network Connected: ${BL}$(ip addr show | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1 | tail -n1)${CL}" msg_ok "Network Connected: ${BL}$(ip addr show | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1 | tail -n1)${CL}"
@@ -99,7 +99,7 @@ network_check() {
echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" echo -e "${INFO}${RD}Expect Issues Without Internet${CL}"
else else
echo -e "${NETWORK}Check Network Settings" echo -e "${NETWORK}Check Network Settings"
exit 1 exit 122
fi fi
fi fi
RESOLVEDIP=$(getent hosts github.com | awk '{ print $1 }') RESOLVEDIP=$(getent hosts github.com | awk '{ print $1 }')
@@ -119,12 +119,12 @@ update_os() {
local tools_content local tools_content
tools_content=$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) || { tools_content=$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) || {
msg_error "Failed to download tools.func" msg_error "Failed to download tools.func"
exit 6 exit 115
} }
source /dev/stdin <<<"$tools_content" source /dev/stdin <<<"$tools_content"
if ! declare -f fetch_and_deploy_gh_release >/dev/null 2>&1; then if ! declare -f fetch_and_deploy_gh_release >/dev/null 2>&1; then
msg_error "tools.func loaded but incomplete — missing expected functions" msg_error "tools.func loaded but incomplete — missing expected functions"
exit 6 exit 115
fi fi
msg_ok "Updated Container OS" msg_ok "Updated Container OS"
post_progress_to_api post_progress_to_api

View File

@@ -124,6 +124,7 @@ detect_repo_source
# * Generic/Shell errors (1-3, 10, 124-132, 134, 137, 139, 141, 143-146) # * Generic/Shell errors (1-3, 10, 124-132, 134, 137, 139, 141, 143-146)
# * curl/wget errors (4-8, 16, 18, 22-28, 30, 32-36, 39, 44-48, 51-52, 55-57, 59, 61, 63, 75, 78-79, 92, 95) # * curl/wget errors (4-8, 16, 18, 22-28, 30, 32-36, 39, 44-48, 51-52, 55-57, 59, 61, 63, 75, 78-79, 92, 95)
# * Package manager errors (APT, DPKG: 100-102, 255) # * Package manager errors (APT, DPKG: 100-102, 255)
# * Script Validation & Setup (103-123)
# * BSD sysexits (64-78) # * BSD sysexits (64-78)
# * Systemd/Service errors (150-154) # * Systemd/Service errors (150-154)
# * Python/pip/uv errors (160-162) # * Python/pip/uv errors (160-162)
@@ -131,6 +132,7 @@ detect_repo_source
# * MySQL/MariaDB errors (180-183) # * MySQL/MariaDB errors (180-183)
# * MongoDB errors (190-193) # * MongoDB errors (190-193)
# * Proxmox custom codes (200-231) # * Proxmox custom codes (200-231)
# * Tools & Addon Scripts (232-238)
# * Node.js/npm errors (239, 243, 245-249) # * Node.js/npm errors (239, 243, 245-249)
# - Returns description string for given exit code # - Returns description string for given exit code
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@@ -189,6 +191,29 @@ explain_exit_code() {
101) echo "APT: Configuration error (bad sources.list, malformed config)" ;; 101) echo "APT: Configuration error (bad sources.list, malformed config)" ;;
102) echo "APT: Lock held by another process (dpkg/apt still running)" ;; 102) echo "APT: Lock held by another process (dpkg/apt still running)" ;;
# --- Script Validation & Setup (103-123) ---
103) echo "Validation: Shell is not Bash" ;;
104) echo "Validation: Not running as root (or invoked via sudo)" ;;
105) echo "Validation: Proxmox VE version not supported" ;;
106) echo "Validation: Architecture not supported (ARM / PiMox)" ;;
107) echo "Validation: Kernel key parameters unreadable" ;;
108) echo "Validation: Kernel key limits exceeded" ;;
109) echo "Proxmox: No available container ID after max attempts" ;;
110) echo "Proxmox: Failed to apply default.vars" ;;
111) echo "Proxmox: App defaults file not available" ;;
112) echo "Proxmox: Invalid install menu option" ;;
113) echo "LXC: Under-provisioned — user aborted update" ;;
114) echo "LXC: Storage too low — user aborted update" ;;
115) echo "Download: install.func download failed or incomplete" ;;
116) echo "Proxmox: Default bridge vmbr0 not found" ;;
117) echo "LXC: Container did not reach running state" ;;
118) echo "LXC: No IP assigned to container after timeout" ;;
119) echo "Proxmox: No valid storage for rootdir content" ;;
120) echo "Proxmox: No valid storage for vztmpl content" ;;
121) echo "LXC: Container network not ready (no IP after retries)" ;;
122) echo "LXC: No internet connectivity — user declined to continue" ;;
123) echo "LXC: Local IP detection failed" ;;
# --- BSD sysexits.h (64-78) --- # --- BSD sysexits.h (64-78) ---
64) echo "Usage error (wrong arguments)" ;; 64) echo "Usage error (wrong arguments)" ;;
65) echo "Data format error (bad input data)" ;; 65) echo "Data format error (bad input data)" ;;
@@ -276,8 +301,18 @@ explain_exit_code() {
223) echo "Proxmox: Template not available after download" ;; 223) echo "Proxmox: Template not available after download" ;;
224) echo "Proxmox: PBS storage is for backups only" ;; 224) echo "Proxmox: PBS storage is for backups only" ;;
225) echo "Proxmox: No template available for OS/Version" ;; 225) echo "Proxmox: No template available for OS/Version" ;;
226) echo "Proxmox: VM disk import or post-creation setup failed" ;;
231) echo "Proxmox: LXC stack upgrade failed" ;; 231) echo "Proxmox: LXC stack upgrade failed" ;;
# --- Tools & Addon Scripts (232-238) ---
232) echo "Tools: Wrong execution environment (run on PVE host, not inside LXC)" ;;
233) echo "Tools: Application not installed (update prerequisite missing)" ;;
234) echo "Tools: No LXC containers found or available" ;;
235) echo "Tools: Backup or restore operation failed" ;;
236) echo "Tools: Required hardware not detected" ;;
237) echo "Tools: Dependency package installation failed" ;;
238) echo "Tools: OS or distribution not supported for this addon" ;;
# --- Node.js / npm / pnpm / yarn (239-249) --- # --- Node.js / npm / pnpm / yarn (239-249) ---
239) echo "npm/Node.js: Unexpected runtime error or dependency failure" ;; 239) echo "npm/Node.js: Unexpected runtime error or dependency failure" ;;
243) echo "Node.js: Out of memory (JavaScript heap out of memory)" ;; 243) echo "Node.js: Out of memory (JavaScript heap out of memory)" ;;

View File

@@ -119,7 +119,7 @@ maxkeys_check() {
# Exit if kernel parameters are unavailable # Exit if kernel parameters are unavailable
if [[ "$per_user_maxkeys" -eq 0 || "$per_user_maxbytes" -eq 0 ]]; then if [[ "$per_user_maxkeys" -eq 0 || "$per_user_maxbytes" -eq 0 ]]; then
msg_error "Unable to read kernel key parameters. Ensure proper permissions." msg_error "Unable to read kernel key parameters. Ensure proper permissions."
exit 1 exit 107
fi fi
# Fetch key usage for user ID 100000 (typical for containers) # Fetch key usage for user ID 100000 (typical for containers)
@@ -148,7 +148,7 @@ maxkeys_check() {
# Provide next steps if issues are detected # Provide next steps if issues are detected
if [[ "$failure" -eq 1 ]]; then if [[ "$failure" -eq 1 ]]; then
msg_error "Kernel key limits exceeded - see suggestions above" msg_error "Kernel key limits exceeded - see suggestions above"
exit 1 exit 108
fi fi
# Silent success - only show errors if they exist # Silent success - only show errors if they exist
@@ -355,7 +355,7 @@ get_valid_container_id() {
attempts=$((attempts + 1)) attempts=$((attempts + 1))
if [[ $attempts -ge $max_attempts ]]; then if [[ $attempts -ge $max_attempts ]]; then
msg_error "Could not find available container ID after $max_attempts attempts" msg_error "Could not find available container ID after $max_attempts attempts"
exit 1 exit 109
fi fi
done done
@@ -2035,7 +2035,7 @@ advanced_settings() {
else else
whiptail --msgbox "Default bridge 'vmbr0' not found!\n\nPlease configure a network bridge in Proxmox first." 10 58 whiptail --msgbox "Default bridge 'vmbr0' not found!\n\nPlease configure a network bridge in Proxmox first." 10 58
msg_error "Default bridge 'vmbr0' not found" msg_error "Default bridge 'vmbr0' not found"
exit 1 exit 116
fi fi
else else
if result=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ if result=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \
@@ -3023,7 +3023,7 @@ install_script() {
3 | mydefaults | MYDEFAULTS | userdefaults | USERDEFAULTS) 3 | mydefaults | MYDEFAULTS | userdefaults | USERDEFAULTS)
default_var_settings || { default_var_settings || {
msg_error "Failed to apply default.vars" msg_error "Failed to apply default.vars"
exit 1 exit 110
} }
defaults_target="/usr/local/community-scripts/default.vars" defaults_target="/usr/local/community-scripts/default.vars"
break break
@@ -3040,7 +3040,7 @@ install_script() {
break break
else else
msg_error "No App Defaults available for ${APP}" msg_error "No App Defaults available for ${APP}"
exit 1 exit 111
fi fi
;; ;;
"$SETTINGS_OPTION" | settings | SETTINGS) "$SETTINGS_OPTION" | settings | SETTINGS)
@@ -3051,7 +3051,7 @@ install_script() {
;; ;;
*) *)
msg_error "Invalid option: $CHOICE" msg_error "Invalid option: $CHOICE"
exit 1 exit 112
;; ;;
esac esac
done done
@@ -3135,7 +3135,7 @@ check_container_resources() {
read -r prompt </dev/tty read -r prompt </dev/tty
if [[ ! ${prompt,,} =~ ^(yes)$ ]]; then if [[ ! ${prompt,,} =~ ^(yes)$ ]]; then
msg_error "Aborted: under-provisioned LXC (${current_cpu} CPU/${current_ram}MB RAM < ${var_cpu} CPU/${var_ram}MB RAM)" msg_error "Aborted: under-provisioned LXC (${current_cpu} CPU/${current_ram}MB RAM < ${var_cpu} CPU/${var_ram}MB RAM)"
exit 1 exit 113
fi fi
else else
echo -e "" echo -e ""
@@ -3158,7 +3158,7 @@ check_container_storage() {
read -r prompt </dev/tty read -r prompt </dev/tty
if [[ ! ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ! ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_error "Aborted: storage too low (${usage}% used)" msg_error "Aborted: storage too low (${usage}% used)"
exit 1 exit 114
fi fi
fi fi
} }
@@ -3446,7 +3446,7 @@ start() {
3) 3)
clear clear
exit_script exit_script
exit exit 0
;; ;;
esac esac
ensure_profile_loaded ensure_profile_loaded
@@ -3556,7 +3556,7 @@ build_container() {
export FUNCTIONS_FILE_PATH="$(curl -fsSL "$_func_url")" export FUNCTIONS_FILE_PATH="$(curl -fsSL "$_func_url")"
if [[ -z "$FUNCTIONS_FILE_PATH" || ${#FUNCTIONS_FILE_PATH} -lt 100 ]]; then if [[ -z "$FUNCTIONS_FILE_PATH" || ${#FUNCTIONS_FILE_PATH} -lt 100 ]]; then
msg_error "Failed to download install functions from: $_func_url" msg_error "Failed to download install functions from: $_func_url"
exit 1 exit 115
fi fi
# Core exports for install.func # Core exports for install.func
@@ -3938,7 +3938,7 @@ EOF
local ct_status local ct_status
ct_status=$(pct status "$CTID" 2>/dev/null || echo "unknown") ct_status=$(pct status "$CTID" 2>/dev/null || echo "unknown")
msg_error "LXC Container did not reach running state (status: ${ct_status})" msg_error "LXC Container did not reach running state (status: ${ct_status})"
exit 1 exit 117
fi fi
done done
@@ -3967,7 +3967,7 @@ EOF
echo " • Verify static IP configuration (if using static IP)" echo " • Verify static IP configuration (if using static IP)"
echo " • Check Proxmox firewall rules" echo " • Check Proxmox firewall rules"
echo " • If using Tailscale: Disable MagicDNS temporarily" echo " • If using Tailscale: Disable MagicDNS temporarily"
exit 1 exit 118
fi fi
# Verify basic connectivity (ping test) # Verify basic connectivity (ping test)
@@ -4968,11 +4968,11 @@ create_lxc_container() {
# Storage capability check # Storage capability check
check_storage_support "rootdir" || { check_storage_support "rootdir" || {
msg_error "No valid storage found for 'rootdir' [Container]" msg_error "No valid storage found for 'rootdir' [Container]"
exit 1 exit 119
} }
check_storage_support "vztmpl" || { check_storage_support "vztmpl" || {
msg_error "No valid storage found for 'vztmpl' [Template]" msg_error "No valid storage found for 'vztmpl' [Template]"
exit 1 exit 120
} }
# Template storage selection # Template storage selection
@@ -5250,7 +5250,7 @@ create_lxc_container() {
} }
else else
msg_custom "🚫" "${YW}" "Installation cancelled" msg_custom "🚫" "${YW}" "Installation cancelled"
exit 1 exit 0
fi fi
else else
msg_error "No ${PCT_OSTYPE} templates available" msg_error "No ${PCT_OSTYPE} templates available"

View File

@@ -276,7 +276,7 @@ shell_check() {
msg_error "Your default shell is currently not set to Bash. To use these scripts, please switch to the Bash shell." msg_error "Your default shell is currently not set to Bash. To use these scripts, please switch to the Bash shell."
echo -e "\nExiting..." echo -e "\nExiting..."
sleep 2 sleep 2
exit 1 exit 103
fi fi
} }
@@ -293,7 +293,7 @@ root_check() {
msg_error "Please run this script as root." msg_error "Please run this script as root."
echo -e "\nExiting..." echo -e "\nExiting..."
sleep 2 sleep 2
exit 1 exit 104
fi fi
} }
@@ -314,7 +314,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -325,7 +325,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not yet supported." msg_error "This version of Proxmox VE is not yet supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -333,7 +333,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.9 or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.9 or 9.0 9.1"
exit 1 exit 105
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@@ -348,7 +348,7 @@ arch_check() {
msg_error "This script will not work with PiMox (ARM architecture detected)." msg_error "This script will not work with PiMox (ARM architecture detected)."
msg_warn "Visit https://github.com/asylumexp/Proxmox for ARM64 support." msg_warn "Visit https://github.com/asylumexp/Proxmox for ARM64 support."
sleep 2 sleep 2
exit 1 exit 106
fi fi
} }

View File

@@ -94,6 +94,29 @@ if ! declare -f explain_exit_code &>/dev/null; then
100) echo "APT: Package manager error (broken packages / dependency problems)" ;; 100) echo "APT: Package manager error (broken packages / dependency problems)" ;;
101) echo "APT: Configuration error (bad sources.list, malformed config)" ;; 101) echo "APT: Configuration error (bad sources.list, malformed config)" ;;
102) echo "APT: Lock held by another process (dpkg/apt still running)" ;; 102) echo "APT: Lock held by another process (dpkg/apt still running)" ;;
# --- Script Validation & Setup (103-123) ---
103) echo "Validation: Shell is not Bash" ;;
104) echo "Validation: Not running as root (or invoked via sudo)" ;;
105) echo "Validation: Proxmox VE version not supported" ;;
106) echo "Validation: Architecture not supported (ARM / PiMox)" ;;
107) echo "Validation: Kernel key parameters unreadable" ;;
108) echo "Validation: Kernel key limits exceeded" ;;
109) echo "Proxmox: No available container ID after max attempts" ;;
110) echo "Proxmox: Failed to apply default.vars" ;;
111) echo "Proxmox: App defaults file not available" ;;
112) echo "Proxmox: Invalid install menu option" ;;
113) echo "LXC: Under-provisioned — user aborted update" ;;
114) echo "LXC: Storage too low — user aborted update" ;;
115) echo "Download: install.func download failed or incomplete" ;;
116) echo "Proxmox: Default bridge vmbr0 not found" ;;
117) echo "LXC: Container did not reach running state" ;;
118) echo "LXC: No IP assigned to container after timeout" ;;
119) echo "Proxmox: No valid storage for rootdir content" ;;
120) echo "Proxmox: No valid storage for vztmpl content" ;;
121) echo "LXC: Container network not ready (no IP after retries)" ;;
122) echo "LXC: No internet connectivity — user declined to continue" ;;
123) echo "LXC: Local IP detection failed" ;;
124) echo "Command timed out (timeout command)" ;; 124) echo "Command timed out (timeout command)" ;;
125) echo "Command failed to start (Docker daemon or execution error)" ;; 125) echo "Command failed to start (Docker daemon or execution error)" ;;
126) echo "Command invoked cannot execute (permission problem?)" ;; 126) echo "Command invoked cannot execute (permission problem?)" ;;
@@ -155,6 +178,16 @@ if ! declare -f explain_exit_code &>/dev/null; then
224) echo "Proxmox: PBS storage is for backups only" ;; 224) echo "Proxmox: PBS storage is for backups only" ;;
225) echo "Proxmox: No template available for OS/Version" ;; 225) echo "Proxmox: No template available for OS/Version" ;;
231) echo "Proxmox: LXC stack upgrade failed" ;; 231) echo "Proxmox: LXC stack upgrade failed" ;;
# --- Tools & Addon Scripts (232-238) ---
232) echo "Tools: Wrong execution environment (run on PVE host, not inside LXC)" ;;
233) echo "Tools: Application not installed (update prerequisite missing)" ;;
234) echo "Tools: No LXC containers found or available" ;;
235) echo "Tools: Backup or restore operation failed" ;;
236) echo "Tools: Required hardware not detected" ;;
237) echo "Tools: Dependency package installation failed" ;;
238) echo "Tools: OS or distribution not supported for this addon" ;;
239) echo "npm/Node.js: Unexpected runtime error or dependency failure" ;; 239) echo "npm/Node.js: Unexpected runtime error or dependency failure" ;;
243) echo "Node.js: Out of memory (JavaScript heap out of memory)" ;; 243) echo "Node.js: Out of memory (JavaScript heap out of memory)" ;;
245) echo "Node.js: Invalid command-line option" ;; 245) echo "Node.js: Invalid command-line option" ;;

View File

@@ -126,7 +126,7 @@ setting_up_container() {
if [ "$(hostname -I)" = "" ]; then if [ "$(hostname -I)" = "" ]; then
echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}"
echo -e "${NETWORK}Check Network Settings" echo -e "${NETWORK}Check Network Settings"
exit 1 exit 121
fi fi
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
systemctl disable -q --now systemd-networkd-wait-online.service systemctl disable -q --now systemd-networkd-wait-online.service
@@ -177,7 +177,7 @@ network_check() {
echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" echo -e "${INFO}${RD}Expect Issues Without Internet${CL}"
else else
echo -e "${NETWORK}Check Network Settings" echo -e "${NETWORK}Check Network Settings"
exit 1 exit 122
fi fi
fi fi
@@ -242,12 +242,12 @@ EOF
local tools_content local tools_content
tools_content=$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) || { tools_content=$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) || {
msg_error "Failed to download tools.func" msg_error "Failed to download tools.func"
exit 6 exit 115
} }
source /dev/stdin <<<"$tools_content" source /dev/stdin <<<"$tools_content"
if ! declare -f fetch_and_deploy_gh_release >/dev/null 2>&1; then if ! declare -f fetch_and_deploy_gh_release >/dev/null 2>&1; then
msg_error "tools.func loaded but incomplete — missing expected functions" msg_error "tools.func loaded but incomplete — missing expected functions"
exit 6 exit 115
fi fi
} }

View File

@@ -5153,7 +5153,7 @@ current_ip="$(get_current_ip)"
if [[ -z "$current_ip" ]]; then if [[ -z "$current_ip" ]]; then
echo "[ERROR] Could not detect local IP" >&2 echo "[ERROR] Could not detect local IP" >&2
exit 1 exit 123
fi fi
if [[ -f "$IP_FILE" ]]; then if [[ -f "$IP_FILE" ]]; then

View File

@@ -244,7 +244,7 @@ curl_handler() {
if [[ -z "$url" ]]; then if [[ -z "$url" ]]; then
msg_error "no valid url or option entered for curl_handler" msg_error "no valid url or option entered for curl_handler"
exit 1 exit 64
fi fi
$STD msg_info "Fetching: $url" $STD msg_info "Fetching: $url"
@@ -273,7 +273,7 @@ curl_handler() {
rm -f /tmp/curl_error.log rm -f /tmp/curl_error.log
fi fi
__curl_err_handler "$exit_code" "$url" "$curl_stderr" __curl_err_handler "$exit_code" "$url" "$curl_stderr"
exit 1 # hard exit if exit_code is not 0 exit "$exit_code"
fi fi
$STD printf "\r\033[K${INFO}${YW}Retry $attempt/$max_retries in ${delay}s...${CL}" >&2 $STD printf "\r\033[K${INFO}${YW}Retry $attempt/$max_retries in ${delay}s...${CL}" >&2
@@ -316,7 +316,7 @@ __curl_err_handler() {
esac esac
[[ -n "$curl_msg" ]] && printf "%s\n" "$curl_msg" >&2 [[ -n "$curl_msg" ]] && printf "%s\n" "$curl_msg" >&2
exit 1 exit "$exit_code"
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@@ -331,7 +331,7 @@ shell_check() {
msg_error "Your default shell is currently not set to Bash. To use these scripts, please switch to the Bash shell." msg_error "Your default shell is currently not set to Bash. To use these scripts, please switch to the Bash shell."
echo -e "\nExiting..." echo -e "\nExiting..."
sleep 2 sleep 2
exit exit 103
fi fi
} }
@@ -552,7 +552,7 @@ check_root() {
msg_error "Please run this script as root." msg_error "Please run this script as root."
echo -e "\nExiting..." echo -e "\nExiting..."
sleep 2 sleep 2
exit exit 104
fi fi
} }
@@ -562,7 +562,7 @@ pve_check() {
echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.1." echo -e "Requires Proxmox Virtual Environment Version 8.1 - 8.4 or 9.0 - 9.1."
echo -e "Exiting..." echo -e "Exiting..."
sleep 2 sleep 2
exit exit 105
fi fi
} }
@@ -572,21 +572,21 @@ arch_check() {
echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n" echo -e "\n ${YWB}Visit https://github.com/asylumexp/Proxmox for ARM64 support. \n"
echo -e "Exiting..." echo -e "Exiting..."
sleep 2 sleep 2
exit exit 106
fi fi
} }
exit_script() { exit_script() {
clear clear
echo -e "\n${CROSS}${RD}User exited script${CL}\n" echo -e "\n${CROSS}${RD}User exited script${CL}\n"
exit exit 0
} }
check_hostname_conflict() { check_hostname_conflict() {
local hostname="$1" local hostname="$1"
if qm list | awk '{print $2}' | grep -qx "$hostname"; then if qm list | awk '{print $2}' | grep -qx "$hostname"; then
msg_error "Hostname $hostname already in use by another VM." msg_error "Hostname $hostname already in use by another VM."
exit 1 exit 206
fi fi
} }

View File

@@ -73,7 +73,7 @@ fi
DISTRO=$(pct exec "$CTID" -- cat /etc/os-release | grep -w "ID" | cut -d'=' -f2 | tr -d '"') DISTRO=$(pct exec "$CTID" -- cat /etc/os-release | grep -w "ID" | cut -d'=' -f2 | tr -d '"')
if [[ "$DISTRO" != "debian" && "$DISTRO" != "ubuntu" ]]; then if [[ "$DISTRO" != "debian" && "$DISTRO" != "ubuntu" ]]; then
msg "\e[1;31m Error: This script only supports Debian or Ubuntu LXC containers. Detected: $DISTRO. Aborting...\e[0m" msg "\e[1;31m Error: This script only supports Debian or Ubuntu LXC containers. Detected: $DISTRO. Aborting...\e[0m"
exit 1 exit 238
fi fi
CTID_CONFIG_PATH=/etc/pve/lxc/${CTID}.conf CTID_CONFIG_PATH=/etc/pve/lxc/${CTID}.conf

View File

@@ -32,7 +32,7 @@ header_info
if ! command -v pveversion &>/dev/null; then if ! command -v pveversion &>/dev/null; then
msg_error "This script must be run on the Proxmox VE host (not inside an LXC container)" msg_error "This script must be run on the Proxmox VE host (not inside an LXC container)"
exit 1 exit 232
fi fi
while true; do while true; do
@@ -64,7 +64,7 @@ while [[ -z "${CTID}" ]]; do
CTID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --radiolist \ CTID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --radiolist \
"\nSelect a container to add Tailscale to:\n" \ "\nSelect a container to add Tailscale to:\n" \
16 $((MSG_MAX_LENGTH + 23)) 6 \ 16 $((MSG_MAX_LENGTH + 23)) 6 \
"${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit 1 "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit 0
done done
CTID_CONFIG_PATH="/etc/pve/lxc/${CTID}.conf" CTID_CONFIG_PATH="/etc/pve/lxc/${CTID}.conf"

View File

@@ -69,7 +69,7 @@ elif [[ -f "/etc/debian_version" ]]; then
SERVICE_PATH="/etc/systemd/system/adguardhome-sync.service" SERVICE_PATH="/etc/systemd/system/adguardhome-sync.service"
else else
msg_error "Unsupported OS detected. Exiting." msg_error "Unsupported OS detected. Exiting."
exit 1 exit 238
fi fi
# ============================================================================== # ==============================================================================
@@ -312,7 +312,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -87,11 +87,11 @@ function update() {
function check_docker() { function check_docker() {
if ! command -v docker &>/dev/null; then if ! command -v docker &>/dev/null; then
msg_error "Docker is not installed. This script requires an existing Docker LXC. Exiting." msg_error "Docker is not installed. This script requires an existing Docker LXC. Exiting."
exit 1 exit 10
fi fi
if ! docker compose version &>/dev/null; then if ! docker compose version &>/dev/null; then
msg_error "Docker Compose plugin is not available. Please install it before running this script. Exiting." msg_error "Docker Compose plugin is not available. Please install it before running this script. Exiting."
exit 1 exit 10
fi fi
msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') and Docker Compose are available" msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') and Docker Compose are available"
} }
@@ -171,7 +171,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -93,7 +93,7 @@ function check_or_install_docker() {
msg_ok "Docker Compose is available" msg_ok "Docker Compose is available"
else else
msg_error "Docker Compose plugin is not available. Please install it." msg_error "Docker Compose plugin is not available. Please install it."
exit 1 exit 10
fi fi
return return
fi fi
@@ -103,7 +103,7 @@ function check_or_install_docker() {
read -r install_docker_prompt read -r install_docker_prompt
if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then
msg_error "Docker is required for ${APP}. Exiting." msg_error "Docker is required for ${APP}. Exiting."
exit 1 exit 10
fi fi
msg_info "Installing Docker" msg_info "Installing Docker"
@@ -165,7 +165,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -49,7 +49,7 @@ elif grep -qE 'ID=debian|ID=ubuntu' /etc/os-release; then
SERVICE_PATH="/etc/systemd/system/copyparty.service" SERVICE_PATH="/etc/systemd/system/copyparty.service"
else else
msg_error "Unsupported OS detected. Exiting." msg_error "Unsupported OS detected. Exiting."
exit 1 exit 238
fi fi
# ============================================================================== # ==============================================================================
@@ -318,7 +318,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -51,7 +51,7 @@ EOF
# ============================================================================== # ==============================================================================
if ! grep -qE 'ID=debian|ID=ubuntu' /etc/os-release 2>/dev/null; then if ! grep -qE 'ID=debian|ID=ubuntu' /etc/os-release 2>/dev/null; then
echo -e "${CROSS} Unsupported OS detected. This script only supports Debian and Ubuntu." echo -e "${CROSS} Unsupported OS detected. This script only supports Debian and Ubuntu."
exit 1 exit 238
fi fi
# ============================================================================== # ==============================================================================
@@ -183,7 +183,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -99,7 +99,7 @@ function check_or_install_docker() {
msg_ok "Docker Compose is available" msg_ok "Docker Compose is available"
else else
msg_error "Docker Compose plugin is not available. Please install it." msg_error "Docker Compose plugin is not available. Please install it."
exit 1 exit 10
fi fi
return return
fi fi
@@ -109,7 +109,7 @@ function check_or_install_docker() {
read -r install_docker_prompt read -r install_docker_prompt
if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then
msg_error "Docker is required for ${APP}. Exiting." msg_error "Docker is required for ${APP}. Exiting."
exit 1 exit 10
fi fi
msg_info "Installing Docker" msg_info "Installing Docker"
@@ -160,7 +160,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -92,7 +92,7 @@ function check_or_install_docker() {
msg_ok "Docker Compose is available" msg_ok "Docker Compose is available"
else else
msg_error "Docker Compose plugin is not available. Please install it." msg_error "Docker Compose plugin is not available. Please install it."
exit 1 exit 10
fi fi
return return
fi fi
@@ -102,7 +102,7 @@ function check_or_install_docker() {
read -r install_docker_prompt read -r install_docker_prompt
if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then
msg_error "Docker is required for ${APP}. Exiting." msg_error "Docker is required for ${APP}. Exiting."
exit 1 exit 10
fi fi
msg_info "Installing Docker" msg_info "Installing Docker"
@@ -163,7 +163,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -54,7 +54,7 @@ elif [[ -f "/etc/debian_version" ]]; then
PKG_MANAGER="apt-get install -y" PKG_MANAGER="apt-get install -y"
else else
echo -e "${CROSS} Unsupported OS detected. Exiting." echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1 exit 238
fi fi
header_info header_info

View File

@@ -52,7 +52,7 @@ elif [[ -f "/etc/debian_version" ]]; then
PKG_MANAGER="apt-get install -y" PKG_MANAGER="apt-get install -y"
else else
echo -e "${CROSS} Unsupported OS detected. Exiting." echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1 exit 238
fi fi
header_info header_info

View File

@@ -93,7 +93,7 @@ EOF
update_glances_debian() { update_glances_debian() {
if [[ ! -d /opt/glances/.venv ]]; then if [[ ! -d /opt/glances/.venv ]]; then
msg_error "$APP is not installed" msg_error "$APP is not installed"
exit 1 exit 233
fi fi
msg_info "Updating $APP" msg_info "Updating $APP"
cd /opt/glances cd /opt/glances
@@ -160,7 +160,7 @@ EOF
update_glances_alpine() { update_glances_alpine() {
if [[ ! -d /opt/glances/.venv ]]; then if [[ ! -d /opt/glances/.venv ]]; then
msg_error "$APP is not installed" msg_error "$APP is not installed"
exit 1 exit 233
fi fi
msg_info "Updating $APP" msg_info "Updating $APP"
cd /opt/glances cd /opt/glances

View File

@@ -52,13 +52,13 @@ EOF
# ============================================================================== # ==============================================================================
if [[ -f "/etc/alpine-release" ]]; then if [[ -f "/etc/alpine-release" ]]; then
msg_error "Alpine is not supported for ${APP}. Use Debian." msg_error "Alpine is not supported for ${APP}. Use Debian."
exit 1 exit 238
elif [[ -f "/etc/debian_version" ]]; then elif [[ -f "/etc/debian_version" ]]; then
OS="Debian" OS="Debian"
SERVICE_PATH="/etc/systemd/system/immich-proxy.service" SERVICE_PATH="/etc/systemd/system/immich-proxy.service"
else else
echo -e "${CROSS} Unsupported OS detected. Exiting." echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1 exit 238
fi fi
# ============================================================================== # ==============================================================================
@@ -231,7 +231,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -52,13 +52,13 @@ EOF
# ============================================================================== # ==============================================================================
if [[ -f "/etc/alpine-release" ]]; then if [[ -f "/etc/alpine-release" ]]; then
msg_error "Alpine is not supported for ${APP}. Use Debian/Ubuntu." msg_error "Alpine is not supported for ${APP}. Use Debian/Ubuntu."
exit 1 exit 238
elif [[ -f "/etc/debian_version" ]]; then elif [[ -f "/etc/debian_version" ]]; then
OS="Debian" OS="Debian"
SERVICE_PATH="/etc/systemd/system/jellystat.service" SERVICE_PATH="/etc/systemd/system/jellystat.service"
else else
echo -e "${CROSS} Unsupported OS detected. Exiting." echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1 exit 238
fi fi
# ============================================================================== # ==============================================================================
@@ -326,7 +326,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -37,7 +37,7 @@ function find_compose_file() {
COMPOSE_FILE=$(find "$INSTALL_PATH" -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1) COMPOSE_FILE=$(find "$INSTALL_PATH" -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
if [[ -z "${COMPOSE_FILE:-}" ]]; then if [[ -z "${COMPOSE_FILE:-}" ]]; then
msg_error "No valid compose file found in ${INSTALL_PATH}!" msg_error "No valid compose file found in ${INSTALL_PATH}!"
exit 1 exit 233
fi fi
COMPOSE_BASENAME=$(basename "$COMPOSE_FILE") COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
} }
@@ -48,7 +48,7 @@ function check_legacy_db() {
echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}" echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
echo -e "${YW}Please follow the migration guide:${CL}" echo -e "${YW}Please follow the migration guide:${CL}"
echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n" echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
exit 1 exit 238
fi fi
} }
@@ -79,14 +79,14 @@ function update() {
BACKUP_FILE="${INSTALL_PATH}/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)" BACKUP_FILE="${INSTALL_PATH}/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
cp "$COMPOSE_FILE" "$BACKUP_FILE" || { cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
msg_error "Failed to create backup of ${COMPOSE_BASENAME}!" msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
exit 1 exit 235
} }
GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}" GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}"
if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then
msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!" msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!"
mv "$BACKUP_FILE" "$COMPOSE_FILE" mv "$BACKUP_FILE" "$COMPOSE_FILE"
exit 1 exit 115
fi fi
if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' "$COMPOSE_ENV"; then if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' "$COMPOSE_ENV"; then
@@ -129,7 +129,7 @@ function check_or_install_docker() {
msg_ok "Docker Compose is available" msg_ok "Docker Compose is available"
else else
msg_error "Docker Compose plugin is not available. Please install it." msg_error "Docker Compose plugin is not available. Please install it."
exit 1 exit 10
fi fi
return return
fi fi
@@ -139,7 +139,7 @@ function check_or_install_docker() {
read -r install_docker_prompt read -r install_docker_prompt
if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then
msg_error "Docker is required for ${APP}. Exiting." msg_error "Docker is required for ${APP}. Exiting."
exit 1 exit 10
fi fi
msg_info "Installing Docker" msg_info "Installing Docker"
@@ -239,7 +239,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -58,7 +58,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -69,7 +69,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not yet supported." msg_error "This version of Proxmox VE is not yet supported."
msg_error "Supported: Proxmox VE version 9.09.1.x" msg_error "Supported: Proxmox VE version 9.09.1.x"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -77,19 +77,19 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.9 or 9.09.1.x" msg_error "Supported versions: Proxmox VE 8.0 8.9 or 9.09.1.x"
exit 1 exit 105
} }
detect_codename() { detect_codename() {
source /etc/os-release source /etc/os-release
if [[ "$ID" != "debian" ]]; then if [[ "$ID" != "debian" ]]; then
msg_error "Unsupported base OS: $ID (only Proxmox VE / Debian supported)." msg_error "Unsupported base OS: $ID (only Proxmox VE / Debian supported)."
exit 1 exit 238
fi fi
CODENAME="${VERSION_CODENAME:-}" CODENAME="${VERSION_CODENAME:-}"
if [[ -z "$CODENAME" ]]; then if [[ -z "$CODENAME" ]]; then
msg_error "Could not detect Debian codename." msg_error "Could not detect Debian codename."
exit 1 exit 71
fi fi
echo "$CODENAME" echo "$CODENAME"
} }
@@ -124,7 +124,7 @@ install() {
PKG=$(get_latest_repo_pkg "$REPO_URL") PKG=$(get_latest_repo_pkg "$REPO_URL")
if [[ -z "$PKG" ]]; then if [[ -z "$PKG" ]]; then
msg_error "Could not find netdata-repo package for Debian $CODENAME" msg_error "Could not find netdata-repo package for Debian $CODENAME"
exit 1 exit 237
fi fi
curl -fsSL "${REPO_URL}${PKG}" -o "$PKG" curl -fsSL "${REPO_URL}${PKG}" -o "$PKG"
$STD dpkg -i "$PKG" $STD dpkg -i "$PKG"

View File

@@ -36,7 +36,7 @@ SERVICE_PATH="/etc/systemd/system/nextcloud-exporter.service"
# ============================================================================== # ==============================================================================
if ! grep -qE 'ID=debian|ID=ubuntu' /etc/os-release 2>/dev/null; then if ! grep -qE 'ID=debian|ID=ubuntu' /etc/os-release 2>/dev/null; then
echo -e "${CROSS} Unsupported OS detected. This script only supports Debian and Ubuntu." echo -e "${CROSS} Unsupported OS detected. This script only supports Debian and Ubuntu."
exit 1 exit 238
fi fi
# ============================================================================== # ==============================================================================
@@ -170,7 +170,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "Nextcloud-Exporter is not installed. Nothing to update." msg_error "Nextcloud-Exporter is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -52,7 +52,7 @@ elif [[ -f "/etc/debian_version" ]]; then
INSTALL_DIR="$INSTALL_DIR_DEBIAN" INSTALL_DIR="$INSTALL_DIR_DEBIAN"
else else
echo -e "${CROSS} Unsupported OS detected. Exiting." echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1 exit 238
fi fi
header_info header_info
@@ -72,7 +72,7 @@ function check_internet() {
msg_ok "Internet connectivity OK" msg_ok "Internet connectivity OK"
else else
msg_error "Internet connectivity or GitHub unreachable (Status $HTTP_CODE). Exiting." msg_error "Internet connectivity or GitHub unreachable (Status $HTTP_CODE). Exiting."
exit 1 exit 115
fi fi
} }
@@ -105,7 +105,7 @@ function install_php_and_modules() {
msg_info "Installing missing PHP packages: ${MISSING_PACKAGES[*]}" msg_info "Installing missing PHP packages: ${MISSING_PACKAGES[*]}"
if ! apt-get update &>/dev/null || ! apt-get install -y "${MISSING_PACKAGES[@]}" &>/dev/null; then if ! apt-get update &>/dev/null || ! apt-get install -y "${MISSING_PACKAGES[@]}" &>/dev/null; then
msg_error "Failed to install required PHP modules. Exiting." msg_error "Failed to install required PHP modules. Exiting."
exit 1 exit 237
fi fi
msg_ok "Installed missing PHP packages" msg_ok "Installed missing PHP packages"
else else
@@ -132,7 +132,7 @@ function install_phpmyadmin() {
msg_info "Downloading ${TARBALL_URL}" msg_info "Downloading ${TARBALL_URL}"
if ! curl -fsSL "$TARBALL_URL" -o /tmp/phpmyadmin.tar.gz; then if ! curl -fsSL "$TARBALL_URL" -o /tmp/phpmyadmin.tar.gz; then
msg_error "Download failed: $TARBALL_URL" msg_error "Download failed: $TARBALL_URL"
exit 1 exit 115
fi fi
mkdir -p "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"
@@ -188,7 +188,7 @@ EOF
msg_ok "Started PHP-FPM service: $PHP_FPM_SERVICE" msg_ok "Started PHP-FPM service: $PHP_FPM_SERVICE"
else else
msg_error "Failed to start PHP-FPM service: $PHP_FPM_SERVICE" msg_error "Failed to start PHP-FPM service: $PHP_FPM_SERVICE"
exit 1 exit 150
fi fi
$STD rc-service lighttpd start $STD rc-service lighttpd start
@@ -237,7 +237,7 @@ function update_phpmyadmin() {
if ! curl -fsSL "$TARBALL_URL" -o /tmp/phpmyadmin.tar.gz; then if ! curl -fsSL "$TARBALL_URL" -o /tmp/phpmyadmin.tar.gz; then
msg_error "Download failed: $TARBALL_URL" msg_error "Download failed: $TARBALL_URL"
exit 1 exit 115
fi fi
BACKUP_DIR="/tmp/phpmyadmin-backup-$(date +%Y%m%d-%H%M%S)" BACKUP_DIR="/tmp/phpmyadmin-backup-$(date +%Y%m%d-%H%M%S)"
@@ -280,7 +280,7 @@ if is_phpmyadmin_installed; then
;; ;;
*) *)
echo -e "${YW}⚠️ Invalid input. Exiting.${CL}" echo -e "${YW}⚠️ Invalid input. Exiting.${CL}"
exit 1 exit 112
;; ;;
esac esac
else else

View File

@@ -41,7 +41,7 @@ elif grep -qE 'ID=debian|ID=ubuntu' /etc/os-release; then
SERVICE_PATH="/etc/systemd/system/pihole-exporter.service" SERVICE_PATH="/etc/systemd/system/pihole-exporter.service"
else else
echo -e "${CROSS} Unsupported OS detected. Exiting." echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1 exit 238
fi fi
# ============================================================================== # ==============================================================================
@@ -207,7 +207,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "Pihole-Exporter is not installed. Nothing to update." msg_error "Pihole-Exporter is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -32,7 +32,7 @@ AUTH_TOKEN_FILE="/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_fil
# ============================================================================== # ==============================================================================
if ! grep -qE 'ID=debian|ID=ubuntu' /etc/os-release 2>/dev/null; then if ! grep -qE 'ID=debian|ID=ubuntu' /etc/os-release 2>/dev/null; then
echo -e "${CROSS} Unsupported OS detected. This script only supports Debian and Ubuntu." echo -e "${CROSS} Unsupported OS detected. This script only supports Debian and Ubuntu."
exit 1 exit 238
fi fi
# ============================================================================== # ==============================================================================
@@ -144,7 +144,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "Prometheus-Paperless-NGX-Exporter is not installed. Nothing to update." msg_error "Prometheus-Paperless-NGX-Exporter is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -41,7 +41,7 @@ elif grep -qE 'ID=debian|ID=ubuntu' /etc/os-release; then
SERVICE_PATH="/etc/systemd/system/qbittorrent-exporter.service" SERVICE_PATH="/etc/systemd/system/qbittorrent-exporter.service"
else else
echo -e "${CROSS} Unsupported OS detected. Exiting." echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1 exit 238
fi fi
# ============================================================================== # ==============================================================================
@@ -200,7 +200,7 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "qBittorrent-Exporter is not installed. Nothing to update." msg_error "qBittorrent-Exporter is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi

View File

@@ -62,7 +62,7 @@ function check_or_install_docker() {
msg_ok "Docker Compose is available" msg_ok "Docker Compose is available"
else else
msg_error "Docker Compose plugin is not available. Please install it." msg_error "Docker Compose plugin is not available. Please install it."
exit 1 exit 10
fi fi
return return
fi fi
@@ -72,7 +72,7 @@ function check_or_install_docker() {
read -r install_docker_prompt read -r install_docker_prompt
if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then
msg_error "Docker is required for ${APP}. Exiting." msg_error "Docker is required for ${APP}. Exiting."
exit 1 exit 10
fi fi
msg_info "Installing Docker" msg_info "Installing Docker"
@@ -168,14 +168,14 @@ if [[ "${type:-}" == "update" ]]; then
update update
else else
msg_error "${APP} is not installed. Nothing to update." msg_error "${APP} is not installed. Nothing to update."
exit 1 exit 233
fi fi
exit 0 exit 0
fi fi
if [[ -f /etc/alpine-release ]]; then if [[ -f /etc/alpine-release ]]; then
msg_error "${APP} does not support Alpine Linux. Please use a Debian or Ubuntu based LXC." msg_error "${APP} does not support Alpine Linux. Please use a Debian or Ubuntu based LXC."
exit 1 exit 238
fi fi
header_info header_info

View File

@@ -62,7 +62,7 @@ function msg_error() {
} }
if [ -z "$(ls -A /var/lib/docker/volumes/hass_config/_data/backups/)" ]; then if [ -z "$(ls -A /var/lib/docker/volumes/hass_config/_data/backups/)" ]; then
msg_error "No backups found! \n" msg_error "No backups found! \n"
exit 1 exit 235
fi fi
DIR=/var/lib/docker/volumes/hass_config/_data/restore DIR=/var/lib/docker/volumes/hass_config/_data/restore
if [ -d "$DIR" ]; then if [ -d "$DIR" ]; then

View File

@@ -62,7 +62,7 @@ function msg_error() {
} }
if [ -z "$(ls -A /root/.homeassistant/backups/)" ]; then if [ -z "$(ls -A /root/.homeassistant/backups/)" ]; then
msg_error "No backups found! \n" msg_error "No backups found! \n"
exit 1 exit 235
fi fi
DIR=/root/.homeassistant/restore DIR=/root/.homeassistant/restore
if [ -d "$DIR" ]; then if [ -d "$DIR" ]; then

View File

@@ -39,7 +39,7 @@ ROOT_FS=$(df -Th "/" | awk 'NR==2 {print $2}')
if [ "$ROOT_FS" != "ext4" ]; then if [ "$ROOT_FS" != "ext4" ]; then
whiptail --backtitle "Proxmox VE Helper Scripts" \ whiptail --backtitle "Proxmox VE Helper Scripts" \
--title "Warning" \ --title "Warning" \
--yesno "Root filesystem is not ext4 ($ROOT_FS).\nContinue anyway?" 12 80 || exit 1 --yesno "Root filesystem is not ext4 ($ROOT_FS).\nContinue anyway?" 12 80 || exit 0
fi fi
NODE=$(hostname) NODE=$(hostname)

View File

@@ -57,7 +57,7 @@ done
if [ ${#kernels_to_remove[@]} -eq 0 ]; then if [ ${#kernels_to_remove[@]} -eq 0 ]; then
echo -e "${RD}No valid selection made. Exiting.${CL}" echo -e "${RD}No valid selection made. Exiting.${CL}"
exit 1 exit 0
fi fi
# Confirm removal # Confirm removal
@@ -66,7 +66,7 @@ printf "%s\n" "${kernels_to_remove[@]}"
read -rp "Proceed with removal? (y/n): " confirm read -rp "Proceed with removal? (y/n): " confirm
if [[ "$confirm" != "y" ]]; then if [[ "$confirm" != "y" ]]; then
echo -e "${RD}Aborted.${CL}" echo -e "${RD}Aborted.${CL}"
exit 1 exit 0
fi fi
# Remove kernels # Remove kernels

View File

@@ -51,7 +51,7 @@ containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}')
if [ -z "$containers" ]; then if [ -z "$containers" ]; then
whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60 whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60
exit 1 exit 234
fi fi
menu_items=("ALL" "Delete ALL containers" "OFF") # Add as first option menu_items=("ALL" "Delete ALL containers" "OFF") # Add as first option
@@ -72,7 +72,7 @@ CHOICES=$(whiptail --title "LXC Container Delete" \
if [ -z "$CHOICES" ]; then if [ -z "$CHOICES" ]; then
whiptail --title "LXC Container Delete" \ whiptail --title "LXC Container Delete" \
--msgbox "No containers selected!" 10 60 --msgbox "No containers selected!" 10 60
exit 1 exit 0
fi fi
read -p "Delete containers manually or automatically? (Default: manual) m/a: " DELETE_MODE read -p "Delete containers manually or automatically? (Default: manual) m/a: " DELETE_MODE

View File

@@ -47,7 +47,7 @@ function msg_warn() { echo -e "${WARN} ${YWB}${1}"; }
# Check for root privileges # Check for root privileges
if [ "$(id -u)" -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
msg_error "Error: This script must be run as root." msg_error "Error: This script must be run as root."
exit 1 exit 104
fi fi
if ! command -v ethtool >/dev/null 2>&1; then if ! command -v ethtool >/dev/null 2>&1; then
@@ -55,7 +55,7 @@ if ! command -v ethtool >/dev/null 2>&1; then
apt-get update &>/dev/null apt-get update &>/dev/null
apt-get install -y ethtool &>/dev/null || { apt-get install -y ethtool &>/dev/null || {
msg_error "Failed to install ethtool. Exiting." msg_error "Failed to install ethtool. Exiting."
exit 1 exit 237
} }
msg_ok "ethtool installed successfully" msg_ok "ethtool installed successfully"
fi fi
@@ -86,7 +86,7 @@ done
if [ ${#INTERFACES[@]} -eq 0 ]; then if [ ${#INTERFACES[@]} -eq 0 ]; then
whiptail --title "Error" --msgbox "No Intel e1000e or e1000 network interfaces found!" 10 60 whiptail --title "Error" --msgbox "No Intel e1000e or e1000 network interfaces found!" 10 60
msg_error "No Intel e1000e or e1000 network interfaces found! Exiting." msg_error "No Intel e1000e or e1000 network interfaces found! Exiting."
exit 1 exit 236
fi fi
msg_ok "Found ${BL}$COUNT${GN} Intel e1000e/e1000 interfaces" msg_ok "Found ${BL}$COUNT${GN} Intel e1000e/e1000 interfaces"

View File

@@ -41,7 +41,7 @@ header_info
virt=$(systemd-detect-virt) virt=$(systemd-detect-virt)
if [ "$virt" != "none" ]; then if [ "$virt" != "none" ]; then
msg_error "This script must be run on bare metal. Detected virtual environment: $virt" msg_error "This script must be run on bare metal. Detected virtual environment: $virt"
exit 1 exit 232
fi fi
# Attempt to obtain the current loaded microcode revision # Attempt to obtain the current loaded microcode revision

View File

@@ -83,7 +83,7 @@ main() {
if command -v pveversion >/dev/null 2>&1; then if command -v pveversion >/dev/null 2>&1; then
echo -e "\n🛑 PVE Detected, Wrong Script!\n" echo -e "\n🛑 PVE Detected, Wrong Script!\n"
exit 1 exit 232
fi fi
local CODENAME local CODENAME
@@ -95,7 +95,7 @@ main() {
*) *)
msg_error "Unsupported Debian codename: $CODENAME" msg_error "Unsupported Debian codename: $CODENAME"
echo -e "Supported: bookworm (PBS 3.x) and trixie (PBS 4.x)" echo -e "Supported: bookworm (PBS 3.x) and trixie (PBS 4.x)"
exit 1 exit 105
;; ;;
esac esac
} }

View File

@@ -49,7 +49,7 @@ declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "post-pmg-inst
if ! grep -q "Proxmox Mail Gateway" /etc/issue 2>/dev/null; then if ! grep -q "Proxmox Mail Gateway" /etc/issue 2>/dev/null; then
msg_error "This script is only intended for Proxmox Mail Gateway" msg_error "This script is only intended for Proxmox Mail Gateway"
exit 1 exit 232
fi fi
repo_state() { repo_state() {

View File

@@ -88,19 +88,19 @@ main() {
if [[ "$PVE_MAJOR" == "8" ]]; then if [[ "$PVE_MAJOR" == "8" ]]; then
if ((PVE_MINOR < 0 || PVE_MINOR > 9)); then if ((PVE_MINOR < 0 || PVE_MINOR > 9)); then
msg_error "Unsupported Proxmox 8 version" msg_error "Unsupported Proxmox 8 version"
exit 1 exit 105
fi fi
start_routines_8 start_routines_8
elif [[ "$PVE_MAJOR" == "9" ]]; then elif [[ "$PVE_MAJOR" == "9" ]]; then
if ((PVE_MINOR < 0 || PVE_MINOR > 1)); then if ((PVE_MINOR < 0 || PVE_MINOR > 1)); then
msg_error "Only Proxmox 9.0-9.1.x is currently supported" msg_error "Only Proxmox 9.0-9.1.x is currently supported"
exit 1 exit 105
fi fi
start_routines_9 start_routines_9
else else
msg_error "Unsupported Proxmox VE major version: $PVE_MAJOR" msg_error "Unsupported Proxmox VE major version: $PVE_MAJOR"
echo -e "Supported: 8.08.9.x and 9.09.1.x" echo -e "Supported: 8.08.9.x and 9.09.1.x"
exit 1 exit 105
fi fi
} }

View File

@@ -25,7 +25,7 @@ header_info "$APP"
check_root() { check_root() {
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
msg_error "Script must be run as root" msg_error "Script must be run as root"
exit 1 exit 104
fi fi
} }
@@ -63,7 +63,7 @@ select_container() {
if [[ ${#lxc_list[@]} -eq 0 ]]; then if [[ ${#lxc_list[@]} -eq 0 ]]; then
msg_error "No containers found" msg_error "No containers found"
exit 1 exit 234
fi fi
PS3="Enter number of container to convert: " PS3="Enter number of container to convert: "
@@ -101,7 +101,7 @@ backup_container() {
if [ -z "$BACKUP_PATH" ] || ! grep -q "Backup job finished successfully" "$vzdump_output"; then if [ -z "$BACKUP_PATH" ] || ! grep -q "Backup job finished successfully" "$vzdump_output"; then
rm "$vzdump_output" rm "$vzdump_output"
msg_error "Backup failed" msg_error "Backup failed"
exit 1 exit 235
fi fi
rm "$vzdump_output" rm "$vzdump_output"
msg_ok "Backup complete: $BACKUP_PATH" msg_ok "Backup complete: $BACKUP_PATH"
@@ -126,7 +126,7 @@ perform_conversion() {
msg_ok "Conversion successful" msg_ok "Conversion successful"
else else
msg_error "Conversion failed" msg_error "Conversion failed"
exit 1 exit 235
fi fi
} }

View File

@@ -140,7 +140,7 @@ function backup_container() {
msg_ok "Backup created" msg_ok "Backup created"
else else
msg_error "Backup failed for container $1" msg_error "Backup failed for container $1"
exit 1 exit 235
fi fi
} }
@@ -183,7 +183,7 @@ containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}')
if [ -z "$containers" ]; then if [ -z "$containers" ]; then
whiptail --title "LXC Container Update" --msgbox "No LXC containers available!" 10 60 whiptail --title "LXC Container Update" --msgbox "No LXC containers available!" 10 60
exit 1 exit 234
fi fi
menu_items=() menu_items=()
@@ -242,7 +242,7 @@ if [[ -n "$var_container" ]]; then
if [[ -z "$CHOICE" ]]; then if [[ -z "$CHOICE" ]]; then
msg_error "No containers matched the selection criteria: $var_container ${var_tags:-community-script|proxmox-helper-scripts}" msg_error "No containers matched the selection criteria: $var_container ${var_tags:-community-script|proxmox-helper-scripts}"
exit 1 exit 234
fi fi
msg_ok "Selected containers: $CHOICE" msg_ok "Selected containers: $CHOICE"
else else
@@ -253,7 +253,7 @@ else
if [ -z "$CHOICE" ]; then if [ -z "$CHOICE" ]; then
whiptail --title "LXC Container Update" \ whiptail --title "LXC Container Update" \
--msgbox "No containers selected!" 10 60 --msgbox "No containers selected!" 10 60
exit 1 exit 0
fi fi
fi fi
@@ -284,7 +284,7 @@ if [ "$BACKUP_CHOICE" == "yes" ]; then
if [ -z "$STORAGES" ]; then if [ -z "$STORAGES" ]; then
msg_error "No storage with 'backup' support found!" msg_error "No storage with 'backup' support found!"
exit 1 exit 119
fi fi
# Determine storage based on var_backup_storage # Determine storage based on var_backup_storage
@@ -296,7 +296,7 @@ if [ "$BACKUP_CHOICE" == "yes" ]; then
else else
msg_error "Specified backup storage '$var_backup_storage' not found or doesn't support backups!" msg_error "Specified backup storage '$var_backup_storage' not found or doesn't support backups!"
msg_info "Available storages: $(echo $STORAGES | tr '\n' ' ')" msg_info "Available storages: $(echo $STORAGES | tr '\n' ' ')"
exit 1 exit 119
fi fi
else else
MENU_ITEMS=() MENU_ITEMS=()
@@ -308,7 +308,7 @@ if [ "$BACKUP_CHOICE" == "yes" ]; then
if [ -z "$STORAGE_CHOICE" ]; then if [ -z "$STORAGE_CHOICE" ]; then
msg_error "No storage selected!" msg_error "No storage selected!"
exit 1 exit 0
fi fi
fi fi
fi fi
@@ -436,11 +436,11 @@ for container in $CHOICE; do
msg_ok "Restored LXC from backup" msg_ok "Restored LXC from backup"
else else
msg_error "Restored LXC from backup failed" msg_error "Restored LXC from backup failed"
exit 1 exit 235
fi fi
else else
msg_error "Update failed for container $container. Exiting" msg_error "Update failed for container $container. Exiting"
exit 1 exit "$exit_code"
fi fi
done done

View File

@@ -158,7 +158,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -169,7 +169,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -177,7 +177,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {
@@ -513,7 +513,7 @@ DISK_REF_IMPORTED="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully impo
[[ -z "$DISK_REF_IMPORTED" ]] && { [[ -z "$DISK_REF_IMPORTED" ]] && {
msg_error "Unable to determine imported disk reference." msg_error "Unable to determine imported disk reference."
echo "$IMPORT_OUT" echo "$IMPORT_OUT"
exit 1 exit 226
} }
msg_ok "Imported disk (${CL}${BL}${DISK_REF_IMPORTED}${CL})" msg_ok "Imported disk (${CL}${BL}${DISK_REF_IMPORTED}${CL})"

View File

@@ -158,7 +158,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -169,7 +169,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -177,7 +177,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {

View File

@@ -158,7 +158,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -169,7 +169,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -177,7 +177,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {

View File

@@ -638,7 +638,7 @@ DISK_REF_IMPORTED="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully impo
[[ -z "$DISK_REF_IMPORTED" ]] && { [[ -z "$DISK_REF_IMPORTED" ]] && {
msg_error "Unable to determine imported disk reference." msg_error "Unable to determine imported disk reference."
echo "$IMPORT_OUT" echo "$IMPORT_OUT"
exit 1 exit 226
} }
msg_ok "Imported disk (${CL}${BL}${DISK_REF_IMPORTED}${CL})" msg_ok "Imported disk (${CL}${BL}${DISK_REF_IMPORTED}${CL})"

View File

@@ -163,7 +163,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -174,7 +174,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -182,7 +182,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {
@@ -221,7 +221,7 @@ function ensure_pv() {
if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then
msg_error "Failed to install pv automatically." msg_error "Failed to install pv automatically."
echo -e "\nPlease run manually on the Proxmox host:\n apt install pv\n" echo -e "\nPlease run manually on the Proxmox host:\n apt install pv\n"
exit 1 exit 237
fi fi
msg_ok "Installed pv" msg_ok "Installed pv"
fi fi
@@ -249,14 +249,14 @@ function download_and_validate_xz() {
if ! curl -fSL -o "$file" "$url"; then if ! curl -fSL -o "$file" "$url"; then
msg_error "Download failed: $url" msg_error "Download failed: $url"
rm -f "$file" rm -f "$file"
exit 1 exit 115
fi fi
# Validate again # Validate again
if ! xz -t "$file" &>/dev/null; then if ! xz -t "$file" &>/dev/null; then
msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later." msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later."
rm -f "$file" rm -f "$file"
exit 1 exit 115
fi fi
msg_ok "Downloaded and validated $(basename "$file")" msg_ok "Downloaded and validated $(basename "$file")"
} }
@@ -272,7 +272,7 @@ function extract_xz_with_pv() {
if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then
msg_error "Failed to extract $file" msg_error "Failed to extract $file"
rm -f "$target" rm -f "$target"
exit 1 exit 115
fi fi
msg_ok "Decompressed to $target" msg_ok "Decompressed to $target"
} }
@@ -592,7 +592,7 @@ DISK_REF="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully imported disk
[[ -z "$DISK_REF" ]] && { [[ -z "$DISK_REF" ]] && {
msg_error "Unable to determine imported disk reference." msg_error "Unable to determine imported disk reference."
echo "$IMPORT_OUT" echo "$IMPORT_OUT"
exit 1 exit 226
} }
msg_ok "Imported disk (${CL}${BL}${DISK_REF}${CL})" msg_ok "Imported disk (${CL}${BL}${DISK_REF}${CL})"

View File

@@ -159,7 +159,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -170,7 +170,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -178,7 +178,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {

View File

@@ -158,7 +158,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -169,7 +169,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -177,7 +177,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {

View File

@@ -226,7 +226,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -237,7 +237,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -245,7 +245,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {
@@ -556,7 +556,7 @@ fi
if [[ -z "$DISK_REF" ]]; then if [[ -z "$DISK_REF" ]]; then
msg_error "Unable to determine imported disk reference." msg_error "Unable to determine imported disk reference."
echo "$IMPORT_OUT" echo "$IMPORT_OUT"
exit 1 exit 226
fi fi
qm set $VMID \ qm set $VMID \
@@ -635,7 +635,7 @@ if qm status "$VMID" | grep -q "running"; then
msg_ok "Network interfaces configured in OpenWrt" msg_ok "Network interfaces configured in OpenWrt"
else else
msg_error "VM is not running" msg_error "VM is not running"
exit 1 exit 226
fi fi
msg_info "Waiting for OpenWrt to shut down..." msg_info "Waiting for OpenWrt to shut down..."

View File

@@ -210,7 +210,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -221,7 +221,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -229,7 +229,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {
@@ -616,7 +616,7 @@ for ver in $RELEASE_LIST; do
done done
if [ -z "$URL" ]; then if [ -z "$URL" ]; then
msg_error "Could not find generic FreeBSD amd64 qcow2 image (non-UFS/ZFS)." msg_error "Could not find generic FreeBSD amd64 qcow2 image (non-UFS/ZFS)."
exit 1 exit 115
fi fi
msg_ok "Download URL: ${CL}${BL}${URL}${CL}" msg_ok "Download URL: ${CL}${BL}${URL}${CL}"
@@ -626,7 +626,7 @@ if ! check_disk_space "$TEMP_DIR" 20; then
msg_error "Insufficient disk space in temporary directory ($TEMP_DIR)." msg_error "Insufficient disk space in temporary directory ($TEMP_DIR)."
msg_error "Available: ${AVAILABLE_GB}, Required: ~20GB for FreeBSD image decompression." msg_error "Available: ${AVAILABLE_GB}, Required: ~20GB for FreeBSD image decompression."
msg_error "Please free up space or ensure /tmp has sufficient storage." msg_error "Please free up space or ensure /tmp has sufficient storage."
exit 1 exit 214
fi fi
msg_info "Downloading FreeBSD Image" msg_info "Downloading FreeBSD Image"
@@ -639,7 +639,7 @@ if ! check_disk_space "$TEMP_DIR" 15; then
AVAILABLE_GB=$(df -h "$TEMP_DIR" | awk 'NR==2 {print $4}') AVAILABLE_GB=$(df -h "$TEMP_DIR" | awk 'NR==2 {print $4}')
msg_error "Insufficient disk space for decompression." msg_error "Insufficient disk space for decompression."
msg_error "Available: ${AVAILABLE_GB}, Required: ~15GB for decompressed image." msg_error "Available: ${AVAILABLE_GB}, Required: ~15GB for decompressed image."
exit 1 exit 214
fi fi
msg_info "Decompressing FreeBSD Image (this may take a few minutes)" msg_info "Decompressing FreeBSD Image (this may take a few minutes)"
@@ -648,7 +648,7 @@ if ! unxz -cv $(basename $URL) >${FILE}; then
msg_error "Failed to decompress FreeBSD image." msg_error "Failed to decompress FreeBSD image."
msg_error "This is usually caused by insufficient disk space." msg_error "This is usually caused by insufficient disk space."
df -h "$TEMP_DIR" df -h "$TEMP_DIR"
exit 1 exit 115
fi fi
# Remove the compressed file to save space # Remove the compressed file to save space

View File

@@ -159,7 +159,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -170,7 +170,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -178,7 +178,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {

View File

@@ -167,7 +167,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -178,7 +178,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -186,7 +186,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {

View File

@@ -192,7 +192,7 @@ function pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -202,14 +202,14 @@ function pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not yet supported." msg_error "This version of Proxmox VE is not yet supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {
@@ -305,7 +305,7 @@ function advanced_settings() {
if [ $ISO_COUNT -eq 0 ]; then if [ $ISO_COUNT -eq 0 ]; then
echo "No ISOs found." echo "No ISOs found."
exit 1 exit 115
fi fi
# Identify the index of the last stable release # Identify the index of the last stable release
@@ -529,7 +529,7 @@ if [ -z "${SELECTED_ISO:-}" ]; then
if [ -z "$SELECTED_ISO" ]; then if [ -z "$SELECTED_ISO" ]; then
msg_error "Could not find a stable ISO for fallback." msg_error "Could not find a stable ISO for fallback."
exit 1 exit 115
fi fi
fi fi

View File

@@ -155,7 +155,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -166,7 +166,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -174,7 +174,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {

View File

@@ -158,7 +158,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -169,7 +169,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -177,7 +177,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {

View File

@@ -157,7 +157,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -168,7 +168,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -176,7 +176,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {

View File

@@ -157,7 +157,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 9)); then if ((MINOR < 0 || MINOR > 9)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 8.0 8.9" msg_error "Supported: Proxmox VE version 8.0 8.9"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -168,7 +168,7 @@ pve_check() {
if ((MINOR < 0 || MINOR > 1)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0 9.1" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 105
fi fi
return 0 return 0
fi fi
@@ -176,7 +176,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 105
} }
function arch_check() { function arch_check() {
@@ -215,7 +215,7 @@ function ensure_pv() {
if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then
msg_error "Failed to install pv automatically." msg_error "Failed to install pv automatically."
echo -e "\nPlease run manually on the Proxmox host:\n apt install pv\n" echo -e "\nPlease run manually on the Proxmox host:\n apt install pv\n"
exit 1 exit 237
fi fi
msg_ok "Installed pv" msg_ok "Installed pv"
fi fi
@@ -243,14 +243,14 @@ function download_and_validate_xz() {
if ! curl -fSL -o "$file" "$url"; then if ! curl -fSL -o "$file" "$url"; then
msg_error "Download failed: $url" msg_error "Download failed: $url"
rm -f "$file" rm -f "$file"
exit 1 exit 115
fi fi
# Validate again # Validate again
if ! xz -t "$file" &>/dev/null; then if ! xz -t "$file" &>/dev/null; then
msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later." msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later."
rm -f "$file" rm -f "$file"
exit 1 exit 115
fi fi
msg_ok "Downloaded and validated $(basename "$file")" msg_ok "Downloaded and validated $(basename "$file")"
} }
@@ -266,7 +266,7 @@ function extract_xz_with_pv() {
if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then
msg_error "Failed to extract $file" msg_error "Failed to extract $file"
rm -f "$target" rm -f "$target"
exit 1 exit 115
fi fi
msg_ok "Decompressed to $target" msg_ok "Decompressed to $target"
} }
@@ -514,7 +514,7 @@ done < <(pvesm status -content images | awk 'NR>1 {printf "%s %s %s\n", $1, $2,
if [ ${#STORAGE_MENU[@]} -eq 0 ]; then if [ ${#STORAGE_MENU[@]} -eq 0 ]; then
msg_error "Unable to detect a valid storage location." msg_error "Unable to detect a valid storage location."
exit 1 exit 119
elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then
STORAGE=${STORAGE_MENU[0]} STORAGE=${STORAGE_MENU[0]}
else else