118 lines
4.2 KiB
Bash
Executable file
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)"
|