mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-04 03:52:56 +00:00
Seems nice to keep all these together. This also provides a nice place for a README file to describe the compute image build process. For now, it briefly describes the contents of the directory, but can be expanded.
1205 lines
57 KiB
Docker
1205 lines
57 KiB
Docker
ARG PG_VERSION
|
|
ARG REPOSITORY=neondatabase
|
|
ARG IMAGE=build-tools
|
|
ARG TAG=pinned
|
|
ARG BUILD_TAG
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "build-deps"
|
|
#
|
|
#########################################################################################
|
|
FROM debian:bullseye-slim AS build-deps
|
|
RUN apt update && \
|
|
apt install -y git autoconf automake libtool build-essential bison flex libreadline-dev \
|
|
zlib1g-dev libxml2-dev libcurl4-openssl-dev libossp-uuid-dev wget pkg-config libssl-dev \
|
|
libicu-dev libxslt1-dev liblz4-dev libzstd-dev zstd
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-build"
|
|
# Build Postgres from the neon postgres repository.
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-build
|
|
ARG PG_VERSION
|
|
COPY vendor/postgres-${PG_VERSION} postgres
|
|
RUN cd postgres && \
|
|
export CONFIGURE_CMD="./configure CFLAGS='-O2 -g3' --enable-debug --with-openssl --with-uuid=ossp \
|
|
--with-icu --with-libxml --with-libxslt --with-lz4" && \
|
|
if [ "${PG_VERSION}" != "v14" ]; then \
|
|
# zstd is available only from PG15
|
|
export CONFIGURE_CMD="${CONFIGURE_CMD} --with-zstd"; \
|
|
fi && \
|
|
eval $CONFIGURE_CMD && \
|
|
make MAKELEVEL=0 -j $(getconf _NPROCESSORS_ONLN) -s install && \
|
|
make MAKELEVEL=0 -j $(getconf _NPROCESSORS_ONLN) -s -C contrib/ install && \
|
|
# Install headers
|
|
make MAKELEVEL=0 -j $(getconf _NPROCESSORS_ONLN) -s -C src/include install && \
|
|
make MAKELEVEL=0 -j $(getconf _NPROCESSORS_ONLN) -s -C src/interfaces/libpq install && \
|
|
# Enable some of contrib extensions
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/autoinc.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/bloom.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/earthdistance.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/insert_username.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/intagg.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/moddatetime.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_stat_statements.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pgrowlocks.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pgstattuple.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/refint.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/xml2.control && \
|
|
# We need to grant EXECUTE on pg_stat_statements_reset() to neon_superuser.
|
|
# In vanilla postgres this function is limited to Postgres role superuser.
|
|
# In neon we have neon_superuser role that is not a superuser but replaces superuser in some cases.
|
|
# We could add the additional grant statements to the postgres repository but it would be hard to maintain,
|
|
# whenever we need to pick up a new postgres version and we want to limit the changes in our postgres fork,
|
|
# so we do it here.
|
|
for file in /usr/local/pgsql/share/extension/pg_stat_statements--*.sql; do \
|
|
filename=$(basename "$file"); \
|
|
# Note that there are no downgrade scripts for pg_stat_statements, so we \
|
|
# don't have to modify any downgrade paths or (much) older versions: we only \
|
|
# have to make sure every creation of the pg_stat_statements_reset function \
|
|
# also adds execute permissions to the neon_superuser.
|
|
case $filename in \
|
|
pg_stat_statements--1.4.sql) \
|
|
# pg_stat_statements_reset is first created with 1.4
|
|
echo 'GRANT EXECUTE ON FUNCTION pg_stat_statements_reset() TO neon_superuser;' >> $file; \
|
|
;; \
|
|
pg_stat_statements--1.6--1.7.sql) \
|
|
# Then with the 1.6-1.7 migration it is re-created with a new signature, thus add the permissions back
|
|
echo 'GRANT EXECUTE ON FUNCTION pg_stat_statements_reset(Oid, Oid, bigint) TO neon_superuser;' >> $file; \
|
|
;; \
|
|
pg_stat_statements--1.10--1.11.sql) \
|
|
# Then with the 1.10-1.11 migration it is re-created with a new signature again, thus add the permissions back
|
|
echo 'GRANT EXECUTE ON FUNCTION pg_stat_statements_reset(Oid, Oid, bigint, boolean) TO neon_superuser;' >> $file; \
|
|
;; \
|
|
esac; \
|
|
done;
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "postgis-build"
|
|
# Build PostGIS from the upstream PostGIS mirror.
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS postgis-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
RUN apt update && \
|
|
apt install -y cmake gdal-bin libboost-dev libboost-thread-dev libboost-filesystem-dev \
|
|
libboost-system-dev libboost-iostreams-dev libboost-program-options-dev libboost-timer-dev \
|
|
libcgal-dev libgdal-dev libgmp-dev libmpfr-dev libopenscenegraph-dev libprotobuf-c-dev \
|
|
protobuf-c-compiler xsltproc
|
|
|
|
# SFCGAL > 1.3 requires CGAL > 5.2, Bullseye's libcgal-dev is 5.2
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
mkdir -p /sfcgal && \
|
|
echo "Postgis doensn't yet support PG17 (needs 3.4.3, if not higher)" && exit 0;; \
|
|
esac && \
|
|
wget https://gitlab.com/Oslandia/SFCGAL/-/archive/v1.3.10/SFCGAL-v1.3.10.tar.gz -O SFCGAL.tar.gz && \
|
|
echo "4e39b3b2adada6254a7bdba6d297bb28e1a9835a9f879b74f37e2dab70203232 SFCGAL.tar.gz" | sha256sum --check && \
|
|
mkdir sfcgal-src && cd sfcgal-src && tar xzf ../SFCGAL.tar.gz --strip-components=1 -C . && \
|
|
cmake -DCMAKE_BUILD_TYPE=Release . && make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
DESTDIR=/sfcgal make install -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make clean && cp -R /sfcgal/* /
|
|
|
|
ENV PATH="/usr/local/pgsql/bin:$PATH"
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "Postgis doensn't yet support PG17 (needs 3.4.3, if not higher)" && exit 0;; \
|
|
esac && \
|
|
wget https://download.osgeo.org/postgis/source/postgis-3.3.3.tar.gz -O postgis.tar.gz && \
|
|
echo "74eb356e3f85f14233791013360881b6748f78081cc688ff9d6f0f673a762d13 postgis.tar.gz" | sha256sum --check && \
|
|
mkdir postgis-src && cd postgis-src && tar xzf ../postgis.tar.gz --strip-components=1 -C . && \
|
|
find /usr/local/pgsql -type f | sed 's|^/usr/local/pgsql/||' > /before.txt &&\
|
|
./autogen.sh && \
|
|
./configure --with-sfcgal=/usr/local/bin/sfcgal-config && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
cd extensions/postgis && \
|
|
make clean && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_raster.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_sfcgal.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_tiger_geocoder.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_topology.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/address_standardizer.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/address_standardizer_data_us.control && \
|
|
mkdir -p /extensions/postgis && \
|
|
cp /usr/local/pgsql/share/extension/postgis.control /extensions/postgis && \
|
|
cp /usr/local/pgsql/share/extension/postgis_raster.control /extensions/postgis && \
|
|
cp /usr/local/pgsql/share/extension/postgis_sfcgal.control /extensions/postgis && \
|
|
cp /usr/local/pgsql/share/extension/postgis_tiger_geocoder.control /extensions/postgis && \
|
|
cp /usr/local/pgsql/share/extension/postgis_topology.control /extensions/postgis && \
|
|
cp /usr/local/pgsql/share/extension/address_standardizer.control /extensions/postgis && \
|
|
cp /usr/local/pgsql/share/extension/address_standardizer_data_us.control /extensions/postgis
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/pgRouting/pgrouting/archive/v3.4.2.tar.gz -O pgrouting.tar.gz && \
|
|
echo "cac297c07d34460887c4f3b522b35c470138760fe358e351ad1db4edb6ee306e pgrouting.tar.gz" | sha256sum --check && \
|
|
mkdir pgrouting-src && cd pgrouting-src && tar xzf ../pgrouting.tar.gz --strip-components=1 -C . && \
|
|
mkdir build && cd build && \
|
|
cmake -DCMAKE_BUILD_TYPE=Release .. && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pgrouting.control && \
|
|
find /usr/local/pgsql -type f | sed 's|^/usr/local/pgsql/||' > /after.txt &&\
|
|
cp /usr/local/pgsql/share/extension/pgrouting.control /extensions/postgis && \
|
|
sort -o /before.txt /before.txt && sort -o /after.txt /after.txt && \
|
|
comm -13 /before.txt /after.txt | tar --directory=/usr/local/pgsql --zstd -cf /extensions/postgis.tar.zst -T -
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "plv8-build"
|
|
# Build plv8
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS plv8-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
apt update && \
|
|
apt install -y ninja-build python3-dev libncurses5 binutils clang
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/plv8/plv8/archive/refs/tags/v3.1.10.tar.gz -O plv8.tar.gz && \
|
|
echo "7096c3290928561f0d4901b7a52794295dc47f6303102fae3f8e42dd575ad97d plv8.tar.gz" | sha256sum --check && \
|
|
mkdir plv8-src && cd plv8-src && tar xzf ../plv8.tar.gz --strip-components=1 -C . && \
|
|
# generate and copy upgrade scripts
|
|
mkdir -p upgrade && ./generate_upgrade.sh 3.1.10 && \
|
|
cp upgrade/* /usr/local/pgsql/share/extension/ && \
|
|
export PATH="/usr/local/pgsql/bin:$PATH" && \
|
|
make DOCKER=1 -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
rm -rf /plv8-* && \
|
|
find /usr/local/pgsql/ -name "plv8-*.so" | xargs strip && \
|
|
# don't break computes with installed old version of plv8
|
|
cd /usr/local/pgsql/lib/ && \
|
|
ln -s plv8-3.1.10.so plv8-3.1.5.so && \
|
|
ln -s plv8-3.1.10.so plv8-3.1.8.so && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/plv8.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/plcoffee.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/plls.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "h3-pg-build"
|
|
# Build h3_pg
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS h3-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
case "$(uname -m)" in \
|
|
"x86_64") \
|
|
export CMAKE_CHECKSUM=739d372726cb23129d57a539ce1432453448816e345e1545f6127296926b6754 \
|
|
;; \
|
|
"aarch64") \
|
|
export CMAKE_CHECKSUM=281b42627c9a1beed03e29706574d04c6c53fae4994472e90985ef018dd29c02 \
|
|
;; \
|
|
*) \
|
|
echo "Unsupported architecture '$(uname -m)'. Supported are x86_64 and aarch64" && exit 1 \
|
|
;; \
|
|
esac && \
|
|
wget https://github.com/Kitware/CMake/releases/download/v3.24.2/cmake-3.24.2-linux-$(uname -m).sh \
|
|
-q -O /tmp/cmake-install.sh \
|
|
&& echo "${CMAKE_CHECKSUM} /tmp/cmake-install.sh" | sha256sum --check \
|
|
&& chmod u+x /tmp/cmake-install.sh \
|
|
&& /tmp/cmake-install.sh --skip-license --prefix=/usr/local/ \
|
|
&& rm /tmp/cmake-install.sh
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
mkdir -p /h3/usr/ && \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/uber/h3/archive/refs/tags/v4.1.0.tar.gz -O h3.tar.gz && \
|
|
echo "ec99f1f5974846bde64f4513cf8d2ea1b8d172d2218ab41803bf6a63532272bc h3.tar.gz" | sha256sum --check && \
|
|
mkdir h3-src && cd h3-src && tar xzf ../h3.tar.gz --strip-components=1 -C . && \
|
|
mkdir build && cd build && \
|
|
cmake .. -DCMAKE_BUILD_TYPE=Release && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
DESTDIR=/h3 make install && \
|
|
cp -R /h3/usr / && \
|
|
rm -rf build
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/zachasme/h3-pg/archive/refs/tags/v4.1.3.tar.gz -O h3-pg.tar.gz && \
|
|
echo "5c17f09a820859ffe949f847bebf1be98511fb8f1bd86f94932512c00479e324 h3-pg.tar.gz" | sha256sum --check && \
|
|
mkdir h3-pg-src && cd h3-pg-src && tar xzf ../h3-pg.tar.gz --strip-components=1 -C . && \
|
|
export PATH="/usr/local/pgsql/bin:$PATH" && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/h3.control && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/h3_postgis.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "unit-pg-build"
|
|
# compile unit extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS unit-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/df7cb/postgresql-unit/archive/refs/tags/7.7.tar.gz -O postgresql-unit.tar.gz && \
|
|
echo "411d05beeb97e5a4abf17572bfcfbb5a68d98d1018918feff995f6ee3bb03e79 postgresql-unit.tar.gz" | sha256sum --check && \
|
|
mkdir postgresql-unit-src && cd postgresql-unit-src && tar xzf ../postgresql-unit.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
# unit extension's "create extension" script relies on absolute install path to fill some reference tables.
|
|
# We move the extension from '/usr/local/pgsql/' to '/usr/local/' after it is build. So we need to adjust the path.
|
|
# This one-liner removes pgsql/ part of the path.
|
|
# NOTE: Other extensions that rely on MODULEDIR variable after building phase will need the same fix.
|
|
find /usr/local/pgsql/share/extension/ -name "unit*.sql" -print0 | xargs -0 sed -i "s|pgsql/||g" && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/unit.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "vector-pg-build"
|
|
# compile pgvector extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS vector-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
COPY patches/pgvector.patch /pgvector.patch
|
|
|
|
# By default, pgvector Makefile uses `-march=native`. We don't want that,
|
|
# because we build the images on different machines than where we run them.
|
|
# Pass OPTFLAGS="" to remove it.
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/pgvector/pgvector/archive/refs/tags/v0.7.2.tar.gz -O pgvector.tar.gz && \
|
|
echo "617fba855c9bcb41a2a9bc78a78567fd2e147c72afd5bf9d37b31b9591632b30 pgvector.tar.gz" | sha256sum --check && \
|
|
mkdir pgvector-src && cd pgvector-src && tar xzf ../pgvector.tar.gz --strip-components=1 -C . && \
|
|
patch -p1 < /pgvector.patch && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) OPTFLAGS="" PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) OPTFLAGS="" install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/vector.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pgjwt-pg-build"
|
|
# compile pgjwt extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pgjwt-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
# 9742dab1b2f297ad3811120db7b21451bca2d3c9 made on 13/11/2021
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/michelp/pgjwt/archive/9742dab1b2f297ad3811120db7b21451bca2d3c9.tar.gz -O pgjwt.tar.gz && \
|
|
echo "cfdefb15007286f67d3d45510f04a6a7a495004be5b3aecb12cda667e774203f pgjwt.tar.gz" | sha256sum --check && \
|
|
mkdir pgjwt-src && cd pgjwt-src && tar xzf ../pgjwt.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pgjwt.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "hypopg-pg-build"
|
|
# compile hypopg extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS hypopg-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/HypoPG/hypopg/archive/refs/tags/1.4.0.tar.gz -O hypopg.tar.gz && \
|
|
echo "0821011743083226fc9b813c1f2ef5897a91901b57b6bea85a78e466187c6819 hypopg.tar.gz" | sha256sum --check && \
|
|
mkdir hypopg-src && cd hypopg-src && tar xzf ../hypopg.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/hypopg.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-hashids-pg-build"
|
|
# compile pg_hashids extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-hashids-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/iCyberon/pg_hashids/archive/refs/tags/v1.2.1.tar.gz -O pg_hashids.tar.gz && \
|
|
echo "74576b992d9277c92196dd8d816baa2cc2d8046fe102f3dcd7f3c3febed6822a pg_hashids.tar.gz" | sha256sum --check && \
|
|
mkdir pg_hashids-src && cd pg_hashids-src && tar xzf ../pg_hashids.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_hashids.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "rum-pg-build"
|
|
# compile rum extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS rum-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
COPY patches/rum.patch /rum.patch
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/postgrespro/rum/archive/refs/tags/1.3.13.tar.gz -O rum.tar.gz && \
|
|
echo "6ab370532c965568df6210bd844ac6ba649f53055e48243525b0b7e5c4d69a7d rum.tar.gz" | sha256sum --check && \
|
|
mkdir rum-src && cd rum-src && tar xzf ../rum.tar.gz --strip-components=1 -C . && \
|
|
patch -p1 < /rum.patch && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/rum.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pgtap-pg-build"
|
|
# compile pgTAP extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pgtap-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/theory/pgtap/archive/refs/tags/v1.2.0.tar.gz -O pgtap.tar.gz && \
|
|
echo "9c7c3de67ea41638e14f06da5da57bac6f5bd03fea05c165a0ec862205a5c052 pgtap.tar.gz" | sha256sum --check && \
|
|
mkdir pgtap-src && cd pgtap-src && tar xzf ../pgtap.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pgtap.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "ip4r-pg-build"
|
|
# compile ip4r extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS ip4r-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/RhodiumToad/ip4r/archive/refs/tags/2.4.2.tar.gz -O ip4r.tar.gz && \
|
|
echo "0f7b1f159974f49a47842a8ab6751aecca1ed1142b6d5e38d81b064b2ead1b4b ip4r.tar.gz" | sha256sum --check && \
|
|
mkdir ip4r-src && cd ip4r-src && tar xzf ../ip4r.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/ip4r.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "prefix-pg-build"
|
|
# compile Prefix extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS prefix-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/dimitri/prefix/archive/refs/tags/v1.2.10.tar.gz -O prefix.tar.gz && \
|
|
echo "4342f251432a5f6fb05b8597139d3ccde8dcf87e8ca1498e7ee931ca057a8575 prefix.tar.gz" | sha256sum --check && \
|
|
mkdir prefix-src && cd prefix-src && tar xzf ../prefix.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/prefix.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "hll-pg-build"
|
|
# compile hll extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS hll-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/citusdata/postgresql-hll/archive/refs/tags/v2.18.tar.gz -O hll.tar.gz && \
|
|
echo "e2f55a6f4c4ab95ee4f1b4a2b73280258c5136b161fe9d059559556079694f0e hll.tar.gz" | sha256sum --check && \
|
|
mkdir hll-src && cd hll-src && tar xzf ../hll.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/hll.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "plpgsql-check-pg-build"
|
|
# compile plpgsql_check extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS plpgsql-check-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/okbob/plpgsql_check/archive/refs/tags/v2.5.3.tar.gz -O plpgsql_check.tar.gz && \
|
|
echo "6631ec3e7fb3769eaaf56e3dfedb829aa761abf163d13dba354b4c218508e1c0 plpgsql_check.tar.gz" | sha256sum --check && \
|
|
mkdir plpgsql_check-src && cd plpgsql_check-src && tar xzf ../plpgsql_check.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/plpgsql_check.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "timescaledb-pg-build"
|
|
# compile timescaledb extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS timescaledb-pg-build
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ARG PG_VERSION
|
|
ENV PATH="/usr/local/pgsql/bin:$PATH"
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
case "${PG_VERSION}" in \
|
|
"v14" | "v15") \
|
|
export TIMESCALEDB_VERSION=2.10.1 \
|
|
export TIMESCALEDB_CHECKSUM=6fca72a6ed0f6d32d2b3523951ede73dc5f9b0077b38450a029a5f411fdb8c73 \
|
|
;; \
|
|
*) \
|
|
export TIMESCALEDB_VERSION=2.13.0 \
|
|
export TIMESCALEDB_CHECKSUM=584a351c7775f0e067eaa0e7277ea88cab9077cc4c455cbbf09a5d9723dce95d \
|
|
;; \
|
|
esac && \
|
|
apt-get update && \
|
|
apt-get install -y cmake && \
|
|
wget https://github.com/timescale/timescaledb/archive/refs/tags/${TIMESCALEDB_VERSION}.tar.gz -O timescaledb.tar.gz && \
|
|
echo "${TIMESCALEDB_CHECKSUM} timescaledb.tar.gz" | sha256sum --check && \
|
|
mkdir timescaledb-src && cd timescaledb-src && tar xzf ../timescaledb.tar.gz --strip-components=1 -C . && \
|
|
./bootstrap -DSEND_TELEMETRY_DEFAULT:BOOL=OFF -DUSE_TELEMETRY:BOOL=OFF -DAPACHE_ONLY:BOOL=ON -DCMAKE_BUILD_TYPE=Release && \
|
|
cd build && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make install -j $(getconf _NPROCESSORS_ONLN) && \
|
|
echo "trusted = true" >> /usr/local/pgsql/share/extension/timescaledb.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-hint-plan-pg-build"
|
|
# compile pg_hint_plan extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-hint-plan-pg-build
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ARG PG_VERSION
|
|
ENV PATH="/usr/local/pgsql/bin:$PATH"
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
case "${PG_VERSION}" in \
|
|
"v14") \
|
|
export PG_HINT_PLAN_VERSION=14_1_4_1 \
|
|
export PG_HINT_PLAN_CHECKSUM=c3501becf70ead27f70626bce80ea401ceac6a77e2083ee5f3ff1f1444ec1ad1 \
|
|
;; \
|
|
"v15") \
|
|
export PG_HINT_PLAN_VERSION=15_1_5_0 \
|
|
export PG_HINT_PLAN_CHECKSUM=564cbbf4820973ffece63fbf76e3c0af62c4ab23543142c7caaa682bc48918be \
|
|
;; \
|
|
"v16") \
|
|
export PG_HINT_PLAN_VERSION=16_1_6_0 \
|
|
export PG_HINT_PLAN_CHECKSUM=fc85a9212e7d2819d4ae4ac75817481101833c3cfa9f0fe1f980984e12347d00 \
|
|
;; \
|
|
"v17") \
|
|
echo "TODO: PG17 pg_hint_plan support" && exit 0 \
|
|
;; \
|
|
*) \
|
|
echo "Export the valid PG_HINT_PLAN_VERSION variable" && exit 1 \
|
|
;; \
|
|
esac && \
|
|
wget https://github.com/ossc-db/pg_hint_plan/archive/refs/tags/REL${PG_HINT_PLAN_VERSION}.tar.gz -O pg_hint_plan.tar.gz && \
|
|
echo "${PG_HINT_PLAN_CHECKSUM} pg_hint_plan.tar.gz" | sha256sum --check && \
|
|
mkdir pg_hint_plan-src && cd pg_hint_plan-src && tar xzf ../pg_hint_plan.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make install -j $(getconf _NPROCESSORS_ONLN) && \
|
|
echo "trusted = true" >> /usr/local/pgsql/share/extension/pg_hint_plan.control
|
|
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-cron-pg-build"
|
|
# compile pg_cron extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-cron-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ENV PATH="/usr/local/pgsql/bin/:$PATH"
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/citusdata/pg_cron/archive/refs/tags/v1.6.0.tar.gz -O pg_cron.tar.gz && \
|
|
echo "383a627867d730222c272bfd25cd5e151c578d73f696d32910c7db8c665cc7db pg_cron.tar.gz" | sha256sum --check && \
|
|
mkdir pg_cron-src && cd pg_cron-src && tar xzf ../pg_cron.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_cron.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "rdkit-pg-build"
|
|
# compile rdkit extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS rdkit-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
apt-get update && \
|
|
apt-get install -y \
|
|
cmake \
|
|
libboost-iostreams1.74-dev \
|
|
libboost-regex1.74-dev \
|
|
libboost-serialization1.74-dev \
|
|
libboost-system1.74-dev \
|
|
libeigen3-dev
|
|
|
|
ENV PATH="/usr/local/pgsql/bin/:/usr/local/pgsql/:$PATH"
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/rdkit/rdkit/archive/refs/tags/Release_2023_03_3.tar.gz -O rdkit.tar.gz && \
|
|
echo "bdbf9a2e6988526bfeb8c56ce3cdfe2998d60ac289078e2215374288185e8c8d rdkit.tar.gz" | sha256sum --check && \
|
|
mkdir rdkit-src && cd rdkit-src && tar xzf ../rdkit.tar.gz --strip-components=1 -C . && \
|
|
cmake \
|
|
-D RDK_BUILD_CAIRO_SUPPORT=OFF \
|
|
-D RDK_BUILD_INCHI_SUPPORT=ON \
|
|
-D RDK_BUILD_AVALON_SUPPORT=ON \
|
|
-D RDK_BUILD_PYTHON_WRAPPERS=OFF \
|
|
-D RDK_BUILD_DESCRIPTORS3D=OFF \
|
|
-D RDK_BUILD_FREESASA_SUPPORT=OFF \
|
|
-D RDK_BUILD_COORDGEN_SUPPORT=ON \
|
|
-D RDK_BUILD_MOLINTERCHANGE_SUPPORT=OFF \
|
|
-D RDK_BUILD_YAEHMOP_SUPPORT=OFF \
|
|
-D RDK_BUILD_STRUCTCHECKER_SUPPORT=OFF \
|
|
-D RDK_USE_URF=OFF \
|
|
-D RDK_BUILD_PGSQL=ON \
|
|
-D RDK_PGSQL_STATIC=ON \
|
|
-D PostgreSQL_CONFIG=pg_config \
|
|
-D PostgreSQL_INCLUDE_DIR=`pg_config --includedir` \
|
|
-D PostgreSQL_TYPE_INCLUDE_DIR=`pg_config --includedir-server` \
|
|
-D PostgreSQL_LIBRARY_DIR=`pg_config --libdir` \
|
|
-D RDK_INSTALL_INTREE=OFF \
|
|
-D RDK_INSTALL_COMIC_FONTS=OFF \
|
|
-D RDK_BUILD_FREETYPE_SUPPORT=OFF \
|
|
-D CMAKE_BUILD_TYPE=Release \
|
|
. && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/rdkit.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-uuidv7-pg-build"
|
|
# compile pg_uuidv7 extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-uuidv7-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ENV PATH="/usr/local/pgsql/bin/:$PATH"
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/fboulnois/pg_uuidv7/archive/refs/tags/v1.0.1.tar.gz -O pg_uuidv7.tar.gz && \
|
|
echo "0d0759ab01b7fb23851ecffb0bce27822e1868a4a5819bfd276101c716637a7a pg_uuidv7.tar.gz" | sha256sum --check && \
|
|
mkdir pg_uuidv7-src && cd pg_uuidv7-src && tar xzf ../pg_uuidv7.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_uuidv7.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-roaringbitmap-pg-build"
|
|
# compile pg_roaringbitmap extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-roaringbitmap-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ENV PATH="/usr/local/pgsql/bin/:$PATH"
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions is not supported yet by pg_roaringbitmap. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/ChenHuajun/pg_roaringbitmap/archive/refs/tags/v0.5.4.tar.gz -O pg_roaringbitmap.tar.gz && \
|
|
echo "b75201efcb1c2d1b014ec4ae6a22769cc7a224e6e406a587f5784a37b6b5a2aa pg_roaringbitmap.tar.gz" | sha256sum --check && \
|
|
mkdir pg_roaringbitmap-src && cd pg_roaringbitmap-src && tar xzf ../pg_roaringbitmap.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/roaringbitmap.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-semver-pg-build"
|
|
# compile pg_semver extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-semver-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ENV PATH="/usr/local/pgsql/bin/:$PATH"
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 is not supported yet by pg_semver. Quit" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/theory/pg-semver/archive/refs/tags/v0.32.1.tar.gz -O pg_semver.tar.gz && \
|
|
echo "fbdaf7512026d62eec03fad8687c15ed509b6ba395bff140acd63d2e4fbe25d7 pg_semver.tar.gz" | sha256sum --check && \
|
|
mkdir pg_semver-src && cd pg_semver-src && tar xzf ../pg_semver.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/semver.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-embedding-pg-build"
|
|
# compile pg_embedding extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-embedding-pg-build
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ARG PG_VERSION
|
|
ENV PATH="/usr/local/pgsql/bin/:$PATH"
|
|
RUN case "${PG_VERSION}" in \
|
|
"v14" | "v15") \
|
|
export PG_EMBEDDING_VERSION=0.3.5 \
|
|
export PG_EMBEDDING_CHECKSUM=0e95b27b8b6196e2cf0a0c9ec143fe2219b82e54c5bb4ee064e76398cbe69ae9 \
|
|
;; \
|
|
*) \
|
|
echo "pg_embedding not supported on this PostgreSQL version. Use pgvector instead." && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/neondatabase/pg_embedding/archive/refs/tags/${PG_EMBEDDING_VERSION}.tar.gz -O pg_embedding.tar.gz && \
|
|
echo "${PG_EMBEDDING_CHECKSUM} pg_embedding.tar.gz" | sha256sum --check && \
|
|
mkdir pg_embedding-src && cd pg_embedding-src && tar xzf ../pg_embedding.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-anon-pg-build"
|
|
# compile anon extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-anon-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ENV PATH="/usr/local/pgsql/bin/:$PATH"
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "postgresql_anonymizer does not yet support PG17" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/neondatabase/postgresql_anonymizer/archive/refs/tags/neon_1.1.1.tar.gz -O pg_anon.tar.gz && \
|
|
echo "321ea8d5c1648880aafde850a2c576e4a9e7b9933a34ce272efc839328999fa9 pg_anon.tar.gz" | sha256sum --check && \
|
|
mkdir pg_anon-src && cd pg_anon-src && tar xzf ../pg_anon.tar.gz --strip-components=1 -C . && \
|
|
find /usr/local/pgsql -type f | sed 's|^/usr/local/pgsql/||' > /before.txt &&\
|
|
make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/anon.control && \
|
|
find /usr/local/pgsql -type f | sed 's|^/usr/local/pgsql/||' > /after.txt &&\
|
|
mkdir -p /extensions/anon && cp /usr/local/pgsql/share/extension/anon.control /extensions/anon && \
|
|
sort -o /before.txt /before.txt && sort -o /after.txt /after.txt && \
|
|
comm -13 /before.txt /after.txt | tar --directory=/usr/local/pgsql --zstd -cf /extensions/anon.tar.zst -T -
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "rust extensions"
|
|
# This layer is used to build `pgrx` deps
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS rust-extensions-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
RUN apt-get update && \
|
|
apt-get install -y curl libclang-dev cmake && \
|
|
useradd -ms /bin/bash nonroot -b /home
|
|
|
|
ENV HOME=/home/nonroot
|
|
ENV PATH="/home/nonroot/.cargo/bin:/usr/local/pgsql/bin/:$PATH"
|
|
USER nonroot
|
|
WORKDIR /home/nonroot
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 is not supported yet by pgrx. Quit" && exit 0;; \
|
|
esac && \
|
|
curl -sSO https://static.rust-lang.org/rustup/dist/$(uname -m)-unknown-linux-gnu/rustup-init && \
|
|
chmod +x rustup-init && \
|
|
./rustup-init -y --no-modify-path --profile minimal --default-toolchain stable && \
|
|
rm rustup-init && \
|
|
cargo install --locked --version 0.11.3 cargo-pgrx && \
|
|
/bin/bash -c 'cargo pgrx init --pg${PG_VERSION:1}=/usr/local/pgsql/bin/pg_config'
|
|
|
|
USER root
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-jsonschema-pg-build"
|
|
# Compile "pg_jsonschema" extension
|
|
#
|
|
#########################################################################################
|
|
|
|
FROM rust-extensions-build AS pg-jsonschema-pg-build
|
|
ARG PG_VERSION
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "pg_jsonschema does not yet have a release that supports pg17" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/supabase/pg_jsonschema/archive/refs/tags/v0.3.1.tar.gz -O pg_jsonschema.tar.gz && \
|
|
echo "61df3db1ed83cf24f6aa39c826f8818bfa4f0bd33b587fd6b2b1747985642297 pg_jsonschema.tar.gz" | sha256sum --check && \
|
|
mkdir pg_jsonschema-src && cd pg_jsonschema-src && tar xzf ../pg_jsonschema.tar.gz --strip-components=1 -C . && \
|
|
# see commit 252b3685a27a0f4c31a0f91e983c6314838e89e8
|
|
# `unsafe-postgres` feature allows to build pgx extensions
|
|
# against postgres forks that decided to change their ABI name (like us).
|
|
# With that we can build extensions without forking them and using stock
|
|
# pgx. As this feature is new few manual version bumps were required.
|
|
sed -i 's/pgrx = "0.11.3"/pgrx = { version = "0.11.3", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \
|
|
cargo pgrx install --release && \
|
|
echo "trusted = true" >> /usr/local/pgsql/share/extension/pg_jsonschema.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-graphql-pg-build"
|
|
# Compile "pg_graphql" extension
|
|
#
|
|
#########################################################################################
|
|
|
|
FROM rust-extensions-build AS pg-graphql-pg-build
|
|
ARG PG_VERSION
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "pg_graphql does not yet have a release that supports pg17 as of now" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/supabase/pg_graphql/archive/refs/tags/v1.5.7.tar.gz -O pg_graphql.tar.gz && \
|
|
echo "2b3e567a5b31019cb97ae0e33263c1bcc28580be5a444ac4c8ece5c4be2aea41 pg_graphql.tar.gz" | sha256sum --check && \
|
|
mkdir pg_graphql-src && cd pg_graphql-src && tar xzf ../pg_graphql.tar.gz --strip-components=1 -C . && \
|
|
sed -i 's/pgrx = "=0.11.3"/pgrx = { version = "0.11.3", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \
|
|
cargo pgrx install --release && \
|
|
# it's needed to enable extension because it uses untrusted C language
|
|
sed -i 's/superuser = false/superuser = true/g' /usr/local/pgsql/share/extension/pg_graphql.control && \
|
|
echo "trusted = true" >> /usr/local/pgsql/share/extension/pg_graphql.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-tiktoken-build"
|
|
# Compile "pg_tiktoken" extension
|
|
#
|
|
#########################################################################################
|
|
|
|
FROM rust-extensions-build AS pg-tiktoken-pg-build
|
|
ARG PG_VERSION
|
|
|
|
# 26806147b17b60763039c6a6878884c41a262318 made on 26/09/2023
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "pg_tiktoken does not have versions, nor support for pg17" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/kelvich/pg_tiktoken/archive/26806147b17b60763039c6a6878884c41a262318.tar.gz -O pg_tiktoken.tar.gz && \
|
|
echo "e64e55aaa38c259512d3e27c572da22c4637418cf124caba904cd50944e5004e pg_tiktoken.tar.gz" | sha256sum --check && \
|
|
mkdir pg_tiktoken-src && cd pg_tiktoken-src && tar xzf ../pg_tiktoken.tar.gz --strip-components=1 -C . && \
|
|
# TODO update pgrx version in the pg_tiktoken repo and remove this line
|
|
sed -i 's/pgrx = { version = "=0.10.2",/pgrx = { version = "0.11.3",/g' Cargo.toml && \
|
|
sed -i 's/pgrx-tests = "=0.10.2"/pgrx-tests = "0.11.3"/g' Cargo.toml && \
|
|
cargo pgrx install --release && \
|
|
echo "trusted = true" >> /usr/local/pgsql/share/extension/pg_tiktoken.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg-pgx-ulid-build"
|
|
# Compile "pgx_ulid" extension
|
|
#
|
|
#########################################################################################
|
|
|
|
FROM rust-extensions-build AS pg-pgx-ulid-build
|
|
ARG PG_VERSION
|
|
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "pgx_ulid does not support pg17 as of the latest version (0.1.5)" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/pksunkara/pgx_ulid/archive/refs/tags/v0.1.5.tar.gz -O pgx_ulid.tar.gz && \
|
|
echo "9d1659a2da65af0133d5451c454de31b37364e3502087dadf579f790bc8bef17 pgx_ulid.tar.gz" | sha256sum --check && \
|
|
mkdir pgx_ulid-src && cd pgx_ulid-src && tar xzf ../pgx_ulid.tar.gz --strip-components=1 -C . && \
|
|
sed -i 's/pgrx = "^0.11.2"/pgrx = { version = "=0.11.3", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \
|
|
cargo pgrx install --release && \
|
|
echo "trusted = true" >> /usr/local/pgsql/share/extension/ulid.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "wal2json-build"
|
|
# Compile "wal2json" extension
|
|
#
|
|
#########################################################################################
|
|
|
|
FROM build-deps AS wal2json-pg-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ENV PATH="/usr/local/pgsql/bin/:$PATH"
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "We'll need to update wal2json to 2.6+ for pg17 support" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/eulerto/wal2json/archive/refs/tags/wal2json_2_5.tar.gz && \
|
|
echo "b516653575541cf221b99cf3f8be9b6821f6dbcfc125675c85f35090f824f00e wal2json_2_5.tar.gz" | sha256sum --check && \
|
|
mkdir wal2json-src && cd wal2json-src && tar xzf ../wal2json_2_5.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg_ivm"
|
|
# compile pg_ivm extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-ivm-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ENV PATH="/usr/local/pgsql/bin/:$PATH"
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "We'll need to update pg_ivm to 1.9+ for pg17 support" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/sraoss/pg_ivm/archive/refs/tags/v1.7.tar.gz -O pg_ivm.tar.gz && \
|
|
echo "ebfde04f99203c7be4b0e873f91104090e2e83e5429c32ac242d00f334224d5e pg_ivm.tar.gz" | sha256sum --check && \
|
|
mkdir pg_ivm-src && cd pg_ivm-src && tar xzf ../pg_ivm.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_ivm.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "pg_partman"
|
|
# compile pg_partman extension
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS pg-partman-build
|
|
ARG PG_VERSION
|
|
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
|
|
ENV PATH="/usr/local/pgsql/bin/:$PATH"
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "pg_partman doesn't support PG17 yet" && exit 0;; \
|
|
esac && \
|
|
wget https://github.com/pgpartman/pg_partman/archive/refs/tags/v5.0.1.tar.gz -O pg_partman.tar.gz && \
|
|
echo "75b541733a9659a6c90dbd40fccb904a630a32880a6e3044d0c4c5f4c8a65525 pg_partman.tar.gz" | sha256sum --check && \
|
|
mkdir pg_partman-src && cd pg_partman-src && tar xzf ../pg_partman.tar.gz --strip-components=1 -C . && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) install && \
|
|
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_partman.control
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer "neon-pg-ext-build"
|
|
# compile neon extensions
|
|
#
|
|
#########################################################################################
|
|
FROM build-deps AS neon-pg-ext-build
|
|
ARG PG_VERSION
|
|
|
|
# Public extensions
|
|
COPY --from=postgis-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=postgis-build /sfcgal/* /
|
|
COPY --from=plv8-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=h3-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=h3-pg-build /h3/usr /
|
|
COPY --from=unit-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=vector-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pgjwt-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-jsonschema-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-graphql-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-tiktoken-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=hypopg-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-hashids-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=rum-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pgtap-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=ip4r-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=prefix-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=hll-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=plpgsql-check-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=timescaledb-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-hint-plan-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-cron-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-pgx-ulid-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=rdkit-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-uuidv7-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-roaringbitmap-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-semver-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-embedding-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=wal2json-pg-build /usr/local/pgsql /usr/local/pgsql
|
|
COPY --from=pg-anon-pg-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-ivm-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY --from=pg-partman-build /usr/local/pgsql/ /usr/local/pgsql/
|
|
COPY pgxn/ pgxn/
|
|
|
|
RUN make -j $(getconf _NPROCESSORS_ONLN) \
|
|
PG_CONFIG=/usr/local/pgsql/bin/pg_config \
|
|
-C pgxn/neon \
|
|
-s install && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) \
|
|
PG_CONFIG=/usr/local/pgsql/bin/pg_config \
|
|
-C pgxn/neon_utils \
|
|
-s install && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) \
|
|
PG_CONFIG=/usr/local/pgsql/bin/pg_config \
|
|
-C pgxn/neon_test_utils \
|
|
-s install && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) \
|
|
PG_CONFIG=/usr/local/pgsql/bin/pg_config \
|
|
-C pgxn/neon_rmgr \
|
|
-s install && \
|
|
case "${PG_VERSION}" in \
|
|
"v14" | "v15") \
|
|
;; \
|
|
"v16" | "v17") \
|
|
echo "Skipping HNSW for PostgreSQL ${PG_VERSION}" && exit 0 \
|
|
;; \
|
|
*) \
|
|
echo "unexpected PostgreSQL version" && exit 1 \
|
|
;; \
|
|
esac && \
|
|
make -j $(getconf _NPROCESSORS_ONLN) \
|
|
PG_CONFIG=/usr/local/pgsql/bin/pg_config \
|
|
-C pgxn/hnsw \
|
|
-s install
|
|
|
|
#########################################################################################
|
|
#
|
|
# Compile and run the Neon-specific `compute_ctl` binary
|
|
#
|
|
#########################################################################################
|
|
FROM $REPOSITORY/$IMAGE:$TAG AS compute-tools
|
|
ARG BUILD_TAG
|
|
ENV BUILD_TAG=$BUILD_TAG
|
|
|
|
USER nonroot
|
|
# Copy entire project to get Cargo.* files with proper dependencies for the whole project
|
|
COPY --chown=nonroot . .
|
|
RUN cd compute_tools && mold -run cargo build --locked --profile release-line-debug-size-lto
|
|
|
|
#########################################################################################
|
|
#
|
|
# Final compute-tools image
|
|
#
|
|
#########################################################################################
|
|
|
|
FROM debian:bullseye-slim AS compute-tools-image
|
|
|
|
COPY --from=compute-tools /home/nonroot/target/release-line-debug-size-lto/compute_ctl /usr/local/bin/compute_ctl
|
|
|
|
#########################################################################################
|
|
#
|
|
# Clean up postgres folder before inclusion
|
|
#
|
|
#########################################################################################
|
|
FROM neon-pg-ext-build AS postgres-cleanup-layer
|
|
COPY --from=neon-pg-ext-build /usr/local/pgsql /usr/local/pgsql
|
|
|
|
# Remove binaries from /bin/ that we won't use (or would manually copy & install otherwise)
|
|
RUN cd /usr/local/pgsql/bin && rm -f ecpg raster2pgsql shp2pgsql pgtopo_export pgtopo_import pgsql2shp
|
|
|
|
# Remove headers that we won't need anymore - we've completed installation of all extensions
|
|
RUN rm -r /usr/local/pgsql/include
|
|
|
|
# Remove static postgresql libraries - all compilation is finished, so we
|
|
# can now remove these files - they must be included in other binaries by now
|
|
# if they were to be used by other libraries.
|
|
RUN rm /usr/local/pgsql/lib/lib*.a
|
|
|
|
|
|
#########################################################################################
|
|
#
|
|
# Layer neon-pg-ext-test
|
|
#
|
|
#########################################################################################
|
|
|
|
FROM neon-pg-ext-build AS neon-pg-ext-test
|
|
ARG PG_VERSION
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
mkdir /ext-src
|
|
|
|
#COPY --from=postgis-build /postgis.tar.gz /ext-src/
|
|
#COPY --from=postgis-build /sfcgal/* /usr
|
|
COPY --from=plv8-build /plv8.tar.gz /ext-src/
|
|
COPY --from=h3-pg-build /h3-pg.tar.gz /ext-src/
|
|
COPY --from=unit-pg-build /postgresql-unit.tar.gz /ext-src/
|
|
COPY --from=vector-pg-build /pgvector.tar.gz /ext-src/
|
|
COPY --from=vector-pg-build /pgvector.patch /ext-src/
|
|
COPY --from=pgjwt-pg-build /pgjwt.tar.gz /ext-src
|
|
#COPY --from=pg-jsonschema-pg-build /home/nonroot/pg_jsonschema.tar.gz /ext-src
|
|
#COPY --from=pg-graphql-pg-build /home/nonroot/pg_graphql.tar.gz /ext-src
|
|
#COPY --from=pg-tiktoken-pg-build /home/nonroot/pg_tiktoken.tar.gz /ext-src
|
|
COPY --from=hypopg-pg-build /hypopg.tar.gz /ext-src
|
|
COPY --from=pg-hashids-pg-build /pg_hashids.tar.gz /ext-src
|
|
COPY --from=rum-pg-build /rum.tar.gz /ext-src
|
|
COPY patches/rum.patch /ext-src
|
|
#COPY --from=pgtap-pg-build /pgtap.tar.gz /ext-src
|
|
COPY --from=ip4r-pg-build /ip4r.tar.gz /ext-src
|
|
COPY --from=prefix-pg-build /prefix.tar.gz /ext-src
|
|
COPY --from=hll-pg-build /hll.tar.gz /ext-src
|
|
COPY --from=plpgsql-check-pg-build /plpgsql_check.tar.gz /ext-src
|
|
#COPY --from=timescaledb-pg-build /timescaledb.tar.gz /ext-src
|
|
COPY --from=pg-hint-plan-pg-build /pg_hint_plan.tar.gz /ext-src
|
|
COPY patches/pg_hint_plan.patch /ext-src
|
|
COPY --from=pg-cron-pg-build /pg_cron.tar.gz /ext-src
|
|
COPY patches/pg_cron.patch /ext-src
|
|
#COPY --from=pg-pgx-ulid-build /home/nonroot/pgx_ulid.tar.gz /ext-src
|
|
#COPY --from=rdkit-pg-build /rdkit.tar.gz /ext-src
|
|
COPY --from=pg-uuidv7-pg-build /pg_uuidv7.tar.gz /ext-src
|
|
COPY --from=pg-roaringbitmap-pg-build /pg_roaringbitmap.tar.gz /ext-src
|
|
COPY --from=pg-semver-pg-build /pg_semver.tar.gz /ext-src
|
|
#COPY --from=pg-embedding-pg-build /home/nonroot/pg_embedding-src/ /ext-src
|
|
#COPY --from=wal2json-pg-build /wal2json_2_5.tar.gz /ext-src
|
|
COPY --from=pg-anon-pg-build /pg_anon.tar.gz /ext-src
|
|
COPY patches/pg_anon.patch /ext-src
|
|
COPY --from=pg-ivm-build /pg_ivm.tar.gz /ext-src
|
|
COPY --from=pg-partman-build /pg_partman.tar.gz /ext-src
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
cd /ext-src/ && for f in *.tar.gz; \
|
|
do echo $f; dname=$(echo $f | sed 's/\.tar.*//')-src; \
|
|
rm -rf $dname; mkdir $dname; tar xzf $f --strip-components=1 -C $dname \
|
|
|| exit 1; rm -f $f; done
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
cd /ext-src/rum-src && patch -p1 <../rum.patch
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
cd /ext-src/pgvector-src && patch -p1 <../pgvector.patch
|
|
# cmake is required for the h3 test
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
apt-get update && apt-get install -y cmake
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
cd /ext-src/pg_hint_plan-src && patch -p1 < /ext-src/pg_hint_plan.patch
|
|
COPY --chmod=755 docker-compose/run-tests.sh /run-tests.sh
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
patch -p1 </ext-src/pg_anon.patch
|
|
RUN case "${PG_VERSION}" in "v17") \
|
|
echo "v17 extensions are not supported yet. Quit" && exit 0;; \
|
|
esac && \
|
|
patch -p1 </ext-src/pg_cron.patch
|
|
ENV PATH=/usr/local/pgsql/bin:$PATH
|
|
ENV PGHOST=compute
|
|
ENV PGPORT=55433
|
|
ENV PGUSER=cloud_admin
|
|
ENV PGDATABASE=postgres
|
|
#########################################################################################
|
|
#
|
|
# Final layer
|
|
# Put it all together into the final image
|
|
#
|
|
#########################################################################################
|
|
FROM debian:bullseye-slim
|
|
# Add user postgres
|
|
RUN mkdir /var/db && useradd -m -d /var/db/postgres postgres && \
|
|
echo "postgres:test_console_pass" | chpasswd && \
|
|
mkdir /var/db/postgres/compute && mkdir /var/db/postgres/specs && \
|
|
mkdir /var/db/postgres/pgbouncer && \
|
|
chown -R postgres:postgres /var/db/postgres && \
|
|
chmod 0750 /var/db/postgres/compute && \
|
|
chmod 0750 /var/db/postgres/pgbouncer && \
|
|
echo '/usr/local/lib' >> /etc/ld.so.conf && /sbin/ldconfig && \
|
|
# create folder for file cache
|
|
mkdir -p -m 777 /neon/cache
|
|
|
|
COPY --from=postgres-cleanup-layer --chown=postgres /usr/local/pgsql /usr/local
|
|
COPY --from=compute-tools --chown=postgres /home/nonroot/target/release-line-debug-size-lto/compute_ctl /usr/local/bin/compute_ctl
|
|
|
|
# Create remote extension download directory
|
|
RUN mkdir /usr/local/download_extensions && chown -R postgres:postgres /usr/local/download_extensions
|
|
|
|
# Install:
|
|
# libreadline8 for psql
|
|
# libicu67, locales for collations (including ICU and plpgsql_check)
|
|
# liblz4-1 for lz4
|
|
# libossp-uuid16 for extension ossp-uuid
|
|
# libgeos, libgdal, libsfcgal1, libproj and libprotobuf-c1 for PostGIS
|
|
# libxml2, libxslt1.1 for xml2
|
|
# libzstd1 for zstd
|
|
# libboost* for rdkit
|
|
# ca-certificates for communicating with s3 by compute_ctl
|
|
RUN apt update && \
|
|
apt install --no-install-recommends -y \
|
|
gdb \
|
|
libicu67 \
|
|
liblz4-1 \
|
|
libreadline8 \
|
|
libboost-iostreams1.74.0 \
|
|
libboost-regex1.74.0 \
|
|
libboost-serialization1.74.0 \
|
|
libboost-system1.74.0 \
|
|
libossp-uuid16 \
|
|
libgeos-c1v5 \
|
|
libgdal28 \
|
|
libproj19 \
|
|
libprotobuf-c1 \
|
|
libsfcgal1 \
|
|
libxml2 \
|
|
libxslt1.1 \
|
|
libzstd1 \
|
|
libcurl4-openssl-dev \
|
|
locales \
|
|
procps \
|
|
ca-certificates && \
|
|
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
|
|
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
|
|
|
|
ENV LANG=en_US.utf8
|
|
USER postgres
|
|
ENTRYPOINT ["/usr/local/bin/compute_ctl"]
|