adding ollama installer

This commit is contained in:
Kenji Morishige
2026-02-23 19:53:49 -06:00
parent 0fc1b3cba0
commit 074ab05908
5 changed files with 358 additions and 0 deletions

View File

@@ -356,3 +356,83 @@ To add manually:
sudo tmutil addexclusion ~/data/raw sudo tmutil addexclusion ~/data/raw
sudo tmutil addexclusion ~/models sudo tmutil addexclusion ~/models
``` ```
**Ollama Bootstrap & Usage**
- **Bootstrap (macOS)**: Run the macOS installer/check + create model folders:
```bash
bash scripts/bootstrap_ollama_mac.sh
```
- **Bootstrap (Linux)**: Run the Linux helper (attempts to detect package manager and prepares model folders):
```bash
bash scripts/bootstrap_ollama_linux.sh
```
- The scripts create the model directory referenced by the setup script as `OLLAMA_MODELS` (by default `$HOME/models/ollama`).
- Start the Ollama server inside a tmux session (helper functions):
```bash
# Load helper functions (one-liner to source from dotfiles workspace)
source scripts/ollama_tmux.sh
# Start the server in a detached tmux session named 'ollama' (default command):
start_ollama_tmux
# To attach to the session:
tmux attach -t ollama
# To stop the server session:
stop_ollama_tmux
```
- Model management (two simple options):
- Pull a remote model (via the `ollama` CLI):
```bash
# example: pull a model by reference
pull_ollama_model <model-ref>
```
- Import or stage a local model into the $OLLAMA_MODELS path (creates a symlink):
```bash
import_local_model /path/to/local/model-dir-or-file
# The helper will link it into the directory created by setup_enterprise_ai_bash.sh
```
- Scripts referenced:
- [scripts/bootstrap_ollama_mac.sh](scripts/bootstrap_ollama_mac.sh)
- [scripts/bootstrap_ollama_linux.sh](scripts/bootstrap_ollama_linux.sh)
- [scripts/ollama_tmux.sh](scripts/ollama_tmux.sh)
- How to use Ollama from other AI applications:
- Run the server with `start_ollama_tmux` (above). By default the helper uses `ollama serve --host 127.0.0.1 --port 11434`.
- Many client apps can be pointed at the local Ollama HTTP API (default: `http://127.0.0.1:11434`). Check the Ollama docs for exact endpoints and payloads.
- Example using the `ollama` CLI to run a model directly from scripts or other programs:
```bash
# Run a model locally (interactive / CLI). Replace <model> with the model name.
ollama run <model> --prompt "Write a short haiku about trees"
```
- Example (generic) using HTTP from another application (replace endpoint/payload per Ollama docs):
```bash
curl -X POST "http://127.0.0.1:11434/api/generate" \
-H "Content-Type: application/json" \
-d '{"model":"<model>","prompt":"Hello from my app"}'
```
- When integrating from other AI tooling, supply the Ollama host/port (e.g. `OLLAMA_URL=http://127.0.0.1:11434`) or call the `ollama` CLI directly from the application process.
If you want, I can also:
- Make the new scripts executable (`chmod +x`) automatically in the repo
- Attempt to detect the Ollama default model storage path and auto-configure a symlink

View File

@@ -0,0 +1,40 @@
#!/usr/bin/env bash
set -euo pipefail
echo "🔧 Ollama Linux bootstrap — starting"
# Load environment (MODEL_ROOT, OLLAMA_MODELS)
# Temporarily disable "nounset" when sourcing user shell files to avoid
# failures from system /etc/bashrc referencing undefined vars like PS1.
if [ -f "$HOME/.bashrc" ]; then
set +u
# shellcheck disable=SC1091
source "$HOME/.bashrc" || true
set -u
fi
: "${OLLAMA_MODELS:=$HOME/models/ollama}"
mkdir -p "$OLLAMA_MODELS"
if command -v ollama >/dev/null 2>&1; then
echo "✅ ollama already installed: $(ollama version 2>/dev/null || echo 'unknown')"
else
echo " Attempting to install ollama on Linux"
if command -v apt-get >/dev/null 2>&1; then
echo "Using apt to install prerequisites..."
sudo apt-get update -y || true
sudo apt-get install -y ca-certificates curl gnupg lsb-release || true
echo "⚠️ Please follow the official ollama Linux install instructions if a package is not available: https://ollama.com/docs/install"
echo "If you have a .deb from Ollama, install it with: sudo dpkg -i <file.deb>"
elif command -v dnf >/dev/null 2>&1; then
echo "Using dnf; please refer to Ollama docs for distro-specific instructions: https://ollama.com/docs/install"
else
echo "⚠️ Could not detect package manager. Please install ollama manually. See: https://ollama.com/docs/install"
fi
fi
echo "📁 Ensuring model directory exists: $OLLAMA_MODELS"
mkdir -p "$OLLAMA_MODELS"
echo "✅ Linux Ollama bootstrap complete."
echo "Next steps: run scripts/ollama_tmux.sh to start the server in tmux, and place models under $OLLAMA_MODELS"

