On 02/07/2021 19:38, Davide Vanzo wrote:
Hello EasyBuilders!

I am trying to configure EasyBuild to allow users to install software locally while using the existing cluster-wide stack (distributed via CVMFS) for dependencies.

Here is the relevant EB configuration on the clients:

allow-loaded-modules  (F) = EasyBuild

detect-loaded-modules (F) = purge

envvars-user-modules  (F) = USER_STACK_ROOT, HOME

installpath           (F) = /home/hpcadmin/EasyBuild

minimal-toolchains    (F) = True

module-depends-on     (F) = True

module-naming-scheme  (F) = HierarchicalMNS

prefix                (F) = /home/hpcadmin/EasyBuild

robot-paths           (F) = <cvmfs_stack_root>/EasyBuild/custom_easyconfigs, <cvmfs_stack_root>/EasyBuild/software/EasyBuild/4.4.0/easybuild/easyconfigs

rpath                 (F) = True

subdir-user-modules   (F) = EasyBuild/modules

The cluster-wide stack root path is indicated above as: cvmfs_stack_root

When a user wants to build and locally install a piece of software and the toolchain is already available in the cluster-wide stack, the expectation is that EB pulls the existing dependencies from the stack and only builds/installs locally the missing dependencies and finally the desired software. The generated local module will then appear in Lmod thanks to the subdir-user-modules option.

When EasyBuild tries to resolve the dependencies, it pulls the list of installed modules from:

  * the paths in MODULEPATH
  * the <installpath>/<subdir_modules> as specified in the EB configuration

In my case this correspond to the following paths:

  * <cvmfs_stack_root>/EasyBuild/modules/all/Core
  * /home/hpcadmin/EasyBuild/modules/all

The problem with this is that EB only considers stack modules in the Core directory and not on the rest of the hierarchical tree (Compiler, MPI), causing the entire toolchain to be re-built locally.

The solution would be to add <cvmfs_stack_root>/EasyBuild/modules/all to MODULEPATH at build time.

What am I missing?

Nothing, that's the correct approach currently.

EasyBuild relies on what we call the "full" module name (Core/GCC/9.3.0 for example, or Compiler/GCC/9.3.0/OpenMPI/4.0.2, where the "short" (user-facing) module names are GCC/9.3.0 and OpenMPI/4.0.2) to check whether modules are already installed in a hierarchy, and there's a good reason for it.

It may be possible to avoid this, but this requires a bit of work to be done in framework, since we probably rely on this in a number of places...

We discussed this recently in the EasyBuild conf call, and we agreed that a short-term easy solution could be to let EasyBuild automatically add <prefix> to $MODULEPATH when it notices <prefix>/Core is in there.

See also https://github.com/easybuilders/easybuild-framework/issues/3703


regards,

Kenneth


Davide

Reply via email to