Skip to content

Commit 477aa02

Browse files
committed
Initial container configuration
1 parent 5ef13cf commit 477aa02

11 files changed

+621
-0
lines changed

Dockerfile

+176
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
FROM nvidia/cuda:8.0-cudnn5-devel-centos7
2+
# FROM centos:7
3+
4+
5+
# User and workdir settings:
6+
7+
USER root
8+
WORKDIR /root
9+
10+
11+
# Add CUDA libraries to LD_LIBRARY_PATH:
12+
13+
ENV LD_LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/cuda/nvvm/lib64:$LD_LIBRARY_PATH"
14+
15+
# Note: NVIDIA driver libs must be mounted in from host to "/usr/local/nvidia"
16+
# (e.g. via nvidia-docker or manually). OpenCL icd directory
17+
# "/etc/OpenCL/vendors" should be mounted in from host as well.
18+
19+
20+
# Install yum/RPM packages:
21+
22+
COPY provisioning/wandisco-centos7-git.repo /etc/yum.repos.d/wandisco-git.repo
23+
24+
RUN true \
25+
&& mkdir -p /etc/OpenCL/vendors \
26+
\
27+
&& sed -i '/tsflags=nodocs/d' /etc/yum.conf \
28+
&& yum install -y \
29+
epel-release \
30+
centos-release-scl \
31+
&& yum groupinstall -y "Development Tools"
32+
&& yum install -y \
33+
deltarpm \
34+
\
35+
wget \
36+
cmake \
37+
p7zip pbzip2 \
38+
nano vim \
39+
\
40+
&& rpm -ihv https://arrayfire.s3.amazonaws.com/3.4.2/ArrayFire-no-gl-v3.4.2_Linux_x86_64.rpm \
41+
&& (cd /usr/lib64 && ln -s ../lib/libaf*.so* .) \
42+
\
43+
&& yum clean all \
44+
\
45+
&& dbus-uuidgen > /etc/machine-id
46+
47+
48+
# Copy provisioning script(s):
49+
50+
COPY provisioning/install-sw.sh /root/provisioning/
51+
52+
53+
# Install CLHep and Geant4:
54+
55+
COPY provisioning/install-sw-scripts/clhep-* provisioning/install-sw-scripts/geant4-* provisioning/install-sw-scripts/
56+
57+
ENV \
58+
PATH="/opt/geant4/bin:/opt/clhep/bin:$PATH" \
59+
LD_LIBRARY_PATH="/opt/geant4/lib64:/opt/clhep/lib:$LD_LIBRARY_PATH" \
60+
G4LEDATA="/opt/geant4/share/Geant4-9.6.4/data/G4EMLOW6.32" \
61+
G4LEVELGAMMADATA="/opt/geant4/share/Geant4-9.6.4/data/PhotonEvaporation2.3" \
62+
G4NEUTRONHPDATA="/opt/geant4/share/Geant4-9.6.4/data/G4NDL4.2" \
63+
G4NEUTRONXSDATA="/opt/geant4/share/Geant4-9.6.4/data/G4NEUTRONXS1.2" \
64+
G4PIIDATA="/opt/geant4/share/Geant4-9.6.4/data/G4PII1.3" \
65+
G4RADIOACTIVEDATA="/opt/geant4/share/Geant4-9.6.4/data/RadioactiveDecay3.6" \
66+
G4REALSURFACEDATA="/opt/geant4/share/Geant4-9.6.4/data/RealSurface1.0" \
67+
G4SAIDXSDATA="/opt/geant4/share/Geant4-9.6.4/data/G4SAIDDATA1.1"
68+
69+
RUN true \
70+
&& yum install -y \
71+
expat-devel xerces-c-devel \
72+
libXmu-devel libXi-devel \
73+
libzip-devel \
74+
mesa-libGLU-devel \
75+
&& yum clean all \
76+
&& provisioning/install-sw.sh clhep 2.1.3.1 /opt/clhep \
77+
&& provisioning/install-sw.sh geant4 9.6.4 /opt/geant4
78+
79+
80+
# Install CERN ROOT:
81+
82+
COPY provisioning/install-sw-scripts/root-* provisioning/install-sw-scripts/
83+
84+
ENV \
85+
PATH="/opt/root/bin:$PATH" \
86+
LD_LIBRARY_PATH="/opt/root/lib:$LD_LIBRARY_PATH" \
87+
MANPATH="/opt/root/man:$MANPATH" \
88+
PYTHONPATH="/opt/root/lib:$PYTHONPATH" \
89+
CMAKE_PREFIX_PATH="/opt/root;$CMAKE_PREFIX_PATH" \
90+
JUPYTER_PATH="/opt/root/etc/notebook:$JUPYTER_PATH" \
91+
\
92+
ROOTSYS="/opt/root"
93+
94+
RUN true \
95+
&& yum install -y \
96+
libSM-devel \
97+
libX11-devel libXext-devel libXft-devel libXpm-devel \
98+
libjpeg-devel libpng-devel \
99+
mesa-libGLU-devel \
100+
&& yum clean all \
101+
&& provisioning/install-sw.sh root 6.06.08 /opt/root
102+
103+
104+
# Install MXNet:
105+
106+
COPY provisioning/install-sw-scripts/mxnet-* provisioning/install-sw-scripts/
107+
108+
ENV \
109+
LD_LIBRARY_PATH="/opt/mxnet/lib:$LD_LIBRARY_PATH" \
110+
MXNET_HOME="/opt/mxnet"
111+
112+
RUN true \
113+
&& yum install -y \
114+
openblas-devel \
115+
opencv-devel \
116+
&& yum clean all \
117+
&& provisioning/install-sw.sh mxnet dmlc/873b928 /opt/mxnet
118+
119+
120+
# Install Anaconda2:
121+
122+
COPY provisioning/install-sw-scripts/anaconda2-* provisioning/install-sw-scripts/
123+
124+
ENV \
125+
PATH="/opt/anaconda2/bin:$PATH" \
126+
MANPATH="/opt/anaconda2/share/man:$MANPATH"
127+
128+
RUN true \
129+
&& yum install -y \
130+
libXdmcp \
131+
&& yum clean all \
132+
&& provisioning/install-sw.sh anaconda2 4.2.0 /opt/anaconda2 \
133+
&& conda upgrade -y pip notebook
134+
135+
136+
# Install Julia:
137+
138+
COPY provisioning/install-sw-scripts/julia-* provisioning/install-sw-scripts/
139+
140+
ENV \
141+
PATH="/opt/julia/bin:$PATH" \
142+
LD_LIBRARY_PATH="/opt/julia/lib:$LD_LIBRARY_PATH" \
143+
MANPATH="/opt/julia/share/man:$MANPATH" \
144+
JULIA_HOME="/opt/julia/bin" \
145+
JULIA_CXX_RTTI="1" \
146+
JULIA_PKGDIR="/user/.julia/$SWMOD_HOSTSPEC"
147+
148+
RUN true \
149+
&& yum install -y \
150+
libedit-devel ncurses-devel openssl openssl-devel \
151+
hdf5-devel ImageMagick zeromq-devel \
152+
&& yum clean all \
153+
&& provisioning/install-sw.sh julia 0.5.0 /opt/julia \
154+
&& provisioning/install-sw.sh julia-cxx oschulz/julia0.5-root /opt/julia/share/julia/site \
155+
&& provisioning/install-sw.sh julia-rjulia jpata/cxx /opt/julia \
156+
&& mkdir -p "$JULIA_PKGDIR"
157+
158+
159+
# Install GitHub Atom:
160+
161+
RUN yum install -y \
162+
lsb-core-noarch libXScrnSaver libXss.so.1 gtk2 libXtst libxkbfile GConf2 alsa-lib \
163+
&& yum clean all \
164+
&& rpm -ihv https://github.com/atom/atom/releases/download/v1.12.9/atom.x86_64.rpm
165+
166+
167+
# Custom hostspec for swmod:
168+
169+
ENV SWMOD_HOSTSPEC=linux-centos-7-x86_64-aec2b2b4
170+
171+
172+
# Final steps
173+
174+
EXPOSE 8888
175+
176+
CMD /bin/bash

