Files
proxmox/scripts/install-wscat-in-rpc-containers.sh
defiQUG b3a8fe4496
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
chore: sync all changes to Gitea
- Config, docs, scripts, and backup manifests
- Submodule refs unchanged (m = modified content in submodules)

Made-with: Cursor
2026-03-02 11:37:34 -08:00

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