docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled

- 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>
This commit is contained in:
defiQUG
2026-02-12 15:46:57 -08:00
parent cc8dcaf356
commit fbda1b4beb
5114 changed files with 498901 additions and 4567 deletions

View File

@@ -0,0 +1,66 @@
#!/usr/bin/env bash
# Validate required config files and optional env vars before deployment/scripts
# Recommendation: docs/10-best-practices/IMPLEMENTATION_CHECKLIST.md (Configuration validation)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
log_info() { echo "[INFO] $1"; }
log_ok() { echo "[OK] $1"; }
log_warn() { echo "[WARN] $1"; }
log_err() { echo "[ERROR] $1"; }
ERRORS=0
# Required config paths (adjust per project)
REQUIRED_FILES="${VALIDATE_REQUIRED_FILES:-}"
# Example: REQUIRED_FILES="/path/to/config.toml /path/to/.env"
# Optional env vars to warn if missing
OPTIONAL_ENV="${VALIDATE_OPTIONAL_ENV:-PROXMOX_TOKEN_VALUE PROXMOX_HOST}"
check_file() {
local f="$1"
if [[ -f "$f" ]]; then
log_ok "Found: $f"
return 0
else
log_err "Missing required file: $f"
ERRORS=$((ERRORS + 1))
return 1
fi
}
check_env() {
local name="$1"
if [[ -z "${!name:-}" ]]; then
log_warn "Optional env not set: $name"
return 1
else
log_ok "Env set: $name"
return 0
fi
}
if [[ -n "$REQUIRED_FILES" ]]; then
for f in $REQUIRED_FILES; do
check_file "$f"
done
else
# Default: check common locations
[[ -d "$PROJECT_ROOT/config" ]] && check_file "$PROJECT_ROOT/config/ip-addresses.conf" || true
[[ -f "$PROJECT_ROOT/.env.example" ]] && log_ok ".env.example present (copy to .env and fill)" || true
fi
for v in $OPTIONAL_ENV; do
check_env "$v" || true
done
if [[ $ERRORS -gt 0 ]]; then
log_err "Validation failed with $ERRORS error(s). Set VALIDATE_REQUIRED_FILES='path1 path2' to require specific files."
exit 1
fi
log_ok "Validation passed."
exit 0

View File

@@ -0,0 +1,65 @@
#!/usr/bin/env bash
# Validate that key IPs and gateway match config/ip-addresses.conf (single source of truth).
# Usage: bash scripts/validation/validate-ips-and-gateways.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
EXPECTED_GW="192.168.11.1"
FAIL=0
ok() { echo "[✓] $1"; }
fail() { echo "[✗] $1"; FAIL=1; }
warn() { echo "[⚠] $1"; }
echo ""
echo "Validate IPs and gateway (source: config/ip-addresses.conf)"
echo "Expected gateway: $EXPECTED_GW"
echo ""
# Gateway
GW="${NETWORK_GATEWAY:-}"
if [[ "$GW" == "$EXPECTED_GW" ]]; then
ok "NETWORK_GATEWAY=$GW"
else
[[ -z "$GW" ]] && fail "NETWORK_GATEWAY not set (should be $EXPECTED_GW)" || fail "NETWORK_GATEWAY=$GW (expected $EXPECTED_GW)"
fi
# Proxmox hosts
for name in PROXMOX_HOST_ML110 PROXMOX_HOST_R630_01 PROXMOX_HOST_R630_02; do
v="${!name:-}"
case "$name" in
*ML110) exp="192.168.11.10" ;;
*R630_01) exp="192.168.11.11" ;;
*R630_02) exp="192.168.11.12" ;;
*) exp="" ;;
esac
[[ -n "$exp" ]] && { [[ "$v" == "$exp" ]] && ok "$name=$v" || fail "$name=$v (expected $exp)"; }
done
# NPMplus
v="${IP_NPMPLUS:-}"; [[ "$v" == "192.168.11.167" ]] && ok "IP_NPMPLUS=$v" || fail "IP_NPMPLUS=$v (expected 192.168.11.167)"
v="${IP_NPMPLUS_ETH0:-}"; [[ "$v" == "192.168.11.166" ]] && ok "IP_NPMPLUS_ETH0=$v" || warn "IP_NPMPLUS_ETH0=$v (expected 192.168.11.166)"
# Key RPC/Blockscout
v="${RPC_PUBLIC_1:-}"; [[ "$v" == "192.168.11.221" ]] && ok "RPC_PUBLIC_1=$v" || fail "RPC_PUBLIC_1=$v (expected 192.168.11.221)"
v="${RPC_CORE_1:-}"; [[ "$v" == "192.168.11.211" ]] && ok "RPC_CORE_1=$v" || fail "RPC_CORE_1=$v (expected 192.168.11.211)"
v="${IP_BLOCKSCOUT:-}"; [[ "$v" == "192.168.11.140" ]] && ok "IP_BLOCKSCOUT=$v" || fail "IP_BLOCKSCOUT=$v (expected 192.168.11.140)"
v="${IP_DBIS_FRONTEND:-}"; [[ "$v" == "192.168.11.130" ]] && ok "IP_DBIS_FRONTEND=$v" || fail "IP_DBIS_FRONTEND=$v (expected 192.168.11.130)"
# smom-dbis-138-proxmox network.conf gateway if present
NC="${PROJECT_ROOT}/smom-dbis-138-proxmox/config/network.conf"
if [[ -f "$NC" ]]; then
g=$(grep -E '^GATEWAY=' "$NC" 2>/dev/null | cut -d= -f2 | tr -d '"' || true)
if [[ "$g" == "$EXPECTED_GW" ]]; then
ok "smom-dbis-138-proxmox/config/network.conf GATEWAY=$g"
else
warn "smom-dbis-138-proxmox/config/network.conf GATEWAY=$g (expected $EXPECTED_GW)"
fi
fi
echo ""
[[ $FAIL -eq 0 ]] && exit 0 || exit 1

