61 lines
2.0 KiB
Bash
61 lines
2.0 KiB
Bash
|
|
#!/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
|