Files
proxmox/scripts/run-on-proxmox-via-ssh.sh
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands
- CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround
- CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check
- NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere
- MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates
- LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 15:46:57 -08:00

112 lines
4.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Run all deployment/verification commands on the Proxmox host via SSH.
# When using SSH + pct, root is not needed: use non-root PROXMOX_USER with pct permissions
# and set PROXMOX_VMID to run commands inside an LXC container.
#
# Usage:
# ./scripts/run-on-proxmox-via-ssh.sh
# PROXMOX_USER=deploy PROXMOX_VMID=5700 ./scripts/run-on-proxmox-via-ssh.sh # run in container via pct exec
# ./scripts/run-on-proxmox-via-ssh.sh --sync
#
# Optional: PROXMOX_SSH_OPTS, PROXMOX_REPO_PATH. Repo at PROXMOX_REPO_PATH or use --sync.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Load IP config (same as config/ip-addresses.conf)
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
PROXMOX_HOST="${PROXMOX_HOST:-${PROXMOX_HOST_R630_01:-192.168.11.11}}"
# Non-root user with SSH and (if using pct) pct exec permissions — root not required
PROXMOX_USER="${PROXMOX_USER:-$USER}"
# When set, run commands inside LXC via pct exec (no root needed on host)
PROXMOX_VMID="${PROXMOX_VMID:-}"
# Path to the repo on the host or inside the container (when PROXMOX_VMID is set)
PROXMOX_REPO_PATH="${PROXMOX_REPO_PATH:-~/projects/proxmox}"
PROXMOX_SSH_OPTS="${PROXMOX_SSH_OPTS:--o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new}"
RPC_URL="${RPC_URL_138:-http://192.168.11.211:8545}"
DO_SYNC=""
for arg in "$@"; do
case "$arg" in
--sync) DO_SYNC=1 ;;
esac
done
export LC_ALL=C LANG=C
# Run a command on the host or inside the container (when PROXMOX_VMID is set, via pct exec)
run_remote() {
local cmd="export LC_ALL=C LANG=C; $*"
if [ -n "$PROXMOX_VMID" ]; then
local q
q=$(printf '%q ' "$cmd")
ssh $PROXMOX_SSH_OPTS "$PROXMOX_USER@$PROXMOX_HOST" "pct exec $PROXMOX_VMID -- bash -c $q"
else
ssh $PROXMOX_SSH_OPTS "$PROXMOX_USER@$PROXMOX_HOST" "$cmd"
fi
}
echo "=============================================="
echo "Proxmox host: $PROXMOX_USER@$PROXMOX_HOST"
[ -n "$PROXMOX_VMID" ] && echo "Container (pct): $PROXMOX_VMID"
echo "Repo path: $PROXMOX_REPO_PATH"
echo "RPC: $RPC_URL"
echo "=============================================="
echo ""
# 0) Optional: rsync repo to host (or into container: rsync to host then pct push, or use path inside container)
if [ -n "$DO_SYNC" ]; then
echo "[0] Syncing repo to $PROXMOX_USER@$PROXMOX_HOST:$PROXMOX_REPO_PATH ..."
if [ -n "$PROXMOX_VMID" ]; then
ssh $PROXMOX_SSH_OPTS "$PROXMOX_USER@$PROXMOX_HOST" "pct exec $PROXMOX_VMID -- mkdir -p \"$PROXMOX_REPO_PATH\""
rsync -az --delete \
--exclude '.git' --exclude 'node_modules' --exclude 'venv' --exclude '__pycache__' \
-e "ssh $PROXMOX_SSH_OPTS" \
"$PROJECT_ROOT/" "$PROXMOX_USER@$PROXMOX_HOST:/tmp/proxmox-sync/" || { echo "WARN: rsync to host failed."; exit 1; }
ssh $PROXMOX_SSH_OPTS "$PROXMOX_USER@$PROXMOX_HOST" "pct push $PROXMOX_VMID /tmp/proxmox-sync $PROXMOX_REPO_PATH --recursive 2>/dev/null || rsync -az /tmp/proxmox-sync/ \$(pct exec $PROXMOX_VMID -- printenv HOME)/proxmox-repo/ 2>/dev/null || true"
echo "Note: When using VMID, ensure repo is at $PROXMOX_REPO_PATH inside the container (e.g. pct push or mount)."
else
run_remote "mkdir -p \"$PROXMOX_REPO_PATH\""
rsync -az --delete \
--exclude '.git' --exclude 'node_modules' --exclude 'venv' --exclude '__pycache__' \
-e "ssh $PROXMOX_SSH_OPTS" \
"$PROJECT_ROOT/" "$PROXMOX_USER@$PROXMOX_HOST:$PROXMOX_REPO_PATH/" || { echo "WARN: rsync failed."; exit 1; }
fi
echo ""
fi
# 1) On-chain contract check (Chain 138)
echo "[1/4] On-chain contract check (Chain 138)..."
run_remote "cd \"$PROXMOX_REPO_PATH\" && ./scripts/verify/check-contracts-on-chain-138.sh \"$RPC_URL\"" || {
echo "WARN: check-contracts failed (RPC unreachable or repo path wrong?). Continuing."
}
echo ""
# 2) Phased deployment (smom-dbis-138) — skips phases when env set
echo "[2/4] Phased deployment (smom-dbis-138)..."
run_remote "cd \"$PROXMOX_REPO_PATH/smom-dbis-138\" && [ -f .env ] && source .env 2>/dev/null; ./scripts/deployment/deploy-all-phases.sh" || {
echo "WARN: deploy-all-phases failed. Continuing."
}
echo ""
# 3) Phoenix Deploy API — install to /opt and enable systemd
echo "[3/4] Phoenix Deploy API (install systemd)..."
run_remote "cd \"$PROXMOX_REPO_PATH/phoenix-deploy-api\" && [ -f scripts/install-systemd.sh ] && ./scripts/install-systemd.sh" || {
echo "WARN: phoenix-deploy-api install failed or script not found. Continuing."
}
echo ""
# 4) Blockscout verification (optional; from host that can reach Blockscout)
echo "[4/4] Blockscout contract verification..."
run_remote "cd \"$PROXMOX_REPO_PATH\" && source smom-dbis-138/.env 2>/dev/null; ./scripts/verify/run-contract-verification-with-proxy.sh" || {
echo "WARN: Blockscout verification failed or skipped (Blockscout may be unreachable). Continuing."
}
echo ""
echo "=============================================="
echo "All commands completed on Proxmox."
echo "=============================================="