diff options
Diffstat (limited to 'snippets/hyperstack/install.sh')
| -rwxr-xr-x | snippets/hyperstack/install.sh | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/snippets/hyperstack/install.sh b/snippets/hyperstack/install.sh new file mode 100755 index 0000000..3995a62 --- /dev/null +++ b/snippets/hyperstack/install.sh @@ -0,0 +1,142 @@ +#!/bin/bash +set -e + +# OpenCode + Codex + Ollama Installation Script +# Usage: ./install.sh [user@host] [opencode_version] +# Example: ./install.sh ubuntu@38.128.233.181 v1.1.32 + +HOST="${1:-ubuntu@38.128.233.181}" +OPENCODE_VERSION="${2:-v1.1.32}" +CODEX_VERSION="${3:-latest}" + +echo "Installing OpenCode, Codex, and Ollama on $HOST" +echo "OpenCode version: $OPENCODE_VERSION" +echo "Codex version: $CODEX_VERSION" + +# Function to run remote commands +run_remote() { + ssh "$HOST" "$1" +} + +# 1. Install Ollama +echo "Step 1: Installing Ollama..." +run_remote "curl -fsSL https://ollama.ai/install.sh | sh" || echo "Ollama may already be installed" + +# 2. Start Ollama service +echo "Step 2: Starting Ollama service..." +run_remote "sudo systemctl start ollama && sudo systemctl status ollama" || echo "Starting Ollama..." + +# 2.5. Configure Ollama to use /ephemeral for models (if available) +echo "Step 2.5: Configuring Ollama models directory..." +run_remote "if [ -d /ephemeral ]; then + sudo mkdir -p /ephemeral/ollama/models + sudo chown ollama:ollama /ephemeral/ollama /ephemeral/ollama/models + sudo mkdir -p /etc/systemd/system/ollama.service.d + sudo tee /etc/systemd/system/ollama.service.d/override.conf > /dev/null << 'EOF' +[Service] +Environment=\"OLLAMA_MODELS=/ephemeral/ollama/models\" +Environment=\"OLLAMA_GPU_OVERHEAD=2000\" +Environment=\"OLLAMA_NUM_PARALLEL=4\" +EOF + sudo systemctl daemon-reload + sudo systemctl restart ollama + sleep 3 + echo 'Ollama configured to use /ephemeral' +else + echo 'No /ephemeral directory found, using default' +fi" + +# 3. Kill unattended upgrade lock if it exists +echo "Step 3: Clearing package manager lock..." +run_remote "sudo pkill -f unattended-upgrade || true" +sleep 2 + +# 4. Install Node.js 20 (required for Codex), npm, and Python +echo "Step 4: Installing Node.js 20, npm, and Python..." +run_remote "curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt install -y nodejs python3 python3-pip" + +# 5. Download and install OpenCode CLI +echo "Step 5: Installing OpenCode CLI ($OPENCODE_VERSION)..." +run_remote "cd /tmp && wget -q https://github.com/anomalyco/opencode/releases/download/$OPENCODE_VERSION/opencode-linux-x64.tar.gz && tar -xzf opencode-linux-x64.tar.gz && sudo mv opencode /usr/local/bin/ && opencode --version" + +# 6. Create OpenCode config directory +echo "Step 6: Creating OpenCode config directory..." +run_remote "mkdir -p ~/.config/opencode" + +# 7. Create OpenCode configuration (qwen3-coder models) +echo "Step 7: Creating OpenCode configuration..." +run_remote "cat > ~/.config/opencode/opencode.json << 'EOF' +{ + \"provider\": { + \"ollama\": { + \"npm\": \"@ai-sdk/openai-compatible\", + \"name\": \"Ollama\", + \"api\": \"http://localhost:11434/v1\", + \"models\": { + \"qwen3-coder:latest\": { + \"name\": \"Qwen3 Coder Latest (Higher Quality)\" + }, + \"qwen3-coder:30b-a3b-q4_K_M\": { + \"name\": \"Qwen3 Coder 30B A3B Q4_K_M (Quantized)\" + } + } + } + } +} +EOF" + +# 8. Pull qwen3-coder models +echo "Step 8: Pulling qwen3-coder models (this may take a while)..." +run_remote "ollama pull qwen3-coder:latest" +run_remote "ollama pull qwen3-coder:30b-a3b-q4_K_M" + +# 9. Install Codex CLI +echo "Step 9: Installing Codex CLI..." +run_remote "sudo npm install -g @openai/codex || npm install -g @openai/codex" + +# 10. Create Codex config to use Ollama +echo "Step 10: Configuring Codex to use Ollama..." +run_remote "mkdir -p ~/.codex && cat > ~/.codex/config.json << 'EOF' +{ + \"provider\": \"ollama\", + \"model\": \"qwen3-coder:30b-a3b-q4_K_M\", + \"endpoint\": \"http://localhost:11434/v1\" +} +EOF" + +# 11. Install Aider (LLM-powered code editing) +echo "Step 11: Installing Aider..." +run_remote "pip3 install --user aider-chat && echo 'export PATH=~/.local/bin:\$PATH' >> ~/.bashrc" + +# 12. Configure Aider to use Ollama +echo "Step 12: Configuring Aider for Ollama..." +run_remote "mkdir -p ~/.aider && cat > ~/.aider/.aider.conf.yml << 'EOF' +model: ollama/qwen2.5-coder:14b-instruct +openai-api-base: http://localhost:11434/v1 +EOF" + +# 13. Verify installation +echo "Step 13: Verifying installation..." +run_remote "opencode --version && ollama list && codex --version && ~/.local/bin/aider --version" + +echo "" +echo "✓ Installation complete!" +echo "" +echo "To use OpenCode:" +echo " ssh $HOST" +echo " cd ~/your/project" +echo " opencode" +echo "" +echo "To use Codex:" +echo " ssh $HOST" +echo " codex --oss --local-provider ollama" +echo "" +echo "To use Aider (LLM-powered code editing):" +echo " ssh $HOST" +echo " cd ~/your/project" +echo " aider" +echo " aider <filename>" +echo "" +echo "Available models for all tools:" +echo " - qwen2.5-coder:14b-instruct (fast, ~9GB) - default" +echo " - qwen3-coder:30b-a3b-q4_K_M (slower, ~18GB)" |