41
scripts/bootstrap_ollama_mac.sh Executable file
View File

@@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -euo pipefail
echo "🔧 Ollama macOS bootstrap — starting"
# Load environment (MODEL_ROOT, OLLAMA_MODELS)
# Temporarily disable "nounset" when sourcing user shell files to avoid
# failures from system /etc/bashrc referencing undefined vars like PS1.
if [ -f "$HOME/.bashrc" ]; then
set +u
# shellcheck disable=SC1091
source "$HOME/.bashrc" || true
set -u
fi
: "${OLLAMA_MODELS:=$HOME/models/ollama}"
mkdir -p "$OLLAMA_MODELS"
if command -v ollama >/dev/null 2>&1; then
echo "✅ ollama already installed: $(ollama version 2>/dev/null || echo 'unknown')"
else
if command -v brew >/dev/null 2>&1; then
echo "🍺 Installing ollama via Homebrew..."
brew update || true
brew install ollama || {
echo "⚠️ Homebrew install failed. See https://ollama.com/docs/install"
exit 1
}
echo "✅ ollama installed"
else
echo "⚠️ Homebrew not found. Install Homebrew first: https://brew.sh"
echo "Then re-run this script: $0"
exit 2
fi
fi
echo "📁 Ensuring model directory exists: $OLLAMA_MODELS"
mkdir -p "$OLLAMA_MODELS"
echo "✅ macOS Ollama bootstrap complete."
echo "Next steps: run scripts/ollama_tmux.sh to start the server in tmux, and place models under $OLLAMA_MODELS"

View File

@@ -0,0 +1,53 @@
#!/usr/bin/env bash
set -euo pipefail
echo "🔍 Detecting Ollama model directories and linking into OLLAMA_MODELS"
# Load env if available
if [ -f "$HOME/.bashrc" ]; then
set +u
# shellcheck disable=SC1091
source "$HOME/.bashrc" || true
set -u
fi
OLLAMA_MODELS="${OLLAMA_MODELS:-$HOME/models/ollama}"
mkdir -p "$OLLAMA_MODELS"
candidates=(
"$HOME/.ollama/models"
"$HOME/.local/share/ollama/models"
"/var/lib/ollama/models"
"/usr/local/var/ollama/models"
"$HOME/.ollama"
)
linked=0
for cand in "${candidates[@]}"; do
if [ -d "$cand" ]; then
# skip empty directories
if [ -z "$(ls -A "$cand" 2>/dev/null)" ]; then
echo " Found $cand but it's empty — skipping"
continue
fi
name=$(basename "$cand")
dest="$OLLAMA_MODELS/$name"
if [ -e "$dest" ]; then
echo " Destination exists: $dest — skipping"
continue
fi
ln -sfn "$cand" "$dest"
echo "✅ Linked $cand$dest"
linked=$((linked+1))
fi
done
if [ $linked -eq 0 ]; then
echo "⚠️ No existing Ollama model directories detected in common locations."
echo "You can place models in: $OLLAMA_MODELS or run: pull_ollama_model <model-ref> (see scripts/ollama_tmux.sh)"
else
echo "🎉 Completed linking ($linked). Verify with: ls -la $OLLAMA_MODELS"
fi
echo "Done."

