Files
Jungfraujoch/docker/ubuntu2204/Dockerfile
T
leonarski_fandClaude Opus 4.8 68f3394f48
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 14m9s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 15m18s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 15m22s
Build Packages / build:rpm (rocky8) (push) Successful in 15m29s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 15m44s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 15m49s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 16m0s
Build Packages / XDS test (neggia plugin) (push) Successful in 7m19s
Build Packages / Generate python client (push) Successful in 30s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 8m25s
Build Packages / Create release (push) Skipped
Build Packages / Build documentation (push) Successful in 1m2s
Build Packages / XDS test (durin plugin) (push) Successful in 9m22s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 11m30s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 12m20s
Build Packages / build:rpm (rocky9) (push) Successful in 13m37s
Build Packages / DIALS test (push) Successful in 13m6s
Build Packages / Unit tests (push) Successful in 59m29s
deps: pin external Eigen to 3.4.x across docs and Docker images
Eigen is an external find_package(Eigen3 3.4) dependency. Eigen's
same-major-version rule means a bare 3.4 request only accepts 3.x, so 5.x
cannot be used without changing every requester (jfjoch, Ceres, and the
upstream ffbidx). Standardise on Eigen 3.4.x:

- docs: correct the Windows Eigen install recipe to 3.4.0 and note the
  same-major constraint; SOFTWARE.md now says 3.4.x (not "3.4 or newer").
- docker/{rocky8,rocky9,ubuntu2204,ubuntu2404}: actually install Eigen 3.4.0
  from source to /opt/eigen-3.4 (header-only) and add it to CMAKE_PREFIX_PATH.
  The images previously installed no Eigen at all, relying on the obsolete
  "CMake fetches it" assumption; a rebuild would have failed at configure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 20:53:42 +02:00

174 lines
5.7 KiB
Docker

