diff --git a/prole-db/Dockerfile b/prole-db/Dockerfile index a8a9c84..e91e8c6 100644 --- a/prole-db/Dockerfile +++ b/prole-db/Dockerfile @@ -40,12 +40,11 @@ RUN set -eux; \ # Percona’s deb layout is Debian-like; this is the common bindir. ENV PATH=/usr/lib/postgresql/17/bin:$PATH -# 3) Install dev headers for PGXS builds (name varies; we try a few common patterns) +# 3) Install dev headers for PGXS builds RUN set -eux; \ apt-get update; \ - (apt-get install -y --no-install-recommends percona-postgresql-17-dev || true); \ - (apt-get install -y --no-install-recommends percona-postgresql17-server-dev || true); \ - (apt-get install -y --no-install-recommends percona-postgresql17-dev || true); \ + apt-cache search percona-postgresql | grep -i dev; \ + apt-get install -y --no-install-recommends percona-postgresql-server-dev-17; \ rm -rf /var/lib/apt/lists/* # 4) Create postgres user + dirs similar to official image expectations @@ -56,16 +55,70 @@ RUN set -eux; \ chown -R postgres:postgres /var/lib/postgresql /var/run/postgresql /docker-entrypoint-initdb.d; \ chmod 3777 /var/run/postgresql -# 5) Build/install your extension (pg_prolelog submodule) -# COPY pg_prolelog /usr/src/pg_prolelog -# RUN set -eux; \ -# cd /usr/src/pg_prolelog; \ -# PG_CONFIG="$(command -v pg_config)"; \ -# test -n "$PG_CONFIG"; \ -# test -d "$($PG_CONFIG --includedir-server)"; \ -# make PG_CONFIG="$PG_CONFIG"; \ -# make PG_CONFIG="$PG_CONFIG" install; \ -# rm -rf /usr/src/pg_prolelog +# 5) Build and install pg_prolelog module + PostgreSQL extensions +# Install dependencies for building pg_prolelog and other extensions +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + cmake \ + libssl-dev \ + libkrb5-dev \ + libgdal-dev \ + libproj-dev \ + libgeos-dev \ + libxml2-dev \ + libjson-c-dev \ + libprotobuf-c-dev \ + protobuf-c-compiler \ + ; \ + rm -rf /var/lib/apt/lists/* + +# Copy and build pg_prolelog from local directory +COPY pg_prolelog /tmp/pg_prolelog +COPY pg_prolelog.Makefile /tmp/pg_prolelog/Makefile +RUN set -eux; \ + cd /tmp/pg_prolelog; \ + make; \ + make install; \ + cd /; \ + rm -rf /tmp/pg_prolelog + +# Install PostgreSQL extensions +RUN set -eux; \ + apt-get update; \ + apt-cache search percona-postgresql-17 | grep -E "(pgvector|postgis|contrib)"; \ + apt-get install -y --no-install-recommends \ + percona-pgvector-percona-postgresql-17 \ + percona-postgis-percona-postgresql-17 \ + percona-postgresql-contrib-17 \ + freetds-dev \ + ; \ + rm -rf /var/lib/apt/lists/* + +# Build and install tds_fdw +RUN set -eux; \ + cd /tmp; \ + git clone https://github.com/tds-fdw/tds_fdw.git; \ + cd tds_fdw; \ + make USE_PGXS=1; \ + make USE_PGXS=1 install; \ + cd /; \ + rm -rf /tmp/tds_fdw + +# Create extension registration script +RUN set -eux; \ + echo "#!/bin/bash" > /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo "set -e" >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo 'psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL' >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo " CREATE EXTENSION IF NOT EXISTS vector;" >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo " CREATE EXTENSION IF NOT EXISTS pgcrypto;" >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo " CREATE EXTENSION IF NOT EXISTS tds_fdw;" >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo " CREATE EXTENSION IF NOT EXISTS postgis;" >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo " CREATE EXTENSION IF NOT EXISTS postgis_topology;" >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo " CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder;" >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo " CREATE EXTENSION IF NOT EXISTS pg_prolelog;" >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + echo "EOSQL" >> /docker-entrypoint-initdb.d/20_create_extensions.sh; \ + chmod +x /docker-entrypoint-initdb.d/20_create_extensions.sh # Install barman-cloud COPY requirements.txt /