A site stack next to EESSI, not inside it¶
A site stack is next to EESSI. Injecting into the mount is a different, wrong, object.¶
Host injections sit next to EESSI. They do not write into the mount.¶
A host injection is next to EESSI. It does not rewrite the CVMFS tree.¶
Questions
What does
EESSI_SITE_SOFTWARE_PREFIXchange, and when must it be set?When is
host_injectionsthe right tree, and when is a separate prefix the one the webinar recommends?What still has to be true of a site OpenMPI for the EESSI stack above it to keep working?
What you will be able to do
Install one package on top of EESSI into an operator-chosen prefix with
EESSI-extend, and say why that prefix contains a microarchitecture.Tell Approach 1 (shared filesystem) from Approach 2 (site CVMFS plus the bot), and say which extra moving parts the second one adds.
Point NVIDIA drivers, a full CUDA SDK, and an ABI-compatible site MPI at the paths EESSI actually searches.
Before this page
EESSI, somebody else’s stack:
EESSI-extendprefixes, and why a generation gap is a finding.The same stack somewhere else: the variant symlink, and the override variables.
The bot is three processes and a comment: Approach 2 is that bot, pointed at a different repository.
EESSI provides a shared software stack.
A site may have software EESSI does not provide.
Examples are a closed‑source licence, software not yet on the tree, and software tuned for a specific fabric.
A webinar on 1 June 2026 by Caspar van Leeuwen and Bob Dröge addresses that situation.
The official host_injections page lists four bullets and a symlink.
The webinar describes two approaches, two live clusters, and the variables that enable a login session to see both trees.
Why a site builds at all¶
Three reasons appear on the webinar’s motivation slide.
They are not the same job.
Licensed software cannot go in software.eessi.io.
It may also be limited to a subset of the site’s users.
Software that is not on the tree yet is a time problem.
Waiting for the bot on every architecture is the right path into EESSI (pages 30 and 31).
It is the wrong path for a group that needs the binary this week.
Custom installations are the fabric, the licence server, the site MPI.
Those cannot be expressed as an easyconfig that EESSI would accept.
They are facts about the machine.
Approach 2: the bot, pointed at a site repository¶
The webinar’s second half covers the bot as three processes and a comment aimed at a different CernVM-FS name.
The quoted goal is to build using dependencies from EESSI.
The build occurs in a CVMFS repository of our own.
The build uses the EESSI build bot.
The same build scripts from software-layer-scripts are used.
The “what we need” slide adds a site Stratum-0 and, in production, Stratum-1 servers and proxies.
One bot instance per cluster builds natively.
An S3‑compatible bucket is required.
A GitHub repository whose easystack path is this file:
easystacks/<site_cvmfs_repo>/<EESSI_VERSION>/eessi-<EESSI_VERSION>-eb-<eb_version>-<anything>.yml
The Stratum-0 component ingests tarballs.
The demo repository is software.caspar.nl.
The demo pull request adds Biopython-1.86-gfbf-2025b.eb.
After ingest:
export EESSI_SITE_SOFTWARE_PREFIX=/cvmfs/software.caspar.nl
source /cvmfs/software.eessi.io/versions/2025.06/init/lmod/bash
module load Biopython/1.86-gfbf-2025b
python -c 'import Bio.motifs; print(Bio.motifs.__path__)'
# .../software.caspar.nl/versions/2025.06/software/linux/x86_64/amd/zen2/...
which python
# /cvmfs/software.eessi.io/versions/2025.06/.../Python/3.13.5-...
The site module is the EESSI interpreter.
It fulfills the entire purpose.
A site ingest does not require EESSI/staging_bundles.
ingest_tarballs.sh lists the bucket, downloads the contents, optionally verifies a signature, calls filesystem-layer/scripts/ingest-tarball.sh, regenerates nested catalogs, and remounts.
Nested catalogs follow the EESSI .cvmfsdirtab pattern.
Each installation contains one catalog.
The Stratum-0 cannot employ the automounter.
software.eessi.io is mounted from fstab when the ingest script requires EESSI’s Lmod to rebuild caches.
Rebuilds on a site repository use the same rebuilds/ directory.
An easystack is the list the bot will build.
The scripts include the --rebuild option.
Removal is a Stratum-0 transaction and an Lmod cache rebuild; a bot comment cannot do it.
Drivers, CUDA and an ABI-compatible MPI¶
Three items are added into the injection tree by a site, even if the remaining site stack resides in the prefix recommended by Approach 1. The runtime includes NVIDIA drivers. The driver is bound to the host kernel. It cannot be distributed in the repository. For EESSI 2025.06 and later the compatibility‑layer linker searches.
/cvmfs/software.eessi.io/versions/<ver>/compat/<os>/<arch>/lib/nvidia
It is a variant symlink itself.
The CernVM-FS config targeted is EESSI_NVIDIA_OVERRIDE_DEFAULT, not EESSI_HOST_INJECTIONS.
# /etc/cvmfs/default.local (or domain.d/eessi.io.local)
EESSI_NVIDIA_OVERRIDE_DEFAULT=/opt/eessi/nvidia
cvmfs_config reload software.eessi.io, then
/cvmfs/software.eessi.io/versions/${EESSI_VERSION}/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh
Re-run after each driver update.
The per-version override EESSI_202506_NVIDIA_OVERRIDE applies when 2023.06 and 2025.06 must not share a symlink set.
In 2023.06 the same script continues to write under host_injections, and EESSI_HOST_INJECTIONS designates that location.
Mixing the two conventions causes a 2025.06 node to obtain a linker search path that points to an empty directory.
The official GPU page states that “ROCm support is not yet available”.
The live 2025.06 catalogs already include gfx* trees.
The page represents the missing component.
A full CUDA SDK, compile time.
The CUDA and cuDNN packages in the repository are runtime‑only; the EULA prohibits redistribution of nvcc.
install_cuda_and_libraries.sh installs the missing components into the injection tree via EasyBuild, restoring symlinks such as
.../software/CUDA/12.1.1/bin/nvcc ->
/cvmfs/software.eessi.io/host_injections/2023.06/software/.../CUDA/12.1.1/bin/nvcc
The installer account is not root.
EasyBuild runs as non-root unless EASYBUILD_ALLOW_USE_AS_ROOT_AND_ACCEPT_CONSEQUENCES is set.
The GPU page recommends changing ownership of the injection directory.
Site MPI. EESSI’s OpenMPI does not know a site fabric.
An ABI‑compatible replacement is placed where the RPATH of the EESSI binaries already points.
The Slingshot-11 write-up places OpenMPI 5.x for 2023.06 on Grace:
/cvmfs/software.eessi.io/host_injections/2023.06/software/linux/aarch64/nvidia/grace/rpath_overrides/OpenMPI/system/lib
The EESSI GROMACS and the EESSI OSU benchmarks retain their module names.
The libraries they resolve at runtime are those provided by the site.
No package above MPI is rebuilt.
That is true only if the replacement is ABI‑compatible with the EESSI OpenMPI that the rest of the tree was linked against.
Lmod hooks constitute the other half of fabric tuning: environment variables at load time rather than a replaced .so.
EESSI’s SitePackage.lua searches for two additional files under host_injections:.
$EESSI_CVMFS_REPO/host_injections/$EESSI_VERSION/.lmod/SitePackage.lua
$EESSI_CVMFS_REPO/host_injections/$EESSI_VERSION/software/$EESSI_OS_TYPE/$EESSI_SOFTWARE_SUBDIR/.lmod/SitePackage.lua
The initial version is architecture-independent.
The subsequent version lacks architecture independence.
Version 2023.06 provides Lmod 8.7.30.
Lmod 8.7.30 cannot register two load hooks.
The site file merges eessi_load_hook with the site function into a single registration.
Lmod 8.7.35 and newer are able to register both.
What a login session has to export¶
The webinar’s last section presented two patterns.
The first pattern uses EESSI’s Lmod.
A file in /etc/profile.d sets EESSI_SITE_SOFTWARE_PREFIX.
The same file sources /cvmfs/software.eessi.io/versions/2025.06/init/lmod/bash.
The second pattern uses the site’s Lmod.
Hábrók’s 01-local_lmod.sh is employed.
export EESSI_SITE_SOFTWARE_PREFIX=/software
export MODULEPATH=/cvmfs/software.eessi.io/init/modules
export LMOD_CACHED_LOADS=yes
export LMOD_SHORT_TIME=86400
The z01_StdEnv.sh sets LMOD_SYSTEM_DEFAULT_MODULES=EESSI/2025.06.
A login loads EESSI and shows /software/versions/2025.06/.../modules/all next to the CernVM-FS tree.
The webinar names EESSI_MODULE_STICKY and EESSI_MODULE_FAMILY_NAME as the other two variables.
These variables make the EESSI module sticky.
They enable coexistence with a second, incompatible site stack.
Licensed software that only some users may run is identified as a poor fit for a site CVMFS repository.
The setting CVMFS_CLAIM_OWNERSHIP=no preserves ownership.
A container can override it, so ownership is not a security boundary.
The webinar proposes keeping those installations on the shared filesystem of Approach 1.
EB-Site-1 — Which prefix, which variable
Four requests. For each, name the approach, the variable that has to be set before any module load, and the one check that says the result is in the site prefix.
A single extra package, this week, on one zen3 partition, no CernVM-FS admin access.
NVIDIA driver libraries on a 2025.06 node after last night’s driver update.
OpenMPI rebuilt against the site Slingshot, consumed by the EESSI GROMACS already on the tree.
Twenty packages, three microarchitectures, a Git history of what was built, same bot comments as EESSI itself.
Solution
Approach 1.
EESSI_SITE_INSTALL=1andEESSI_SITE_SOFTWARE_PREFIXpointing at a writable shared directory, set beforemodule load EESSI. Check$EESSI_SITE_SOFTWARE_PATHends in.../x86_64/amd/zen3and thateb --show-configreports that path asinstallpath.Not a prefix variable.
EESSI_NVIDIA_OVERRIDE_DEFAULTin the CernVM-FS config,cvmfs_config reload, then re-runlink_nvidia_host_libraries.sh. CheckdeviceQueryfromCUDA-Sampleson that node. 2023.06 would have usedEESSI_HOST_INJECTIONSinstead.The replacement libraries go in
host_injections/<ver>/software/linux/<software_subdir>/rpath_overrides/OpenMPI/system/lib(the live Slingshot-11 tree is.../linux/aarch64/nvidia/grace/rpath_overrides/OpenMPI/system/lib). The check islddon an EESSI MPI binary, on the compute node, showing the site.so, plus an OSU run. ABI compatibility is the constraint; a rebuild of GROMACS is the thing this path exists to avoid.Approach 2. A site CernVM-FS repo, a bot instance, easystacks under
easystacks/<that.repo>/<ver>/,EESSI_SITE_SOFTWARE_PREFIXset to the repo root on the clients. Check a loaded site module’s path is under the site repo while its Python (or MPI, or libc) still resolves undersoftware.eessi.io.
EB-Site-2 — 2023.06 or 2025.06
A site config contains only this line, in
/etc/cvmfs/domain.d/eessi.io.local:
EESSI_HOST_INJECTIONS=/shared/eessi-inject
link_nvidia_host_libraries.sh executed last year targeting 2023.06.
Users switched to EESSI/2025.06.
CUDA applications fail to locate libcuda.so.
Identify the cause of the success on 2023.06 and the failure on 2025.06.
Identify the addition to the CernVM-FS config.
Identify the component that is re‑run.
Determine the number of injection trees for two GPU partitions with drivers in different directories.
Determine the location where the difference is expressed.
Solution
2023.06’s linker search path for NVIDIA is under
host_injections, whichEESSI_HOST_INJECTIONSaims. 2025.06 searches/cvmfs/software.eessi.io/versions/2025.06/compat/.../lib/nvidia, a different variant symlink, aimed byEESSI_NVIDIA_OVERRIDE_DEFAULT. The old variable still aims the old tree. The new linker is not looking there.EESSI_NVIDIA_OVERRIDE_DEFAULT=/shared/eessi-inject/nvidia(or a per-versionEESSI_202506_NVIDIA_OVERRIDE),cvmfs_config reload software.eessi.io, then the 2025.06link_nvidia_host_libraries.sh. Last year’s symlinks are not reused.Two
EESSI_NVIDIA_OVERRIDE_DEFAULTtargets, one per GPU partition, thencvmfs_config reloadandlink_nvidia_host_libraries.shon each. 2025.06 drivers live undercompat/.../lib/nvidia. They do not use a secondEESSI_HOST_INJECTIONStree.
What to remember
EESSI_SITE_SOFTWARE_PREFIXis set before the EESSI module loads.EESSI-extendthen writes an architecture-specific prefix and puts it onMODULEPATH.Approach 1 is that prefix on a shared filesystem. Approach 2 is the same bot and the same scripts, aimed at a site CernVM-FS repository. The webinar recommends the owned prefix over stuffing everything into the
host_injectionssymlink.2025.06 aims NVIDIA driver symlinks with
EESSI_NVIDIA_OVERRIDE_DEFAULT. 2023.06 usedEESSI_HOST_INJECTIONS. They are not interchangeable.A site MPI that is ABI-compatible with EESSI’s OpenMPI goes in
rpath_overrides/OpenMPI/system/lib. The modules above MPI do not get rebuilt.