riotsecure/setup.sh
2026-04-15 14:50:42 +02:00

273 lines
8.4 KiB
Bash
Executable file

#!/bin/bash
set -e # Exit on error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Helper functions
print_step() {
echo -e "\n${BLUE}===================================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}===================================================${NC}\n"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_warning() {
echo -e "${YELLOW}$1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
wait_for_user() {
echo -e "\n${YELLOW}Press ENTER when you have completed the above step...${NC}"
read
}
check_mac() {
if [[ "$OSTYPE" != "darwin"* ]]; then
print_error "This script is designed for macOS. Exiting."
exit 1
fi
}
# Check if running on macOS
check_mac
print_step "RIoT AI Setup Script - Mac Mini Configuration"
echo "This script will guide you through setting up the RIoT AI system."
echo "Some steps require manual interaction and will pause for your input."
echo ""
echo "Press ENTER to begin..."
read
# =============================================================================
# STEP 1: Homebrew
# =============================================================================
print_step "STEP 1: Installing Homebrew"
if command -v brew &> /dev/null; then
print_success "Homebrew is already installed"
brew --version
else
print_warning "Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Add Homebrew to shell profile
echo >> ~/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
print_success "Homebrew installed successfully"
fi
# =============================================================================
# STEP 2: Ollama
# =============================================================================
print_step "STEP 2: Installing Ollama"
if command -v ollama &> /dev/null; then
print_success "Ollama is already installed"
ollama --version
else
print_warning "Installing Ollama..."
curl -fsSL https://ollama.com/install.sh | sh
print_success "Ollama installed successfully"
fi
# =============================================================================
# STEP 3: Docker Desktop
# =============================================================================
print_step "STEP 3: Installing Docker Desktop"
if [ -d "/Applications/Docker.app" ]; then
print_success "Docker Desktop is already installed"
else
print_warning "Installing Docker Desktop via Homebrew..."
brew install --cask docker
print_success "Docker Desktop installed"
fi
print_warning "Opening Docker Desktop..."
open -a Docker
echo ""
echo "MANUAL STEP REQUIRED:"
echo "1. Click through the Docker Desktop installer"
echo "2. Install any prompted software updates"
echo "3. Go to Docker → Settings → Resources and set:"
echo " - CPU limit: MAX"
echo " - Memory limit: 20 GB"
echo " - Disk usage limit: MAX"
echo "4. Click 'Apply & Restart'"
echo ""
wait_for_user
# Wait for Docker to be ready
print_warning "Waiting for Docker to be ready..."
while ! docker info &> /dev/null; do
echo "Waiting for Docker daemon..."
sleep 5
done
print_success "Docker is ready"
# =============================================================================
# STEP 4: Onyx
# =============================================================================
print_step "STEP 4: Installing Onyx"
if [ -d ~/onyx_data ]; then
print_warning "Onyx data directory already exists. Skipping installation."
else
print_warning "Installing Onyx..."
echo "When prompted:"
echo " 1. Press ENTER to acknowledge"
echo " 2. Choose '2' for Standard"
echo " 3. Press ENTER for Edge"
echo ""
# Download and run Onyx installer
# Note: The interactive prompts need to be handled by the user
curl -fsSL https://onyx.app/install_onyx.sh | bash
print_success "Onyx installation complete"
fi
# Prevent sleep
print_warning "Configuring power settings to prevent sleep..."
sudo pmset -a sleep 0 disksleep 0
print_success "Sleep prevention configured"
# =============================================================================
# STEP 5: Ollama Models
# =============================================================================
print_step "STEP 5: Setting up Ollama Models"
# Check if we're already in the riotsecure directory
if [ ! -f "./updateModels.sh" ]; then
if [ -d ~/riotsecure ]; then
print_warning "riotsecure directory already exists"
cd ~/riotsecure
git pull
else
print_warning "Cloning riotsecure repository..."
cd ~
git clone https://github.com/cediackermann/riotsecure.git
cd ~/riotsecure
fi
else
print_success "Already in riotsecure directory"
fi
print_warning "Creating Ollama models from modelfiles..."
if [ -f "./updateModels.sh" ]; then
chmod +x ./updateModels.sh
./updateModels.sh modelfiles
print_success "Ollama models created successfully"
else
print_error "updateModels.sh not found!"
fi
# =============================================================================
# STEP 6: Web Interface Configuration
# =============================================================================
print_step "STEP 6: Web Interface Configuration"
echo ""
echo "MANUAL STEPS REQUIRED:"
echo ""
echo "1. Open your browser to http://localhost:3000"
echo "2. Create an admin account"
echo "3. Go to Admin Panel → Language Models:"
echo " - Select 'Ollama' as provider and give it a name"
echo " - Set API base URL to: http://host.docker.internal:11434"
echo " - Refresh the model list"
echo " - Select at least the three RIoT models"
echo " - Click 'Connect'"
echo "4. Go to Admin Panel → Chat Preferences → System Prompt → Modify Prompt"
echo " - Delete the entire prompt"
echo " - Save"
echo ""
wait_for_user
# =============================================================================
# STEP 7: RAG Content Upload
# =============================================================================
print_step "STEP 7: RAG Content Upload"
echo "Choose content upload method:"
echo " A - Upload as File (recommended)"
echo " B - Upload as URL"
echo " S - Skip this step"
echo ""
read -p "Enter your choice (A/B/S): " choice
case $choice in
[Aa])
print_warning "Fetching content from riot-sources.txt..."
if [ -f "./fetchContent.sh" ]; then
chmod +x ./fetchContent.sh
if [ -f "./riot-sources.txt" ]; then
./fetchContent.sh riot-sources.txt
print_success "Content fetched successfully"
echo ""
echo "MANUAL STEP REQUIRED:"
echo "1. In the web interface, go to Admin Panel → Add Connector → File"
echo "2. Give the connector a name"
echo "3. Upload the files from ~/riotsecure/content"
echo "4. Wait ~30 seconds for indexing to complete"
echo ""
else
print_error "riot-sources.txt not found!"
fi
else
print_error "fetchContent.sh not found!"
fi
wait_for_user
;;
[Bb])
echo ""
echo "MANUAL STEP REQUIRED:"
echo "1. In the web interface, go to Admin Panel → Add Connector → Web"
echo "2. Add each URL from riot-sources.txt as a separate connector"
echo "3. Use scrape method 'Single'"
echo "4. Wait ~30 seconds for indexing to complete"
echo ""
wait_for_user
;;
[Ss])
print_warning "Skipping RAG content upload"
;;
*)
print_warning "Invalid choice. Skipping RAG content upload"
;;
esac
# =============================================================================
# COMPLETION
# =============================================================================
print_step "Setup Complete!"
echo ""
echo -e "${GREEN}✓ All automated steps completed successfully!${NC}"
echo ""
echo "Your RIoT AI system should now be ready to use."
echo ""
echo "Access the web interface at: ${BLUE}http://localhost:3000${NC}"
echo ""
echo "Useful commands:"
echo " - View Onyx logs: cd ~/onyx_data && docker compose logs -f"
echo " - Restart Onyx: cd ~/onyx_data && docker compose restart"
echo " - List Ollama models: ollama list"
echo " - Update Ollama models: cd ~/riotsecure && ./updateModels.sh modelfiles"
echo ""