View File

@@ -1,89 +0,0 @@
#!/usr/bin/env bash
# Quick Verification - Run All Checks
# Convenience script to run all verification checks before deployment
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Try to find project root - could be at same level or in smom-dbis-138-proxmox subdirectory
if [[ -d "$SCRIPT_DIR/../../smom-dbis-138-proxmox" ]]; then
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../smom-dbis-138-proxmox" && pwd)"
elif [[ -d "$SCRIPT_DIR/../.." ]]; then
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
else
PROJECT_ROOT="$SCRIPT_DIR/../.."
fi
SOURCE_PROJECT="${1:-/home/intlc/projects/smom-dbis-138}"
echo "════════════════════════════════════════════════════════"
echo " Complete Verification - All Checks"
echo "════════════════════════════════════════════════════════"
echo ""
echo "Source Project: $SOURCE_PROJECT"
echo ""
# 1. Prerequisites Check
echo "=== 1. Prerequisites Check ==="
if [[ -f "$SCRIPT_DIR/check-prerequisites.sh" ]]; then
"$SCRIPT_DIR/check-prerequisites.sh" "$SOURCE_PROJECT" || {
echo ""
echo "❌ Prerequisites check failed. Fix issues before continuing."
exit 1
}
elif [[ -f "$PROJECT_ROOT/scripts/validation/check-prerequisites.sh" ]]; then
"$PROJECT_ROOT/scripts/validation/check-prerequisites.sh" "$SOURCE_PROJECT" || {
echo ""
echo "❌ Prerequisites check failed. Fix issues before continuing."
exit 1
}
else
echo "⚠ check-prerequisites.sh not found, skipping..."
fi
echo ""
echo "=== 2. Storage Configuration (requires root on Proxmox host) ==="
if [[ $EUID -eq 0 ]] && command -v pvesm &>/dev/null; then
if [[ -f "$SCRIPT_DIR/verify-storage-config.sh" ]]; then
"$SCRIPT_DIR/verify-storage-config.sh" || {
echo ""
echo "⚠ Storage verification had issues. Review output above."
}
elif [[ -f "$PROJECT_ROOT/scripts/validation/verify-storage-config.sh" ]]; then
"$PROJECT_ROOT/scripts/validation/verify-storage-config.sh" || {
echo ""
echo "⚠ Storage verification had issues. Review output above."
}
else
echo "⚠ verify-storage-config.sh not found, skipping..."
fi
else
echo " Skipping (not running as root on Proxmox host)"
echo " To verify storage, run: sudo ./scripts/validation/verify-storage-config.sh"
fi
echo ""
echo "=== 3. Network Configuration ==="
if [[ -f "$SCRIPT_DIR/verify-network-config.sh" ]]; then
"$SCRIPT_DIR/verify-network-config.sh" || {
echo ""
echo "⚠ Network verification had issues. Review output above."
}
elif [[ -f "$PROJECT_ROOT/scripts/validation/verify-network-config.sh" ]]; then
"$PROJECT_ROOT/scripts/validation/verify-network-config.sh" || {
echo ""
echo "⚠ Network verification had issues. Review output above."
}
else
echo "⚠ verify-network-config.sh not found, skipping..."
fi
echo ""
echo "════════════════════════════════════════════════════════"
echo " Verification Complete"
echo "════════════════════════════════════════════════════════"
echo ""
echo "If all checks passed, you're ready to deploy:"
echo " sudo ./scripts/deployment/deploy-phased.sh --source-project $SOURCE_PROJECT"
echo ""

