mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-18 19:59:48 +08:00
Previously the compile image for the ABI tests was based on a different postgres image than the run image (e.g. 10-alpine vs 10.2-alpine). This created dependency problems between different version of ssl packages that may be available under different alpine versions. We fix this by forcing the run image to be based off of the same image as the compile version.
117 lines
3.8 KiB
Docker
117 lines
3.8 KiB
Docker
# vim:set ft=dockerfile:
|
|
ARG major_version=10
|
|
ARG minor_version=2
|
|
FROM postgres:$major_version.$minor_version-alpine
|
|
|
|
ARG major_version
|
|
ENV PG_MAJOR $major_version
|
|
|
|
# build latest snapshot code
|
|
RUN set -ex \
|
|
\
|
|
&& apk add --no-cache --virtual .fetch-deps \
|
|
ca-certificates \
|
|
openssl \
|
|
openssl-dev \
|
|
tar \
|
|
\
|
|
&& wget -O postgresql.tar.bz2 "https://ftp.postgresql.org/pub/snapshot/$PG_MAJOR/postgresql-$PG_MAJOR-snapshot.tar.bz2" \
|
|
&& mkdir -p /usr/src/postgresql \
|
|
&& tar \
|
|
--extract \
|
|
--file postgresql.tar.bz2 \
|
|
--directory /usr/src/postgresql \
|
|
--strip-components 1 \
|
|
&& rm postgresql.tar.bz2 \
|
|
\
|
|
&& apk add --no-cache --virtual .build-deps \
|
|
bison \
|
|
coreutils \
|
|
dpkg-dev dpkg \
|
|
flex \
|
|
gcc \
|
|
# krb5-dev \
|
|
libc-dev \
|
|
libedit-dev \
|
|
libxml2-dev \
|
|
libxslt-dev \
|
|
make \
|
|
# openldap-dev \
|
|
openssl-dev \
|
|
# configure: error: prove not found
|
|
# perl-utils \
|
|
# configure: error: Perl module IPC::Run is required to run TAP tests
|
|
# perl-ipc-run \
|
|
# perl-dev \
|
|
# python-dev \
|
|
# python3-dev \
|
|
# tcl-dev \
|
|
util-linux-dev \
|
|
zlib-dev \
|
|
\
|
|
&& cd /usr/src/postgresql \
|
|
# update "DEFAULT_PGSOCKET_DIR" to "/var/run/postgresql" (matching Debian)
|
|
# see https://anonscm.debian.org/git/pkg-postgresql/postgresql.git/tree/debian/patches/51-default-sockets-in-var.patch?id=8b539fcb3e093a521c095e70bdfa76887217b89f
|
|
&& awk '$1 == "#define" && $2 == "DEFAULT_PGSOCKET_DIR" && $3 == "\"/tmp\"" { $3 = "\"/var/run/postgresql\""; print; next } { print }' src/include/pg_config_manual.h > src/include/pg_config_manual.h.new \
|
|
&& grep '/var/run/postgresql' src/include/pg_config_manual.h.new \
|
|
&& mv src/include/pg_config_manual.h.new src/include/pg_config_manual.h \
|
|
&& gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \
|
|
# explicitly update autoconf config.guess and config.sub so they support more arches/libcs
|
|
&& wget -O config/config.guess 'https://git.savannah.gnu.org/cgit/config.git/plain/config.guess?id=7d3d27baf8107b630586c962c057e22149653deb' \
|
|
&& wget -O config/config.sub 'https://git.savannah.gnu.org/cgit/config.git/plain/config.sub?id=7d3d27baf8107b630586c962c057e22149653deb' \
|
|
# configure options taken from:
|
|
# https://anonscm.debian.org/cgit/pkg-postgresql/postgresql.git/tree/debian/rules?h=9.5
|
|
&& ./configure \
|
|
--build="$gnuArch" \
|
|
# "/usr/src/postgresql/src/backend/access/common/tupconvert.c:105: undefined reference to `libintl_gettext'"
|
|
# --enable-nls \
|
|
--enable-integer-datetimes \
|
|
--enable-thread-safety \
|
|
# --enable-tap-tests \
|
|
# skip debugging info -- we want tiny size instead
|
|
# --enable-debug \
|
|
--disable-rpath \
|
|
--with-uuid=e2fs \
|
|
--with-gnu-ld \
|
|
--with-pgport=5432 \
|
|
--with-system-tzdata=/usr/share/zoneinfo \
|
|
--prefix=/usr/local \
|
|
--with-includes=/usr/local/include \
|
|
--with-libraries=/usr/local/lib \
|
|
\
|
|
# these make our image abnormally large (at least 100MB larger), which seems uncouth for an "Alpine" (ie, "small") variant :)
|
|
# --with-krb5 \
|
|
# --with-gssapi \
|
|
# --with-ldap \
|
|
# --with-tcl \
|
|
# --with-perl \
|
|
# --with-python \
|
|
# --with-pam \
|
|
--with-openssl \
|
|
--with-libxml \
|
|
--with-libxslt \
|
|
&& make -j "$(nproc)" world \
|
|
&& make install-world \
|
|
&& make -C contrib install \
|
|
\
|
|
&& runDeps="$( \
|
|
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \
|
|
| tr ',' '\n' \
|
|
| sort -u \
|
|
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
|
|
)" \
|
|
&& apk add --no-cache --virtual .postgresql-rundeps \
|
|
$runDeps \
|
|
bash \
|
|
su-exec \
|
|
# tzdata is optional, but only adds around 1Mb to image size and is recommended by Django documentation:
|
|
# https://docs.djangoproject.com/en/1.10/ref/databases/#optimizing-postgresql-s-configuration
|
|
tzdata \
|
|
&& apk del .fetch-deps .build-deps \
|
|
&& cd / \
|
|
&& rm -rf \
|
|
/usr/src/postgresql \
|
|
/usr/local/share/doc \
|
|
/usr/local/share/man \
|
|
&& find /usr/local -name '*.a' -delete
|