mirror of
https://github.com/activecm/rita
synced 2026-06-08 13:02:45 +00:00
309171c9aa
* simplified installer, removed ansible and remote installs, updated ci * Update ci.yml
143 lines
4.4 KiB
Bash
Executable File
143 lines
4.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# creates a dev installer with locally built Docker images
|
|
|
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
RITA_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
# load helper functions
|
|
HELPER_FILE="$SCRIPT_DIR/helper.sh"
|
|
[[ -f "$HELPER_FILE" ]] || { echo "Helper functions script not found: $HELPER_FILE" >&2; exit 1; }
|
|
# shellcheck disable=SC1090
|
|
source "$HELPER_FILE"
|
|
|
|
status "Creating RITA dev installer..."
|
|
|
|
ARM=false
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--arm)
|
|
ARM=true
|
|
shift
|
|
;;
|
|
-*|--*)
|
|
echo "Unknown option $1" >&2
|
|
exit 1
|
|
;;
|
|
*)
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# -------------------------
|
|
# create base installer
|
|
# -------------------------
|
|
"$SCRIPT_DIR/generate_installer.sh"
|
|
|
|
# -------------------------
|
|
# determine docker command
|
|
# -------------------------
|
|
if docker info >/dev/null 2>&1; then
|
|
DOCKER_CMD=(docker)
|
|
else
|
|
DOCKER_CMD=(sudo docker)
|
|
fi
|
|
|
|
# -------------------------
|
|
# determine version
|
|
# -------------------------
|
|
if VERSION="$(git -C "$RITA_DIR" describe --tags --exact-match 2>/dev/null)"; then
|
|
:
|
|
elif VERSION="$(git -C "$RITA_DIR" describe --tags --dirty --always 2>/dev/null)"; then
|
|
:
|
|
else
|
|
fail "Unable to determine RITA version."
|
|
fi
|
|
[[ -n "$VERSION" ]] || fail "VERSION not set"
|
|
|
|
# paths
|
|
TARBALL="${SCRIPT_DIR}/rita-${VERSION}.tar.gz"
|
|
INSTALLER_DIR="${SCRIPT_DIR}/rita-${VERSION}-installer"
|
|
ENV_FILE="${INSTALLER_DIR}/files/opt/.env"
|
|
COMPOSE_FILE="${RITA_DIR}/docker-compose.yml"
|
|
|
|
# -------------------------
|
|
# unpack installer tarball
|
|
# -------------------------
|
|
require_file "$TARBALL"
|
|
tar -xzf "$TARBALL" -C "$SCRIPT_DIR"
|
|
|
|
# parse clickhouse version from .env
|
|
require_file "$ENV_FILE"
|
|
CLICKHOUSE_VERSION="$(awk -F= '$1=="CLICKHOUSE_VERSION"{v=$2} END{gsub(/^[[:space:]]+|[[:space:]]+$/,"",v); gsub(/^"|"$|^\047|\047$/,"",v); print v}' "$ENV_FILE")"
|
|
[[ -n "${CLICKHOUSE_VERSION:-}" ]] || fail "CLICKHOUSE_VERSION is missing from $ENV_FILE"
|
|
status "Using CLICKHOUSE_VERSION=$CLICKHOUSE_VERSION"
|
|
|
|
# determine target platform
|
|
PLATFORM="linux/amd64"
|
|
if [ "${ARM}" = "true" ]; then
|
|
PLATFORM="linux/arm64/v8"
|
|
fi
|
|
|
|
# verify docker is available
|
|
"${DOCKER_CMD[@]}" version >/dev/null 2>&1 || fail "docker is required and must be runnable"
|
|
|
|
# verify gzip is available
|
|
command -v gzip >/dev/null 2>&1 || fail "gzip is required"
|
|
|
|
# -------------------------
|
|
# build rita image
|
|
# -------------------------
|
|
status "Building RITA image for ${PLATFORM}..."
|
|
export DOCKER_BUILDKIT=1
|
|
export RITA_VERSION="${VERSION}"
|
|
if [ "${DOCKER_CMD[0]}" = "sudo" ]; then
|
|
sudo env DOCKER_DEFAULT_PLATFORM="$PLATFORM" BUILDX_NO_DEFAULT_ATTESTATIONS=1 docker compose --project-directory "$RITA_DIR" -f "$COMPOSE_FILE" --env-file "$ENV_FILE" build rita
|
|
else
|
|
DOCKER_DEFAULT_PLATFORM="$PLATFORM" BUILDX_NO_DEFAULT_ATTESTATIONS=1 docker compose --project-directory "$RITA_DIR" -f "$COMPOSE_FILE" --env-file "$ENV_FILE" build rita
|
|
fi
|
|
|
|
# -------------------------
|
|
# save images to disk
|
|
# -------------------------
|
|
INSTALL_OPT="${INSTALLER_DIR}/files/opt"
|
|
require_dir "$INSTALL_OPT"
|
|
|
|
RITA_IMAGE="ghcr.io/activecm/rita:${VERSION}"
|
|
|
|
# docker save --platform requires Docker 26+
|
|
status "Saving RITA image..."
|
|
"${DOCKER_CMD[@]}" save --platform "$PLATFORM" "$RITA_IMAGE" | gzip -c > "$INSTALL_OPT/rita-${VERSION}-image.tar.gz"
|
|
|
|
save_pulled_image() {
|
|
local name="$1" ref="$2" outfile="$3"
|
|
status "Saving ${name} image..."
|
|
"${DOCKER_CMD[@]}" pull --platform "$PLATFORM" "$ref"
|
|
"${DOCKER_CMD[@]}" save --platform "$PLATFORM" "$ref" | gzip -c > "$outfile"
|
|
}
|
|
|
|
save_pulled_image "syslog-ng" "lscr.io/linuxserver/syslog-ng:latest" "$INSTALL_OPT/syslog-ng-latest.tar.gz"
|
|
save_pulled_image "ClickHouse" "clickhouse/clickhouse-server:${CLICKHOUSE_VERSION}" "$INSTALL_OPT/clickhouse-${CLICKHOUSE_VERSION}.tar.gz"
|
|
|
|
# sanity checks
|
|
require_nonempty_file "$INSTALL_OPT/rita-${VERSION}-image.tar.gz"
|
|
require_nonempty_file "$INSTALL_OPT/syslog-ng-latest.tar.gz"
|
|
require_nonempty_file "$INSTALL_OPT/clickhouse-${CLICKHOUSE_VERSION}.tar.gz"
|
|
|
|
# -------------------------
|
|
# repack tarball
|
|
# -------------------------
|
|
if [ "$(uname -s)" = "Darwin" ]; then
|
|
tar --no-xattrs --disable-copyfile -czf "$TARBALL" -C "$SCRIPT_DIR" "$(basename "$INSTALLER_DIR")"
|
|
else
|
|
tar -czf "$TARBALL" -C "$SCRIPT_DIR" "$(basename "$INSTALLER_DIR")"
|
|
fi
|
|
|
|
# clean up
|
|
remove_dir "$INSTALLER_DIR"
|
|
|
|
status "Dev installer created: $(basename "$TARBALL")"
|
|
status "Platform: ${PLATFORM}"
|