feat(01-01): add environment check script (check-env.sh)
- Verifies Docker Engine >= 24.0, Compose V2, network utilities - Reports system resources (RAM, CPU cores) with warnings if low - Color-coded output (green pass, red fail, yellow warn) - Exit code 0 on all checks pass, 1 on failures - Idempotent - can be run multiple times safely Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
165
scripts/check-env.sh
Executable file
165
scripts/check-env.sh
Executable file
@@ -0,0 +1,165 @@
|
||||
#!/bin/bash
|
||||
# Laboratori Cloud - Environment Check Script
|
||||
# Part of: "Corso Soluzioni Cloud"
|
||||
#
|
||||
# Description: Verifies Docker Engine >= 24.0, Compose V2, network utilities, and system resources
|
||||
# Usage: ./scripts/check-env.sh
|
||||
|
||||
# Exit on error, but handle command failures gracefully
|
||||
|
||||
# Color codes for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Counters for summary
|
||||
PASS_COUNT=0
|
||||
FAIL_COUNT=0
|
||||
|
||||
# Function to print pass message
|
||||
print_pass() {
|
||||
echo -e "${GREEN}[PASS]${NC} $1"
|
||||
((PASS_COUNT++))
|
||||
}
|
||||
|
||||
# Function to print fail message
|
||||
print_fail() {
|
||||
echo -e "${RED}[FAIL]${NC} $1"
|
||||
((FAIL_COUNT++))
|
||||
}
|
||||
|
||||
# Function to print warn message
|
||||
print_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
# Function to print info message
|
||||
print_info() {
|
||||
echo "[INFO] $1"
|
||||
}
|
||||
|
||||
echo "=========================================="
|
||||
echo "Laboratori Cloud - Environment Check"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# 1. Docker Engine version check
|
||||
print_info "Checking Docker Engine version..."
|
||||
if command -v docker &> /dev/null; then
|
||||
DOCKER_VERSION=$(docker --version | grep -oP '\d+\.\d+\.\d+' | head -1)
|
||||
DOCKER_MAJOR=$(echo "$DOCKER_VERSION" | cut -d. -f1)
|
||||
|
||||
print_info "Found Docker Engine version: $DOCKER_VERSION"
|
||||
|
||||
if [ "$DOCKER_MAJOR" -ge 24 ]; then
|
||||
print_pass "Docker Engine >= 24.0 (found $DOCKER_VERSION)"
|
||||
else
|
||||
print_fail "Docker Engine >= 24.0 required. Found: $DOCKER_VERSION"
|
||||
fi
|
||||
else
|
||||
print_fail "Docker Engine not found. Please install Docker >= 24.0"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 2. Docker Compose V2 check
|
||||
print_info "Checking Docker Compose V2..."
|
||||
if docker compose version &> /dev/null; then
|
||||
COMPOSE_VERSION=$(docker compose version | grep -oP 'Docker Compose version v?\K[\d.]+' | head -1)
|
||||
print_info "Found Docker Compose V2 version: $COMPOSE_VERSION"
|
||||
print_pass "Docker Compose V2 is available (use 'docker compose' not 'docker-compose')"
|
||||
elif command -v docker-compose &> /dev/null; then
|
||||
print_fail "Docker Compose V2 required. Found legacy 'docker-compose'. Please upgrade to Docker Compose V2"
|
||||
else
|
||||
print_fail "Docker Compose V2 required. Use 'docker compose' not 'docker-compose'"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 3. Network utilities check
|
||||
print_info "Checking network utilities..."
|
||||
MISSING_UTILS=()
|
||||
|
||||
# Check for netcat/nc
|
||||
if command -v nc &> /dev/null; then
|
||||
print_pass "netcat (nc) is available"
|
||||
elif command -v netcat &> /dev/null; then
|
||||
print_pass "netcat is available"
|
||||
else
|
||||
MISSING_UTILS+=("netcat/nc")
|
||||
print_fail "netcat (or nc) is required"
|
||||
fi
|
||||
|
||||
# Check for curl
|
||||
if command -v curl &> /dev/null; then
|
||||
print_pass "curl is available"
|
||||
else
|
||||
MISSING_UTILS+=("curl")
|
||||
print_fail "curl is required"
|
||||
fi
|
||||
|
||||
# Check for ip (iproute2)
|
||||
if command -v ip &> /dev/null; then
|
||||
print_pass "ip (iproute2) is available"
|
||||
else
|
||||
MISSING_UTILS+=("ip (iproute2)")
|
||||
print_fail "ip (iproute2) is required"
|
||||
fi
|
||||
|
||||
if [ ${#MISSING_UTILS[@]} -gt 0 ]; then
|
||||
print_fail "Missing network utilities: ${MISSING_UTILS[*]}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 4. System resources check
|
||||
print_info "Checking system resources..."
|
||||
|
||||
# Check RAM
|
||||
if [ -f /proc/meminfo ]; then
|
||||
TOTAL_MEM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
|
||||
TOTAL_MEM_GB=$((TOTAL_MEM_KB / 1024 / 1024))
|
||||
print_info "Total RAM: ${TOTAL_MEM_GB}GB"
|
||||
|
||||
if [ "$TOTAL_MEM_GB" -ge 16 ]; then
|
||||
print_pass "System has ${TOTAL_MEM_GB}GB RAM (recommended: 16GB)"
|
||||
elif [ "$TOTAL_MEM_GB" -ge 8 ]; then
|
||||
print_warn "System has ${TOTAL_MEM_GB}GB RAM (recommended: 16GB for all labs)"
|
||||
else
|
||||
print_fail "System has ${TOTAL_MEM_GB}GB RAM (minimum: 8GB, recommended: 16GB)"
|
||||
fi
|
||||
elif command -v free &> /dev/null; then
|
||||
TOTAL_MEM=$(free -h | awk '/^Mem:/ {print $2}')
|
||||
print_info "Total RAM: $TOTAL_MEM"
|
||||
print_warn "Could not determine exact RAM value. Please verify you have at least 8GB"
|
||||
else
|
||||
print_warn "Could not determine system RAM. Please verify manually"
|
||||
fi
|
||||
|
||||
# Check CPU cores
|
||||
if command -v nproc &> /dev/null; then
|
||||
CPU_CORES=$(nproc)
|
||||
print_info "CPU cores: $CPU_CORES"
|
||||
|
||||
if [ "$CPU_CORES" -ge 4 ]; then
|
||||
print_pass "System has $CPU_CORES CPU cores"
|
||||
else
|
||||
print_warn "System has $CPU_CORES CPU cores (recommended: 4+ for best performance)"
|
||||
fi
|
||||
else
|
||||
print_warn "Could not determine CPU count"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Summary
|
||||
echo "=========================================="
|
||||
echo "Summary: $PASS_COUNT passed, $FAIL_COUNT failed"
|
||||
echo "=========================================="
|
||||
|
||||
if [ "$FAIL_COUNT" -gt 0 ]; then
|
||||
echo ""
|
||||
print_fail "Environment check failed. Please fix the issues above before starting labs."
|
||||
exit 1
|
||||
else
|
||||
echo ""
|
||||
print_pass "All environment checks passed! You're ready to start the labs."
|
||||
exit 0
|
||||
fi
|
||||
Reference in New Issue
Block a user