-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathDockerfile
66 lines (57 loc) · 2.39 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
ARG SAGE_VERSION=9.0
ARG SAGE_PYTHON_VERSION=3.7
ARG BASE_CONTAINER=jupyter/minimal-notebook
FROM $BASE_CONTAINER
USER root
# Sage pre-requisites and jq for manipulating json
RUN apt-get update && \
apt-get install -y --no-install-recommends \
dvipng \
ffmpeg \
imagemagick \
texlive \
tk tk-dev \
jq && \
rm -rf /var/lib/apt/lists/*
USER $NB_UID
# Initialize conda for shell interaction
RUN conda init bash
# Install Sage conda environment
RUN conda install --quiet --yes -n base -c conda-forge widgetsnbextension && \
conda create --quiet --yes -n sage -c conda-forge sage=$SAGE_VERSION python=$SAGE_PYTHON_VERSION && \
conda clean --all -f -y && \
npm cache clean --force && \
fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
# Install sagemath kernel and extensions using conda run:
# Create jupyter directories if they are missing
# Add environmental variables to sage kernal using jq
RUN echo ' \
from sage.repl.ipython_kernel.install import SageKernelSpec; \
SageKernelSpec.update(prefix=os.environ["CONDA_DIR"]); \
' | conda run -n sage sage && \
echo ' \
cat $SAGE_ROOT/etc/conda/activate.d/sage-activate.sh | \
grep -Po '"'"'(?<=^export )[A-Z_]+(?=)'"'"' | \
jq --raw-input '"'"'.'"'"' | jq -s '"'"'.'"'"' | \
jq --argfile kernel $SAGE_LOCAL/share/jupyter/kernels/sagemath/kernel.json \
'"'"'. | map(. as $k | env | .[$k] as $v | {($k):$v}) | add as $vars | $kernel | .env= $vars'"'"' > \
$CONDA_DIR/share/jupyter/kernels/sagemath/kernel.json \
' | conda run -n sage sh && \
fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
# Install sage's python kernel
RUN echo ' \
ls /opt/conda/envs/sage/share/jupyter/kernels/ | \
grep -Po '"'"'python\d'"'"' | \
xargs -I % sh -c '"'"' \
cd $SAGE_LOCAL/share/jupyter/kernels/% && \
cat kernel.json | \
jq '"'"'"'"'"'"'"'"' . | .display_name = .display_name + " (sage)" '"'"'"'"'"'"'"'"' > \
kernel.json.modified && \
mv -f kernel.json.modified kernel.json && \
ln -s $SAGE_LOCAL/share/jupyter/kernels/% $CONDA_DIR/share/jupyter/kernels/%_sage \
'"'"' \
' | conda run -n sage sh && \
fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER