126 lines
4.8 KiB
Bash
126 lines
4.8 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# Verify NPMplus (VMID 10233) is running, has correct IP(s), and uses correct gateway.
|
|||
|
|
# Expected (from config/ip-addresses.conf and docs): VMID 10233 on r630-01;
|
|||
|
|
# IPs 192.168.11.166 (eth0) and/or 192.168.11.167; gateway 192.168.11.1.
|
|||
|
|
#
|
|||
|
|
# Usage:
|
|||
|
|
# On Proxmox host: bash scripts/verify/verify-npmplus-running-and-network.sh
|
|||
|
|
# From repo (via SSH): ssh root@192.168.11.11 'bash -s' < scripts/verify/verify-npmplus-running-and-network.sh
|
|||
|
|
# Or use run-via-proxmox-ssh to copy and run.
|
|||
|
|
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
|
|||
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|||
|
|
[ -f "${PROJECT_ROOT}/config/ip-addresses.conf" ] && source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
|
|||
|
|
|
|||
|
|
VMID="${NPMPLUS_VMID:-10233}"
|
|||
|
|
EXPECTED_GW="${NETWORK_GATEWAY:-192.168.11.1}"
|
|||
|
|
EXPECTED_IPS=("192.168.11.166" "192.168.11.167") # at least one; .167 is used in UDM Pro
|
|||
|
|
PROXMOX_HOST="${NPMPLUS_HOST:-${PROXMOX_HOST_R630_01:-192.168.11.11}}"
|
|||
|
|
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
BLUE='\033[0;34m'
|
|||
|
|
NC='\033[0m'
|
|||
|
|
ok() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|||
|
|
fail() { echo -e "${RED}[✗]${NC} $1"; }
|
|||
|
|
warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
|
|||
|
|
info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|||
|
|
echo "NPMplus (VMID $VMID) – running, IP, gateway check"
|
|||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 1) Must be run where pct exists (Proxmox host)
|
|||
|
|
if ! command -v pct &>/dev/null; then
|
|||
|
|
fail "pct not found. Run this script on the Proxmox host (e.g. ssh root@${PROXMOX_HOST}) or use: ssh root@${PROXMOX_HOST} 'bash -s' < scripts/verify/verify-npmplus-running-and-network.sh"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 2) Container exists and status
|
|||
|
|
if ! pct status "$VMID" &>/dev/null; then
|
|||
|
|
fail "VMID $VMID not found on this host."
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
STATUS=$(pct status "$VMID" 2>/dev/null | awk '{print $2}')
|
|||
|
|
if [[ "$STATUS" != "running" ]]; then
|
|||
|
|
fail "NPMplus (VMID $VMID) is not running. Status: $STATUS"
|
|||
|
|
info "Start with: pct start $VMID"
|
|||
|
|
info "Configured network (from pct config) – verify IP/gw match expected:"
|
|||
|
|
pct config "$VMID" 2>/dev/null | grep -E '^net|^name' || true
|
|||
|
|
echo "Expected: gateway $EXPECTED_GW; IP(s) ${EXPECTED_IPS[*]}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
ok "NPMplus (VMID $VMID) is running"
|
|||
|
|
|
|||
|
|
# 3) Network config from container config (host view)
|
|||
|
|
info "Container network config (pct config):"
|
|||
|
|
pct config "$VMID" 2>/dev/null | grep -E '^net|^name' || true
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 4) IP and gateway inside container
|
|||
|
|
info "IP addresses and gateway inside container:"
|
|||
|
|
IP_OUT=$(pct exec "$VMID" -- ip -4 addr show 2>/dev/null || true)
|
|||
|
|
GW_OUT=$(pct exec "$VMID" -- ip route show default 2>/dev/null || true)
|
|||
|
|
|
|||
|
|
echo "$IP_OUT"
|
|||
|
|
echo "Default route: $GW_OUT"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Parse default gateway
|
|||
|
|
ACTUAL_GW=$(echo "$GW_OUT" | awk '/default via/ {print $3}')
|
|||
|
|
if [[ -n "$ACTUAL_GW" ]]; then
|
|||
|
|
if [[ "$ACTUAL_GW" == "$EXPECTED_GW" ]]; then
|
|||
|
|
ok "Gateway is correct: $ACTUAL_GW"
|
|||
|
|
else
|
|||
|
|
warn "Gateway is $ACTUAL_GW (expected $EXPECTED_GW)"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
warn "Could not determine default gateway"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Parse IPs (simple: lines with inet 192.168.11.x)
|
|||
|
|
FOUND_IPS=()
|
|||
|
|
while read -r line; do
|
|||
|
|
if [[ "$line" =~ inet\ (192\.168\.11\.[0-9]+)/ ]]; then
|
|||
|
|
FOUND_IPS+=("${BASH_REMATCH[1]}")
|
|||
|
|
fi
|
|||
|
|
done <<< "$IP_OUT"
|
|||
|
|
|
|||
|
|
if [[ ${#FOUND_IPS[@]} -eq 0 ]]; then
|
|||
|
|
fail "No 192.168.11.x address found in container"
|
|||
|
|
else
|
|||
|
|
ok "Container has IP(s): ${FOUND_IPS[*]}"
|
|||
|
|
MISSING=()
|
|||
|
|
for exp in "${EXPECTED_IPS[@]}"; do
|
|||
|
|
found=false
|
|||
|
|
for g in "${FOUND_IPS[@]}"; do [[ "$g" == "$exp" ]] && found=true; done
|
|||
|
|
[[ "$found" != true ]] && MISSING+=("$exp")
|
|||
|
|
done
|
|||
|
|
if [[ ${#MISSING[@]} -gt 0 ]]; then
|
|||
|
|
warn "Expected at least one of ${EXPECTED_IPS[*]}; missing in container: ${MISSING[*]} (UDM Pro forwards to .167)"
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 5) Admin UI reachable (port 81)
|
|||
|
|
info "Checking NPMplus admin UI (port 81) on container IPs..."
|
|||
|
|
for ip in "${FOUND_IPS[@]}"; do
|
|||
|
|
if pct exec "$VMID" -- curl -s -o /dev/null -w "%{http_code}" --connect-timeout 2 "http://127.0.0.1:81" 2>/dev/null | grep -q '200\|301\|302\|401'; then
|
|||
|
|
ok "Port 81 (admin UI) responding on container"
|
|||
|
|
break
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
if ! pct exec "$VMID" -- curl -s -o /dev/null -w "%{http_code}" --connect-timeout 2 "http://127.0.0.1:81" 2>/dev/null | grep -qE '200|301|302|401'; then
|
|||
|
|
warn "Port 81 did not respond with 2xx/3xx/401 (admin UI may still be starting)"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "Expected: gateway $EXPECTED_GW; at least one of ${EXPECTED_IPS[*]} (UDM Pro uses .167)."
|
|||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|||
|
|
echo ""
|