144
scripts/ollama_tmux.sh Executable file
View File

@@ -0,0 +1,144 @@
#!/usr/bin/env bash
set -euo pipefail
# Ollama tmux helper and model utilities
# Source this file or call functions directly: source scripts/ollama_tmux.sh
# Ensure environment variables exist
if [ -f "$HOME/.bashrc" ]; then
set +u
# shellcheck disable=SC1091
source "$HOME/.bashrc" || true
set -u
fi
: "${OLLAMA_MODELS:=$HOME/models/ollama}"
start_ollama_tmux() {
session="ollama"
# Use provided command or sensible default. Ollama uses env vars (OLLAMA_HOST)
# Example: OLLAMA_HOST=0.0.0.0:11434 ollama serve
default_cmd="${OLLAMA_CMD:-ollama serve}"
cmd="${1:-$default_cmd}"
echo "Using command: $cmd"
if [ -n "${OLLAMA_HOST:-}" ]; then
echo "OLLAMA_HOST is set to: $OLLAMA_HOST"
fi
if ! command -v tmux >/dev/null 2>&1; then
echo "⚠️ tmux not installed. Install tmux and re-run."
return 2
fi
# Create models dir if needed
mkdir -p "$OLLAMA_MODELS"
if tmux has-session -t "$session" 2>/dev/null; then
echo " tmux session '$session' already running. Attach with: tmux attach -t $session"
return 0
fi
echo "🔁 Starting ollama in tmux session '$session' with command: $cmd"
tmux new-session -d -s "$session" "$cmd"
sleep 0.5
if tmux has-session -t "$session" 2>/dev/null; then
echo "✅ Started. Attach: tmux attach -t $session"
else
echo "❌ Failed to start tmux session. Check logs or run the command directly: $cmd"
return 1
fi
}
pull_ollama_model() {
if [ "$#" -lt 1 ]; then
echo "Usage: pull_ollama_model <model-ref>"
return 2
fi
if ! command -v ollama >/dev/null 2>&1; then
echo "⚠️ ollama CLI not found. Install first."
return 3
fi
model="$1"
echo "⬇️ Pulling model: $model"
ollama pull "$model"
}
import_local_model() {
if [ "$#" -lt 1 ]; then
echo "Usage: import_local_model <path-to-model-dir-or-file>"
return 2
fi
src="$1"
if [ ! -e "$src" ]; then
echo "⚠️ Source not found: $src"
return 3
fi
mkdir -p "$OLLAMA_MODELS"
dest="$OLLAMA_MODELS/$(basename "$src")"
ln -sfn "$src" "$dest"
echo "🔗 Linked $src$dest"
echo "Note: depending on your ollama installation you may need to reindex or use the ollama CLI to register the model."
}
stop_ollama_tmux() {
session="ollama"
if tmux has-session -t "$session" 2>/dev/null; then
tmux kill-session -t "$session"
echo "🛑 Stopped tmux session '$session'"
else
echo " No tmux session named '$session' running"
fi
}
print_usage() {
cat <<EOF
Usage: $(basename "$0") <command> [args]
Commands:
start [<cmd>] Start ollama in tmux (optional command overrides default)
stop Stop the tmux session named 'ollama'
pull <model-ref> Pull a model using the ollama CLI
import <path> Import/link a local model directory/file into OLLAMA_MODELS
help Show this help
If you want to use these as shell functions, source this file instead:
source scripts/ollama_tmux.sh
EOF
}
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
# Script executed directly; provide a simple CLI wrapper
cmd="${1:-}"
case "$cmd" in
start)
# shift and pass remaining args as the command
shift || true
start_ollama_tmux "$@"
exit $?
;;
stop)
stop_ollama_tmux
exit $?
;;
pull)
shift || true
pull_ollama_model "$@"
exit $?
;;
import)
shift || true
import_local_model "$@"
exit $?
;;
help|--help|-h|"")
print_usage
exit 0
;;
*)
echo "Unknown command: $cmd"
print_usage
exit 2
;;
esac
else
echo "Loaded ollama tmux helper. Functions: start_ollama_tmux, stop_ollama_tmux, pull_ollama_model, import_local_model"
fi