79 lines
3.5 KiB
Bash
Executable File
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"
|