- Binary + source installed to /opt/wallarm/ - Clients can rebuild: cd /opt/wallarm/source && go build ./cmd/wallarm/ - Source stays at repo root, not in a subdirectory
100 lines
3.8 KiB
Bash
100 lines
3.8 KiB
Bash
#!/bin/bash
|
|
# ==============================================================================
|
|
# Wallarm Deployment — Single Binary Bootstrap
|
|
# ==============================================================================
|
|
# Clones the repository, builds the wallarm binary, and installs it to
|
|
# /opt/wallarm/. One command to get started:
|
|
#
|
|
# curl -fsSL ".../deploy.sh" | bash
|
|
# sudo /opt/wallarm/wallarm
|
|
#
|
|
# All deployments live under /opt/wallarm/ — binary, config, instances, state.
|
|
# ==============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
BOLD='\033[1m'
|
|
GREEN='\033[0;32m'
|
|
CYAN='\033[0;36m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
REPO_URL="https://git.sechpoint.app/customer-engineering/wallarm.git"
|
|
WALLARM_DIR="/opt/wallarm"
|
|
BUILD_DIR="/tmp/wallarm-build-$$"
|
|
|
|
cleanup() { rm -rf "$BUILD_DIR"; }
|
|
trap cleanup EXIT
|
|
|
|
echo -e "${BOLD}Wallarm Deployment Bootstrap${NC}"
|
|
echo
|
|
|
|
# ── Ensure prerequisites ─────────────────────────────────────────────
|
|
install_go() {
|
|
echo -e "${YELLOW}Installing Go...${NC}"
|
|
if command -v apt-get >/dev/null 2>&1; then
|
|
apt-get update -qq && apt-get install -y -qq golang-go
|
|
elif command -v yum >/dev/null 2>&1; then
|
|
yum install -y golang
|
|
elif command -v dnf >/dev/null 2>&1; then
|
|
dnf install -y golang
|
|
elif command -v apk >/dev/null 2>&1; then
|
|
apk add --no-cache go
|
|
else
|
|
echo -e "${RED}Cannot install Go automatically. Install Go 1.21+ manually.${NC}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Ensure git
|
|
if ! command -v git >/dev/null 2>&1; then
|
|
echo -e "${YELLOW}Installing git...${NC}"
|
|
apt-get update -qq 2>/dev/null && apt-get install -y -qq git 2>/dev/null || true
|
|
fi
|
|
|
|
# Ensure Go
|
|
if ! command -v go >/dev/null 2>&1; then
|
|
install_go
|
|
fi
|
|
|
|
echo -e "${GREEN} git: $(git --version | cut -d' ' -f3)${NC}"
|
|
echo -e "${GREEN} go: $(go version | cut -d' ' -f3)${NC}"
|
|
|
|
# ── Clone and build ───────────────────────────────────────────────────
|
|
echo
|
|
echo -e "${YELLOW}Cloning repository...${NC}"
|
|
git clone --depth 1 "$REPO_URL" "$BUILD_DIR" 2>/dev/null
|
|
|
|
echo -e "${YELLOW}Building wallarm (this takes ~30 seconds)...${NC}"
|
|
cd "$BUILD_DIR"
|
|
go build -ldflags="-s -w -X main.version=$(git describe --tags --always 2>/dev/null || echo 'dev')" -o wallarm ./cmd/wallarm/
|
|
|
|
# Optional: compress with UPX if available
|
|
if command -v upx >/dev/null 2>&1; then
|
|
upx --best --lzma wallarm -o wallarm.tmp 2>/dev/null && mv wallarm.tmp wallarm || true
|
|
fi
|
|
|
|
# ── Install ───────────────────────────────────────────────────────────
|
|
mkdir -p "$WALLARM_DIR"
|
|
cp "$BUILD_DIR/wallarm" "$WALLARM_DIR/wallarm"
|
|
chmod +x "$WALLARM_DIR/wallarm"
|
|
|
|
# Copy source for local rebuilds
|
|
rm -rf "$WALLARM_DIR/source"
|
|
cp -r "$BUILD_DIR/cmd" "$BUILD_DIR/internal" "$BUILD_DIR/go.mod" "$BUILD_DIR/go.sum" "$WALLARM_DIR/source/" 2>/dev/null || true
|
|
mkdir -p "$WALLARM_DIR/source/cmd" "$WALLARM_DIR/source/internal" 2>/dev/null || true
|
|
cp -r "$BUILD_DIR/cmd" "$BUILD_DIR/internal" "$WALLARM_DIR/source/" 2>/dev/null || true
|
|
cp "$BUILD_DIR/go.mod" "$BUILD_DIR/go.sum" "$WALLARM_DIR/source/" 2>/dev/null || true
|
|
|
|
echo
|
|
echo -e "${GREEN}${BOLD}Ready!${NC}"
|
|
echo
|
|
echo -e " ${CYAN}sudo ${WALLARM_DIR}/wallarm${NC} — Start the TUI"
|
|
echo -e " ${CYAN}${WALLARM_DIR}/wallarm --help${NC} — Show all commands"
|
|
echo -e " ${CYAN}${WALLARM_DIR}/wallarm --tunnel${NC} — Start remote tunnel"
|
|
echo
|
|
echo -e " ${CYAN}${WALLARM_DIR}/source/${NC} — Source for local rebuilds"
|
|
echo -e " ${CYAN}cd ${WALLARM_DIR}/source && go build ./cmd/wallarm/${NC}"
|
|
echo
|
|
ls -lh "$WALLARM_DIR/wallarm"
|