diff --git a/tools/addon/netdata.sh b/tools/addon/netdata.sh index 250b8f1c1f..1f2d598fa7 100644 --- a/tools/addon/netdata.sh +++ b/tools/addon/netdata.sh @@ -39,30 +39,93 @@ function msg_ok() { echo -e "${BFR} ${CM} ${GN}${msg}${CL}" } +function msg_error() { echo -e "${RD}✗ $1${CL}"; } + +pve_check() { + if ! command -v pveversion >/dev/null 2>&1; then + msg_error "This script can only be run on a Proxmox VE host." + exit 1 + fi + + local PVE_VER + PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')" + + # Proxmox VE 8.x: allow 8.0 – 8.9 + if [[ "$PVE_VER" =~ ^9\.([0-9]+)(\.[0-9]+)?$ ]]; then + local MINOR="${BASH_REMATCH[1]}" + if ((MINOR != 0)); then + msg_error "Unsupported Proxmox VE version: $PVE_VER" + msg_error "Supported versions: 8.0 – 8.9 or 9.0.x" + exit 1 + fi + return 0 + fi + + # Proxmox VE 9.x: allow only 9.0 + if [[ "$PVE_VER" =~ ^9\.([0-9]+)$ ]]; then + local MINOR="${BASH_REMATCH[1]}" + if ((MINOR != 0)); then + msg_error "Unsupported Proxmox VE version: $PVE_VER" + msg_error "Supported versions: 8.0 – 8.9 or 9.0" + exit 1 + fi + return 0 + fi + + msg_error "Unsupported Proxmox VE version: $PVE_VER" + msg_error "Supported versions: 8.0 – 8.9 or 9.0" + exit 1 +} + +detect_codename() { + source /etc/os-release + if [[ "$ID" != "debian" ]]; then + msg_error "Unsupported base OS: $ID (only Proxmox VE / Debian supported)." + exit 1 + fi + CODENAME="${VERSION_CODENAME:-}" + if [[ -z "$CODENAME" ]]; then + msg_error "Could not detect Debian codename." + exit 1 + fi + echo "$CODENAME" +} + +get_latest_repo_pkg() { + local REPO_URL=$1 + curl -fsSL "$REPO_URL" | + grep -oP 'netdata-repo_[^"]+all\.deb' | + sort -V | + tail -n1 +} + install() { header_info while true; do - read -p "Are you sure you want to install NetData on Proxmox VE host. Proceed(y/n)?" yn + read -p "Are you sure you want to install NetData on Proxmox VE host. Proceed(y/n)? " yn case $yn in [Yy]*) break ;; [Nn]*) exit ;; *) echo "Please answer yes or no." ;; esac done - header_info + read -r -p "Verbose mode? " prompt - if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - STD="" - else - STD="silent" - fi - header_info + [[ ${prompt,,} =~ ^(y|yes)$ ]] && STD="" || STD="silent" + + CODENAME=$(detect_codename) + REPO_URL="https://repo.netdata.cloud/repos/repoconfig/debian/${CODENAME}/" msg_info "Setting up repository" $STD apt-get install -y debian-keyring - curl -fsSL "https://repo.netdata.cloud/repos/repoconfig/debian/bookworm/netdata-repo_5-1+debian12_all.deb" -o $(basename "https://repo.netdata.cloud/repos/repoconfig/debian/bookworm/netdata-repo_5-1+debian12_all.deb") - $STD dpkg -i netdata-repo_5-1+debian12_all.deb - rm -rf netdata-repo_5-1+debian12_all.deb + PKG=$(get_latest_repo_pkg "$REPO_URL") + if [[ -z "$PKG" ]]; then + msg_error "Could not find netdata-repo package for Debian $CODENAME" + exit 1 + fi + curl -fsSL "${REPO_URL}${PKG}" -o "$PKG" + $STD dpkg -i "$PKG" + rm -f "$PKG" msg_ok "Set up repository" msg_info "Installing Netdata" @@ -76,46 +139,32 @@ install() { uninstall() { header_info read -r -p "Verbose mode? " prompt - if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - STD="" - else - STD="silent" - fi - header_info + [[ ${prompt,,} =~ ^(y|yes)$ ]] && STD="" || STD="silent" msg_info "Uninstalling Netdata" - systemctl stop netdata + systemctl stop netdata || true rm -rf /var/log/netdata /var/lib/netdata /var/cache/netdata /etc/netdata/go.d rm -rf /etc/apt/trusted.gpg.d/netdata-archive-keyring.gpg /etc/apt/sources.list.d/netdata.list $STD apt-get remove --purge -y netdata netdata-repo systemctl daemon-reload $STD apt autoremove -y - $STD userdel netdata + $STD userdel netdata || true msg_ok "Uninstalled Netdata" msg_ok "Completed Successfully!\n" } -if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then - echo -e "This version of Proxmox Virtual Environment is not supported" - echo -e "Requires PVE Version 8.0 or higher" - echo -e "Exiting..." - sleep 2 - exit -fi +header_info +pve_check OPTIONS=(Install "Install NetData on Proxmox VE" Uninstall "Uninstall NetData from Proxmox VE") -CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NetData" --menu "Select an option:" 10 58 2 \ - "${OPTIONS[@]}" 3>&1 1>&2 2>&3) +CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NetData" \ + --menu "Select an option:" 10 58 2 "${OPTIONS[@]}" 3>&1 1>&2 2>&3) case $CHOICE in -"Install") - install - ;; -"Uninstall") - uninstall - ;; +"Install") install ;; +"Uninstall") uninstall ;; *) echo "Exiting..." exit 0