#!/usr/bin/env bash # scripts/download-ollama.sh # Ollama 포터블 바이너리를 resources/ollama/에 배치한다. (macOS/Linux) # 실행: bash scripts/download-ollama.sh set -euo pipefail OLLAMA_VERSION="${OLLAMA_VERSION:-v0.32.1}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DEST_DIR="$SCRIPT_DIR/../resources/ollama" VERSION_STAMP="$DEST_DIR/.ollama-version" OS="$(uname -s)" ARCH="$(uname -m)" case "$OS" in Darwin) # v0.6+ 기준 tgz 제공 (metal 포함, ~145MB). v0.5.x는 단일 바이너리였음. ASSET="ollama-darwin.tgz" ;; Linux) if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then ASSET="ollama-linux-arm64.tgz" else ASSET="ollama-linux-amd64.tgz" fi ;; *) echo "지원하지 않는 OS: $OS" >&2 exit 1 ;; esac URL="https://github.com/ollama/ollama/releases/download/${OLLAMA_VERSION}/${ASSET}" TMP="$(mktemp -d)" trap 'rm -rf "$TMP"' EXIT # 버전 스탬프 캐시 무효화 — runner가 checkout 디렉토리를 재사용하므로 # 구버전 번들이 남아있으면 갈아엎는다. if [ -f "$DEST_DIR/ollama" ]; then STAMPED="$(cat "$VERSION_STAMP" 2>/dev/null || echo '')" if [ "$STAMPED" = "$OLLAMA_VERSION" ]; then echo "Ollama ${OLLAMA_VERSION}가 이미 존재합니다: $DEST_DIR/ollama" exit 0 fi echo "캐시된 Ollama 버전('$STAMPED') != '$OLLAMA_VERSION' — 재다운로드" rm -rf "$DEST_DIR" fi mkdir -p "$DEST_DIR" echo "=== Ollama ${OLLAMA_VERSION} ${OS} ${ARCH} 다운로드 ===" echo "URL: $URL" curl -L --fail --retry 3 -o "$TMP/$ASSET" "$URL" case "$ASSET" in *.tgz) tar -xzf "$TMP/$ASSET" -C "$TMP" # tgz 구조는 버전에 따라 bin/ollama 또는 루트 ollama — 둘 다 지원 if [ -f "$TMP/bin/ollama" ]; then cp "$TMP/bin/ollama" "$DEST_DIR/ollama" elif [ -f "$TMP/ollama" ]; then cp "$TMP/ollama" "$DEST_DIR/ollama" else echo "ERROR: tgz 안에서 ollama 바이너리를 찾지 못했습니다" >&2 find "$TMP" -maxdepth 2 -type f | head -20 >&2 exit 1 fi chmod +x "$DEST_DIR/ollama" # 라이브러리 동봉 (linux: CUDA/ROCm은 용량 문제로 제외, darwin: metal 등 유지) if [ -d "$TMP/lib" ]; then cp -R "$TMP/lib" "$DEST_DIR/" find "$DEST_DIR/lib" -maxdepth 3 -type d \( -name "cuda*" -o -name "rocm*" \) -exec rm -rf {} + 2>/dev/null || true fi ;; *) # 단일 실행 바이너리 asset cp "$TMP/$ASSET" "$DEST_DIR/ollama" chmod +x "$DEST_DIR/ollama" ;; esac echo "$OLLAMA_VERSION" > "$VERSION_STAMP" echo "Ollama ${OLLAMA_VERSION} 설치 완료: $DEST_DIR ($(du -sh "$DEST_DIR" | cut -f1))"