#!/usr/bin/env bash set -euo pipefail if [[ "${EUID}" -ne 0 ]]; then echo "Run as root: sudo ./scripts/install.sh" >&2 exit 1 fi REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" BIN_DIR="/usr/local/bin" CONF_DIR="/etc/hecate" STATE_DIR="/var/lib/hecate" SYSTEMD_DIR="/etc/systemd/system" START_NOW=1 while [[ $# -gt 0 ]]; do case "$1" in --no-start) START_NOW=0 shift ;; *) echo "Unknown argument: $1" >&2 exit 1 ;; esac done echo "[install] building hecate" cd "${REPO_DIR}" mkdir -p dist go build -o dist/hecate ./cmd/hecate echo "[install] installing binary" install -d -m 0755 "${BIN_DIR}" install -m 0755 dist/hecate "${BIN_DIR}/hecate" echo "[install] installing config + state dirs" install -d -m 0750 "${CONF_DIR}" install -d -m 0750 "${STATE_DIR}" if [[ ! -f "${CONF_DIR}/hecate.yaml" ]]; then install -m 0640 configs/hecate.example.yaml "${CONF_DIR}/hecate.yaml" echo "[install] wrote default config to ${CONF_DIR}/hecate.yaml" else echo "[install] keeping existing config at ${CONF_DIR}/hecate.yaml" fi echo "[install] installing systemd units" install -m 0644 deploy/systemd/hecate.service "${SYSTEMD_DIR}/hecate.service" install -m 0644 deploy/systemd/hecate-bootstrap.service "${SYSTEMD_DIR}/hecate-bootstrap.service" systemctl daemon-reload systemctl enable hecate.service hecate-bootstrap.service if [[ "${START_NOW}" -eq 1 ]]; then systemctl restart hecate.service echo "[install] hecate.service restarted" fi echo "[install] done" echo "Next steps:" echo " 1. Edit /etc/hecate/hecate.yaml" echo " 2. Run: hecate status --config /etc/hecate/hecate.yaml" echo " 3. Test dry run: hecate startup --config /etc/hecate/hecate.yaml" echo " 4. Trigger bootstrap now: systemctl start hecate-bootstrap.service"