hermes-bsd/scripts/install-freebsd.sh

118 lines
4.2 KiB
Bash
Executable file

#!/bin/sh
# ============================================================================
# Hermes Agent Installer — FreeBSD
# ============================================================================
# MIT Licensed — clean-room implementation for FreeBSD 14/15.
#
# Prerequisites: FreeBSD 14+ base system, internet access.
# Installs: uv (Python package manager), Hermes agent, pip dependencies.
#
# Usage: sh scripts/install-freebsd.sh
# ============================================================================
set -e
echo "=== Hermes Agent FreeBSD Installer ==="
echo ""
# ── Ensure /usr/local/bin in PATH ──────────────────────
case ":${PATH}:" in
*:/usr/local/bin:*) ;;
*) PATH="/usr/local/bin:${PATH}"; export PATH ;;
esac
# ── Check FreeBSD ──────────────────────────────────────
if [ "$(uname -s)" != "FreeBSD" ]; then
echo "ERROR: This script is for FreeBSD only."
echo "For Linux/macOS, use the standard Hermes installer."
exit 1
fi
echo "Detected: $(uname -sr)"
# ── Install uv (Python package manager) ────────────────
if ! command -v uv >/dev/null 2>&1; then
echo ""
echo "[1/4] Installing uv package manager..."
if command -v pkg >/dev/null 2>&1; then
sudo pkg install -y uv 2>/dev/null || {
echo "uv not in pkg yet — installing via pip..."
pip install --break-system-packages uv
}
else
pip install --break-system-packages uv
fi
echo "uv installed: $(uv --version)"
else
echo "[1/4] uv already installed: $(uv --version)"
fi
# ── Install Hermes via pip ─────────────────────────────
echo ""
echo "[2/4] Installing Hermes Agent..."
# Use uv for fast resolution, fall back to pip
if command -v uv >/dev/null 2>&1; then
uv pip install --system hermes-agent 2>/dev/null || \
uv pip install --system --break-system-packages hermes-agent 2>/dev/null || \
pip install --break-system-packages hermes-agent
else
pip install --break-system-packages hermes-agent
fi
echo "Hermes installed."
# ── Verify installation ────────────────────────────────
echo ""
echo "[3/4] Verifying installation..."
HERMES_BIN=$(command -v hermes 2>/dev/null || echo "/usr/local/bin/hermes")
if [ -x "$HERMES_BIN" ]; then
echo "Hermes binary: $HERMES_BIN"
hermes --version 2>/dev/null || echo "(version check skipped — first run needed)"
else
echo "WARNING: hermes not found on PATH."
echo "Check: ls -la ~/.local/bin/hermes /usr/local/bin/hermes"
fi
# ── Ensure pip dependencies ────────────────────────────
echo ""
echo "[4/4] Checking dependencies..."
# Packages commonly needed on FreeBSD
MISSING=""
for pkg in espeak-ng xclip; do
if ! pkg info "$pkg" >/dev/null 2>&1; then
MISSING="$MISSING $pkg"
fi
done
if [ -n "$MISSING" ]; then
echo ""
echo "Optional packages for voice/clipboard support:"
echo " sudo pkg install$MISSING"
echo ""
echo "Install now? [y/N]"
read -r answer
case "$answer" in
[Yy]*) sudo pkg install -y$MISSING ;;
*) echo "Skipping optional packages." ;;
esac
fi
echo ""
echo "=== Installation complete ==="
echo ""
echo "Next steps:"
echo " 1. hermes setup # configure providers, tools, gateway"
echo " 2. hermes model # pick a model (OpenRouter, DeepSeek, etc.)"
echo " 3. hermes config # review configuration"
echo " 4. hermes chat # start using Hermes locally"
echo ""
echo "FreeBSD notes:"
echo " - Packages live in /usr/local/bin (ensure it's in PATH)"
echo " - Voice mode: install espeak-ng + ffmpeg (pkg install espeak-ng ffmpeg)"
echo " - Clipboard: install xclip (pkg install xclip)"
echo " - Service: copy packaging/freebsd/hermes_daemon.in to /usr/local/etc/rc.d/"
echo " See README-FreeBSD.md for dedicated-user vs existing-user rc.d setup"
echo " - Foreground: hermes gateway run (or tmux/screen for persistence)"