Files
proxmox/scripts/check-prerequisites.sh

347 lines
11 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Comprehensive Prerequisites Check Script
# Validates all prerequisites for the Proxmox workspace
set +e # Don't exit on errors - collect all results
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Status tracking
PASSED=0
FAILED=0
WARNINGS=0
pass() {
echo -e "${GREEN}${NC} $1"
((PASSED++))
}
fail() {
echo -e "${RED}${NC} $1"
((FAILED++))
}
warn() {
echo -e "${YELLOW}⚠️${NC} $1"
((WARNINGS++))
}
info() {
echo -e "${BLUE}${NC} $1"
}
section() {
echo ""
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${CYAN}$1${NC}"
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
}
echo ""
echo -e "${BLUE}╔════════════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}${NC} Prerequisites Check for Proxmox Workspace ${BLUE}${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════════════════╝${NC}"
echo ""
# ============================================================================
# SECTION 1: SYSTEM PREREQUISITES
# ============================================================================
section "1. SYSTEM PREREQUISITES"
# Check Node.js
if command -v node &> /dev/null; then
NODE_VERSION=$(node --version | sed 's/v//')
NODE_MAJOR=$(echo "$NODE_VERSION" | cut -d. -f1)
if [ "$NODE_MAJOR" -ge 16 ]; then
pass "Node.js installed: v$NODE_VERSION (requires 16+)"
else
fail "Node.js version too old: v$NODE_VERSION (requires 16+)"
fi
else
fail "Node.js not installed (requires 16+)"
fi
# Check pnpm
if command -v pnpm &> /dev/null; then
PNPM_VERSION=$(pnpm --version)
PNPM_MAJOR=$(echo "$PNPM_VERSION" | cut -d. -f1)
if [ "$PNPM_MAJOR" -ge 8 ]; then
pass "pnpm installed: $PNPM_VERSION (requires 8+)"
else
fail "pnpm version too old: $PNPM_VERSION (requires 8+)"
fi
else
fail "pnpm not installed (requires 8+)"
fi
# Check Git
if command -v git &> /dev/null; then
GIT_VERSION=$(git --version | awk '{print $3}')
pass "Git installed: $GIT_VERSION"
else
fail "Git not installed"
fi
# Check required tools
REQUIRED_TOOLS=("curl" "jq" "bash")
for tool in "${REQUIRED_TOOLS[@]}"; do
if command -v "$tool" &> /dev/null; then
pass "$tool installed"
else
fail "$tool not found (required)"
fi
done
# ============================================================================
# SECTION 2: WORKSPACE STRUCTURE
# ============================================================================
section "2. WORKSPACE STRUCTURE"
# Check project root
if [ -d "$PROJECT_ROOT" ]; then
pass "Project root exists: $PROJECT_ROOT"
else
fail "Project root not found: $PROJECT_ROOT"
exit 1
fi
# Check package.json
if [ -f "$PROJECT_ROOT/package.json" ]; then
pass "package.json exists"
else
fail "package.json not found"
fi
# Check pnpm-workspace.yaml
if [ -f "$PROJECT_ROOT/pnpm-workspace.yaml" ]; then
pass "pnpm-workspace.yaml exists"
else
fail "pnpm-workspace.yaml not found"
fi
# Check submodules
if [ -d "$PROJECT_ROOT/mcp-proxmox" ]; then
if [ -f "$PROJECT_ROOT/mcp-proxmox/index.js" ]; then
pass "mcp-proxmox submodule exists and has index.js"
else
warn "mcp-proxmox submodule exists but index.js not found"
fi
else
fail "mcp-proxmox submodule not found"
fi
if [ -d "$PROJECT_ROOT/ProxmoxVE" ]; then
pass "ProxmoxVE submodule exists"
else
warn "ProxmoxVE submodule not found"
fi
if [ -d "$PROJECT_ROOT/smom-dbis-138-proxmox" ]; then
pass "smom-dbis-138-proxmox submodule exists"
else
warn "smom-dbis-138-proxmox submodule not found"
fi
# Check directory structure
[ -d "$PROJECT_ROOT/scripts" ] && pass "scripts/ directory exists" || fail "scripts/ directory not found"
[ -d "$PROJECT_ROOT/docs" ] && pass "docs/ directory exists" || fail "docs/ directory not found"
# ============================================================================
# SECTION 3: DEPENDENCIES
# ============================================================================
section "3. DEPENDENCIES"
# Check if node_modules exists
if [ -d "$PROJECT_ROOT/node_modules" ]; then
pass "node_modules exists (dependencies installed)"
# Check MCP server dependencies
if [ -d "$PROJECT_ROOT/mcp-proxmox/node_modules" ]; then
pass "MCP server dependencies installed"
else
warn "MCP server dependencies not installed (run: pnpm install)"
fi
# Check frontend dependencies
if [ -d "$PROJECT_ROOT/ProxmoxVE/frontend/node_modules" ]; then
pass "Frontend dependencies installed"
else
warn "Frontend dependencies not installed (run: pnpm install)"
fi
else
fail "node_modules not found (run: pnpm install)"
fi
# ============================================================================
# SECTION 4: CONFIGURATION FILES
# ============================================================================
section "4. CONFIGURATION FILES"
# Check .env file
ENV_FILE="$HOME/.env"
if [ -f "$ENV_FILE" ]; then
pass ".env file exists: $ENV_FILE"
# Check for required variables
source scripts/load-env.sh 2>/dev/null || true
load_env_file 2>/dev/null || true
[ -n "${PROXMOX_HOST:-}" ] && [ "${PROXMOX_HOST}" != "your-proxmox-ip-or-hostname" ] && \
pass "PROXMOX_HOST configured: $PROXMOX_HOST" || \
warn "PROXMOX_HOST not configured or using placeholder"
[ -n "${PROXMOX_USER:-}" ] && [ "${PROXMOX_USER}" != "your-username" ] && \
pass "PROXMOX_USER configured: $PROXMOX_USER" || \
warn "PROXMOX_USER not configured or using placeholder"
[ -n "${PROXMOX_TOKEN_NAME:-}" ] && [ "${PROXMOX_TOKEN_NAME}" != "your-token-name" ] && \
pass "PROXMOX_TOKEN_NAME configured: $PROXMOX_TOKEN_NAME" || \
warn "PROXMOX_TOKEN_NAME not configured or using placeholder"
if [ -n "${PROXMOX_TOKEN_VALUE:-}" ] && [ "${PROXMOX_TOKEN_VALUE}" != "your-token-secret-here" ] && [ "${PROXMOX_TOKEN_VALUE}" != "your-token-secret" ]; then
pass "PROXMOX_TOKEN_VALUE configured (secret present)"
else
fail "PROXMOX_TOKEN_VALUE not configured or using placeholder"
fi
else
fail ".env file not found: $ENV_FILE"
info "Create it with: ./scripts/setup.sh"
fi
# Check Claude Desktop config
CLAUDE_CONFIG="$HOME/.config/Claude/claude_desktop_config.json"
if [ -f "$CLAUDE_CONFIG" ]; then
pass "Claude Desktop config exists: $CLAUDE_CONFIG"
# Check if MCP server is configured
if grep -q "proxmox" "$CLAUDE_CONFIG" 2>/dev/null; then
pass "MCP server configured in Claude Desktop"
else
warn "MCP server not found in Claude Desktop config"
fi
else
warn "Claude Desktop config not found: $CLAUDE_CONFIG"
info "Create it with: ./scripts/setup.sh"
fi
# Check deployment configs
if [ -d "$PROJECT_ROOT/smom-dbis-138-proxmox/config" ]; then
if [ -f "$PROJECT_ROOT/smom-dbis-138-proxmox/config/proxmox.conf" ]; then
pass "Deployment proxmox.conf exists"
else
warn "Deployment proxmox.conf not found (example exists)"
fi
if [ -f "$PROJECT_ROOT/smom-dbis-138-proxmox/config/network.conf" ]; then
pass "Deployment network.conf exists"
else
warn "Deployment network.conf not found (example exists)"
fi
fi
# ============================================================================
# SECTION 5: SCRIPTS
# ============================================================================
section "5. SCRIPTS"
REQUIRED_SCRIPTS=(
"setup.sh"
"complete-setup.sh"
"verify-setup.sh"
"load-env.sh"
"test-connection.sh"
"validate-ml110-deployment.sh"
)
for script in "${REQUIRED_SCRIPTS[@]}"; do
SCRIPT_PATH="$PROJECT_ROOT/scripts/$script"
if [ -f "$SCRIPT_PATH" ]; then
if [ -x "$SCRIPT_PATH" ]; then
pass "$script exists and is executable"
else
warn "$script exists but is not executable"
fi
else
fail "$script not found"
fi
done
# ============================================================================
# SECTION 6: PROXMOX CONNECTION (if configured)
# ============================================================================
section "6. PROXMOX CONNECTION"
if [ -f "$ENV_FILE" ]; then
source scripts/load-env.sh 2>/dev/null || true
load_env_file 2>/dev/null || true
if [ -n "${PROXMOX_HOST:-}" ] && [ -n "${PROXMOX_TOKEN_VALUE:-}" ] && \
[ "${PROXMOX_TOKEN_VALUE}" != "your-token-secret-here" ] && \
[ "${PROXMOX_TOKEN_VALUE}" != "your-token-secret" ]; then
info "Testing connection to ${PROXMOX_HOST}..."
API_RESPONSE=$(curl -k -s -w "\n%{http_code}" -m 10 \
-H "Authorization: PVEAPIToken=${PROXMOX_USER}!${PROXMOX_TOKEN_NAME}=${PROXMOX_TOKEN_VALUE}" \
"https://${PROXMOX_HOST}:${PROXMOX_PORT:-8006}/api2/json/version" 2>&1)
HTTP_CODE=$(echo "$API_RESPONSE" | tail -1)
if [ "$HTTP_CODE" = "200" ]; then
VERSION=$(echo "$API_RESPONSE" | sed '$d' | python3 -c "import sys, json; print(json.load(sys.stdin)['data']['version'])" 2>/dev/null || echo "unknown")
pass "Proxmox API connection successful (version: $VERSION)"
else
fail "Proxmox API connection failed (HTTP $HTTP_CODE)"
fi
else
warn "Cannot test Proxmox connection - credentials not fully configured"
fi
else
warn "Cannot test Proxmox connection - .env file not found"
fi
# ============================================================================
# SUMMARY
# ============================================================================
section "PREREQUISITES SUMMARY"
echo -e "${CYAN}Results:${NC}"
echo -e " ${GREEN}Passed:${NC} $PASSED"
echo -e " ${RED}Failed:${NC} $FAILED"
echo -e " ${YELLOW}Warnings:${NC} $WARNINGS"
echo ""
if [ $FAILED -eq 0 ]; then
echo -e "${GREEN}✅ All prerequisites met!${NC}"
echo ""
echo "Next steps:"
echo " 1. Run deployment validation: ./scripts/validate-ml110-deployment.sh"
echo " 2. Start MCP server: pnpm mcp:start"
exit 0
else
echo -e "${RED}❌ Some prerequisites are missing${NC}"
echo ""
echo "Please fix the failures above before proceeding."
echo ""
echo "Quick fixes:"
[ $FAILED -gt 0 ] && echo " - Run: ./scripts/complete-setup.sh"
exit 1
fi