#!/bin/sh # dbology installer — https://databaseology.com # Usage: curl -fsSL https://get.databaseology.com/install.sh | sh set -e CDN_BASE="https://get.databaseology.com" # ── Detect OS ───────────────────────────────────────────────────── OS="$(uname -s)" case "$OS" in Linux) OS_NAME="linux" ;; Darwin) OS_NAME="macos" ;; MINGW*|MSYS*|CYGWIN*) echo "Windows detected. Download the installer from:" echo " https://databaseology.com/download" exit 1 ;; *) echo "Error: unsupported OS: $OS" exit 1 ;; esac # ── Detect architecture ────────────────────────────────────────── ARCH="$(uname -m)" case "$ARCH" in x86_64|amd64) ARCH_NAME="x64" ;; aarch64|arm64) ARCH_NAME="arm64" ;; *) echo "Error: unsupported architecture: $ARCH" exit 1 ;; esac echo "Detected: ${OS_NAME}-${ARCH_NAME}" # ── Fetch latest version ───────────────────────────────────────── LATEST_URL="${CDN_BASE}/releases/latest.json" echo "Checking latest version..." if command -v curl > /dev/null 2>&1; then LATEST_JSON="$(curl -fsSL "$LATEST_URL")" elif command -v wget > /dev/null 2>&1; then LATEST_JSON="$(wget -qO- "$LATEST_URL")" else echo "Error: curl or wget is required" exit 1 fi # Parse version from JSON without jq dependency VERSION="$(echo "$LATEST_JSON" | grep -o '"version"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')" if [ -z "$VERSION" ]; then echo "Error: could not determine latest version" exit 1 fi echo "Latest version: v${VERSION}" # ── Download binary ────────────────────────────────────────────── BINARY_NAME="dbology-${OS_NAME}-${ARCH_NAME}" BINARY_URL="${CDN_BASE}/releases/v${VERSION}/${BINARY_NAME}" CHECKSUM_URL="${CDN_BASE}/releases/v${VERSION}/checksums.sha256" TMPDIR="${TMPDIR:-/tmp}" TMP_BINARY="${TMPDIR}/dbology-download-$$" TMP_CHECKSUMS="${TMPDIR}/dbology-checksums-$$" cleanup() { rm -f "$TMP_BINARY" "$TMP_CHECKSUMS" } trap cleanup EXIT echo "Downloading dbology v${VERSION}..." if command -v curl > /dev/null 2>&1; then curl -fSL -o "$TMP_BINARY" "$BINARY_URL" curl -fsSL -o "$TMP_CHECKSUMS" "$CHECKSUM_URL" else wget -q -O "$TMP_BINARY" "$BINARY_URL" wget -q -O "$TMP_CHECKSUMS" "$CHECKSUM_URL" fi # ── Verify checksum ────────────────────────────────────────────── echo "Verifying checksum..." if command -v sha256sum > /dev/null 2>&1; then ACTUAL_HASH="$(sha256sum "$TMP_BINARY" | awk '{print $1}')" elif command -v shasum > /dev/null 2>&1; then ACTUAL_HASH="$(shasum -a 256 "$TMP_BINARY" | awk '{print $1}')" else echo "Warning: sha256sum/shasum not found — skipping verification" ACTUAL_HASH="" fi if [ -n "$ACTUAL_HASH" ]; then EXPECTED_HASH="$(grep "$BINARY_NAME" "$TMP_CHECKSUMS" | awk '{print $1}')" if [ -z "$EXPECTED_HASH" ]; then echo "Warning: no checksum found for ${BINARY_NAME} — skipping verification" elif [ "$ACTUAL_HASH" != "$EXPECTED_HASH" ]; then echo "Error: checksum mismatch!" echo " Expected: ${EXPECTED_HASH}" echo " Got: ${ACTUAL_HASH}" exit 1 else echo "Checksum verified." fi fi # ── Install ────────────────────────────────────────────────────── INSTALL_DIR="${DBOLOGY_INSTALL_DIR:-}" if [ -z "$INSTALL_DIR" ]; then if [ "$OS_NAME" = "macos" ]; then INSTALL_DIR="/usr/local/bin" else INSTALL_DIR="$HOME/.local/bin" mkdir -p "$INSTALL_DIR" fi fi INSTALL_PATH="${INSTALL_DIR}/dbology" # Check if we need elevated permissions if [ -w "$INSTALL_DIR" ] || [ ! -d "$INSTALL_DIR" ]; then chmod +x "$TMP_BINARY" mv "$TMP_BINARY" "$INSTALL_PATH" else echo "Installing to ${INSTALL_DIR} requires elevated permissions." chmod +x "$TMP_BINARY" sudo mv "$TMP_BINARY" "$INSTALL_PATH" fi # ── Verify PATH ────────────────────────────────────────────────── case ":${PATH}:" in *":${INSTALL_DIR}:"*) ;; *) echo "" echo "NOTE: ${INSTALL_DIR} is not in your PATH." echo "Add it by running:" echo "" SHELL_NAME="$(basename "${SHELL:-/bin/sh}")" case "$SHELL_NAME" in zsh) echo " echo 'export PATH=\"${INSTALL_DIR}:\$PATH\"' >> ~/.zshrc && source ~/.zshrc" ;; fish) echo " fish_add_path ${INSTALL_DIR}" ;; *) echo " echo 'export PATH=\"${INSTALL_DIR}:\$PATH\"' >> ~/.bashrc && source ~/.bashrc" ;; esac echo "" ;; esac # ── Done ───────────────────────────────────────────────────────── echo "" echo "dbology v${VERSION} installed successfully!" echo "" echo "Get started:" echo " dbology activate " echo " dbology" echo "" echo "Purchase a license at https://databaseology.com"