mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-03-03 18:35:55 +00:00
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:
committed by
GitHub
parent
9f15ca6242
commit
5dc244a8c1
@@ -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
|
||||||
|
|||||||
@@ -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)" ;;
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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" ;;
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.0–9.1.x"
|
msg_error "Supported: Proxmox VE version 9.0–9.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.0–9.1.x"
|
msg_error "Supported versions: Proxmox VE 8.0 – 8.9 or 9.0–9.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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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.0–8.9.x and 9.0–9.1.x"
|
echo -e "Supported: 8.0–8.9.x and 9.0–9.1.x"
|
||||||
exit 1
|
exit 105
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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})"
|
||||||
|
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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})"
|
||||||
|
|||||||
@@ -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})"
|
||||||
|
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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..."
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user