From 7dfab6a7e0392ca0d500de5d917c9adbad0cf9a4 Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Thu, 13 Nov 2025 12:13:57 +0100 Subject: [PATCH 01/10] feat(all): add python 3.12 and python 3.13 --- .github/workflows/Docker-images.yml | 52 +++++++++++++++++++++++ Dockerfile.ubi9 | 2 - build/Python312/Dockerfile.ubi9 | 60 ++++++++++++++++++++++++++ build/Python313/Dockerfile.ubi9 | 60 ++++++++++++++++++++++++++ runtime/Python312/Dockerfile.ubi9 | 65 +++++++++++++++++++++++++++++ runtime/Python313/Dockerfile.ubi9 | 65 +++++++++++++++++++++++++++++ 6 files changed, 302 insertions(+), 2 deletions(-) create mode 100644 build/Python312/Dockerfile.ubi9 create mode 100644 build/Python313/Dockerfile.ubi9 create mode 100644 runtime/Python312/Dockerfile.ubi9 create mode 100644 runtime/Python313/Dockerfile.ubi9 diff --git a/.github/workflows/Docker-images.yml b/.github/workflows/Docker-images.yml index 3d8f5f9..0a15d39 100644 --- a/.github/workflows/Docker-images.yml +++ b/.github/workflows/Docker-images.yml @@ -80,6 +80,58 @@ jobs: secrets: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + build_ubi9_python313_image: + needs: [ tags, build_ubi9_image ] + uses: ./.github/workflows/Docker.yml + with: + image_name: "axaguildev/build-ubi9-python3.13" + image_version: ${{ needs.tags.outputs.new_version }} + image_build_args: "baseImage=axaguildev/build-ubi9:${{ needs.tags.outputs.new_version }}" + image_context: ./build/Python311 + image_file: "./build/Python313/Dockerfile.ubi9" + secrets: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + runtime_ubi9_python313_image: + needs: [ tags,runtime_ubi9_image ] + uses: ./.github/workflows/Docker.yml + with: + image_name: "axaguildev/runtime-ubi9-python3.13" + image_version: ${{ needs.tags.outputs.new_version }} + image_build_args: "baseImage=axaguildev/runtime-ubi9:${{ needs.tags.outputs.new_version }}" + image_context: ./runtime/Python311 + image_file: "./runtime/Python313/Dockerfile.ubi9" + secrets: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + build_ubi9_python312_image: + needs: [ tags, build_ubi9_image ] + uses: ./.github/workflows/Docker.yml + with: + image_name: "axaguildev/build-ubi9-python3.12" + image_version: ${{ needs.tags.outputs.new_version }} + image_build_args: "baseImage=axaguildev/build-ubi9:${{ needs.tags.outputs.new_version }}" + image_context: ./build/Python311 + image_file: "./build/Python312/Dockerfile.ubi9" + secrets: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + runtime_ubi9_python312_image: + needs: [ tags,runtime_ubi9_image ] + uses: ./.github/workflows/Docker.yml + with: + image_name: "axaguildev/runtime-ubi9-python3.12" + image_version: ${{ needs.tags.outputs.new_version }} + image_build_args: "baseImage=axaguildev/runtime-ubi9:${{ needs.tags.outputs.new_version }}" + image_context: ./runtime/Python311 + image_file: "./runtime/Python312/Dockerfile.ubi9" + secrets: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} build_ubi9_python311_image: needs: [ tags, build_ubi9_image ] diff --git a/Dockerfile.ubi9 b/Dockerfile.ubi9 index c37bfe4..72bfd06 100644 --- a/Dockerfile.ubi9 +++ b/Dockerfile.ubi9 @@ -1,8 +1,6 @@ ARG baseImage FROM ${baseImage} - - LABEL target="os" LABEL stack="ubi" LABEL os="linux" diff --git a/build/Python312/Dockerfile.ubi9 b/build/Python312/Dockerfile.ubi9 new file mode 100644 index 0000000..c51b7a2 --- /dev/null +++ b/build/Python312/Dockerfile.ubi9 @@ -0,0 +1,60 @@ +ARG baseImage +FROM ${baseImage} as build + +ENV PYTHON_VERSION 3.12 +ENV PYTHON_PATCH_VERSION 12 +ENV ARCH amd64 + +ENV PYTHON_DIR=/opt/python +ENV PATH ${PYTHON_DIR}/bin:$PATH +ENV LANG C.UTF-8 + +WORKDIR ${HOME} + + +RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ + --build="$ARCH" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j "$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + + +FROM ${baseImage} as runtime + +ENV PYTHON_DIR=/opt/python +ENV PATH ${PYTHON_DIR}/bin:$PATH +ENV LANG C.UTF-8 + +ENV PYTHON_VERSION 3.12 +ENV PYTHON_PATCH_VERSION 12 + +COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +RUN ldconfig ${PYTHON_DIR}/lib + +# - In order to drop the root user, we have to make some directories world +# writable as OpenShift default security model is to run the container +# under random UID. +RUN chown -R ${USER}:0 ${APP_ROOT} && \ + chmod +x /usr/bin/fix-permissions && \ + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions + +USER ${USER} + +RUN python3 -m pip install --upgrade --user pip wheel && find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; \ No newline at end of file diff --git a/build/Python313/Dockerfile.ubi9 b/build/Python313/Dockerfile.ubi9 new file mode 100644 index 0000000..331129d --- /dev/null +++ b/build/Python313/Dockerfile.ubi9 @@ -0,0 +1,60 @@ +ARG baseImage +FROM ${baseImage} as build + +ENV PYTHON_VERSION 3.13 +ENV PYTHON_PATCH_VERSION 8 +ENV ARCH amd64 + +ENV PYTHON_DIR=/opt/python +ENV PATH ${PYTHON_DIR}/bin:$PATH +ENV LANG C.UTF-8 + +WORKDIR ${HOME} + + +RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ + --build="$ARCH" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j "$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + + +FROM ${baseImage} as runtime + +ENV PYTHON_DIR=/opt/python +ENV PATH ${PYTHON_DIR}/bin:$PATH +ENV LANG C.UTF-8 + +ENV PYTHON_VERSION 3.13 +ENV PYTHON_PATCH_VERSION 8 + +COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +RUN ldconfig ${PYTHON_DIR}/lib + +# - In order to drop the root user, we have to make some directories world +# writable as OpenShift default security model is to run the container +# under random UID. +RUN chown -R ${USER}:0 ${APP_ROOT} && \ + chmod +x /usr/bin/fix-permissions && \ + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions + +USER ${USER} + +RUN python3 -m pip install --upgrade --user pip wheel && find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; \ No newline at end of file diff --git a/runtime/Python312/Dockerfile.ubi9 b/runtime/Python312/Dockerfile.ubi9 new file mode 100644 index 0000000..ed8e07c --- /dev/null +++ b/runtime/Python312/Dockerfile.ubi9 @@ -0,0 +1,65 @@ +ARG baseImage + +FROM ${baseImage} as build + +ENV PYTHON_VERSION 3.12 +ENV PYTHON_PATCH_VERSION 12 +ENV ARCH amd64 + +ENV PYTHON_DIR=/opt/python +ENV PATH ${PYTHON_DIR}/bin:$PATH +ENV LANG C.UTF-8 + +WORKDIR ${HOME} + +RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ + --build="$ARCH" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j "$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + + +FROM ${baseImage} as runtime + +ENV PYTHON_DIR=/opt/python +ENV PATH ${PYTHON_DIR}/bin:$PATH +ENV LANG C.UTF-8 + +ENV PYTHON_VERSION 3.12 +ENV PYTHON_PATCH_VERSION 12 + +RUN INSTALL_PKGS="expat" && \ + microdnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ + rpm -V $INSTALL_PKGS && \ + microdnf -y clean all --enablerepo='*' + +COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +RUN ldconfig ${PYTHON_DIR}/lib + +# - In order to drop the root user, we have to make some directories world +# writable as OpenShift default security model is to run the container +# under random UID. +RUN chown -R ${USER}:0 ${APP_ROOT} && \ + chmod +x /usr/bin/fix-permissions && \ + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions + +ENV PYTHONPATH=${PYTHON_DIR}/lib/python3.12/site-packages + +USER ${USER} \ No newline at end of file diff --git a/runtime/Python313/Dockerfile.ubi9 b/runtime/Python313/Dockerfile.ubi9 new file mode 100644 index 0000000..2f24894 --- /dev/null +++ b/runtime/Python313/Dockerfile.ubi9 @@ -0,0 +1,65 @@ +ARG baseImage + +FROM ${baseImage} as build + +ENV PYTHON_VERSION 3.13 +ENV PYTHON_PATCH_VERSION 8 +ENV ARCH amd64 + +ENV PYTHON_DIR=/opt/python +ENV PATH ${PYTHON_DIR}/bin:$PATH +ENV LANG C.UTF-8 + +WORKDIR ${HOME} + +RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ + --build="$ARCH" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j "$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + + +FROM ${baseImage} as runtime + +ENV PYTHON_DIR=/opt/python +ENV PATH ${PYTHON_DIR}/bin:$PATH +ENV LANG C.UTF-8 + +ENV PYTHON_VERSION 3.13 +ENV PYTHON_PATCH_VERSION 8 + +RUN INSTALL_PKGS="expat" && \ + microdnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ + rpm -V $INSTALL_PKGS && \ + microdnf -y clean all --enablerepo='*' + +COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +RUN ldconfig ${PYTHON_DIR}/lib + +# - In order to drop the root user, we have to make some directories world +# writable as OpenShift default security model is to run the container +# under random UID. +RUN chown -R ${USER}:0 ${APP_ROOT} && \ + chmod +x /usr/bin/fix-permissions && \ + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions + +ENV PYTHONPATH=${PYTHON_DIR}/lib/python3.13/site-packages + +USER ${USER} \ No newline at end of file From 8162e08625dd1ce7f16d246304a536dfda157d6f Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Thu, 13 Nov 2025 15:11:54 +0100 Subject: [PATCH 02/10] remove --with-system-ffi \ --- build/Python312/Dockerfile.ubi9 | 1 - build/Python313/Dockerfile.ubi9 | 1 - runtime/Python312/Dockerfile.ubi9 | 1 - runtime/Python313/Dockerfile.ubi9 | 1 - 4 files changed, 4 deletions(-) diff --git a/build/Python312/Dockerfile.ubi9 b/build/Python312/Dockerfile.ubi9 index c51b7a2..5b77bfb 100644 --- a/build/Python312/Dockerfile.ubi9 +++ b/build/Python312/Dockerfile.ubi9 @@ -23,7 +23,6 @@ RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi- --enable-option-checking=fatal \ --enable-shared \ --with-system-expat \ - --with-system-ffi \ && make -j "$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ diff --git a/build/Python313/Dockerfile.ubi9 b/build/Python313/Dockerfile.ubi9 index 331129d..5835871 100644 --- a/build/Python313/Dockerfile.ubi9 +++ b/build/Python313/Dockerfile.ubi9 @@ -23,7 +23,6 @@ RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi- --enable-option-checking=fatal \ --enable-shared \ --with-system-expat \ - --with-system-ffi \ && make -j "$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ diff --git a/runtime/Python312/Dockerfile.ubi9 b/runtime/Python312/Dockerfile.ubi9 index ed8e07c..b2a8cb9 100644 --- a/runtime/Python312/Dockerfile.ubi9 +++ b/runtime/Python312/Dockerfile.ubi9 @@ -23,7 +23,6 @@ RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel li --enable-option-checking=fatal \ --enable-shared \ --with-system-expat \ - --with-system-ffi \ && make -j "$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ diff --git a/runtime/Python313/Dockerfile.ubi9 b/runtime/Python313/Dockerfile.ubi9 index 2f24894..a96dcc2 100644 --- a/runtime/Python313/Dockerfile.ubi9 +++ b/runtime/Python313/Dockerfile.ubi9 @@ -23,7 +23,6 @@ RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel li --enable-option-checking=fatal \ --enable-shared \ --with-system-expat \ - --with-system-ffi \ && make -j "$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ From b88a7e2dee025c5ce878fe8285ef8c9f317f5749 Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Thu, 13 Nov 2025 16:04:02 +0100 Subject: [PATCH 03/10] update --- build/Python311/Dockerfile.ubi9 | 4 +-- build/Python313/Dockerfile.ubi9 | 44 ++++++++++++++++++------------- runtime/Python311/Dockerfile.ubi9 | 4 +-- runtime/Python313/Dockerfile.ubi9 | 44 ++++++++++++++++++------------- 4 files changed, 54 insertions(+), 42 deletions(-) diff --git a/build/Python311/Dockerfile.ubi9 b/build/Python311/Dockerfile.ubi9 index 1ec090f..a28433c 100644 --- a/build/Python311/Dockerfile.ubi9 +++ b/build/Python311/Dockerfile.ubi9 @@ -2,7 +2,7 @@ ARG baseImage FROM ${baseImage} as build ENV PYTHON_VERSION 3.11 -ENV PYTHON_PATCH_VERSION 13 +ENV PYTHON_PATCH_VERSION 14 ENV ARCH amd64 ENV PYTHON_DIR=/opt/python @@ -41,7 +41,7 @@ ENV PATH ${PYTHON_DIR}/bin:$PATH ENV LANG C.UTF-8 ENV PYTHON_VERSION 3.11 -ENV PYTHON_PATCH_VERSION 13 +ENV PYTHON_PATCH_VERSION 14 COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} diff --git a/build/Python313/Dockerfile.ubi9 b/build/Python313/Dockerfile.ubi9 index 5835871..122b4c0 100644 --- a/build/Python313/Dockerfile.ubi9 +++ b/build/Python313/Dockerfile.ubi9 @@ -13,25 +13,31 @@ WORKDIR ${HOME} RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ - && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ - && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - && make -j "$(nproc)" \ - && make install \ - && ldconfig ${PYTHON_DIR}/lib \ - && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + +ENV PYTHON_SKIP_TESTS="test_xml_etree_c" + +RUN dnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ + zlib-devel sqlite-devel ncurses-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ + --build="$ARCH" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + && make -j"$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + + FROM ${baseImage} as runtime diff --git a/runtime/Python311/Dockerfile.ubi9 b/runtime/Python311/Dockerfile.ubi9 index b6fb9b6..0062b59 100644 --- a/runtime/Python311/Dockerfile.ubi9 +++ b/runtime/Python311/Dockerfile.ubi9 @@ -3,7 +3,7 @@ ARG baseImage FROM ${baseImage} as build ENV PYTHON_VERSION 3.11 -ENV PYTHON_PATCH_VERSION 13 +ENV PYTHON_PATCH_VERSION 14 ENV ARCH amd64 ENV PYTHON_DIR=/opt/python @@ -41,7 +41,7 @@ ENV PATH ${PYTHON_DIR}/bin:$PATH ENV LANG C.UTF-8 ENV PYTHON_VERSION 3.11 -ENV PYTHON_PATCH_VERSION 13 +ENV PYTHON_PATCH_VERSION 14 RUN INSTALL_PKGS="expat" && \ microdnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ diff --git a/runtime/Python313/Dockerfile.ubi9 b/runtime/Python313/Dockerfile.ubi9 index a96dcc2..4287dda 100644 --- a/runtime/Python313/Dockerfile.ubi9 +++ b/runtime/Python313/Dockerfile.ubi9 @@ -13,25 +13,31 @@ ENV LANG C.UTF-8 WORKDIR ${HOME} RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ - && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ - && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - && make -j "$(nproc)" \ - && make install \ - && ldconfig ${PYTHON_DIR}/lib \ - && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + +ENV PYTHON_SKIP_TESTS="test_xml_etree_c" + +RUN dnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ + zlib-devel sqlite-devel ncurses-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ + --build="$ARCH" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + && make -j"$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + + FROM ${baseImage} as runtime From 9941194a59385d3768168e414fb939b8ec42145f Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Fri, 14 Nov 2025 11:49:48 +0100 Subject: [PATCH 04/10] update --- build/Python313/Dockerfile.ubi9 | 13 +++++-------- runtime/Python313/Dockerfile.ubi9 | 13 +++++-------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/build/Python313/Dockerfile.ubi9 b/build/Python313/Dockerfile.ubi9 index 122b4c0..e6370b6 100644 --- a/build/Python313/Dockerfile.ubi9 +++ b/build/Python313/Dockerfile.ubi9 @@ -15,17 +15,14 @@ WORKDIR ${HOME} RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ ENV PYTHON_SKIP_TESTS="test_xml_etree_c" -RUN dnf install -y --setopt=tsflags=nodocs \ - gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ - zlib-devel sqlite-devel ncurses-devel \ - && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ +RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ && ./configure --prefix=${PYTHON_DIR} \ --build="$ARCH" \ --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ --enable-shared \ --with-system-expat \ && make -j"$(nproc)" \ diff --git a/runtime/Python313/Dockerfile.ubi9 b/runtime/Python313/Dockerfile.ubi9 index 4287dda..bce4360 100644 --- a/runtime/Python313/Dockerfile.ubi9 +++ b/runtime/Python313/Dockerfile.ubi9 @@ -15,17 +15,14 @@ WORKDIR ${HOME} RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ ENV PYTHON_SKIP_TESTS="test_xml_etree_c" -RUN dnf install -y --setopt=tsflags=nodocs \ - gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ - zlib-devel sqlite-devel ncurses-devel \ - && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ +microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ && ./configure --prefix=${PYTHON_DIR} \ --build="$ARCH" \ --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ --enable-shared \ --with-system-expat \ && make -j"$(nproc)" \ From d6b73541f953be193019f4ac17c09941e386846b Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Fri, 14 Nov 2025 15:59:26 +0100 Subject: [PATCH 05/10] test --- build/Python313/Dockerfile.ubi9 | 4 ---- runtime/Python313/Dockerfile.ubi9 | 3 --- 2 files changed, 7 deletions(-) diff --git a/build/Python313/Dockerfile.ubi9 b/build/Python313/Dockerfile.ubi9 index e6370b6..c7b6cf4 100644 --- a/build/Python313/Dockerfile.ubi9 +++ b/build/Python313/Dockerfile.ubi9 @@ -11,10 +11,6 @@ ENV LANG C.UTF-8 WORKDIR ${HOME} - -RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ -ENV PYTHON_SKIP_TESTS="test_xml_etree_c" - RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ diff --git a/runtime/Python313/Dockerfile.ubi9 b/runtime/Python313/Dockerfile.ubi9 index bce4360..c7be95f 100644 --- a/runtime/Python313/Dockerfile.ubi9 +++ b/runtime/Python313/Dockerfile.ubi9 @@ -12,9 +12,6 @@ ENV LANG C.UTF-8 WORKDIR ${HOME} -RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ -ENV PYTHON_SKIP_TESTS="test_xml_etree_c" - microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ From e9f3a1622252de6b2ef5a623c79d8b3e34a76e3d Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Fri, 14 Nov 2025 16:18:04 +0100 Subject: [PATCH 06/10] fix --- runtime/Python313/Dockerfile.ubi9 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/Python313/Dockerfile.ubi9 b/runtime/Python313/Dockerfile.ubi9 index c7be95f..577f27f 100644 --- a/runtime/Python313/Dockerfile.ubi9 +++ b/runtime/Python313/Dockerfile.ubi9 @@ -12,7 +12,7 @@ ENV LANG C.UTF-8 WORKDIR ${HOME} -microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ +RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ From 64efb77deff61752a67afd9e142002932871929e Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Fri, 14 Nov 2025 17:01:37 +0100 Subject: [PATCH 07/10] multi arch remove ubi8 --- .github/workflows/Docker-images.yml | 92 ----------------------------- .github/workflows/Docker.yml | 8 +++ Dockerfile.ubi8 | 64 -------------------- Dockerfile.ubi8-minimal | 61 ------------------- Dockerfile.ubi8-tesseract | 37 ------------ build/Python310/Dockerfile.ubi8 | 58 ------------------ build/Python310/Dockerfile.ubi9 | 54 +++++++++-------- build/Python311/Dockerfile.ubi9 | 56 +++++++++--------- build/Python312/Dockerfile.ubi9 | 54 ++++++++--------- build/Python313/Dockerfile.ubi9 | 57 +++++++++--------- build/Python38/Dockerfile.ubi8 | 20 ------- build/Python38/Dockerfile.ubi9 | 54 +++++++++-------- runtime/Python310/Dockerfile.ubi8 | 64 -------------------- runtime/Python310/Dockerfile.ubi9 | 45 +++++++------- runtime/Python311/Dockerfile.ubi9 | 42 ++++++------- runtime/Python312/Dockerfile.ubi9 | 40 ++++++------- runtime/Python313/Dockerfile.ubi9 | 44 +++++++------- runtime/Python38/Dockerfile.ubi8 | 21 ------- runtime/Python38/Dockerfile.ubi9 | 43 +++++++------- 19 files changed, 252 insertions(+), 662 deletions(-) delete mode 100644 Dockerfile.ubi8 delete mode 100644 Dockerfile.ubi8-minimal delete mode 100644 Dockerfile.ubi8-tesseract delete mode 100644 build/Python310/Dockerfile.ubi8 delete mode 100644 build/Python38/Dockerfile.ubi8 delete mode 100644 runtime/Python310/Dockerfile.ubi8 delete mode 100644 runtime/Python38/Dockerfile.ubi8 diff --git a/.github/workflows/Docker-images.yml b/.github/workflows/Docker-images.yml index 0a15d39..e579dd8 100644 --- a/.github/workflows/Docker-images.yml +++ b/.github/workflows/Docker-images.yml @@ -251,95 +251,3 @@ jobs: image_name: "axaguildev/build-ubi9-python3.11-tesseract" image_version: ${{ needs.tags.outputs.new_version }} image_build_args: "baseImage=axaguildev/build-ubi9-python3.11:${{ needs.tags.outputs.new_version }}" - - - build_ubi8_image: - needs: tags - uses: ./.github/workflows/Docker.yml - with: - image_name: "axaguildev/build-ubi8" - image_version: "${{ needs.tags.outputs.new_version }}" - image_build_args: "baseImage=registry.access.redhat.com/ubi8/ubi:latest" - image_context: ./ubi - image_file: "./Dockerfile.ubi8" - secrets: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - runtime_ubi8_image: - needs: tags - uses: ./.github/workflows/Docker.yml - with: - image_name: "axaguildev/runtime-ubi8" - image_version: ${{ needs.tags.outputs.new_version }} - image_build_args: "baseImage=registry.access.redhat.com/ubi8/ubi-minimal:latest" - image_context: ./ubi - image_file: "./Dockerfile.ubi8-minimal" - secrets: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - build_ubi8_python38_image: - needs: [tags,build_ubi8_image] - uses: ./.github/workflows/Docker.yml - with: - image_name: "axaguildev/build-ubi8-python3.8" - image_version: ${{ needs.tags.outputs.new_version }} - image_build_args: "baseImage=axaguildev/build-ubi8:${{ needs.tags.outputs.new_version }}" - image_context: ./build/Python38 - image_file: "./build/Python38/Dockerfile.ubi8" - secrets: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - runtime_ubi8_python38_image: - needs: [tags,runtime_ubi8_image] - uses: ./.github/workflows/Docker.yml - with: - image_name: "axaguildev/runtime-ubi8-python3.8" - image_version: ${{ needs.tags.outputs.new_version }} - image_build_args: "baseImage=axaguildev/runtime-ubi8:${{ needs.tags.outputs.new_version }}" - image_context: ./runtime/Python38 - image_file: "./runtime/Python38/Dockerfile.ubi8" - secrets: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - build_python310_image: - needs: [tags,build_ubi8_image] - uses: ./.github/workflows/Docker.yml - with: - image_name: "axaguildev/build-ubi8-python3.10" - image_version: ${{ needs.tags.outputs.new_version }} - image_build_args: "baseImage=axaguildev/build-ubi8:${{ needs.tags.outputs.new_version }} " - image_context: ./build/Python310 - image_file: "./build/Python310/Dockerfile.ubi8" - secrets: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - runtime_ubi8_python310_image: - needs: [tags,runtime_ubi8_image] - uses: ./.github/workflows/Docker.yml - with: - image_name: "axaguildev/runtime-ubi8-python3.10" - image_version: ${{ needs.tags.outputs.new_version }} - image_build_args: "baseImage=axaguildev/runtime-ubi8:${{ needs.tags.outputs.new_version }}" - image_context: ./runtime/Python310 - image_file: "./runtime/Python310/Dockerfile.ubi8" - secrets: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - build_ubi8_python38_tesseract_image: - needs: [tags,build_ubi8_image,build_ubi8_python38_image] - uses: ./.github/workflows/Docker.yml - secrets: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - with: - image_context: ./ubi - image_file : "./Dockerfile.ubi8-tesseract" - image_name: "axaguildev/build-ubi8-python3.8-tesseract" - image_version: ${{ needs.tags.outputs.new_version }} - image_build_args: "baseImage=axaguildev/build-ubi8-python3.8:${{ needs.tags.outputs.new_version }}" \ No newline at end of file diff --git a/.github/workflows/Docker.yml b/.github/workflows/Docker.yml index eedf7d3..bab1ddd 100644 --- a/.github/workflows/Docker.yml +++ b/.github/workflows/Docker.yml @@ -33,6 +33,12 @@ jobs: - uses: actions/checkout@v3 with: fetch-depth: 0 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - name: Log in to Docker Hub uses: docker/login-action@v2 @@ -54,6 +60,7 @@ jobs: file : ${{ inputs.image_file }} build-args: ${{ inputs.image_build_args }} push: true + platforms: linux/amd64,linux/arm64 tags: ${{ inputs.image_name }}:${{ inputs.image_version }},${{ inputs.image_name }}:latest labels: ${{ steps.meta.outputs.labels }} @@ -65,5 +72,6 @@ jobs: file : ${{ inputs.image_file }} build-args: ${{ inputs.image_build_args }} push: true + platforms: linux/amd64,linux/arm64 tags: ${{ inputs.image_name }}:${{ inputs.image_version }} labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile.ubi8 b/Dockerfile.ubi8 deleted file mode 100644 index c37bfe4..0000000 --- a/Dockerfile.ubi8 +++ /dev/null @@ -1,64 +0,0 @@ -ARG baseImage -FROM ${baseImage} - - - -LABEL target="os" -LABEL stack="ubi" -LABEL os="linux" -LABEL description="ubi os image" - -ENV \ - APP_ROOT=/opt/app-root \ - # The $HOME is not set by default, but some applications needs this variable - HOME=/opt/app-root \ - PATH=/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \ - USER=1001 \ - PLATFORM="el8" - -RUN INSTALL_PKGS="bsdtar \ - findutils \ - groff-base \ - glibc-locale-source \ - glibc-langpack-en \ - gettext \ - rsync \ - scl-utils \ - tar \ - unzip \ - xz \ - openssl" && \ - mkdir -p ${HOME}/.pki/nssdb && \ - chown -R ${USER}:0 ${HOME}/.pki && \ - dnf install -y --setopt=tsflags=nodocs --noplugins $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - dnf -y clean all --enablerepo='*' - -ENV LANG C.utf8 -ENV LC_CTYPE C.utf8 -ENV LC_NUMERIC C.utf8 -ENV LC_TIME C.utf8 -ENV LC_COLLATE C.utf8 -ENV LC_MONETARY C.utf8 -ENV LC_MESSAGES C.utf8 -ENV LC_PAPER C.utf8 -ENV LC_NAME C.utf8 -ENV LC_ADDRESS C.utf8 -ENV LC_TELEPHONE C.utf8 -ENV LC_MEASUREMENT C.utf8 -ENV LC_IDENTIFICATION C.utf8 -ENV LC_ALL C.utf8 - -#USER root -# Copy extra files to the image. -COPY ./root/ / - -# Reset permissions of modified directories and add default user -RUN chmod +x /usr/bin/rpm-file-permissions && \ - rpm-file-permissions && \ - useradd -u ${USER} -r -g 0 -d ${HOME} -s /sbin/nologin \ - -c "Default Application User" default && \ - chown -R ${USER}:0 ${APP_ROOT} - -WORKDIR ${APP_ROOT} - diff --git a/Dockerfile.ubi8-minimal b/Dockerfile.ubi8-minimal deleted file mode 100644 index 027995d..0000000 --- a/Dockerfile.ubi8-minimal +++ /dev/null @@ -1,61 +0,0 @@ -ARG baseImage -FROM ${baseImage} - -#### Labels -## target : define the image purpose -## alm_base / alm_build / alm_release => AzureDevOps agents -## os => base os image -## build => stack build image -## runtime => stack runtime -LABEL target="os" -## stack : define the stack (ex python, tomcat, alm, ...) -LABEL stack="ubi" -## os : define the os -LABEL os="linux" -## description -LABEL description="ubi os image" -#### Envs -## specific - -ENV \ - APP_ROOT=/opt/app-root \ - # The $HOME is not set by default, but some applications needs this variable - HOME=/opt/app-root \ - PATH=/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \ - USER=1001 \ - PLATFORM="el8" - -RUN INSTALL_PKGS="shadow-utils findutils openssl gettext" && \ - mkdir -p ${HOME}/.pki/nssdb && \ - chown -R ${USER}:0 ${HOME}/.pki && \ - microdnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - microdnf -y clean all --enablerepo='*' - -ENV LANG C.utf8 -ENV LC_CTYPE C.utf8 -ENV LC_NUMERIC C.utf8 -ENV LC_TIME C.utf8 -ENV LC_COLLATE C.utf8 -ENV LC_MONETARY C.utf8 -ENV LC_MESSAGES C.utf8 -ENV LC_PAPER C.utf8 -ENV LC_NAME C.utf8 -ENV LC_ADDRESS C.utf8 -ENV LC_TELEPHONE C.utf8 -ENV LC_MEASUREMENT C.utf8 -ENV LC_IDENTIFICATION C.utf8 -ENV LC_ALL C.utf8 - -# Copy extra files to the image. -COPY ./root/ / - -# Reset permissions of modified directories and add default user -RUN chmod +x /usr/bin/rpm-file-permissions && rpm-file-permissions && \ - useradd -u ${USER} -r -g 0 -d ${HOME} -s /sbin/nologin \ - -c "Default Application User" default && \ - mkdir -p ${APP_ROOT} && \ - chown -R ${USER}:0 ${APP_ROOT} - -WORKDIR ${APP_ROOT} - diff --git a/Dockerfile.ubi8-tesseract b/Dockerfile.ubi8-tesseract deleted file mode 100644 index e0a2cd8..0000000 --- a/Dockerfile.ubi8-tesseract +++ /dev/null @@ -1,37 +0,0 @@ -ARG baseImage -FROM ${baseImage} - -USER root - -RUN INSTALL_PKGS="automake libtool libjpeg-turbo-devel zlib-devel libwebp-devel libtiff-devel libpng-devel" && \ - dnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - dnf -y clean all --enablerepo='*' - -USER ${USER} - -ENV TESSERACT_VERSION=4.1.1 -ENV LEPTONICA_VERSION=1.80.0 - -WORKDIR ${APP_ROOT} - -ENV LOCAL=${APP_ROOT}/local - -RUN curl -fsSL https://github.com/DanBloomberg/leptonica/releases/download/${LEPTONICA_VERSION}/leptonica-${LEPTONICA_VERSION}.tar.gz -O && \ - tar xvfz leptonica-${LEPTONICA_VERSION}.tar.gz && \ - cd leptonica-${LEPTONICA_VERSION} && \ - ./autogen.sh && \ - ./configure --prefix=${LOCAL} && \ - make && \ - make install - -ENV LOCAL_LIB=${LOCAL}/lib -ENV PKG_CONFIG_PATH=${LOCAL_LIB}/pkgconfig - -RUN curl -fsSL https://github.com/tesseract-ocr/tesseract/archive/${TESSERACT_VERSION}.tar.gz -O && \ - tar xvfz ${TESSERACT_VERSION}.tar.gz && \ - cd tesseract-${TESSERACT_VERSION} && \ - ./autogen.sh && \ - ./configure --prefix=${LOCAL} --with-extra-libraries=${LOCAL_LIB} --disable-openmp 'CXXFLAGS=-g -O2 -fno-math-errno -Wall -Wextra -Wpedantic' && \ - make && \ - make install diff --git a/build/Python310/Dockerfile.ubi8 b/build/Python310/Dockerfile.ubi8 deleted file mode 100644 index 2b58024..0000000 --- a/build/Python310/Dockerfile.ubi8 +++ /dev/null @@ -1,58 +0,0 @@ -ARG baseImage -FROM ${baseImage} as build - -ENV PYTHON_VERSION 3.10 -ENV PYTHON_PATCH_VERSION 4 -ENV ARCH amd64 - -ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 - -WORKDIR ${HOME} - -RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ - && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ - && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - --with-system-ffi \ - && make -j "$(nproc)" \ - && make install \ - && ldconfig ${PYTHON_DIR}/lib \ - && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + - -FROM ${baseImage} as runtime - -ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 - -ENV PYTHON_VERSION 3.10 -ENV PYTHON_PATCH_VERSION 4 - -COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -RUN ldconfig ${PYTHON_DIR}/lib - -# - In order to drop the root user, we have to make some directories world -# writable as OpenShift default security model is to run the container -# under random UID. -RUN chown -R ${USER}:0 ${APP_ROOT} && \ - chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions - -USER ${USER} - -RUN python3 -m pip install --upgrade --user pip wheel && find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; \ No newline at end of file diff --git a/build/Python310/Dockerfile.ubi9 b/build/Python310/Dockerfile.ubi9 index 2516069..e72a0b7 100644 --- a/build/Python310/Dockerfile.ubi9 +++ b/build/Python310/Dockerfile.ubi9 @@ -1,48 +1,49 @@ ARG baseImage FROM ${baseImage} as build -ENV PYTHON_VERSION 3.10 -ENV PYTHON_PATCH_VERSION 13 -ENV ARCH amd64 +ENV PYTHON_VERSION=3.10 +ENV PYTHON_PATCH_VERSION=13 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} -RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make diffutils file gcc-c++ wget cmake git zlib-devel sqlite-devel \ +RUN dnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make diffutils file \ + gcc-c++ wget cmake git zlib-devel sqlite-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - --with-system-ffi \ - && make -j "$(nproc)" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 -ENV PYTHON_VERSION 3.10 -ENV PYTHON_PATCH_VERSION 13 +ENV PYTHON_VERSION=3.10 +ENV PYTHON_PATCH_VERSION=13 COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -50,9 +51,10 @@ RUN ldconfig ${PYTHON_DIR}/lib # under random UID. RUN chown -R ${USER}:0 ${APP_ROOT} && \ chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions USER ${USER} -RUN python3 -m pip install --upgrade --user pip wheel && find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; \ No newline at end of file +RUN python3 -m pip install --upgrade --user pip wheel && \ + find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; diff --git a/build/Python311/Dockerfile.ubi9 b/build/Python311/Dockerfile.ubi9 index a28433c..47a7b19 100644 --- a/build/Python311/Dockerfile.ubi9 +++ b/build/Python311/Dockerfile.ubi9 @@ -1,50 +1,49 @@ ARG baseImage FROM ${baseImage} as build -ENV PYTHON_VERSION 3.11 -ENV PYTHON_PATCH_VERSION 14 -ENV ARCH amd64 +ENV PYTHON_VERSION=3.11 +ENV PYTHON_PATCH_VERSION=14 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} - -RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ +RUN dnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ + zlib-devel sqlite-devel ncurses-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - --with-system-ffi \ - && make -j "$(nproc)" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 -ENV PYTHON_VERSION 3.11 -ENV PYTHON_PATCH_VERSION 14 +ENV PYTHON_VERSION=3.11 +ENV PYTHON_PATCH_VERSION=14 COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -52,9 +51,10 @@ RUN ldconfig ${PYTHON_DIR}/lib # under random UID. RUN chown -R ${USER}:0 ${APP_ROOT} && \ chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions USER ${USER} -RUN python3 -m pip install --upgrade --user pip wheel && find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; \ No newline at end of file +RUN python3 -m pip install --upgrade --user pip wheel && \ + find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; diff --git a/build/Python312/Dockerfile.ubi9 b/build/Python312/Dockerfile.ubi9 index 5b77bfb..1859d25 100644 --- a/build/Python312/Dockerfile.ubi9 +++ b/build/Python312/Dockerfile.ubi9 @@ -1,49 +1,48 @@ ARG baseImage FROM ${baseImage} as build -ENV PYTHON_VERSION 3.12 -ENV PYTHON_PATCH_VERSION 12 -ENV ARCH amd64 +ENV PYTHON_VERSION=3.12 +ENV PYTHON_PATCH_VERSION=12 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} - -RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ +RUN dnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ + zlib-devel sqlite-devel ncurses-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - && make -j "$(nproc)" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 -ENV PYTHON_VERSION 3.12 -ENV PYTHON_PATCH_VERSION 12 +ENV PYTHON_VERSION=3.12 +ENV PYTHON_PATCH_VERSION=12 COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -51,9 +50,10 @@ RUN ldconfig ${PYTHON_DIR}/lib # under random UID. RUN chown -R ${USER}:0 ${APP_ROOT} && \ chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions USER ${USER} -RUN python3 -m pip install --upgrade --user pip wheel && find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; \ No newline at end of file +RUN python3 -m pip install --upgrade --user pip wheel && \ + find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; diff --git a/build/Python313/Dockerfile.ubi9 b/build/Python313/Dockerfile.ubi9 index c7b6cf4..84b5e66 100644 --- a/build/Python313/Dockerfile.ubi9 +++ b/build/Python313/Dockerfile.ubi9 @@ -1,48 +1,46 @@ ARG baseImage FROM ${baseImage} as build -ENV PYTHON_VERSION 3.13 -ENV PYTHON_PATCH_VERSION 8 -ENV ARCH amd64 +ENV PYTHON_VERSION=3.13 +ENV PYTHON_PATCH_VERSION=8 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} -RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git zlib-devel sqlite-devel ncurses-devel \ +RUN dnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ + zlib-devel sqlite-devel ncurses-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-shared \ - --with-system-expat \ - && make -j"$(nproc)" \ - && make install \ - && ldconfig ${PYTHON_DIR}/lib \ - && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + - + --enable-loadable-sqlite-extensions \ + --enable-shared \ + --with-system-expat \ + && make -j"$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 -ENV PYTHON_VERSION 3.13 -ENV PYTHON_PATCH_VERSION 8 +ENV PYTHON_VERSION=3.13 +ENV PYTHON_PATCH_VERSION=8 COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -50,9 +48,10 @@ RUN ldconfig ${PYTHON_DIR}/lib # under random UID. RUN chown -R ${USER}:0 ${APP_ROOT} && \ chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions USER ${USER} -RUN python3 -m pip install --upgrade --user pip wheel && find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; \ No newline at end of file +RUN python3 -m pip install --upgrade --user pip wheel && \ + find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; diff --git a/build/Python38/Dockerfile.ubi8 b/build/Python38/Dockerfile.ubi8 deleted file mode 100644 index d726cd7..0000000 --- a/build/Python38/Dockerfile.ubi8 +++ /dev/null @@ -1,20 +0,0 @@ -ARG baseImage -FROM ${baseImage} - -RUN INSTALL_PKGS="python38 python38-devel python38-setuptools python38-pip gcc diffutils file make gcc-c++ cmake git" && \ - dnf -y module enable python38:3.8 && \ - dnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - dnf -y clean all --enablerepo='*' - -# - In order to drop the root user, we have to make some directories world -# writable as OpenShift default security model is to run the container -# under random UID. -RUN chown -R ${USER}:0 ${APP_ROOT} && \ - chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions - -USER ${USER} - -RUN python3 -m pip install --upgrade --user pip wheel && find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; diff --git a/build/Python38/Dockerfile.ubi9 b/build/Python38/Dockerfile.ubi9 index ffcba1c..da7fe83 100644 --- a/build/Python38/Dockerfile.ubi9 +++ b/build/Python38/Dockerfile.ubi9 @@ -1,48 +1,49 @@ ARG baseImage FROM ${baseImage} as build -ENV PYTHON_VERSION 3.8 -ENV PYTHON_PATCH_VERSION 18 -ENV ARCH amd64 +ENV PYTHON_VERSION=3.8 +ENV PYTHON_PATCH_VERSION=18 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} -RUN dnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make diffutils file gcc-c++ wget cmake git zlib-devel sqlite-devel \ +RUN dnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make diffutils file \ + gcc-c++ wget cmake git zlib-devel sqlite-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - --with-system-ffi \ - && make -j "$(nproc)" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 -ENV PYTHON_VERSION 3.8 -ENV PYTHON_PATCH_VERSION 18 +ENV PYTHON_VERSION=3.8 +ENV PYTHON_PATCH_VERSION=18 COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -50,9 +51,10 @@ RUN ldconfig ${PYTHON_DIR}/lib # under random UID. RUN chown -R ${USER}:0 ${APP_ROOT} && \ chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions USER ${USER} -RUN python3 -m pip install --upgrade --user pip wheel && find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; \ No newline at end of file +RUN python3 -m pip install --upgrade --user pip wheel && \ + find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; diff --git a/runtime/Python310/Dockerfile.ubi8 b/runtime/Python310/Dockerfile.ubi8 deleted file mode 100644 index eccb8d1..0000000 --- a/runtime/Python310/Dockerfile.ubi8 +++ /dev/null @@ -1,64 +0,0 @@ -ARG baseImage -FROM ${baseImage} as build - -ENV PYTHON_VERSION 3.10 -ENV PYTHON_PATCH_VERSION 4 -ENV ARCH amd64 - -ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 - -WORKDIR ${HOME} - -RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip \ - && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ - && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - --with-system-ffi \ - && make -j "$(nproc)" \ - && make install \ - && ldconfig ${PYTHON_DIR}/lib \ - && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + - -FROM ${baseImage} as runtime - -ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 - -ENV PYTHON_VERSION 3.10 -ENV PYTHON_PATCH_VERSION 4 - -RUN INSTALL_PKGS="expat" && \ - microdnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - microdnf -y clean all --enablerepo='*' - -COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -RUN ldconfig ${PYTHON_DIR}/lib - -# - In order to drop the root user, we have to make some directories world -# writable as OpenShift default security model is to run the container -# under random UID. -RUN chown -R ${USER}:0 ${APP_ROOT} && \ - chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions - -ENV PYTHONPATH=${PYTHON_DIR}/.local/lib64/python3.8/site-packages - - -USER ${USER} \ No newline at end of file diff --git a/runtime/Python310/Dockerfile.ubi9 b/runtime/Python310/Dockerfile.ubi9 index e498d89..4a15f90 100644 --- a/runtime/Python310/Dockerfile.ubi9 +++ b/runtime/Python310/Dockerfile.ubi9 @@ -4,44 +4,43 @@ FROM ${baseImage} as build ENV PYTHON_VERSION 3.10 ENV PYTHON_PATCH_VERSION 13 -ENV ARCH amd64 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} -RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel \ +RUN microdnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - --with-system-ffi \ - && make -j "$(nproc)" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 ENV PYTHON_VERSION 3.10 -ENV PYTHON_PATCH_VERSION 4 +ENV PYTHON_PATCH_VERSION 13 RUN INSTALL_PKGS="expat" && \ microdnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ @@ -49,6 +48,7 @@ RUN INSTALL_PKGS="expat" && \ microdnf -y clean all --enablerepo='*' COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -59,7 +59,6 @@ RUN chown -R ${USER}:0 ${APP_ROOT} && \ fix-permissions ${APP_ROOT} -P && \ rpm-file-permissions -ENV PYTHONPATH=${PYTHON_DIR}/.local/lib64/python3.8/site-packages - +ENV PYTHONPATH=${PYTHON_DIR}/lib/python3.10/site-packages -USER ${USER} \ No newline at end of file +USER ${USER} diff --git a/runtime/Python311/Dockerfile.ubi9 b/runtime/Python311/Dockerfile.ubi9 index 0062b59..3340096 100644 --- a/runtime/Python311/Dockerfile.ubi9 +++ b/runtime/Python311/Dockerfile.ubi9 @@ -4,41 +4,41 @@ FROM ${baseImage} as build ENV PYTHON_VERSION 3.11 ENV PYTHON_PATCH_VERSION 14 -ENV ARCH amd64 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} -RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ +RUN microdnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip \ + zlib-devel sqlite-devel ncurses-devel xz xz-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - --with-system-ffi \ - && make -j "$(nproc)" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 ENV PYTHON_VERSION 3.11 ENV PYTHON_PATCH_VERSION 14 @@ -49,7 +49,7 @@ RUN INSTALL_PKGS="expat" && \ microdnf -y clean all --enablerepo='*' COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -62,4 +62,4 @@ RUN chown -R ${USER}:0 ${APP_ROOT} && \ ENV PYTHONPATH=${PYTHON_DIR}/lib/python3.11/site-packages -USER ${USER} \ No newline at end of file +USER ${USER} diff --git a/runtime/Python312/Dockerfile.ubi9 b/runtime/Python312/Dockerfile.ubi9 index b2a8cb9..003ca00 100644 --- a/runtime/Python312/Dockerfile.ubi9 +++ b/runtime/Python312/Dockerfile.ubi9 @@ -4,40 +4,40 @@ FROM ${baseImage} as build ENV PYTHON_VERSION 3.12 ENV PYTHON_PATCH_VERSION 12 -ENV ARCH amd64 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} -RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ +RUN microdnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip \ + zlib-devel sqlite-devel ncurses-devel xz xz-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - && make -j "$(nproc)" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 ENV PYTHON_VERSION 3.12 ENV PYTHON_PATCH_VERSION 12 @@ -48,7 +48,7 @@ RUN INSTALL_PKGS="expat" && \ microdnf -y clean all --enablerepo='*' COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -61,4 +61,4 @@ RUN chown -R ${USER}:0 ${APP_ROOT} && \ ENV PYTHONPATH=${PYTHON_DIR}/lib/python3.12/site-packages -USER ${USER} \ No newline at end of file +USER ${USER} diff --git a/runtime/Python313/Dockerfile.ubi9 b/runtime/Python313/Dockerfile.ubi9 index 577f27f..6c546cb 100644 --- a/runtime/Python313/Dockerfile.ubi9 +++ b/runtime/Python313/Dockerfile.ubi9 @@ -4,40 +4,38 @@ FROM ${baseImage} as build ENV PYTHON_VERSION 3.13 ENV PYTHON_PATCH_VERSION 8 -ENV ARCH amd64 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} -RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel ncurses-devel xz xz-devel \ +RUN microdnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip \ + zlib-devel sqlite-devel ncurses-devel xz xz-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-shared \ - --with-system-expat \ - && make -j"$(nproc)" \ - && make install \ - && ldconfig ${PYTHON_DIR}/lib \ - && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + - + --enable-loadable-sqlite-extensions \ + --enable-shared \ + --with-system-expat \ + && make -j"$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 ENV PYTHON_VERSION 3.13 ENV PYTHON_PATCH_VERSION 8 @@ -48,7 +46,7 @@ RUN INSTALL_PKGS="expat" && \ microdnf -y clean all --enablerepo='*' COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -ENV LD_LIBRARY_PATH ${PYTHON_DIR}/lib:{LD_LIBRARY_PATH} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -61,4 +59,4 @@ RUN chown -R ${USER}:0 ${APP_ROOT} && \ ENV PYTHONPATH=${PYTHON_DIR}/lib/python3.13/site-packages -USER ${USER} \ No newline at end of file +USER ${USER} diff --git a/runtime/Python38/Dockerfile.ubi8 b/runtime/Python38/Dockerfile.ubi8 deleted file mode 100644 index aaef808..0000000 --- a/runtime/Python38/Dockerfile.ubi8 +++ /dev/null @@ -1,21 +0,0 @@ -ARG baseImage -FROM ${baseImage} - -RUN INSTALL_PKGS="python38" && \ - microdnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - microdnf -y clean all --enablerepo='*' - -RUN python3 -m pip install --upgrade pip - -# - In order to drop the root user, we have to make some directories world -# writable as OpenShift default security model is to run the container -# under random UID. -RUN chown -R ${USER}:0 ${APP_ROOT} && \ - chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions - -ENV PYTHONPATH=${APP_ROOT}/.local/lib64/python3.8/site-packages - -USER ${USER} \ No newline at end of file diff --git a/runtime/Python38/Dockerfile.ubi9 b/runtime/Python38/Dockerfile.ubi9 index c5e70ee..742b8d4 100644 --- a/runtime/Python38/Dockerfile.ubi9 +++ b/runtime/Python38/Dockerfile.ubi9 @@ -4,41 +4,40 @@ FROM ${baseImage} as build ENV PYTHON_VERSION 3.8 ENV PYTHON_PATCH_VERSION 18 -ENV ARCH amd64 ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 WORKDIR ${HOME} -RUN microdnf install -y --setopt=tsflags=nodocs gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel \ +RUN microdnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip zlib-devel sqlite-devel \ && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ && ./configure --prefix=${PYTHON_DIR} \ - --build="$ARCH" \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - --with-system-ffi \ - && make -j "$(nproc)" \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + FROM ${baseImage} as runtime ENV PYTHON_DIR=/opt/python -ENV PATH ${PYTHON_DIR}/bin:$PATH -ENV LANG C.UTF-8 +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 ENV PYTHON_VERSION 3.8 ENV PYTHON_PATCH_VERSION 18 @@ -49,6 +48,7 @@ RUN INSTALL_PKGS="expat" && \ microdnf -y clean all --enablerepo='*' COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} RUN ldconfig ${PYTHON_DIR}/lib # - In order to drop the root user, we have to make some directories world @@ -59,7 +59,6 @@ RUN chown -R ${USER}:0 ${APP_ROOT} && \ fix-permissions ${APP_ROOT} -P && \ rpm-file-permissions -ENV PYTHONPATH=${PYTHON_DIR}/.local/lib64/python3.8/site-packages +ENV PYTHONPATH=${PYTHON_DIR}/lib/python3.8/site-packages - -USER ${USER} \ No newline at end of file +USER ${USER} From 378dd953b741da96dffc691934f4c9464f88ceea Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Fri, 14 Nov 2025 17:07:52 +0100 Subject: [PATCH 08/10] add python 3.14 --- .github/workflows/Docker-images.yml | 34 +++++++++++++-- build/Python314/Dockerfile.ubi9 | 60 ++++++++++++++++++++++++++ runtime/Python314/Dockerfile.ubi9 | 65 +++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 4 deletions(-) create mode 100644 build/Python314/Dockerfile.ubi9 create mode 100644 runtime/Python314/Dockerfile.ubi9 diff --git a/.github/workflows/Docker-images.yml b/.github/workflows/Docker-images.yml index e579dd8..15481ee 100644 --- a/.github/workflows/Docker-images.yml +++ b/.github/workflows/Docker-images.yml @@ -81,6 +81,32 @@ jobs: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + build_ubi9_python314_image: + needs: [ tags, build_ubi9_image ] + uses: ./.github/workflows/Docker.yml + with: + image_name: "axaguildev/build-ubi9-python3.14" + image_version: ${{ needs.tags.outputs.new_version }} + image_build_args: "baseImage=axaguildev/build-ubi9:${{ needs.tags.outputs.new_version }}" + image_context: ./build/Python314 + image_file: "./build/Python314/Dockerfile.ubi9" + secrets: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + runtime_ubi9_python314_image: + needs: [ tags,runtime_ubi9_image ] + uses: ./.github/workflows/Docker.yml + with: + image_name: "axaguildev/runtime-ubi9-python3.14" + image_version: ${{ needs.tags.outputs.new_version }} + image_build_args: "baseImage=axaguildev/runtime-ubi9:${{ needs.tags.outputs.new_version }}" + image_context: ./runtime/Python314 + image_file: "./runtime/Python314/Dockerfile.ubi9" + secrets: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + build_ubi9_python313_image: needs: [ tags, build_ubi9_image ] uses: ./.github/workflows/Docker.yml @@ -88,7 +114,7 @@ jobs: image_name: "axaguildev/build-ubi9-python3.13" image_version: ${{ needs.tags.outputs.new_version }} image_build_args: "baseImage=axaguildev/build-ubi9:${{ needs.tags.outputs.new_version }}" - image_context: ./build/Python311 + image_context: ./build/Python313 image_file: "./build/Python313/Dockerfile.ubi9" secrets: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} @@ -101,7 +127,7 @@ jobs: image_name: "axaguildev/runtime-ubi9-python3.13" image_version: ${{ needs.tags.outputs.new_version }} image_build_args: "baseImage=axaguildev/runtime-ubi9:${{ needs.tags.outputs.new_version }}" - image_context: ./runtime/Python311 + image_context: ./runtime/Python313 image_file: "./runtime/Python313/Dockerfile.ubi9" secrets: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} @@ -114,7 +140,7 @@ jobs: image_name: "axaguildev/build-ubi9-python3.12" image_version: ${{ needs.tags.outputs.new_version }} image_build_args: "baseImage=axaguildev/build-ubi9:${{ needs.tags.outputs.new_version }}" - image_context: ./build/Python311 + image_context: ./build/Python312 image_file: "./build/Python312/Dockerfile.ubi9" secrets: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} @@ -127,7 +153,7 @@ jobs: image_name: "axaguildev/runtime-ubi9-python3.12" image_version: ${{ needs.tags.outputs.new_version }} image_build_args: "baseImage=axaguildev/runtime-ubi9:${{ needs.tags.outputs.new_version }}" - image_context: ./runtime/Python311 + image_context: ./runtime/Python312 image_file: "./runtime/Python312/Dockerfile.ubi9" secrets: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} diff --git a/build/Python314/Dockerfile.ubi9 b/build/Python314/Dockerfile.ubi9 new file mode 100644 index 0000000..9c51818 --- /dev/null +++ b/build/Python314/Dockerfile.ubi9 @@ -0,0 +1,60 @@ +ARG baseImage +FROM ${baseImage} as build + +ENV PYTHON_VERSION=3.14 +ENV PYTHON_PATCH_VERSION=0 + +ENV PYTHON_DIR=/opt/python +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 + +WORKDIR ${HOME} + +RUN dnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ + zlib-devel sqlite-devel ncurses-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j"$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + + +FROM ${baseImage} as runtime + +ENV PYTHON_DIR=/opt/python +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 + +ENV PYTHON_VERSION=3.14 +ENV PYTHON_PATCH_VERSION=0 + +COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} +RUN ldconfig ${PYTHON_DIR}/lib + +# - In order to drop the root user, we have to make some directories world +# writable as OpenShift default security model is to run the container +# under random UID. +RUN chown -R ${USER}:0 ${APP_ROOT} && \ + chmod +x /usr/bin/fix-permissions && \ + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions + +USER ${USER} + +RUN python3 -m pip install --upgrade --user pip wheel && \ + find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; diff --git a/runtime/Python314/Dockerfile.ubi9 b/runtime/Python314/Dockerfile.ubi9 new file mode 100644 index 0000000..7234afb --- /dev/null +++ b/runtime/Python314/Dockerfile.ubi9 @@ -0,0 +1,65 @@ +ARG baseImage + +FROM ${baseImage} as build + +ENV PYTHON_VERSION=3.14 +ENV PYTHON_PATCH_VERSION=0 + +ENV PYTHON_DIR=/opt/python +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 + +WORKDIR ${HOME} + +RUN microdnf install -y --setopt=tsflags=nodocs \ + gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip \ + zlib-devel sqlite-devel ncurses-devel xz xz-devel \ + && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ + && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ + && ./configure --prefix=${PYTHON_DIR} \ + --enable-loadable-sqlite-extensions \ + --enable-optimizations \ + --enable-option-checking=fatal \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + && make -j"$(nproc)" \ + && make install \ + && ldconfig ${PYTHON_DIR}/lib \ + && find ${PYTHON_DIR} -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \ + \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ + \) -exec rm -rf '{}' + + +FROM ${baseImage} as runtime + +ENV PYTHON_DIR=/opt/python +ENV PATH=${PYTHON_DIR}/bin:$PATH +ENV LANG=C.UTF-8 + +ENV PYTHON_VERSION=3.14 +ENV PYTHON_PATCH_VERSION=0 + +RUN INSTALL_PKGS="expat" && \ + microdnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ + rpm -V $INSTALL_PKGS && \ + microdnf -y clean all --enablerepo='*' + +COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} +ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} +RUN ldconfig ${PYTHON_DIR}/lib + +# - In order to drop the root user, we have to make some directories world +# writable as OpenShift default security model is to run the container +# under random UID. +RUN chown -R ${USER}:0 ${APP_ROOT} && \ + chmod +x /usr/bin/fix-permissions && \ + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions + +ENV PYTHONPATH=${PYTHON_DIR}/lib/python3.14/site-packages + +USER ${USER} From 7c51f73e4901ae783f756649e4818bcb2b86d34e Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Fri, 14 Nov 2025 17:13:12 +0100 Subject: [PATCH 09/10] fix 3.14 --- README.md | 8 ++++++++ build/Python314/Dockerfile.ubi9 | 1 - runtime/Python314/Dockerfile.ubi9 | 1 - 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 78f4974..8ceb4a3 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,14 @@ Create docker image base : - UBI9 runtime python 3.11 [![Docker UBI 9 runtime Python 3.11](https://img.shields.io/docker/pulls/axaguildev/runtime-ubi9-python3.11.svg)](https://hub.docker.com/r/axaguildev/runtime-ubi9-python3.11) - UBI9 build python 3.11 with tesseract [![Docker UBI 9 Python 3.1 tesseract](https://img.shields.io/docker/pulls/axaguildev/build-ubi9-python3.11-tesseract.svg)](https://hub.docker.com/r/axaguildev/build-ubi9-python3.11-tesseract) +- UBI9 build python 3.12 [![Docker UBI 9 build Python 3.12](https://img.shields.io/docker/pulls/axaguildev/build-ubi9-python3.12.svg)](https://hub.docker.com/r/axaguildev/build-ubi9-python3.12) +- UBI9 runtime python 3.12 [![Docker UBI 9 runtime Python 3.12](https://img.shields.io/docker/pulls/axaguildev/runtime-ubi9-python3.12.svg)](https://hub.docker.com/r/axaguildev/runtime-ubi9-python3.12) + +- UBI9 build python 3.13 [![Docker UBI 9 build Python 3.13](https://img.shields.io/docker/pulls/axaguildev/build-ubi9-python3.13.svg)](https://hub.docker.com/r/axaguildev/build-ubi9-python3.13) +- UBI9 runtime python 3.13 [![Docker UBI 9 runtime Python 3.13](https://img.shields.io/docker/pulls/axaguildev/runtime-ubi9-python3.13.svg)](https://hub.docker.com/r/axaguildev/runtime-ubi9-python3.13) + +- UBI9 build python 3.14 [![Docker UBI 9 build Python 3.14](https://img.shields.io/docker/pulls/axaguildev/build-ubi9-python3.14.svg)](https://hub.docker.com/r/axaguildev/build-ubi9-python3.14) +- UBI9 runtime python 3.14 [![Docker UBI 9 runtime Python 3.14](https://img.shields.io/docker/pulls/axaguildev/runtime-ubi9-python3.14.svg)](https://hub.docker.com/r/axaguildev/runtime-ubi9-python3.14) - UBI9 build node20 [![Docker UBI 9 build node 20](https://img.shields.io/docker/pulls/axaguildev/build-ubi9-node20.svg)](https://hub.docker.com/r/axaguildev/build-ubi9-node20) - UBI9 runtime nginx [![Docker UBI 9 runtime nginx](https://img.shields.io/docker/pulls/axaguildev/runtime-ubi9-nginx.svg)](https://hub.docker.com/r/axaguildev/runtime-ubi9-nginx) \ No newline at end of file diff --git a/build/Python314/Dockerfile.ubi9 b/build/Python314/Dockerfile.ubi9 index 9c51818..c5e86c8 100644 --- a/build/Python314/Dockerfile.ubi9 +++ b/build/Python314/Dockerfile.ubi9 @@ -22,7 +22,6 @@ RUN dnf install -y --setopt=tsflags=nodocs \ --enable-option-checking=fatal \ --enable-shared \ --with-system-expat \ - --with-system-ffi \ && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ diff --git a/runtime/Python314/Dockerfile.ubi9 b/runtime/Python314/Dockerfile.ubi9 index 7234afb..e198ac7 100644 --- a/runtime/Python314/Dockerfile.ubi9 +++ b/runtime/Python314/Dockerfile.ubi9 @@ -23,7 +23,6 @@ RUN microdnf install -y --setopt=tsflags=nodocs \ --enable-option-checking=fatal \ --enable-shared \ --with-system-expat \ - --with-system-ffi \ && make -j"$(nproc)" \ && make install \ && ldconfig ${PYTHON_DIR}/lib \ From 5e389f5435550f3268eb5f11e309f2bdaaf8adbd Mon Sep 17 00:00:00 2001 From: Guillaume Chervet Date: Mon, 17 Nov 2025 07:44:50 +0100 Subject: [PATCH 10/10] remove 3.14 --- .github/workflows/Docker-images.yml | 28 +------------ README.md | 3 -- build/Python314/Dockerfile.ubi9 | 59 -------------------------- runtime/Python314/Dockerfile.ubi9 | 64 ----------------------------- 4 files changed, 1 insertion(+), 153 deletions(-) delete mode 100644 build/Python314/Dockerfile.ubi9 delete mode 100644 runtime/Python314/Dockerfile.ubi9 diff --git a/.github/workflows/Docker-images.yml b/.github/workflows/Docker-images.yml index 15481ee..df24b22 100644 --- a/.github/workflows/Docker-images.yml +++ b/.github/workflows/Docker-images.yml @@ -80,33 +80,7 @@ jobs: secrets: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - build_ubi9_python314_image: - needs: [ tags, build_ubi9_image ] - uses: ./.github/workflows/Docker.yml - with: - image_name: "axaguildev/build-ubi9-python3.14" - image_version: ${{ needs.tags.outputs.new_version }} - image_build_args: "baseImage=axaguildev/build-ubi9:${{ needs.tags.outputs.new_version }}" - image_context: ./build/Python314 - image_file: "./build/Python314/Dockerfile.ubi9" - secrets: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - - runtime_ubi9_python314_image: - needs: [ tags,runtime_ubi9_image ] - uses: ./.github/workflows/Docker.yml - with: - image_name: "axaguildev/runtime-ubi9-python3.14" - image_version: ${{ needs.tags.outputs.new_version }} - image_build_args: "baseImage=axaguildev/runtime-ubi9:${{ needs.tags.outputs.new_version }}" - image_context: ./runtime/Python314 - image_file: "./runtime/Python314/Dockerfile.ubi9" - secrets: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - + build_ubi9_python313_image: needs: [ tags, build_ubi9_image ] uses: ./.github/workflows/Docker.yml diff --git a/README.md b/README.md index 8ceb4a3..5c7a9fa 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,5 @@ Create docker image base : - UBI9 build python 3.13 [![Docker UBI 9 build Python 3.13](https://img.shields.io/docker/pulls/axaguildev/build-ubi9-python3.13.svg)](https://hub.docker.com/r/axaguildev/build-ubi9-python3.13) - UBI9 runtime python 3.13 [![Docker UBI 9 runtime Python 3.13](https://img.shields.io/docker/pulls/axaguildev/runtime-ubi9-python3.13.svg)](https://hub.docker.com/r/axaguildev/runtime-ubi9-python3.13) -- UBI9 build python 3.14 [![Docker UBI 9 build Python 3.14](https://img.shields.io/docker/pulls/axaguildev/build-ubi9-python3.14.svg)](https://hub.docker.com/r/axaguildev/build-ubi9-python3.14) -- UBI9 runtime python 3.14 [![Docker UBI 9 runtime Python 3.14](https://img.shields.io/docker/pulls/axaguildev/runtime-ubi9-python3.14.svg)](https://hub.docker.com/r/axaguildev/runtime-ubi9-python3.14) - - UBI9 build node20 [![Docker UBI 9 build node 20](https://img.shields.io/docker/pulls/axaguildev/build-ubi9-node20.svg)](https://hub.docker.com/r/axaguildev/build-ubi9-node20) - UBI9 runtime nginx [![Docker UBI 9 runtime nginx](https://img.shields.io/docker/pulls/axaguildev/runtime-ubi9-nginx.svg)](https://hub.docker.com/r/axaguildev/runtime-ubi9-nginx) \ No newline at end of file diff --git a/build/Python314/Dockerfile.ubi9 b/build/Python314/Dockerfile.ubi9 deleted file mode 100644 index c5e86c8..0000000 --- a/build/Python314/Dockerfile.ubi9 +++ /dev/null @@ -1,59 +0,0 @@ -ARG baseImage -FROM ${baseImage} as build - -ENV PYTHON_VERSION=3.14 -ENV PYTHON_PATCH_VERSION=0 - -ENV PYTHON_DIR=/opt/python -ENV PATH=${PYTHON_DIR}/bin:$PATH -ENV LANG=C.UTF-8 - -WORKDIR ${HOME} - -RUN dnf install -y --setopt=tsflags=nodocs \ - gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget cmake git \ - zlib-devel sqlite-devel ncurses-devel \ - && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ - && ./configure --prefix=${PYTHON_DIR} \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - && make -j"$(nproc)" \ - && make install \ - && ldconfig ${PYTHON_DIR}/lib \ - && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + - -FROM ${baseImage} as runtime - -ENV PYTHON_DIR=/opt/python -ENV PATH=${PYTHON_DIR}/bin:$PATH -ENV LANG=C.UTF-8 - -ENV PYTHON_VERSION=3.14 -ENV PYTHON_PATCH_VERSION=0 - -COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} -RUN ldconfig ${PYTHON_DIR}/lib - -# - In order to drop the root user, we have to make some directories world -# writable as OpenShift default security model is to run the container -# under random UID. -RUN chown -R ${USER}:0 ${APP_ROOT} && \ - chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions - -USER ${USER} - -RUN python3 -m pip install --upgrade --user pip wheel && \ - find ${APP_ROOT}/.local -type d -exec chmod 0755 {} \; diff --git a/runtime/Python314/Dockerfile.ubi9 b/runtime/Python314/Dockerfile.ubi9 deleted file mode 100644 index e198ac7..0000000 --- a/runtime/Python314/Dockerfile.ubi9 +++ /dev/null @@ -1,64 +0,0 @@ -ARG baseImage - -FROM ${baseImage} as build - -ENV PYTHON_VERSION=3.14 -ENV PYTHON_PATCH_VERSION=0 - -ENV PYTHON_DIR=/opt/python -ENV PATH=${PYTHON_DIR}/bin:$PATH -ENV LANG=C.UTF-8 - -WORKDIR ${HOME} - -RUN microdnf install -y --setopt=tsflags=nodocs \ - gcc openssl-devel bzip2-devel libffi-devel expat-devel make wget tar gzip \ - zlib-devel sqlite-devel ncurses-devel xz xz-devel \ - && wget https://www.python.org/ftp/python/${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && tar xzf Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION}.tgz \ - && cd Python-${PYTHON_VERSION}.${PYTHON_PATCH_VERSION} \ - && ./configure --prefix=${PYTHON_DIR} \ - --enable-loadable-sqlite-extensions \ - --enable-optimizations \ - --enable-option-checking=fatal \ - --enable-shared \ - --with-system-expat \ - && make -j"$(nproc)" \ - && make install \ - && ldconfig ${PYTHON_DIR}/lib \ - && find ${PYTHON_DIR} -depth \ - \( \ - \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ - -o \ - \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ - \) -exec rm -rf '{}' + - -FROM ${baseImage} as runtime - -ENV PYTHON_DIR=/opt/python -ENV PATH=${PYTHON_DIR}/bin:$PATH -ENV LANG=C.UTF-8 - -ENV PYTHON_VERSION=3.14 -ENV PYTHON_PATCH_VERSION=0 - -RUN INSTALL_PKGS="expat" && \ - microdnf -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - microdnf -y clean all --enablerepo='*' - -COPY --from=build ${PYTHON_DIR} ${PYTHON_DIR} -ENV LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${LD_LIBRARY_PATH} -RUN ldconfig ${PYTHON_DIR}/lib - -# - In order to drop the root user, we have to make some directories world -# writable as OpenShift default security model is to run the container -# under random UID. -RUN chown -R ${USER}:0 ${APP_ROOT} && \ - chmod +x /usr/bin/fix-permissions && \ - fix-permissions ${APP_ROOT} -P && \ - rpm-file-permissions - -ENV PYTHONPATH=${PYTHON_DIR}/lib/python3.14/site-packages - -USER ${USER}