diff --git a/bakery.yaml b/bakery.yaml index 961b62a..30c2e64 100644 --- a/bakery.yaml +++ b/bakery.yaml @@ -176,6 +176,14 @@ images: buildSecrets: - id: github_token envVar: GITHUB_TOKEN + variants: + - name: Standard + extension: std + tagDisplayName: std + primary: true + - name: Minimal + extension: min + tagDisplayName: min matrix: namePattern: "R{{ Dependencies.R }}-python{{ Dependencies.python }}" dependencyConstraints: diff --git a/workbench-session/README.md b/workbench-session/README.md index c417248..9056822 100644 --- a/workbench-session/README.md +++ b/workbench-session/README.md @@ -55,14 +55,16 @@ Posit publishes images to: - Docker Hub: `docker.io/posit/workbench-session` - GitHub Container Registry: `ghcr.io/posit-dev/workbench-session` -Ubuntu 24.04 is the default OS. +Ubuntu 24.04 is the default OS. The Standard (`std`) variant is the default; tags without a variant suffix resolve to it. -The tag format is: `R{r_version}-python{python_version}-{os}` +The tag format is: `R{r_version}-python{python_version}-{os}[-{variant}]` Examples: -- `R4.5.2-python3.14.3-ubuntu-24.04` — R 4.5.2, Python 3.14.3, Ubuntu 24.04 -- `R4.4.3-python3.12.12-ubuntu-22.04` — R 4.4.3, Python 3.12.12, Ubuntu 22.04 -- `R4.3.3-python3.11.15-ubuntu-24.04` — R 4.3.3, Python 3.11.15, Ubuntu 24.04 +- `R4.5.2-python3.14.3-ubuntu-24.04` — R 4.5.2, Python 3.14.3, Ubuntu 24.04, standard variant +- `R4.5.2-python3.14.3-ubuntu-24.04-std` — Explicit standard variant +- `R4.5.2-python3.14.3-ubuntu-24.04-min` — Minimal variant +- `R4.4.3-python3.12.12-ubuntu-22.04` — R 4.4.3, Python 3.12.12, Ubuntu 22.04, standard variant +- `R4.3.3-python3.11.15-ubuntu-24.04` — R 4.3.3, Python 3.11.15, Ubuntu 24.04, standard variant ## Architectures @@ -86,6 +88,19 @@ Each image includes: These images do not bundle the Workbench session components themselves. The `workbench-session-init` init container provides those components at runtime through a shared volume. +## Image variants + +Two variants are available: + +| Variant | Description | +|---|---| +| Standard (`std`) | Opinionated image, runs out of the box. Bundles R, Python, Jupyter, Quarto, TinyTeX, and Posit Professional Drivers, plus a curated set of system development libraries that cover the most commonly used CRAN and PyPI packages. | +| Minimal (`min`) | Same runtime stack as Standard (R, Python, Jupyter, Quarto, TinyTeX, Posit Professional Drivers) without the additional system development libraries. Use this variant as a starting point for custom images when you want to control which system libraries are present. | + +Both variants ship the same R, Python, Jupyter, Quarto, TinyTeX, and Posit Professional Drivers versions for a given tag. The Containerfiles in this repository under `workbench-session/matrix/` document the exact packages installed in any tag. + +See [extending examples](https://github.com/posit-dev/images-examples/tree/main/extending) for how to build on the Minimal image. + ## User These images do not declare a `USER`. Containers start as `root`. The Workbench Job Launcher manages the runtime user when scheduling session pods, dropping privileges to the signed-in user as configured by the Workbench administrator. diff --git a/workbench-session/matrix/Containerfile.ubuntu2204 b/workbench-session/matrix/Containerfile.ubuntu2204.min similarity index 100% rename from workbench-session/matrix/Containerfile.ubuntu2204 rename to workbench-session/matrix/Containerfile.ubuntu2204.min diff --git a/workbench-session/matrix/Containerfile.ubuntu2204.std b/workbench-session/matrix/Containerfile.ubuntu2204.std new file mode 100644 index 0000000..cc9c9fd --- /dev/null +++ b/workbench-session/matrix/Containerfile.ubuntu2204.std @@ -0,0 +1,101 @@ +# Build Python using uv in a separate stage +FROM ghcr.io/astral-sh/uv:debian-slim AS python-builder + +ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy +ENV UV_PYTHON_INSTALL_DIR=/opt/python +ENV UV_PYTHON_PREFERENCE=only-managed + +ARG PYTHON_VERSION +RUN uv python install $PYTHON_VERSION +RUN mv /opt/python/cpython-$PYTHON_VERSION-linux-*/ /opt/python/$PYTHON_VERSION + + +FROM docker.io/library/ubuntu:22.04 +LABEL org.opencontainers.image.base.name="docker.io/library/ubuntu:22.04" + +### ARG declarations ### +ARG DEBIAN_FRONTEND=noninteractive +ARG BUILDARCH +ARG TARGETARCH=${BUILDARCH} +ARG R_VERSION +ARG PYTHON_VERSION +ARG QUARTO_VERSION + +SHELL ["/bin/bash", "-euo", "pipefail", "-c"] + +### Install Apt Packages ### +RUN echo 'Acquire::Retries "3"; Acquire::http::Timeout "30"; Acquire::https::Timeout "30";' > /etc/apt/apt.conf.d/99-retries && \ + apt-get update -yqq --fix-missing && \ + apt-get upgrade -yqq && \ + apt-get dist-upgrade -yqq && \ + apt-get autoremove -yqq --purge && \ + apt-get install -yqq --no-install-recommends \ + curl \ + ca-certificates \ + gnupg \ + tar && \ + bash -c "$(curl -1fsSL 'https://dl.posit.co/public/pro/setup.deb.sh')" && \ + apt-get clean -yqq && \ + rm -rf /var/lib/apt/lists/* + +COPY workbench-session/matrix/deps/ubuntu-22.04_packages.txt /tmp/ubuntu-22.04_packages.txt +COPY workbench-session/matrix/deps/ubuntu-22.04_optional_packages.txt /tmp/ubuntu-22.04_optional_packages.txt +RUN apt-get update -yqq && \ + xargs -a /tmp/ubuntu-22.04_packages.txt apt-get install -yqq --no-install-recommends && \ + xargs -a /tmp/ubuntu-22.04_optional_packages.txt apt-get install -yqq --no-install-recommends && \ + apt-get clean -yqq && \ + rm -rf /var/lib/apt/lists/* + + +### Install Pro Drivers ### +RUN apt-get update -yqq && \ + apt-get install -yqq --no-install-recommends \ + rstudio-drivers && \ + apt-get clean -yqq && \ + rm -rf /var/lib/apt/lists/* +RUN cp /opt/rstudio-drivers/odbcinst.ini.sample /etc/odbcinst.ini + +# Install Python from previous stage +COPY --from=python-builder /opt/python /opt/python + +### Install Jupyter ### +RUN /opt/python/$PYTHON_VERSION/bin/python -m venv /opt/python/jupyter && \ + /opt/python/jupyter/bin/pip install --no-cache-dir --upgrade pip setuptools wheel && \ + /opt/python/jupyter/bin/pip install --no-cache-dir --upgrade \ + "jupyterlab<5" \ + notebook \ + "pwb_jupyterlab<2" && \ + rm -rf /opt/python/jupyter/lib/python*/site-packages/jupyterlab/tests && \ + rm -rf /opt/python/jupyter/lib/python*/site-packages/jupyterlab/galata && \ + rm -f /opt/python/jupyter/lib/python*/site-packages/jupyterlab/staging/yarn.lock && \ + ln -s /opt/python/jupyter/bin/jupyter /usr/local/bin/jupyter + +### Install Jupyter kernel ### +RUN /opt/python/$PYTHON_VERSION/bin/pip install --no-cache-dir --upgrade --break-system-packages \ + ipykernel && \ + /opt/python/$PYTHON_VERSION/bin/python -m ipykernel install --user --name python$PYTHON_VERSION --display-name "Python $PYTHON_VERSION" + +# Install R +RUN RUN_UNATTENDED=1 R_VERSION=$R_VERSION bash -c "$(curl -fsSL https://rstd.io/r-install)" && \ + find . -type f -name '[rR]-$R_VERSION.*\.(deb|rpm)' -delete + +### Install Quarto ### +RUN bash -c "$(curl -1fsSL 'https://dl.posit.co/public/open/setup.deb.sh')" && \ + apt-get install -yqq --no-install-recommends \ + quarto=$QUARTO_VERSION && \ + apt-mark hold quarto && \ + apt-get clean -yqq && \ + rm -rf /var/lib/apt/lists/* + +### Install TinyTeX ### +# ADD busts the cache on new TinyTeX releases. +# HOME="/opt" workaround: https://github.com/quarto-dev/quarto-cli/issues/11800 +ADD https://github.com/rstudio/tinytex-releases/releases/latest /tmp/tinytex-release.json +RUN --mount=type=secret,id=github_token,required=false \ + GH_TOKEN="$([ -s /run/secrets/github_token ] && cat /run/secrets/github_token)" HOME="/opt" /opt/quarto/bin/quarto install tinytex --no-prompt --update-path && \ + rm -f /tmp/tinytex-release.json + +COPY workbench-session/matrix/conf/vscode.extensions.conf /etc/rstudio/vscode.extensions.conf +COPY workbench-session/matrix/conf/positron.extensions.conf /etc/rstudio/positron.extensions.conf + +EXPOSE 8788/tcp diff --git a/workbench-session/matrix/Containerfile.ubuntu2404 b/workbench-session/matrix/Containerfile.ubuntu2404.min similarity index 100% rename from workbench-session/matrix/Containerfile.ubuntu2404 rename to workbench-session/matrix/Containerfile.ubuntu2404.min diff --git a/workbench-session/matrix/Containerfile.ubuntu2404.std b/workbench-session/matrix/Containerfile.ubuntu2404.std new file mode 100644 index 0000000..7b818e5 --- /dev/null +++ b/workbench-session/matrix/Containerfile.ubuntu2404.std @@ -0,0 +1,101 @@ +# Build Python using uv in a separate stage +FROM ghcr.io/astral-sh/uv:debian-slim AS python-builder + +ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy +ENV UV_PYTHON_INSTALL_DIR=/opt/python +ENV UV_PYTHON_PREFERENCE=only-managed + +ARG PYTHON_VERSION +RUN uv python install $PYTHON_VERSION +RUN mv /opt/python/cpython-$PYTHON_VERSION-linux-*/ /opt/python/$PYTHON_VERSION + + +FROM docker.io/library/ubuntu:24.04 +LABEL org.opencontainers.image.base.name="docker.io/library/ubuntu:24.04" + +### ARG declarations ### +ARG DEBIAN_FRONTEND=noninteractive +ARG BUILDARCH +ARG TARGETARCH=${BUILDARCH} +ARG R_VERSION +ARG PYTHON_VERSION +ARG QUARTO_VERSION + +SHELL ["/bin/bash", "-euo", "pipefail", "-c"] + +### Install Apt Packages ### +RUN echo 'Acquire::Retries "3"; Acquire::http::Timeout "30"; Acquire::https::Timeout "30";' > /etc/apt/apt.conf.d/99-retries && \ + apt-get update -yqq --fix-missing && \ + apt-get upgrade -yqq && \ + apt-get dist-upgrade -yqq && \ + apt-get autoremove -yqq --purge && \ + apt-get install -yqq --no-install-recommends \ + curl \ + ca-certificates \ + gnupg \ + tar && \ + bash -c "$(curl -1fsSL 'https://dl.posit.co/public/pro/setup.deb.sh')" && \ + apt-get clean -yqq && \ + rm -rf /var/lib/apt/lists/* + +COPY workbench-session/matrix/deps/ubuntu-24.04_packages.txt /tmp/ubuntu-24.04_packages.txt +COPY workbench-session/matrix/deps/ubuntu-24.04_optional_packages.txt /tmp/ubuntu-24.04_optional_packages.txt +RUN apt-get update -yqq && \ + xargs -a /tmp/ubuntu-24.04_packages.txt apt-get install -yqq --no-install-recommends && \ + xargs -a /tmp/ubuntu-24.04_optional_packages.txt apt-get install -yqq --no-install-recommends && \ + apt-get clean -yqq && \ + rm -rf /var/lib/apt/lists/* + + +### Install Pro Drivers ### +RUN apt-get update -yqq && \ + apt-get install -yqq --no-install-recommends \ + rstudio-drivers && \ + apt-get clean -yqq && \ + rm -rf /var/lib/apt/lists/* +RUN cp /opt/rstudio-drivers/odbcinst.ini.sample /etc/odbcinst.ini + +# Install Python from previous stage +COPY --from=python-builder /opt/python /opt/python + +### Install Jupyter ### +RUN /opt/python/$PYTHON_VERSION/bin/python -m venv /opt/python/jupyter && \ + /opt/python/jupyter/bin/pip install --no-cache-dir --upgrade pip setuptools wheel && \ + /opt/python/jupyter/bin/pip install --no-cache-dir --upgrade \ + "jupyterlab<5" \ + notebook \ + "pwb_jupyterlab<2" && \ + rm -rf /opt/python/jupyter/lib/python*/site-packages/jupyterlab/tests && \ + rm -rf /opt/python/jupyter/lib/python*/site-packages/jupyterlab/galata && \ + rm -f /opt/python/jupyter/lib/python*/site-packages/jupyterlab/staging/yarn.lock && \ + ln -s /opt/python/jupyter/bin/jupyter /usr/local/bin/jupyter + +### Install Jupyter kernel ### +RUN /opt/python/$PYTHON_VERSION/bin/pip install --no-cache-dir --upgrade --break-system-packages \ + ipykernel && \ + /opt/python/$PYTHON_VERSION/bin/python -m ipykernel install --user --name python$PYTHON_VERSION --display-name "Python $PYTHON_VERSION" + +# Install R +RUN RUN_UNATTENDED=1 R_VERSION=$R_VERSION bash -c "$(curl -fsSL https://rstd.io/r-install)" && \ + find . -type f -name '[rR]-$R_VERSION.*\.(deb|rpm)' -delete + +### Install Quarto ### +RUN bash -c "$(curl -1fsSL 'https://dl.posit.co/public/open/setup.deb.sh')" && \ + apt-get install -yqq --no-install-recommends \ + quarto=$QUARTO_VERSION && \ + apt-mark hold quarto && \ + apt-get clean -yqq && \ + rm -rf /var/lib/apt/lists/* + +### Install TinyTeX ### +# ADD busts the cache on new TinyTeX releases. +# HOME="/opt" workaround: https://github.com/quarto-dev/quarto-cli/issues/11800 +ADD https://github.com/rstudio/tinytex-releases/releases/latest /tmp/tinytex-release.json +RUN --mount=type=secret,id=github_token,required=false \ + GH_TOKEN="$([ -s /run/secrets/github_token ] && cat /run/secrets/github_token)" HOME="/opt" /opt/quarto/bin/quarto install tinytex --no-prompt --update-path && \ + rm -f /tmp/tinytex-release.json + +COPY workbench-session/matrix/conf/vscode.extensions.conf /etc/rstudio/vscode.extensions.conf +COPY workbench-session/matrix/conf/positron.extensions.conf /etc/rstudio/positron.extensions.conf + +EXPOSE 8788/tcp diff --git a/workbench-session/matrix/deps/ubuntu-22.04_optional_packages.txt b/workbench-session/matrix/deps/ubuntu-22.04_optional_packages.txt new file mode 100644 index 0000000..8bdf4c1 --- /dev/null +++ b/workbench-session/matrix/deps/ubuntu-22.04_optional_packages.txt @@ -0,0 +1,76 @@ +autoconf +automake +cmake +gfortran +make +patch +pkg-config +bzip2 +unzip +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript +gsfonts +imagemagick +libcairo2-dev +libfontconfig1-dev +libfreetype6-dev +libfribidi-dev +libharfbuzz-dev +libjpeg-dev +libmagick++-dev +libpango1.0-dev +libpng-dev +libtiff-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev +libuv1-dev +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev +tcl +tk +tk-dev +tk-table +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +gdb +perl +strace diff --git a/workbench-session/matrix/deps/ubuntu-22.04_packages.txt b/workbench-session/matrix/deps/ubuntu-22.04_packages.txt index bb28877..268608d 100644 --- a/workbench-session/matrix/deps/ubuntu-22.04_packages.txt +++ b/workbench-session/matrix/deps/ubuntu-22.04_packages.txt @@ -5,7 +5,6 @@ krb5-user libpq-dev libuser libuser1-dev -libuv1-dev rrdtool subversion xz-utils diff --git a/workbench-session/matrix/deps/ubuntu-24.04_optional_packages.txt b/workbench-session/matrix/deps/ubuntu-24.04_optional_packages.txt new file mode 100644 index 0000000..cad1ff6 --- /dev/null +++ b/workbench-session/matrix/deps/ubuntu-24.04_optional_packages.txt @@ -0,0 +1,76 @@ +autoconf +automake +cmake +gfortran +make +patch +pkg-config +bzip2 +unzip +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript +gsfonts +imagemagick +libcairo2-dev +libfontconfig1-dev +libfreetype-dev +libfribidi-dev +libharfbuzz-dev +libjpeg-dev +libmagick++-dev +libpango1.0-dev +libpng-dev +libtiff-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev +libuv1-dev +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev +tcl +tk +tk-dev +tk-table +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +gdb +perl +strace diff --git a/workbench-session/matrix/deps/ubuntu-24.04_packages.txt b/workbench-session/matrix/deps/ubuntu-24.04_packages.txt index bb28877..268608d 100644 --- a/workbench-session/matrix/deps/ubuntu-24.04_packages.txt +++ b/workbench-session/matrix/deps/ubuntu-24.04_packages.txt @@ -5,7 +5,6 @@ krb5-user libpq-dev libuser libuser1-dev -libuv1-dev rrdtool subversion xz-utils diff --git a/workbench-session/matrix/test/goss.yaml b/workbench-session/matrix/test/goss.yaml index 1e01085..a3e3c10 100644 --- a/workbench-session/matrix/test/goss.yaml +++ b/workbench-session/matrix/test/goss.yaml @@ -5,6 +5,15 @@ package: {{.}}: installed: true {{end}} + {{ if eq .Env.IMAGE_VARIANT "Standard" }} + + {{ $apt_optional_package_list_path := printf "/tmp/version/deps/%s-%s_optional_packages.txt" .Env.IMAGE_OS_NAME .Env.IMAGE_OS_VERSION }} + {{ $apt_optional_package_list := readFile $apt_optional_package_list_path | splitList "\n" }} + {{- range $apt_optional_package_list }} + {{.}}: + installed: true + {{end}} + {{ end }} quarto: installed: true versions: diff --git a/workbench-session/template/Containerfile.ubuntu2204.jinja2 b/workbench-session/template/Containerfile.ubuntu2204.jinja2 index 2509c4a..894b40e 100644 --- a/workbench-session/template/Containerfile.ubuntu2204.jinja2 +++ b/workbench-session/template/Containerfile.ubuntu2204.jinja2 @@ -26,8 +26,14 @@ SHELL ["/bin/bash", "-euo", "pipefail", "-c"] ### Install Apt Packages ### {{ apt.run_setup() }} +{% if Image.Variant != "Minimal" -%} +COPY {{ Path.Version }}/deps/ubuntu-22.04_packages.txt /tmp/ubuntu-22.04_packages.txt +COPY {{ Path.Version }}/deps/ubuntu-22.04_optional_packages.txt /tmp/ubuntu-22.04_optional_packages.txt +{{ apt.run_install(files = ['/tmp/ubuntu-22.04_packages.txt', '/tmp/ubuntu-22.04_optional_packages.txt']) }} +{% else -%} COPY {{ Path.Version }}/deps/ubuntu-22.04_packages.txt /tmp/ubuntu-22.04_packages.txt {{ apt.run_install(files = '/tmp/ubuntu-22.04_packages.txt') }} +{%- endif %} ### Install Pro Drivers ### {{ apt.run_install(packages="rstudio-drivers") }} diff --git a/workbench-session/template/Containerfile.ubuntu2404.jinja2 b/workbench-session/template/Containerfile.ubuntu2404.jinja2 index f2c24e9..58c45fa 100644 --- a/workbench-session/template/Containerfile.ubuntu2404.jinja2 +++ b/workbench-session/template/Containerfile.ubuntu2404.jinja2 @@ -26,8 +26,14 @@ SHELL ["/bin/bash", "-euo", "pipefail", "-c"] ### Install Apt Packages ### {{ apt.run_setup() }} +{% if Image.Variant != "Minimal" -%} +COPY {{ Path.Version }}/deps/ubuntu-24.04_packages.txt /tmp/ubuntu-24.04_packages.txt +COPY {{ Path.Version }}/deps/ubuntu-24.04_optional_packages.txt /tmp/ubuntu-24.04_optional_packages.txt +{{ apt.run_install(files = ['/tmp/ubuntu-24.04_packages.txt', '/tmp/ubuntu-24.04_optional_packages.txt']) }} +{% else -%} COPY {{ Path.Version }}/deps/ubuntu-24.04_packages.txt /tmp/ubuntu-24.04_packages.txt {{ apt.run_install(files = '/tmp/ubuntu-24.04_packages.txt') }} +{%- endif %} ### Install Pro Drivers ### {{ apt.run_install(packages="rstudio-drivers") }} diff --git a/workbench-session/template/deps/ubuntu-22.04_optional_packages.txt.jinja2 b/workbench-session/template/deps/ubuntu-22.04_optional_packages.txt.jinja2 new file mode 100644 index 0000000..bdfe226 --- /dev/null +++ b/workbench-session/template/deps/ubuntu-22.04_optional_packages.txt.jinja2 @@ -0,0 +1,102 @@ +{#- +Standard-variant optional apt packages for the workbench-session matrix +image on Ubuntu 22.04 (jammy). Mirrors the 24.04 session list - see that +template for what is included vs. dropped relative to the workbench image, +and the workbench 22.04 template for jammy-specific naming notes. +-#} +{# Build toolchain - source installs of compiled R/Python pkgs (Matrix, RcppArmadillo, scipy) -#} +autoconf +automake +cmake +gfortran +make +patch +pkg-config +{# Compression CLI tools - source archive extraction, Quarto bundles -#} +bzip2 +unzip +zip +{# Compression headers - data.table, httpuv, Pillow, scipy, lxml from source -#} +libbz2-dev +liblzma-dev +zlib1g-dev +{# TLS / HTTP / crypto - curl, httr, httr2, openssl, urllib3, cryptography, sodium, plumber -#} +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +{# FFI / readline / regex - Python cffi/cryptography, source rebuilds of R + Python -#} +libffi-dev +libpcre2-dev +libreadline-dev +{# XML / Unicode / text - xml2, XML, stringi, lxml, arrow -#} +libicu-dev +libxml2-dev +libxslt1-dev +{# Database client headers - RPostgres, RMariaDB, odbc, DBI, psycopg2, mysqlclient, pyodbc. + libgdal-bin requires default-libmysqlclient-dev and must be removed to install libmariadb-dev + and libmariadb-dev-compat as the packages conflict. -#} +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev +{# Version control / network - gert, git2r, renv from GitHub, pip git+ installs, SSH transports -#} +libgit2-dev +openssh-client +wget +{# Geospatial - sf, terra, stars, geopandas, rasterio, pyproj -#} +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +{# Graphics / fonts / imaging - ragg, systemfonts, textshaping, magick, Cairo, Pillow, matplotlib -#} +fonts-dejavu-core +fonts-liberation +ghostscript +gsfonts +imagemagick +libcairo2-dev +libfontconfig1-dev +libfreetype6-dev +libfribidi-dev +libharfbuzz-dev +libjpeg-dev +libmagick++-dev +libpango1.0-dev +libpng-dev +libtiff-dev +libwebp-dev +{# Math libraries - igraph (GLPK), gmp, Rmpfr, gsl, RcppGSL, Bioconductor numerics -#} +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +{# V8 / protobuf / arrow / httpuv source build -#} +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev +libuv1-dev +protobuf-compiler +{# PDF processing - pdftools, pdfminer.six, pdf2image, magick PDF rasterization -#} +libpoppler-cpp-dev +poppler-data +poppler-utils +{# X11 / OpenGL - rgl, plotly 3D, configure-script probes that test for X libs -#} +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev +{# Tcl/Tk - tcltk R pkg, Python tkinter -#} +tcl +tk +tk-dev +tk-table +{# Java - rJava, RJDBC, xlsx, JPype1; run R CMD javareconf after install -#} +default-jdk +{# Authentication / directory - mongolite, pymongo GSSAPI, python-ldap, requests-kerberos -#} +libkrb5-dev +libldap2-dev +libsasl2-dev +{# Debug / scripting - session diagnostic flow, R configure perl scripts -#} +gdb +perl +strace diff --git a/workbench-session/template/deps/ubuntu-22.04_packages.txt.jinja2 b/workbench-session/template/deps/ubuntu-22.04_packages.txt.jinja2 index bb28877..268608d 100644 --- a/workbench-session/template/deps/ubuntu-22.04_packages.txt.jinja2 +++ b/workbench-session/template/deps/ubuntu-22.04_packages.txt.jinja2 @@ -5,7 +5,6 @@ krb5-user libpq-dev libuser libuser1-dev -libuv1-dev rrdtool subversion xz-utils diff --git a/workbench-session/template/deps/ubuntu-24.04_optional_packages.txt.jinja2 b/workbench-session/template/deps/ubuntu-24.04_optional_packages.txt.jinja2 new file mode 100644 index 0000000..2fe477c --- /dev/null +++ b/workbench-session/template/deps/ubuntu-24.04_optional_packages.txt.jinja2 @@ -0,0 +1,108 @@ +{#- +Standard-variant optional apt packages for the workbench-session matrix +image. Same Tier 1 set as the workbench image, minus: + - workbench-server-only packages (sssd, libapparmor1, libedit2, + oddjob-mkhomedir) - the session image is the runtime, not the server. + - python3 / python3-dev / python3-venv - the matrix image already ships + a uv-managed Python at /opt/python that includes the standard library. + - packages already in the base list (git, libpq-dev, krb5-user, libuser, + libuser1-dev, rrdtool, subversion, xz-utils, ca-certificates, curl). +Per-group annotations cannot move into the rendered .txt until +posit-dev/images-shared#550 lands. +-#} +{# Build toolchain - source installs of compiled R/Python pkgs (Matrix, RcppArmadillo, scipy) -#} +autoconf +automake +cmake +gfortran +make +patch +pkg-config +{# Compression CLI tools - source archive extraction, Quarto bundles -#} +bzip2 +unzip +zip +{# Compression headers - data.table, httpuv, Pillow, scipy, lxml from source -#} +libbz2-dev +liblzma-dev +zlib1g-dev +{# TLS / HTTP / crypto - curl, httr, httr2, openssl, urllib3, cryptography, sodium, plumber -#} +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +{# FFI / readline / regex - Python cffi/cryptography, source rebuilds of R + Python -#} +libffi-dev +libpcre2-dev +libreadline-dev +{# XML / Unicode / text - xml2, XML, stringi, lxml, arrow -#} +libicu-dev +libxml2-dev +libxslt1-dev +{# Database client headers - RPostgres, RMariaDB, odbc, DBI, psycopg2, mysqlclient, pyodbc. + libgdal-bin requires default-libmysqlclient-dev and must be removed to install libmariadb-dev + and libmariadb-dev-compat as the packages conflict. -#} +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev +{# Version control / network - gert, git2r, renv from GitHub, pip git+ installs, SSH transports -#} +libgit2-dev +openssh-client +wget +{# Geospatial - sf, terra, stars, geopandas, rasterio, pyproj -#} +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +{# Graphics / fonts / imaging - ragg, systemfonts, textshaping, magick, Cairo, Pillow, matplotlib -#} +fonts-dejavu-core +fonts-liberation +ghostscript +gsfonts +imagemagick +libcairo2-dev +libfontconfig1-dev +libfreetype-dev +libfribidi-dev +libharfbuzz-dev +libjpeg-dev +libmagick++-dev +libpango1.0-dev +libpng-dev +libtiff-dev +libwebp-dev +{# Math libraries - igraph (GLPK), gmp, Rmpfr, gsl, RcppGSL, Bioconductor numerics -#} +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +{# V8 / protobuf / arrow / httpuv source build -#} +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev +libuv1-dev +protobuf-compiler +{# PDF processing - pdftools, pdfminer.six, pdf2image, magick PDF rasterization -#} +libpoppler-cpp-dev +poppler-data +poppler-utils +{# X11 / OpenGL - rgl, plotly 3D, configure-script probes that test for X libs -#} +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev +{# Tcl/Tk - tcltk R pkg, Python tkinter -#} +tcl +tk +tk-dev +tk-table +{# Java - rJava, RJDBC, xlsx, JPype1; run R CMD javareconf after install -#} +default-jdk +{# Authentication / directory - mongolite, pymongo GSSAPI, python-ldap, requests-kerberos -#} +libkrb5-dev +libldap2-dev +libsasl2-dev +{# Debug / scripting - session diagnostic flow, R configure perl scripts -#} +gdb +perl +strace diff --git a/workbench-session/template/deps/ubuntu-24.04_packages.txt.jinja2 b/workbench-session/template/deps/ubuntu-24.04_packages.txt.jinja2 index bb28877..268608d 100644 --- a/workbench-session/template/deps/ubuntu-24.04_packages.txt.jinja2 +++ b/workbench-session/template/deps/ubuntu-24.04_packages.txt.jinja2 @@ -5,7 +5,6 @@ krb5-user libpq-dev libuser libuser1-dev -libuv1-dev rrdtool subversion xz-utils diff --git a/workbench-session/template/test/goss.yaml.jinja2 b/workbench-session/template/test/goss.yaml.jinja2 index 74c3c5a..e015655 100644 --- a/workbench-session/template/test/goss.yaml.jinja2 +++ b/workbench-session/template/test/goss.yaml.jinja2 @@ -11,6 +11,15 @@ package: {{.}}: installed: true {{end}} + {{ if eq .Env.IMAGE_VARIANT "Standard" }} + + {{ $apt_optional_package_list_path := printf "/tmp/version/deps/%s-%s_optional_packages.txt" .Env.IMAGE_OS_NAME .Env.IMAGE_OS_VERSION }} + {{ $apt_optional_package_list := readFile $apt_optional_package_list_path | splitList "\n" }} + {{- range $apt_optional_package_list }} + {{.}}: + installed: true + {{end}} + {{ end }} {%- endraw %} quarto: installed: true diff --git a/workbench/2025.09/deps/ubuntu-22.04_optional_packages.txt b/workbench/2025.09/deps/ubuntu-22.04_optional_packages.txt index 06467ee..c55f36f 100644 --- a/workbench/2025.09/deps/ubuntu-22.04_optional_packages.txt +++ b/workbench/2025.09/deps/ubuntu-22.04_optional_packages.txt @@ -1,46 +1,85 @@ +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +bzip2 +unzip +xz-utils +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev git +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype6-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +python3 +python3-dev +python3-venv +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +gdb +perl +strace diff --git a/workbench/2025.09/deps/ubuntu-24.04_optional_packages.txt b/workbench/2025.09/deps/ubuntu-24.04_optional_packages.txt index cc3f55d..03766c2 100644 --- a/workbench/2025.09/deps/ubuntu-24.04_optional_packages.txt +++ b/workbench/2025.09/deps/ubuntu-24.04_optional_packages.txt @@ -1,46 +1,85 @@ +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +bzip2 +unzip +xz-utils +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev git +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +python3 +python3-dev +python3-venv +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +gdb +perl +strace diff --git a/workbench/2026.01/deps/ubuntu-22.04_optional_packages.txt b/workbench/2026.01/deps/ubuntu-22.04_optional_packages.txt index 06467ee..c55f36f 100644 --- a/workbench/2026.01/deps/ubuntu-22.04_optional_packages.txt +++ b/workbench/2026.01/deps/ubuntu-22.04_optional_packages.txt @@ -1,46 +1,85 @@ +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +bzip2 +unzip +xz-utils +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev git +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype6-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +python3 +python3-dev +python3-venv +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +gdb +perl +strace diff --git a/workbench/2026.01/deps/ubuntu-24.04_optional_packages.txt b/workbench/2026.01/deps/ubuntu-24.04_optional_packages.txt index cc3f55d..03766c2 100644 --- a/workbench/2026.01/deps/ubuntu-24.04_optional_packages.txt +++ b/workbench/2026.01/deps/ubuntu-24.04_optional_packages.txt @@ -1,46 +1,85 @@ +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +bzip2 +unzip +xz-utils +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev git +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +python3 +python3-dev +python3-venv +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +gdb +perl +strace diff --git a/workbench/2026.04/Containerfile.ubuntu2204.std b/workbench/2026.04/Containerfile.ubuntu2204.std index 51a75d1..c70c310 100644 --- a/workbench/2026.04/Containerfile.ubuntu2204.std +++ b/workbench/2026.04/Containerfile.ubuntu2204.std @@ -122,6 +122,12 @@ RUN mkdir -p /var/lib/rstudio-server/monitor/log \ ### Install TinyTeX using Quarto ### # Caches won't invalidate correctly on new releases for TinyTeX installs. This ADD instruction is a workaround to bust # the cache on new releases. +# +# TinyTeX is installed under HOME="/opt" so the install lands at /opt/.TinyTeX, +# which is readable by non-root runtime users. `--update-path` makes tlmgr +# symlink the TinyTeX binaries into /usr/local/bin. +# TODO: Remove `HOME="/opt"` once Quarto supports custom install locations +# for TinyTeX, see https://github.com/quarto-dev/quarto-cli/issues/11800. ADD https://github.com/rstudio/tinytex-releases/releases/latest /tmp/tinytex-release.json RUN --mount=type=secret,id=github_token,required=false \ GH_TOKEN="$([ -s /run/secrets/github_token ] && cat /run/secrets/github_token)" HOME="/opt" /lib/rstudio-server/bin/quarto/bin/quarto install tinytex --no-prompt --update-path \ diff --git a/workbench/2026.04/Containerfile.ubuntu2404.std b/workbench/2026.04/Containerfile.ubuntu2404.std index e31f04a..4fc1e8e 100644 --- a/workbench/2026.04/Containerfile.ubuntu2404.std +++ b/workbench/2026.04/Containerfile.ubuntu2404.std @@ -122,6 +122,12 @@ RUN mkdir -p /var/lib/rstudio-server/monitor/log \ ### Install TinyTeX using Quarto ### # Caches won't invalidate correctly on new releases for TinyTeX installs. This ADD instruction is a workaround to bust # the cache on new releases. +# +# TinyTeX is installed under HOME="/opt" so the install lands at /opt/.TinyTeX, +# which is readable by non-root runtime users. `--update-path` makes tlmgr +# symlink the TinyTeX binaries into /usr/local/bin. +# TODO: Remove `HOME="/opt"` once Quarto supports custom install locations +# for TinyTeX, see https://github.com/quarto-dev/quarto-cli/issues/11800. ADD https://github.com/rstudio/tinytex-releases/releases/latest /tmp/tinytex-release.json RUN --mount=type=secret,id=github_token,required=false \ GH_TOKEN="$([ -s /run/secrets/github_token ] && cat /run/secrets/github_token)" HOME="/opt" /lib/rstudio-server/bin/quarto/bin/quarto install tinytex --no-prompt --update-path \ diff --git a/workbench/2026.04/deps/ubuntu-22.04_optional_packages.txt b/workbench/2026.04/deps/ubuntu-22.04_optional_packages.txt index 06467ee..c55f36f 100644 --- a/workbench/2026.04/deps/ubuntu-22.04_optional_packages.txt +++ b/workbench/2026.04/deps/ubuntu-22.04_optional_packages.txt @@ -1,46 +1,85 @@ +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +bzip2 +unzip +xz-utils +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev git +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype6-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +python3 +python3-dev +python3-venv +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +gdb +perl +strace diff --git a/workbench/2026.04/deps/ubuntu-24.04_optional_packages.txt b/workbench/2026.04/deps/ubuntu-24.04_optional_packages.txt index cc3f55d..03766c2 100644 --- a/workbench/2026.04/deps/ubuntu-24.04_optional_packages.txt +++ b/workbench/2026.04/deps/ubuntu-24.04_optional_packages.txt @@ -1,46 +1,85 @@ +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +bzip2 +unzip +xz-utils +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev git +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +python3 +python3-dev +python3-venv +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +gdb +perl +strace diff --git a/workbench/2026.05/deps/ubuntu-22.04_optional_packages.txt b/workbench/2026.05/deps/ubuntu-22.04_optional_packages.txt index 06467ee..c55f36f 100644 --- a/workbench/2026.05/deps/ubuntu-22.04_optional_packages.txt +++ b/workbench/2026.05/deps/ubuntu-22.04_optional_packages.txt @@ -1,46 +1,85 @@ +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +bzip2 +unzip +xz-utils +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev git +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype6-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +python3 +python3-dev +python3-venv +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +gdb +perl +strace diff --git a/workbench/2026.05/deps/ubuntu-24.04_optional_packages.txt b/workbench/2026.05/deps/ubuntu-24.04_optional_packages.txt index cc3f55d..03766c2 100644 --- a/workbench/2026.05/deps/ubuntu-24.04_optional_packages.txt +++ b/workbench/2026.05/deps/ubuntu-24.04_optional_packages.txt @@ -1,46 +1,85 @@ +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +bzip2 +unzip +xz-utils +zip +libbz2-dev +liblzma-dev +zlib1g-dev +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +libffi-dev +libpcre2-dev +libreadline-dev +libicu-dev +libxml2-dev +libxslt1-dev +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev git +libgit2-dev +openssh-client +wget +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +libpoppler-cpp-dev +poppler-data +poppler-utils +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +default-jdk +libkrb5-dev +libldap2-dev +libsasl2-dev +python3 +python3-dev +python3-venv +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +gdb +perl +strace diff --git a/workbench/template/deps/ubuntu-22.04_optional_packages.txt.jinja2 b/workbench/template/deps/ubuntu-22.04_optional_packages.txt.jinja2 index 06467ee..bd4cde3 100644 --- a/workbench/template/deps/ubuntu-22.04_optional_packages.txt.jinja2 +++ b/workbench/template/deps/ubuntu-22.04_optional_packages.txt.jinja2 @@ -1,46 +1,112 @@ +{#- +Standard-variant optional apt packages for the workbench image on Ubuntu +22.04 (jammy). Mirrors the 24.04 list - see that template for selection +rationale and the bakery-issue pointer. +-#} +{# Build toolchain - source installs of compiled R/Python pkgs (Matrix, RcppArmadillo, scipy) -#} +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +{# Compression CLI tools - source archive extraction, Quarto bundles, conda envs -#} +bzip2 +unzip +xz-utils +zip +{# Compression headers - data.table, httpuv, Pillow, scipy, lxml from source -#} +libbz2-dev +liblzma-dev +zlib1g-dev +{# TLS / HTTP / crypto - curl, httr, httr2, openssl, urllib3, cryptography, sodium, plumber -#} +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +{# FFI / readline / regex - Python cffi/cryptography, source rebuilds of R + Python -#} +libffi-dev +libpcre2-dev +libreadline-dev +{# XML / Unicode / text - xml2, XML, stringi, lxml, arrow -#} +libicu-dev +libxml2-dev +libxslt1-dev +{# Database client headers - RPostgres, RMariaDB, odbc, DBI, psycopg2, mysqlclient, pyodbc. + libgdal-bin requires default-libmysqlclient-dev and must be removed to install libmariadb-dev + and libmariadb-dev-compat as the packages conflict. -#} +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev +{# Version control / network - gert, git2r, renv from GitHub, pip git+ installs, SSH transports -#} git +libgit2-dev +openssh-client +wget +{# Geospatial - sf, terra, stars, geopandas, rasterio, pyproj -#} +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +{# Graphics / fonts / imaging - ragg, systemfonts, textshaping, magick, Cairo, Pillow, matplotlib -#} +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype6-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +{# Math libraries - igraph (GLPK), gmp, Rmpfr, gsl, RcppGSL, Bioconductor numerics -#} +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +{# V8 / protobuf / arrow / httpuv source build -#} +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +{# PDF processing - pdftools, pdfminer.six, pdf2image, magick PDF rasterization -#} +libpoppler-cpp-dev +poppler-data +poppler-utils +{# X11 / OpenGL - rgl, plotly 3D, configure-script probes that test for X libs -#} +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev +{# Tcl/Tk - tcltk R pkg, Python tkinter -#} tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +{# Java - rJava, RJDBC, xlsx, JPype1; run R CMD javareconf after install -#} +default-jdk +{# Authentication / directory - mongolite, pymongo GSSAPI, python-ldap, requests-kerberos -#} +libkrb5-dev +libldap2-dev +libsasl2-dev +{# System Python - reticulate venv probes, fallback for source-built extensions on arm64 -#} +python3 +python3-dev +python3-venv +{# Workbench-server identity / PAM / SSSD / AppArmor profiles -#} +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +{# Debug / scripting - rstudio-server diagnostic flow, R configure perl scripts -#} +gdb +perl +strace diff --git a/workbench/template/deps/ubuntu-24.04_optional_packages.txt.jinja2 b/workbench/template/deps/ubuntu-24.04_optional_packages.txt.jinja2 index cc3f55d..d1dacf5 100644 --- a/workbench/template/deps/ubuntu-24.04_optional_packages.txt.jinja2 +++ b/workbench/template/deps/ubuntu-24.04_optional_packages.txt.jinja2 @@ -1,46 +1,116 @@ +{#- +Standard-variant optional apt packages for the workbench image. Groups +mirror the sysreq categories that pak/PPM resolve for the most-downloaded +CRAN packages plus the common Python source-build paths. Selection +sources, curation rationale, and intentional exclusions live in the +commit message and PR description; the per-group annotations below +cannot move into the rendered .txt until posit-dev/images-shared#550 +lands. +-#} +{# Build toolchain - source installs of compiled R/Python pkgs (Matrix, RcppArmadillo, scipy) -#} +autoconf +automake cmake -default-jdk -gdal-bin -gdb +gfortran +make +patch +pkg-config +{# Compression CLI tools - source archive extraction, Quarto bundles, conda envs -#} +bzip2 +unzip +xz-utils +zip +{# Compression headers - data.table, httpuv, Pillow, scipy, lxml from source -#} +libbz2-dev +liblzma-dev +zlib1g-dev +{# TLS / HTTP / crypto - curl, httr, httr2, openssl, urllib3, cryptography, sodium, plumber -#} +libcurl4-openssl-dev +libsodium-dev +libssh2-1-dev +{# FFI / readline / regex - Python cffi/cryptography, source rebuilds of R + Python -#} +libffi-dev +libpcre2-dev +libreadline-dev +{# XML / Unicode / text - xml2, XML, stringi, lxml, arrow -#} +libicu-dev +libxml2-dev +libxslt1-dev +{# Database client headers - RPostgres, RMariaDB, odbc, DBI, psycopg2, mysqlclient, pyodbc. + libgdal-bin requires default-libmysqlclient-dev and must be removed to install libmariadb-dev + and libmariadb-dev-compat as the packages conflict. -#} +default-libmysqlclient-dev +libsqlite3-dev +unixodbc-dev +{# Version control / network - gert, git2r, renv from GitHub, pip git+ installs, SSH transports -#} git +libgit2-dev +openssh-client +wget +{# Geospatial - sf, terra, stars, geopandas, rasterio, pyproj -#} +gdal-bin +libgdal-dev +libgeos-dev +libproj-dev +libudunits2-dev +{# Graphics / fonts / imaging - ragg, systemfonts, textshaping, magick, Cairo, Pillow, matplotlib -#} +fonts-dejavu-core +fonts-liberation +ghostscript gsfonts imagemagick -libapparmor1 libcairo2-dev -libcurl4-openssl-dev -libedit2 libfontconfig1-dev libfreetype-dev libfribidi-dev -libgdal-dev -libgeos-dev -libgl1-mesa-dev -libglpk-dev -libglu1-mesa-dev libharfbuzz-dev -libicu-dev libjpeg-dev libmagick++-dev -libmysqlclient-dev -libnode-dev +libpango1.0-dev libpng-dev -libproj-dev -libsodium-dev -libsqlite3-dev -libssh2-1-dev libtiff-dev -libudunits2-dev +libwebp-dev +{# Math libraries - igraph (GLPK), gmp, Rmpfr, gsl, RcppGSL, Bioconductor numerics -#} +libglpk-dev +libgmp3-dev +libgsl-dev +libmpfr-dev +{# V8 / protobuf / arrow / httpuv source build -#} +libabsl-dev +libnode-dev +libprotobuf-dev +libprotoc-dev libuv1-dev -libxml2-dev -make -oddjob-mkhomedir -python3 -strace -sssd +protobuf-compiler +{# PDF processing - pdftools, pdfminer.six, pdf2image, magick PDF rasterization -#} +libpoppler-cpp-dev +poppler-data +poppler-utils +{# X11 / OpenGL - rgl, plotly 3D, configure-script probes that test for X libs -#} +libgl1-mesa-dev +libglu1-mesa-dev +libx11-dev +{# Tcl/Tk - tcltk R pkg, Python tkinter -#} tcl tk tk-dev tk-table -unixodbc-dev -xz-utils -zlib1g-dev +{# Java - rJava, RJDBC, xlsx, JPype1; run R CMD javareconf after install -#} +default-jdk +{# Authentication / directory - mongolite, pymongo GSSAPI, python-ldap, requests-kerberos -#} +libkrb5-dev +libldap2-dev +libsasl2-dev +{# System Python - reticulate venv probes, fallback for source-built extensions on arm64 -#} +python3 +python3-dev +python3-venv +{# Workbench-server identity / PAM / SSSD / AppArmor profiles -#} +libapparmor1 +libedit2 +oddjob-mkhomedir +sssd +{# Debug / scripting - rstudio-server diagnostic flow, R configure perl scripts -#} +gdb +perl +strace