fix(lxc): asegurar creación de cluster e inicialización robusta de PostgreSQL 15 en Debian 12
This commit is contained in:
+32
-6
@@ -115,22 +115,43 @@ fi
|
|||||||
hdr "4. Instalando y configurando motor de base de datos PostgreSQL"
|
hdr "4. Instalando y configurando motor de base de datos PostgreSQL"
|
||||||
apt-get install -y -qq postgresql postgresql-contrib postgresql-client > /dev/null 2>&1
|
apt-get install -y -qq postgresql postgresql-contrib postgresql-client > /dev/null 2>&1
|
||||||
PG_VER=$(psql --version 2>/dev/null | awk '{print $3}' || echo "instalado")
|
PG_VER=$(psql --version 2>/dev/null | awk '{print $3}' || echo "instalado")
|
||||||
|
PG_MAJOR=$(psql --version 2>/dev/null | awk '{print $3}' | cut -d. -f1 || echo "")
|
||||||
|
[[ -z "$PG_MAJOR" ]] && PG_MAJOR=$(ls /etc/postgresql/ 2>/dev/null | sort -V | tail -n1 || echo "")
|
||||||
|
[[ -z "$PG_MAJOR" ]] && PG_MAJOR="15"
|
||||||
|
|
||||||
ok "Motor PostgreSQL instalado: ${PG_VER}"
|
ok "Motor PostgreSQL instalado: ${PG_VER}"
|
||||||
|
|
||||||
|
# Asegurar directorios de socket y permisos para PostgreSQL en contenedores LXC
|
||||||
|
mkdir -p /run/postgresql /var/run/postgresql /var/lib/postgresql /var/log/postgresql
|
||||||
|
chown -R postgres:postgres /run/postgresql /var/run/postgresql /var/lib/postgresql /var/log/postgresql
|
||||||
|
chmod 2775 /run/postgresql /var/run/postgresql
|
||||||
|
|
||||||
|
# Verificar si existe el cluster 'main'. Si no existe (común en Debian si falló la creación automática), crearlo
|
||||||
|
if ! pg_lsclusters 2>/dev/null | grep -q 'main'; then
|
||||||
|
info "Cluster PostgreSQL no detectado — inicializando cluster ${PG_MAJOR} main..."
|
||||||
|
pg_createcluster "${PG_MAJOR}" main --locale en_US.UTF-8 --start >/dev/null 2>&1 \
|
||||||
|
|| pg_createcluster "${PG_MAJOR}" main --locale C.UTF-8 --start >/dev/null 2>&1 \
|
||||||
|
|| true
|
||||||
|
fi
|
||||||
|
|
||||||
# Levantar servicio de PostgreSQL asegurando compatibilidad con contenedores LXC y VMs
|
# Levantar servicio de PostgreSQL asegurando compatibilidad con contenedores LXC y VMs
|
||||||
info "Iniciando servicio de PostgreSQL..."
|
info "Iniciando servicio de PostgreSQL..."
|
||||||
systemctl start postgresql 2>/dev/null \
|
pg_ctlcluster "${PG_MAJOR}" main start >/dev/null 2>&1 || true
|
||||||
|| service postgresql start 2>/dev/null \
|
systemctl start "postgresql@${PG_MAJOR}-main" 2>/dev/null || true
|
||||||
|| su - postgres -c "pg_ctlcluster $(ls /etc/postgresql/ 2>/dev/null | sort -V | tail -n1) main start" 2>/dev/null \
|
systemctl start postgresql 2>/dev/null || true
|
||||||
|| true
|
service postgresql start 2>/dev/null || true
|
||||||
|
|
||||||
# Esperar a que el socket de PostgreSQL esté completamente activo
|
# Esperar a que el socket de PostgreSQL esté completamente activo
|
||||||
PG_READY=false
|
PG_READY=false
|
||||||
for i in {1..15}; do
|
for i in {1..20}; do
|
||||||
if sudo -u postgres psql -c '\q' >/dev/null 2>&1; then
|
if sudo -u postgres psql -c '\q' >/dev/null 2>&1; then
|
||||||
PG_READY=true
|
PG_READY=true
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
if [[ $i -eq 3 || $i -eq 8 ]]; then
|
||||||
|
pg_ctlcluster "${PG_MAJOR}" main start 2>/dev/null || true
|
||||||
|
systemctl restart "postgresql@${PG_MAJOR}-main" 2>/dev/null || true
|
||||||
|
fi
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -141,11 +162,16 @@ if [ "$PG_READY" = true ]; then
|
|||||||
sed -i -E 's/^(local\s+all\s+all\s+)peer/\1trust/' "$PG_HBA" 2>/dev/null || true
|
sed -i -E 's/^(local\s+all\s+all\s+)peer/\1trust/' "$PG_HBA" 2>/dev/null || true
|
||||||
sed -i -E 's/^(host\s+all\s+all\s+127\.0\.0\.1\/32\s+)(scram-sha-256|md5)/\1trust/' "$PG_HBA" 2>/dev/null || true
|
sed -i -E 's/^(host\s+all\s+all\s+127\.0\.0\.1\/32\s+)(scram-sha-256|md5)/\1trust/' "$PG_HBA" 2>/dev/null || true
|
||||||
sed -i -E 's/^(host\s+all\s+all\s+::1\/128\s+)(scram-sha-256|md5)/\1trust/' "$PG_HBA" 2>/dev/null || true
|
sed -i -E 's/^(host\s+all\s+all\s+::1\/128\s+)(scram-sha-256|md5)/\1trust/' "$PG_HBA" 2>/dev/null || true
|
||||||
systemctl reload postgresql 2>/dev/null || true
|
systemctl reload "postgresql@${PG_MAJOR}-main" 2>/dev/null || systemctl reload postgresql 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
systemctl enable "postgresql@${PG_MAJOR}-main" > /dev/null 2>&1 || true
|
||||||
systemctl enable postgresql > /dev/null 2>&1 || true
|
systemctl enable postgresql > /dev/null 2>&1 || true
|
||||||
ok "PostgreSQL activo y aceptando conexiones"
|
ok "PostgreSQL activo y aceptando conexiones"
|
||||||
else
|
else
|
||||||
|
warn "Diagnóstico de arranque de PostgreSQL en LXC:"
|
||||||
|
pg_lsclusters 2>/dev/null || true
|
||||||
|
systemctl status "postgresql@${PG_MAJOR}-main" --no-pager -n 10 2>/dev/null || true
|
||||||
|
journalctl -u postgresql -n 15 --no-pager 2>/dev/null || true
|
||||||
err "No se pudo conectar al motor PostgreSQL. Verificá los registros del sistema."
|
err "No se pudo conectar al motor PostgreSQL. Verificá los registros del sistema."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user