An automated setup script for configuring a new Mac as an Exo server. This script handles installation of required dependencies, enables SSH access, and configures the Exo environment with model synchronization.
- macOS (tested on macOS Ventura and later)
- Administrator access (sudo privileges)
- Full Disk Access (you'll be prompted to grant this during installation)
- Source machine with Exo models for synchronization (optional)
- Internet connection for downloading dependencies
If you'd like to inspect the script before running it, you can view it here: install.sh
You can download and run the script directly using:
# Basic installation without model sync
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/focused-dot-io/exo-server-setup/refs/heads/main/install.sh)"
# Installation with model sync
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/focused-dot-io/exo-server-setup/refs/heads/main/install.sh)" -- <remote_models_location>
Note: The script will automatically request Full Disk Access permission via a system prompt. Simply approve the request when it appears.
For better security, you can download and verify the script first:
# Download the script
curl -fsSL https://raw.githubusercontent.com/focused-dot-io/exo-server-setup/refs/heads/main/install.sh -o install.sh
# Inspect the script
less install.sh
# Make it executable and run it
chmod +x install.sh
./install.sh [remote_models_location] # remote_models_location is optional
Example with model sync:
./install.sh user@source-machine:/path/to/models/
- Always inspect scripts before running them with elevated privileges
- The script requires sudo access to enable SSH and install system packages
- All network requests are made via HTTPS
- The script has built-in error handling and cleanup procedures
- No sensitive data is collected or transmitted
- Automated Full Disk Access request and verification
- Automated Homebrew installation
- Installation of required packages:
- brave-browser
- iterm2
- mactop
- tmux
- uv
- SSH enablement
- Exo installation and configuration
- LaunchDaemon setup for automatic startup
- Model synchronization from a source machine (optional)
- Automatic cleanup after model transfer
- Checks and requests Full Disk Access if needed
- Enables SSH access for remote management
- Installs Homebrew and required packages
- Creates a workspace directory
- Clones and installs Exo
- Sets up Exo as a LaunchDaemon for automatic startup
- Synchronizes models from the source location (if provided)
- Cleans up temporary files after successful transfer
The script sets up Exo as a LaunchDaemon. You can manage it using:
# Start the service
sudo launchctl load /Library/LaunchDaemons/io.focused.exo.plist
# Stop the service
sudo launchctl unload /Library/LaunchDaemons/io.focused.exo.plist
# Check status
sudo launchctl list | grep exo
# View logs
tail -f ~/.local/var/log/exo/exo.log
The script includes comprehensive error handling and will:
- Exit on any critical error
- Clean up temporary files even if the script fails
- Provide detailed error messages
- Log all operations with timestamps
If you encounter issues:
-
SSH Access Denied:
- Ensure you have administrator privileges
- Check if SSH is blocked by firewall settings
-
Homebrew Installation Fails:
- Check internet connection
- Ensure XCode Command Line Tools are installed
-
Model Sync Issues:
- Verify source location is accessible
- Check network connectivity
- Ensure sufficient disk space
-
Service Issues:
- Check the log files at ~/.local/var/log/exo/
- Verify the service status using launchctl
- Ensure proper permissions on the workspace directory
Feel free to submit issues and enhancement requests!