adsb-1090/fix_permissions.sh

79 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# ============================================================================
# Correction permissions UID après bascule postgres:16-alpine -> postgis/postgis:16-3.5
# Le conteneur boucle en restart : "could not open log file ... Permission denied"
# Cause : changement d'UID de l'utilisateur postgres entre l'image Alpine (musl)
# et l'image Debian (glibc) sous-jacente à postgis/postgis.
# ============================================================================
set -euo pipefail
echo "==> 1. Identifier l'UID/GID postgres DANS la nouvelle image"
# On lance un conteneur jetable avec la même image pour lire son UID interne,
# sans dépendre du conteneur en échec qui boucle en restart.
NEW_UID=$(docker run --rm postgis/postgis:16-3.5 id -u postgres)
NEW_GID=$(docker run --rm postgis/postgis:16-3.5 id -g postgres)
echo " UID postgres (nouvelle image) : $NEW_UID"
echo " GID postgres (nouvelle image) : $NEW_GID"
echo "==> 2. Stopper le conteneur qui boucle en restart"
cd /root/wordpress
docker compose stop postgres
echo "==> 3. Corriger les permissions sur les volumes concernés"
# pg-logs-std : cause de l'échec actuel
# pg-conf-std : même cause potentielle, à corriger par précaution
# postgres_data : à corriger aussi -- sinon le prochain démarrage échouera
# différemment une fois le problème de logs résolu (même cause, autre symptôme)
# Volumes Docker "local" sont physiquement sous /var/lib/docker/volumes/<nom>/_data
# On passe par un conteneur utilitaire pour ne pas dépendre du chemin hôte exact
# (peut varier si docker tourne en snap, comme mentionné dans l'architecture v4)
docker run --rm \
-v pg-logs-std:/var/log/postgresql \
-v pg-conf-std:/etc/postgresql \
-v postgres_data:/var/lib/postgresql/data \
postgis/postgis:16-3.5 \
chown -R "${NEW_UID}:${NEW_GID}" \
/var/log/postgresql \
/etc/postgresql \
/var/lib/postgresql/data
echo "==> 4. Vérification des permissions appliquées"
docker run --rm \
-v pg-logs-std:/var/log/postgresql \
-v pg-conf-std:/etc/postgresql \
-v postgres_data:/var/lib/postgresql/data \
postgis/postgis:16-3.5 \
bash -c "ls -la /var/log/postgresql | head -5; echo '---'; ls -la /etc/postgresql | head -5; echo '---'; ls -la /var/lib/postgresql/data | head -5"
echo "==> 5. Redémarrage du conteneur postgres"
docker compose up -d postgres
echo "==> 6. Attente du démarrage"
for i in $(seq 1 30); do
if docker exec wordpress-postgres pg_isready -U pgz_admin -d wpz_postgres > /dev/null 2>&1; then
echo " PostgreSQL prêt après ${i}s"
break
fi
if [ "$i" -eq 30 ]; then
echo " ÉCHEC : PostgreSQL toujours pas prêt après 30s"
echo " Vérifier : docker logs wordpress-postgres --tail 50"
exit 1
fi
sleep 1
done
echo "==> 7. Vérification des données"
docker exec wordpress-postgres psql -U pgz_admin -d wpz_postgres -c \
"SELECT count(*) AS partitions FROM pg_inherits WHERE inhparent = 'adsb.positions'::regclass;"
docker exec wordpress-postgres psql -U pgz_admin -d wpz_postgres -c \
"SELECT count(*) AS receivers FROM adsb.receivers;"
echo ""
echo "Si les comptes ci-dessus correspondent à avant (185 partitions, 1 receiver),"
echo "les données sont intactes. On peut alors activer PostGIS :"
echo " docker exec wordpress-postgres psql -U pgz_admin -d wpz_postgres -c \"CREATE EXTENSION IF NOT EXISTS postgis;\""
echo "Puis redémarrer adsb2pg et webapp :"
echo " cd /data/adsb && docker compose start adsb2pg webapp"