# Binary, config template, and systemd artifact helpers for the installer. resolve_build_target() { if [[ -d "${REPO_DIR}/cmd/ananke" ]]; then echo "./cmd/ananke" return 0 fi return 1 } install_config_template() { local template="$1" local dest="$2" local src legacy local -a modern_candidates=() local -a legacy_candidates=() case "${template}" in coordinator) modern_candidates=("configs/ananke.coordinator.yaml" "configs/ananke.titan-db.yaml") legacy_candidates=("configs/hecate.titan-db.yaml") ;; peer) modern_candidates=("configs/ananke.peer.yaml" "configs/ananke.tethys.yaml") legacy_candidates=("configs/hecate.tethys.yaml") ;; example) modern_candidates=("configs/ananke.example.yaml") legacy_candidates=("configs/hecate.example.yaml") ;; *) echo "[install] unknown config template key: ${template}" >&2 return 1 ;; esac for src in "${modern_candidates[@]}"; do if [[ -f "${src}" ]]; then install -m 0640 "${src}" "${dest}" return 0 fi done for legacy in "${legacy_candidates[@]}"; do if [[ -f "${legacy}" ]]; then src="$(mktemp)" legacy_path_rewrite "${legacy}" "${src}" install -m 0640 "${src}" "${dest}" rm -f "${src}" return 0 fi done echo "[install] missing config template sources for '${template}'. modern=[${modern_candidates[*]}] legacy=[${legacy_candidates[*]}]" >&2 return 1 } install_systemd_units() { local tmp while IFS='|' read -r target_name modern_name legacy_name; do local modern_src="deploy/systemd/${modern_name}" local legacy_src="deploy/systemd/${legacy_name}" local target="${SYSTEMD_DIR}/${target_name}" if [[ -f "${modern_src}" ]]; then install -m 0644 "${modern_src}" "${target}" continue fi if [[ -f "${legacy_src}" ]]; then tmp="$(mktemp)" legacy_path_rewrite "${legacy_src}" "${tmp}" install -m 0644 "${tmp}" "${target}" rm -f "${tmp}" continue fi echo "[install] missing both modern and legacy systemd unit sources for ${target_name}" >&2 return 1 done <<'EOF_UNITS' ananke.service|ananke.service|hecate.service ananke-bootstrap.service|ananke-bootstrap.service|hecate-bootstrap.service ananke-update.service|ananke-update.service|hecate-update.service ananke-update.timer|ananke-update.timer|hecate-update.timer EOF_UNITS } install_self_update_script() { local modern_src="scripts/ananke-self-update.sh" local legacy_src="scripts/hecate-self-update.sh" local target="${LIB_DIR}/ananke-self-update.sh" local tmp if [[ -f "${modern_src}" ]]; then install -m 0755 "${modern_src}" "${target}" return 0 fi if [[ -f "${legacy_src}" ]]; then tmp="$(mktemp)" legacy_path_rewrite "${legacy_src}" "${tmp}" sed -Ei \ -e 's/HECATE_/ANANKE_/g' \ -e 's/hecate-self-update/ananke-self-update/g' \ -e 's#/opt/hecate#/opt/ananke#g' \ -e 's#bstein/hecate\.git#bstein/ananke.git#g' \ "${tmp}" install -m 0755 "${tmp}" "${target}" rm -f "${tmp}" return 0 fi echo "[install] missing both modern and legacy self-update scripts." >&2 return 1 }