Files
codexpi/scripts/host-agent-channel.sh

61 lines
2.0 KiB
Bash
Raw Normal View History

2026-11-14 20:23:59 +01:00
#!/usr/bin/env bash
set -euo pipefail
action="${1:-status}"
project_root="$(cd "$(dirname "$0")/.." && pwd)"
runtime_dir="$project_root/data/host-agent"
unit_name="codexpi-host-agent.service"
unit_source="$project_root/deploy/systemd/$unit_name"
unit_target="/etc/systemd/system/$unit_name"
status() {
systemctl status "$unit_name" --no-pager || true
if [[ -S "$runtime_dir/agent.sock" && -f "$runtime_dir/agent.token" ]]; then
echo "Canal hôte CodexPi disponible."
else
echo "Canal hôte CodexPi non installé ou arrêté."
fi
}
case "$action" in
install)
if [[ "${EUID}" -ne 0 ]]; then
echo "Relancez avec sudo : sudo ./scripts/host-agent-channel.sh install" >&2
exit 1
fi
install_user="${SUDO_USER:-$(id -un)}"
install_group="$(id -gn "$install_user")"
install -d -m 700 -o "$install_user" -g "$install_group" "$runtime_dir"
if [[ ! -f "$runtime_dir/agent.token" ]]; then
umask 077
openssl rand -base64 48 > "$runtime_dir/agent.token"
chown "$install_user:$install_group" "$runtime_dir/agent.token"
fi
chmod 600 "$runtime_dir/agent.token"
temporary_unit="$(mktemp)"
trap 'rm -f "$temporary_unit"' EXIT
sed -e "s|__CODEXPI_USER__|$install_user|g" -e "s|__CODEXPI_GROUP__|$install_group|g" -e "s|__CODEXPI_ROOT__|$project_root|g" "$unit_source" > "$temporary_unit"
install -m 644 "$temporary_unit" "$unit_target"
systemctl daemon-reload
systemctl enable --now "$unit_name"
status
;;
revoke)
if [[ "${EUID}" -ne 0 ]]; then
echo "Relancez avec sudo : sudo ./scripts/host-agent-channel.sh revoke" >&2
exit 1
fi
systemctl disable --now "$unit_name" 2>/dev/null || true
rm -f "$unit_target" "$runtime_dir/agent.sock" "$runtime_dir/agent.token"
systemctl daemon-reload
echo "Canal hôte révoqué; le jeton et le socket ont été supprimés."
;;
status)
status
;;
*)
echo "Usage : $0 {install|status|revoke}" >&2
exit 2
;;
esac