diff --git a/docker/wallarm-ct-check.sh b/docker/wallarm-ct-check.sh index c96feb2..53ad35a 100755 --- a/docker/wallarm-ct-check.sh +++ b/docker/wallarm-ct-check.sh @@ -13,8 +13,8 @@ # Script location and shared library (colors, logging, validation, detection, connectivity) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# shellcheck source=../common/wallarm-lib.sh -source "$SCRIPT_DIR/../common/wallarm-lib.sh" +# shellcheck source=./wallarm-lib.sh +source "$SCRIPT_DIR/wallarm-lib.sh" # Strict error handling set -euo pipefail diff --git a/docker/wallarm-ct-deploy.sh b/docker/wallarm-ct-deploy.sh index ba2a0f1..9d0bf4c 100755 --- a/docker/wallarm-ct-deploy.sh +++ b/docker/wallarm-ct-deploy.sh @@ -14,8 +14,8 @@ # Script location and shared library (colors, logging, validation, detection, connectivity) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# shellcheck source=../common/wallarm-lib.sh -source "$SCRIPT_DIR/../common/wallarm-lib.sh" +# shellcheck source=./wallarm-lib.sh +source "$SCRIPT_DIR/wallarm-lib.sh" # Strict error handling set -euo pipefail diff --git a/docker/wallarm-ct-reconfigure.sh b/docker/wallarm-ct-reconfigure.sh index 0a5602e..d74b9ef 100755 --- a/docker/wallarm-ct-reconfigure.sh +++ b/docker/wallarm-ct-reconfigure.sh @@ -12,8 +12,8 @@ # Script location and shared library (colors, logging, validation) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# shellcheck source=../common/wallarm-lib.sh -source "$SCRIPT_DIR/../common/wallarm-lib.sh" +# shellcheck source=./wallarm-lib.sh +source "$SCRIPT_DIR/wallarm-lib.sh" set -euo pipefail trap early_error_handler ERR diff --git a/docker/wallarm-ct-uninstall.sh b/docker/wallarm-ct-uninstall.sh index 6845a84..9c9a383 100755 --- a/docker/wallarm-ct-uninstall.sh +++ b/docker/wallarm-ct-uninstall.sh @@ -14,8 +14,8 @@ # Script location and shared library (colors, logging, validation) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# shellcheck source=../common/wallarm-lib.sh -source "$SCRIPT_DIR/../common/wallarm-lib.sh" +# shellcheck source=./wallarm-lib.sh +source "$SCRIPT_DIR/wallarm-lib.sh" # Strict error handling set -euo pipefail diff --git a/native/wallarm-native.sh b/native/wallarm-native.sh index bd25fbf..5dcd694 100755 --- a/native/wallarm-native.sh +++ b/native/wallarm-native.sh @@ -25,8 +25,8 @@ set -euo pipefail # Script location and shared library (logging, detection, connectivity, validation) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# shellcheck source=../common/wallarm-lib.sh -source "$SCRIPT_DIR/../common/wallarm-lib.sh" +# shellcheck source=./wallarm-lib.sh +source "$SCRIPT_DIR/wallarm-lib.sh" # --- Constants --- BASE_DIR="/opt/wallarm" @@ -283,8 +283,8 @@ cmd_install() { echo "Example: node1 0.0.0.0:8081" echo "Leave name blank to finish." - declare -a NODE_NAMES - declare -a NODE_ADDRESSES + declare -a NODE_NAMES=() + declare -a NODE_ADDRESSES=() while true; do read -p "Node name (blank to stop): " name @@ -322,7 +322,7 @@ cmd_install() { echo "" log "Starting parallel installations..." - declare -a INSTALL_PIDS + declare -a INSTALL_PIDS=() for i in "${!NODE_NAMES[@]}"; do install_single_node "${NODE_NAMES[$i]}" "${NODE_ADDRESSES[$i]}" "$WALLARM_API_TOKEN" & INSTALL_PIDS+=($!) diff --git a/setup.sh b/setup.sh index 1990ede..1c5fe94 100755 --- a/setup.sh +++ b/setup.sh @@ -2,20 +2,18 @@ # ============================================================================== # Wallarm Deployment Setup Script # ============================================================================== -# Downloads all necessary Wallarm deployment scripts from the Git repository -# and makes them executable. +# Downloads Wallarm deployment scripts from the Git repository and makes them +# executable. # -# By default BOTH deployment types are downloaded, so you can choose later: +# When run interactively (terminal), asks which deployment type to download: # 1. docker - Wallarm filtering node as a Docker container # 2. native - Wallarm filtering node installed directly on the OS (no Docker) +# 3. both - All scripts (docker + native) # -# To download only one type (e.g. for automation or smaller downloads): -# DEPLOYMENT_TYPE=docker curl -fsSL ".../setup.sh" | bash -# DEPLOYMENT_TYPE=native curl -fsSL ".../setup.sh" | bash -# -# Usage: curl -fsSL "https://git.sechpoint.app/customer-engineering/wallarm/raw/branch/main/setup.sh" | bash -# NOTE: This script is non-interactive on purpose - it must work when piped to -# bash (stdin is then the script pipe, not the terminal). +# When piped (curl ... | bash), downloads BOTH by default for backward +# compatibility. Override with the DEPLOYMENT_TYPE env var: +# DEPLOYMENT_TYPE=native curl -fsSL ".../setup.sh" | bash +# DEPLOYMENT_TYPE=docker curl -fsSL ".../setup.sh" | bash # ============================================================================== set -euo pipefail @@ -87,10 +85,10 @@ download_deployment_type() { *) err "Unknown deployment type: $type"; exit 1 ;; esac - mkdir -p "$type" + mkdir -p "deploy" for script in "${scripts[@]}"; do - download_file "${GIT_BASE}${type}/${script}" "${type}/${script}" "$type/$script" + download_file "${GIT_BASE}${type}/${script}" "deploy/${script}" "deploy/${script}" done } @@ -105,41 +103,81 @@ echo # Decide which deployment type(s) to download DEPLOY_TYPES=() + +# Priority 1: explicit DEPLOYMENT_TYPE env var (non-interactive override) if [[ "${DEPLOYMENT_TYPE:-}" =~ ^(docker|native)$ ]]; then DEPLOY_TYPES+=("$DEPLOYMENT_TYPE") - echo -e "${GREEN}Downloading only deployment type: $DEPLOYMENT_TYPE${NC}" + echo -e "${GREEN}Downloading only: $DEPLOYMENT_TYPE (from DEPLOYMENT_TYPE env var)${NC}" + +# Priority 2: interactive terminal — ask the user +elif [[ -t 0 ]]; then + echo -e "${CYAN}Which deployment type do you need?${NC}" + echo -e " ${YELLOW}1${NC}) Docker only — Wallarm node as a container" + echo -e " ${YELLOW}2${NC}) Native only — Wallarm node directly on this OS (no Docker)" + echo -e " ${YELLOW}3${NC}) Both — docker + native scripts" + echo + while true; do + read -r -p "$(echo -e "${YELLOW}Enter choice [1/2/3]: ${NC}")" choice + case "$choice" in + 1) DEPLOY_TYPES+=("docker"); break ;; + 2) DEPLOY_TYPES+=("native"); break ;; + 3) DEPLOY_TYPES+=("docker" "native"); break ;; + *) echo -e "${RED}Invalid choice. Enter 1, 2, or 3.${NC}" ;; + esac + done + echo + +# Priority 3: piped (non-interactive) — default to both for backward compatibility else DEPLOY_TYPES+=("docker" "native") - echo -e "${CYAN}Downloading BOTH deployment types (docker + native).${NC}" - echo -e "${YELLOW}To download only one type, re-run with: DEPLOYMENT_TYPE=docker or DEPLOYMENT_TYPE=native${NC}" + echo -e "${CYAN}Non-interactive run: downloading BOTH deployment types.${NC}" + echo -e "${YELLOW}To download only one type, set DEPLOYMENT_TYPE=docker or DEPLOYMENT_TYPE=native${NC}" fi echo # Download shared library (required by all deployment scripts) -mkdir -p "common" -download_file "${GIT_BASE}common/wallarm-lib.sh" "common/wallarm-lib.sh" "shared library (common/wallarm-lib.sh)" +mkdir -p "deploy" +download_file "${GIT_BASE}common/wallarm-lib.sh" "deploy/wallarm-lib.sh" "shared library (deploy/wallarm-lib.sh)" # Download the selected deployment type(s) for type in "${DEPLOY_TYPES[@]}"; do download_deployment_type "$type" done +# Patch library sourcing path for flat deploy/ structure +# (needed until the source scripts in the repo are updated) +for script in deploy/*.sh; do + [[ "$script" == "deploy/wallarm-lib.sh" ]] && continue + sed -i 's|source "\$SCRIPT_DIR/\.\./common/wallarm-lib\.sh"|source "$SCRIPT_DIR/wallarm-lib.sh"|' "$script" + sed -i 's|# shellcheck source=\.\./common/wallarm-lib\.sh|# shellcheck source=./wallarm-lib.sh|' "$script" +done + echo -echo -e "${GREEN}${BOLD}Setup complete - all requested scripts downloaded!${NC}" -echo -echo -e "${CYAN}Next steps:${NC}" -echo -e " Docker deployment:" -echo -e " 1. Run the preflight check: ${YELLOW}./docker/wallarm-ct-check.sh${NC}" -echo -e " 2. Deploy a Wallarm node: ${YELLOW}./docker/wallarm-ct-deploy.sh${NC}" -echo -e " 3. Reconfigure existing node: ${YELLOW}./docker/wallarm-ct-reconfigure.sh${NC}" -echo -e " 4. Uninstall a node: ${YELLOW}./docker/wallarm-ct-uninstall.sh${NC}" -echo -echo -e " Native deployment (no Docker):" -echo -e " 1. Run the preflight check: ${YELLOW}sudo ./native/wallarm-native.sh --preflight${NC}" -echo -e " 2. Deploy Wallarm nodes: ${YELLOW}sudo ./native/wallarm-native.sh --install${NC}" -echo -e " 3. Update a node's config: ${YELLOW}sudo ./native/wallarm-native.sh --config --node NAME --address IP:PORT${NC}" -echo -e " 4. Remove a node: ${YELLOW}sudo ./native/wallarm-native.sh --remove --node NAME${NC}" -echo -e " 5. Show node status: ${YELLOW}./native/wallarm-native.sh --status${NC}" +echo -e "${GREEN}${BOLD}Setup complete - requested scripts downloaded!${NC}" echo + +# Show next steps only for the deployment types that were downloaded +for deploy_type in "${DEPLOY_TYPES[@]}"; do + case "$deploy_type" in + docker) + echo -e "${CYAN}Docker deployment next steps:${NC}" + echo -e " 1. Run the preflight check: ${YELLOW}./deploy/wallarm-ct-check.sh${NC}" + echo -e " 2. Deploy a Wallarm node: ${YELLOW}./deploy/wallarm-ct-deploy.sh${NC}" + echo -e " 3. Reconfigure existing node: ${YELLOW}./deploy/wallarm-ct-reconfigure.sh${NC}" + echo -e " 4. Uninstall a node: ${YELLOW}./deploy/wallarm-ct-uninstall.sh${NC}" + echo + ;; + native) + echo -e "${CYAN}Native deployment next steps (no Docker):${NC}" + echo -e " 1. Run the preflight check: ${YELLOW}sudo ./deploy/wallarm-native.sh --preflight${NC}" + echo -e " 2. Deploy Wallarm nodes: ${YELLOW}sudo ./deploy/wallarm-native.sh --install${NC}" + echo -e " 3. Update a node's config: ${YELLOW}sudo ./deploy/wallarm-native.sh --config --node NAME --address IP:PORT${NC}" + echo -e " 4. Remove a node: ${YELLOW}sudo ./deploy/wallarm-native.sh --remove --node NAME${NC}" + echo -e " 5. Show node status: ${YELLOW}./deploy/wallarm-native.sh --status${NC}" + echo + ;; + esac +done + echo -e "${YELLOW}Note: Some scripts require sudo. Run them with: sudo ./