#!/bin/bash # Fix PostgreSQL for Unprivileged Containers # Configures directories and permissions for PostgreSQL to run in unprivileged containers set -uo pipefail NODE_IP="${PROXMOX_HOST_R630_01}" log_info() { echo -e "\033[0;32m[INFO]\033[0m $1"; } log_success() { echo -e "\033[0;32m[✓]\033[0m $1"; } log_error() { echo -e "\033[0;31m[ERROR]\033[0m $1"; } fix_postgresql() { local vmid="$1" log_info "Fixing PostgreSQL configuration for CT $vmid..." ssh -o ConnectTimeout=20 -o StrictHostKeyChecking=no root@${NODE_IP} " pct stop $vmid 2>/dev/null || true sleep 2 pct mount $vmid >/dev/null 2>&1 MOUNT=\$(pct mount $vmid 2>&1 | grep rootfs | awk '{print \$NF}') if [ -d \"\$MOUNT\" ]; then chroot \$MOUNT bash -c ' # Create directories with proper permissions mkdir -p /var/run/postgresql mkdir -p /var/log/postgresql mkdir -p /var/lib/postgresql/15/main # Set ownership (will be mapped by user namespace) chown -R postgres:postgres /var/lib/postgresql chown -R postgres:postgres /var/run/postgresql chown -R postgres:postgres /var/log/postgresql # Initialize database if not exists if [ ! -f /var/lib/postgresql/15/main/PG_VERSION ]; then su - postgres -c \"initdb -D /var/lib/postgresql/15/main --locale=C --encoding=UTF8\" 2>&1 | tail -3 fi # Configure PostgreSQL for unprivileged container sed -i \"s|#unix_socket_directories = .*|unix_socket_directories = '/tmp'|g\" /etc/postgresql/15/main/postgresql.conf 2>/dev/null || true sed -i \"s|#listen_addresses = .*|listen_addresses = '\''*'\''|g\" /etc/postgresql/15/main/postgresql.conf 2>/dev/null || true # Use /tmp for PID file echo \"pid_file = '/tmp/postgresql-15-main.pid'\" >> /etc/postgresql/15/main/postgresql.conf 2>/dev/null || true # Configure logging to /tmp sed -i \"s|log_directory = .*|log_directory = '/tmp'|g\" /etc/postgresql/15/main/postgresql.conf 2>/dev/null || true echo \"PostgreSQL configured\" ' pct unmount $vmid fi pct start $vmid sleep 5 " && log_success "PostgreSQL configured on CT $vmid" || log_error "Failed on CT $vmid" } echo "═══════════════════════════════════════════════════════════" echo "Fix PostgreSQL for Unprivileged Containers" echo "═══════════════════════════════════════════════════════════" echo "" for vmid in 10000 10001 10100 10101; do fix_postgresql "$vmid" sleep 3 done echo "" log_success "PostgreSQL configuration complete!"