Files
codexpi/scripts/install-boot-service.sh
CodexPi 995b17a6e2
Some checks are pending
Qualité / tests (push) Waiting to run
feat: publish CodexPi contest snapshot
2026-11-14 20:23:59 +01:00

59 lines
2.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"