Repository navigation
Evaluate system package lists for Workbench images #89
Description
Activity
- addeddependenciesUpdates to dependency filesUpdates to dependency filestech debtTechnical debt we should addressTechnical debt we should address
on Apr 29, 2026 - addeddockerRelated to container images we produceRelated to container images we produce
on Apr 29, 2026 Package list review — findings
Generated by Claude (Opus 4.7) at the request of @ianpittwood. Treat as a starting point for human review and verification, not as authoritative.
Reviewed
workbench/template/deps/{ubuntu-22.04,ubuntu-24.04}_{,optional_}packages.txt.jinja2against the Containerfile,install_workbench.sh, and the Bakeryapt.j2macros. The 22.04 and 24.04 required lists are byte-identical; the optional lists differ only onlibfreetype-devvslibfreetype6-dev(correct transitional naming).Context that shapes the recommendations
- The required list is installed for both Standard and Minimal — every entry is opinionated bundling that Minimal customers cannot opt out of.
apt.run_setup()already installscurl,ca-certificates,gnupg,tar.install_workbench.shextracts therstudio-serverdeb'sDepends:and installs them, so anything pulled by the deb is already covered.- All installs use
--no-install-recommends, so anything normally pulled via Recommends must be explicit.
Highest-priority findings
libpam-sss/libnss-sssare likely missing. With--no-install-recommends, thesssdmetapackage may not pull these reliably across releases. Without them, SSSD cannot integrate with PAM/NSS — login lookups silently fall back. Verify presence in the current Standard image; if they exist, it's transitive luck. Add explicitly to optional.default-jdk→default-jre-headless. Saves ~250–400 MB and reduces CVE surface. Most users withrJava/RJDBC/ Spark / H2O need only the JRE. Customers needingjavaccan layer it back in.build-essential,libssl-dev,libclang-devshould leave the required list. None are runtime requirements ofrstudio-serveritself; they're source-compilation conveniences. Putting them in required forces them into Minimal, which contradicts Minimal's purpose.libc6in required is a no-op. Guaranteed present in the base image and pulled by the deb'sDepends:. Remove.
Required list — recommended trim
Package Recommendation Reason libc6Remove Already in base image + deb depends libclang-devMove to optional Not a server runtime dep; ~150 MB libxkbcommon-x11-0Investigate, likely remove X11 keyboard lib in a headless server image libssl-devMove to optional Headers only needed for compilation; runtime libssl3already pulled by deblsb-releaseMove to optional or remove /etc/os-releasecovers most needsbuild-essentialMove to optional ~400 MB compiler chain doesn't belong in Minimal libsqlite3-0Verify against deb depends Likely already pulled libpq5,psmisc,rrdtool,sudo,supervisorKeep Core runtime Consider adding
tzdataandlocales(with alocale-gen en_US.UTF-8) — UTF-8 / time-zone issues are recurring user pain points.Optional list — recommended changes
Add (advanced auth — directly called out in the issue scope):
libpam-sss,libnss-sss— see priority finding Refactor repo for bakery tool compatbility #1krb5-user— Kerberos client (kinit,klist) for AD/GSSAPIlibsasl2-modules-gssapi-mit— SASL GSSAPI mechanism for Kerberos-backed LDAP bindslibsasl2-dev,libldap2-dev— for R/Python LDAP/SASL bindings
Add (Quarto / rendering):
librsvg2-bin— SVG → PDF for Quarto/RMarkdown PDF pipelinesfonts-dejavu-core,fonts-liberation— currently onlygsfontsships; ggplot/Quarto PDF output benefits from common fallbacks (~30–80 MB total)
Add (developer ergonomics — commonly assumed present):
openssh-client— git over SSH, scp/sftp (notable omission)unzip,zip,rsync,jq,vim-tiny,htop
Remove or downgrade:
Package Action Reason default-jdk→ default-jre-headlessSize + CVE surface; most users need only JRE imagemagickRemove (keep libmagick++-dev)Long CVE history; R magickpackage only needs the libraryoddjob-mkhomedirRemove Containerfile already wires pam_mkhomedir.sodirectly; redundant mechanismpython3Remove Workbench uses uv-managed Python in /opt/python; system Python invites version drifttk-tableRemove Very niche; bare tcl/tkis sufficient fortcltkgdbOptional candidate Useful but easily added on demand if image size matters Suggested verification before merging any change
- Run
dpkg -Iagainst the publishedrstudio-serverdeb to enumerateDepends:precisely — drop anything frompackages.txtthat's already there. - Build Minimal with the trimmed required list and run
bakery run dgoss --image-name workbench. - For SSSD additions, check
/lib/*/security/pam_sss.soand/lib/*/libnss_sss.so.2exist in the current Standard image to confirm whether the additions are correctness fixes vs explicit pinning. - Build Standard with
default-jre-headlessand smoke-testrJava/RJDBCworkflows before committing.
Biggest wins, in priority order
- Explicit
libpam-sss/libnss-sss(correctness for SSSD-based auth) default-jdk→default-jre-headless(size + CVE surface)- Move
build-essential/libssl-dev/libclang-devout of required (Minimal slimming) - Drop
libc6from required (cosmetic, but signals carefulness)
- addedcvp:0Necessary projects we are undertaking that don’t directly deliver value to the customerNecessary projects we are undertaking that don’t directly deliver value to the customertdp:1The individual working on it notices.The individual working on it notices.
on Jul 22, 2026
Summary
The package lists used in this repository are largely lifted from rstudio-docker-products which may not have up-to-date dependencies. We should evaluate our system dependency lists to determine if any packages should be removed, moved between required and optional, or added.
Methodology
Required packages should include system dependencies that are...
Optional packages should include system dependencies that are...