-
Notifications
You must be signed in to change notification settings - Fork 81
Easyconfig that can extend EESSI #371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
trz42
merged 25 commits into
EESSI:2023.06-software.eessi.io
from
ocaisa:eessi_extend_module
May 7, 2024
Merged
Changes from all commits
Commits
Show all changes
25 commits
Select commit
Hold shift + click to select a range
9166400
Easyconfig that can extend EESSI
ocaisa f1a0e71
Add extension of EESSI to MODULEPATH
ocaisa 98f20cd
Allow for both site and user extensions to EESSI
ocaisa 60cb5dc
Update EESSI-extend-2023.06-easybuild.eb
ocaisa 8fe3892
Escape hyphen for gsub
ocaisa 8593e59
No hyphen any more so no need for lua escaping
ocaisa 4126154
Merge remote-tracking branch 'upstream/2023.06-software.eessi.io' int…
ocaisa a8fc681
Merge branch 'eessi_extend_module' of github.com:ocaisa/software-laye…
ocaisa 8e976c6
Make the hooks part of the init dir
ocaisa dbe6d6b
Actually install the EESSI extension module
ocaisa 5ca2c4a
Copy over hooks along with initi files
ocaisa 148534a
Update install_scripts.sh
ocaisa 4ad271e
Update EESSI-extend-2023.06-easybuild.eb
ocaisa bde1b72
Allow for default site installations, and configurable project and/or…
ocaisa 82f58b2
Fix conditions
ocaisa 4ebfc20
Fix condition
ocaisa 5c5899b
Messages only on module load
ocaisa 8122bbd
fix location of settings
ocaisa 04c6f0e
Always check for dir existence when using EESSI_USER_INSTALL
ocaisa cc91f34
fix tiny typo
trz42 38a0581
use eessi.io/docs and system easystack file
truib 0ff2334
Update EESSI-extend-2023.06-easybuild.eb
ocaisa 39dddf6
Update init/bash
casparvl 500b1de
Update init/bash
casparvl 999cbd3
relax check or tarball is not created unless also software was built
truib File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,167 @@ | ||
| easyblock = 'Bundle' | ||
|
|
||
| name = 'EESSI-extend' | ||
| version = '2023.06' | ||
| # May have different ways to extend EESSI in future (manually, other tools,...) | ||
| versionsuffix = '-easybuild' | ||
|
|
||
| homepage = 'https://eessi.io/docs/' | ||
|
|
||
| description = """ | ||
| The goal of the European Environment for Scientific Software Installations | ||
| (EESSI, pronounced as "easy") is to build a common stack of scientific | ||
| software installations for HPC systems and beyond, including laptops, | ||
| personal workstations and cloud infrastructure. | ||
|
|
||
| This module allows you to extend EESSI using the same configuration for | ||
| EasyBuild as EESSI itself uses. A number of environment variables control the | ||
| behaviour of the module: | ||
| - EESSI_USER_INSTALL can be set to a location to install modules for use by | ||
| the user only. The location must already exist on the filesystem. | ||
| - EESSI_PROJECT_INSTALL can be set to a location to install modules for use by | ||
| a project. The location must already exist on the filesystem and you should | ||
| ensure that the location has the correct Linux group and the SGID permission | ||
| is set on that directory (`chmod g+s $EESSI_PROJECT_INSTALL`) so that all | ||
| members of the group have permission to read and write installations. | ||
| - EESSI_SITE_INSTALL is either defined or not and cannot be used with another | ||
| environment variable. A site installation is done in a defined location and | ||
| any installations there are (by default) world readable. | ||
| - EESSI_CVMFS_INSTALL is either defined or not and cannot be used with another | ||
| environment variable. A CVMFS installation targets a defined location which | ||
| will be ingested into CVMFS and is only useful for CVMFS administrators. | ||
| - If none of the environment variables above are defined, an EESSI_USER_INSTALL | ||
| is assumed with a value of $HOME/EESSI | ||
| If both EESSI_USER_INSTALL and EESSI_PROJECT_INSTALL are defined, both sets of | ||
| installations are exposed, but new installations are created as user | ||
| installations. | ||
| """ | ||
|
|
||
| toolchain = SYSTEM | ||
|
|
||
| # All the dependencies we filter in EESSI | ||
| local_deps_to_filter = "Autoconf,Automake,Autotools,binutils,bzip2,DBus,flex,gettext,gperf,help2man,intltool,libreadline,libtool,M4,makeinfo,ncurses,util-linux,XZ,zlib" | ||
| local_arch_specific_deps_to_filter = {'aarch64': ',yasm', 'x86_64': ''} | ||
| local_deps_to_filter += local_arch_specific_deps_to_filter[ARCH] | ||
|
|
||
| # Set the universal EasyBuild variables | ||
| modextravars = { | ||
| 'EASYBUILD_FILTER_DEPS': local_deps_to_filter, | ||
| 'EASYBUILD_IGNORE_OSDEPS': '1', | ||
| 'EASYBUILD_DEBUG': '1', | ||
| 'EASYBUILD_TRACE': '1', | ||
| 'EASYBUILD_ZIP_LOGS': 'bzip2', | ||
| 'EASYBUILD_RPATH': '1', | ||
| 'EASYBUILD_FILTER_ENV_VARS': 'LD_LIBRARY_PATH', | ||
| 'EASYBUILD_READ_ONLY_INSTALLDIR': '1', | ||
| 'EASYBUILD_MODULE_EXTENSIONS': '1', | ||
| 'EASYBUILD_EXPERIMENTAL': '1', | ||
| } | ||
|
|
||
| # Need a few other variables, but they are more dynamic | ||
| # EASYBUILD_SYSROOT=${EPREFIX} | ||
| # EASYBUILD_PREFIX=${WORKDIR}/easybuild | ||
| # EASYBUILD_HOOKS=${EESSI_PREFIX}/init/easybuild/eb_hooks.py | ||
| # EASYBUILD_INSTALLPATH=${EESSI_PREFIX}/software/${EESSI_OS_TYPE}/${EESSI_SOFTWARE_SUBDIR} | ||
| # EASYBUILD_SOURCEPATH=${WORKDIR}/easybuild/sources:${EESSI_SOURCEPATH} | ||
| # | ||
| # And also some optional ones based on the kind of installation | ||
| # EASYBUILD_SET_GID_BIT | ||
| # EASYBUILD_GROUP_WRITABLE_INSTALLDIR | ||
| # EASYBUILD_UMASK | ||
| # EASYBUILD_STICKY_BIT | ||
| modluafooter = """ | ||
| if (mode() == "load") then | ||
| -- Use a working directory for temporary build files | ||
| if (os.getenv("WORKING_DIR") == nil) then | ||
| LmodMessage("-- Using /tmp/$USER as a temporary working directory for installations, you can override this by setting the environment variable WORKING_DIR and reloading the module (e.g., /dev/shm is a common option)") | ||
| end | ||
| end | ||
| working_dir = os.getenv("WORKING_DIR") or pathJoin("/tmp", os.getenv("USER")) | ||
| -- Gather the EPREFIX to use as a sysroot | ||
| sysroot = os.getenv("EESSI_EPREFIX") | ||
| -- Use an installation prefix that we _should_ have write access to | ||
| if (os.getenv("EESSI_CVMFS_INSTALL") ~= nil) then | ||
| -- Make sure no other EESSI install environment variables are set | ||
| if ((os.getenv("EESSI_SITE_INSTALL") ~= nil) or (os.getenv("EESSI_PROJECT_INSTALL") ~= nil) or (os.getenv("EESSI_USER_INSTALL") ~= nil)) then | ||
| LmodError("You cannot use EESSI_CVMFS_INSTALL in combination with any other EESSI_*_INSTALL environment variables") | ||
| end | ||
| eessi_cvmfs_install = true | ||
| easybuild_installpath = os.getenv("EESSI_SOFTWARE_PATH") | ||
| elseif (os.getenv("EESSI_SITE_INSTALL") ~= nil) then | ||
| -- Make sure no other EESSI install environment variables are set | ||
| if ((os.getenv("EESSI_PROJECT_INSTALL") ~= nil) or (os.getenv("EESSI_USER_INSTALL") ~= nil)) then | ||
| LmodError("You cannot use EESSI_SITE_INSTALL in combination with any other EESSI_*_INSTALL environment variables") | ||
| end | ||
| easybuild_installpath = string.gsub(os.getenv("EESSI_SOFTWARE_PATH"), 'versions', 'host_injections') | ||
| else | ||
| -- Deal with user and project installs | ||
| project_install = os.getenv("EESSI_PROJECT_INSTALL") | ||
| project_modulepath = nil | ||
| if (project_install ~= nil) then | ||
| -- Check the folder exists | ||
| if not isDir(project_install) then | ||
| LmodError("The location of EESSI_PROJECT_INSTALL (" .. project_install .. ") does not exist or is not a folder") | ||
| end | ||
| if (mode() == "load") then | ||
| LmodMessage("Configuring for use of EESSI_PROJECT_INSTALL under " .. project_install) | ||
| end | ||
| easybuild_installpath = string.gsub(os.getenv("EESSI_SOFTWARE_PATH"), os.getenv("EESSI_CVMFS_REPO"), project_install) | ||
| project_modulepath = pathJoin(easybuild_installpath, 'modules', 'all') | ||
| end | ||
| user_install = os.getenv("EESSI_USER_INSTALL") | ||
| user_modulepath = nil | ||
| if (user_install ~= nil) then | ||
| -- Check the folder exists | ||
| if not isDir(user_install) then | ||
| LmodError("The location of EESSI_USER_INSTALL (" .. user_install .. ") does not exist or is not a folder") | ||
| end | ||
| elseif (user_install == nil) and (project_install == nil) then | ||
| -- No need to check for existence when we use a HOME subdir | ||
| user_install = pathJoin(os.getenv("HOME"), "eessi") | ||
| end | ||
| if (user_install ~= nil) then | ||
| if (mode() == "load") then | ||
| LmodMessage("Configuring for use of EESSI_USER_INSTALL under " .. user_install) | ||
| end | ||
| easybuild_installpath = string.gsub(os.getenv("EESSI_SOFTWARE_PATH"), os.getenv("EESSI_CVMFS_REPO"), user_install) | ||
| user_modulepath = pathJoin(easybuild_installpath, 'modules', 'all') | ||
| end | ||
| end | ||
| if (mode() == "load") then | ||
| LmodMessage("-- To create installations for EESSI, you _must_ have write permissions to " .. easybuild_installpath) | ||
| -- Advise them to reuse sources | ||
| if (os.getenv("EASYBUILD_SOURCEPATH") == nil) then | ||
| LmodMessage("-- You may wish to configure a sources directory for EasyBuild (for example, via setting the environment variable EASYBUILD_SOURCEPATH) to allow you to reuse existing sources for packages.") | ||
| end | ||
| end | ||
| -- Set the relevant universal environment variables for EasyBuild | ||
| setenv ("EASYBUILD_SYSROOT", sysroot) | ||
| setenv ("EASYBUILD_PREFIX", pathJoin(working_dir, "easybuild")) | ||
| setenv ("EASYBUILD_INSTALLPATH", easybuild_installpath) | ||
| setenv ("EASYBUILD_HOOKS", pathJoin(os.getenv("EESSI_PREFIX"), "init", "easybuild", "eb_hooks.py")) | ||
| setenv ("EASYBUILD_UMASK", "002") | ||
|
|
||
| -- Set all related environment variables if we have project or user installations (including extending MODULEPATH) | ||
| if (user_modulepath ~= nil) then | ||
| -- Use a more restrictive umask for this case | ||
| setenv ("EASYBUILD_UMASK", "022") | ||
| setenv ("EASYBUILD_STICKY_BIT", "1") | ||
| -- configure MODULEPATH | ||
| if (project_modulepath ~= nil) then | ||
| prepend_path("MODULEPATH", project_modulepath) | ||
| end | ||
| prepend_path("MODULEPATH", user_modulepath) | ||
| elseif (project_modulepath ~= nil) then | ||
| setenv ("EASYBUILD_SET_GID_BIT", "1") | ||
| setenv ("EASYBUILD_GROUP_WRITABLE_INSTALLDIR", "1") | ||
| setenv ("EASYBUILD_STICKY_BIT", "0") | ||
| -- configure MODULEPATH | ||
| prepend_path("MODULEPATH", project_modulepath) | ||
| end | ||
| -- Make sure EasyBuild itself is loaded | ||
| if not ( isloaded("EasyBuild") ) then | ||
| load("EasyBuild") | ||
| end | ||
| """ | ||
|
|
||
| moduleclass = 'devel' | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2,3 +2,4 @@ easyconfigs: | |
| - EasyBuild-4.9.1.eb: | ||
| options: | ||
| from-pr: 20299 | ||
| - EESSI-extend-2023.06-easybuild.eb | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@akesandgren What do you think of this? Basically this means you can have site installations, project installations and user installations. Project and user installations are not visible without loading the module but their location can be configured by the user