HenrikBengtsson / CBI-software

A Scientific Software Stack for HPC (CentOS oriented)
https://wynton.ucsf.edu/hpc/software/software-repositories.html
5 stars 2 forks source link

Set default version and hide versions on some Linux distributions #97

Open HenrikBengtsson opened 10 months ago

HenrikBengtsson commented 10 months ago

Use a MODULERC file to hide modules, hide specific versions, or set the default version, conditioned on which Linux distribution is used, e.g. centos7 or rocky8.

For example, OpenJDK 17 does not exist on CentOS 7, so there openjdk/11 should be the default, whereas on Rocky 8, openjdk/17 should be default. So, according to https://lmod.readthedocs.io/en/latest/093_modulerc.html#modulerc-label, I think one can do something like:

if os.getenv("_LINUX_DISTRO_") == "centos7" then
    module_version("openjdk/11", "default")
    hide_version("openjdk/17")
end

to make that the default version on CentOS 7 and also hide openjdk/17.

HenrikBengtsson commented 10 months ago

Setting the default version via module_version("foo/1.2.3", default") should be done in a .modulerc.lua file located in the foo/ folder, cf. https://lmod.readthedocs.io/en/latest/060_locating.html#marking-a-version-as-default. It does not work in the parent folder.

For example, I've verified that:

$ cat /path/to/openjdk/.modulerc.lua
if os.getenv("_LINUX_DISTRO_") == "centos7" then
    module_version("openjdk/11", "default")
end

will make openjdk/11 the default on CentOS 7, but otherwise not.

HenrikBengtsson commented 10 months ago

Hiding a specific versions works by putting a .modulerc.lua file anywhere in the "module tree", e.g.

$ cat /path/to/CBI/.modulerc.lua
if os.getenv("_LINUX_DISTRO_") == "rocky8" then
  hide_version("scl-devtoolset/4")
  hide_version("scl-devtoolset/7")
  hide_version("scl-devtoolset/8")
  hide_version("scl-devtoolset/9")
  hide_version("scl-devtoolset/10")
  hide_version("scl-devtoolset/11")
end

will hide all scl-devtoolset versions on Rocky 8. I've verified this.

I've also verified that it does not work to hide all versions at once using, say, hide_version("scl-devtoolset"), hide_version("scl-devtoolset/"), or similar.