From 85ff8345e7b2316e9ce4315a24249b935d6863e7 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Thu, 28 Aug 2025 20:24:24 -0700 Subject: [PATCH] Update to Debian Trixie+-isms (`apt-get dist-clean`) and prepare for PG 18+ directory change --- 13-to-14/Dockerfile | 19 +++++++++++++------ 13-to-15/Dockerfile | 19 +++++++++++++------ 13-to-16/Dockerfile | 19 +++++++++++++------ 13-to-17/Dockerfile | 19 +++++++++++++------ 14-to-15/Dockerfile | 19 +++++++++++++------ 14-to-16/Dockerfile | 19 +++++++++++++------ 14-to-17/Dockerfile | 19 +++++++++++++------ 15-to-16/Dockerfile | 19 +++++++++++++------ 15-to-17/Dockerfile | 19 +++++++++++++------ 16-to-17/Dockerfile | 19 +++++++++++++------ Dockerfile.template | 36 +++++++++++++++++++++++++++--------- 11 files changed, 157 insertions(+), 69 deletions(-) diff --git a/13-to-14/Dockerfile b/13-to-14/Dockerfile index 24c7143..1338405 100644 --- a/13-to-14/Dockerfile +++ b/13-to-14/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:14-trixie RUN sed -i 's/$/ 13/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-13='13.22-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/13/bin ENV PGBINNEW /usr/lib/postgresql/14/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/13/data ENV PGDATANEW /var/lib/postgresql/14/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/13-to-15/Dockerfile b/13-to-15/Dockerfile index 3d79d91..3f84f04 100644 --- a/13-to-15/Dockerfile +++ b/13-to-15/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:15-trixie RUN sed -i 's/$/ 13/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-13='13.22-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/13/bin ENV PGBINNEW /usr/lib/postgresql/15/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/13/data ENV PGDATANEW /var/lib/postgresql/15/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/13-to-16/Dockerfile b/13-to-16/Dockerfile index d12f7c3..45b6737 100644 --- a/13-to-16/Dockerfile +++ b/13-to-16/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:16-trixie RUN sed -i 's/$/ 13/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-13='13.22-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/13/bin ENV PGBINNEW /usr/lib/postgresql/16/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/13/data ENV PGDATANEW /var/lib/postgresql/16/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/13-to-17/Dockerfile b/13-to-17/Dockerfile index 90546ae..d41eff1 100644 --- a/13-to-17/Dockerfile +++ b/13-to-17/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:17-trixie RUN sed -i 's/$/ 13/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-13='13.22-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/13/bin ENV PGBINNEW /usr/lib/postgresql/17/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/13/data ENV PGDATANEW /var/lib/postgresql/17/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/14-to-15/Dockerfile b/14-to-15/Dockerfile index ef289ea..c5e6c0b 100644 --- a/14-to-15/Dockerfile +++ b/14-to-15/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:15-trixie RUN sed -i 's/$/ 14/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-14='14.19-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/14/bin ENV PGBINNEW /usr/lib/postgresql/15/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/14/data ENV PGDATANEW /var/lib/postgresql/15/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/14-to-16/Dockerfile b/14-to-16/Dockerfile index e89e409..2eae821 100644 --- a/14-to-16/Dockerfile +++ b/14-to-16/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:16-trixie RUN sed -i 's/$/ 14/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-14='14.19-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/14/bin ENV PGBINNEW /usr/lib/postgresql/16/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/14/data ENV PGDATANEW /var/lib/postgresql/16/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/14-to-17/Dockerfile b/14-to-17/Dockerfile index 5710ea6..c272836 100644 --- a/14-to-17/Dockerfile +++ b/14-to-17/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:17-trixie RUN sed -i 's/$/ 14/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-14='14.19-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/14/bin ENV PGBINNEW /usr/lib/postgresql/17/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/14/data ENV PGDATANEW /var/lib/postgresql/17/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/15-to-16/Dockerfile b/15-to-16/Dockerfile index 7f4c5da..f8171be 100644 --- a/15-to-16/Dockerfile +++ b/15-to-16/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:16-trixie RUN sed -i 's/$/ 15/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-15='15.14-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/15/bin ENV PGBINNEW /usr/lib/postgresql/16/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/15/data ENV PGDATANEW /var/lib/postgresql/16/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/15-to-17/Dockerfile b/15-to-17/Dockerfile index 6e85889..0696bd3 100644 --- a/15-to-17/Dockerfile +++ b/15-to-17/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:17-trixie RUN sed -i 's/$/ 15/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-15='15.14-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/15/bin ENV PGBINNEW /usr/lib/postgresql/17/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/15/data ENV PGDATANEW /var/lib/postgresql/17/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/16-to-17/Dockerfile b/16-to-17/Dockerfile index 2c2298c..ef75922 100644 --- a/16-to-17/Dockerfile +++ b/16-to-17/Dockerfile @@ -9,21 +9,28 @@ FROM postgres:17-trixie RUN sed -i 's/$/ 16/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-16='16.10-1.pgdg13+1' \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/16/bin ENV PGBINNEW /usr/lib/postgresql/17/bin +RUN set -eux; \ + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version ENV PGDATAOLD /var/lib/postgresql/16/data ENV PGDATANEW /var/lib/postgresql/17/data -RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql diff --git a/Dockerfile.template b/Dockerfile.template index 287e789..89e2d2e 100644 --- a/Dockerfile.template +++ b/Dockerfile.template @@ -3,21 +3,39 @@ FROM {{ .from }} RUN sed -i 's/$/ {{ .old }}/' /etc/apt/sources.list.d/pgdg.list RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ + apt-get install --update -y --no-install-recommends \ postgresql-{{ .old }}={{ .version | @sh }} \ ; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean ENV PGBINOLD /usr/lib/postgresql/{{ .old }}/bin ENV PGBINNEW /usr/lib/postgresql/{{ .new }}/bin - -ENV PGDATAOLD /var/lib/postgresql/{{ .old }}/data -ENV PGDATANEW /var/lib/postgresql/{{ .new }}/data - RUN set -eux; \ - mkdir -p "$PGDATAOLD" "$PGDATANEW"; \ - chown -R postgres:postgres /var/lib/postgresql + "$PGBINOLD/postgres" --version; \ + "$PGBINNEW/postgres" --version + +{{ + def dir($ver): + "/var/lib/postgresql/\($ver)/\( + # TODO swap 100% from /data to /docker (https://github.com/docker-library/postgres/pull/1259) + if IN($ver; "13", "14", "15", "16", "17") then + "data" + else + "docker" + end + )" +-}} +ENV PGDATAOLD {{ dir(.old) }} +ENV PGDATANEW {{ dir(.new) }} + +RUN install \ + --verbose \ + --owner postgres \ + --group postgres \ + --mode 1777 \ + --directory \ + "$PGDATAOLD" \ + "$PGDATANEW" WORKDIR /var/lib/postgresql