#!/bin/bash # ============================================================================== # Wallarm Deployment Bootstrap # ============================================================================== # Installs Python 3.12 via pyenv (cross-distro), then runs deploy.py. # curl -fsSL ".../setup.sh" | bash # sudo /opt/fw/deploy.py # ============================================================================== set -euo pipefail BOLD='\033[1m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m' REPO="https://git.sechpoint.app/customer-engineering/wallarm/raw/branch/main/python" WALLARM_DIR="/opt/fw" APP_DIR="${WALLARM_DIR}/app" echo -e "${BOLD}Wallarm Bootstrap${NC}" # ── Install curl/git if missing ─────────────────────────────────────── if ! command -v curl >/dev/null 2>&1 && ! command -v wget >/dev/null 2>&1; then apt-get update -qq 2>/dev/null && apt-get install -y -qq curl 2>/dev/null || true fi # ── Ensure Python 3.10+ is available ───────────────────────────────── PYTHON_BIN="" if command -v python3 >/dev/null 2>&1 && python3 -c "import sys; exit(0 if sys.version_info >= (3,10) else 1)" 2>/dev/null; then PYTHON_BIN="python3" elif [ -f "$HOME/.pyenv/versions/3.12.0/bin/python3" ]; then PYTHON_BIN="$HOME/.pyenv/versions/3.12.0/bin/python3" else echo -e "${YELLOW}Installing Python 3...${NC}" # Try distro package first (fast) if command -v apt-get >/dev/null 2>&1; then apt-get update -qq && apt-get install -y -qq python3 2>/dev/null elif command -v yum >/dev/null 2>&1; then yum install -y -q python3 2>/dev/null elif command -v dnf >/dev/null 2>&1; then dnf install -y -q python3 2>/dev/null elif command -v apk >/dev/null 2>&1; then apk add --no-cache python3 2>/dev/null fi if command -v python3 >/dev/null 2>&1; then PYTHON_BIN="python3" else # Last resort: pyenv (slow but works anywhere) echo -e "${YELLOW}Building Python via pyenv (3-5 min)...${NC}" apt-get install -y -qq make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev libffi-dev liblzma-dev 2>/dev/null || true curl -fsSL https://pyenv.run | bash 2>/dev/null export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" 2>/dev/null pyenv install 3.12.0 -s 2>/dev/null pyenv global 3.12.0 PYTHON_BIN="$HOME/.pyenv/versions/3.12.0/bin/python3" fi fi echo -e "${GREEN}Python: $($PYTHON_BIN --version)${NC}" # ── Download deploy.py + wrapper ───────────────────────────────────── mkdir -p "$APP_DIR" if command -v curl >/dev/null 2>&1; then curl -fsSL "${REPO}/deploy.py" -o "${APP_DIR}/main.py" curl -fsSL "https://git.sechpoint.app/customer-engineering/wallarm/raw/branch/main/deploy.sh" -o "${WALLARM_DIR}/deploy.sh" else wget -q "${REPO}/deploy.py" -O "${APP_DIR}/main.py" wget -q "https://git.sechpoint.app/customer-engineering/wallarm/raw/branch/main/deploy.sh" -O "${WALLARM_DIR}/deploy.sh" fi chmod +x "${APP_DIR}/main.py" "${WALLARM_DIR}/deploy.sh" # ── Install Docker (for container-based deployment) ────────────────── if ! command -v docker >/dev/null 2>&1; then echo -e "${YELLOW}Installing Docker...${NC}" # Check for offline Docker binary first if [ -f "${WALLARM_DIR}/offline/docker-29.2.1.tgz" ]; then echo -e "${YELLOW} Using offline Docker binary...${NC}" tar -xzf "${WALLARM_DIR}/offline/docker-29.2.1.tgz" -C /usr/local/bin/ dockerd & sleep 2 elif command -v apt-get >/dev/null 2>&1; then apt-get install -y -qq docker.io 2>/dev/null elif command -v yum >/dev/null 2>&1; then yum install -y -q docker 2>/dev/null elif command -v dnf >/dev/null 2>&1; then dnf install -y -q docker 2>/dev/null fi systemctl enable docker 2>/dev/null || true systemctl start docker 2>/dev/null || true fi # ── Pre-cache Wallarm Docker image if offline file exists ───────────── if [ -f "${WALLARM_DIR}/offline/wallarm-node-6.13.0.tar" ]; then echo -e "${YELLOW}Loading offline Wallarm image...${NC}" docker load -i "${WALLARM_DIR}/offline/wallarm-node-6.13.0.tar" 2>/dev/null || true fi echo echo -e "${GREEN}${BOLD}Ready!${NC}" echo -e " ${GREEN}sudo /opt/fw/deploy.sh${NC}"