Skip to content

Commit 9132d80

Browse files
authored
add pgcopydb tool to build tools image (#9658)
## Problem build-tools image does not provide superuser, so additional packages can not be installed during GitHub benchmarking workflows but need to be added to the image ## Summary of changes install pgcopydb version 0.17-1 or higher into build-tools bookworm image ```bash docker run -it neondatabase/build-tools:<tag>-bookworm-arm64 /bin/bash ... nonroot@c23c6f4901ce:~$ LD_LIBRARY_PATH=/pgcopydb/lib /pgcopydb/bin/pgcopydb --version; 13:58:19.768 8 INFO Running pgcopydb version 0.17 from "/pgcopydb/bin/pgcopydb" pgcopydb version 0.17 compiled with PostgreSQL 16.4 (Debian 16.4-1.pgdg120+2) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit compatible with Postgres 11, 12, 13, 14, 15, and 16 ``` Example usage of that image in a workflow https://github.com/neondatabase/neon/actions/runs/11725718371/job/32662681172#step:7:14
1 parent 82e3f0e commit 9132d80

File tree

1 file changed

+63
-3
lines changed

1 file changed

+63
-3
lines changed

build-tools.Dockerfile

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,66 @@
11
ARG DEBIAN_VERSION=bullseye
22

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
450
ARG DEBIAN_VERSION
551

652
# Add nonroot user
753
RUN useradd -ms /bin/bash nonroot -b /home
854
SHELL ["/bin/bash", "-c"]
955

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+
1064
# System deps
1165
#
1266
# 'gdb' is included so that we get backtraces of core dumps produced in
@@ -38,7 +92,7 @@ RUN set -e \
3892
libseccomp-dev \
3993
libsqlite3-dev \
4094
libssl-dev \
41-
$([[ "${DEBIAN_VERSION}" = "bullseye" ]] && libstdc++-10-dev || libstdc++-11-dev) \
95+
$([[ "${DEBIAN_VERSION}" = "bullseye" ]] && echo libstdc++-10-dev || echo libstdc++-11-dev) \
4296
libtool \
4397
libxml2-dev \
4498
libxmlsec1-dev \
@@ -235,7 +289,13 @@ RUN whoami \
235289
&& cargo --version --verbose \
236290
&& rustup --version --verbose \
237291
&& 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
239299

240300
# Set following flag to check in Makefile if its running in Docker
241301
RUN touch /home/nonroot/.docker_build

0 commit comments

Comments
 (0)