fix: make setup.sh download both deployment types under curl|bash
The interactive deployment-type prompt read from stdin, which is the script pipe (not the terminal) when piped to bash, so it 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; DEPLOYMENT_TYPE=docker|native restricts to one. Also guard clear and drop the broken overwrite confirmation.
This commit is contained in:
parent
aa3d716f61
commit
537beed957
3 changed files with 62 additions and 74 deletions
|
|
@ -43,13 +43,13 @@ A comprehensive solution for deploying Wallarm filtering nodes on virtual machin
|
||||||
|
|
||||||
### 1. Download the Scripts
|
### 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
|
```bash
|
||||||
curl -fsSL "https://git.sechpoint.app/customer-engineering/wallarm/raw/branch/main/setup.sh" | 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
|
```bash
|
||||||
DEPLOYMENT_TYPE=native curl -fsSL "https://git.sechpoint.app/customer-engineering/wallarm/raw/branch/main/setup.sh" | bash
|
DEPLOYMENT_TYPE=native curl -fsSL "https://git.sechpoint.app/customer-engineering/wallarm/raw/branch/main/setup.sh" | bash
|
||||||
|
|
|
||||||
|
|
@ -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).
|
and this project adheres to date-based versioning (YYYY-MM.x).
|
||||||
|
|
||||||
## [2026-08.1] - 2026-08-01
|
## [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
|
### Added
|
||||||
- **Native deployment type**: Wallarm filtering node can now be deployed directly on the OS **without Docker**
|
- **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)
|
- `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
|
- `common/` – shared library
|
||||||
- **Artifact URLs** updated to the `docker/` prefix (`/docker/binaries/...`, `/docker/images/...`)
|
- **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)
|
- **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
|
- **README.md** rewritten to document both deployment types, the new structure, the unified manager, and native-specific usage
|
||||||
|
|
||||||
### Notes
|
### Notes
|
||||||
|
|
|
||||||
115
setup.sh
115
setup.sh
|
|
@ -5,12 +5,17 @@
|
||||||
# Downloads all necessary Wallarm deployment scripts from the Git repository
|
# Downloads all necessary Wallarm deployment scripts from the Git repository
|
||||||
# and makes them executable.
|
# 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
|
# 1. docker - Wallarm filtering node as a Docker container
|
||||||
# 2. native - Wallarm filtering node installed directly on the OS (no Docker)
|
# 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
|
# 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
|
set -euo pipefail
|
||||||
|
|
@ -45,10 +50,8 @@ NATIVE_SCRIPTS=(
|
||||||
|
|
||||||
# Detect download command
|
# Detect download command
|
||||||
if command -v curl >/dev/null 2>&1; then
|
if command -v curl >/dev/null 2>&1; then
|
||||||
DOWNLOAD_CMD="curl -fL -O"
|
|
||||||
DOWNLOAD_NAME="curl"
|
DOWNLOAD_NAME="curl"
|
||||||
elif command -v wget >/dev/null 2>&1; then
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
DOWNLOAD_CMD="wget -q"
|
|
||||||
DOWNLOAD_NAME="wget"
|
DOWNLOAD_NAME="wget"
|
||||||
else
|
else
|
||||||
echo -e "${RED}${BOLD}ERROR:${NC} Neither curl nor wget is installed."
|
echo -e "${RED}${BOLD}ERROR:${NC} Neither curl nor wget is installed."
|
||||||
|
|
@ -56,25 +59,6 @@ else
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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() {
|
download_file() {
|
||||||
local url="$1"
|
local url="$1"
|
||||||
local dest="$2"
|
local dest="$2"
|
||||||
|
|
@ -82,7 +66,7 @@ download_file() {
|
||||||
|
|
||||||
echo -e "${YELLOW}Downloading ${description}...${NC}"
|
echo -e "${YELLOW}Downloading ${description}...${NC}"
|
||||||
if [ "$DOWNLOAD_NAME" = "curl" ]; then
|
if [ "$DOWNLOAD_NAME" = "curl" ]; then
|
||||||
curl -fL "$url" -o "$dest"
|
curl -fsSL "$url" -o "$dest"
|
||||||
else
|
else
|
||||||
wget -q "$url" -O "$dest"
|
wget -q "$url" -O "$dest"
|
||||||
fi
|
fi
|
||||||
|
|
@ -97,8 +81,25 @@ download_file() {
|
||||||
fi
|
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
|
# Main
|
||||||
clear
|
clear 2>/dev/null || true
|
||||||
echo -e "${BLUE}${BOLD}"
|
echo -e "${BLUE}${BOLD}"
|
||||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||||
echo "║ WALLARM DEPLOYMENT SETUP SCRIPT ║"
|
echo "║ WALLARM DEPLOYMENT SETUP SCRIPT ║"
|
||||||
|
|
@ -106,59 +107,43 @@ echo "║ Downloads all necessary deployment tools ║"
|
||||||
echo "╚══════════════════════════════════════════════════════════════╝${NC}"
|
echo "╚══════════════════════════════════════════════════════════════╝${NC}"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# Select deployment type
|
# Decide which deployment type(s) to download
|
||||||
select_deployment_type
|
DEPLOY_TYPES=()
|
||||||
|
if [[ "${DEPLOYMENT_TYPE:-}" =~ ^(docker|native)$ ]]; then
|
||||||
# Determine target directories
|
DEPLOY_TYPES+=("$DEPLOYMENT_TYPE")
|
||||||
COMMON_DIR="common"
|
echo -e "${GREEN}Downloading only deployment type: $DEPLOYMENT_TYPE${NC}"
|
||||||
TARGET_DIR="$DEPLOY_TYPE"
|
else
|
||||||
echo -e "${BLUE}Target directory: ${TARGET_DIR}/${NC}"
|
DEPLOY_TYPES+=("docker" "native")
|
||||||
|
echo -e "${CYAN}Downloading BOTH deployment types (docker + native).${NC}"
|
||||||
# Check for existing scripts
|
echo -e "${YELLOW}To download only one type, re-run with: DEPLOYMENT_TYPE=docker or DEPLOYMENT_TYPE=native${NC}"
|
||||||
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
|
|
||||||
fi
|
fi
|
||||||
|
echo
|
||||||
|
|
||||||
# Select the script list for the chosen deployment type
|
# Download shared library (required by all deployment scripts)
|
||||||
case "$DEPLOY_TYPE" in
|
mkdir -p "common"
|
||||||
native) SCRIPTS=("${NATIVE_SCRIPTS[@]}") ;;
|
download_file "${GIT_BASE}common/wallarm-lib.sh" "common/wallarm-lib.sh" "shared library (common/wallarm-lib.sh)"
|
||||||
*) SCRIPTS=("${DOCKER_SCRIPTS[@]}") ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Create target directories
|
# Download the selected deployment type(s)
|
||||||
mkdir -p "$TARGET_DIR" "$COMMON_DIR"
|
for type in "${DEPLOY_TYPES[@]}"; do
|
||||||
|
download_deployment_type "$type"
|
||||||
# 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"
|
|
||||||
done
|
done
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo -e "${GREEN}${BOLD}All $DEPLOY_TYPE scripts downloaded successfully!${NC}"
|
echo -e "${GREEN}${BOLD}Setup complete - all requested scripts downloaded!${NC}"
|
||||||
echo
|
echo
|
||||||
if [ "$DEPLOY_TYPE" = "native" ]; then
|
|
||||||
echo -e "${CYAN}Next steps:${NC}"
|
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 " 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 " 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 " 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 " 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 -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
|
echo
|
||||||
echo -e "${YELLOW}Note: Some scripts require sudo. Run them with: sudo ./<script>${NC}"
|
echo -e "${YELLOW}Note: Some scripts require sudo. Run them with: sudo ./<script>${NC}"
|
||||||
echo -e "${YELLOW}Make sure you have the required information ready (see documentation).${NC}"
|
echo -e "${YELLOW}Make sure you have the required information ready (see documentation).${NC}"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue