59 lines
2.5 KiB
Bash
59 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
BASE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
UNIT_DIR="$BASE/deploy/systemd"
|
||
UNITS=(codexpi.service codexpi-docker-access.service codexpi-docker-access.timer)
|
||
|
||
if [[ "$BASE" != "/home/config/CodexPi" ]]; then
|
||
echo "Installation refusée hors du répertoire de production /home/config/CodexPi" >&2
|
||
exit 1
|
||
fi
|
||
for unit in "${UNITS[@]}"; do
|
||
if [[ ! -f "$UNIT_DIR/$unit" ]]; then
|
||
echo "Unité CodexPi introuvable: $UNIT_DIR/$unit" >&2
|
||
exit 1
|
||
fi
|
||
done
|
||
command -v docker >/dev/null || { echo "Docker est introuvable" >&2; exit 1; }
|
||
command -v sudo >/dev/null || { echo "sudo est requis pour installer les unités systemd" >&2; exit 1; }
|
||
command -v systemctl >/dev/null || { echo "systemd est requis pour installer la surveillance Docker" >&2; exit 1; }
|
||
"$BASE/scripts/compose.sh" config >/dev/null
|
||
|
||
codexpi_uid="$(stat -c '%u' "$BASE")"
|
||
codexpi_gid="$(stat -c '%g' "$BASE")"
|
||
docker_gid="$(stat -c '%g' /var/run/docker.sock)"
|
||
if [[ ! "$codexpi_uid" =~ ^[0-9]+$ || ! "$codexpi_gid" =~ ^[0-9]+$ || ! "$docker_gid" =~ ^[0-9]+$ ]]; then
|
||
echo "Impossible de déterminer les groupes numériques de CodexPi et Docker" >&2
|
||
exit 1
|
||
fi
|
||
|
||
# Prefer the host group name so systemd resolves its current GID again after a
|
||
# Docker package update. A numeric GID remains a valid fallback on hosts where
|
||
# the socket group has no entry in /etc/group.
|
||
docker_group="$(getent group "$docker_gid" 2>/dev/null | cut -d: -f1 || true)"
|
||
docker_group="${docker_group:-$docker_gid}"
|
||
if [[ ! "$docker_group" =~ ^[a-zA-Z0-9_.-]+$ ]]; then
|
||
echo "Nom de groupe Docker invalide: $docker_group" >&2
|
||
exit 1
|
||
fi
|
||
generated_units="$(mktemp -d)"
|
||
trap 'rm -rf -- "$generated_units"' EXIT
|
||
|
||
for unit in "${UNITS[@]}"; do
|
||
sed \
|
||
-e "s/__CODEXPI_UID__/$codexpi_uid/g" \
|
||
-e "s/__CODEXPI_GID__/$codexpi_gid/g" \
|
||
-e "s/__DOCKER_GROUP__/$docker_group/g" \
|
||
"$UNIT_DIR/$unit" >"$generated_units/$unit"
|
||
sudo install -o root -g root -m 0644 "$generated_units/$unit" "/etc/systemd/system/$unit"
|
||
done
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable codexpi.service
|
||
sudo systemctl enable --now codexpi-docker-access.timer
|
||
sudo systemctl start --no-block codexpi-docker-access.service
|
||
|
||
echo "Démarrage et auto-réparation de l’accès Docker activés. Aucun redémarrage du Pi n'a été effectué."
|
||
echo "Compte CodexPi: UID $codexpi_uid, GID $codexpi_gid ; groupe Docker: $docker_group ($docker_gid)."
|
||
echo "Pour démarrer immédiatement la pile: sudo systemctl start codexpi.service"
|