summaryrefslogtreecommitdiff
path: root/snippets/hyperstack/install.sh
diff options
context:
space:
mode:
Diffstat (limited to 'snippets/hyperstack/install.sh')
-rwxr-xr-xsnippets/hyperstack/install.sh142
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)"