diff --git a/install.sh b/install.sh index fe0d11b..0c94697 100644 --- a/install.sh +++ b/install.sh @@ -115,22 +115,43 @@ fi 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 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}" +# 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 info "Iniciando servicio de PostgreSQL..." -systemctl start postgresql 2>/dev/null \ - || service postgresql start 2>/dev/null \ - || su - postgres -c "pg_ctlcluster $(ls /etc/postgresql/ 2>/dev/null | sort -V | tail -n1) main start" 2>/dev/null \ - || true +pg_ctlcluster "${PG_MAJOR}" main start >/dev/null 2>&1 || true +systemctl start "postgresql@${PG_MAJOR}-main" 2>/dev/null || true +systemctl start postgresql 2>/dev/null || true +service postgresql start 2>/dev/null || true # Esperar a que el socket de PostgreSQL esté completamente activo 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 PG_READY=true break 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 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/^(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 - systemctl reload postgresql 2>/dev/null || true + systemctl reload "postgresql@${PG_MAJOR}-main" 2>/dev/null || systemctl reload postgresql 2>/dev/null || true fi + systemctl enable "postgresql@${PG_MAJOR}-main" > /dev/null 2>&1 || true systemctl enable postgresql > /dev/null 2>&1 || true ok "PostgreSQL activo y aceptando conexiones" 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." fi