View File

@@ -1,181 +0,0 @@
#!/usr/bin/env bash
# Verify Network Configuration
# Checks network connectivity and bandwidth to Proxmox host
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
source "$PROJECT_ROOT/lib/common.sh" 2>/dev/null || {
log_info() { echo "[INFO] $1"; }
log_success() { echo "[✓] $1"; }
log_error() { echo "[ERROR] $1"; }
log_warn() { echo "[WARN] $1"; }
}
# Load configuration
load_config "$PROJECT_ROOT/config/proxmox.conf" 2>/dev/null || true
log_info "========================================="
log_info "Network Configuration Verification"
log_info "========================================="
log_info ""
# Check network connectivity
log_info "=== Network Connectivity ==="
# Get Proxmox host IP/name (if configured)
PROXMOX_HOST="${PROXMOX_HOST:-localhost}"
log_info "Proxmox host: $PROXMOX_HOST"
# Check if we can resolve the host
if command_exists ping; then
if ping -c 1 -W 2 "$PROXMOX_HOST" &>/dev/null; then
log_success "Proxmox host is reachable"
# Get average latency
LATENCY=$(ping -c 3 -W 2 "$PROXMOX_HOST" 2>/dev/null | grep "avg" | awk -F'/' '{print $5}' || echo "N/A")
if [[ "$LATENCY" != "N/A" ]]; then
log_info " Average latency: ${LATENCY}ms"
if (( $(echo "$LATENCY > 100" | bc -l 2>/dev/null || echo 0) )); then
log_warn " High latency detected (>100ms). May impact deployment performance."
fi
fi
else
log_warn "Cannot ping Proxmox host (may be normal if running locally)"
fi
fi
# Check network interfaces
log_info ""
log_info "=== Network Interfaces ==="
if [[ -f /proc/net/dev ]]; then
# List active network interfaces
INTERFACES=$(ip -o link show 2>/dev/null | awk -F': ' '{print $2}' | grep -v "lo" || true)
if [[ -n "$INTERFACES" ]]; then
for iface in $INTERFACES; do
if ip link show "$iface" 2>/dev/null | grep -q "state UP"; then
log_info " $iface: UP"
# Get link speed if available
if [[ -f "/sys/class/net/$iface/speed" ]]; then
SPEED=$(cat "/sys/class/net/$iface/speed" 2>/dev/null || echo "unknown")
if [[ "$SPEED" != "-1" ]] && [[ "$SPEED" != "unknown" ]]; then
if [[ $SPEED -ge 1000 ]]; then
log_success " Speed: ${SPEED}Mbps (Gigabit or better - recommended)"
elif [[ $SPEED -ge 100 ]]; then
log_warn " Speed: ${SPEED}Mbps (Fast Ethernet - may limit performance)"
else
log_warn " Speed: ${SPEED}Mbps (Slow - may significantly impact deployment)"
fi
fi
fi
else
log_info " $iface: DOWN"
fi
done
fi
else
log_warn "Cannot check network interfaces (/proc/net/dev not available)"
fi
# Check Proxmox bridge configuration (if on Proxmox host)
log_info ""
log_info "=== Proxmox Bridge Configuration ==="
CONFIGURED_BRIDGE="${PROXMOX_BRIDGE:-vmbr0}"
log_info "Configured bridge: $CONFIGURED_BRIDGE"
if command_exists ip; then
if ip link show "$CONFIGURED_BRIDGE" &>/dev/null; then
log_success "Bridge '$CONFIGURED_BRIDGE' exists"
BRIDGE_STATUS=$(ip link show "$CONFIGURED_BRIDGE" 2>/dev/null | grep -o "state [A-Z]*" | awk '{print $2}')
log_info " Status: $BRIDGE_STATUS"
if [[ "$BRIDGE_STATUS" == "UP" ]]; then
log_success " Bridge is UP"
else
log_warn " Bridge is DOWN - containers may not have network access"
fi
else
log_error "Bridge '$CONFIGURED_BRIDGE' not found"
log_info " Available bridges:"
ip link show type bridge 2>/dev/null | grep "^[0-9]" | awk -F': ' '{print " - " $2}' || log_info " (none found)"
fi
fi
# Check DNS resolution (important for package downloads)
log_info ""
log_info "=== DNS Configuration ==="
if command_exists nslookup || command_exists host; then
TEST_DOMAIN="github.com"
if nslookup "$TEST_DOMAIN" &>/dev/null || host "$TEST_DOMAIN" &>/dev/null; then
log_success "DNS resolution working ($TEST_DOMAIN)"
else
log_error "DNS resolution failed - package downloads may fail"
fi
else
log_warn "Cannot test DNS (nslookup/host not available)"
fi
# Check internet connectivity (for package downloads)
log_info ""
log_info "=== Internet Connectivity ==="
if command_exists curl; then
if curl -s --max-time 5 https://github.com &>/dev/null; then
log_success "Internet connectivity working (GitHub reachable)"
# Test download speed (rough estimate)
log_info " Testing download speed..."
SPEED_TEST=$(curl -s -o /dev/null -w "%{speed_download}" --max-time 10 https://github.com 2>/dev/null || echo "0")
if [[ -n "$SPEED_TEST" ]] && [[ "$SPEED_TEST" != "0" ]]; then
# Convert bytes/s to Mbps
SPEED_MBPS=$(echo "scale=2; $SPEED_TEST * 8 / 1024 / 1024" | bc 2>/dev/null || echo "N/A")
if [[ "$SPEED_MBPS" != "N/A" ]]; then
log_info " Approximate download speed: ${SPEED_MBPS} Mbps"
if (( $(echo "$SPEED_MBPS > 100" | bc -l 2>/dev/null || echo 0) )); then
log_success " Speed is good for deployment (recommended: >100 Mbps)"
elif (( $(echo "$SPEED_MBPS > 10" | bc -l 2>/dev/null || echo 0) )); then
log_warn " Speed is acceptable but may slow deployment (recommended: >100 Mbps)"
else
log_warn " Speed is slow - deployment may be significantly slower"
log_info " Consider:"
log_info " • Using local package mirrors"
log_info " • Pre-caching packages"
log_info " • Upgrading network connection"
fi
fi
fi
else
log_warn "Internet connectivity test failed (may be normal in isolated networks)"
fi
else
log_warn "Cannot test internet connectivity (curl not available)"
fi
# Network optimization recommendations
log_info ""
log_info "=== Network Optimization Recommendations ==="
log_info ""
log_info "For optimal deployment performance:"
log_info " ✓ Use Gigabit Ethernet (1 Gbps) or faster"
log_info " ✓ Ensure low latency (<50ms) to Proxmox host"
log_info " ✓ Use wired connection instead of wireless"
log_info " ✓ Consider local package mirrors for apt"
log_info " ✓ Pre-cache OS templates (saves 5-10 minutes)"
log_info " ✓ Monitor network usage during deployment"
log_info ""
log_info "Expected network usage:"
log_info " • OS template download: ~200-500 MB (one-time)"
log_info " • Package downloads: ~500 MB - 2 GB per container"
log_info " • Configuration file transfers: Minimal"
log_info " • Total for 67 containers: ~35-135 GB"
log_info ""
log_success "Network configuration verification complete"

View File

@@ -1,119 +0,0 @@
#!/usr/bin/env bash
# Verify Storage Configuration
# Checks if storage is configured for optimal deployment performance
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
source "$PROJECT_ROOT/lib/common.sh" 2>/dev/null || {
log_info() { echo "[INFO] $1"; }
log_success() { echo "[✓] $1"; }
log_error() { echo "[ERROR] $1"; }
log_warn() { echo "[WARN] $1"; }
}
# Load configuration
load_config "$PROJECT_ROOT/config/proxmox.conf" 2>/dev/null || true
log_info "========================================="
log_info "Storage Configuration Verification"
log_info "========================================="
log_info ""
# Check if running on Proxmox host
if ! command_exists pvesm; then
log_error "pvesm command not found. This script must be run on Proxmox host."
exit 1
fi
# Get configured storage
CONFIGURED_STORAGE="${PROXMOX_STORAGE:-local-lvm}"
log_info "Configured storage: $CONFIGURED_STORAGE"
# List available storage
log_info ""
log_info "=== Available Storage ==="
pvesm status 2>/dev/null || {
log_error "Failed to list storage. Are you running as root?"
exit 1
}
log_info ""
log_info "=== Storage Details ==="
# Check if configured storage exists
if pvesm status 2>/dev/null | grep -q "^$CONFIGURED_STORAGE"; then
log_success "Configured storage '$CONFIGURED_STORAGE' exists"
# Get storage details
STORAGE_TYPE=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $2}')
STORAGE_STATUS=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $3}')
STORAGE_TOTAL=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $4}')
STORAGE_USED=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $5}')
STORAGE_AVAIL=$(pvesm status 2>/dev/null | grep "^$CONFIGURED_STORAGE" | awk '{print $6}')
log_info " Type: $STORAGE_TYPE"
log_info " Status: $STORAGE_STATUS"
log_info " Total: $STORAGE_TOTAL"
log_info " Used: $STORAGE_USED"
log_info " Available: $STORAGE_AVAIL"
# Check storage type
log_info ""
log_info "=== Storage Type Analysis ==="
if [[ "$STORAGE_TYPE" == "lvm" ]] || [[ "$STORAGE_TYPE" == "lvmthin" ]] || [[ "$STORAGE_TYPE" == "zfspool" ]] || [[ "$STORAGE_TYPE" == "dir" ]]; then
if echo "$CONFIGURED_STORAGE" | grep -q "local"; then
log_success "Storage is local (recommended for deployment performance)"
log_info " Local storage provides:"
log_info " • Faster container creation (15-30 min saved)"
log_info " • Faster OS template installation"
log_info " • Lower latency for I/O operations"
else
log_warn "Storage appears to be network-based"
log_info " Network storage considerations:"
log_info " • Slower container creation"
log_info " • Higher latency"
log_info " • May benefit from caching"
log_info ""
log_info " Recommendation: Use local storage if possible for deployment"
fi
else
log_warn "Storage type '$STORAGE_TYPE' detected"
log_info " Verify this is optimal for your deployment needs"
fi
# Check available space (estimate requirement: ~100GB per container, 67 containers = ~6.7TB)
log_info ""
log_info "=== Storage Capacity Check ==="
ESTIMATED_NEED="6.7T" # Rough estimate for 67 containers
log_info "Estimated storage needed: ~$ESTIMATED_NEED (for 67 containers)"
log_info "Available storage: $STORAGE_AVAIL"
# Note: Actual space check would require parsing storage sizes
log_info " Verify sufficient space is available for deployment"
else
log_error "Configured storage '$CONFIGURED_STORAGE' not found"
log_info ""
log_info "Available storage options:"
pvesm status 2>/dev/null | awk '{print " - " $1 " (" $2 ")"}'
log_info ""
log_info "To fix: Update PROXMOX_STORAGE in config/proxmox.conf"
exit 1
fi
log_info ""
log_info "=== Storage Performance Recommendations ==="
log_info ""
log_info "For optimal deployment performance:"
log_info " ✓ Use local storage (local-lvm, local, local-zfs)"
log_info " ✓ Ensure sufficient available space"
log_info " ✓ Monitor storage I/O during deployment"
log_info " ✓ Consider SSD-based storage for faster operations"
log_info ""
log_success "Storage configuration verification complete"