-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbootstrap.sh
More file actions
executable file
·167 lines (140 loc) · 6.76 KB
/
Copy pathbootstrap.sh
File metadata and controls
executable file
·167 lines (140 loc) · 6.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#!/bin/bash
set -euo pipefail
echo "🚀 Developer Farm Bootstrap (Ubuntu 22.04 | NVIDIA GPU | Python 3.11)"
echo "⚠️ All components will be installed to /opt/developer-farm"
echo "⚠️ /home is NOT used for models or virtual environments"
echo ""
# ─── Check privileges ──────────────────────────────────────────────────────
if [[ $EUID -eq 0 ]]; then
echo "❌ Do not run as root. Use: sudo ./bootstrap.sh (sudo is handled inside)"
exit 1
fi
PROJECT_DIR="/opt/developer-farm"
echo "📁 PROJECT_DIR=$PROJECT_DIR"
# ─── 1. System dependencies ────────────────────────────────────────────────
echo "📦 [1/7] Installing system packages..."
sudo apt-get update -qq
sudo apt-get install -y -qq \
git curl wget build-essential cmake \
python3.11 python3.11-venv python3.11-dev python3-pip \
redis-server sqlite3 libsqlite3-dev \
nginx tmux htop nvtop jq
# ─── 2. Check NVIDIA drivers ──────────────────────────────────────────────
echo "🎮 [2/7] Checking NVIDIA drivers..."
if ! command -v nvidia-smi &> /dev/null; then
echo " Installing NVIDIA drivers (Pascal support)..."
sudo apt-get install -y -qq nvidia-driver-535
echo " ⚠️ REBOOT REQUIRED after bootstrap!"
else
GPU_NAME=$(nvidia-smi --query-gpu=name --format=csv,noheader | head -1)
VRAM_TOTAL=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader | head -1)
echo " ✅ Drivers OK: $GPU_NAME ($VRAM_TOTAL MiB)"
fi
# ─── 3. Install Ollama (optimized for Pascal/4GB VRAM) ────────────────────
echo "🦙 [3/7] Installing Ollama & configuring for Pascal/4GB..."
# 1. Install Ollama (it starts automatically on default path)
if ! command -v ollama &> /dev/null; then
curl -fsSL https://ollama.com/install.sh | sh
fi
# 2. Stop the service immediately to prevent mixed permission files
sudo systemctl stop ollama
# 3. Create directory for models
sudo mkdir -p "$PROJECT_DIR/models/ollama"
# 4. Configure systemd override FIRST
sudo mkdir -p /etc/systemd/system/ollama.service.d
cat << EOF | sudo tee /etc/systemd/system/ollama.service.d/gpu.conf > /dev/null
[Service]
Environment="OLLAMA_MODELS=$PROJECT_DIR/models/ollama"
Environment="OLLAMA_NUM_GPU=20"
Environment="OLLAMA_CONTEXT_LENGTH=4096"
Environment="OLLAMA_FLASH_ATTENTION=false"
Environment="OLLAMA_MAX_LOADED_MODELS=1"
EOF
# 5. Fix permissions after paths are established
sudo chown -R ollama:ollama "$PROJECT_DIR/models/ollama"
sudo chmod -R 775 "$PROJECT_DIR/models/ollama"
sudo usermod -a -G ollama "$USER"
# 6. Reload daemon and FORCE a full restart of the service
sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl restart ollama
sleep 5
echo " ✅ Ollama configured & running"
echo " ⚠️ Log out and back in for group changes to take effect"
# ─── 4. Python Virtual Environment ────────────────────────────────────────
echo "🐍 [4/7] Setting up Python 3.11 venv..."
cd "$PROJECT_DIR"
python3.11 -m venv venv
source venv/bin/activate
pip install --upgrade pip setuptools wheel -q
echo " 📚 Installing Python packages..."
pip install -q \
aiohttp aiohttp_sse aiohttp-sse-client \
langgraph langchain-core langchain-openai langchain-community \
pydantic redis httpx rich tenacity python-dotenv neo4j ast-grep-py tree-sitter tree-sitter-python
echo " ✅ Python environment ready"
# ─── 5. Download model ───────────────────────────────────────────────────
echo "🧠 [5/7] Pulling qwen2.5-coder:7b-instruct-q4_k_m (Q4_K_M)..."
echo " ⏳ This may take 5-10 minutes depending on your internet"
ollama pull qwen2.5-coder:7b-instruct-q4_k_m
echo " ✅ Model downloaded to $PROJECT_DIR/models/ollama"
# ─── 6. Generate .env and project structure ──────────────────────────────
echo "🏗️ [6/7] Creating project structure & .env..."
mkdir -p "$PROJECT_DIR"/{graph,dashboard,scripts,worktrees,logs,data,docs/assets}
cat > "$PROJECT_DIR/.env" << EOF
# === Developer Farm Configuration ===
# GPU: NVIDIA (Pascal or newer) | RAM: 16GB+ | Disk: /dev/sda
# LLM (Ollama OpenAI-compatible API)
OPENAI_API_BASE=http://localhost:11434/v1
OPENAI_API_KEY=ollama
MODEL_NAME=qwen2.5-coder:7b-instruct-q4_k_m
MODEL_LOCAL_SMALL=qwen2.5-coder:7b-instruct-q4_k_m
MODEL_LOCAL_MEDIUM=qwen2.5-coder:7b-instruct-q4_k_m
MAX_CONTEXT_LENGTH=4096
# OpenRouter API (for Planning and Verification)
OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxxxxxx
# LangGraph & Orchestrator
MAX_PARALLEL_WORKERS=3
CHECKPOINT_DB=$PROJECT_DIR/data/checkpoints.db
LANGGRAPH_CHECKPOINT_TTL=86400
# Dashboard
DASHBOARD_PORT=8080
DASHBOARD_HOST=0.0.0.0
# Token budget
TOKEN_BUDGET_PER_FEATURE=500000
TOKEN_BUDGET_WARNING_PCT=80
EOF
echo " ⚠️ IMPORTANT: Edit .env and add your OPENROUTER_API_KEY"
echo " Get one free at: https://openrouter.ai/keys"
# ─── 7. Git initialization (if not already done) ─────────────────────────
echo "🔧 [7/7] Initializing git repository..."
if [ ! -d ".git" ]; then
git init -b main
git config user.email "farm@developer.local"
git config user.name "Developer Farm"
echo "# Developer Farm" > README.md
git add README.md
git commit -m "chore: initial commit"
echo " ✅ Git repo initialized"
else
echo " ✅ Git repo already exists"
fi
# ─── Final summary ───────────────────────────────────────────────────────
echo ""
echo "=============================================="
echo "✅ Bootstrap Complete!"
echo "=============================================="
echo ""
echo "📁 Project: $PROJECT_DIR"
echo "🦙 Model: Qwen2.5-Coder-7B-Q4_K_M (stored on /dev/sda)"
echo "🖥️ VRAM: ~3.5GB GPU (safe for 4GB, ~500 MiB free)"
echo "💾 RAM: 16GB (Redis + LangGraph + aiohttp overhead < 500MB)"
echo ""
echo "Next steps:"
echo " 1. cd $PROJECT_DIR && source venv/bin/activate"
echo " 2. nano .env # Add your OPENROUTER_API_KEY"
echo " 3. python -m graph.graph work/mvp/user-spec.md # Run pipeline"
echo " 4. python -m dashboard.server # Start dashboard (optional)"
echo ""
echo "⚠️ If NVIDIA drivers were installed for the first time -> REBOOT NOW"
echo "=============================================="