Four EasyBuild 5 surfaces the earlier pages skipped¶
Four surfaces the earlier pages skipped. Each one is a new object, not a flag on an old one.¶
Four EasyBuild 5 surfaces the earlier pages skipped.¶
Four EasyBuild 5 surfaces. An install lock is not a Resolvo lock. A Dataset is a module whose payload is data.¶
Questions
What does an EasyBuild install lock prevent, and how is it not a Resolvo lock?
When does
--bwrapmove bytes, and when does the namespace fail?What does a
Dataseteasyconfig install that a software easyconfig does not?
What you will be able to do
Name the directory EasyBuild uses for install locks, and the flag that ignores them.
Say what
EBPYTHONPREFIXESis for, and what a 5.3 entry point changes about a Python module.Install a dataset as a module and depend on it from a software easyconfig, naming the two path variables that keep data off the software prefix.
Before this page
eb-stack ports a recipe and bumps one: Resolvo locks. The locks on this page are files on disk during
eb.Languages that bring their own package manager: Python extensions.
EBPYTHONPREFIXESis how a second prefix is visible.The isolation policy: the build’s environment.
--bwrapis a later isolation.
Four EasyBuild 5 surfaces extend the machinery of chapters 13 to 19.
They are not part of eb-stack.
They explain a campaign finding of class install or runtime,
and can name the framework rather than the recipe.
Install locks are not solver locks¶
Two eb processes installing the same easyconfig into the same prefix corrupt the tree.
EasyBuild writes a lock file for the duration of an installation.
--locks-dir sets the directory.
The default is a .locks subdirectory of the software installation prefix.
Documentation says the lock directory should be on a shared filesystem.
--ignore-locks is the escape that two operators will reach for.
A site should not leave --ignore-locks on.
That lock is a mutex.
It names no versions.
It solves no SAT instance. eb-stack ports a recipe and bumps one’s locks/default.lock.json as a Resolvo assignment.
Mixing the words in a status report escalates a “lock wait” as a solver bug.
--wait-on-lock-* controls whether a second process waits or errors.
The filetools API is create_lock, check_lock, remove_lock.
A stale lock after a killed eb is an operator problem on the shared filesystem, not a recipe problem.
–bwrap installs to a temporary namespace¶
--bwrap (EasyBuild 5.3, improved in 5.4.0 for read‑only filesystems and --subdir-{modules,software}) builds and installs within a bubblewrap namespace.
--bwrap then transfers the result to the final prefix.
--bwrap-installpath is the temporary location.
The goal is a prefix that other users must not see while it is partially written.
The goal includes a CernVM-FS or similar read‑only view that cannot be written in place.
The overlayfs work in 5.4.0 enables EESSI‑style writable‑over‑read‑only installations to use that overlay.
RPATH wrappers still fail when /tmp is mounted with noexec
(#4910).
That is independent of --bwrap. The wrapper scripts need an
executable temporary directory. --tmpdir on an exec filesystem
is the fix, not a bwrap flag.
The isolation policy defines the build’s environment.
--bwrap is the namespace isolation EasyBuild 5 ships. It needs
user namespaces and a bwrap binary; without those the flag fails
before any recipe runs.
EBPYTHONPREFIXES and entry points¶
EasyBuild allows a Python installation to see packages in another prefix via EBPYTHONPREFIXES.
A user or site prefix on top of EESSI can contribute .so and .py files without rebuilding CPython.
A module that only wraps a site wheel can become loadable.
EasyBuild 5.3 added entry-point handling.
A console script installed into an extension prefix appears on PATH when the extension’s module is loaded.
A campaign verifies python -c 'import pkg'.
A campaign that never runs the console script will not encounter a missing entry point.
binary_verified in a campaign finding is a typed failure.
A log must name the command the user will type.
Dataset is a module whose payload is data¶
Datasets are added as modules in EasyBuild 5.1.0.
The origin is Sam Moors’ EUM’24 talk.
The easyconfig uses data_sources instead of, or in addition to, sources.
easyblock = 'Dataset'
name = 'RFdiffusion-models'
version = '1.1.0'
toolchain = SYSTEM
source_urls = ['https://example.com/data/']
data_sources = ['example-data-%(version)s.tar.gz']
checksums = ['d3adb33f...']
The Dataset easyblock inherits from Binary.
No compile step runs.
The install_step extracts into the data prefix.
The default value of extract_sources is true.
The cleanup_data_sources deletes fetched archives after install.
From 5.4.0, Dataset can store extracted files in a SHA256
content-addressed object store and reuse a readable existing object.
Reuse is is_readable() on that hash path. It does not re-hash the
stored object. A writable sibling under the object-storage root is
trusted as if EasyBuild wrote it.
The object_storage_ignore_dirs lists directories to keep out of that
store. The . denotes the whole installdir.
Two path variables keep data off the software prefix.
export EASYBUILD_SOURCEPATH_DATA=/sources/data
export EASYBUILD_INSTALLPATH_DATA=/data
eb RFdiffusion-models-1.1.0.eb
module load RFdiffusion-models/1.1.0
When installpath-data is unset, installpath combined with subdir-data (default data) is used.
The module may appear in a software easyconfig’s dependencies list.
A GROMACS that requires a weight file depends on the dataset module in the same way it depends on FFTW.
The robot resolves the dependency.
The payload consists of bytes, not a binary.
EB-Five-1 — Which lock, which prefix
Four incidents. Name the EasyBuild 5 surface, and the first check.
Two
ebprocesses on a shared prefix, same easyconfig, one dies with a lock error, the other is still ininstall_step.--bwrapon a node where/tmpisnoexec; the log talks about RPATH wrappers.A user prefix installed with
EESSI-extend;import numpyworks from the EESSI CPython; thef2pyconsole script is not onPATH.A two-gigabyte weight tarball landed under
.../software/linux/x86_64/amd/zen3/software/next to GROMACS.
Solution
Install locks. Check
--locks-dir(default.locksunder the software prefix) and whether the surviving process still has the mutex. Not a Resolvo lock. Do not pass--ignore-locksto “fix” it.--bwrapplus #4910. Check the/tmpmount options. The wrapper binaries needexec.Entry points /
EBPYTHONPREFIXES.importfinding the package does not put a console script onPATH. Verify the command the user types, in addition to the import.A
Dataseteasyconfig was not used, orEASYBUILD_INSTALLPATH_DATAwas unset and the defaultsubdir-datawas not what the site expected. Weights are data. They get a data prefix and a module, not a software prefix.
What to remember
An install lock is a mutex on a shared prefix. A Resolvo lock is an assignment of versions. They share a word and nothing else.
--bwrapinstalls in a namespace and then moves./tmpnoexecbreaks the RPATH wrappers.EBPYTHONPREFIXESmakes a second Python prefix visible. Entry points are a 5.3 addition; an import test does not cover them.A
Datasetmodule is data.EASYBUILD_INSTALLPATH_DATAkeeps it off the software prefix. Software depends on it like any other module.