Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- Config, docs, scripts, and backup manifests - Submodule refs unchanged (m = modified content in submodules) Made-with: Cursor
91 lines
2.8 KiB
Bash
91 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
|
# Install wscat (or ensure npx works) inside every RPC LXC container via SSH to Proxmox hosts.
|
|
# Run from project root. Containers need network and (for full install) Node.js/npm.
|
|
# Usage: ./scripts/install-wscat-in-rpc-containers.sh [--check-only]
|
|
# --check-only Only check if wscat/npx already available (fast). Default: install if missing (can take 30+ min for 13 containers).
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
[ -f config/ip-addresses.conf ] && source config/ip-addresses.conf 2>/dev/null || true
|
|
|
|
PROXMOX_SSH_USER="${PROXMOX_SSH_USER:-${PROXMOX_USER:-root}}"
|
|
[[ "$PROXMOX_SSH_USER" == *"@"* ]] && PROXMOX_SSH_USER="root"
|
|
|
|
R630_01="${PROXMOX_HOST_R630_01:-192.168.11.11}"
|
|
R630_02="${PROXMOX_HOST_R630_02:-192.168.11.12}"
|
|
ML110="${PROXMOX_HOST_ML110:-192.168.11.10}"
|
|
|
|
RPC_NODES=(
|
|
"2101:$R630_01"
|
|
"2201:$R630_02"
|
|
"2301:$ML110"
|
|
"2303:$R630_02"
|
|
"2304:$ML110"
|
|
"2305:$ML110"
|
|
"2306:$ML110"
|
|
"2307:$ML110"
|
|
"2308:$ML110"
|
|
"2400:$ML110"
|
|
"2401:$R630_02"
|
|
"2402:$ML110"
|
|
"2403:$ML110"
|
|
)
|
|
|
|
SSH_OPTS="-o ConnectTimeout=10 -o StrictHostKeyChecking=no"
|
|
CHECK_ONLY=false
|
|
[[ "${1:-}" == "--check-only" ]] && CHECK_ONLY=true
|
|
|
|
# Try to ensure wscat or npx is available inside the container (non-interactive, minimal install)
|
|
install_inside() {
|
|
local vmid="$1" host="$2"
|
|
ssh $SSH_OPTS "${PROXMOX_SSH_USER}@${host}" "pct exec $vmid -- bash -s" <<'INNER'
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
if command -v wscat >/dev/null 2>&1; then
|
|
echo "ok:wscat"
|
|
exit 0
|
|
fi
|
|
if command -v npx >/dev/null 2>&1; then
|
|
npx -y wscat --version >/dev/null 2>&1 && echo "ok:npx" || echo "fail:npx"
|
|
exit 0
|
|
fi
|
|
# Install Node.js if missing (Debian/Ubuntu)
|
|
if ! command -v node >/dev/null 2>&1; then
|
|
apt-get update -qq && apt-get install -y -qq nodejs npm 2>/dev/null || true
|
|
fi
|
|
if command -v npm >/dev/null 2>&1; then
|
|
npm install -g wscat 2>/dev/null && echo "ok:installed" || echo "fail:install"
|
|
else
|
|
echo "fail:no_node"
|
|
fi
|
|
INNER
|
|
}
|
|
|
|
echo "=== Install wscat in RPC containers (check-only=$CHECK_ONLY) ==="
|
|
echo ""
|
|
|
|
ok=0
|
|
fail=0
|
|
for entry in "${RPC_NODES[@]}"; do
|
|
IFS=: read -r vmid host <<< "$entry"
|
|
result=""
|
|
if "$CHECK_ONLY"; then
|
|
result=$(ssh $SSH_OPTS "${PROXMOX_SSH_USER}@${host}" "pct exec $vmid -- bash -c 'command -v wscat >/dev/null && echo ok:wscat || (command -v npx >/dev/null && npx -y wscat --version 2>/dev/null && echo ok:npx || echo fail)' 2>/dev/null" || echo "fail:ssh")
|
|
else
|
|
result=$(install_inside "$vmid" "$host" 2>/dev/null || echo "fail:ssh")
|
|
fi
|
|
if echo "$result" | grep -q "^ok:"; then
|
|
echo " VMID $vmid ($host): $result"
|
|
((ok++)) || true
|
|
else
|
|
echo " VMID $vmid ($host): $result"
|
|
((fail++)) || true
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "Summary: $ok OK, $fail failed (total ${#RPC_NODES[@]} containers)"
|
|
exit $fail
|