Reproducible Apptainer container images for RStudio Server with Bioconductor system-library support, deployed as an Open OnDemand interactive app across Purdue RCAC HPC clusters. Two SIF images are produced from a shared codebase: a Rocky 8 image (Bell, Negishi) and a Rocky 9 image (Gautschi, Scholar).
- Apptainer 1.3+ (available on RCAC clusters)
envsubst(fromgettextpackage)- GNU Make
- Root or fakeroot access for
apptainer build
# Generate def files for both OS targets
make generate-all
# Copy the generated def to the build cluster, then:
sudo apptainer build /tmp/rstudio-bioc-ood-rocky9-r4.5.2-s2025.05.0-496.sif generated/rocky9.def
# Move to deployment location
mv /tmp/rstudio-bioc-ood-rocky9-r4.5.2-s2025.05.0-496.sif /depot/itap/ood/bio/containers/
# Compare OS-specific differences
make diffrstudio-bioc-ood/
CLAUDE.md # Project context for Claude Code
ROADMAP.md # Phased execution plan
README.md # This file
Makefile # Build orchestration
build.sh # Generates .def from template + config
config/
common.env # Shared: R version, RStudio version, packages
rocky8.env # Rocky 8 overrides
rocky9.env # Rocky 9 overrides
templates/
rstudio-bioc-ood.def.tmpl # Parameterized Apptainer def template
generated/ # Generated .def files (git-ignored)
ood-app/
bio_rstudio/ # OOD app (form.yml.erb, script.sh.erb, etc.)
reference/ # Read-only reference from current production
docs/
DEPLOY.md # Cluster deployment checklist
TESTING.md # Validation steps
scripts/ # Validation and utility scripts
Version pins and build parameters live in config/:
| File | Purpose |
|---|---|
common.env |
R, RStudio, Bioconductor versions |
rocky8.env |
Rocky 8 base image, repos, Java 11 |
rocky9.env |
Rocky 9 base image, repos, Java 17 |
Edit these files to bump versions, then make generate-all to regenerate defs.
- ROADMAP.md -- phased execution plan
- docs/DEPLOY.md -- deployment checklist
- docs/TESTING.md -- validation steps