- Update dbis_core, cross-chain-pmm-lps, explorer-monorepo, metamask-integration, pr-workspace/chains - Omit embedded publish git dirs and empty placeholders from index Made-with: Cursor
129 lines
3.5 KiB
Bash
129 lines
3.5 KiB
Bash
#!/usr/bin/env bash
|
|
# Install wscat (or ensure npx works) inside RPC LXC containers 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
|
|
# ./scripts/install-wscat-in-rpc-containers.sh --apply
|
|
# ./scripts/install-wscat-in-rpc-containers.sh --vmid 2301 --apply
|
|
# Default is read-only check mode; use --apply to install if missing.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh"
|
|
|
|
PROXMOX_SSH_USER="${PROXMOX_SSH_USER:-${PROXMOX_USER:-root}}"
|
|
[[ "$PROXMOX_SSH_USER" == *"@"* ]] && PROXMOX_SSH_USER="root"
|
|
|
|
RPC_VMIDS=(2101 2201 2301 2303 2304 2305 2306 2307 2308 2400 2401 2402 2403)
|
|
RPC_NODES=()
|
|
for vmid in "${RPC_VMIDS[@]}"; do
|
|
RPC_NODES+=("${vmid}:$(get_host_for_vmid "$vmid")")
|
|
done
|
|
|
|
SSH_OPTS="-o ConnectTimeout=10 -o StrictHostKeyChecking=no"
|
|
CHECK_ONLY=true
|
|
TARGET_VMIDS=()
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
Usage: ./scripts/install-wscat-in-rpc-containers.sh [--apply] [--check-only] [--vmid <N>]
|
|
|
|
Options:
|
|
--check-only Read-only check for wscat/npx availability (default)
|
|
--apply Install wscat if missing
|
|
--vmid <N> Limit to one VMID; repeatable
|
|
EOF
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--check-only)
|
|
CHECK_ONLY=true
|
|
shift
|
|
;;
|
|
--apply)
|
|
CHECK_ONLY=false
|
|
shift
|
|
;;
|
|
--vmid)
|
|
[[ $# -ge 2 ]] || { usage >&2; exit 2; }
|
|
TARGET_VMIDS+=("$2")
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown argument: $1" >&2
|
|
usage >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
selected_vmid() {
|
|
local vmid="$1"
|
|
[[ ${#TARGET_VMIDS[@]} -eq 0 ]] && return 0
|
|
local wanted
|
|
for wanted in "${TARGET_VMIDS[@]}"; do
|
|
[[ "$vmid" == "$wanted" ]] && return 0
|
|
done
|
|
return 1
|
|
}
|
|
|
|
# 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"
|
|
selected_vmid "$vmid" || continue
|
|
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
|