diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 83a1492..0000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-github: benz0li
-liberapay: benz0li
diff --git a/CUDA.md b/CUDA.md
index 5d569ca..fd22c3f 100644
--- a/CUDA.md
+++ b/CUDA.md
@@ -1,4 +1,4 @@
-# CUDA-enabled Python docker stack
+# CUDA-based Python docker stack
GPU accelerated, multi-arch (`linux/amd64`, `linux/arm64/v8`) docker images:
@@ -23,7 +23,6 @@ Otherwise the same as the [Python docker stack](README.md#python-docker-stack) p
[CUDA math libraries](https://developer.nvidia.com/gpu-accelerated-libraries),
[NCCL](https://developer.nvidia.com/nccl) and
[cuDNN](https://developer.nvidia.com/cudnn)
-* TensortRT and TensorRT plugin libraries
## Table of Contents
@@ -60,11 +59,11 @@ latest:
```bash
docker build \
--build-arg BASE_IMAGE=ubuntu \
- --build-arg BASE_IMAGE_TAG=22.04 \
+ --build-arg BASE_IMAGE_TAG=24.04 \
--build-arg CUDA_IMAGE=nvidia/cuda \
- --build-arg CUDA_VERSION=11.8.0 \
- --build-arg CUDA_IMAGE_SUBTAG=cudnn8-runtime-ubuntu22.04 \
- --build-arg PYTHON_VERSION=3.11.4 \
+ --build-arg CUDA_VERSION=13.4.2 \
+ --build-arg CUDA_IMAGE_SUBTAG=runtime-ubuntu24.04 \
+ --build-arg PYTHON_VERSION=3.15.0 \
-t cuda/python/ver \
-f ver/latest.Dockerfile .
```
@@ -74,8 +73,10 @@ docker build \
```bash
docker build \
--build-arg BUILD_ON_IMAGE=cuda/python/ver \
- --build-arg LIBNVINFER_VERSION=8.5.3-1 \
- --build-arg LIBNVINFER_VERSION_MAJ=8 \
+ --build-arg CUDNN_VERSION=9.27.0.42 \
+ --build-arg CUDNN_CUDA_VERSION_MAJ_MIN=13.4 \
+ --build-arg NCCL_VERSION=2.31.2 \
+ --build-arg NCCL_CUDA_VERSION_MAJ_MIN=13.4 \
--build-arg CUDA_IMAGE_FLAVOR=runtime \
-t cuda/python/ver \
-f cuda/latest.Dockerfile .
@@ -88,9 +89,9 @@ version:
```bash
docker build \
--build-arg BASE_IMAGE=ubuntu \
- --build-arg BASE_IMAGE_TAG=22.04 \
+ --build-arg BASE_IMAGE_TAG=24.04 \
--build-arg CUDA_IMAGE=nvidia/cuda \
- --build-arg CUDA_IMAGE_SUBTAG=cudnn8-runtime-ubuntu22.04 \
+ --build-arg CUDA_IMAGE_SUBTAG=runtime-ubuntu24.04 \
-t cuda/python/ver:MAJOR.MINOR.PATCH \
-f ver/MAJOR.MINOR.PATCH.Dockerfile .
```
@@ -131,4 +132,4 @@ docker run -it --rm \
* [`glcr.b-data.ch/cuda/python/base`](https://gitlab.b-data.ch/cuda/python/base/container_registry)
* [`glcr.b-data.ch/cuda/python/scipy`](https://gitlab.b-data.ch/cuda/python/scipy/container_registry)
-See [Notes](NOTES.md) for tweaks.
+See [CUDA Notes](CUDA_NOTES.md) for tweaks.
diff --git a/CUDA_NOTES.md b/CUDA_NOTES.md
new file mode 100644
index 0000000..f0fb39b
--- /dev/null
+++ b/CUDA_NOTES.md
@@ -0,0 +1,18 @@
+# Notes on CUDA
+
+The CUDA version is selected as follows:
+
+* CUDA: The lastest version that has image flavour `devel` including cuDNN
+ available.
+
+## Tweaks
+
+### Environment variables
+
+**Versions**
+
+* `CUDA_VERSION`
+
+**Miscellaneous**
+
+* `CUDA_IMAGE`: The CUDA image it is derived from.
diff --git a/NOTES.md b/NOTES.md
index 46528cd..34dbd23 100644
--- a/NOTES.md
+++ b/NOTES.md
@@ -35,25 +35,3 @@ are installed.
The latest Python version is installed at `/usr/local/bin`, regardless of
whether all packages – such as numba, tensorflow, etc. – are already compatible
with it.
-
-# Additional notes on CUDA
-
-The CUDA and OS versions are selected as follows:
-
-* CUDA: The lastest version that has image flavour `devel` including cuDNN
- available.
-* OS: The latest version that has TensortRT libraries for `amd64` available.
- :information_source: It is taking quite a long time for these to be available
- for `arm64`.
-
-## Tweaks
-
-### Environment variables
-
-**Versions**
-
-* `CUDA_VERSION`
-
-**Miscellaneous**
-
-* `CUDA_IMAGE`: The CUDA image it is derived from.
diff --git a/README.md b/README.md
index 7777ce8..658534d 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-[](https://github.com/RichardLitt/standard-readme/blob/master/example-readmes/minimal-readme.md) [](https://www.repostatus.org/#active)
+[](https://github.com/RichardLitt/standard-readme/blob/master/example-readmes/minimal-readme.md) [](https://www.repostatus.org/#active)
-| See the [CUDA-enabled Python docker stack](CUDA.md) for GPU accelerated docker images. |
-|----------------------------------------------------------------------------------------|
+| See the [CUDA-based Python docker stack](CUDA.md) for GPU accelerated docker images. |
+|--------------------------------------------------------------------------------------|
# Python docker stack
@@ -46,6 +46,7 @@ and any configuration thereof.
* [Install](#install)
* [Usage](#usage)
* [Contributing](#contributing)
+* [Support](#support)
* [License](#license)
## Prerequisites
@@ -67,7 +68,7 @@ To install docker, follow the instructions for your platform:
```bash
docker build \
- --build-arg PYTHON_VERSION=3.11.4 \
+ --build-arg PYTHON_VERSION=3.15.0 \
-t python/ver \
-f ver/latest.Dockerfile .
```
@@ -111,6 +112,15 @@ This project follows the
[Contributor Covenant](https://www.contributor-covenant.org)
[Code of Conduct](CODE_OF_CONDUCT.md).
+## Support
+
+Community support: Open a new discussion
+[here](https://github.com/orgs/b-data/discussions).
+
+Commercial support: Contact b-data by [email](mailto:support@b-data.ch).
+
## License
-[MIT](LICENSE) © 2022 b-data GmbH
+Copyright © 2022 b-data GmbH
+
+Distributed under the terms of the [MIT License](LICENSE).
diff --git a/base/.gitlab-ci.yml b/base/.gitlab-ci.yml
index 9c11f81..7bde0a9 100644
--- a/base/.gitlab-ci.yml
+++ b/base/.gitlab-ci.yml
@@ -1,6 +1,22 @@
-.env:
- variables:
- PYTHON_VERSION: "3.11.4"
+variables:
+ PYTHON_VERSION: "3.15.0"
+ TAG_VERSION_MAJ_MIN: "false"
+ TAG_VERSION_MAJ: "false"
+
+workflow:
+ rules:
+ - if: $CI_COMMIT_BRANCH == "freeze-version" && $CUDA_BASE_IMAGE == null && $PYTHON_VERSION =~ /^3.12/
+ variables:
+ BASE_IMAGE_TAG: "12"
+ - if: $CI_COMMIT_BRANCH == "freeze-version" && $CUDA_BASE_IMAGE == "ubuntu" && $PYTHON_VERSION =~ /^3.12/
+ variables:
+ BASE_IMAGE: "$CUDA_BASE_IMAGE"
+ BASE_IMAGE_TAG: "22.04"
+ - if: $CUDA_BASE_IMAGE == "ubuntu"
+ variables:
+ BASE_IMAGE: "$CUDA_BASE_IMAGE"
+ BASE_IMAGE_TAG: "$CUDA_BASE_IMAGE_TAG"
+ - if: $CI_COMMIT_BRANCH
.before-script-build: &before-script-build
- |
@@ -28,7 +44,6 @@
.build:
image: glcr.b-data.ch/docker/docker:dind
stage: build
- extends: .env
services:
- name: glcr.b-data.ch/docker/docker:dind
alias: docker
@@ -43,7 +58,6 @@
.post:
image: glcr.b-data.ch/docker/docker:dind
stage: .post
- extends: .env
build:latest-linux-amd64:
extends: .build
@@ -144,21 +158,21 @@ build-manifest:latest-linux-multiarch:
$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:$CI_APP_TAG
- - |
+
docker manifest create $CI_APP_REPO:latest $CI_MANIFEST_LIST
if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
docker manifest annotate --variant v8 $CI_APP_REPO:latest \
$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:latest
- - |
+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
- - |
+
docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST
if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \
@@ -185,6 +199,24 @@ build-manifest:version-linux-multiarch:
$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:$CI_APP_TAG
+
+ if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then
+ docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
+ if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
+ docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
+ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
+ fi
+ docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
+ fi
+
+ if [[ "$TAG_VERSION_MAJ" == "true" ]]; then
+ docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST
+ if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
+ docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \
+ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
+ fi
+ docker manifest push $CI_APP_REPO:$VERSION_MAJ
+ fi
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED
changes:
diff --git a/base/3.10.13.Dockerfile b/base/3.10.13.Dockerfile
new file mode 100644
index 0000000..523948f
--- /dev/null
+++ b/base/3.10.13.Dockerfile
@@ -0,0 +1,105 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.10.13
+ARG GIT_VERSION=2.42.0
+ARG GIT_LFS_VERSION=3.4.0
+ARG PANDOC_VERSION=3.1.1
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ [ -s "/usr/bin/$src" ]; \
+ [ ! -e "/usr/bin/$dst" ]; \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.11.10.Dockerfile b/base/3.11.10.Dockerfile
new file mode 100644
index 0000000..bbed2be
--- /dev/null
+++ b/base/3.11.10.Dockerfile
@@ -0,0 +1,114 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.11.10
+ARG NEOVIM_VERSION=0.10.2
+ARG GIT_VERSION=2.47.1
+ARG GIT_LFS_VERSION=3.6.0
+ARG PANDOC_VERSION=3.4
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.11.4.Dockerfile b/base/3.11.4.Dockerfile
new file mode 100644
index 0000000..1352d62
--- /dev/null
+++ b/base/3.11.4.Dockerfile
@@ -0,0 +1,105 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.11.4
+ARG GIT_VERSION=2.42.0
+ARG GIT_LFS_VERSION=3.4.0
+ARG PANDOC_VERSION=3.1.1
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ [ -s "/usr/bin/$src" ]; \
+ [ ! -e "/usr/bin/$dst" ]; \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.11.5.Dockerfile b/base/3.11.5.Dockerfile
new file mode 100644
index 0000000..a48f558
--- /dev/null
+++ b/base/3.11.5.Dockerfile
@@ -0,0 +1,105 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.11.5
+ARG GIT_VERSION=2.42.0
+ARG GIT_LFS_VERSION=3.4.0
+ARG PANDOC_VERSION=3.1.1
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ [ -s "/usr/bin/$src" ]; \
+ [ ! -e "/usr/bin/$dst" ]; \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.11.6.Dockerfile b/base/3.11.6.Dockerfile
new file mode 100644
index 0000000..a3c6344
--- /dev/null
+++ b/base/3.11.6.Dockerfile
@@ -0,0 +1,106 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.11.6
+ARG GIT_VERSION=2.43.0
+ARG GIT_LFS_VERSION=3.4.0
+ARG PANDOC_VERSION=3.1.1
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ [ -s "/usr/bin/$src" ]; \
+ [ ! -e "/usr/bin/$dst" ]; \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.11.7.Dockerfile b/base/3.11.7.Dockerfile
new file mode 100644
index 0000000..50a7158
--- /dev/null
+++ b/base/3.11.7.Dockerfile
@@ -0,0 +1,106 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.11.7
+ARG GIT_VERSION=2.43.0
+ARG GIT_LFS_VERSION=3.4.1
+ARG PANDOC_VERSION=3.1.11
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.11.8.Dockerfile b/base/3.11.8.Dockerfile
new file mode 100644
index 0000000..a1c9de9
--- /dev/null
+++ b/base/3.11.8.Dockerfile
@@ -0,0 +1,106 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.11.8
+ARG GIT_VERSION=2.44.0
+ARG GIT_LFS_VERSION=3.5.1
+ARG PANDOC_VERSION=3.1.11
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.11.9.Dockerfile b/base/3.11.9.Dockerfile
new file mode 100644
index 0000000..ebf18dd
--- /dev/null
+++ b/base/3.11.9.Dockerfile
@@ -0,0 +1,114 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.11.9
+ARG NEOVIM_VERSION=0.10.1
+ARG GIT_VERSION=2.46.0
+ARG GIT_LFS_VERSION=3.5.1
+ARG PANDOC_VERSION=3.2
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.0.Dockerfile b/base/3.12.0.Dockerfile
new file mode 100644
index 0000000..8c28eff
--- /dev/null
+++ b/base/3.12.0.Dockerfile
@@ -0,0 +1,106 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.0
+ARG GIT_VERSION=2.43.0
+ARG GIT_LFS_VERSION=3.4.0
+ARG PANDOC_VERSION=3.1.1
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ [ -s "/usr/bin/$src" ]; \
+ [ ! -e "/usr/bin/$dst" ]; \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.1.Dockerfile b/base/3.12.1.Dockerfile
new file mode 100644
index 0000000..31d3386
--- /dev/null
+++ b/base/3.12.1.Dockerfile
@@ -0,0 +1,106 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.1
+ARG GIT_VERSION=2.43.0
+ARG GIT_LFS_VERSION=3.4.1
+ARG PANDOC_VERSION=3.1.11
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.10.Dockerfile b/base/3.12.10.Dockerfile
new file mode 100644
index 0000000..2d2cf34
--- /dev/null
+++ b/base/3.12.10.Dockerfile
@@ -0,0 +1,112 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.10
+ARG NEOVIM_VERSION=0.11.2
+ARG GIT_VERSION=2.49.0
+ARG GIT_LFS_VERSION=3.6.1
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ pip install --upgrade --force-reinstall \
+ pip \
+ setuptools \
+ wheel; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.11.Dockerfile b/base/3.12.11.Dockerfile
new file mode 100644
index 0000000..768f688
--- /dev/null
+++ b/base/3.12.11.Dockerfile
@@ -0,0 +1,112 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.11
+ARG NEOVIM_VERSION=0.11.4
+ARG GIT_VERSION=2.51.0
+ARG GIT_LFS_VERSION=3.7.0
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ pip install --upgrade --force-reinstall \
+ pip \
+ setuptools \
+ wheel; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.2.Dockerfile b/base/3.12.2.Dockerfile
new file mode 100644
index 0000000..bae575b
--- /dev/null
+++ b/base/3.12.2.Dockerfile
@@ -0,0 +1,106 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.2
+ARG GIT_VERSION=2.44.0
+ARG GIT_LFS_VERSION=3.5.1
+ARG PANDOC_VERSION=3.1.11
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.3.Dockerfile b/base/3.12.3.Dockerfile
new file mode 100644
index 0000000..2042c96
--- /dev/null
+++ b/base/3.12.3.Dockerfile
@@ -0,0 +1,106 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.3
+ARG GIT_VERSION=2.45.2
+ARG GIT_LFS_VERSION=3.5.1
+ARG PANDOC_VERSION=3.1.11
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.4.Dockerfile b/base/3.12.4.Dockerfile
new file mode 100644
index 0000000..0fe1aed
--- /dev/null
+++ b/base/3.12.4.Dockerfile
@@ -0,0 +1,106 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.4
+ARG GIT_VERSION=2.46.0
+ARG GIT_LFS_VERSION=3.5.1
+ARG PANDOC_VERSION=3.2
+
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.5.Dockerfile b/base/3.12.5.Dockerfile
new file mode 100644
index 0000000..3ae36a8
--- /dev/null
+++ b/base/3.12.5.Dockerfile
@@ -0,0 +1,114 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.5
+ARG NEOVIM_VERSION=0.10.1
+ARG GIT_VERSION=2.46.0
+ARG GIT_LFS_VERSION=3.5.1
+ARG PANDOC_VERSION=3.2
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ curl -sLO https://bootstrap.pypa.io/get-pip.py; \
+ python get-pip.py \
+ pip \
+ setuptools \
+ wheel; \
+ rm get-pip.py; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.6.Dockerfile b/base/3.12.6.Dockerfile
new file mode 100644
index 0000000..87c5f28
--- /dev/null
+++ b/base/3.12.6.Dockerfile
@@ -0,0 +1,112 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.6
+ARG NEOVIM_VERSION=0.10.1
+ARG GIT_VERSION=2.46.2
+ARG GIT_LFS_VERSION=3.5.1
+ARG PANDOC_VERSION=3.2
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ pip install --upgrade --force-reinstall \
+ pip \
+ setuptools \
+ wheel; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.7.Dockerfile b/base/3.12.7.Dockerfile
new file mode 100644
index 0000000..2a01a04
--- /dev/null
+++ b/base/3.12.7.Dockerfile
@@ -0,0 +1,112 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.7
+ARG NEOVIM_VERSION=0.10.2
+ARG GIT_VERSION=2.47.1
+ARG GIT_LFS_VERSION=3.6.0
+ARG PANDOC_VERSION=3.4
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ pip install --upgrade --force-reinstall \
+ pip \
+ setuptools \
+ wheel; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.8.Dockerfile b/base/3.12.8.Dockerfile
new file mode 100644
index 0000000..a470840
--- /dev/null
+++ b/base/3.12.8.Dockerfile
@@ -0,0 +1,112 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.8
+ARG NEOVIM_VERSION=0.10.4
+ARG GIT_VERSION=2.48.1
+ARG GIT_LFS_VERSION=3.6.1
+ARG PANDOC_VERSION=3.4
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ pip install --upgrade --force-reinstall \
+ pip \
+ setuptools \
+ wheel; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.12.9.Dockerfile b/base/3.12.9.Dockerfile
new file mode 100644
index 0000000..db418fe
--- /dev/null
+++ b/base/3.12.9.Dockerfile
@@ -0,0 +1,112 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.12.9
+ARG NEOVIM_VERSION=0.11.0
+ARG GIT_VERSION=2.49.0
+ARG GIT_LFS_VERSION=3.6.1
+ARG PANDOC_VERSION=3.4
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip, setuptools and wheel
+ pip install --upgrade --force-reinstall \
+ pip \
+ setuptools \
+ wheel; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.0.Dockerfile b/base/3.13.0.Dockerfile
new file mode 100644
index 0000000..1ae7c9f
--- /dev/null
+++ b/base/3.13.0.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.0
+ARG NEOVIM_VERSION=0.10.2
+ARG GIT_VERSION=2.47.1
+ARG GIT_LFS_VERSION=3.6.0
+ARG PANDOC_VERSION=3.4
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.1.Dockerfile b/base/3.13.1.Dockerfile
new file mode 100644
index 0000000..4e5f0d3
--- /dev/null
+++ b/base/3.13.1.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.1
+ARG NEOVIM_VERSION=0.10.4
+ARG GIT_VERSION=2.48.1
+ARG GIT_LFS_VERSION=3.6.1
+ARG PANDOC_VERSION=3.4
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.10.Dockerfile b/base/3.13.10.Dockerfile
new file mode 100644
index 0000000..a7cfc5d
--- /dev/null
+++ b/base/3.13.10.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.10
+ARG NEOVIM_VERSION=0.11.5
+ARG GIT_VERSION=2.52.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.11.Dockerfile b/base/3.13.11.Dockerfile
new file mode 100644
index 0000000..d7e577e
--- /dev/null
+++ b/base/3.13.11.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.11
+ARG NEOVIM_VERSION=0.11.6
+ARG GIT_VERSION=2.53.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.12.Dockerfile b/base/3.13.12.Dockerfile
new file mode 100644
index 0000000..a0216bb
--- /dev/null
+++ b/base/3.13.12.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.12
+ARG NEOVIM_VERSION=0.12.1
+ARG GIT_VERSION=2.53.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.8.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.13.Dockerfile b/base/3.13.13.Dockerfile
new file mode 100644
index 0000000..2ab4fa1
--- /dev/null
+++ b/base/3.13.13.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.13
+ARG NEOVIM_VERSION=0.12.2
+ARG GIT_VERSION=2.54.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.8.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.14.Dockerfile b/base/3.13.14.Dockerfile
new file mode 100644
index 0000000..66b1046
--- /dev/null
+++ b/base/3.13.14.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.14
+ARG NEOVIM_VERSION=0.12.4
+ARG GIT_VERSION=2.55.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.10
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.15.Dockerfile b/base/3.13.15.Dockerfile
new file mode 100644
index 0000000..711bc6d
--- /dev/null
+++ b/base/3.13.15.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.15
+ARG NEOVIM_VERSION=0.12.5
+ARG GIT_VERSION=2.56.0
+ARG GIT_LFS_VERSION=3.8.0
+ARG PANDOC_VERSION=3.10
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.16.Dockerfile b/base/3.13.16.Dockerfile
new file mode 100644
index 0000000..fa9f1a1
--- /dev/null
+++ b/base/3.13.16.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.16
+ARG NEOVIM_VERSION=0.12.5
+ARG GIT_VERSION=2.56.0
+ARG GIT_LFS_VERSION=3.8.0
+ARG PANDOC_VERSION=3.10
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.2.Dockerfile b/base/3.13.2.Dockerfile
new file mode 100644
index 0000000..d0515ca
--- /dev/null
+++ b/base/3.13.2.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.2
+ARG NEOVIM_VERSION=0.11.0
+ARG GIT_VERSION=2.49.0
+ARG GIT_LFS_VERSION=3.6.1
+ARG PANDOC_VERSION=3.4
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.3.Dockerfile b/base/3.13.3.Dockerfile
new file mode 100644
index 0000000..8a3a653
--- /dev/null
+++ b/base/3.13.3.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.3
+ARG NEOVIM_VERSION=0.11.2
+ARG GIT_VERSION=2.49.0
+ARG GIT_LFS_VERSION=3.6.1
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.4.Dockerfile b/base/3.13.4.Dockerfile
new file mode 100644
index 0000000..2f3fb46
--- /dev/null
+++ b/base/3.13.4.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.4
+ARG NEOVIM_VERSION=0.11.2
+ARG GIT_VERSION=2.49.0
+ARG GIT_LFS_VERSION=3.6.1
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.5.Dockerfile b/base/3.13.5.Dockerfile
new file mode 100644
index 0000000..1f341a2
--- /dev/null
+++ b/base/3.13.5.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.5
+ARG NEOVIM_VERSION=0.11.3
+ARG GIT_VERSION=2.50.1
+ARG GIT_LFS_VERSION=3.7.0
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.6.Dockerfile b/base/3.13.6.Dockerfile
new file mode 100644
index 0000000..2ce99b8
--- /dev/null
+++ b/base/3.13.6.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.6
+ARG NEOVIM_VERSION=0.11.3
+ARG GIT_VERSION=2.50.1
+ARG GIT_LFS_VERSION=3.7.0
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.7.Dockerfile b/base/3.13.7.Dockerfile
new file mode 100644
index 0000000..67b0bff
--- /dev/null
+++ b/base/3.13.7.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.7
+ARG NEOVIM_VERSION=0.11.4
+ARG GIT_VERSION=2.51.0
+ARG GIT_LFS_VERSION=3.7.0
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.8.Dockerfile b/base/3.13.8.Dockerfile
new file mode 100644
index 0000000..338bdf2
--- /dev/null
+++ b/base/3.13.8.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.8
+ARG NEOVIM_VERSION=0.11.4
+ARG GIT_VERSION=2.51.0
+ARG GIT_LFS_VERSION=3.7.0
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.13.9.Dockerfile b/base/3.13.9.Dockerfile
new file mode 100644
index 0000000..0b27002
--- /dev/null
+++ b/base/3.13.9.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.13.9
+ARG NEOVIM_VERSION=0.11.5
+ARG GIT_VERSION=2.52.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.14.0.Dockerfile b/base/3.14.0.Dockerfile
new file mode 100644
index 0000000..e89c281
--- /dev/null
+++ b/base/3.14.0.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.14.0
+ARG NEOVIM_VERSION=0.11.5
+ARG GIT_VERSION=2.52.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.14.1.Dockerfile b/base/3.14.1.Dockerfile
new file mode 100644
index 0000000..0cb09d1
--- /dev/null
+++ b/base/3.14.1.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.14.1
+ARG NEOVIM_VERSION=0.11.5
+ARG GIT_VERSION=2.52.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.14.2.Dockerfile b/base/3.14.2.Dockerfile
new file mode 100644
index 0000000..68302eb
--- /dev/null
+++ b/base/3.14.2.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.14.2
+ARG NEOVIM_VERSION=0.11.6
+ARG GIT_VERSION=2.53.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.6.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.14.3.Dockerfile b/base/3.14.3.Dockerfile
new file mode 100644
index 0000000..cbd9ac6
--- /dev/null
+++ b/base/3.14.3.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.14.3
+ARG NEOVIM_VERSION=0.12.1
+ARG GIT_VERSION=2.53.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.8.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.14.4.Dockerfile b/base/3.14.4.Dockerfile
new file mode 100644
index 0000000..556c468
--- /dev/null
+++ b/base/3.14.4.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.14.4
+ARG NEOVIM_VERSION=0.12.2
+ARG GIT_VERSION=2.54.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.8.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.14.5.Dockerfile b/base/3.14.5.Dockerfile
new file mode 100644
index 0000000..d0ae619
--- /dev/null
+++ b/base/3.14.5.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.14.5
+ARG NEOVIM_VERSION=0.12.2
+ARG GIT_VERSION=2.54.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.8.3
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.14.6.Dockerfile b/base/3.14.6.Dockerfile
new file mode 100644
index 0000000..7d4cee1
--- /dev/null
+++ b/base/3.14.6.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.14.6
+ARG NEOVIM_VERSION=0.12.4
+ARG GIT_VERSION=2.55.0
+ARG GIT_LFS_VERSION=3.7.1
+ARG PANDOC_VERSION=3.10
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/3.14.7.Dockerfile b/base/3.14.7.Dockerfile
new file mode 100644
index 0000000..121c2fc
--- /dev/null
+++ b/base/3.14.7.Dockerfile
@@ -0,0 +1,109 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
+ARG PYTHON_VERSION=3.14.7
+ARG NEOVIM_VERSION=0.12.5
+ARG GIT_VERSION=2.56.0
+ARG GIT_LFS_VERSION=3.8.0
+ARG PANDOC_VERSION=3.10
+
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
+FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
+FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
+ARG GIT_VERSION
+ARG GIT_LFS_VERSION
+ARG PANDOC_VERSION
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
+ GIT_VERSION=${GIT_VERSION} \
+ GIT_LFS_VERSION=${GIT_LFS_VERSION} \
+ PANDOC_VERSION=${PANDOC_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
+## Install Git
+COPY --from=gsi /usr/local /usr/local
+## Install Git LFS
+COPY --from=glfsi /usr/local /usr/local
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ bash-completion \
+ build-essential \
+ curl \
+ file \
+ fontconfig \
+ g++ \
+ gcc \
+ gfortran \
+ gnupg \
+ htop \
+ info \
+ jq \
+ libclang-dev \
+ man-db \
+ nano \
+ ncdu \
+ procps \
+ psmisc \
+ screen \
+ sudo \
+ swig \
+ tmux \
+ vim-tiny \
+ wget \
+ zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
+ ## Git: Additional runtime dependencies
+ libcurl3-gnutls \
+ liberror-perl \
+ ## Git: Additional runtime recommendations
+ less \
+ ssh-client \
+ ## Python: Additional dev dependencies
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ apt-get -y install --no-install-recommends \
+ python3-dev \
+ ## Install Python package installer
+ ## (dep: python3-distutils, python3-setuptools and python3-wheel)
+ python3-pip \
+ ## Install venv module for python3
+ python3-venv; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ else \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
+ fi \
+ ## Git: Set default branch name to main
+ && git config --system init.defaultBranch main \
+ ## Git: Store passwords for one hour in memory
+ && git config --system credential.helper "cache --timeout=3600" \
+ ## Git: Merge the default branch from the default remote when "git pull" is run
+ && git config --system pull.rebase false \
+ ## Install pandoc
+ && curl -sLO https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && dpkg -i pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ && rm pandoc-${PANDOC_VERSION}-1-${dpkgArch}.deb \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache
diff --git a/base/latest.Dockerfile b/base/latest.Dockerfile
index c0866d2..690d093 100644
--- a/base/latest.Dockerfile
+++ b/base/latest.Dockerfile
@@ -1,30 +1,36 @@
ARG BASE_IMAGE=debian
-ARG BASE_IMAGE_TAG=12
+ARG BASE_IMAGE_TAG=13
ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/ver
ARG PYTHON_VERSION
-ARG GIT_VERSION=2.41.0
-ARG GIT_LFS_VERSION=3.3.0
-ARG PANDOC_VERSION=3.1.1
+ARG NEOVIM_VERSION=0.12.6
+ARG GIT_VERSION=2.56.0
+ARG GIT_LFS_VERSION=3.8.0
+ARG PANDOC_VERSION=3.10
+FROM glcr.b-data.ch/neovim/nvsi:${NEOVIM_VERSION} AS nvsi
FROM glcr.b-data.ch/git/gsi/${GIT_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as gsi
FROM glcr.b-data.ch/git-lfs/glfsi:${GIT_LFS_VERSION} as glfsi
-FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
ARG DEBIAN_FRONTEND=noninteractive
ARG BUILD_ON_IMAGE
+ARG NEOVIM_VERSION
ARG GIT_VERSION
ARG GIT_LFS_VERSION
ARG PANDOC_VERSION
ARG BUILD_START
-ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ NEOVIM_VERSION=${NEOVIM_VERSION} \
GIT_VERSION=${GIT_VERSION} \
GIT_LFS_VERSION=${GIT_LFS_VERSION} \
PANDOC_VERSION=${PANDOC_VERSION} \
BUILD_DATE=${BUILD_START}
+## Install Neovim
+COPY --from=nvsi /usr/local /usr/local
## Install Git
COPY --from=gsi /usr/local /usr/local
## Install Git LFS
@@ -48,6 +54,7 @@ RUN dpkgArch="$(dpkg --print-architecture)" \
libclang-dev \
man-db \
nano \
+ ncdu \
procps \
psmisc \
screen \
@@ -57,6 +64,8 @@ RUN dpkgArch="$(dpkg --print-architecture)" \
vim-tiny \
wget \
zsh \
+ ## Neovim: Additional runtime recommendations
+ ripgrep \
## Git: Additional runtime dependencies
libcurl3-gnutls \
liberror-perl \
@@ -76,18 +85,13 @@ RUN dpkgArch="$(dpkg --print-architecture)" \
## ("/usr/bin/python" and friends)
for src in pydoc3 python3 python3-config; do \
dst="$(echo "$src" | tr -d 3)"; \
- [ -s "/usr/bin/$src" ]; \
- [ ! -e "/usr/bin/$dst" ]; \
- ln -svT "$src" "/usr/bin/$dst"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
done; \
else \
- ## Force update pip, setuptools and wheel
- curl -sLO https://bootstrap.pypa.io/get-pip.py; \
- python get-pip.py \
- pip \
- setuptools \
- wheel; \
- rm get-pip.py; \
+ ## Force update pip
+ pip install --upgrade --force-reinstall pip; \
fi \
## Git: Set default branch name to main
&& git config --system init.defaultBranch main \
diff --git a/cuda/3.10.13.Dockerfile b/cuda/3.10.13.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.10.13.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.11.10.Dockerfile b/cuda/3.11.10.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.11.10.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.11.4.Dockerfile b/cuda/3.11.4.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.11.4.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.11.5.Dockerfile b/cuda/3.11.5.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.11.5.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.11.6.Dockerfile b/cuda/3.11.6.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.11.6.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.11.7.Dockerfile b/cuda/3.11.7.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.11.7.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.11.8.Dockerfile b/cuda/3.11.8.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.11.8.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.11.9.Dockerfile b/cuda/3.11.9.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.11.9.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.0.Dockerfile b/cuda/3.12.0.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.12.0.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.1.Dockerfile b/cuda/3.12.1.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.12.1.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.10.Dockerfile b/cuda/3.12.10.Dockerfile
new file mode 100644
index 0000000..88c1918
--- /dev/null
+++ b/cuda/3.12.10.Dockerfile
@@ -0,0 +1,243 @@
+ARG CUDNN_VERSION=8.9.7.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG LIBNVINFER_VERSION
+ARG LIBNVINFER_VERSION_AMD64=10.11.0.33
+ARG LIBNVINFER_VERSION_ARM64=10.3.0.26
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64=12.9
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64=12.5
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.9.0-runtime-ubuntu22.04
+## └── nvidia/cuda:12.9.0-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG LIBNVINFER_VERSION_AMD64
+ARG LIBNVINFER_VERSION_ARM64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Install TensorRT
+ && case "$dpkgArch" in \
+ amd64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_AMD64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64 ;; \
+ arm64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_ARM64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64 ;; \
+ *) echo "error: Architecture $dpkgArch unsupported"; exit 1 ;; \
+ esac \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then \
+ dev="-dev"; \
+ if dpkg --compare-versions ${LIBNVINFER_VERSION} gt "8.6"; then \
+ headers="-headers"; \
+ fi; \
+ fi \
+ && LIBNVINFER_VERSION_MAJ=${LIBNVINFER_VERSION%%.*} \
+ && CUDA_VERSION_MAJ_MIN=${LIBNVINFER_CUDA_VERSION_MAJ_MIN:-${CUDA_VERSION%.*}} \
+ && apt-get -y install --no-install-recommends \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ && apt-mark hold \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ ## Create symlink when only newer TensorRT libraries are available
+ && trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$') \
+ && trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$') \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "8" ]; then \
+ ## TensorFlow versions < 2.18 expect TensorRT libraries version 8.6.1/8.6.2
+ if [ "$dpkgArch" = "amd64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.1; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.1; \
+ fi; \
+ if [ "$dpkgArch" = "arm64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.2; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.2; \
+ fi; \
+ ## TensorFlow versions < 2.15 expect TensorRT libraries version 8
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8; \
+ fi \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.11.Dockerfile b/cuda/3.12.11.Dockerfile
new file mode 100644
index 0000000..02444b7
--- /dev/null
+++ b/cuda/3.12.11.Dockerfile
@@ -0,0 +1,243 @@
+ARG CUDNN_VERSION=8.9.7.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG LIBNVINFER_VERSION
+ARG LIBNVINFER_VERSION_AMD64=10.13.3.9
+ARG LIBNVINFER_VERSION_ARM64=10.3.0.26
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64=12.9
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64=12.5
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.9.1-runtime-ubuntu22.04
+## └── nvidia/cuda:12.9.1-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG LIBNVINFER_VERSION_AMD64
+ARG LIBNVINFER_VERSION_ARM64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Install TensorRT
+ && case "$dpkgArch" in \
+ amd64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_AMD64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64 ;; \
+ arm64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_ARM64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64 ;; \
+ *) echo "error: Architecture $dpkgArch unsupported"; exit 1 ;; \
+ esac \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then \
+ dev="-dev"; \
+ if dpkg --compare-versions ${LIBNVINFER_VERSION} gt "8.6"; then \
+ headers="-headers"; \
+ fi; \
+ fi \
+ && LIBNVINFER_VERSION_MAJ=${LIBNVINFER_VERSION%%.*} \
+ && CUDA_VERSION_MAJ_MIN=${LIBNVINFER_CUDA_VERSION_MAJ_MIN:-${CUDA_VERSION%.*}} \
+ && apt-get -y install --no-install-recommends \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ && apt-mark hold \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ ## Create symlink when only newer TensorRT libraries are available
+ && trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$') \
+ && trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$') \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "8" ]; then \
+ ## TensorFlow versions < 2.18 expect TensorRT libraries version 8.6.1/8.6.2
+ if [ "$dpkgArch" = "amd64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.1; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.1; \
+ fi; \
+ if [ "$dpkgArch" = "arm64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.2; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.2; \
+ fi; \
+ ## TensorFlow versions < 2.15 expect TensorRT libraries version 8
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8; \
+ fi \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.2.Dockerfile b/cuda/3.12.2.Dockerfile
new file mode 100644
index 0000000..a3db44d
--- /dev/null
+++ b/cuda/3.12.2.Dockerfile
@@ -0,0 +1,72 @@
+ARG BUILD_ON_IMAGE
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+FROM ${BUILD_ON_IMAGE}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
+## └── nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
+ARG LIBNVINFER_VERSION=8.5.3-1
+ARG LIBNVINFER_VERSION_MAJ=8
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ARG CUDA_HOME
+ARG NVBLAS_CONFIG_FILE
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ yes | unminimize; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install TensorRT
+ ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
+ && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
+ CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
+ apt-get update; \
+ apt-get -y install --no-install-recommends \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ apt-mark hold \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ## Create symlink when only TensorRT libraries version > 7 are available
+ trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$'); \
+ trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$'); \
+ if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.3.Dockerfile b/cuda/3.12.3.Dockerfile
new file mode 100644
index 0000000..0461bf2
--- /dev/null
+++ b/cuda/3.12.3.Dockerfile
@@ -0,0 +1,238 @@
+ARG CUDNN_VERSION=8.9.7.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.2
+
+ARG LIBNVINFER_VERSION=10.0.1.6
+ARG LIBNVINFER_VERSION_AMD64=${LIBNVINFER_VERSION}
+ARG LIBNVINFER_VERSION_ARM64=${LIBNVINFER_VERSION}
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN=12.4
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.5.0-runtime-ubuntu22.04
+## └── nvidia/cuda:12.5.0-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG LIBNVINFER_VERSION_AMD64
+ARG LIBNVINFER_VERSION_ARM64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Install TensorRT
+ && case "$dpkgArch" in \
+ amd64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_AMD64 ;; \
+ arm64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_ARM64 ;; \
+ *) echo "error: Architecture $dpkgArch unsupported"; exit 1 ;; \
+ esac \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then \
+ dev="-dev"; \
+ if dpkg --compare-versions ${LIBNVINFER_VERSION} gt "8.6"; then \
+ headers="-headers"; \
+ fi; \
+ fi \
+ && LIBNVINFER_VERSION_MAJ=${LIBNVINFER_VERSION%%.*} \
+ && CUDA_VERSION_MAJ_MIN=${LIBNVINFER_CUDA_VERSION_MAJ_MIN:-${CUDA_VERSION%.*}} \
+ && apt-get -y install --no-install-recommends \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ && apt-mark hold \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ ## Create symlink when only newer TensorRT libraries are available
+ && trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$') \
+ && trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$') \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "8" ]; then \
+ ## TensorFlow versions < 2.17 expect TensorRT libraries version 8.6.1/8.6.2
+ if [ "$dpkgArch" = "amd64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.1; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.1; \
+ fi; \
+ if [ "$dpkgArch" = "arm64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.2; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.2; \
+ fi; \
+ ## TensorFlow versions < 2.15 expect TensorRT libraries version 8
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8; \
+ fi \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.4.Dockerfile b/cuda/3.12.4.Dockerfile
new file mode 100644
index 0000000..23f15d9
--- /dev/null
+++ b/cuda/3.12.4.Dockerfile
@@ -0,0 +1,238 @@
+ARG CUDNN_VERSION=8.9.7.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.2
+
+ARG LIBNVINFER_VERSION=10.3.0.26
+ARG LIBNVINFER_VERSION_AMD64=${LIBNVINFER_VERSION}
+ARG LIBNVINFER_VERSION_ARM64=${LIBNVINFER_VERSION}
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN=12.5
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.5.1-runtime-ubuntu22.04
+## └── nvidia/cuda:12.5.1-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG LIBNVINFER_VERSION_AMD64
+ARG LIBNVINFER_VERSION_ARM64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Install TensorRT
+ && case "$dpkgArch" in \
+ amd64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_AMD64 ;; \
+ arm64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_ARM64 ;; \
+ *) echo "error: Architecture $dpkgArch unsupported"; exit 1 ;; \
+ esac \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then \
+ dev="-dev"; \
+ if dpkg --compare-versions ${LIBNVINFER_VERSION} gt "8.6"; then \
+ headers="-headers"; \
+ fi; \
+ fi \
+ && LIBNVINFER_VERSION_MAJ=${LIBNVINFER_VERSION%%.*} \
+ && CUDA_VERSION_MAJ_MIN=${LIBNVINFER_CUDA_VERSION_MAJ_MIN:-${CUDA_VERSION%.*}} \
+ && apt-get -y install --no-install-recommends \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ && apt-mark hold \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ ## Create symlink when only newer TensorRT libraries are available
+ && trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$') \
+ && trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$') \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "8" ]; then \
+ ## TensorFlow versions < 2.18 expect TensorRT libraries version 8.6.1/8.6.2
+ if [ "$dpkgArch" = "amd64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.1; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.1; \
+ fi; \
+ if [ "$dpkgArch" = "arm64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.2; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.2; \
+ fi; \
+ ## TensorFlow versions < 2.15 expect TensorRT libraries version 8
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8; \
+ fi \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.5.Dockerfile b/cuda/3.12.5.Dockerfile
new file mode 100644
index 0000000..06f9476
--- /dev/null
+++ b/cuda/3.12.5.Dockerfile
@@ -0,0 +1,243 @@
+ARG CUDNN_VERSION=8.9.7.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG LIBNVINFER_VERSION
+ARG LIBNVINFER_VERSION_AMD64=10.4.0.26
+ARG LIBNVINFER_VERSION_ARM64=10.3.0.26
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64=12.6
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64=12.5
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.6.1-runtime-ubuntu22.04
+## └── nvidia/cuda:12.6.1-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG LIBNVINFER_VERSION_AMD64
+ARG LIBNVINFER_VERSION_ARM64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Install TensorRT
+ && case "$dpkgArch" in \
+ amd64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_AMD64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64 ;; \
+ arm64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_ARM64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64 ;; \
+ *) echo "error: Architecture $dpkgArch unsupported"; exit 1 ;; \
+ esac \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then \
+ dev="-dev"; \
+ if dpkg --compare-versions ${LIBNVINFER_VERSION} gt "8.6"; then \
+ headers="-headers"; \
+ fi; \
+ fi \
+ && LIBNVINFER_VERSION_MAJ=${LIBNVINFER_VERSION%%.*} \
+ && CUDA_VERSION_MAJ_MIN=${LIBNVINFER_CUDA_VERSION_MAJ_MIN:-${CUDA_VERSION%.*}} \
+ && apt-get -y install --no-install-recommends \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ && apt-mark hold \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ ## Create symlink when only newer TensorRT libraries are available
+ && trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$') \
+ && trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$') \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "8" ]; then \
+ ## TensorFlow versions < 2.18 expect TensorRT libraries version 8.6.1/8.6.2
+ if [ "$dpkgArch" = "amd64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.1; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.1; \
+ fi; \
+ if [ "$dpkgArch" = "arm64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.2; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.2; \
+ fi; \
+ ## TensorFlow versions < 2.15 expect TensorRT libraries version 8
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8; \
+ fi \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.6.Dockerfile b/cuda/3.12.6.Dockerfile
new file mode 100644
index 0000000..06f9476
--- /dev/null
+++ b/cuda/3.12.6.Dockerfile
@@ -0,0 +1,243 @@
+ARG CUDNN_VERSION=8.9.7.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG LIBNVINFER_VERSION
+ARG LIBNVINFER_VERSION_AMD64=10.4.0.26
+ARG LIBNVINFER_VERSION_ARM64=10.3.0.26
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64=12.6
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64=12.5
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.6.1-runtime-ubuntu22.04
+## └── nvidia/cuda:12.6.1-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG LIBNVINFER_VERSION_AMD64
+ARG LIBNVINFER_VERSION_ARM64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Install TensorRT
+ && case "$dpkgArch" in \
+ amd64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_AMD64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64 ;; \
+ arm64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_ARM64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64 ;; \
+ *) echo "error: Architecture $dpkgArch unsupported"; exit 1 ;; \
+ esac \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then \
+ dev="-dev"; \
+ if dpkg --compare-versions ${LIBNVINFER_VERSION} gt "8.6"; then \
+ headers="-headers"; \
+ fi; \
+ fi \
+ && LIBNVINFER_VERSION_MAJ=${LIBNVINFER_VERSION%%.*} \
+ && CUDA_VERSION_MAJ_MIN=${LIBNVINFER_CUDA_VERSION_MAJ_MIN:-${CUDA_VERSION%.*}} \
+ && apt-get -y install --no-install-recommends \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ && apt-mark hold \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ ## Create symlink when only newer TensorRT libraries are available
+ && trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$') \
+ && trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$') \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "8" ]; then \
+ ## TensorFlow versions < 2.18 expect TensorRT libraries version 8.6.1/8.6.2
+ if [ "$dpkgArch" = "amd64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.1; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.1; \
+ fi; \
+ if [ "$dpkgArch" = "arm64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.2; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.2; \
+ fi; \
+ ## TensorFlow versions < 2.15 expect TensorRT libraries version 8
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8; \
+ fi \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.7.Dockerfile b/cuda/3.12.7.Dockerfile
new file mode 100644
index 0000000..9147390
--- /dev/null
+++ b/cuda/3.12.7.Dockerfile
@@ -0,0 +1,243 @@
+ARG CUDNN_VERSION=8.9.7.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG LIBNVINFER_VERSION
+ARG LIBNVINFER_VERSION_AMD64=10.7.0.23
+ARG LIBNVINFER_VERSION_ARM64=10.3.0.26
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64=12.6
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64=12.5
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.6.3-runtime-ubuntu22.04
+## └── nvidia/cuda:12.6.3-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG LIBNVINFER_VERSION_AMD64
+ARG LIBNVINFER_VERSION_ARM64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Install TensorRT
+ && case "$dpkgArch" in \
+ amd64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_AMD64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64 ;; \
+ arm64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_ARM64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64 ;; \
+ *) echo "error: Architecture $dpkgArch unsupported"; exit 1 ;; \
+ esac \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then \
+ dev="-dev"; \
+ if dpkg --compare-versions ${LIBNVINFER_VERSION} gt "8.6"; then \
+ headers="-headers"; \
+ fi; \
+ fi \
+ && LIBNVINFER_VERSION_MAJ=${LIBNVINFER_VERSION%%.*} \
+ && CUDA_VERSION_MAJ_MIN=${LIBNVINFER_CUDA_VERSION_MAJ_MIN:-${CUDA_VERSION%.*}} \
+ && apt-get -y install --no-install-recommends \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ && apt-mark hold \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ ## Create symlink when only newer TensorRT libraries are available
+ && trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$') \
+ && trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$') \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "8" ]; then \
+ ## TensorFlow versions < 2.18 expect TensorRT libraries version 8.6.1/8.6.2
+ if [ "$dpkgArch" = "amd64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.1; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.1; \
+ fi; \
+ if [ "$dpkgArch" = "arm64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.2; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.2; \
+ fi; \
+ ## TensorFlow versions < 2.15 expect TensorRT libraries version 8
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8; \
+ fi \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.8.Dockerfile b/cuda/3.12.8.Dockerfile
new file mode 100644
index 0000000..4be7f64
--- /dev/null
+++ b/cuda/3.12.8.Dockerfile
@@ -0,0 +1,243 @@
+ARG CUDNN_VERSION=8.9.7.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG LIBNVINFER_VERSION
+ARG LIBNVINFER_VERSION_AMD64=10.8.0.43
+ARG LIBNVINFER_VERSION_ARM64=10.3.0.26
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64=12.8
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64=12.5
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.8.0-runtime-ubuntu22.04
+## └── nvidia/cuda:12.8.0-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG LIBNVINFER_VERSION_AMD64
+ARG LIBNVINFER_VERSION_ARM64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Install TensorRT
+ && case "$dpkgArch" in \
+ amd64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_AMD64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64 ;; \
+ arm64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_ARM64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64 ;; \
+ *) echo "error: Architecture $dpkgArch unsupported"; exit 1 ;; \
+ esac \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then \
+ dev="-dev"; \
+ if dpkg --compare-versions ${LIBNVINFER_VERSION} gt "8.6"; then \
+ headers="-headers"; \
+ fi; \
+ fi \
+ && LIBNVINFER_VERSION_MAJ=${LIBNVINFER_VERSION%%.*} \
+ && CUDA_VERSION_MAJ_MIN=${LIBNVINFER_CUDA_VERSION_MAJ_MIN:-${CUDA_VERSION%.*}} \
+ && apt-get -y install --no-install-recommends \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ && apt-mark hold \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ ## Create symlink when only newer TensorRT libraries are available
+ && trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$') \
+ && trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$') \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "8" ]; then \
+ ## TensorFlow versions < 2.18 expect TensorRT libraries version 8.6.1/8.6.2
+ if [ "$dpkgArch" = "amd64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.1; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.1; \
+ fi; \
+ if [ "$dpkgArch" = "arm64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.2; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.2; \
+ fi; \
+ ## TensorFlow versions < 2.15 expect TensorRT libraries version 8
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8; \
+ fi \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.12.9.Dockerfile b/cuda/3.12.9.Dockerfile
new file mode 100644
index 0000000..6a1a608
--- /dev/null
+++ b/cuda/3.12.9.Dockerfile
@@ -0,0 +1,243 @@
+ARG CUDNN_VERSION=8.9.7.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG LIBNVINFER_VERSION
+ARG LIBNVINFER_VERSION_AMD64=10.9.0.34
+ARG LIBNVINFER_VERSION_ARM64=10.3.0.26
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64=12.8
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64=12.5
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.8.1-runtime-ubuntu22.04
+## └── nvidia/cuda:12.8.1-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG LIBNVINFER_VERSION_AMD64
+ARG LIBNVINFER_VERSION_ARM64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64
+ARG LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Install TensorRT
+ && case "$dpkgArch" in \
+ amd64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_AMD64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64 ;; \
+ arm64) LIBNVINFER_VERSION=$LIBNVINFER_VERSION_ARM64 LIBNVINFER_CUDA_VERSION_MAJ_MIN=$LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64 ;; \
+ *) echo "error: Architecture $dpkgArch unsupported"; exit 1 ;; \
+ esac \
+ ## Install development libraries and headers
+ ## if devel-flavor of CUDA image is used
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then \
+ dev="-dev"; \
+ if dpkg --compare-versions ${LIBNVINFER_VERSION} gt "8.6"; then \
+ headers="-headers"; \
+ fi; \
+ fi \
+ && LIBNVINFER_VERSION_MAJ=${LIBNVINFER_VERSION%%.*} \
+ && CUDA_VERSION_MAJ_MIN=${LIBNVINFER_CUDA_VERSION_MAJ_MIN:-${CUDA_VERSION%.*}} \
+ && apt-get -y install --no-install-recommends \
+ libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}-1+cuda${CUDA_VERSION_MAJ_MIN} \
+ ## Keep apt from auto upgrading the libnvinfer packages
+ && apt-mark hold \
+ libnvinfer${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer-plugin${LIBNVINFER_VERSION_MAJ} \
+ libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ libnvinfer${headers}-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
+ ## Create symlink when only newer TensorRT libraries are available
+ && trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer.so.[0-9]\+$') \
+ && trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
+ grep 'libnvinfer_plugin.so.[0-9]\+$') \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "8" ]; then \
+ ## TensorFlow versions < 2.18 expect TensorRT libraries version 8.6.1/8.6.2
+ if [ "$dpkgArch" = "amd64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.1; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.1; \
+ fi; \
+ if [ "$dpkgArch" = "arm64" ]; then \
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8.6.2; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8.6.2; \
+ fi; \
+ ## TensorFlow versions < 2.15 expect TensorRT libraries version 8
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.8; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.8; \
+ fi \
+ && if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
+ ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
+ ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
+ ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.0.Dockerfile b/cuda/3.13.0.Dockerfile
new file mode 100644
index 0000000..6cb4dd3
--- /dev/null
+++ b/cuda/3.13.0.Dockerfile
@@ -0,0 +1,176 @@
+ARG CUDNN_VERSION=9.6.0.74
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.6.3-runtime-ubuntu22.04
+## └── nvidia/cuda:12.6.3-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.1.Dockerfile b/cuda/3.13.1.Dockerfile
new file mode 100644
index 0000000..909a841
--- /dev/null
+++ b/cuda/3.13.1.Dockerfile
@@ -0,0 +1,176 @@
+ARG CUDNN_VERSION=9.7.0.66
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.8.0-runtime-ubuntu22.04
+## └── nvidia/cuda:12.8.0-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.10.Dockerfile b/cuda/3.13.10.Dockerfile
new file mode 100644
index 0000000..103f7df
--- /dev/null
+++ b/cuda/3.13.10.Dockerfile
@@ -0,0 +1,183 @@
+ARG CUDNN_VERSION=9.17.0.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.0.2-runtime-ubuntu24.04
+## └── nvidia/cuda:13.0.2-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.11.Dockerfile b/cuda/3.13.11.Dockerfile
new file mode 100644
index 0000000..638cb01
--- /dev/null
+++ b/cuda/3.13.11.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.19.0.56
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.1
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.29.3
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.1
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.1.1-runtime-ubuntu24.04
+## └── nvidia/cuda:13.1.1-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.12.Dockerfile b/cuda/3.13.12.Dockerfile
new file mode 100644
index 0000000..3ccb3b5
--- /dev/null
+++ b/cuda/3.13.12.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.20.0.48
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.29.7
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.2
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.2.0-runtime-ubuntu24.04
+## └── nvidia/cuda:13.2.0-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.13.Dockerfile b/cuda/3.13.13.Dockerfile
new file mode 100644
index 0000000..4580ed6
--- /dev/null
+++ b/cuda/3.13.13.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.23.2.1
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.3
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.30.7
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.3
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.3.0-runtime-ubuntu24.04
+## └── nvidia/cuda:13.3.0-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.14.Dockerfile b/cuda/3.13.14.Dockerfile
new file mode 100644
index 0000000..6ec10e3
--- /dev/null
+++ b/cuda/3.13.14.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.25.0.15
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.3
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.30.7
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.3
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.3.1-runtime-ubuntu24.04
+## └── nvidia/cuda:13.3.1-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.15.Dockerfile b/cuda/3.13.15.Dockerfile
new file mode 100644
index 0000000..8977502
--- /dev/null
+++ b/cuda/3.13.15.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.27.0.42
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.4
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.31.2
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.4
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.4.2-runtime-ubuntu24.04
+## └── nvidia/cuda:13.4.2-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.16.Dockerfile b/cuda/3.13.16.Dockerfile
new file mode 100644
index 0000000..8977502
--- /dev/null
+++ b/cuda/3.13.16.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.27.0.42
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.4
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.31.2
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.4
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.4.2-runtime-ubuntu24.04
+## └── nvidia/cuda:13.4.2-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.2.Dockerfile b/cuda/3.13.2.Dockerfile
new file mode 100644
index 0000000..d1c2df1
--- /dev/null
+++ b/cuda/3.13.2.Dockerfile
@@ -0,0 +1,176 @@
+ARG CUDNN_VERSION=9.8.0.87
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.8.1-runtime-ubuntu22.04
+## └── nvidia/cuda:12.8.1-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.3.Dockerfile b/cuda/3.13.3.Dockerfile
new file mode 100644
index 0000000..7303e61
--- /dev/null
+++ b/cuda/3.13.3.Dockerfile
@@ -0,0 +1,176 @@
+ARG CUDNN_VERSION=9.10.1.4
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.9.0-runtime-ubuntu22.04
+## └── nvidia/cuda:12.9.0-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.4.Dockerfile b/cuda/3.13.4.Dockerfile
new file mode 100644
index 0000000..ac9aa47
--- /dev/null
+++ b/cuda/3.13.4.Dockerfile
@@ -0,0 +1,184 @@
+ARG CUDNN_VERSION=9.10.1.4
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.9.0-runtime-ubuntu22.04
+## └── nvidia/cuda:12.9.0-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.5.Dockerfile b/cuda/3.13.5.Dockerfile
new file mode 100644
index 0000000..437974a
--- /dev/null
+++ b/cuda/3.13.5.Dockerfile
@@ -0,0 +1,184 @@
+ARG CUDNN_VERSION=9.11.0.98
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.9.1-runtime-ubuntu22.04
+## └── nvidia/cuda:12.9.1-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.6.Dockerfile b/cuda/3.13.6.Dockerfile
new file mode 100644
index 0000000..6a50569
--- /dev/null
+++ b/cuda/3.13.6.Dockerfile
@@ -0,0 +1,184 @@
+ARG CUDNN_VERSION=9.11.1.4
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=12.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:12.9.1-runtime-ubuntu22.04
+## └── nvidia/cuda:12.9.1-devel-ubuntu22.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.7.Dockerfile b/cuda/3.13.7.Dockerfile
new file mode 100644
index 0000000..f2b35b3
--- /dev/null
+++ b/cuda/3.13.7.Dockerfile
@@ -0,0 +1,183 @@
+ARG CUDNN_VERSION=9.13.1.26
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.0.1-runtime-ubuntu24.04
+## └── nvidia/cuda:13.0.1-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.8.Dockerfile b/cuda/3.13.8.Dockerfile
new file mode 100644
index 0000000..e55571e
--- /dev/null
+++ b/cuda/3.13.8.Dockerfile
@@ -0,0 +1,183 @@
+ARG CUDNN_VERSION=9.14.0.64
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.0.1-runtime-ubuntu24.04
+## └── nvidia/cuda:13.0.1-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.13.9.Dockerfile b/cuda/3.13.9.Dockerfile
new file mode 100644
index 0000000..e4ad35b
--- /dev/null
+++ b/cuda/3.13.9.Dockerfile
@@ -0,0 +1,183 @@
+ARG CUDNN_VERSION=9.16.0.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.0.2-runtime-ubuntu24.04
+## └── nvidia/cuda:13.0.2-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.14.0.Dockerfile b/cuda/3.14.0.Dockerfile
new file mode 100644
index 0000000..e4ad35b
--- /dev/null
+++ b/cuda/3.14.0.Dockerfile
@@ -0,0 +1,183 @@
+ARG CUDNN_VERSION=9.16.0.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.0.2-runtime-ubuntu24.04
+## └── nvidia/cuda:13.0.2-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.14.1.Dockerfile b/cuda/3.14.1.Dockerfile
new file mode 100644
index 0000000..103f7df
--- /dev/null
+++ b/cuda/3.14.1.Dockerfile
@@ -0,0 +1,183 @@
+ARG CUDNN_VERSION=9.17.0.29
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.0
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.0.2-runtime-ubuntu24.04
+## └── nvidia/cuda:13.0.2-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.14.2.Dockerfile b/cuda/3.14.2.Dockerfile
new file mode 100644
index 0000000..638cb01
--- /dev/null
+++ b/cuda/3.14.2.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.19.0.56
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.1
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.29.3
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.1
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.1.1-runtime-ubuntu24.04
+## └── nvidia/cuda:13.1.1-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.14.3.Dockerfile b/cuda/3.14.3.Dockerfile
new file mode 100644
index 0000000..3ccb3b5
--- /dev/null
+++ b/cuda/3.14.3.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.20.0.48
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.29.7
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.2
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.2.0-runtime-ubuntu24.04
+## └── nvidia/cuda:13.2.0-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.14.4.Dockerfile b/cuda/3.14.4.Dockerfile
new file mode 100644
index 0000000..d9e7d3d
--- /dev/null
+++ b/cuda/3.14.4.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.22.0.52
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.2
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.30.4
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.2
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.2.1-runtime-ubuntu24.04
+## └── nvidia/cuda:13.2.1-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.14.5.Dockerfile b/cuda/3.14.5.Dockerfile
new file mode 100644
index 0000000..4580ed6
--- /dev/null
+++ b/cuda/3.14.5.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.23.2.1
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.3
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.30.7
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.3
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.3.0-runtime-ubuntu24.04
+## └── nvidia/cuda:13.3.0-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.14.6.Dockerfile b/cuda/3.14.6.Dockerfile
new file mode 100644
index 0000000..6ec10e3
--- /dev/null
+++ b/cuda/3.14.6.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.25.0.15
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.3
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.30.7
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.3
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.3.1-runtime-ubuntu24.04
+## └── nvidia/cuda:13.3.1-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/3.14.7.Dockerfile b/cuda/3.14.7.Dockerfile
new file mode 100644
index 0000000..8977502
--- /dev/null
+++ b/cuda/3.14.7.Dockerfile
@@ -0,0 +1,270 @@
+ARG CUDNN_VERSION=9.27.0.42
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN=13.4
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
+ARG NCCL_VERSION=2.31.2
+ARG NCCL_VERSION_AMD64=${NCCL_VERSION}
+ARG NCCL_VERSION_ARM64=${NCCL_VERSION}
+ARG NCCL_CUDA_VERSION_MAJ_MIN=13.4
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64=${NCCL_CUDA_VERSION_MAJ_MIN}
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64=${NCCL_CUDA_VERSION_MAJ_MIN}
+
+## CUDA_IMAGE
+## ├── nvidia/cuda:13.4.2-runtime-ubuntu24.04
+## └── nvidia/cuda:13.4.2-devel-ubuntu24.04
+ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+ARG NCCL_VERSION_AMD64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_AMD64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+ARG NCCL_VERSION_ARM64
+ARG NCCL_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+ENV NV_LIBNCCL_PACKAGE_NAME=libnccl2
+ENV NV_LIBNCCL_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_PACKAGE="${NV_LIBNCCL_PACKAGE_NAME}=${NV_LIBNCCL_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+ENV NV_LIBNCCL_DEV_PACKAGE_NAME=libnccl-dev
+ENV NV_LIBNCCL_DEV_PACKAGE_VERSION=${NCCL_VERSION_ARM64}
+ENV NV_LIBNCCL_DEV_PACKAGE="${NV_LIBNCCL_DEV_PACKAGE_NAME}=${NV_LIBNCCL_DEV_PACKAGE_VERSION}-1+cuda${NCCL_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+
+ARG CUDA_IMAGE_FLAVOR
+ARG CUPTI_AVAILABLE
+ARG BUILD_START
+
+ENV CUDA_HOME=${CUDA_HOME} \
+ NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
+ BUILD_DATE=${BUILD_START}
+
+RUN cpuBlasLib="$(update-alternatives --query \
+ libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
+ && dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
+ ## Unminimise if the system has been minimised
+ && if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
+ yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
+ fi \
+ ## NVBLAS log configuration
+ && touch /var/log/nvblas.log \
+ && chown :users /var/log/nvblas.log \
+ && chmod g+rw /var/log/nvblas.log \
+ ## NVBLAS configuration using all compute-capable GPUs
+ && echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
+ && echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
+ ## Install NCCL
+ && apt-get -y install --no-install-recommends \
+ ${NV_LIBNCCL_PACKAGE} \
+ ${NV_LIBNCCL_DEV_PACKAGE} \
+ ## Keep apt from auto upgrading the NCCL package
+ && apt-mark hold \
+ ${NV_LIBNCCL_PACKAGE_NAME} \
+ ${NV_LIBNCCL_DEV_PACKAGE_NAME} \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
diff --git a/cuda/latest.Dockerfile b/cuda/latest.Dockerfile
index 1c41957..bc596db 100644
--- a/cuda/latest.Dockerfile
+++ b/cuda/latest.Dockerfile
@@ -1,31 +1,162 @@
+ARG CUDNN_VERSION
+ARG CUDNN_VERSION_AMD64=${CUDNN_VERSION}
+ARG CUDNN_VERSION_ARM64=${CUDNN_VERSION}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64=${CUDNN_CUDA_VERSION_MAJ_MIN}
+
ARG BUILD_ON_IMAGE
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION%%.*}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_AMD64%%.*}}
+ARG CUDNN_VERSION_MAJ=${CUDNN_VERSION_MAJ:-${CUDNN_VERSION_ARM64%%.*}}
+ARG CUDA_IMAGE_FLAVOR
-ARG CUDA_HOME=/usr/local/cuda
-ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn8-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1+cuda${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64}"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-amd64
-FROM ${BUILD_ON_IMAGE}
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
-ARG LIBNVINFER_VERSION
-ARG LIBNVINFER_VERSION_MAJ
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-runtime-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-amd64
+
+ARG CUDNN_VERSION_AMD64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_AMD64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_AMD64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_AMD64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_AMD64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM ${BUILD_ON_IMAGE} AS cudnn9-devel-arm64
+
+ARG CUDNN_VERSION_ARM64
+ARG CUDNN_CUDA_VERSION_MAJ_MIN_ARM64
+
+LABEL com.nvidia.cudnn.version="${CUDNN_VERSION_ARM64}"
+
+ENV CUDNN_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_DEV_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_HEADERS_PACKAGE_VERSION=${CUDNN_VERSION_ARM64}
+ENV NV_CUDNN_PACKAGE_NAME=libcudnn${NV_CUDNN_PACKAGE_VERSION%%.*}-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_DEV_PACKAGE_NAME=libcudnn${NV_CUDNN_DEV_PACKAGE_VERSION%%.*}-dev-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_HEADERS_PACKAGE_NAME=libcudnn${NV_CUDNN_HEADERS_PACKAGE_VERSION%%.*}-headers-cuda-${CUDNN_CUDA_VERSION_MAJ_MIN_ARM64%%.*}
+ENV NV_CUDNN_PACKAGE="${NV_CUDNN_PACKAGE_NAME}=${NV_CUDNN_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_DEV_PACKAGE="${NV_CUDNN_DEV_PACKAGE_NAME}=${NV_CUDNN_DEV_PACKAGE_VERSION}-1"
+ENV NV_CUDNN_HEADERS_PACKAGE="${NV_CUDNN_HEADERS_PACKAGE_NAME}=${NV_CUDNN_HEADERS_PACKAGE_VERSION}-1"
+
+FROM cudnn${CUDNN_VERSION_MAJ}-${CUDA_IMAGE_FLAVOR}-${TARGETARCH}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG CUDA_HOME=/usr/local/cuda
+ARG NVBLAS_CONFIG_FILE=/etc/nvblas.conf
ARG CUDA_IMAGE_FLAVOR
ARG CUPTI_AVAILABLE
ARG BUILD_START
-ARG CUDA_HOME
-ARG NVBLAS_CONFIG_FILE
-
ENV CUDA_HOME=${CUDA_HOME} \
NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE} \
- LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}${CUDA_HOME}/lib:${CUDA_HOME}/lib64${CUPTI_AVAILABLE:+:${CUDA_HOME}/extras/CUPTI/lib64} \
BUILD_DATE=${BUILD_START}
RUN cpuBlasLib="$(update-alternatives --query \
libblas.so.3-$(uname -m)-linux-gnu | grep Value | cut -f2 -d' ')" \
&& dpkgArch="$(dpkg --print-architecture)" \
+ && CUDA_VERSION_MAJ_MIN_DASH=$(echo ${CUDA_VERSION%.*} | tr '.' '-') \
+ ## Install the CUDA Runtime native dev links, headers
+ && apt-get update \
+ && apt-get -y install --no-install-recommends \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH}=${NV_CUDA_CUDART_VERSION} \
+ ## Keep apt from auto upgrading the CUDA Runtime packages
+ && apt-mark hold \
+ cuda-cudart-${CUDA_VERSION_MAJ_MIN_DASH} \
+ cuda-cudart-dev-${CUDA_VERSION_MAJ_MIN_DASH} \
## Unminimise if the system has been minimised
&& if [ ${CUDA_IMAGE_FLAVOR} = "devel" -a $(command -v unminimize) ]; then \
+ sed -i "s/apt-get upgrade/#apt-get upgrade/g" "$(which unminimize)"; \
yes | unminimize; \
+ sed -i "s/#apt-get upgrade/apt-get upgrade/g" "$(which unminimize)"; \
fi \
## NVBLAS log configuration
&& touch /var/log/nvblas.log \
@@ -35,35 +166,15 @@ RUN cpuBlasLib="$(update-alternatives --query \
&& echo "NVBLAS_LOGFILE /var/log/nvblas.log" > $NVBLAS_CONFIG_FILE \
&& echo "NVBLAS_CPU_BLAS_LIB $cpuBlasLib" >> $NVBLAS_CONFIG_FILE \
&& echo "NVBLAS_GPU_LIST ALL" >> $NVBLAS_CONFIG_FILE \
- ## Install TensorRT
- ## libnvinfer is not yet available for Ubuntu 22.04 on sbsa (arm64)
- && if [ ${dpkgArch} = "amd64" -o ! ${BASE_IMAGE} = "ubuntu:22.04" ]; then \
- ## Install development libraries and headers
- ## if devel-flavor of CUDA image is used
- if [ ${CUDA_IMAGE_FLAVOR} = "devel" ]; then dev="-dev"; fi; \
- CUDA_VERSION_MAJ_MIN=$(echo ${CUDA_VERSION} | cut -c 1-4); \
- apt-get update; \
- apt-get -y install --no-install-recommends \
- libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
- libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
- libnvinfer${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN} \
- libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}=${LIBNVINFER_VERSION}+cuda${CUDA_VERSION_MAJ_MIN}; \
- ## Keep apt from auto upgrading the libnvinfer packages
- apt-mark hold \
- libnvinfer${dev:-${LIBNVINFER_VERSION_MAJ}} \
- libnvinfer-plugin${dev:-${LIBNVINFER_VERSION_MAJ}} \
- libnvinfer${LIBNVINFER_VERSION_MAJ} \
- libnvinfer-plugin${LIBNVINFER_VERSION_MAJ}; \
- ## TensorFlow versions < 2.12 expect TensorRT libraries version 7
- ## Create symlink when only TensorRT libraries version > 7 are available
- trtRunLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
- grep 'libnvinfer.so.[0-9]\+$'); \
- trtPluLib=$(ls -d /usr/lib/$(uname -m)-linux-gnu/* | \
- grep 'libnvinfer_plugin.so.[0-9]\+$'); \
- if [ "$(echo $trtRunLib | sed -n 's/.*.so.\([0-9]\+\)/\1/p')" -gt "7" ]; then \
- ln -rs $trtRunLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer.so.7; \
- ln -rs $trtPluLib /usr/lib/$(uname -m)-linux-gnu/libnvinfer_plugin.so.7; \
- fi \
- fi \
+ ## Install cuDNN
+ && apt-get -y install --no-install-recommends \
+ ${NV_CUDNN_PACKAGE} \
+ ${NV_CUDNN_DEV_PACKAGE} \
+ ${NV_CUDNN_HEADERS_PACKAGE} \
+ ## Keep apt from auto upgrading the cuDNN packages
+ && apt-mark hold \
+ ${NV_CUDNN_PACKAGE_NAME} \
+ ${NV_CUDNN_DEV_PACKAGE_NAME} \
+ ${NV_CUDNN_HEADERS_PACKAGE_NAME} \
## Clean up
&& rm -rf /var/lib/apt/lists/*
diff --git a/scipy/.gitlab-ci.yml b/scipy/.gitlab-ci.yml
index 0b23012..6078f8f 100644
--- a/scipy/.gitlab-ci.yml
+++ b/scipy/.gitlab-ci.yml
@@ -1,6 +1,8 @@
-.env:
- variables:
- PYTHON_VERSION: "3.11.4"
+variables:
+ PYTHON_VERSION: "3.15.0"
+ CTAN_REPO_BUILD_LATEST: "https://mirror.init7.net/ctan/systems/texlive/tlnet"
+ TAG_VERSION_MAJ_MIN: "false"
+ TAG_VERSION_MAJ: "false"
.before-script-build: &before-script-build
- |
@@ -28,7 +30,6 @@
.build:
image: glcr.b-data.ch/docker/docker:dind
stage: build
- extends: .env
services:
- name: glcr.b-data.ch/docker/docker:dind
alias: docker
@@ -43,7 +44,6 @@
.post:
image: glcr.b-data.ch/docker/docker:dind
stage: .post
- extends: .env
build:latest-linux-amd64:
extends: .build
@@ -55,6 +55,7 @@ build:latest-linux-amd64:
docker build --pull
--build-arg BUILD_ON_IMAGE
--build-arg PYTHON_VERSION
+ --build-arg CTAN_REPO_BUILD_LATEST
--build-arg BUILD_START=$(date -uIseconds)
-t $CI_APP_REPO:$CI_APP_TAG-linux-amd64
-t $CI_APP_REPO:latest-linux-amd64
@@ -75,6 +76,7 @@ build:latest-linux-arm64v8:
docker build --pull
--build-arg BUILD_ON_IMAGE
--build-arg PYTHON_VERSION
+ --build-arg CTAN_REPO_BUILD_LATEST
--build-arg BUILD_START=$(date -uIseconds)
-t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-t $CI_APP_REPO:latest-linux-arm64v8
@@ -136,21 +138,21 @@ build-manifest:latest-linux-multiarch:
$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:$CI_APP_TAG
- - |
+
docker manifest create $CI_APP_REPO:latest $CI_MANIFEST_LIST
if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
docker manifest annotate --variant v8 $CI_APP_REPO:latest \
$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:latest
- - |
+
docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
- - |
+
docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST
if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \
@@ -177,6 +179,24 @@ build-manifest:version-linux-multiarch:
$CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:$CI_APP_TAG
+
+ if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then
+ docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
+ if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
+ docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
+ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
+ fi
+ docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
+ fi
+
+ if [[ "$TAG_VERSION_MAJ" == "true" ]]; then
+ docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST
+ if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
+ docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \
+ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
+ fi
+ docker manifest push $CI_APP_REPO:$VERSION_MAJ
+ fi
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $CI_PIPELINE_TRIGGERED
changes:
diff --git a/scipy/3.10.13.Dockerfile b/scipy/3.10.13.Dockerfile
new file mode 100644
index 0000000..757ff76
--- /dev/null
+++ b/scipy/3.10.13.Dockerfile
@@ -0,0 +1,124 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.10.13
+ARG QUARTO_VERSION=1.3.450
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2023/08/24/tlnet
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ qpdf \
+ texinfo \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.11.10.Dockerfile b/scipy/3.11.10.Dockerfile
new file mode 100644
index 0000000..4f194ad
--- /dev/null
+++ b/scipy/3.11.10.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.11.10
+ARG QUARTO_VERSION=1.6.39
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/12/03/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit -v=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.11.4.Dockerfile b/scipy/3.11.4.Dockerfile
new file mode 100644
index 0000000..ceb0745
--- /dev/null
+++ b/scipy/3.11.4.Dockerfile
@@ -0,0 +1,124 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.11.4
+ARG QUARTO_VERSION=1.3.450
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2023/08/24/tlnet
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ qpdf \
+ texinfo \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.11.5.Dockerfile b/scipy/3.11.5.Dockerfile
new file mode 100644
index 0000000..468226f
--- /dev/null
+++ b/scipy/3.11.5.Dockerfile
@@ -0,0 +1,125 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.11.5
+ARG QUARTO_VERSION=1.3.450
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2023/10/02/tlnet
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.11.6.Dockerfile b/scipy/3.11.6.Dockerfile
new file mode 100644
index 0000000..3c98fe4
--- /dev/null
+++ b/scipy/3.11.6.Dockerfile
@@ -0,0 +1,125 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.11.6
+ARG QUARTO_VERSION=1.3.450
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2023/12/04/tlnet
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.11.7.Dockerfile b/scipy/3.11.7.Dockerfile
new file mode 100644
index 0000000..c3d50e7
--- /dev/null
+++ b/scipy/3.11.7.Dockerfile
@@ -0,0 +1,125 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.11.7
+ARG QUARTO_VERSION=1.4.549
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/02/06/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.11.8.Dockerfile b/scipy/3.11.8.Dockerfile
new file mode 100644
index 0000000..774f593
--- /dev/null
+++ b/scipy/3.11.8.Dockerfile
@@ -0,0 +1,125 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.11.8
+ARG QUARTO_VERSION=1.4.552
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/04/02/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.11.9.Dockerfile b/scipy/3.11.9.Dockerfile
new file mode 100644
index 0000000..072ce88
--- /dev/null
+++ b/scipy/3.11.9.Dockerfile
@@ -0,0 +1,133 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.11.9
+ARG QUARTO_VERSION=1.5.57
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/09/07/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.12.0.Dockerfile b/scipy/3.12.0.Dockerfile
new file mode 100644
index 0000000..3cfd414
--- /dev/null
+++ b/scipy/3.12.0.Dockerfile
@@ -0,0 +1,127 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.0
+ARG QUARTO_VERSION=1.3.450
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2023/12/08/tlnet
+
+FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## For h5py wheels
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ #numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.12.1.Dockerfile b/scipy/3.12.1.Dockerfile
new file mode 100644
index 0000000..0945587
--- /dev/null
+++ b/scipy/3.12.1.Dockerfile
@@ -0,0 +1,127 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.1
+ARG QUARTO_VERSION=1.4.549
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/02/06/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## For h5py wheels
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.12.10.Dockerfile b/scipy/3.12.10.Dockerfile
new file mode 100644
index 0000000..fd9870f
--- /dev/null
+++ b/scipy/3.12.10.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.10
+ARG QUARTO_VERSION=1.7.31
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/06/03/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.12.11.Dockerfile b/scipy/3.12.11.Dockerfile
new file mode 100644
index 0000000..343ebc3
--- /dev/null
+++ b/scipy/3.12.11.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.11
+ARG QUARTO_VERSION=1.8.25
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/10/09/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.12.2.Dockerfile b/scipy/3.12.2.Dockerfile
new file mode 100644
index 0000000..62305dc
--- /dev/null
+++ b/scipy/3.12.2.Dockerfile
@@ -0,0 +1,127 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.2
+ARG QUARTO_VERSION=1.4.553
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/04/09/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## For h5py wheels
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.12.3.Dockerfile b/scipy/3.12.3.Dockerfile
new file mode 100644
index 0000000..a9d59e4
--- /dev/null
+++ b/scipy/3.12.3.Dockerfile
@@ -0,0 +1,127 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.3
+ARG QUARTO_VERSION=1.4.555
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/06/06/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.12.4.Dockerfile b/scipy/3.12.4.Dockerfile
new file mode 100644
index 0000000..7ae2b96
--- /dev/null
+++ b/scipy/3.12.4.Dockerfile
@@ -0,0 +1,127 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.4
+ARG QUARTO_VERSION=1.5.56
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/08/06/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ CTAN_REPO=${CTAN_REPO} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
diff --git a/scipy/3.12.5.Dockerfile b/scipy/3.12.5.Dockerfile
new file mode 100644
index 0000000..cd3318d
--- /dev/null
+++ b/scipy/3.12.5.Dockerfile
@@ -0,0 +1,133 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.5
+ARG QUARTO_VERSION=1.5.57
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/09/06/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.12.6.Dockerfile b/scipy/3.12.6.Dockerfile
new file mode 100644
index 0000000..68f5e72
--- /dev/null
+++ b/scipy/3.12.6.Dockerfile
@@ -0,0 +1,133 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.6
+ARG QUARTO_VERSION=1.5.57
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/10/01/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.12.7.Dockerfile b/scipy/3.12.7.Dockerfile
new file mode 100644
index 0000000..53b8856
--- /dev/null
+++ b/scipy/3.12.7.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.7
+ARG QUARTO_VERSION=1.6.39
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/12/03/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit -v=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.12.8.Dockerfile b/scipy/3.12.8.Dockerfile
new file mode 100644
index 0000000..a9bf307
--- /dev/null
+++ b/scipy/3.12.8.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.8
+ARG QUARTO_VERSION=1.6.40
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/02/04/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit -v=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.12.9.Dockerfile b/scipy/3.12.9.Dockerfile
new file mode 100644
index 0000000..3042131
--- /dev/null
+++ b/scipy/3.12.9.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.12.9
+ARG QUARTO_VERSION=1.6.43
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/04/08/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit -v=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.0.Dockerfile b/scipy/3.13.0.Dockerfile
new file mode 100644
index 0000000..be8eb72
--- /dev/null
+++ b/scipy/3.13.0.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.0
+ARG QUARTO_VERSION=1.6.39
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2024/12/03/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit -v=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ #numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.1.Dockerfile b/scipy/3.13.1.Dockerfile
new file mode 100644
index 0000000..f877eca
--- /dev/null
+++ b/scipy/3.13.1.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.1
+ARG QUARTO_VERSION=1.6.40
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/02/04/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit -v=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.10.Dockerfile b/scipy/3.13.10.Dockerfile
new file mode 100644
index 0000000..40a0d97
--- /dev/null
+++ b/scipy/3.13.10.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.10
+ARG QUARTO_VERSION=1.8.26
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/12/05/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.11.Dockerfile b/scipy/3.13.11.Dockerfile
new file mode 100644
index 0000000..935b03f
--- /dev/null
+++ b/scipy/3.13.11.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.11
+ARG QUARTO_VERSION=1.8.27
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/02/03/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.12.Dockerfile b/scipy/3.13.12.Dockerfile
new file mode 100644
index 0000000..8711c1d
--- /dev/null
+++ b/scipy/3.13.12.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.12
+ARG QUARTO_VERSION=1.9.36
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/04/07/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.13.Dockerfile b/scipy/3.13.13.Dockerfile
new file mode 100644
index 0000000..c12b8c5
--- /dev/null
+++ b/scipy/3.13.13.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.13
+ARG QUARTO_VERSION=1.9.38
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/06/10/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.14.Dockerfile b/scipy/3.13.14.Dockerfile
new file mode 100644
index 0000000..773c3ef
--- /dev/null
+++ b/scipy/3.13.14.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.14
+ARG QUARTO_VERSION=1.10.18
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/08/05/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.15.Dockerfile b/scipy/3.13.15.Dockerfile
new file mode 100644
index 0000000..3171cff
--- /dev/null
+++ b/scipy/3.13.15.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.15
+ARG QUARTO_VERSION=1.10.18
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/09/30/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.16.Dockerfile b/scipy/3.13.16.Dockerfile
new file mode 100644
index 0000000..14b1405
--- /dev/null
+++ b/scipy/3.13.16.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.16
+ARG QUARTO_VERSION=1.10.18
+ARG CTAN_REPO=https://mirror.ctan.org/systems/texlive/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.2.Dockerfile b/scipy/3.13.2.Dockerfile
new file mode 100644
index 0000000..0276f17
--- /dev/null
+++ b/scipy/3.13.2.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.2
+ARG QUARTO_VERSION=1.6.43
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/04/08/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.3.Dockerfile b/scipy/3.13.3.Dockerfile
new file mode 100644
index 0000000..92f3ee3
--- /dev/null
+++ b/scipy/3.13.3.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.3
+ARG QUARTO_VERSION=1.7.31
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/06/03/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.4.Dockerfile b/scipy/3.13.4.Dockerfile
new file mode 100644
index 0000000..f375ef2
--- /dev/null
+++ b/scipy/3.13.4.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.4
+ARG QUARTO_VERSION=1.7.31
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/06/11/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.5.Dockerfile b/scipy/3.13.5.Dockerfile
new file mode 100644
index 0000000..bca10e6
--- /dev/null
+++ b/scipy/3.13.5.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.5
+ARG QUARTO_VERSION=1.7.32
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/08/06/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.6.Dockerfile b/scipy/3.13.6.Dockerfile
new file mode 100644
index 0000000..f2bf8bf
--- /dev/null
+++ b/scipy/3.13.6.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.6
+ARG QUARTO_VERSION=1.7.33
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/08/14/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.7.Dockerfile b/scipy/3.13.7.Dockerfile
new file mode 100644
index 0000000..59d2fb8
--- /dev/null
+++ b/scipy/3.13.7.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.7
+ARG QUARTO_VERSION=1.8.25
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/10/07/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.8.Dockerfile b/scipy/3.13.8.Dockerfile
new file mode 100644
index 0000000..f2cd331
--- /dev/null
+++ b/scipy/3.13.8.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.8
+ARG QUARTO_VERSION=1.8.25
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/10/14/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.13.9.Dockerfile b/scipy/3.13.9.Dockerfile
new file mode 100644
index 0000000..a4817a8
--- /dev/null
+++ b/scipy/3.13.9.Dockerfile
@@ -0,0 +1,138 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.13.9
+ARG QUARTO_VERSION=1.8.26
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/12/02/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Install facets
+ #&& cd /tmp \
+ #&& git clone https://github.com/PAIR-code/facets.git \
+ #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
+ #&& cd / \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.14.0.Dockerfile b/scipy/3.14.0.Dockerfile
new file mode 100644
index 0000000..27832de
--- /dev/null
+++ b/scipy/3.14.0.Dockerfile
@@ -0,0 +1,135 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.14.0
+ARG QUARTO_VERSION=1.8.26
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/12/02/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For tables wheels
+ libblosc2-dev \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ #numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables==3.10.1 \
+ #widgetsnbextension \
+ xlrd \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.14.1.Dockerfile b/scipy/3.14.1.Dockerfile
new file mode 100644
index 0000000..de5b3eb
--- /dev/null
+++ b/scipy/3.14.1.Dockerfile
@@ -0,0 +1,135 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.14.1
+ARG QUARTO_VERSION=1.8.26
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/12/05/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For tables wheels
+ libblosc2-dev \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ #numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables==3.10.1 \
+ #widgetsnbextension \
+ xlrd \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.14.2.Dockerfile b/scipy/3.14.2.Dockerfile
new file mode 100644
index 0000000..7b2dbaf
--- /dev/null
+++ b/scipy/3.14.2.Dockerfile
@@ -0,0 +1,133 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.14.2
+ARG QUARTO_VERSION=1.8.27
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/02/03/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ #widgetsnbextension \
+ xlrd \
+ && pip install git+https://github.com/PyTables/PyTables.git \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.14.3.Dockerfile b/scipy/3.14.3.Dockerfile
new file mode 100644
index 0000000..9c09f6b
--- /dev/null
+++ b/scipy/3.14.3.Dockerfile
@@ -0,0 +1,133 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.14.3
+ARG QUARTO_VERSION=1.9.36
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/04/07/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.14.4.Dockerfile b/scipy/3.14.4.Dockerfile
new file mode 100644
index 0000000..31a7ab8
--- /dev/null
+++ b/scipy/3.14.4.Dockerfile
@@ -0,0 +1,133 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.14.4
+ARG QUARTO_VERSION=1.9.37
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/05/10/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.14.5.Dockerfile b/scipy/3.14.5.Dockerfile
new file mode 100644
index 0000000..ef433cf
--- /dev/null
+++ b/scipy/3.14.5.Dockerfile
@@ -0,0 +1,133 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.14.5
+ARG QUARTO_VERSION=1.9.38
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/06/10/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.14.6.Dockerfile b/scipy/3.14.6.Dockerfile
new file mode 100644
index 0000000..4a77969
--- /dev/null
+++ b/scipy/3.14.6.Dockerfile
@@ -0,0 +1,133 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.14.6
+ARG QUARTO_VERSION=1.10.18
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/08/05/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/3.14.7.Dockerfile b/scipy/3.14.7.Dockerfile
new file mode 100644
index 0000000..82d9273
--- /dev/null
+++ b/scipy/3.14.7.Dockerfile
@@ -0,0 +1,133 @@
+ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
+ARG PYTHON_VERSION=3.14.7
+ARG QUARTO_VERSION=1.10.18
+ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2026/09/30/tlnet
+
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG NB_GID=100
+
+ARG BUILD_ON_IMAGE
+ARG QUARTO_VERSION
+ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
+ARG BUILD_START
+
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
+ QUARTO_VERSION=${QUARTO_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
+
+RUN dpkgArch="$(dpkg --print-architecture)" \
+ && apt-get update \
+ && apt-get install -y --no-install-recommends \
+ fonts-roboto \
+ ghostscript \
+ librsvg2-bin \
+ qpdf \
+ texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
+ ## Install quarto
+ && curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ && mkdir -p /opt/quarto \
+ && tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
+ && rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
+ ## Remove quarto pandoc
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Link to system pandoc
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
+ ## Tell APT about the TeX Live installation
+ ## by building a dummy package using equivs
+ && apt-get install -y --no-install-recommends equivs \
+ && cd /tmp \
+ && wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
+ && equivs-build debian-* \
+ && mv texlive-local*.deb texlive-local.deb \
+ && dpkg -i texlive-local.deb \
+ && apt-get -y purge equivs \
+ && apt-get -y autoremove \
+ ## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
+ && wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
+ | sh -s - --admin --no-path \
+ && mv ${HOME}/.TinyTeX /opt/TinyTeX \
+ && sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
+ /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ && ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
+ /opt/TinyTeX/bin/linux \
+ && /opt/TinyTeX/bin/linux/tlmgr path add \
+ && tlmgr update --self \
+ ## TeX packages as requested by the community
+ && curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
+ && tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
+ && rm -f pkgs-yihui.txt \
+ ## TeX packages as in rocker/verse
+ && tlmgr install \
+ context \
+ pdfcrop \
+ ## TeX packages as in jupyter/scipy-notebook
+ && tlmgr install \
+ cm-super \
+ dvipng \
+ ## TeX packages specific for nbconvert
+ && tlmgr install \
+ oberdiek \
+ titling \
+ && tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
+ && chown -R root:${NB_GID} /opt/TinyTeX \
+ && chmod -R g+w /opt/TinyTeX \
+ && chmod -R g+wx /opt/TinyTeX/bin \
+ ## Make the TeX Live fonts available as system fonts
+ && cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
+ /etc/fonts/conf.d/09-texlive.conf \
+ && fc-cache -fsv \
+ ## Install Python packages
+ && export PIP_BREAK_SYSTEM_PACKAGES=1 \
+ && pip install \
+ altair \
+ beautifulsoup4 \
+ bokeh \
+ bottleneck \
+ cloudpickle \
+ cython \
+ dask \
+ dill \
+ h5py \
+ #ipympl \
+ #ipywidgets \
+ matplotlib \
+ numba \
+ numexpr \
+ numpy \
+ pandas \
+ patsy \
+ protobuf \
+ scikit-image \
+ scikit-learn \
+ scipy \
+ seaborn \
+ sqlalchemy \
+ statsmodels \
+ sympy \
+ tables \
+ #widgetsnbextension \
+ xlrd \
+ ## Clean up
+ && rm -rf /tmp/* \
+ && rm -rf /var/lib/apt/lists/* \
+ ${HOME}/.cache \
+ ${HOME}/.config \
+ ${HOME}/.local \
+ ${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/scipy/latest.Dockerfile b/scipy/latest.Dockerfile
index 02493f4..82b7f0b 100644
--- a/scipy/latest.Dockerfile
+++ b/scipy/latest.Dockerfile
@@ -1,20 +1,22 @@
ARG BUILD_ON_IMAGE=glcr.b-data.ch/python/base
ARG PYTHON_VERSION
-ARG QUARTO_VERSION=1.3.433
+ARG QUARTO_VERSION=1.10.19
ARG CTAN_REPO=https://mirror.ctan.org/systems/texlive/tlnet
-FROM ${BUILD_ON_IMAGE}:${PYTHON_VERSION}
+FROM ${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION}
ARG DEBIAN_FRONTEND=noninteractive
+ARG NB_GID=100
+
ARG BUILD_ON_IMAGE
ARG QUARTO_VERSION
ARG CTAN_REPO
+ARG CTAN_REPO_BUILD_LATEST
ARG BUILD_START
-ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${PYTHON_VERSION} \
+ENV PARENT_IMAGE=${BUILD_ON_IMAGE}${PYTHON_VERSION:+:$PYTHON_VERSION} \
QUARTO_VERSION=${QUARTO_VERSION} \
- CTAN_REPO=${CTAN_REPO} \
BUILD_DATE=${BUILD_START}
ENV PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
@@ -24,17 +26,23 @@ RUN dpkgArch="$(dpkg --print-architecture)" \
&& apt-get install -y --no-install-recommends \
fonts-roboto \
ghostscript \
+ librsvg2-bin \
qpdf \
texinfo \
+ ## Python: For h5py wheels (arm64)
+ libhdf5-dev \
## Install quarto
&& curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
&& mkdir -p /opt/quarto \
&& tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
&& rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
+ ## Exempt quarto from address space limit
+ && sed -i 's/"${QUARTO_DENO}"/prlimit --as=unlimited: "${QUARTO_DENO}"/g' \
+ /opt/quarto/bin/quarto \
## Remove quarto pandoc
- && rm /opt/quarto/bin/tools/pandoc \
+ && rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
## Link to system pandoc
- && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/pandoc \
+ && ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
## Tell APT about the TeX Live installation
## by building a dummy package using equivs
&& apt-get install -y --no-install-recommends equivs \
@@ -46,6 +54,9 @@ RUN dpkgArch="$(dpkg --print-architecture)" \
&& apt-get -y purge equivs \
&& apt-get -y autoremove \
## Admin-based install of TinyTeX
+ && CTAN_REPO_ORIG=${CTAN_REPO} \
+ && CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
+ && export CTAN_REPO \
&& wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
| sh -s - --admin --no-path \
&& mv ${HOME}/.TinyTeX /opt/TinyTeX \
@@ -72,6 +83,7 @@ RUN dpkgArch="$(dpkg --print-architecture)" \
oberdiek \
titling \
&& tlmgr path add \
+ && tlmgr option repository ${CTAN_REPO_ORIG} \
&& chown -R root:${NB_GID} /opt/TinyTeX \
&& chmod -R g+w /opt/TinyTeX \
&& chmod -R g+wx /opt/TinyTeX/bin \
@@ -110,11 +122,6 @@ RUN dpkgArch="$(dpkg --print-architecture)" \
tables \
#widgetsnbextension \
xlrd \
- ## Install facets
- #&& cd /tmp \
- #&& git clone https://github.com/PAIR-code/facets.git \
- #&& jupyter nbextension install facets/facets-dist/ --sys-prefix \
- #&& cd / \
## Clean up
&& rm -rf /tmp/* \
&& rm -rf /var/lib/apt/lists/* \
@@ -122,3 +129,5 @@ RUN dpkgArch="$(dpkg --print-architecture)" \
${HOME}/.config \
${HOME}/.local \
${HOME}/.wget-hsts
+
+ENV CTAN_REPO=${CTAN_REPO}
diff --git a/ver/.gitlab-ci.yml b/ver/.gitlab-ci.yml
index 07d0678..c5e4c23 100644
--- a/ver/.gitlab-ci.yml
+++ b/ver/.gitlab-ci.yml
@@ -1,14 +1,38 @@
-.env:
- variables:
- PYTHON_VERSION: "3.11.4"
- CUDA_VERSION: "11.8.0"
- LIBNVINFER_VERSION: "8.5.3-1"
- LIBNVINFER_VERSION_MAJ: "8"
+variables:
+ PYTHON_VERSION: "3.15.0"
+ CUDA_VERSION: "13.4.2"
+ CUDNN_VERSION_AMD64: "9.27.0.42"
+ CUDNN_VERSION_ARM64: "9.27.0.42"
+ CUDNN_CUDA_VERSION_MAJ_MIN_AMD64: "13.4"
+ CUDNN_CUDA_VERSION_MAJ_MIN_ARM64: "13.4"
+ TAG_VERSION_MAJ_MIN: "false"
+ TAG_VERSION_MAJ: "false"
+
+workflow:
+ rules:
+ - if: $CI_COMMIT_BRANCH == "freeze-version" && $CUDA_BASE_IMAGE == null && $PYTHON_VERSION =~ /^3.12/
+ variables:
+ BASE_IMAGE_TAG: "12"
+ - if: $CI_COMMIT_BRANCH == "freeze-version" && $CUDA_BASE_IMAGE == "ubuntu" && $PYTHON_VERSION =~ /^3.12/
+ variables:
+ BASE_IMAGE: "$CUDA_BASE_IMAGE"
+ BASE_IMAGE_TAG: "22.04"
+ CUDA_IMAGE_BASE_SUBTAG: "base-$BASE_IMAGE$BASE_IMAGE_TAG"
+ CUDA_IMAGE_DEVEL_SUBTAG: "devel-$BASE_IMAGE$BASE_IMAGE_TAG"
+ CUDA_IMAGE_SUBTAG: "runtime-$BASE_IMAGE$BASE_IMAGE_TAG"
+ - if: $CUDA_BASE_IMAGE == "ubuntu"
+ variables:
+ BASE_IMAGE: "$CUDA_BASE_IMAGE"
+ BASE_IMAGE_TAG: "$CUDA_BASE_IMAGE_TAG"
+ CUDA_IMAGE_BASE_SUBTAG: "base-$BASE_IMAGE$BASE_IMAGE_TAG"
+ CUDA_IMAGE_DEVEL_SUBTAG: "devel-$BASE_IMAGE$BASE_IMAGE_TAG"
+ CUDA_IMAGE_SUBTAG: "runtime-$BASE_IMAGE$BASE_IMAGE_TAG"
+ - if: $CI_COMMIT_BRANCH
.before-script-all: &before-script-all
- |
if [[ ! -z "$CUDA_IMAGE_SUBTAG" ]]; then
- export CUDA_IMAGE_FLAVOR=`echo $CUDA_IMAGE_SUBTAG | grep -o "runtime\|devel"`
+ export CUDA_IMAGE_FLAVOR=`echo $CUDA_IMAGE_SUBTAG | grep -o "base\|runtime\|devel"`
if [[ "$CUDA_IMAGE_FLAVOR" == "devel" ]]; then
export CUPTI_AVAILABLE=1
fi
@@ -40,7 +64,6 @@
.build:
image: glcr.b-data.ch/docker/docker:dind
stage: build
- extends: .env
services:
- name: glcr.b-data.ch/docker/docker:dind
alias: docker
@@ -56,7 +79,6 @@
.post:
image: glcr.b-data.ch/docker/docker:dind
stage: .post
- extends: .env
before_script:
- *before-script-all
@@ -73,17 +95,22 @@ build:latest-linux-amd64:
--build-arg CUDA_IMAGE
--build-arg CUDA_VERSION
--build-arg CUDA_IMAGE_SUBTAG
+ --build-arg CUDA_IMAGE_LICENSE
--build-arg PYTHON_VERSION
--build-arg BUILD_START=$(date -uIseconds)
-t $CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-amd64
-t $CI_APP_REPO:latest${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-amd64
-f ver/latest.Dockerfile .
- |
- if [[ ! -z "$CUDA_IMAGE" ]]; then
+ if [[ ! -z "$CUDA_IMAGE" && "$CUDA_IMAGE_FLAVOR" != "base" ]]; then
docker build \
+ --build-arg CUDNN_VERSION_AMD64 \
+ --build-arg CUDNN_CUDA_VERSION_MAJ_MIN_AMD64 \
+ --build-arg NCCL_VERSION_AMD64 \
+ --build-arg NCCL_CUDA_VERSION_MAJ_MIN_AMD64 \
+ --build-arg LIBNVINFER_VERSION_AMD64 \
+ --build-arg LIBNVINFER_CUDA_VERSION_MAJ_MIN_AMD64 \
--build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-amd64 \
- --build-arg LIBNVINFER_VERSION \
- --build-arg LIBNVINFER_VERSION_MAJ \
--build-arg CUDA_IMAGE_FLAVOR \
--build-arg CUPTI_AVAILABLE \
--build-arg BUILD_START=$(date -uIseconds) \
@@ -111,17 +138,22 @@ build:latest-linux-arm64v8:
--build-arg CUDA_IMAGE
--build-arg CUDA_VERSION
--build-arg CUDA_IMAGE_SUBTAG
+ --build-arg CUDA_IMAGE_LICENSE
--build-arg PYTHON_VERSION
--build-arg BUILD_START=$(date -uIseconds)
-t $CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8
-t $CI_APP_REPO:latest${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8
-f ver/latest.Dockerfile .
- |
- if [[ ! -z "$CUDA_IMAGE" ]]; then
+ if [[ ! -z "$CUDA_IMAGE" && "$CUDA_IMAGE_FLAVOR" != "base" ]]; then
docker build \
+ --build-arg CUDNN_VERSION_ARM64 \
+ --build-arg CUDNN_CUDA_VERSION_MAJ_MIN_ARM64 \
+ --build-arg NCCL_VERSION_ARM64 \
+ --build-arg NCCL_CUDA_VERSION_MAJ_MIN_ARM64 \
+ --build-arg LIBNVINFER_VERSION_ARM64 \
+ --build-arg LIBNVINFER_CUDA_VERSION_MAJ_MIN_ARM64 \
--build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8 \
- --build-arg LIBNVINFER_VERSION \
- --build-arg LIBNVINFER_VERSION_MAJ \
--build-arg CUDA_IMAGE_FLAVOR \
--build-arg CUPTI_AVAILABLE \
--build-arg BUILD_START=$(date -uIseconds) \
@@ -148,15 +180,14 @@ build:version-linux-amd64:
--build-arg BASE_IMAGE_TAG
--build-arg CUDA_IMAGE
--build-arg CUDA_IMAGE_SUBTAG
+ --build-arg CUDA_IMAGE_LICENSE
--build-arg BUILD_START=$(date -uIseconds)
-t $CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-amd64
-f ver/$PYTHON_VERSION.Dockerfile .
- |
- if [[ ! -z "$CUDA_IMAGE" ]]; then
+ if [[ ! -z "$CUDA_IMAGE" && "$CUDA_IMAGE_FLAVOR" != "base" ]]; then
docker build \
--build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-amd64 \
- --build-arg LIBNVINFER_VERSION \
- --build-arg LIBNVINFER_VERSION_MAJ \
--build-arg CUDA_IMAGE_FLAVOR \
--build-arg CUPTI_AVAILABLE \
--build-arg BUILD_START=$(date -uIseconds) \
@@ -181,15 +212,14 @@ build:version-linux-arm64v8:
--build-arg BASE_IMAGE_TAG
--build-arg CUDA_IMAGE
--build-arg CUDA_IMAGE_SUBTAG
+ --build-arg CUDA_IMAGE_LICENSE
--build-arg BUILD_START=$(date -uIseconds)
-t $CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8
-f ver/$PYTHON_VERSION.Dockerfile .
- |
- if [[ ! -z "$CUDA_IMAGE" ]]; then
+ if [[ ! -z "$CUDA_IMAGE" && "$CUDA_IMAGE_FLAVOR" != "base" ]]; then
docker build \
--build-arg BUILD_ON_IMAGE=$CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8 \
- --build-arg LIBNVINFER_VERSION \
- --build-arg LIBNVINFER_VERSION_MAJ \
--build-arg CUDA_IMAGE_FLAVOR \
--build-arg CUPTI_AVAILABLE \
--build-arg BUILD_START=$(date -uIseconds) \
@@ -289,6 +319,24 @@ build-manifest:version-linux-multiarch:
$CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR
+
+ if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then
+ docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR $CI_MANIFEST_LIST
+ if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
+ docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR \
+ $CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8
+ fi
+ docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR
+ fi
+
+ if [[ "$TAG_VERSION_MAJ" == "true" ]]; then
+ docker manifest create $CI_APP_REPO:$VERSION_MAJ${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR $CI_MANIFEST_LIST
+ if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
+ docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR \
+ $CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8
+ fi
+ docker manifest push $CI_APP_REPO:$VERSION_MAJ${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR
+ fi
- |
if [[ "$CUDA_IMAGE_FLAVOR" == "runtime" ]]; then
docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST
@@ -297,6 +345,24 @@ build-manifest:version-linux-multiarch:
$CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8
fi
docker manifest push $CI_APP_REPO:$CI_APP_TAG
+
+ if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then
+ docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
+ if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
+ docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
+ $CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8
+ fi
+ docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
+ fi
+
+ if [[ "$TAG_VERSION_MAJ" == "true" ]]; then
+ docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST
+ if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
+ docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \
+ $CI_APP_REPO:$CI_APP_TAG${CUDA_IMAGE_FLAVOR:+-}$CUDA_IMAGE_FLAVOR-linux-arm64v8
+ fi
+ docker manifest push $CI_APP_REPO:$VERSION_MAJ
+ fi
fi
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version"
@@ -365,7 +431,7 @@ trigger-version-cuda-build:
changes:
- ver/$PYTHON_VERSION.Dockerfile
-trigger-latest-cuda-devel-build:
+trigger-latest-cuda-self-build:
extends: .post
stage: .post
needs: ["build-manifest:latest-linux-multiarch"]
@@ -373,6 +439,7 @@ trigger-latest-cuda-devel-build:
- apk upgrade --no-cache
- apk add --update --no-cache curl
script:
+ - curl -X POST -F token=$CUDA_PYTHON_VER -F ref=main -F "variables[CUDA_IMAGE_SUBTAG]=$CUDA_IMAGE_BASE_SUBTAG" https://gitlab.b-data.ch/api/v4/projects/318/trigger/pipeline
- curl -X POST -F token=$CUDA_PYTHON_VER -F ref=main -F "variables[CUDA_IMAGE_SUBTAG]=$CUDA_IMAGE_DEVEL_SUBTAG" https://gitlab.b-data.ch/api/v4/projects/318/trigger/pipeline
rules:
- if: $CI_COMMIT_BRANCH == "main" && $CUDA_IMAGE_SUBTAG =~ /runtime/
@@ -380,7 +447,7 @@ trigger-latest-cuda-devel-build:
- ver/latest.Dockerfile
- cuda/latest.Dockerfile
-trigger-version-cuda-devel-build:
+trigger-version-cuda-self-build:
extends: .post
stage: .post
needs: ["build-manifest:version-linux-multiarch"]
@@ -388,6 +455,7 @@ trigger-version-cuda-devel-build:
- apk upgrade --no-cache
- apk add --update --no-cache curl
script:
+ - curl -X POST -F token=$CUDA_PYTHON_VER -F ref=freeze-version -F "variables[CUDA_IMAGE_SUBTAG]=$CUDA_IMAGE_BASE_SUBTAG" https://gitlab.b-data.ch/api/v4/projects/318/trigger/pipeline
- curl -X POST -F token=$CUDA_PYTHON_VER -F ref=freeze-version -F "variables[CUDA_IMAGE_SUBTAG]=$CUDA_IMAGE_DEVEL_SUBTAG" https://gitlab.b-data.ch/api/v4/projects/318/trigger/pipeline
rules:
- if: $CI_COMMIT_BRANCH == "freeze-version" && $CUDA_IMAGE_SUBTAG =~ /runtime/
diff --git a/ver/3.10.13.Dockerfile b/ver/3.10.13.Dockerfile
new file mode 100644
index 0000000..2e78f9f
--- /dev/null
+++ b/ver/3.10.13.Dockerfile
@@ -0,0 +1,70 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.10.13
+
+FROM glcr.b-data.ch/python/psi/${PYTHON_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+LABEL org.opencontainers.image.licenses="MIT" \
+ org.opencontainers.image.source="https://gitlab.b-data.ch/python/docker-stack" \
+ org.opencontainers.image.vendor="b-data GmbH" \
+ org.opencontainers.image.authors="Olivier Benz "
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.11.10.Dockerfile b/ver/3.11.10.Dockerfile
new file mode 100644
index 0000000..e399790
--- /dev/null
+++ b/ver/3.11.10.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.11.10
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.11.4.Dockerfile b/ver/3.11.4.Dockerfile
new file mode 100644
index 0000000..2caa175
--- /dev/null
+++ b/ver/3.11.4.Dockerfile
@@ -0,0 +1,70 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.11.4
+
+FROM glcr.b-data.ch/python/psi/${PYTHON_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+LABEL org.opencontainers.image.licenses="MIT" \
+ org.opencontainers.image.source="https://gitlab.b-data.ch/python/docker-stack" \
+ org.opencontainers.image.vendor="b-data GmbH" \
+ org.opencontainers.image.authors="Olivier Benz "
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.11.5.Dockerfile b/ver/3.11.5.Dockerfile
new file mode 100644
index 0000000..4eeb9af
--- /dev/null
+++ b/ver/3.11.5.Dockerfile
@@ -0,0 +1,70 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.11.5
+
+FROM glcr.b-data.ch/python/psi/${PYTHON_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+LABEL org.opencontainers.image.licenses="MIT" \
+ org.opencontainers.image.source="https://gitlab.b-data.ch/python/docker-stack" \
+ org.opencontainers.image.vendor="b-data GmbH" \
+ org.opencontainers.image.authors="Olivier Benz "
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.11.6.Dockerfile b/ver/3.11.6.Dockerfile
new file mode 100644
index 0000000..b1f0bcf
--- /dev/null
+++ b/ver/3.11.6.Dockerfile
@@ -0,0 +1,70 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.11.6
+
+FROM glcr.b-data.ch/python/psi/${PYTHON_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+LABEL org.opencontainers.image.licenses="MIT" \
+ org.opencontainers.image.source="https://gitlab.b-data.ch/python/docker-stack" \
+ org.opencontainers.image.vendor="b-data GmbH" \
+ org.opencontainers.image.authors="Olivier Benz "
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.11.7.Dockerfile b/ver/3.11.7.Dockerfile
new file mode 100644
index 0000000..83760e5
--- /dev/null
+++ b/ver/3.11.7.Dockerfile
@@ -0,0 +1,83 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.11.7
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+LABEL org.opencontainers.image.licenses="MIT" \
+ org.opencontainers.image.source="https://gitlab.b-data.ch/python/docker-stack" \
+ org.opencontainers.image.vendor="b-data GmbH" \
+ org.opencontainers.image.authors="Olivier Benz "
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.11.8.Dockerfile b/ver/3.11.8.Dockerfile
new file mode 100644
index 0000000..896d9c1
--- /dev/null
+++ b/ver/3.11.8.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.11.8
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.11.9.Dockerfile b/ver/3.11.9.Dockerfile
new file mode 100644
index 0000000..d22e4ef
--- /dev/null
+++ b/ver/3.11.9.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.11.9
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.0.Dockerfile b/ver/3.12.0.Dockerfile
new file mode 100644
index 0000000..982efd0
--- /dev/null
+++ b/ver/3.12.0.Dockerfile
@@ -0,0 +1,70 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.12.0
+
+FROM glcr.b-data.ch/python/psi/${PYTHON_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+LABEL org.opencontainers.image.licenses="MIT" \
+ org.opencontainers.image.source="https://gitlab.b-data.ch/python/docker-stack" \
+ org.opencontainers.image.vendor="b-data GmbH" \
+ org.opencontainers.image.authors="Olivier Benz "
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.1.Dockerfile b/ver/3.12.1.Dockerfile
new file mode 100644
index 0000000..b715d20
--- /dev/null
+++ b/ver/3.12.1.Dockerfile
@@ -0,0 +1,83 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.12.1
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+LABEL org.opencontainers.image.licenses="MIT" \
+ org.opencontainers.image.source="https://gitlab.b-data.ch/python/docker-stack" \
+ org.opencontainers.image.vendor="b-data GmbH" \
+ org.opencontainers.image.authors="Olivier Benz "
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.10.Dockerfile b/ver/3.12.10.Dockerfile
new file mode 100644
index 0000000..fe0e13e
--- /dev/null
+++ b/ver/3.12.10.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.9.0
+ARG PYTHON_VERSION=3.12.10
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.11.Dockerfile b/ver/3.12.11.Dockerfile
new file mode 100644
index 0000000..b747549
--- /dev/null
+++ b/ver/3.12.11.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.9.1
+ARG PYTHON_VERSION=3.12.11
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.2.Dockerfile b/ver/3.12.2.Dockerfile
new file mode 100644
index 0000000..989eebe
--- /dev/null
+++ b/ver/3.12.2.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=11.8.0
+ARG PYTHON_VERSION=3.12.2
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.3.Dockerfile b/ver/3.12.3.Dockerfile
new file mode 100644
index 0000000..10697d7
--- /dev/null
+++ b/ver/3.12.3.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.5.0
+ARG PYTHON_VERSION=3.12.3
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.4.Dockerfile b/ver/3.12.4.Dockerfile
new file mode 100644
index 0000000..3df6b7d
--- /dev/null
+++ b/ver/3.12.4.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.5.1
+ARG PYTHON_VERSION=3.12.4
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.5.Dockerfile b/ver/3.12.5.Dockerfile
new file mode 100644
index 0000000..a866636
--- /dev/null
+++ b/ver/3.12.5.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.6.1
+ARG PYTHON_VERSION=3.12.5
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.6.Dockerfile b/ver/3.12.6.Dockerfile
new file mode 100644
index 0000000..89a3e2e
--- /dev/null
+++ b/ver/3.12.6.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.6.1
+ARG PYTHON_VERSION=3.12.6
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.7.Dockerfile b/ver/3.12.7.Dockerfile
new file mode 100644
index 0000000..ea59eb7
--- /dev/null
+++ b/ver/3.12.7.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.6.3
+ARG PYTHON_VERSION=3.12.7
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.8.Dockerfile b/ver/3.12.8.Dockerfile
new file mode 100644
index 0000000..b313aa0
--- /dev/null
+++ b/ver/3.12.8.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.8.0
+ARG PYTHON_VERSION=3.12.8
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.12.9.Dockerfile b/ver/3.12.9.Dockerfile
new file mode 100644
index 0000000..10d26cc
--- /dev/null
+++ b/ver/3.12.9.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.8.1
+ARG PYTHON_VERSION=3.12.9
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.0.Dockerfile b/ver/3.13.0.Dockerfile
new file mode 100644
index 0000000..c4c3ec5
--- /dev/null
+++ b/ver/3.13.0.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.6.3
+ARG PYTHON_VERSION=3.13.0
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.1.Dockerfile b/ver/3.13.1.Dockerfile
new file mode 100644
index 0000000..4799e09
--- /dev/null
+++ b/ver/3.13.1.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.8.0
+ARG PYTHON_VERSION=3.13.1
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.10.Dockerfile b/ver/3.13.10.Dockerfile
new file mode 100644
index 0000000..0ccb55e
--- /dev/null
+++ b/ver/3.13.10.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.0.2
+ARG PYTHON_VERSION=3.13.10
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.11.Dockerfile b/ver/3.13.11.Dockerfile
new file mode 100644
index 0000000..3f3fc3f
--- /dev/null
+++ b/ver/3.13.11.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.1.1
+ARG PYTHON_VERSION=3.13.11
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.12.Dockerfile b/ver/3.13.12.Dockerfile
new file mode 100644
index 0000000..8df82df
--- /dev/null
+++ b/ver/3.13.12.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.2.0
+ARG PYTHON_VERSION=3.13.12
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.13.Dockerfile b/ver/3.13.13.Dockerfile
new file mode 100644
index 0000000..5ed32e8
--- /dev/null
+++ b/ver/3.13.13.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.3.0
+ARG PYTHON_VERSION=3.13.13
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.14.Dockerfile b/ver/3.13.14.Dockerfile
new file mode 100644
index 0000000..85a0f2c
--- /dev/null
+++ b/ver/3.13.14.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.3.1
+ARG PYTHON_VERSION=3.13.14
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.15.Dockerfile b/ver/3.13.15.Dockerfile
new file mode 100644
index 0000000..ca92d99
--- /dev/null
+++ b/ver/3.13.15.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.4.2
+ARG PYTHON_VERSION=3.13.15
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.16.Dockerfile b/ver/3.13.16.Dockerfile
new file mode 100644
index 0000000..856a66b
--- /dev/null
+++ b/ver/3.13.16.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.4.2
+ARG PYTHON_VERSION=3.13.16
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.2.Dockerfile b/ver/3.13.2.Dockerfile
new file mode 100644
index 0000000..90edb78
--- /dev/null
+++ b/ver/3.13.2.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.8.1
+ARG PYTHON_VERSION=3.13.2
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.3.Dockerfile b/ver/3.13.3.Dockerfile
new file mode 100644
index 0000000..d2fbb5d
--- /dev/null
+++ b/ver/3.13.3.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.9.0
+ARG PYTHON_VERSION=3.13.3
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.4.Dockerfile b/ver/3.13.4.Dockerfile
new file mode 100644
index 0000000..5c4945c
--- /dev/null
+++ b/ver/3.13.4.Dockerfile
@@ -0,0 +1,89 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.9.0
+ARG PYTHON_VERSION=3.13.4
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.5.Dockerfile b/ver/3.13.5.Dockerfile
new file mode 100644
index 0000000..aafb675
--- /dev/null
+++ b/ver/3.13.5.Dockerfile
@@ -0,0 +1,90 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.9.1
+ARG PYTHON_VERSION=3.13.5
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.6.Dockerfile b/ver/3.13.6.Dockerfile
new file mode 100644
index 0000000..74afde9
--- /dev/null
+++ b/ver/3.13.6.Dockerfile
@@ -0,0 +1,90 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=12
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=12.9.1
+ARG PYTHON_VERSION=3.13.6
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.7.Dockerfile b/ver/3.13.7.Dockerfile
new file mode 100644
index 0000000..b177af1
--- /dev/null
+++ b/ver/3.13.7.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.0.1
+ARG PYTHON_VERSION=3.13.7
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.8.Dockerfile b/ver/3.13.8.Dockerfile
new file mode 100644
index 0000000..fc468ea
--- /dev/null
+++ b/ver/3.13.8.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.0.1
+ARG PYTHON_VERSION=3.13.8
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.13.9.Dockerfile b/ver/3.13.9.Dockerfile
new file mode 100644
index 0000000..5b51091
--- /dev/null
+++ b/ver/3.13.9.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.0.2
+ARG PYTHON_VERSION=3.13.9
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.14.0.Dockerfile b/ver/3.14.0.Dockerfile
new file mode 100644
index 0000000..a3642a3
--- /dev/null
+++ b/ver/3.14.0.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.0.2
+ARG PYTHON_VERSION=3.14.0
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.14.1.Dockerfile b/ver/3.14.1.Dockerfile
new file mode 100644
index 0000000..1555ec3
--- /dev/null
+++ b/ver/3.14.1.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.0.2
+ARG PYTHON_VERSION=3.14.1
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.14.2.Dockerfile b/ver/3.14.2.Dockerfile
new file mode 100644
index 0000000..8b80488
--- /dev/null
+++ b/ver/3.14.2.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.1.1
+ARG PYTHON_VERSION=3.14.2
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.14.3.Dockerfile b/ver/3.14.3.Dockerfile
new file mode 100644
index 0000000..b0adf12
--- /dev/null
+++ b/ver/3.14.3.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.2.0
+ARG PYTHON_VERSION=3.14.3
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.14.4.Dockerfile b/ver/3.14.4.Dockerfile
new file mode 100644
index 0000000..4d2bbb3
--- /dev/null
+++ b/ver/3.14.4.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.2.1
+ARG PYTHON_VERSION=3.14.4
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.14.5.Dockerfile b/ver/3.14.5.Dockerfile
new file mode 100644
index 0000000..b965786
--- /dev/null
+++ b/ver/3.14.5.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.3.0
+ARG PYTHON_VERSION=3.14.5
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.14.6.Dockerfile b/ver/3.14.6.Dockerfile
new file mode 100644
index 0000000..ddccfdd
--- /dev/null
+++ b/ver/3.14.6.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.3.1
+ARG PYTHON_VERSION=3.14.6
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/3.14.7.Dockerfile b/ver/3.14.7.Dockerfile
new file mode 100644
index 0000000..05e26f2
--- /dev/null
+++ b/ver/3.14.7.Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE_IMAGE=debian
+ARG BASE_IMAGE_TAG=13
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS=libopenblas-dev
+ARG CUDA_VERSION=13.4.2
+ARG PYTHON_VERSION=3.14.7
+
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
+
+FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+ARG BASE_IMAGE
+ARG BASE_IMAGE_TAG
+ARG CUDA_IMAGE
+ARG CUDA_IMAGE_SUBTAG
+ARG BLAS
+ARG CUDA_VERSION
+ARG PYTHON_VERSION
+ARG BUILD_START
+
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
+ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
+ CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
+ PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
+ PYTHON_VERSION=${PYTHON_VERSION} \
+ BUILD_DATE=${BUILD_START}
+
+ENV LANG=en_US.UTF-8 \
+ TERM=xterm \
+ TZ=Etc/UTC
+
+## Install Python
+COPY --from=psi /usr/local /usr/local
+
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ ca-certificates \
+ libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
+ libjs-sphinxdoc \
+ liblapack-dev \
+ libncurses-dev \
+ ${BLAS} \
+ libreadline-dev \
+ locales \
+ netbase \
+ pkg-config \
+ tzdata \
+ unzip \
+ zip \
+ zlib1g-dev \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
+ ## Update locale
+ && sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
+ && locale-gen \
+ && update-locale LANG=$LANG \
+ ## Switch BLAS/LAPACK (manual mode)
+ && if [ ${BLAS} = "libopenblas-dev" ]; then \
+ update-alternatives --set libblas.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/libblas.so.3; \
+ update-alternatives --set liblapack.so.3-$(uname -m)-linux-gnu \
+ /usr/lib/$(uname -m)-linux-gnu/openblas-pthread/liblapack.so.3; \
+ fi \
+ ## Clean up
+ && rm -rf /var/lib/apt/lists/*
+
+CMD ["python3"]
diff --git a/ver/latest.Dockerfile b/ver/latest.Dockerfile
index d769fed..80b7a03 100644
--- a/ver/latest.Dockerfile
+++ b/ver/latest.Dockerfile
@@ -1,20 +1,15 @@
ARG BASE_IMAGE=debian
-ARG BASE_IMAGE_TAG=12
+ARG BASE_IMAGE_TAG=13
ARG CUDA_IMAGE
ARG CUDA_IMAGE_SUBTAG
ARG BLAS=libopenblas-dev
ARG CUDA_VERSION
ARG PYTHON_VERSION
-FROM glcr.b-data.ch/python/psi/${PYTHON_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} as psi
+FROM glcr.b-data.ch/python/psi${PYTHON_VERSION:+/}${PYTHON_VERSION:-:none}${PYTHON_VERSION:+/$BASE_IMAGE}${PYTHON_VERSION:+:$BASE_IMAGE_TAG} as psi
FROM ${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG}
-LABEL org.opencontainers.image.licenses="MIT" \
- org.opencontainers.image.source="https://gitlab.b-data.ch/python/docker-stack" \
- org.opencontainers.image.vendor="b-data GmbH" \
- org.opencontainers.image.authors="Olivier Benz "
-
ARG DEBIAN_FRONTEND=noninteractive
ARG BASE_IMAGE
@@ -26,6 +21,17 @@ ARG CUDA_VERSION
ARG PYTHON_VERSION
ARG BUILD_START
+ARG CUDA_IMAGE_LICENSE=${CUDA_IMAGE:+"NVIDIA Deep Learning Container License"}
+ARG IMAGE_LICENSE=${CUDA_IMAGE_LICENSE:-"MIT"}
+ARG IMAGE_SOURCE=https://gitlab.b-data.ch/python/docker-stack
+ARG IMAGE_VENDOR="b-data GmbH"
+ARG IMAGE_AUTHORS="Olivier Benz "
+
+LABEL org.opencontainers.image.licenses="$IMAGE_LICENSE" \
+ org.opencontainers.image.source="$IMAGE_SOURCE" \
+ org.opencontainers.image.vendor="$IMAGE_VENDOR" \
+ org.opencontainers.image.authors="$IMAGE_AUTHORS"
+
ENV BASE_IMAGE=${BASE_IMAGE}:${BASE_IMAGE_TAG} \
CUDA_IMAGE=${CUDA_IMAGE}${CUDA_IMAGE:+:}${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG} \
PARENT_IMAGE=${CUDA_IMAGE:-$BASE_IMAGE}:${CUDA_IMAGE:+$CUDA_VERSION}${CUDA_IMAGE:+-}${CUDA_IMAGE_SUBTAG:-$BASE_IMAGE_TAG} \
@@ -43,9 +49,14 @@ RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
libexpat1-dev \
+ libffi-dev \
+ libgdbm-dev \
libjs-sphinxdoc \
liblapack-dev \
+ libncurses-dev \
${BLAS} \
+ libreadline-dev \
+ libsqlite3-dev \
locales \
netbase \
pkg-config \
@@ -53,6 +64,23 @@ RUN apt-get update \
unzip \
zip \
zlib1g-dev \
+ && if ([ "${BASE_IMAGE%:*}" = "debian" ] && dpkg --compare-versions "${BASE_IMAGE#*:}" ge "13") \
+ || ([ "${BASE_IMAGE%:*}" = "ubuntu" ] && dpkg --compare-versions "${BASE_IMAGE#*:}" ge "26"); then \
+ apt-get install -y --no-install-recommends libmpdec-dev; \
+ fi \
+ && if [ -z "$PYTHON_VERSION" ]; then \
+ ## Install system Python
+ apt-get -y install --no-install-recommends \
+ python3; \
+ ## make some useful symlinks that are expected to exist
+ ## ("/usr/bin/python" and friends)
+ for src in pydoc3 python3 python3-config; do \
+ dst="$(echo "$src" | tr -d 3)"; \
+ if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
+ ln -svT "$src" "/usr/bin/$dst"; \
+ fi \
+ done; \
+ fi \
## Update locale
&& sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
&& locale-gen \