Skip to content
Snippets Groups Projects
Verified Commit 5b5e5ae9 authored by Olivier Benz's avatar Olivier Benz
Browse files

Merge branch 'freeze-version'

parents c9b9c995 0b1f2c0f
No related branches found
No related tags found
No related merge requests found
......@@ -41,7 +41,6 @@ given.
| CUDA | Linux driver version | Windows driver version[^6] |
|:-------|:---------------------|:---------------------------|
| 12.8.0 | ≥ 570.26 | ≥ 570.65 |
| 12.6.3 | ≥ 560.35.05 | ≥ 561.17 |
| 12.6.2 | ≥ 560.35.03 | ≥ 560.94 |
| 12.5.0 | ≥ 555.42.02 | ≥ 555.85 |
| 11.8.0 | ≥ 520.61.05 | ≥ 520.06 |
......@@ -58,7 +57,6 @@ Only works with
| CUDA | Driver version 535[^7] | Driver version 470[^8] |
|:-------|:----------------------:|:----------------------:|
| 12.8.0 | 🟢 | 🔵 |
| 12.6.3 | 🟢 | 🔵 |
| 12.6.2 | 🟢 | 🔵 |
| 12.5.0 | 🟢 | 🔵 |
| 11.8.0 | 🟡 | 🟢 |
......
......@@ -8,7 +8,7 @@ Topmost entry = Tag `latest`
| R | Python | Jupyter Hub | Jupyter Lab | code‑server (Code) | RStudio | Neovim | Git | Git LFS | Pandoc | CRAN date | Linux distro |
|:------|:--------|:------------|:------------|:-------------------|:--------------|:-------|:-------|:--------|:-------|:-----------|:-------------|
| 4.4.2 | 3.12.9 | 5.2.1 | 4.3.5 | 4.97.2 (1.97.2) | 2024.12.1+563 | 0.10.4 | 2.48.1 | 3.6.1 | 3.4 | | Debian 12 |
| 4.4.2 | 3.12.9 | 5.2.1 | 4.3.5 | 4.97.2 (1.97.2) | 2024.12.1+563 | 0.10.4 | 2.48.1 | 3.6.1 | 3.4 | 2025‑02‑28 | Debian 12 |
| 4.4.1 | 3.12.7 | 5.2.1 | 4.2.5 | 4.93.1 (1.93.1) | 2024.09.0+375 | 0.10.2 | 2.47.0 | 3.5.1 | 3.2 | 2024‑10‑31 | Debian 12 |
| 4.4.0 | 3.12.4 | 5.0.0 | 4.2.2 | 4.90.0 (1.90.0) | 2024.04.2+764 | n/a | 2.45.2 | 3.5.1 | 3.1.11 | 2024‑06‑14 | Debian 12 |
| 4.3.3 | 3.11.9 | 4.1.5 | 4.1.6 | 4.23.0 (1.88.0) | n/a | n/a | 2.44.0 | 3.5.1 | 3.1.11 | 2024‑04‑24 | Debian 12 |
......@@ -24,7 +24,7 @@ Topmost entry = Tag `latest`
| R | CTAN date | Quarto |
|:------|:-----------|:------------|
| 4.4.2 | | 1.6.42 |
| 4.4.2 | 2025‑02‑28 | 1.6.42 |
| 4.4.1 | 2024‑10‑31 | 1.5.57 |
| 4.4.0 | 2024‑06‑14 | 1.4.555 |
| 4.3.3 | 2024‑04‑24 | 1.4.553 |
......@@ -40,7 +40,7 @@ Topmost entry = Tag `latest`
| R | QGIS | SAGA | OTB[^1] |
|:------|:-------|:------|:--------|
| 4.4.2 | 3.40.3 | 9.1.3 | 9.1.0 |
| 4.4.2 | 3.42.0 | 9.1.3 | 9.1.0 |
| 4.4.1 | 3.40.0 | 9.1.3 | 9.1.0 |
| 4.4.0 | 3.36.3 | 9.1.3 | 9.0.0 |
| 4.3.3 | 3.36.2 | 9.1.3 | 9.0.0 |
......
This diff is collapsed.
ARG BASE_IMAGE=debian
ARG BASE_IMAGE_TAG=12
ARG BUILD_ON_IMAGE
ARG R_VERSION=4.4.2
ARG NODE_VERSION=20.18.1
ARG CODE_BUILTIN_EXTENSIONS_DIR=/opt/code-server/lib/vscode/extensions
FROM glcr.b-data.ch/nodejs/nsi/${NODE_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} AS nsi
FROM ${BUILD_ON_IMAGE}:${R_VERSION}
ARG DEBIAN_FRONTEND=noninteractive
ARG BUILD_ON_IMAGE
ARG NODE_VERSION
ARG CODE_BUILTIN_EXTENSIONS_DIR
ARG BUILD_START
ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${R_VERSION} \
NODE_VERSION=${NODE_VERSION} \
BUILD_DATE=${BUILD_START}
## Prevent Corepack showing the URL when it needs to download software
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
## Install Node.js
COPY --from=nsi /usr/local /usr/local
USER root
ENV HOME=/root
WORKDIR ${HOME}
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
bats \
libkrb5-dev \
libsecret-1-dev \
libx11-dev \
libxkbfile-dev \
libxt6 \
quilt \
rsync \
&& if [ -n "$PYTHON_VERSION" ]; then \
## make some useful symlinks that are expected to exist
## ("/usr/bin/python" and friends)
for src in pydoc3 python3 python3-config; do \
dst="$(echo "$src" | tr -d 3)"; \
if [ -s "/usr/bin/$src" ] && [ ! -e "/usr/bin/$dst" ]; then \
ln -svT "$src" "/usr/bin/$dst"; \
fi \
done; \
fi \
## Clean up Node.js installation
&& bash -c 'rm -f /usr/local/bin/{docker-entrypoint.sh,yarn*}' \
&& bash -c 'mv /usr/local/{CHANGELOG.md,LICENSE,README.md} \
/usr/local/share/doc/node' \
## Enable corepack (Yarn, pnpm)
&& corepack enable \
## Install nFPM
&& echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' \
| tee /etc/apt/sources.list.d/goreleaser.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends nfpm \
## Install code-server extensions
&& code-server --extensions-dir "$CODE_BUILTIN_EXTENSIONS_DIR" \
--install-extension dbaeumer.vscode-eslint \
&& code-server --extensions-dir "$CODE_BUILTIN_EXTENSIONS_DIR" \
--install-extension esbenp.prettier-vscode \
&& code-server --extensions-dir "$CODE_BUILTIN_EXTENSIONS_DIR" \
--install-extension ms-python.black-formatter \
&& code-server --extensions-dir "$CODE_BUILTIN_EXTENSIONS_DIR" \
--install-extension timonwong.shellcheck \
## Enable shellcheck system-wide
&& ln -sf "$CODE_BUILTIN_EXTENSIONS_DIR"/timonwong.shellcheck-*/binaries/*/*/shellcheck \
/usr/local/bin/shellcheck \
## Clean up
&& rm -rf /tmp/* \
&& rm -rf /var/lib/apt/lists/* \
"$HOME/.config" \
"$HOME/.local"
## Switch back to ${NB_USER} to avoid accidental container runs as root
USER ${NB_USER}
ENV HOME=/home/${NB_USER}
WORKDIR ${HOME}
ARG BUILD_ON_IMAGE=glcr.b-data.ch/jupyterlab/r/verse
ARG R_VERSION=4.4.2
FROM ${BUILD_ON_IMAGE}:${R_VERSION}
ARG NCPUS=1
ARG DEBIAN_FRONTEND=noninteractive
ARG BUILD_ON_IMAGE
ARG BUILD_START
ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${R_VERSION} \
BUILD_DATE=${BUILD_START}
USER root
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
libfftw3-dev \
libgdal-dev \
libgeos-dev \
libgsl0-dev \
#libgl1-mesa-dev \
#libglu1-mesa-dev \
libhdf4-alt-dev \
#libhdf5-dev \
libjq-dev \
#libpq-dev \
libproj-dev \
libprotobuf-dev \
libnetcdf-dev \
#libsqlite3-dev \
#libssl-dev \
libudunits2-dev \
nco \
netcdf-bin \
postgis \
protobuf-compiler \
sqlite3 \
tk-dev \
#unixodbc-dev
&& install2.r --error --skipinstalled -n $NCPUS \
#RColorBrewer \
RNetCDF \
classInt \
deldir \
gstat \
hdf5r \
lidR \
mapdata \
mapview \
ncdf4 \
proj4 \
raster \
rlas \
sf \
sfarrow \
sp \
spacetime \
spatstat \
spatialreg \
spdep \
stars \
terra \
tidync \
tmap \
geoR \
geosphere \
## from bioconductor
&& R -e "BiocManager::install('rhdf5', update = FALSE, ask = FALSE)" \
## Strip libraries of binary packages installed from P3M
&& RLS=$(Rscript -e "cat(Sys.getenv('R_LIBS_SITE'))") \
&& strip ${RLS}/*/libs/*.so \
## Clean up
&& rm -rf /tmp/* \
&& rm -rf /var/lib/apt/lists/*
## Switch back to ${NB_USER} to avoid accidental container runs as root
USER ${NB_USER}
ARG BASE_IMAGE=debian
ARG BASE_IMAGE_TAG=12
ARG BUILD_ON_IMAGE=glcr.b-data.ch/jupyterlab/r/geospatial
ARG R_VERSION=4.4.2
ARG QGIS_VERSION=3.42.0
ARG SAGA_VERSION
ARG OTB_VERSION
## OTB_VERSION=9.1.0
ARG PROC_SAGA_NG_VERSION
FROM ${BASE_IMAGE}:${BASE_IMAGE_TAG} AS files
ARG OTB_VERSION
ARG NB_UID=1000
ENV NB_GID=100
RUN mkdir /files
COPY conf/user /files
COPY scripts /files
RUN if [ "$(uname -m)" = "x86_64" ]; then \
## QGIS: Set OTB application folder and OTB folder
qgis3Ini="/files/var/backups/skel/.local/share/QGIS/QGIS3/profiles/default/QGIS/QGIS3.ini"; \
echo "\n[Processing]" >> ${qgis3Ini}; \
if [ -z "${OTB_VERSION}" ]; then \
echo "Configuration\OTB_APP_FOLDER=/usr/lib/otb/applications" >> \
${qgis3Ini}; \
echo "Configuration\OTB_FOLDER=/usr\n" >> ${qgis3Ini}; \
else \
echo "Configuration\OTB_APP_FOLDER=/usr/local/lib/otb/applications" >> \
${qgis3Ini}; \
echo "Configuration\OTB_FOLDER=/usr/local\n" >> ${qgis3Ini}; \
fi \
fi \
&& chown -R ${NB_UID}:${NB_GID} /files/var/backups/skel \
## Ensure file modes are correct when using CI
## Otherwise set to 777 in the target image
&& find /files -type d -exec chmod 755 {} \; \
&& find /files -type f -exec chmod 644 {} \; \
&& find /files/usr/local/bin -type f -exec chmod 755 {} \;
FROM glcr.b-data.ch/qgis/qgissi/${QGIS_VERSION}/${BASE_IMAGE}:${BASE_IMAGE_TAG} AS qgissi
FROM glcr.b-data.ch/saga-gis/saga-gissi${SAGA_VERSION:+/}${SAGA_VERSION:-:none}${SAGA_VERSION:+/$BASE_IMAGE}${SAGA_VERSION:+:$BASE_IMAGE_TAG} AS saga-gissi
FROM glcr.b-data.ch/orfeotoolbox/otbsi${OTB_VERSION:+/}${OTB_VERSION:-:none}${OTB_VERSION:+/$BASE_IMAGE}${OTB_VERSION:+:$BASE_IMAGE_TAG} AS otbsi
FROM ${BUILD_ON_IMAGE}:${R_VERSION}
ARG NCPUS=1
ARG DEBIAN_FRONTEND=noninteractive
ARG BUILD_ON_IMAGE
ARG QGIS_VERSION
ARG SAGA_VERSION
ARG OTB_VERSION
ARG PROC_SAGA_NG_VERSION
ARG BUILD_START
ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${R_VERSION} \
QGIS_VERSION=${QGIS_VERSION} \
SAGA_VERSION=${SAGA_VERSION} \
OTB_VERSION=${OTB_VERSION} \
BUILD_DATE=${BUILD_START}
USER root
ENV HOME=/root \
## GRASS GIS: Make sure the distro's python is used
GRASS_PYTHON=/usr/bin/python3
WORKDIR ${HOME}
## Install QGIS
COPY --from=qgissi /usr /usr
## Install SAGA GIS
COPY --from=saga-gissi /usr /usr
## Install Orfeo Toolbox
COPY --from=otbsi /usr/local /usr/local
ENV GDAL_DRIVER_PATH=${OTB_VERSION:+disable} \
OTB_APPLICATION_PATH=${OTB_VERSION:+/usr/local/lib/otb/applications} \
OTB_INSTALL_DIR=${OTB_VERSION:+/usr/local}
ENV OTB_APPLICATION_PATH=${OTB_APPLICATION_PATH:-/usr/lib/otb/applications} \
OTB_INSTALL_DIR=${OTB_INSTALL_DIR:-/usr}
RUN apt-get update \
&& apt-get -y install --no-install-recommends \
## Multimedia files trancoding
ffmpeg \
## QGIS: Additional runtime dependencies
'^libexiv2-[0-9]+$' \
'^libgdal[0-9]+$' \
libgeos-c1v5 \
'^libgsl[0-9]+$' \
libjs-jquery \
libjs-leaflet \
'^libprotobuf-lite[0-9]+$' \
libqca-qt5-2-plugins \
'^libqscintilla2-qt5-[0-9]+$' \
libqt5core5a \
libqt5gui5 \
libqt5keychain1 \
libqt5multimediawidgets5 \
libqt5network5 \
libqt5quickwidgets5 \
libqt5serialport5 \
libqt5sql5 \
libqt5webkit5 \
libqt5widgets5 \
libqt5xml5 \
libqwt-qt5-6 \
'^libspatialindex[0-9]+$' \
'^libzip[0-9]+$' \
ocl-icd-libopencl1 \
qt3d-assimpsceneimport-plugin \
qt3d-defaultgeometryloader-plugin \
qt3d-gltfsceneio-plugin \
qt3d-scene2d-plugin \
qt5-image-formats-plugins \
## QGIS: Python 3 Support
gdal-bin \
libfcgi0ldbl \
libsqlite3-mod-spatialite \
python3-gdal \
python3-jinja2 \
python3-lxml \
python3-matplotlib \
python3-owslib \
python3-plotly \
python3-psycopg2 \
python3-pygments \
python3-pyproj \
python3-pyqt5 \
python3-pyqt5.qsci \
python3-pyqt5.qtmultimedia \
python3-pyqt5.qtpositioning \
python3-pyqt5.qtserialport \
python3-pyqt5.qtsql \
python3-pyqt5.qtsvg \
python3-pyqt5.qtwebkit \
python3-sip \
python3-yaml \
qttools5-dev-tools \
## QGIS: Additional runtime recommendations
grass \
## QGIS: Additional runtime suggestions
gpsbabel \
## SAGA GIS: Supplementary runtime dependencies [^1]
libdxflib3 \
libhpdf-2.3.0 \
libsvm3 \
libwxgtk3.*-dev \
$(test -z "${SAGA_VERSION}" && echo "saga") \
## Orfeo Toolbox: Supplementary runtime dependencies
&& if [ "$(uname -m)" = "x86_64" ]; then \
apt-get -y install --no-install-recommends \
'^libboost-filesystem[0-9].[0-9]+.[0-9]$' \
'^libboost-serialization[0-9].[0-9]+.[0-9]$' \
libglew2.* \
'^libinsighttoolkit4.[0-9]+$' \
libmuparser2v5 \
libmuparserx4.* \
'^libopencv-core[0-9][0-9.][0-9][a-z]?$' \
'^libopencv-ml[0-9][0-9.][0-9][a-z]?$' \
libtinyxml-dev \
$(test -z "${OTB_VERSION}" && echo "otb-* monteverdi"); \
if [ ! -z "${OTB_VERSION}" ]; then \
if [ "$(echo ${OTB_VERSION} | cut -c 1)" -lt "8" ]; then \
apt-get -y install --no-install-recommends \
'^libopenthreads[0-9]+$' \
libossim1; \
fi; \
## Orfeo Toolbox: Clean up installation
bash -c 'rm -rf /usr/local/{otbenv.profile,recompile_bindings.sh,tools}'; \
if [ -f /usr/local/README ]; then \
mv /usr/local/README /usr/local/share/doc/otb; \
fi; \
if [ -f /usr/local/LICENSE ]; then \
mv /usr/local/LICENSE /usr/local/share/doc/otb; \
fi \
else \
mkdir -p /usr/lib/otb; \
ln -rs /usr/lib/$(uname -m)-linux-gnu/otb/applications \
/usr/lib/otb/applications; \
fi \
fi \
## GRASS GIS: Configure dynamic linker run time bindings
&& echo "$(grass --config path)/lib" | tee /etc/ld.so.conf.d/libgrass.conf \
&& ldconfig \
## SAGA GIS: Add en_GB.UTF-8 and update locale
&& sed -i "s/# $LANG/$LANG/g" /etc/locale.gen \
&& sed -i "s/# en_GB.UTF-8/en_GB.UTF-8/g" /etc/locale.gen \
&& locale-gen \
## [^1]: SAGA GIS: libvigraimpex11 is not available for jammy
&& if $(! grep -q "jammy" /etc/os-release); then \
apt-get -y install --no-install-recommends '^libvigraimpex[0-9]+$'; \
fi \
## Clean up
&& rm -rf /tmp/* \
&& rm -rf /var/lib/apt/lists/* \
${HOME}/.cache \
${HOME}/.grass*
## Install QGIS related stuff
RUN apt-get update \
## Install QGIS-Plugin-Manager
&& apt-get -y install --no-install-recommends python3-pip \
&& export PIP_BREAK_SYSTEM_PACKAGES=1 \
&& /usr/bin/pip install qgis-plugin-manager \
## Install qgisprocess, the R interface to QGIS
&& install2.r --error --skipinstalled -n $NCPUS qgisprocess \
## Strip libraries of binary packages installed from P3M
&& RLS=$(Rscript -e "cat(Sys.getenv('R_LIBS_SITE'))") \
&& strip ${RLS}/*/libs/*.so \
## Clean up
&& if [ ! -z "$PYTHON_VERSION" ]; then \
apt-get -y purge python3-pip; \
apt-get -y autoremove; \
fi \
&& rm -rf /var/lib/apt/lists/* \
${HOME}/.cache \
${HOME}/.config \
${HOME}/.local
## Switch back to ${NB_USER} to avoid accidental container runs as root
USER ${NB_USER}
ENV HOME=/home/${NB_USER} \
## Qt: Support running on headless computer
QT_QPA_PLATFORM=offscreen
WORKDIR ${HOME}
## Copy files as late as possible to avoid cache busting
COPY --from=files /files /
COPY --from=files /files/var/backups/skel ${HOME}
## QGIS: Install plugin 'Processing Saga NextGen Provider'
RUN mkdir -p ${HOME}/.local/share/QGIS/QGIS3/profiles/default/python/plugins \
&& cd ${HOME}/.local/share/QGIS/QGIS3/profiles/default/python/plugins \
&& qgis-plugin-manager init \
&& qgis-plugin-manager update \
&& qgis-plugin-manager install 'Processing Saga NextGen Provider'=="${PROC_SAGA_NG_VERSION:-0.0.7}" \
## QGIS: Enable plugins
&& qgis_process plugins enable processing_saga_nextgen \
&& qgis_process plugins enable grassprovider \
&& if [ "$(uname -m)" = "x86_64" ]; then \
## QGIS: Install and enable OTB plugin
qgis-plugin-manager install 'OrfeoToolbox Provider'; \
qgis_process plugins enable orfeoToolbox_provider; \
fi \
&& rm -rf .cache_qgis_plugin_manager \
## Clean up
&& rm -rf \
${HOME}/.cache/QGIS \
${HOME}/.cache/qgis_process_ \
${HOME}/.config \
${HOME}/.grass* \
## Create backup of QGIS settings
&& cp -a ${HOME}/.local/share/QGIS /var/backups/skel/.local/share
ENV PYTHONPATH=${PYTHONPATH:+$PYTHONPATH:}${OTB_VERSION:+/usr/local/lib/otb/python}
ARG BUILD_ON_IMAGE=glcr.b-data.ch/jupyterlab/r/base
ARG R_VERSION=4.4.2
FROM ${BUILD_ON_IMAGE}:${R_VERSION}
ARG NCPUS=1
ARG DEBIAN_FRONTEND=noninteractive
ARG BUILD_ON_IMAGE
ARG BUILD_START
ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${R_VERSION} \
BUILD_DATE=${BUILD_START}
USER root
RUN apt-get update \
&& apt-get -y install --no-install-recommends \
cmake \
default-libmysqlclient-dev \
#libxml2-dev \
libfribidi-dev \
libgit2-dev \
libharfbuzz-dev \
libpq-dev \
libsasl2-dev \
libsqlite3-dev \
libssh2-1-dev \
#libtiff-dev \
libxtst6 \
unixodbc-dev \
&& install2.r --error --skipinstalled -n $NCPUS BiocManager \
&& install2.r --error --deps TRUE --skipinstalled -n $NCPUS \
tidyverse \
dplyr \
devtools \
formatR \
## dplyr database backends
&& install2.r --error --skipinstalled -n $NCPUS \
arrow \
duckdb \
fst \
## Get rid of libharfbuzz-dev and its dependencies (incl. python3)
&& apt-get -y purge libharfbuzz-dev \
&& apt-get -y autoremove \
&& apt-get -y install --no-install-recommends libharfbuzz-icu0 \
## Strip libraries of binary packages installed from P3M
&& RLS=$(Rscript -e "cat(Sys.getenv('R_LIBS_SITE'))") \
&& strip ${RLS}/*/libs/*.so \
## Clean up
&& rm -rf /tmp/* \
&& rm -rf /var/lib/apt/lists/*
## Switch back to ${NB_USER} to avoid accidental container runs as root
USER ${NB_USER}
ARG BUILD_ON_IMAGE=glcr.b-data.ch/jupyterlab/r/tidyverse
ARG R_VERSION=4.4.2
ARG CODE_BUILTIN_EXTENSIONS_DIR=/opt/code-server/lib/vscode/extensions
ARG QUARTO_VERSION=1.6.42
ARG CTAN_REPO=https://www.texlive.info/tlnet-archive/2025/02/28/tlnet
FROM ${BUILD_ON_IMAGE}:${R_VERSION}
ARG NCPUS=1
ARG DEBIAN_FRONTEND=noninteractive
ARG BUILD_ON_IMAGE
ARG CODE_BUILTIN_EXTENSIONS_DIR
ARG QUARTO_VERSION
ARG CTAN_REPO
ARG CTAN_REPO_BUILD_LATEST
ARG BUILD_START
USER root
ENV PARENT_IMAGE=${BUILD_ON_IMAGE}:${R_VERSION} \
QUARTO_VERSION=${QUARTO_VERSION} \
BUILD_DATE=${BUILD_START}
ENV HOME=/root \
PATH=/opt/TinyTeX/bin/linux:/opt/quarto/bin:$PATH
WORKDIR ${HOME}
## Add LaTeX, rticles and bookdown support
RUN dpkgArch="$(dpkg --print-architecture)" \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
default-jdk \
fonts-roboto \
ghostscript \
hugo \
lbzip2 \
libbz2-dev \
libglpk-dev \
libgmp3-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
libharfbuzz-dev \
libhunspell-dev \
libicu-dev \
liblzma-dev \
#libpcre2-dev \
libmagick++-dev \
libopenmpi-dev \
libpoppler-cpp-dev \
librdf0-dev \
## Installing libnode-dev uninstalls nodejs
## https://github.com/jeroen/V8/issues/100
#libnode-dev \
librsvg2-bin \
qpdf \
texinfo \
## Python: For h5py wheels (arm64)
libhdf5-dev \
## Install R package redland
&& install2.r --error --skipinstalled -n $NCPUS redland \
## Explicitly install runtime library sub-deps of librdf0-dev
&& apt-get install -y \
libcurl4-openssl-dev \
libxslt-dev \
librdf0 \
redland-utils \
rasqal-utils \
raptor2-utils \
## Get rid of librdf0-dev and its dependencies (incl. libcurl4-gnutls-dev)
&& apt-get -y autoremove \
## Install quarto
&& curl -sLO https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
&& mkdir -p /opt/quarto \
&& tar -xzf quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz -C /opt/quarto --no-same-owner --strip-components=1 \
&& rm quarto-${QUARTO_VERSION}-linux-${dpkgArch}.tar.gz \
## Exempt quarto from address space limit
&& sed -i 's/"${QUARTO_DENO}"/prlimit -v=unlimited: "${QUARTO_DENO}"/g' \
/opt/quarto/bin/quarto \
## Remove quarto pandoc
&& rm /opt/quarto/bin/tools/$(uname -m)/pandoc \
## Link to system pandoc
&& ln -s /usr/bin/pandoc /opt/quarto/bin/tools/$(uname -m)/pandoc \
## Tell APT about the TeX Live installation
## by building a dummy package using equivs
&& apt-get install -y --no-install-recommends equivs \
&& cd /tmp \
&& wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/debian-control-texlive-in.txt \
&& equivs-build debian-* \
&& mv texlive-local*.deb texlive-local.deb \
&& dpkg -i texlive-local.deb \
&& apt-get -y purge equivs \
&& apt-get -y autoremove \
## Admin-based install of TinyTeX
&& CTAN_REPO_ORIG=${CTAN_REPO} \
&& CTAN_REPO=${CTAN_REPO_BUILD_LATEST:-$CTAN_REPO} \
&& export CTAN_REPO \
&& wget -qO- "https://yihui.org/tinytex/install-unx.sh" \
| sh -s - --admin --no-path \
&& mv ${HOME}/.TinyTeX /opt/TinyTeX \
&& sed -i "s|${HOME}/.TinyTeX|/opt/TinyTeX|g" \
/opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
&& ln -rs /opt/TinyTeX/bin/$(uname -m)-linux \
/opt/TinyTeX/bin/linux \
&& /opt/TinyTeX/bin/linux/tlmgr path add \
&& tlmgr update --self \
## TeX packages as requested by the community
&& curl -sSLO https://yihui.org/gh/tinytex/tools/pkgs-yihui.txt \
&& tlmgr install $(cat pkgs-yihui.txt | tr '\n' ' ') \
&& rm -f pkgs-yihui.txt \
## TeX packages as in rocker/verse
&& tlmgr install \
context \
pdfcrop \
## TeX packages as in jupyter/scipy-notebook
&& tlmgr install \
cm-super \
dvipng \
## TeX packages specific for nbconvert
&& tlmgr install \
oberdiek \
titling \
&& tlmgr path add \
&& tlmgr option repository ${CTAN_REPO_ORIG} \
&& Rscript -e "tinytex::r_texmf()" \
&& chown -R root:${NB_GID} /opt/TinyTeX \
&& chmod -R g+w /opt/TinyTeX \
&& chmod -R g+wx /opt/TinyTeX/bin \
## Make the TeX Live fonts available as system fonts
&& cp /opt/TinyTeX/texmf-var/fonts/conf/texlive-fontconfig.conf \
/etc/fonts/conf.d/09-texlive.conf \
&& fc-cache -fsv \
&& install2.r --error --skipinstalled -n $NCPUS PKI \
## And some nice R packages for publishing-related stuff
&& install2.r --error --deps TRUE --skipinstalled -n $NCPUS \
blogdown \
bookdown \
distill \
quarto \
rticles \
rJava \
xaringan \
## Install Cairo: R Graphics Device using Cairo Graphics Library
## Install magick: Advanced Graphics and Image-Processing in R
&& install2.r --error --skipinstalled -n $NCPUS \
Cairo \
magick \
## Get rid of libharfbuzz-dev
&& apt-get -y purge libharfbuzz-dev \
## Get rid of libmagick++-dev
&& apt-get -y purge libmagick++-dev \
## and their dependencies (incl. python3)
&& apt-get -y autoremove \
&& apt-get -y install --no-install-recommends \
'^libmagick\+\+-6.q16-[0-9]+$' \
imagemagick \
## Install code-server extensions
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension quarto.quarto \
&& code-server --extensions-dir ${CODE_BUILTIN_EXTENSIONS_DIR} --install-extension James-Yu.latex-workshop \
&& if [ -n "${RSTUDIO_VERSION}" ]; then \
## Check for quarto redundancy
if [ -d /opt/quarto ]; then \
## Remove RStudio quarto
rm -rf /usr/lib/rstudio-server/bin/quarto; \
## Link to system quarto
ln -s /opt/quarto /usr/lib/rstudio-server/bin/quarto; \
fi \
fi \
## Strip libraries of binary packages installed from P3M
&& RLS=$(Rscript -e "cat(Sys.getenv('R_LIBS_SITE'))") \
&& strip ${RLS}/*/libs/*.so \
## Update default PATH settings in /etc/profile.d/00-reset-path.sh
&& sed -i 's|/opt/code-server/bin|/opt/TinyTeX/bin/linux:/opt/quarto/bin:/opt/code-server/bin|g' /etc/profile.d/00-reset-path.sh \
## Clean up
&& rm -rf /tmp/* \
&& rm -rf /var/lib/apt/lists/* \
${HOME}/.config \
${HOME}/.local \
${HOME}/.vscode-remote \
${HOME}/.wget-hsts
## Switch back to ${NB_USER} to avoid accidental container runs as root
USER ${NB_USER}
ENV CTAN_REPO=${CTAN_REPO}
ENV HOME=/home/${NB_USER}
WORKDIR ${HOME}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment