diff --git a/README.md b/README.md index 578eff7..323d5e0 100644 --- a/README.md +++ b/README.md @@ -43,13 +43,13 @@ A comprehensive solution for deploying Wallarm filtering nodes on virtual machin ### 1. Download the Scripts -Use the wrapper script to download all necessary tools. You will be asked to select the deployment type (`docker` or `native`): +Use the wrapper script to download all necessary tools. By default it downloads **both** deployment types (`docker` and `native`), so you can choose later: ```bash curl -fsSL "https://git.sechpoint.app/customer-engineering/wallarm/raw/branch/main/setup.sh" | bash ``` -To select non-interactively (e.g. for automation): +To download only one type (e.g. for automation): ```bash DEPLOYMENT_TYPE=native curl -fsSL "https://git.sechpoint.app/customer-engineering/wallarm/raw/branch/main/setup.sh" | bash diff --git a/changelog.md b/changelog.md index b34b1fb..d769dea 100644 --- a/changelog.md +++ b/changelog.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to date-based versioning (YYYY-MM.x). ## [2026-08.1] - 2026-08-01 +### Fixed +- **setup.sh interactive prompt broken under `curl ... | bash`**: the deployment-type prompt and overwrite confirmation read from stdin, which is the script pipe (not the terminal) when piped to bash — the prompt was silently skipped and only Docker scripts were downloaded. setup.sh is now **non-interactive by default and downloads BOTH deployment types** (`docker/` + `native/`), so the native option is always available. Use `DEPLOYMENT_TYPE=docker|native` to download only one type. + ### Added - **Native deployment type**: Wallarm filtering node can now be deployed directly on the OS **without Docker** - `native/wallarm-ct-check.sh` – Preflight validation for native deployment (no Docker artifact checks) @@ -31,7 +34,7 @@ and this project adheres to date-based versioning (YYYY-MM.x). - `common/` – shared library - **Artifact URLs** updated to the `docker/` prefix (`/docker/binaries/...`, `/docker/images/...`) - **Docker scripts** refactored to source `common/wallarm-lib.sh` (removed duplicated helper functions; behavior preserved) -- **setup.sh** now prompts for a deployment type (`docker` or `native`), downloads the matching scripts into `docker/` or `native/` (native now includes `wallarm-native.sh`); supports `DEPLOYMENT_TYPE=native` for non-interactive use +- **setup.sh** downloads the shared library and scripts per deployment type into `docker/`/`native/` (native includes `wallarm-native.sh`); supports `DEPLOYMENT_TYPE=docker|native` to download only one type - **README.md** rewritten to document both deployment types, the new structure, the unified manager, and native-specific usage ### Notes diff --git a/setup.sh b/setup.sh index 5694397..0e0e0c2 100755 --- a/setup.sh +++ b/setup.sh @@ -5,12 +5,17 @@ # Downloads all necessary Wallarm deployment scripts from the Git repository # and makes them executable. # -# The repository supports two deployment types: +# By default BOTH deployment types are downloaded, so you can choose later: # 1. docker - Wallarm filtering node as a Docker container # 2. native - Wallarm filtering node installed directly on the OS (no Docker) # +# 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 -# DEPLOYMENT_TYPE=native curl -fsSL ".../setup.sh" | bash (non-interactive) +# NOTE: This script is non-interactive on purpose - it must work when piped to +# bash (stdin is then the script pipe, not the terminal). # ============================================================================== set -euo pipefail @@ -45,10 +50,8 @@ NATIVE_SCRIPTS=( # Detect download command if command -v curl >/dev/null 2>&1; then - DOWNLOAD_CMD="curl -fL -O" DOWNLOAD_NAME="curl" elif command -v wget >/dev/null 2>&1; then - DOWNLOAD_CMD="wget -q" DOWNLOAD_NAME="wget" else echo -e "${RED}${BOLD}ERROR:${NC} Neither curl nor wget is installed." @@ -56,25 +59,6 @@ else exit 1 fi -# Select the deployment type (interactive or via DEPLOYMENT_TYPE env var) -select_deployment_type() { - if [[ "${DEPLOYMENT_TYPE:-}" =~ ^(docker|native)$ ]]; then - DEPLOY_TYPE="$DEPLOYMENT_TYPE" - echo -e "${GREEN}Deployment type: $DEPLOY_TYPE${NC}" - return 0 - fi - - echo -e "${CYAN}${BOLD}Select the deployment type:${NC}" - echo -e " 1. ${YELLOW}docker${NC} - Wallarm filtering node as a Docker container (LXC-optimized)" - echo -e " 2. ${YELLOW}native${NC} - Wallarm filtering node installed directly on the OS (no Docker)" - read -r -p "$(echo -e "${YELLOW}Enter choice [1/2] (default: docker): ${NC}")" choice - case "${choice:-1}" in - 1|docker) DEPLOY_TYPE="docker" ;; - 2|native) DEPLOY_TYPE="native" ;; - *) DEPLOY_TYPE="docker" ;; - esac -} - download_file() { local url="$1" local dest="$2" @@ -82,7 +66,7 @@ download_file() { echo -e "${YELLOW}Downloading ${description}...${NC}" if [ "$DOWNLOAD_NAME" = "curl" ]; then - curl -fL "$url" -o "$dest" + curl -fsSL "$url" -o "$dest" else wget -q "$url" -O "$dest" fi @@ -97,8 +81,25 @@ download_file() { fi } +download_deployment_type() { + local type="$1" + local scripts + + case "$type" in + native) scripts=("${NATIVE_SCRIPTS[@]}") ;; + docker) scripts=("${DOCKER_SCRIPTS[@]}") ;; + *) err "Unknown deployment type: $type"; exit 1 ;; + esac + + mkdir -p "$type" + + for script in "${scripts[@]}"; do + download_file "${GIT_BASE}${type}/${script}" "${type}/${script}" "$type/$script" + done +} + # Main -clear +clear 2>/dev/null || true echo -e "${BLUE}${BOLD}" echo "╔══════════════════════════════════════════════════════════════╗" echo "║ WALLARM DEPLOYMENT SETUP SCRIPT ║" @@ -106,59 +107,43 @@ echo "║ Downloads all necessary deployment tools ║" echo "╚══════════════════════════════════════════════════════════════╝${NC}" echo -# Select deployment type -select_deployment_type - -# Determine target directories -COMMON_DIR="common" -TARGET_DIR="$DEPLOY_TYPE" -echo -e "${BLUE}Target directory: ${TARGET_DIR}/${NC}" - -# Check for existing scripts -if ls "$TARGET_DIR"/wallarm-ct-*.sh 2>/dev/null | grep -q .; then - echo -e "${YELLOW}Existing $DEPLOY_TYPE Wallarm scripts found.${NC}" - echo -e "${YELLOW}Do you want to re-download all? (y/N)${NC}" - read -r answer - if [[ ! "$answer" =~ ^[Yy]$ ]]; then - echo -e "${BLUE}Exiting without changes.${NC}" - exit 0 - fi +# Decide which deployment type(s) to download +DEPLOY_TYPES=() +if [[ "${DEPLOYMENT_TYPE:-}" =~ ^(docker|native)$ ]]; then + DEPLOY_TYPES+=("$DEPLOYMENT_TYPE") + echo -e "${GREEN}Downloading only deployment type: $DEPLOYMENT_TYPE${NC}" +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}" fi +echo -# Select the script list for the chosen deployment type -case "$DEPLOY_TYPE" in - native) SCRIPTS=("${NATIVE_SCRIPTS[@]}") ;; - *) SCRIPTS=("${DOCKER_SCRIPTS[@]}") ;; -esac +# 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)" -# Create target directories -mkdir -p "$TARGET_DIR" "$COMMON_DIR" - -# Download shared library -download_file "${GIT_BASE}common/wallarm-lib.sh" "${COMMON_DIR}/wallarm-lib.sh" "shared library (${COMMON_DIR}/wallarm-lib.sh)" - -# Download the deployment type scripts -for script in "${SCRIPTS[@]}"; do - download_file "${GIT_BASE}${TARGET_DIR}/${script}" "${TARGET_DIR}/${script}" "$DEPLOY_TYPE/$script" +# Download the selected deployment type(s) +for type in "${DEPLOY_TYPES[@]}"; do + download_deployment_type "$type" done echo -echo -e "${GREEN}${BOLD}All $DEPLOY_TYPE scripts downloaded successfully!${NC}" +echo -e "${GREEN}${BOLD}Setup complete - all requested scripts downloaded!${NC}" echo -if [ "$DEPLOY_TYPE" = "native" ]; then - echo -e "${CYAN}Next steps:${NC}" - echo -e " 1. Run the preflight check: ${YELLOW}./native/wallarm-ct-check.sh${NC}" - echo -e " 2. Deploy a Wallarm node: ${YELLOW}./native/wallarm-ct-deploy.sh${NC}" - echo -e " 3. Unified node manager: ${YELLOW}./native/wallarm-native.sh --preflight${NC} (then --install)" - echo -e " 4. Reconfigure existing node: ${YELLOW}./native/wallarm-ct-reconfigure.sh${NC}" - echo -e " 5. Uninstall a node: ${YELLOW}./native/wallarm-ct-uninstall.sh${NC}" -else - echo -e "${CYAN}Next steps:${NC}" - 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}" -fi +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}./native/wallarm-ct-check.sh${NC}" +echo -e " 2. Deploy a Wallarm node: ${YELLOW}./native/wallarm-ct-deploy.sh${NC}" +echo -e " 3. Unified node manager: ${YELLOW}./native/wallarm-native.sh --preflight${NC} (then --install)" +echo -e " 4. Reconfigure existing node: ${YELLOW}./native/wallarm-ct-reconfigure.sh${NC}" +echo -e " 5. Uninstall a node: ${YELLOW}./native/wallarm-ct-uninstall.sh${NC}" echo echo -e "${YELLOW}Note: Some scripts require sudo. Run them with: sudo ./