diff --git a/tools/addon/actual-budget-prometheus-exporter.sh b/tools/addon/actual-budget-prometheus-exporter.sh index a75a9580e..40057fde4 100644 --- a/tools/addon/actual-budget-prometheus-exporter.sh +++ b/tools/addon/actual-budget-prometheus-exporter.sh @@ -20,6 +20,7 @@ declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "actual-budget set -Eeuo pipefail trap 'error_handler' ERR load_functions +require_debian_like # ============================================================================== # CONFIGURATION @@ -31,14 +32,6 @@ INSTALL_PATH="/opt/actual-budget-prometheus-exporter" CONFIG_PATH="/opt/actual-budget-prometheus-exporter.env" SERVICE_PATH="/etc/systemd/system/actual-budget-prometheus-exporter.service" -# ============================================================================== -# OS DETECTION -# ============================================================================== -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." - exit 238 -fi - # ============================================================================== # UNINSTALL # ============================================================================== diff --git a/tools/addon/add-netbird-lxc.sh b/tools/addon/add-netbird-lxc.sh index 6015159d0..1ffbea9ad 100644 --- a/tools/addon/add-netbird-lxc.sh +++ b/tools/addon/add-netbird-lxc.sh @@ -23,6 +23,7 @@ trap 'error_handler' ERR load_functions header_info +require_pve_host while true; do read -r -p "This will add NetBird to an existing LXC Container ONLY. Proceed(y/n)? " yn @@ -79,15 +80,29 @@ EOF msg_info "Installing NetBird" pct exec "$CTID" -- bash -c ' +set -e if ! command -v curl &>/dev/null; then - apt update -qq - apt install -y curl >/dev/null + apt-get update -qq + apt-get install -y curl >/dev/null fi -apt install -y ca-certificates gpg &>/dev/null -curl -fsSL "https://pkgs.netbird.io/debian/public.key" | gpg --dearmor >/usr/share/keyrings/netbird-archive-keyring.gpg -echo "deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main" >/etc/apt/sources.list.d/netbird.list -apt update &>/dev/null -apt install -y netbird-ui &>/dev/null +apt-get install -y ca-certificates gpg &>/dev/null + +# Reuse the shared repository helper instead of hand-rolling the sources entry +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) +load_functions + +# Drop the legacy keyring from the pre-deb822 layout +rm -f /usr/share/keyrings/netbird-archive-keyring.gpg + +setup_deb822_repo \ + "netbird" \ + "https://pkgs.netbird.io/debian/public.key" \ + "https://pkgs.netbird.io/debian" \ + "stable" \ + "main" + +apt-get install -y netbird-ui &>/dev/null if systemctl list-unit-files docker.service &>/dev/null; then mkdir -p /etc/systemd/system/netbird.service.d cat </etc/systemd/system/netbird.service.d/after-docker.conf diff --git a/tools/addon/add-tailscale-lxc.sh b/tools/addon/add-tailscale-lxc.sh index 28c531360..e780754eb 100644 --- a/tools/addon/add-tailscale-lxc.sh +++ b/tools/addon/add-tailscale-lxc.sh @@ -22,11 +22,7 @@ trap 'error_handler' ERR load_functions header_info - -if ! command -v pveversion &>/dev/null; then - msg_error "This script must be run on the Proxmox VE host (not inside an LXC container)" - exit 232 -fi +require_pve_host while true; do read -rp "This will add Tailscale to an existing LXC Container ONLY. Proceed (y/n)? " yn @@ -67,7 +63,7 @@ grep -q "lxc.mount.entry: /dev/net/tun" "$CTID_CONFIG_PATH" || echo "lxc.mount.e msg_info "Installing Tailscale in CT $CTID" -pct exec "$CTID" -- sh -c ' +pct exec "$CTID" -- bash -c ' set -e # Detect OS inside container @@ -135,16 +131,21 @@ else apt-get install -y curl >/dev/null fi - # Ensure keyrings directory exists - mkdir -p /usr/share/keyrings + # Reuse the shared repository helper instead of hand-rolling the sources entry + source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func) + source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) + load_functions - curl -fsSL "https://pkgs.tailscale.com/stable/${ID}/${VERSION_CODENAME}.noarmor.gpg" \ - | tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null + # Drop the legacy keyring from the pre-deb822 layout + rm -f /usr/share/keyrings/tailscale-archive-keyring.gpg - echo "deb [signed-by=/usr/share/keyrings/tailscale-archive-keyring.gpg] https://pkgs.tailscale.com/stable/${ID} ${VERSION_CODENAME} main" \ - >/etc/apt/sources.list.d/tailscale.list + setup_deb822_repo \ + "tailscale" \ + "https://pkgs.tailscale.com/stable/${ID}/${VERSION_CODENAME}.noarmor.gpg" \ + "https://pkgs.tailscale.com/stable/${ID}" \ + "${VERSION_CODENAME}" \ + "main" - apt-get update -qq apt-get install -y tailscale >/dev/null if [ -f /tmp/resolv.conf.backup ]; then diff --git a/tools/addon/all-templates.sh b/tools/addon/all-templates.sh index 50cf697e4..6bf2ede8f 100644 --- a/tools/addon/all-templates.sh +++ b/tools/addon/all-templates.sh @@ -57,11 +57,13 @@ function cleanup_ctid() { fi } +header_info +require_pve_host + # Stop Proxmox VE Monitor-All if running if systemctl is-active -q ping-instances.service; then systemctl stop ping-instances.service fi -header_info msg_info "Loading" pveam update >/dev/null 2>&1 whiptail --backtitle "Proxmox VE Helper Scripts" --title "All Templates" --yesno "This will allow for the creation of one of the many Template LXC Containers. Proceed?" 10 68 diff --git a/tools/addon/coolify.sh b/tools/addon/coolify.sh index 31b4ebe44..fd70e9080 100644 --- a/tools/addon/coolify.sh +++ b/tools/addon/coolify.sh @@ -66,66 +66,11 @@ function update() { exit } -# ============================================================================== -# PROXMOX HOST CHECK -# ============================================================================== -function check_proxmox_host() { - if command -v pveversion &>/dev/null; then - msg_error "Running on the Proxmox host is NOT recommended!" - msg_error "This should be executed inside an LXC container." - echo "" - echo -n "${TAB}Continue anyway? (y/N): " - read -r confirm - if [[ ! "${confirm,,}" =~ ^(y|yes)$ ]]; then - msg_warn "Aborted. Please run this inside an LXC container." - exit 0 - fi - msg_warn "Proceeding on Proxmox host at your own risk!" - fi -} - -# ============================================================================== -# CHECK / INSTALL DOCKER -# ============================================================================== -function check_or_install_docker() { - if command -v docker &>/dev/null; then - msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') is available" - if docker compose version &>/dev/null; then - msg_ok "Docker Compose is available" - else - msg_error "Docker Compose plugin is not available. Please install it." - exit 10 - fi - return - fi - - msg_warn "Docker is not installed." - echo -n "${TAB}Install Docker now? (y/N): " - read -r install_docker_prompt - if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then - msg_error "Docker is required for ${APP}. Exiting." - exit 10 - fi - - msg_info "Installing Docker" - if [[ -f /etc/alpine-release ]]; then - $STD apk add docker docker-cli-compose - $STD rc-service docker start - $STD rc-update add docker default - else - DOCKER_CONFIG_PATH='/etc/docker/daemon.json' - mkdir -p "$(dirname "$DOCKER_CONFIG_PATH")" - echo -e '{\n "log-driver": "journald"\n}' >"$DOCKER_CONFIG_PATH" - $STD sh <(curl -fsSL https://get.docker.com) - fi - msg_ok "Installed Docker" -} - # ============================================================================== # INSTALL # ============================================================================== function install() { - check_or_install_docker + ensure_docker msg_info "Installing dependencies" if [[ -f /etc/alpine-release ]]; then @@ -172,7 +117,7 @@ if [[ "${type:-}" == "update" ]]; then fi header_info -check_proxmox_host +confirm_not_pve_host get_lxc_ip # Check if already installed diff --git a/tools/addon/cronmaster.sh b/tools/addon/cronmaster.sh index edd611558..b8d849fd1 100644 --- a/tools/addon/cronmaster.sh +++ b/tools/addon/cronmaster.sh @@ -20,6 +20,7 @@ declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "cronmaster" " set -Eeuo pipefail trap 'error_handler' ERR load_functions +require_debian_like # ============================================================================== # CONFIGURATION @@ -31,14 +32,6 @@ CONFIG_PATH="/opt/cronmaster/.env" SERVICE_PATH="/etc/systemd/system/cronmaster.service" DEFAULT_PORT=3000 -# ============================================================================== -# OS DETECTION -# ============================================================================== -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." - exit 238 -fi - # ============================================================================== # UNINSTALL # ============================================================================== diff --git a/tools/addon/dockge.sh b/tools/addon/dockge.sh index ef8e2d27a..52042a352 100644 --- a/tools/addon/dockge.sh +++ b/tools/addon/dockge.sh @@ -72,66 +72,11 @@ function update() { exit } -# ============================================================================== -# PROXMOX HOST CHECK -# ============================================================================== -function check_proxmox_host() { - if command -v pveversion &>/dev/null; then - msg_error "Running on the Proxmox host is NOT recommended!" - msg_error "This should be executed inside an LXC container." - echo "" - echo -n "${TAB}Continue anyway? (y/N): " - read -r confirm - if [[ ! "${confirm,,}" =~ ^(y|yes)$ ]]; then - msg_warn "Aborted. Please run this inside an LXC container." - exit 0 - fi - msg_warn "Proceeding on Proxmox host at your own risk!" - fi -} - -# ============================================================================== -# CHECK / INSTALL DOCKER -# ============================================================================== -function check_or_install_docker() { - if command -v docker &>/dev/null; then - msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') is available" - if docker compose version &>/dev/null; then - msg_ok "Docker Compose is available" - else - msg_error "Docker Compose plugin is not available. Please install it." - exit 10 - fi - return - fi - - msg_warn "Docker is not installed." - echo -n "${TAB}Install Docker now? (y/N): " - read -r install_docker_prompt - if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then - msg_error "Docker is required for ${APP}. Exiting." - exit 10 - fi - - msg_info "Installing Docker" - if [[ -f /etc/alpine-release ]]; then - $STD apk add docker docker-cli-compose - $STD rc-service docker start - $STD rc-update add docker default - else - DOCKER_CONFIG_PATH='/etc/docker/daemon.json' - mkdir -p "$(dirname "$DOCKER_CONFIG_PATH")" - echo -e '{\n "log-driver": "journald"\n}' >"$DOCKER_CONFIG_PATH" - $STD sh <(curl -fsSL https://get.docker.com) - fi - msg_ok "Installed Docker" -} - # ============================================================================== # INSTALL # ============================================================================== function install() { - check_or_install_docker + ensure_docker msg_info "Creating install directories" mkdir -p "$INSTALL_PATH" "$STACKS_PATH" @@ -167,7 +112,7 @@ if [[ "${type:-}" == "update" ]]; then fi header_info -check_proxmox_host +confirm_not_pve_host get_lxc_ip # Check if already installed diff --git a/tools/addon/dokploy.sh b/tools/addon/dokploy.sh index 85dd7d53b..7cf493308 100644 --- a/tools/addon/dokploy.sh +++ b/tools/addon/dokploy.sh @@ -65,66 +65,11 @@ function update() { exit } -# ============================================================================== -# PROXMOX HOST CHECK -# ============================================================================== -function check_proxmox_host() { - if command -v pveversion &>/dev/null; then - msg_error "Running on the Proxmox host is NOT recommended!" - msg_error "This should be executed inside an LXC container." - echo "" - echo -n "${TAB}Continue anyway? (y/N): " - read -r confirm - if [[ ! "${confirm,,}" =~ ^(y|yes)$ ]]; then - msg_warn "Aborted. Please run this inside an LXC container." - exit 0 - fi - msg_warn "Proceeding on Proxmox host at your own risk!" - fi -} - -# ============================================================================== -# CHECK / INSTALL DOCKER -# ============================================================================== -function check_or_install_docker() { - if command -v docker &>/dev/null; then - msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') is available" - if docker compose version &>/dev/null; then - msg_ok "Docker Compose is available" - else - msg_error "Docker Compose plugin is not available. Please install it." - exit 10 - fi - return - fi - - msg_warn "Docker is not installed." - echo -n "${TAB}Install Docker now? (y/N): " - read -r install_docker_prompt - if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then - msg_error "Docker is required for ${APP}. Exiting." - exit 10 - fi - - msg_info "Installing Docker" - if [[ -f /etc/alpine-release ]]; then - $STD apk add docker docker-cli-compose - $STD rc-service docker start - $STD rc-update add docker default - else - DOCKER_CONFIG_PATH='/etc/docker/daemon.json' - mkdir -p "$(dirname "$DOCKER_CONFIG_PATH")" - echo -e '{\n "log-driver": "journald"\n}' >"$DOCKER_CONFIG_PATH" - $STD sh <(curl -fsSL https://get.docker.com) - fi - msg_ok "Installed Docker" -} - # ============================================================================== # INSTALL # ============================================================================== function install() { - check_or_install_docker + ensure_docker msg_info "Installing dependencies" if [[ -f /etc/alpine-release ]]; then @@ -170,7 +115,7 @@ if [[ "${type:-}" == "update" ]]; then fi header_info -check_proxmox_host +confirm_not_pve_host get_lxc_ip # Check if already installed diff --git a/tools/addon/komodo.sh b/tools/addon/komodo.sh index 9815cac52..287975911 100644 --- a/tools/addon/komodo.sh +++ b/tools/addon/komodo.sh @@ -131,25 +131,7 @@ function update() { } # ============================================================================== -# PROXMOX HOST CHECK -# ============================================================================== -function check_proxmox_host() { - if command -v pveversion &>/dev/null; then - msg_error "Running on the Proxmox host is NOT recommended!" - msg_error "This should be executed inside an LXC container." - echo "" - echo -n "${TAB}Continue anyway? (y/N): " - read -r confirm - if [[ ! "${confirm,,}" =~ ^(y|yes)$ ]]; then - msg_warn "Aborted. Please run this inside an LXC container." - exit 0 - fi - msg_warn "Proceeding on Proxmox host at your own risk!" - fi -} - -# ============================================================================== -# CHECK / INSTALL DOCKER +# DEPENDENCIES # ============================================================================== function ensure_openssl() { if command -v openssl &>/dev/null; then @@ -168,48 +150,12 @@ function ensure_openssl() { msg_ok "Installed openssl" } -function check_or_install_docker() { - if command -v docker &>/dev/null; then - msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') is available" - if docker compose version &>/dev/null; then - msg_ok "Docker Compose is available" - else - msg_error "Docker Compose plugin is not available. Please install it." - exit 10 - fi - ensure_openssl - return - fi - - msg_warn "Docker is not installed." - echo -n "${TAB}Install Docker now? (y/N): " - read -r install_docker_prompt - if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then - msg_error "Docker is required for ${APP}. Exiting." - exit 10 - fi - - msg_info "Installing Docker" - if [[ -f /etc/alpine-release ]]; then - $STD apk add docker docker-cli-compose - $STD rc-service docker start - $STD rc-update add docker default - else - DOCKER_CONFIG_PATH='/etc/docker/daemon.json' - mkdir -p "$(dirname "$DOCKER_CONFIG_PATH")" - echo -e '{\n "log-driver": "journald"\n}' >"$DOCKER_CONFIG_PATH" - $STD sh <(curl -fsSL https://get.docker.com) - fi - msg_ok "Installed Docker" - - ensure_openssl -} - # ============================================================================== # INSTALL # ============================================================================== function install() { - check_or_install_docker + ensure_docker + ensure_openssl echo -e "${TAB}Choose the database for Komodo:" echo -e "${TAB} 1) MongoDB (recommended)" @@ -292,7 +238,7 @@ if [[ "${type:-}" == "update" ]]; then fi header_info -check_proxmox_host +confirm_not_pve_host get_lxc_ip # Declare variables used by find_compose_file diff --git a/tools/addon/netdata.sh b/tools/addon/netdata.sh index ba6ea29ee..d9e3a4533 100644 --- a/tools/addon/netdata.sh +++ b/tools/addon/netdata.sh @@ -92,7 +92,7 @@ uninstall() { } header_info -pve_check +require_pve_host OPTIONS=(Install "Install ${APP} on Proxmox VE" Uninstall "Uninstall ${APP} from Proxmox VE") diff --git a/tools/addon/nextcloud-exporter.sh b/tools/addon/nextcloud-exporter.sh index d76dc0099..265c83e5d 100644 --- a/tools/addon/nextcloud-exporter.sh +++ b/tools/addon/nextcloud-exporter.sh @@ -20,6 +20,7 @@ declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "nextcloud-exp set -Eeuo pipefail trap 'error_handler' ERR load_functions +require_debian_like # ============================================================================== # CONFIGURATION @@ -31,14 +32,6 @@ BINARY_PATH="/usr/bin/nextcloud-exporter" CONFIG_PATH="/etc/nextcloud-exporter.env" SERVICE_PATH="/etc/systemd/system/nextcloud-exporter.service" -# ============================================================================== -# OS DETECTION -# ============================================================================== -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." - exit 238 -fi - # ============================================================================== # UNINSTALL # ============================================================================== diff --git a/tools/addon/prometheus-paperless-ngx-exporter.sh b/tools/addon/prometheus-paperless-ngx-exporter.sh index e5bc64775..4762a37b8 100644 --- a/tools/addon/prometheus-paperless-ngx-exporter.sh +++ b/tools/addon/prometheus-paperless-ngx-exporter.sh @@ -15,6 +15,7 @@ declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "prometheus-pa set -Eeuo pipefail trap 'error_handler' ERR load_functions +require_debian_like # ============================================================================== # CONFIGURATION @@ -27,14 +28,6 @@ CONFIG_PATH="/etc/prometheus-paperless-ngx-exporter/config.env" SERVICE_PATH="/etc/systemd/system/prometheus-paperless-ngx-exporter.service" AUTH_TOKEN_FILE="/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file" -# ============================================================================== -# OS DETECTION -# ============================================================================== -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." - exit 238 -fi - # ============================================================================== # UNINSTALL # ============================================================================== diff --git a/tools/addon/runtipi.sh b/tools/addon/runtipi.sh index d4ba9bddb..0f291f13c 100644 --- a/tools/addon/runtipi.sh +++ b/tools/addon/runtipi.sh @@ -35,55 +35,6 @@ DEFAULT_PORT=80 # Initialize all core functions (colors, formatting, icons, STD mode) load_functions -# ============================================================================== -# PROXMOX HOST CHECK -# ============================================================================== -function check_proxmox_host() { - if command -v pveversion &>/dev/null; then - msg_error "Running on the Proxmox host is NOT recommended!" - msg_error "This should be executed inside an LXC container." - echo "" - echo -n "${TAB}Continue anyway? (y/N): " - read -r confirm - if [[ ! "${confirm,,}" =~ ^(y|yes)$ ]]; then - msg_warn "Aborted. Please run this inside an LXC container." - exit 0 - fi - msg_warn "Proceeding on Proxmox host at your own risk!" - fi -} - -# ============================================================================== -# CHECK / INSTALL DOCKER -# ============================================================================== -function check_or_install_docker() { - if command -v docker &>/dev/null; then - msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') is available" - if docker compose version &>/dev/null; then - msg_ok "Docker Compose is available" - else - msg_error "Docker Compose plugin is not available. Please install it." - exit 10 - fi - return - fi - - msg_warn "Docker is not installed." - echo -n "${TAB}Install Docker now? (y/N): " - read -r install_docker_prompt - if [[ ! "${install_docker_prompt,,}" =~ ^(y|yes)$ ]]; then - msg_error "Docker is required for ${APP}. Exiting." - exit 10 - fi - - msg_info "Installing Docker" - DOCKER_CONFIG_PATH='/etc/docker/daemon.json' - mkdir -p "$(dirname "$DOCKER_CONFIG_PATH")" - echo -e '{\n "log-driver": "journald"\n}' >"$DOCKER_CONFIG_PATH" - $STD sh <(curl -fsSL https://get.docker.com) - msg_ok "Installed Docker" -} - # ============================================================================== # UNINSTALL # ============================================================================== @@ -124,7 +75,7 @@ function update() { # INSTALL # ============================================================================== function install() { - check_or_install_docker + ensure_docker msg_info "Installing dependencies" $STD apt-get update @@ -174,13 +125,9 @@ if [[ "${type:-}" == "update" ]]; then exit 0 fi -if [[ -f /etc/alpine-release ]]; then - msg_error "${APP} does not support Alpine Linux. Please use a Debian or Ubuntu based LXC." - exit 238 -fi - header_info -check_proxmox_host +require_debian_like +confirm_not_pve_host get_lxc_ip # Check if already installed diff --git a/tools/addon/sparkyfitness-garmin.sh b/tools/addon/sparkyfitness-garmin.sh index d62f4b4a4..8665cf585 100644 --- a/tools/addon/sparkyfitness-garmin.sh +++ b/tools/addon/sparkyfitness-garmin.sh @@ -20,6 +20,7 @@ declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "sparkyfitness set -Eeuo pipefail trap 'error_handler' ERR load_functions +require_debian_like # ============================================================================== # CONFIGURATION @@ -31,14 +32,6 @@ CONFIG_PATH="/etc/sparkyfitness-garmin/.env" SERVICE_PATH="/etc/systemd/system/sparkyfitness-garmin.service" DEFAULT_PORT=8000 -# ============================================================================== -# OS DETECTION -# ============================================================================== -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." - exit 238 -fi - # ============================================================================== # SparkyFitness LXC DETECTION # ==============================================================================