Skip to content

Instantly share code, notes, and snippets.

@bungernut
Created June 28, 2023 01:50
Show Gist options
  • Save bungernut/fa12b015d52f39f3faf033e0b4f6ecb5 to your computer and use it in GitHub Desktop.
Save bungernut/fa12b015d52f39f3faf033e0b4f6ecb5 to your computer and use it in GitHub Desktop.
FROM ubuntu:20.04 as root_builder
#LABEL maintainer.name="ROOT team"
#LABEL maintainer.email="[email protected]"
# https://github.com/root-project/root-docker/blob/master/ubuntu_from_source/Dockerfile
LABEL maintainer.name="bung"
LABEL maintainer.email="[email protected]"
# ROOT version in the MAJOR.MINOR.REVISION format or a https://github.com/root-project/root branch name / tag. Example: ROOT_VERSION=6.26.00
# C++ standard to compile ROOT. Example: CMAKE_CXX_STANDARD=17
RUN apt-get update && \
ln -sf /usr/share/zoneinfo/UTC /etc/localtime && \
apt-get -y install \
cmake \
ca-certificates \
curl \
davix-dev \
dcap-dev \
fonts-freefont-ttf \
g++ \
gcc \
gfortran \
git \
libafterimage-dev\
libboost-python-dev \
libcfitsio-dev \
libexpat1-dev \
libfcgi-dev \
libfftw3-dev \
libfreetype6-dev \
libftgl-dev \
libgfal2-dev \
libgif-dev \
libgl2ps-dev \
libglew-dev \
libglu-dev \
libgraphviz-dev \
libgsl-dev \
libjpeg-dev \
liblz4-dev \
liblzma-dev \
libmysqlclient-dev \
libpcre++-dev \
libpng-dev \
libpq-dev \
libsqlite3-dev \
libssl-dev \
libtbb-dev \
libtiff-dev \
libx11-dev \
libxerces-c-dev \
libxext-dev \
libxft-dev \
libxml2-dev \
libxpm-dev \
libxxhash-dev \
libz-dev \
libzstd-dev \
locales \
make \
python3-dev \
python3-numpy \
srm-ifce-dev \
unixodbc-dev \
python-is-python3 \
wget \
&& \
apt-get autoremove -y && \
apt-get clean -y && \
rm -rf /var/cache/apt/archives/* && \
rm -rf /var/lib/apt/lists/*
# LOCAL INSTALL:
# sudo apt-get -y install cmake ca-certificates curl davix-dev dcap-dev fonts-freefont-ttf g++ gcc gfortran git libafterimage-dev libcfitsio-dev libexpat1-dev libfcgi-dev libfftw3-dev libfreetype6-dev libftgl-dev libgfal2-dev libgif-dev libgl2ps-dev libglew-dev libglu-dev libgraphviz-dev libgsl-dev libjpeg-dev liblz4-dev liblzma-dev libmysqlclient-dev libpcre++-dev libpng-dev libpq-dev libsqlite3-dev libssl-dev libtbb-dev libtiff-dev libx11-dev libxext-dev libxft-dev libxml2-dev libxpm-dev libxxhash-dev libz-dev libzstd-dev locales make python3-dev python3-numpy srm-ifce-dev unixodbc-dev python-is-python3 wget
# RUN yes | unminimize
# clone build and install
#ARG ROOT_VERSION=latest-stable
ARG ROOT_VERSION=6.26.10
ARG CMAKE_CXX_STANDARD=17
RUN ROOT_GIT_URL=https://github.com/root-project/root.git \
&& if [ -z "$(git ls-remote --heads $ROOT_GIT_URL $ROOT_VERSION)" ] ; then \
export ROOT_GIT_REVISION="v$(echo $ROOT_VERSION | cut -d. -f1)-$(echo $ROOT_VERSION | cut -d. -f2)-$(echo $ROOT_VERSION | cut -d. -f3)" \
; else \
export ROOT_GIT_REVISION=$ROOT_VERSION \
; fi \
# Above lines will set ROOT_GIT_REVISION to ROOT_VERSION argument if it corresponds to a valid branch name (such as ROOT_VERSION=master),
# otherwise it will assume its a semantic version string and try to convert it into the tag format (such as 6.26.00 -> v6-26-00)
&& git clone --branch $ROOT_GIT_REVISION --depth=1 $ROOT_GIT_URL /tmp/source \
&& cd /tmp/source \
&& mkdir -p /tmp/build && cd /tmp/build \
&& cmake /tmp/source \
-DCMAKE_CXX_STANDARD=17 \
-Dgnuinstall=ON \
-Dsoversion=ON \
# For ROOT version 6.26.00 it is necessary to set `-Druntime_cxxmodules=OFF` (https://github.com/root-project/root/pull/10198)
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_BINDIR=bin \
-DCMAKE_INSTALL_CMAKEDIR=lib/x86_64-linux-gnu/cmake/ROOT \
-DCMAKE_INSTALL_DATAROOTDIR=share \
-DCMAKE_INSTALL_DATADIR=share/root \
-DCMAKE_INSTALL_DOCDIR=share/doc/root \
-DCMAKE_INSTALL_ELISPDIR=share/emacs/site-lisp \
-DCMAKE_INSTALL_FONTDIR=share/root/fonts \
-DCMAKE_INSTALL_ICONDIR=share/root/icons \
-DCMAKE_INSTALL_INCLUDEDIR=include/ROOT \
-DCMAKE_INSTALL_JSROOTDIR=share/root/js \
-DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \
-DCMAKE_INSTALL_MACRODIR=share/root/macros \
-DCMAKE_INSTALL_MANDIR=share/man \
-DCMAKE_INSTALL_OPENUI5DIR=share/root/ui5 \
-DCMAKE_INSTALL_PYTHONDIR=lib/python3/dist-packages \
-DCMAKE_INSTALL_SRCDIR=/dev/null \
-DCMAKE_INSTALL_SYSCONFDIR=/etc/root \
-DCMAKE_INSTALL_TUTDIR=share/root/tutorials \
&& make -j$(nproc) install
# && rm -rf /tmp/build /tmp/source
# LOCAL INSRALL
# wget https://github.com/root-project/root/releases/download/v6-26-10/root_v6.26.10.source.tar.gz
# tar xf root<tab>
# mkdir root-build
# cmake ../root-6.26.10/ -DCMAKE_CXX_STANDARD=17 -Dgnuinstall=ON -Dsoversion=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_BINDIR=bin -DCMAKE_INSTALL_CMAKEDIR=lib/x86_64-linux-gnu/cmake/ROOT -DCMAKE_INSTALL_DATAROOTDIR=share -DCMAKE_INSTALL_DATADIR=share/root -DCMAKE_INSTALL_DOCDIR=share/doc/root -DCMAKE_INSTALL_ELISPDIR=share/emacs/site-lisp -DCMAKE_INSTALL_FONTDIR=share/root/fonts -DCMAKE_INSTALL_ICONDIR=share/root/icons -DCMAKE_INSTALL_INCLUDEDIR=include/ROOT -DCMAKE_INSTALL_JSROOTDIR=share/root/js -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu -DCMAKE_INSTALL_MACRODIR=share/root/macros -DCMAKE_INSTALL_MANDIR=share/man -DCMAKE_INSTALL_OPENUI5DIR=share/root/ui5 -DCMAKE_INSTALL_PYTHONDIR=lib/python3/dist-packages -DCMAKE_INSTALL_SRCDIR=/dev/null -DCMAKE_INSTALL_SYSCONFDIR=/etc/root -DCMAKE_INSTALL_TUTDIR=share/root/tutorial -DPYTHON_EXECUTABLE=/usr/bin/python
# CMD ["root", "-b"]
RUN mkdir -p /opt/geant4/src && \
mkdir -p /opt/geant4/build && \
mkdir -p /opt/geant4/install && \
mkdir -p /opt/geant4/data && \
wget https://gitlab.cern.ch/geant4/geant4/-/archive/v10.7.2/geant4-v10.7.2.tar.gz && \
tar xf geant4-v10.7.2.tar.gz -C /opt/geant4/src/ && \
rm geant4*.tar.gz
WORKDIR /opt/geant4/data/
RUN wget https://cern.ch/geant4-data/datasets/G4NDL.4.6.tar.gz && \
tar zxf G4NDL.4.6.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4EMLOW.7.13.tar.gz && \
tar zxf G4EMLOW.7.13.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4PhotonEvaporation.5.7.tar.gz && \
tar zxf G4PhotonEvaporation.5.7.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4RadioactiveDecay.5.6.tar.gz && \
tar zxf G4RadioactiveDecay.5.6.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4PARTICLEXS.3.1.1.tar.gz && \
tar zxf G4PARTICLEXS.3.1.1.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4PII.1.3.tar.gz && \
tar zxf G4PII.1.3.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4RealSurface.2.2.tar.gz && \
tar zxf G4RealSurface.2.2.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4SAIDDATA.2.0.tar.gz && \
tar zxf G4SAIDDATA.2.0.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4ABLA.3.1.tar.gz && \
tar zxf G4ABLA.3.1.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4INCL.1.0.tar.gz && \
tar zxf G4INCL.1.0.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4ENSDFSTATE.2.3.tar.gz && \
tar zxf G4ENSDFSTATE.2.3.tar.gz && \
wget -nv https://cern.ch/geant4-data/datasets/G4TENDL.1.3.2.tar.gz && \
tar zxf G4TENDL.1.3.2.tar.gz && \
rm *.tar.gz
FROM root_builder as geant4_setup
# https://github.com/wtakase/docker-geant4/blob/master/amd64/bionic/Dockerfile
# ENV G4_VERSION 10.7.2
# https://gitlab.cern.ch/geant4/geant4/-/archive/v10.7.2/geant4-v10.7.2.tar.gz
# http://geant4-data.web.cern.ch/geant4-data/releases/source/geant4.10.7.2.tar.gz
# RUN apt-get update -y && \
# apt-get install -y cmake curl g++ libexpat1-dev
WORKDIR /opt/geant4/src
COPY geant4-10-7.patch geant4-10-7.patch
RUN patch /opt/geant4/src/geant4-v10.7.2/source/persistency/ascii/src/G4tgrEvaluator.cc geant4-10-7.patch && \
cmake -DCMAKE_INSTALL_PREFIX=/opt/geant4/install \
-DCMAKE_CXX_STANDARD=17 \
-DGEANT4_INSTALL_DATA=ON \
-DGEANT4_INSTALL_DATADIR=/opt/geant4/data \
-DGEANT4_BUILD_MULTITHREADED=ON \
-DGEANT4_INSTALL_EXAMPLES=OFF \
-DGEANT4_USE_GDML=ON \
../src/geant4-v10.7.2 && \
make -j`nproc` && \
make install
# RUN sh /opt/geant4/install/bin/geant4.sh
RUN mkdir -p /opt/vgm/src && \
mkdir -p /opt/vgm/build && \
mkdir -p /opt/vgm/install && \
wget https://github.com/vmc-project/vgm/archive/refs/tags/v4-8.tar.gz && \
tar xf v4-8.tar.gz -C /opt/vgm/src/ && \
#wget https://github.com/vmc-project/vgm/archive/refs/tags/v5-2.tar.gz && \
#tar xf v5-2.tar.gz -C /opt/vgm/src/ && \
rm v*.tar.gz
WORKDIR /opt/vgm/build
RUN cmake -DCMAKE_CXX_STANDARD=17 -DCMAKE_INSTALL_PREFIX=/opt/vgm/install -DGeant4_DIR=/opt/geant4/install/lib/Geant4-10.7.2 /opt/vgm/src/vgm-4-8/ &&\
make VERBOSE=1 &&\
make install
COPY entry-point.sh /entry-point.sh
ENTRYPOINT ["/entry-point.sh"]
CMD ["/bin/bash"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment