109 lines
3.2 KiB
Bash
109 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# ---------- helpers ----------
|
||
brew_install() {
|
||
local pkg="$1"
|
||
if ! brew list --versions "$pkg" >/dev/null 2>&1; then
|
||
brew install "$pkg"
|
||
else
|
||
echo "✓ $pkg already installed"
|
||
fi
|
||
}
|
||
|
||
brew_service_start() {
|
||
local formula="$1"
|
||
local status
|
||
status="$(brew services list | awk -v f="$formula" '$1==f{print $2}')" || true
|
||
if [[ "$status" != "started" ]]; then
|
||
brew services start "$formula"
|
||
else
|
||
echo "✓ $formula service already started"
|
||
fi
|
||
}
|
||
|
||
append_once() {
|
||
local line="$1"
|
||
local file="$2"
|
||
grep -Fqx "$line" "$file" 2>/dev/null || echo "$line" >> "$file"
|
||
}
|
||
|
||
# ---------- 1) Xcode CLT ----------
|
||
echo "==> 1. Xcode Command Line Tools"
|
||
xcode-select -p >/dev/null 2>&1 || xcode-select --install || true
|
||
|
||
# ---------- 2) Homebrew ----------
|
||
echo "==> 2. Homebrew"
|
||
if ! command -v brew >/dev/null 2>&1; then
|
||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||
fi
|
||
# 确保 shellenv 生效(幂等追加)
|
||
append_once 'eval "$(/opt/homebrew/bin/brew shellenv)"' "$HOME/.zprofile"
|
||
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||
|
||
# ---------- 3) 基础工具 ----------
|
||
echo "==> 3. 基础工具"
|
||
brew update
|
||
for p in git gh wget curl jq cmake pkg-config tree htop tmux; do
|
||
brew_install "$p"
|
||
done
|
||
|
||
# ---------- 4) Go / Node / Yarn(corepack) ----------
|
||
echo "==> 4. Go / Node / Yarn"
|
||
brew_install go
|
||
brew_install node
|
||
if command -v corepack >/dev/null 2>&1; then
|
||
corepack enable || true
|
||
corepack prepare yarn@stable --activate || true
|
||
fi
|
||
|
||
# ---------- 5) PostgreSQL + pgvector ----------
|
||
echo "==> 5. PostgreSQL + pgvector"
|
||
brew_install postgresql@16
|
||
brew_service_start postgresql@16
|
||
brew_install pgvector || true
|
||
|
||
# ---------- 6) Redis ----------
|
||
echo "==> 6. Redis"
|
||
brew_install redis
|
||
brew_service_start redis
|
||
|
||
# ---------- 7) Python 与虚拟环境 ----------
|
||
echo "==> 7. Python 与虚拟环境"
|
||
brew_install python@3.11
|
||
# 创建 venv(若不存在)
|
||
VENV_DIR="$HOME/.venvs/xcontrol"
|
||
if [[ ! -d "$VENV_DIR" ]]; then
|
||
mkdir -p "$HOME/.venvs"
|
||
python3 -m venv "$VENV_DIR"
|
||
fi
|
||
# 激活 venv
|
||
# shellcheck disable=SC1090
|
||
source "$VENV_DIR/bin/activate"
|
||
python -m pip install -U pip wheel
|
||
|
||
# ---------- 8) RAG 依赖(Flask + sentence-transformers + fastembed 可选) ----------
|
||
echo "==> 8. RAG 依赖(/v1/embeddings 服务)"
|
||
# sentence-transformers 覆盖 BGE-M3;fastembed 可选(若你还跑其它支持的模型)
|
||
python -m pip install -U flask sentence-transformers numpy huggingface_hub
|
||
# 如需 fastembed 再加一行(可选):
|
||
# python -m pip install -U fastembed
|
||
|
||
# ---------- 9) PyTorch + MPS (Apple GPU,加速 Transformers 推理) ----------
|
||
echo "==> 9. PyTorch(MPS 支持)"
|
||
# 对 Apple Silicon,直接从 PyPI 装即可,包含 MPS 后端;无需 extra-index-url
|
||
python -m pip install -U torch torchvision torchaudio
|
||
|
||
# ---------- 10) Ollama(本地生成模型,可选) ----------
|
||
echo "==> 10. Ollama(可选)"
|
||
if ! command -v ollama >/dev/null 2>&1; then
|
||
curl -fsSL https://ollama.com/install.sh | sh
|
||
else
|
||
echo "✓ ollama already installed"
|
||
fi
|
||
|
||
echo "==> 完成 ✅ 如未生效,请执行:"
|
||
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"'
|
||
echo " 并激活虚拟环境:"
|
||
echo "source $HOME/.venvs/xcontrol/bin/activate"
|