#!/usr/bin/env bash set -euo pipefail # One-command bootstrap for OpenClaude local RAG starter on Ubuntu. # # Usage: # ./install.sh # ./install.sh --skip-model-pull # ./install.sh --docs-dir /path/to/docs SKIP_MODEL_PULL=0 DOCS_DIR="${PWD}/docs" WORKDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" while [[ $# -gt 0 ]]; do case "$1" in --skip-model-pull) SKIP_MODEL_PULL=1 shift ;; --docs-dir) DOCS_DIR="$2" shift 2 ;; *) echo "Unknown argument: $1" exit 2 ;; esac done need_cmd() { command -v "$1" >/dev/null 2>&1 || { echo "Missing command: $1" exit 1 } } echo "==> Installing system packages" sudo apt update sudo apt install -y curl git docker.io docker-compose-plugin python3 python3-venv python3-pip echo "==> Enabling Docker" sudo systemctl enable docker sudo systemctl start docker echo "==> Installing Ollama if needed" if ! command -v ollama >/dev/null 2>&1; then curl -fsSL https://ollama.com/install.sh | sh fi sudo systemctl enable ollama sudo systemctl start ollama echo "==> Verifying local services" curl -fsS "http://127.0.0.1:11434/api/tags" >/dev/null || true echo "==> Installing OpenClaude CLI" if ! command -v openclaude >/dev/null 2>&1; then need_cmd npm npm install -g @gitlawb/openclaude fi echo "==> Starting Qdrant" cd "$WORKDIR" docker compose up -d echo "==> Creating Python venv" python3 -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install -r requirements.txt echo "==> Preparing docs directory" mkdir -p "$DOCS_DIR" if [[ "$DOCS_DIR" != "${WORKDIR}/docs" ]]; then echo "Using custom docs directory: $DOCS_DIR" fi if [[ "$SKIP_MODEL_PULL" -eq 0 ]]; then echo "==> Pulling models (qwen2.5-coder:7b + nomic-embed-text)" ollama pull qwen2.5-coder:7b ollama pull nomic-embed-text else echo "==> Skipping model pull (--skip-model-pull)" fi cat <