73 lines
3.1 KiB
Bash
73 lines
3.1 KiB
Bash
|
|
#!/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!"
|