|
1 | 1 | ARG DEBIAN_VERSION=bullseye
|
2 | 2 |
|
3 |
| -FROM debian:${DEBIAN_VERSION}-slim |
| 3 | +FROM debian:bookworm-slim AS pgcopydb_builder |
| 4 | +ARG DEBIAN_VERSION |
| 5 | + |
| 6 | +RUN if [ "${DEBIAN_VERSION}" = "bookworm" ]; then \ |
| 7 | + set -e && \ |
| 8 | + apt update && \ |
| 9 | + apt install -y --no-install-recommends \ |
| 10 | + ca-certificates wget gpg && \ |
| 11 | + wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-keyring.gpg && \ |
| 12 | + echo "deb [signed-by=/usr/share/keyrings/postgresql-keyring.gpg] http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \ |
| 13 | + apt-get update && \ |
| 14 | + apt install -y --no-install-recommends \ |
| 15 | + build-essential \ |
| 16 | + autotools-dev \ |
| 17 | + libedit-dev \ |
| 18 | + libgc-dev \ |
| 19 | + libpam0g-dev \ |
| 20 | + libreadline-dev \ |
| 21 | + libselinux1-dev \ |
| 22 | + libxslt1-dev \ |
| 23 | + libssl-dev \ |
| 24 | + libkrb5-dev \ |
| 25 | + zlib1g-dev \ |
| 26 | + liblz4-dev \ |
| 27 | + libpq5 \ |
| 28 | + libpq-dev \ |
| 29 | + libzstd-dev \ |
| 30 | + postgresql-16 \ |
| 31 | + postgresql-server-dev-16 \ |
| 32 | + postgresql-common \ |
| 33 | + python3-sphinx && \ |
| 34 | + wget -O /tmp/pgcopydb.tar.gz https://github.com/dimitri/pgcopydb/archive/refs/tags/v0.17.tar.gz && \ |
| 35 | + mkdir /tmp/pgcopydb && \ |
| 36 | + tar -xzf /tmp/pgcopydb.tar.gz -C /tmp/pgcopydb --strip-components=1 && \ |
| 37 | + cd /tmp/pgcopydb && \ |
| 38 | + make -s clean && \ |
| 39 | + make -s -j12 install && \ |
| 40 | + libpq_path=$(find /lib /usr/lib -name "libpq.so.5" | head -n 1) && \ |
| 41 | + mkdir -p /pgcopydb/lib && \ |
| 42 | + cp "$libpq_path" /pgcopydb/lib/; \ |
| 43 | + else \ |
| 44 | + # copy command below will fail if we don't have dummy files, so we create them for other debian versions |
| 45 | + mkdir -p /usr/lib/postgresql/16/bin && touch /usr/lib/postgresql/16/bin/pgcopydb && \ |
| 46 | + mkdir -p mkdir -p /pgcopydb/lib && touch /pgcopydb/lib/libpq.so.5; \ |
| 47 | + fi |
| 48 | + |
| 49 | +FROM debian:${DEBIAN_VERSION}-slim AS build_tools |
4 | 50 | ARG DEBIAN_VERSION
|
5 | 51 |
|
6 | 52 | # Add nonroot user
|
7 | 53 | RUN useradd -ms /bin/bash nonroot -b /home
|
8 | 54 | SHELL ["/bin/bash", "-c"]
|
9 | 55 |
|
| 56 | +RUN mkdir -p /pgcopydb/bin && \ |
| 57 | + mkdir -p /pgcopydb/lib && \ |
| 58 | + chmod -R 755 /pgcopydb && \ |
| 59 | + chown -R nonroot:nonroot /pgcopydb |
| 60 | + |
| 61 | +COPY --from=pgcopydb_builder /usr/lib/postgresql/16/bin/pgcopydb /pgcopydb/bin/pgcopydb |
| 62 | +COPY --from=pgcopydb_builder /pgcopydb/lib/libpq.so.5 /pgcopydb/lib/libpq.so.5 |
| 63 | + |
10 | 64 | # System deps
|
11 | 65 | #
|
12 | 66 | # 'gdb' is included so that we get backtraces of core dumps produced in
|
@@ -38,7 +92,7 @@ RUN set -e \
|
38 | 92 | libseccomp-dev \
|
39 | 93 | libsqlite3-dev \
|
40 | 94 | libssl-dev \
|
41 |
| - $([[ "${DEBIAN_VERSION}" = "bullseye" ]] && libstdc++-10-dev || libstdc++-11-dev) \ |
| 95 | + $([[ "${DEBIAN_VERSION}" = "bullseye" ]] && echo libstdc++-10-dev || echo libstdc++-11-dev) \ |
42 | 96 | libtool \
|
43 | 97 | libxml2-dev \
|
44 | 98 | libxmlsec1-dev \
|
@@ -235,7 +289,13 @@ RUN whoami \
|
235 | 289 | && cargo --version --verbose \
|
236 | 290 | && rustup --version --verbose \
|
237 | 291 | && rustc --version --verbose \
|
238 |
| - && clang --version |
| 292 | + && clang --version |
| 293 | + |
| 294 | +RUN if [ "${DEBIAN_VERSION}" = "bookworm" ]; then \ |
| 295 | + LD_LIBRARY_PATH=/pgcopydb/lib /pgcopydb/bin/pgcopydb --version; \ |
| 296 | +else \ |
| 297 | + echo "pgcopydb is not available for ${DEBIAN_VERSION}"; \ |
| 298 | +fi |
239 | 299 |
|
240 | 300 | # Set following flag to check in Makefile if its running in Docker
|
241 | 301 | RUN touch /home/nonroot/.docker_build
|
0 commit comments