156 lines
5.5 KiB
Plaintext
156 lines
5.5 KiB
Plaintext
![]() |
#!/bin/bash
|
||
|
# Info: Polkadot Zombienet preparation script
|
||
|
# Author: Provisioning System
|
||
|
# Release: 1.0
|
||
|
|
||
|
echo "Preparing Polkadot Zombienet installation..."
|
||
|
|
||
|
# Load environment variables
|
||
|
[ -r "env-polkadot-zombienet" ] && . ./env-polkadot-zombienet
|
||
|
|
||
|
# Check if required tools are available
|
||
|
command -v curl >/dev/null 2>&1 || { echo "curl is required but not installed." >&2; exit 1; }
|
||
|
|
||
|
# Validate configuration
|
||
|
if [ -z "$ZOMBIENET_VERSION" ]; then
|
||
|
echo "ZOMBIENET_VERSION must be set" >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Validate provider
|
||
|
case "${ZOMBIENET_PROVIDER:-native}" in
|
||
|
"native"|"kubernetes"|"podman")
|
||
|
echo "Provider: ${ZOMBIENET_PROVIDER}"
|
||
|
;;
|
||
|
*)
|
||
|
echo "Invalid provider: ${ZOMBIENET_PROVIDER}" >&2
|
||
|
echo "Supported providers: native, kubernetes, podman" >&2
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
# Check provider-specific requirements
|
||
|
case "${ZOMBIENET_PROVIDER:-native}" in
|
||
|
"kubernetes")
|
||
|
if ! command -v kubectl >/dev/null 2>&1; then
|
||
|
echo "kubectl is required for Kubernetes provider but not installed." >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Check if kubectl can connect to cluster
|
||
|
if ! kubectl cluster-info >/dev/null 2>&1; then
|
||
|
echo "Warning: kubectl cannot connect to Kubernetes cluster"
|
||
|
echo "Make sure you have a valid kubeconfig and cluster access"
|
||
|
else
|
||
|
echo "✅ Kubernetes cluster access verified"
|
||
|
fi
|
||
|
;;
|
||
|
"podman")
|
||
|
if ! command -v podman >/dev/null 2>&1; then
|
||
|
echo "podman is required for Podman provider but not installed." >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Check podman version (Zombienet supports v2 or older)
|
||
|
PODMAN_VERSION=$(podman --version | awk '{print $3}' | cut -d. -f1)
|
||
|
if [ "$PODMAN_VERSION" -gt 2 ]; then
|
||
|
echo "Warning: Zombienet currently supports Podman v2 or older"
|
||
|
echo "You have Podman v$PODMAN_VERSION - you may need to apply patches"
|
||
|
fi
|
||
|
|
||
|
# Test podman functionality
|
||
|
if ! podman info >/dev/null 2>&1; then
|
||
|
echo "Warning: podman info failed - check podman configuration"
|
||
|
else
|
||
|
echo "✅ Podman is working"
|
||
|
fi
|
||
|
;;
|
||
|
"native")
|
||
|
echo "Native provider selected - binaries will be downloaded automatically"
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
# Check available disk space
|
||
|
AVAILABLE_SPACE=$(df "${ZOMBIENET_WORK_PATH:-/var/lib/zombienet}" 2>/dev/null | awk 'NR==2 {print $4}' || echo "0")
|
||
|
REQUIRED_SPACE=5000000 # 5GB for binaries and network data
|
||
|
if [ "$AVAILABLE_SPACE" -ne "0" ] && [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then
|
||
|
echo "Warning: Low disk space for Zombienet"
|
||
|
echo "Available: $(($AVAILABLE_SPACE / 1024))MB, Recommended: $(($REQUIRED_SPACE / 1024))MB"
|
||
|
fi
|
||
|
|
||
|
# Check memory requirements
|
||
|
if command -v free >/dev/null 2>&1; then
|
||
|
FREE_MEMORY=$(free -m | awk '/^Mem:/{print $7}')
|
||
|
MIN_MEMORY=4096 # Zombienet networks can be memory intensive
|
||
|
|
||
|
if [ "$FREE_MEMORY" -lt "$MIN_MEMORY" ]; then
|
||
|
echo "Warning: Low memory for Zombienet networks"
|
||
|
echo "Available: ${FREE_MEMORY}MB, Recommended: ${MIN_MEMORY}MB"
|
||
|
echo "Consider starting with simple networks or reducing node count"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Validate relay chain configuration
|
||
|
RELAYCHAIN_NODES=${ZOMBIENET_RELAYCHAIN_NODES:-2}
|
||
|
if [ "$RELAYCHAIN_NODES" -lt 2 ]; then
|
||
|
echo "Error: At least 2 relay chain nodes are required" >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Check for common port conflicts
|
||
|
COMMON_PORTS=(30333 9944 9933 9615)
|
||
|
for port in "${COMMON_PORTS[@]}"; do
|
||
|
if command -v netstat >/dev/null 2>&1; then
|
||
|
if netstat -tuln | grep -q ":$port "; then
|
||
|
echo "Warning: Port $port appears to be in use (common Polkadot port)"
|
||
|
fi
|
||
|
elif command -v ss >/dev/null 2>&1; then
|
||
|
if ss -tuln | grep -q ":$port "; then
|
||
|
echo "Warning: Port $port appears to be in use (common Polkadot port)"
|
||
|
fi
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Check Docker/Podman for image availability (if not native)
|
||
|
if [ "${ZOMBIENET_PROVIDER:-native}" != "native" ]; then
|
||
|
if [ "${ZOMBIENET_PROVIDER}" = "podman" ] && command -v podman >/dev/null 2>&1; then
|
||
|
echo "Checking for required container images..."
|
||
|
if ! podman image exists parity/polkadot:latest >/dev/null 2>&1; then
|
||
|
echo "Info: parity/polkadot:latest image not found locally - will be pulled during network spawn"
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Validate timeout settings
|
||
|
TIMEOUT=${ZOMBIENET_TIMEOUT:-1000}
|
||
|
if [ "$TIMEOUT" -lt 100 ]; then
|
||
|
echo "Warning: Timeout seems very low ($TIMEOUT seconds)"
|
||
|
echo "Network startup may fail with insufficient timeout"
|
||
|
fi
|
||
|
|
||
|
# Check for jq (useful for network info parsing)
|
||
|
if ! command -v jq >/dev/null 2>&1; then
|
||
|
echo "Info: jq not found - JSON network info parsing will be limited"
|
||
|
fi
|
||
|
|
||
|
echo "Preparation completed successfully."
|
||
|
echo ""
|
||
|
echo "Zombienet configuration:"
|
||
|
echo "- Version: ${ZOMBIENET_VERSION}"
|
||
|
echo "- Provider: ${ZOMBIENET_PROVIDER:-native}"
|
||
|
echo "- Relay chain nodes: ${ZOMBIENET_RELAYCHAIN_NODES:-2}"
|
||
|
echo "- Parachains: ${ZOMBIENET_PARACHAINS_COUNT:-0}"
|
||
|
echo "- Timeout: ${ZOMBIENET_TIMEOUT:-1000}s"
|
||
|
echo "- Work path: ${ZOMBIENET_WORK_PATH:-/var/lib/zombienet}"
|
||
|
|
||
|
case "${ZOMBIENET_PROVIDER:-native}" in
|
||
|
"kubernetes")
|
||
|
echo "- Kubernetes namespace: ${ZOMBIENET_K8S_NAMESPACE:-zombienet}"
|
||
|
;;
|
||
|
"podman")
|
||
|
echo "- Podman monitoring: ${ZOMBIENET_PODMAN_MONITORING:-true}"
|
||
|
;;
|
||
|
"native")
|
||
|
echo "- Binaries path: ${ZOMBIENET_BINARIES_PATH:-/var/lib/zombienet/binaries}"
|
||
|
;;
|
||
|
esac
|