| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- FROM debian:trixie-slim
- # Métadonnées
- LABEL maintainer="jmbatto"
- LABEL description="Julia 1.10 (Compilé Source) sur Debian Trixie avec PDI/GTK"
- # Arguments utilisateur (Conservés comme demandé)
- ARG USER_ID=1001
- ARG GROUP_ID=1001
- ARG USER_NAME=coder
- # -----------------------------------------------------------------------------
- # 1. Installation des dépendances système (Runtime)
- # On installe tout ce qu'il faut pour GTK4, PDI et le dev C
- # -----------------------------------------------------------------------------
- RUN apt-get update && apt-get install -y --no-install-recommends \
- # Outils de base et compilation C/PDI
- build-essential cmake git pkg-config \
- gfortran \
- which \
- perl \
- gawk \
- m4 \
- vim \
- libatomic1 \
- nano sudo lsof gawk emacs jq neowofetch curl wget \
- gdb valgrind clang-format \
- ca-certificates iputils-ping \
- colordiff \
- mpi-default-dev \
- python3 python3-dev python3-numpy python3-setuptools \
- # Libs scientifiques PDI
- libhdf5-dev libz-dev \
- # X11 & Xvfb (Pour ProfileView headless)
- libx11-6 libxext6 libxrender1 libxtst6 xauth xvfb dbus-x11 \
- # OpenGL Logiciel (Indispensable pour GTK4 dans Docker)
- libgl1-mesa-dri libgl1 \
- # Dépendances GTK4 / Cairo / GDK complètes
- libgtk-4-1 libgtk-3-0 \
- libglib2.0-0 libcairo2 \
- libpango-1.0-0 libharfbuzz0b \
- libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin \
- libgraphene-1.0-0 librsvg2-common \
- shared-mime-info \
- adwaita-icon-theme-full hicolor-icon-theme fonts-liberation \
- graphviz \
- && rm -rf /var/lib/apt/lists/*
-
- RUN dbus-uuidgen > /etc/machine-id
- # Fix GDK Pixbuf (Cache des loaders pour éviter les erreurs au runtime)
- RUN LOADER_PATH=$(find /usr/lib -name gdk-pixbuf-query-loaders | head -n 1) && \
- ln -s $LOADER_PATH /usr/bin/gdk-pixbuf-query-loaders && \
- gdk-pixbuf-query-loaders --update-cache
- # Version cible
- # ARG JULIA_VERSION=v1.10.10
- ARG JULIA_VERSION=v1.12.4
- WORKDIR /tmp/julia-build
- # On utilise --depth 1 pour accélérer le téléchargement (évite le timeout)
- RUN git clone --depth 1 --branch ${JULIA_VERSION} https://github.com/JuliaLang/julia.git .
- RUN echo "prefix=/usr/local/julia" > Make.user && \
- echo "MARCH=x86-64" >> Make.user && \
- echo "USE_SYSTEM_LIBUNWIND=0" >> Make.user && \
- # echo "USE_BINARYBUILDER=0" >> Make.user && \
- echo "LDFLAGS=-Wl,-z,noexecstack" >> Make.user && \
- echo "CFLAGS=-Wa,--noexecstack -gdwarf-4" >> Make.user && \
- echo "CXXFLAGS=-Wa,--noexecstack -gdwarf-4" >> Make.user
- # -----------------------------------------------------------------------------
- # 2. COMPILATION DE JULIA
- # -----------------------------------------------------------------------------
- # Mise à jour du PATH
- ENV JULIA_PATH=/usr/local/julia
- ENV PATH=$JULIA_PATH/bin:$PATH
- # Compilation
- RUN make -j$(nproc) && \
- make install
- # -----------------------------------------------------------------------------
- # 3. Installation de PDI (Build from source)
- # Configuration PDI
- # -----------------------------------------------------------------------------
- ENV PDI_DIR=/usr/local
- ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/x86_64-linux-gnu
- ENV CPATH=/usr/local/include
- ENV PREFIX=/usr/local
- ARG PDI_VERSION=v1.10.0
- WORKDIR /tmp/pdi-build
- RUN git clone --depth 1 --branch ${PDI_VERSION} https://github.com/pdidev/pdi.git . && \
- sed -i 's/distutils.sysconfig/sysconfig/g' cmake/FindPython3Path.cmake && \
- mkdir build && cd build && \
- cmake \
- -DBUILD_MPI=OFF \
- -DBUILD_DECL_HDF5_PLUGIN=ON \
- -DBUILD_SHARED_LIBS=ON \
- -DBUILD_FORTRAN=OFF \
- -DBUILD_HDF5_PARALLEL=OFF \
- -DBUILD_PYTHON=ON \
- -DBUILD_PYCALL_PLUGIN=ON \
- -DBUILD_NETCDF_PARALLEL=OFF \
- -DCMAKE_INSTALL_PREFIX=/usr/local \
- .. && \
- make -j$(nproc) && \
- make install && \
- ldconfig && \
- cd / && rm -rf /tmp/pdi-build
-
- # -----------------------------------------------------------------------------
- # 4. Création de l'utilisateur (Structure décomposée conservée)
- # -----------------------------------------------------------------------------
- RUN groupadd -g ${GROUP_ID} ${USER_NAME} && \
- useradd -m -u ${USER_ID} -g ${USER_NAME} -s /bin/bash ${USER_NAME} && \
- echo "${USER_NAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
- USER ${USER_NAME}
- WORKDIR /home/${USER_NAME}/project
- # -----------------------------------------------------------------------------
- # 5. Pré-installation des paquets Julia
- # On utilise xvfb-run pour que ProfileView/Gtk puissent se précompiler sans écran physique.
- # -----------------------------------------------------------------------------
- ENV LD_LIBRARY_PATH=/usr/local/julia/lib:/usr/local/julia/lib/julia:/usr/local/lib:/usr/lib/x86_64-linux-gnu
- ENV GKSwstype=100
- ENV JULIA_PKG_PRECOMPILE_AUTO=0
- ENV JULIA_PKG_USE_CLI_GIT=true
- RUN julia -e 'import Pkg; \
- Pkg.add([ \
- "HDF5"])'
- RUN xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24 -nolisten tcp" \
- julia -e 'import Pkg; \
- Pkg.add([ \
- "DataFrames", \
- "Gtk4", \
- "Gtk", \
- "ProfileView", \
- "PProf", \
- "Reexport" \
- ])'
- ENV LD_LIBRARY_PATH=""
- RUN xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24 -nolisten tcp" \
- julia -e 'import Pkg; Pkg.precompile()'
- ENV LD_LIBRARY_PATH=/usr/local/julia/lib:/usr/local/julia/lib/julia:/usr/local/lib:/usr/lib/x86_64-linux-gnu
- ENV DISPLAY=host.docker.internal:0.0
- CMD ["/bin/bash"]
|