# Ubuntu 22.04 (Jammy) base with CUDA 13 devel toolchain
FROM nvidia/cuda:13.0.1-devel-ubuntu22.04
LABEL authors="leonarski_f"
ENV DEBIAN_FRONTEND=noninteractive
ARG OPENSSL_VERSION=3.5.4
ARG QT_VERSION=6.9.1
ARG NODE_MAJOR=22
ARG EIGEN_VERSION=3.4.0
# HDF5, libtiff and libjpeg-turbo are built by the jungfraujoch CMake itself (FetchContent /
# ExternalProject). Eigen is an external find_package(Eigen3 3.4) dependency, installed from source
# below (3.4.x is required; Eigen's same-major-version rule rejects 5.x).
# Update base and install toolchain + Qt dependencies
# Notes:
# - GCC/G++ 13 are installed from jammy-backports
# - XCB/X11/OpenGL/EGL/DBus/fontconfig/freetype/zlib headers installed for building static Qt
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
wget \
gpg \
git \
tar \
xz-utils \
build-essential \
ninja-build \
python3 \
python3-venv \
python3-requests \
perl \
pkg-config \
gdb \
file \
nasm \
python3.11 \
python3.11-venv \
dpkg-dev \
fakeroot \
libnuma-dev \
libxcb1-dev \
libx11-dev \
libxext-dev \
libxrender-dev \
libxi-dev \
libxrandr-dev \
libxcursor-dev \
libxfixes-dev \
libxinerama-dev \
libxkbcommon-dev \
libxkbcommon-x11-dev \
libx11-xcb-dev \
libxcb-image0-dev \
libxcb-icccm4-dev \
libxcb-keysyms1-dev \
libxcb-render-util0-dev \
libxcb-util-dev \
libxcb-randr0-dev \
libxcb-xkb-dev \
libxcb-shm0-dev \
libxcb-cursor0 \
libxcb-cursor-dev \
libxcb-shape0-dev \
libxcb-sync-dev \
libxcb-xfixes0-dev \
libxcb-glx0-dev \
libgl1-mesa-dev \
libglx-dev \
libegl1-mesa-dev \
libdbus-1-dev \
zlib1g-dev \
libglib2.0-dev \
libfontconfig1-dev \
libdrm-dev \
mesa-utils \
libassimp-dev \
libglvnd-dev \
libfreetype6-dev; \
wget -qO- https://apt.kitware.com/keys/kitware-archive-latest.asc \
| gpg --dearmor \
| tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null; \
echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ jammy main" \
| tee /etc/apt/sources.list.d/kitware.list > /dev/null; \
apt-get update; \
apt-get install -y --no-install-recommends \
cmake=3.26.* \
cmake-data=3.26.* \
kitware-archive-keyring; \
apt-get -y install gcc-12 g++-12; \
apt-get clean; \
rm -rf /var/lib/apt/lists/*
# Use GCC/G++ 12 for builds
ENV CC=/usr/bin/gcc-12
ENV CXX=/usr/bin/g++-12
ENV PATH=/usr/bin:${PATH}
# Build a static OpenSSL
RUN set -eux; \
cd /tmp; \
curl -LO https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz; \
tar -xf openssl-${OPENSSL_VERSION}.tar.gz; \
cd openssl-${OPENSSL_VERSION}; \
./Configure linux-x86_64 no-shared no-module no-tests --prefix=/opt/openssl-${OPENSSL_VERSION} --libdir=lib; \
make -j"$(nproc)"; \
make install_sw; \
cd /; rm -rf /tmp/openssl-${OPENSSL_VERSION} /tmp/openssl-${OPENSSL_VERSION}.tar.gz
# Expose static OpenSSL to CMake/pkg-config
ENV OPENSSL_ROOT_DIR=/opt/openssl-${OPENSSL_VERSION}
ENV PKG_CONFIG_PATH=${OPENSSL_ROOT_DIR}/lib/pkgconfig:${OPENSSL_ROOT_DIR}/lib64/pkgconfig:${PKG_CONFIG_PATH}
# Install a recent Node.js (NodeSource)
RUN set -eux; \
curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash -; \
apt-get update; \
apt-get install -y --no-install-recommends nodejs; \
apt-get clean; \
rm -rf /var/lib/apt/lists/*; \
node --version; npm --version; (corepack enable || true)
# Build and install static Qt with Core, Gui, Widgets, Charts, DBus
ARG QT_PREFIX=/opt/qt-${QT_VERSION}-static
RUN set -eux; \
cd /tmp; \
curl -LO https://download.qt.io/official_releases/qt/6.9/${QT_VERSION}/single/qt-everywhere-src-${QT_VERSION}.tar.xz; \
tar -xf qt-everywhere-src-${QT_VERSION}.tar.xz; \
mkdir -p qt-everywhere-src-${QT_VERSION}/build && cd qt-everywhere-src-${QT_VERSION}/build; \
cmake -G Ninja \
-DQT_BUILD_SUBMODULES="qtbase;qtshadertools;qtdeclarative;qtcharts;qt3d" \
-DBUILD_SHARED_LIBS=OFF \
-DQT_BUILD_TESTS=OFF \
-DQT_BUILD_EXAMPLES=OFF \
-DQT_FEATURE_dbus=ON \
-DQT_FEATURE_xcb=ON \
-DQT_FEATURE_xcb_xlib=OFF \
-DQT_FEATURE_xkbcommon_x11=ON \
-DQT_FEATURE_opengl=ON \
-DQT_FEATURE_opengl_desktop=ON \
-DQT_FEATURE_opengl_dynamic=OFF \
-DQT_FEATURE_vulkan=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${QT_PREFIX} \
-DCMAKE_C_COMPILER=${CC} \
-DCMAKE_CXX_COMPILER=${CXX} \
-DQT_FEATURE_openssl=ON \
-DQT_FEATURE_openssl_linked=ON \
-DOPENSSL_USE_STATIC_LIBS=TRUE \
..; \
cmake --build . -j"$(nproc)"; \
cmake --install .; \
cd /; rm -rf /tmp/qt-everywhere-src-${QT_VERSION} /tmp/qt-everywhere-src-${QT_VERSION}.tar.xz
# Eigen 3.4 (header-only) -- external find_package(Eigen3 3.4) dependency, installed to /opt/eigen-3.4.
RUN set -eux; \
cd /tmp; \
git clone --depth 1 --branch ${EIGEN_VERSION} https://gitlab.com/libeigen/eigen.git; \
cmake -G Ninja -S eigen -B eigen-build -DCMAKE_INSTALL_PREFIX=/opt/eigen-3.4 \
-DEIGEN_BUILD_BLAS=OFF -DEIGEN_BUILD_LAPACK=OFF -DEIGEN_BUILD_DOC=OFF -DBUILD_TESTING=OFF; \
cmake --install eigen-build; \
cd /; rm -rf /tmp/eigen /tmp/eigen-build
# Make Qt and Eigen discoverable by CMake
ENV CMAKE_PREFIX_PATH=/opt/qt-${QT_VERSION}-static:/opt/eigen-3.4
# Set workdir for your project
WORKDIR /workspace
# Default entrypoint: interactive shell
CMD ["/bin/bash", "-l"]