#!/usr/bin/env bash # Install the lakehouse-auditor + lakehouse-context7-bridge systemd units. # Idempotent: re-running just reloads + restarts. # # Usage (as root): # bash ops/systemd/install.sh # # What it does: # 1. Copies *.service to /etc/systemd/system/ # 2. systemctl daemon-reload # 3. systemctl enable --now both services # 4. Prints post-install status set -euo pipefail UNIT_DIR="$(dirname "$(readlink -f "$0")")" TARGET_DIR=/etc/systemd/system UNITS=( lakehouse-auditor.service lakehouse-context7-bridge.service lakehouse-retention-sweep.service lakehouse-retention-sweep.timer ) if [[ $EUID -ne 0 ]]; then echo "install.sh: must run as root (writes to $TARGET_DIR)" >&2 exit 1 fi for unit in "${UNITS[@]}"; do src="$UNIT_DIR/$unit" dst="$TARGET_DIR/$unit" if [[ ! -f "$src" ]]; then echo "install.sh: missing source $src" >&2 exit 1 fi echo "→ copy $unit" install -m 0644 "$src" "$dst" done echo "→ systemctl daemon-reload" systemctl daemon-reload for unit in "${UNITS[@]}"; do # For .timer units: enable + start the timer (which fires its # paired oneshot service on schedule). For long-running .service # units that DON'T have a timer: enable + restart so changes # land. For oneshot .service units that ARE driven by a timer, # do NOT enable/start them directly — the timer pulls them in. base="${unit%.*}" case "$unit" in *.timer) echo "→ enable + (re)start $unit" systemctl enable "$unit" >/dev/null systemctl restart "$unit" ;; *.service) # Skip if a paired .timer exists in this install set. paired_timer="${base}.timer" paired_in_set=0 for u2 in "${UNITS[@]}"; do [[ "$u2" == "$paired_timer" ]] && paired_in_set=1 && break done if [[ $paired_in_set -eq 1 ]]; then echo "→ skip direct start of $unit (driven by $paired_timer)" else echo "→ enable + (re)start $unit" systemctl enable "$unit" >/dev/null systemctl restart "$unit" fi ;; esac done echo "" echo "─── post-install status ───" for unit in "${UNITS[@]}"; do active=$(systemctl is-active "$unit" 2>/dev/null || true) enabled=$(systemctl is-enabled "$unit" 2>/dev/null || true) printf " %-44s active=%s enabled=%s\n" "$unit" "$active" "$enabled" done echo "" echo "Live logs: journalctl -u lakehouse-auditor.service -f" echo " journalctl -u lakehouse-retention-sweep.service -f" echo "Pause: touch /home/profit/lakehouse/auditor.paused" echo "Resume: rm /home/profit/lakehouse/auditor.paused" echo "Sweep test: systemctl start lakehouse-retention-sweep.service # one-shot, completes immediately" echo "Next sweep: systemctl list-timers lakehouse-retention-sweep.timer"