LICENSE.md

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
Licensed under the MIT "Expat" License:
2+
3+
> Copyright (c) 2016: Oliver Schulz <[email protected]>.
4+
>
5+
> Permission is hereby granted, free of charge, to any person obtaining
6+
> a copy of this software and associated documentation files (the
7+
> "Software"), to deal in the Software without restriction, including
8+
> without limitation the rights to use, copy, modify, merge, publish,
9+
> distribute, sublicense, and/or sell copies of the Software, and to
10+
> permit persons to whom the Software is furnished to do so, subject to
11+
> the following conditions:
12+
>
13+
> The above copyright notice and this permission notice shall be
14+
> included in all copies or substantial portions of the Software.
15+
>
16+
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17+
> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+
> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19+
> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20+
> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21+
> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22+
> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# This software is licensed under the MIT "Expat" License.
2+
#
3+
# Copyright (c) 2016: Oliver Schulz.
4+
5+
6+
DEFAULT_BUILD_OPTS=""
7+
8+
9+
pkg_install() {
10+
DOWNLOAD_URL="https://proj-clhep.web.cern.ch/proj-clhep/DISTRIBUTION/tarFiles/clhep-${PACKAGE_VERSION}.tgz"
11+
echo "INFO: Download URL: \"${DOWNLOAD_URL}\"." >&2
12+
13+
mkdir src build
14+
download "${DOWNLOAD_URL}" | tar --strip-components 1 -C src --strip=1 -x -z
15+
cd build
16+
17+
cmake \
18+
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
19+
${DEFAULT_BUILD_OPTS} \
20+
../src/CLHEP
21+
22+
time make -j"$(nproc)" install
23+
}
24+
25+
26+
pkg_env_vars() {
27+
cat <<-EOF
28+
PATH="${INSTALL_PREFIX}/bin:\$PATH"
29+
LD_LIBRARY_PATH="${INSTALL_PREFIX}/lib:\$LD_LIBRARY_PATH"
30+
export PATH LD_LIBRARY_PATH
31+
EOF
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# This software is licensed under the MIT "Expat" License.
2+
#
3+
# Copyright (c) 2016: Oliver Schulz.
4+
5+
6+
BASIC_BUILD_OPTS="\
7+
--fail-on-missing \
8+
--enable-shared \
9+
--enable-soversion \
10+
"
11+
12+
ADDITIONAL_BUILD_OPTS="\
13+
-DGEANT4_USE_GDML=ON \
14+
-DGEANT4_USE_OPENGL_X11=ON \
15+
-DGEANT4_USE_RAYTRACER_X11=ON \
16+
-DGEANT4_INSTALL_DATA=ON \
17+
-DGEANT4_INSTALL_EXAMPLES=ON \
18+
"
19+
20+
CLHEP_PREFIX=`(clhep-config --prefix | sed 's/\"//g') 2> /dev/null`
21+
if [ -n "${CLHEP_PREFIX}" ] ; then
22+
echo "INFO: `clhep-config --version` available, will use it for Geant4 installation."
23+
24+
BASIC_BUILD_OPTS="${BASIC_BUILD_OPTS} -DGEANT4_USE_SYSTEM_CLHEP=ON -DCLHEP_ROOT_DIR=${CLHEP_PREFIX}"
25+
else
26+
BASIC_BUILD_OPTS="${BASIC_BUILD_OPTS} -DGEANT4_USE_SYSTEM_CLHEP=OFF"
27+
fi
28+
29+
DEFAULT_BUILD_OPTS=`echo ${BASIC_BUILD_OPTS} ${ADDITIONAL_BUILD_OPTS}`
30+
31+
32+
download_url() {
33+
# Note: Currently using plain HTTP, as the SSL cert of geant4.cern.ch is expired.
34+
local PKG_VERSION="${1}" \
35+
&& local PKG_VERSION_MAJOR=$(echo "${PKG_VERSION}" | cut -d '.' -f 1) \
36+
&& local PKG_VERSION_MINOR=$(echo "${PKG_VERSION}" | cut -d '.' -f 2) \
37+
&& local PKG_VERSION_MINOR=$(test "${PKG_VERSION_MAJOR}" -ge 10 && seq -f "%02g" "${PKG_VERSION_MINOR}" "${PKG_VERSION_MINOR}" || echo "${PKG_VERSION_MINOR}") \
38+
&& local PKG_VERSION_PATCH=$(echo "${PKG_VERSION}" | cut -d '.' -f 3) \
39+
&& local PKG_VERSION_PATCH=$(seq -f "%02g" "${PKG_VERSION_PATCH}" "${PKG_VERSION_PATCH}") \
40+
&& local PKG_VERSION_DNL="${PKG_VERSION_MAJOR}.${PKG_VERSION_MINOR}" \
41+
&& local PKG_VERSION_DNL=$(test "${PKG_VERSION_PATCH}" -ne 0 && echo "${PKG_VERSION_DNL}.p${PKG_VERSION_PATCH}" || echo "${PKG_VERSION_DNL}") \
42+
&& echo "http://geant4.cern.ch/support/source/geant4.${PKG_VERSION_DNL}.tar.gz"
43+
}
44+
45+
46+
pkg_install() {
47+
DOWNLOAD_URL=`download_url "${PACKAGE_VERSION}"`
48+
echo "INFO: Download URL: \"${DOWNLOAD_URL}\"." >&2
49+
50+
mkdir src build
51+
curl -L "${DOWNLOAD_URL}" | tar --strip-components 1 -C src --strip=1 -x -z
52+
cd build
53+
54+
cmake \
55+
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
56+
${DEFAULT_BUILD_OPTS} \
57+
../src
58+
59+
time make -j"$(nproc)" install
60+
}
61+
62+
63+
pkg_env_vars() {
64+
export LD_LIBRARY_PATH=""
65+
. "${INSTALL_PREFIX}/bin/geant4.sh"
66+
cat <<-EOF
67+
PATH="${INSTALL_PREFIX}/bin:\$PATH"
68+
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:\$LD_LIBRARY_PATH"
69+
EOF
70+
G4_DATA_VARS="$(echo `env|grep -o '^G4.*DATA='|sed 's/=//' | sort`)"
71+
env|grep '^G4.*DATA='|sort
72+
cat <<-EOF
73+
export PATH LD_LIBRARY_PATH ${G4_DATA_VARS}
74+
EOF
75+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# This software is licensed under the MIT "Expat" License.
2+
#
3+
# Copyright (c) 2016: Oliver Schulz.
4+
5+
6+
pkg_installed_check() {
7+
export JULIA_PKGDIR="${INSTALL_PREFIX}"
8+
CXX_PKG_DIR=`julia -e 'println(Pkg.dir("Cxx"))'`
9+
10+
test -f "${CXX_PKG_DIR}"
11+
}
12+
13+
14+
pkg_install() {
15+
export JULIA_PKGDIR="${INSTALL_PREFIX}"
16+
CXX_PKG_DIR=`julia -e 'println(Pkg.dir("Cxx"))'`
17+
18+
julia -e 'isdir(joinpath(Pkg.dir(), "METADATA")) || Pkg.init()'
19+
20+
GITHUB_USER=`echo "${PACKAGE_VERSION}" | cut -d '/' -f 1`
21+
GIT_BRANCH=`echo "${PACKAGE_VERSION}" | cut -d '/' -f 2`
22+
echo julia -e 'Pkg.clone("https://github.com/'"${GITHUB_USER}"'/Cxx.jl.git"); Pkg.checkout("Cxx", "'"${GIT_BRANCH}"'"); Pkg.build("Cxx")'
23+
julia -e 'Pkg.clone("https://github.com/'"${GITHUB_USER}"'/Cxx.jl.git"); Pkg.checkout("Cxx", "'"${GIT_BRANCH}"'"); Pkg.build("Cxx")'
24+
25+
test -d "${CXX_PKG_DIR}"
26+
(cd "${CXX_PKG_DIR}/deps" && mkdir tmp && mv build src tmp)
27+
(
28+
cd "${CXX_PKG_DIR}/deps/tmp" \
29+
&& tar -c -f - */*/include */*/*/*/*/include build/clang_constants.jl
30+
) | (
31+
cd "${CXX_PKG_DIR}/deps" \
32+
&& tar -x -f -
33+
)
34+
rm -rf "${CXX_PKG_DIR}/deps/tmp"
35+
36+
julia -e 'Pkg.test("Cxx")'
37+
}
38+
39+
40+
pkg_env_vars() {
41+
true
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# This software is licensed under the MIT "Expat" License.
2+
#
3+
# Copyright (c) 2016: Oliver Schulz.
4+
5+
6+
pkg_installed_check() {
7+
test -f "${INSTALL_PREFIX}/bin/rjulia"
8+
}
9+
10+
11+
pkg_install() {
12+
GITHUB_USER=`echo "${PACKAGE_VERSION}" | cut -d '/' -f 1`
13+
GIT_BRANCH=`echo "${PACKAGE_VERSION}" | cut -d '/' -f 2`
14+
git clone "https://github.com/${GITHUB_USER}/ROOT.jl.git"
15+
(cd "ROOT.jl" && git checkout "${GIT_BRANCH}")
16+
17+
cd "ROOT.jl/deps"
18+
julia build.jl
19+
mkdir -p "${INSTALL_PREFIX}/bin/"
20+
cp -a "usr/bin/julia" "${INSTALL_PREFIX}/bin/rjulia"
21+
}
22+
23+
24+
pkg_env_vars() {
25+
cat <<-EOF
26+
PATH="${INSTALL_PREFIX}/bin:\$PATH"
27+
EOF
28+
}

0 commit comments

Comments
 (0)