Skip to content

Incorrect module loads in modules built by users with HMNS, minimal-toolchain, recursive-unload #2162

@akesandgren

Description

@akesandgren

We have the following system setup:

eb --show-config
#
# Current EasyBuild configuration
# (C: command line argument, D: default value, E: environment variable, F: configuration file)
#
buildpath               (F) = /scratch
filter-deps             (F) = pkg-config
git-working-dirs-path   (F) = /afs/hpc2n.umu.se/home/a/ake/Projects/git-repos/easybuild
github-user             (F) = akesandgren
include-easyblocks      (F) = /hpc2n/eb/custom/easyblocks/*.py
installpath             (F) = /hpc2n/eb
job-backend-config      (F) = /hpc2n/eb/gc3pie.slurm.cfg
minimal-toolchains      (F) = True
module-naming-scheme    (F) = HierarchicalMNS
packagepath             (F) = /hpc2n/eb/packages
prefix                  (F) = /hpc2n/eb
recursive-module-unload (F) = True
repositorypath          (F) = /hpc2n/eb/ebfiles_repo
robot-paths             (F) = /afs/hpc2n.umu.se/home/a/ake/Public/easybuild/easyconfigs, /hpc2n/eb/custom/easyconfigs, /hpc2n/eb/ebfiles_repo, /hpc2n/eb/software/Core/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs
sourcepath              (F) = /hpc2n/eb/sources:/pfs/software/sources
subdir-user-modules     (F) = Public/easybuild/modules
tmpdir                  (F) = /scratch

Things work as expected and modules get correctly created.
But when adding the SoftInst module from @geimer on top of this to allow for users to build their own softwares we get incorrectly built modules.

ml SoftInst
eb --show-config
#
# Current EasyBuild configuration
# (C: command line argument, D: default value, E: environment variable, F: configuration file)
#
buildpath               (E) = /scratch/eb-ake
experimental            (E) = True
filter-deps             (F) = pkg-config
git-working-dirs-path   (F) = /afs/hpc2n.umu.se/home/a/ake/Projects/git-repos/easybuild
github-user             (F) = akesandgren
include-easyblocks      (F) = /hpc2n/eb/custom/easyblocks/*.py
installpath             (E) = /home/a/ake/Public/easybuild
job-backend-config      (F) = /hpc2n/eb/gc3pie.slurm.cfg
job-cores               (E) = 24
job-max-walltime        (E) = 4
minimal-toolchains      (F) = True
module-naming-scheme    (F) = HierarchicalMNS
optarch                 (E) = {'GCC': 'march=x86-64 -mmmx -msse3 -mcx16 -mfxsr -mpopcnt -msahf -mtune=generic'}
packagepath             (E) = /home/a/ake/Public/easybuild/packages
prefix                  (E) = /home/a/ake/Public/easybuild
recursive-module-unload (F) = True
repositorypath          (E) = /home/a/ake/Public/easybuild/ebfiles_repo
robot                   (E) = /hpc2n/eb/custom/easyconfigs, /afs/hpc2n.umu.se/home/a/ake/Public/easybuild/easyconfigs, /hpc2n/eb/custom/easyconfigs, /hpc2n/eb/ebfiles_repo, /hpc2n/eb/software/Core/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs
robot-paths             (E) = /hpc2n/eb/custom/easyconfigs, /afs/hpc2n.umu.se/home/a/ake/Public/easybuild/easyconfigs, /hpc2n/eb/custom/easyconfigs, /hpc2n/eb/ebfiles_repo, /hpc2n/eb/software/Core/EasyBuild/3.1.1/lib/python2.7/site-packages/easybuild_easyconfigs-3.1.1-py2.7.egg/easybuild/easyconfigs
sourcepath              (E) = /home/a/ake/Public/easybuild/sources:/hpc2n/eb/sources
subdir-user-modules     (E) = ''
suffix-modules-path     (E) = ''
tmpdir                  (F) = /scratch
zip-logs                (E) = bzip2

With everything else in the chain installed at system level building, as user with SoftInst loaded,

eb x264-20160614-foss-2016b.eb --try-toolchain-version=2017a

the resulting x264 module contains:

~/Public/easybuild/modules/MPI/GCC/6.3.0-2.27/OpenMPI/2.0.2/x264/20160614.lua 
help([[x264 is a free software library and application for encoding video streams into the H.264/MPEG-4
 AVC compression format, and is released under the terms of the GNU GPL. - Homepage: http://www.videolan.org/developers/x264.html]])

whatis([[Description: x264 is a free software library and application for encoding video streams into the H.264/MPEG-4
 AVC compression format, and is released under the terms of the GNU GPL. - Homepage: http://www.videolan.org/developers/x264.html]])

local root = "/home/a/ake/Public/easybuild/software/MPI/GCC/6.3.0-2.27/OpenMPI/2.0.2/x264/20160614"

conflict("x264")

load("GCC/6.3.0-2.27")

load("OpenMPI/2.0.2")

load("OpenBLAS/0.2.19-LAPACK-3.7.0")

load("FFTW/3.3.6")

load("ScaLAPACK/2.0.2-OpenBLAS-0.2.19-LAPACK-3.7.0")

load("Yasm/1.3.0")

prepend_path("CPATH", pathJoin(root, "include"))
prepend_path("LD_LIBRARY_PATH", pathJoin(root, "lib"))
prepend_path("LIBRARY_PATH", pathJoin(root, "lib"))
prepend_path("PATH", pathJoin(root, "bin"))
prepend_path("PKG_CONFIG_PATH", pathJoin(root, "lib/pkgconfig"))
setenv("EBROOTX264", root)
setenv("EBVERSIONX264", "20160614")
setenv("EBDEVELX264", pathJoin(root, "easybuild/MPI-GCC-6.3.0-2.27-OpenMPI-2.0.2-x264-20160614-easybuild-devel"))

-- Built with EasyBuild version 3.1.1

Note the incorrect load of OpenMPI in there.

SoftInst module is:

conflict("SoftInst")

setenv("EASYBUILD_MODULES_TOOL", "Lmod")
setenv("EASYBUILD_ZIP_LOGS", "bzip2")
setenv("EASYBUILD_JOB_CORES", "24")
setenv("EASYBUILD_PREFIX", "/hpc2n/eb")
setenv("EASYBUILD_UMASK", "022")
setenv("EASYBUILD_SET_GID_BIT", "1")
setenv("EASYBUILD_JOB_MAX_WALLTIME", "4")
setenv("EASYBUILD_OPTARCH", "GCC:march=x86-64 -mmmx -msse3 -mcx16 -mfxsr -mpopcnt -msahf -mtune=generic")
setenv("EASYBUILD_ROBOT", "/hpc2n/eb/custom/easyconfigs")
setenv("EASYBUILD_SUFFIX_MODULES_PATH", "")
setenv("EASYBUILD_MODULE_SYNTAX", "Lua")
setenv("EASYBUILD_REPOSITORY", "FileRepository")
setenv("EASYBUILD_MODULE_NAMING_SCHEME", "HierarchicalMNS")
setenv("EASYBUILD_SUBDIR_USER_MODULES", "Public/easybuild/modules")
setenv("EASYBUILD_SOURCEPATH", "/hpc2n/eb/sources")
setenv("EASYBUILD_JOB_BACKEND_CONFIG", "/hpc2n/eb/gc3pie.slurm.cfg")
setenv("EASYBUILD_REPOSITORYPATH", "/hpc2n/eb/ebfiles_repo")
setenv("EASYBUILD_MINIMAL_TOOLCHAINS", "1")
-- setenv("EASYBUILD_HIDE_TOOLCHAINS", "GCCcore,gompi")
setenv("EASYBUILD_INCLUDE_EASYBLOCKS", "/hpc2n/eb/custom/easyblocks/*.py")
setenv("EASYBUILD_JOB_BACKEND", "GC3Pie")
setenv("EASYBUILD_EXPERIMENTAL", "1")
load("EasyBuild/3.1.1")
load("GC3Pie/2.4.2")

setenv("EASYBUILD_BUILDPATH", pathJoin("/scratch", "eb-" .. os.getenv("USER")))
if os.getenv("USER") ~= "admin" then
    userprefix=pathJoin(os.getenv("HOME"), "Public", "easybuild")
    setenv("EASYBUILD_PREFIX", pathJoin(os.getenv("HOME"), "Public", "easybuild"))
    prepend_path("EASYBUILD_SOURCEPATH", pathJoin(userprefix, "sources"))
    setenv("EASYBUILD_SUBDIR_USER_MODULES", "")
    unsetenv("EASYBUILD_REPOSITORYPATH");
    unsetenv("EASYBUILD_SET_GID_BIT")
    unsetenv("EASYBUILD_UMASK")
    load("eb_user/.current")
end

and the eb_user module is:

conflict("eb_user")

prepend_path("PATH", "/hpc2n/eb/software/Core/eb_user/bin")

with the eb command in eb_user/bin being:

cat /hpc2n/eb/software/Core/eb_user/bin/eb 
#!/bin/sh
export MODULEPATH=/hpc2n/eb/modules/all:${MODULEPATH}
${EBROOTEASYBUILD}/bin/eb "$@"

We need to figure this out rather quickly if possible...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions