feat: publish CodexPi contest snapshot
Some checks are pending
Qualité / tests (push) Waiting to run
Some checks are pending
Qualité / tests (push) Waiting to run
This commit is contained in:
58
scripts/install-boot-service.sh
Normal file
58
scripts/install-boot-service.sh
Normal file
@@ -0,0 +1,58 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user