Hi Joachim,

On 08/03/2017 15:54, Joachim Hein wrote:
Hi Kenneth

Can I ask a simpler question? As you see from the list below, a couple of key modules (widely used) are affected by this. On the other hand our centre is not swamped in user queries about these modules being broken. How severe is that bug? What are the implications? Is it just, when e.g. using a foss toolchain, you are getting the same gcc twice (once as a gcc module and once as a gcccore module)? I assume there was discussion about this on the mailing list, but it sort of bypassed me, and a search in my mailbox doesn’t show anything obvious either.

On the other hand, I have started to install stuff like e.g. cmake in GCCcore to have it in my foss, intel and pgi toolchains (one install fixes three :) ). I am wondering whether the fix will “inhibit” this.

Having the GCCcore loads in those modules is wrong because you can never load those modules without having that GCCcore module loaded already.

The effect of having them there is a mini load storm (e.g. loading OpenMPI causes Lmod to reload (i.e. unload/load) GCCcore, etc.), but only when you are using --recursive-module-unload.

Looking at your module files, it seems you are not using --recursive-module-unload, which explains why you haven't seen any problems yet with this.

In any case, as long as you are not running into problems when loading those modules (either during an EasyBuild run, or interactively "as a user"), there's little to worry about, the installations themselves will not be affected.


Could I get a pointer to where I can read up on this?

The pull request that implements the fix is at https://github.com/hpcugent/easybuild-framework/pull/2140, which includes quite a bit of discussion/details.


regards,

Kenneth


Thanks
   Joachim

On 8 Mar 2017, at 15:23, Joachim Hein <[email protected] <mailto:[email protected]>> wrote:


On 8 Mar 2017, at 15:12, Kenneth Hoste <[email protected] <mailto:[email protected]>> wrote:

Hi Joachim,

On 08/03/2017 14:24, Joachim Hein wrote:
On 7 Mar 2017, at 17:41, Kenneth Hoste <[email protected] <mailto:[email protected]>> wrote:

Dear EasyBuilders,

I'm happy to announce the release of EasyBuild version 3.1.1 [1].
This is, you've guessed it, the best EasyBuild release so far...

This is a minor bugfix/update release. Highlights include:

* bug fix in module generator for hierarchical module naming schemes and the GCC toolchain bundle (GCCcore + binutils)

* if you are using GCC(core) in a hierarchical module naming scheme you should check the module files in the Compiler/GCC/<version> module subtree, and regenerate module files that include a "load GCCcore” statement
Hi Kenneth,

Thanks for raising this so prominently. If I understand this correct, I need to

eb -f --module-only config_name.eb

For all the relevant modules.  Correct?

It is a long list here.

I would be more careful, and check with 'grep' which module files in Compiler/GCC have a load for 'GCCcore’.


Hi Kenneth,

This is a list of the grep procedure on our system

-bash-4.2$ more gcc_modules_for_rebuild.out
4.9.3-2.25/Autoconf/2.69:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/Autoconf/2.69:   module load GCCcore/4.9.3
4.9.3-2.25/Automake/1.15:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/Automake/1.15:   module load GCCcore/4.9.3
4.9.3-2.25/Autotools/20150215:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/Autotools/20150215:   module load GCCcore/4.9.3
4.9.3-2.25/Emacs/24.5:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/Emacs/24.5:   module load GCCcore/4.9.3
4.9.3-2.25/hwloc/1.11.2:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/hwloc/1.11.2:   module load GCCcore/4.9.3
4.9.3-2.25/libtool/2.4.6:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/libtool/2.4.6:   module load GCCcore/4.9.3
4.9.3-2.25/M4/1.4.17:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/M4/1.4.17:   module load GCCcore/4.9.3
4.9.3-2.25/ncurses/6.0:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/ncurses/6.0:   module load GCCcore/4.9.3
4.9.3-2.25/numactl/2.0.11:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/numactl/2.0.11:   module load GCCcore/4.9.3
4.9.3-2.25/OpenBLAS/0.2.15-LAPACK-3.6.0:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/OpenBLAS/0.2.15-LAPACK-3.6.0:   module load GCCcore/4.9.3
4.9.3-2.25/OpenMPI/1.10.2:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/OpenMPI/1.10.2:   module load GCCcore/4.9.3
4.9.3-2.25/OpenMPI/1.10.2~:if { ![ is-loaded GCCcore/4.9.3 ] } {
4.9.3-2.25/OpenMPI/1.10.2~:   module load GCCcore/4.9.3
4.9.3-2.25/Singularity/2.2.1.lua:if not isloaded("GCCcore/4.9.3") then
4.9.3-2.25/Singularity/2.2.1.lua:   load("GCCcore/4.9.3")
5.4.0-2.26/Autoconf/2.69.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/Autoconf/2.69.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/Automake/1.15.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/Automake/1.15.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/Autotools/20150215.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/Autotools/20150215.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/bzip2/1.0.6.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/bzip2/1.0.6.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/CMake/3.6.1.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/CMake/3.6.1.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/CUDA/8.0.44:if { ![ is-loaded GCCcore/5.4.0 ] } {
5.4.0-2.26/CUDA/8.0.44:   module load GCCcore/5.4.0
5.4.0-2.26/CUDA/8.0.44-GCC-5.4.0-2.26.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/CUDA/8.0.44-GCC-5.4.0-2.26.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/CUDA/8.0.44.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/CUDA/8.0.44.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/GMP/6.1.1.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/GMP/6.1.1.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/hwloc/1.11.3:if { ![ is-loaded GCCcore/5.4.0 ] } {
5.4.0-2.26/hwloc/1.11.3:   module load GCCcore/5.4.0
5.4.0-2.26/libffi/3.2.1.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/libffi/3.2.1.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/libtool/2.4.6.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/libtool/2.4.6.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/libxml2/2.9.4.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/libxml2/2.9.4.lua:   load("GCCcore/5.4.0")
5.4.0-2.26/numactl/2.0.11:if { ![ is-loaded GCCcore/5.4.0 ] } {
5.4.0-2.26/numactl/2.0.11:   module load GCCcore/5.4.0
5.4.0-2.26/OpenBLAS/0.2.18-LAPACK-3.6.1:if { ![ is-loaded GCCcore/5.4.0 ] } {
5.4.0-2.26/OpenBLAS/0.2.18-LAPACK-3.6.1:   module load GCCcore/5.4.0
5.4.0-2.26/OpenBLAS/0.2.18-LAPACK-3.6.1-INTERFACE64:if { ![ is-loaded GCCcore/5.4.0 ] } { 5.4.0-2.26/OpenBLAS/0.2.18-LAPACK-3.6.1-INTERFACE64: module load GCCcore/5.4.0
5.4.0-2.26/OpenMPI/1.10.3:if { ![ is-loaded GCCcore/5.4.0 ] } {
5.4.0-2.26/OpenMPI/1.10.3:   module load GCCcore/5.4.0
5.4.0-2.26/OpenMPI/1.10.3~:if { ![ is-loaded GCCcore/5.4.0 ] } {
5.4.0-2.26/OpenMPI/1.10.3~:   module load GCCcore/5.4.0
5.4.0-2.26/XZ/5.2.2.lua:if not isloaded("GCCcore/5.4.0") then
5.4.0-2.26/XZ/5.2.2.lua:   load("GCCcore/5.4.0")
6.2.0-2.27/hwloc/1.11.4:if { ![ is-loaded GCCcore/6.2.0 ] } {
6.2.0-2.27/hwloc/1.11.4:   module load GCCcore/6.2.0
6.2.0-2.27/numactl/2.0.11:if { ![ is-loaded GCCcore/6.2.0 ] } {
6.2.0-2.27/numactl/2.0.11:   module load GCCcore/6.2.0
6.2.0-2.27/OpenMPI/2.0.1:if { ![ is-loaded GCCcore/6.2.0 ] } {
6.2.0-2.27/OpenMPI/2.0.1:   module load GCCcore/6.2.0
6.3.0-2.27/hwloc/1.11.5.lua:if not isloaded("GCCcore/6.3.0") then
6.3.0-2.27/hwloc/1.11.5.lua:   load("GCCcore/6.3.0")
6.3.0-2.27/numactl/2.0.11.lua:if not isloaded("GCCcore/6.3.0") then
6.3.0-2.27/numactl/2.0.11.lua:   load("GCCcore/6.3.0")
6.3.0-2.27/OpenBLAS/0.2.19-LAPACK-3.7.0.lua:if not isloaded("GCCcore/6.3.0") then
6.3.0-2.27/OpenBLAS/0.2.19-LAPACK-3.7.0.lua:   load("GCCcore/6.3.0")
6.3.0-2.27/OpenMPI/2.0.2.lua:if not isloaded("GCCcore/6.3.0") then
6.3.0-2.27/OpenMPI/2.0.2.lua:   load("GCCcore/6.3.0")




--module-only is indeed useful to regenerate the affected modules, but it needs to be used with care, it's not 100% perfect yet (some 'setenv' or 'prepend_path' statement may be missing or contain incorrect values in some cases, or the easyblock used for regenerating the module file may crash).

Not sure I understand this. Are you suggesting, I should do a full build of all the module on the list?



So, back up the existing module files first, and then do a 'diff' after regenerating the modules that include a "load GCCcore" to make sure nothing is missing in the regenerated module file.


Hmm, that requires one understands these modules and what needs to be there. T o be honnest unless I hit issues, I take a fair amount of Easybuild on trust (and complain here if stuff breaks).

If you notice anything strange, please let us know.


No worries - you know me, that I will do this.

Warm  regards
   Joachim

Also, if you could share a list of module files affected by this bug in your setup, that would be nice.


regards,

Kenneth


Thanks and best wishes
   Joachim

* bug fix in packaging support with FPM where unexpected characters in the software description caused problems

* patch for XZ 5.2.2 to avoid breaking the 'rpm' command when the XZ module is loaded

* ensure that the right ncurses dependency is picked up in the CMake easyconfig to get a working 'ccmake'

* updates to easyblocks CGAL, impi, imkl, MCR, NWChem and Qt for recent versions of these software packages

* easyconfig files for the new iomkl/2017a and intel/2017.02 compiler toolchains

   * fixed source URLS for various software packages

* lots of style fixes in existing easyconfig files (in order to enable automatic style checking in easyconfig pull requests in the near future)

   * support for 16 new software packages, incl. Caffe

* updated easyconfigs for binutils 2.28, NWChem 6.6, matplotlib 2.0.0, VTK 7.1.0, etc.

This brings the total number of supported software packages to 1,168 [2]! A detailed overview of all changes is available in the release notes [3].

Thanks to everyone who contributed to this release in one way or another!


To upgrade to EasyBuild v3.1.1, there are several options, see [4].
Two particularly easy options include:

* eb --install-latest-eb-release # requires EasyBuild v2.9.0 or more recent

* eb --from-pr 4266 # use easyconfig from PR #4266 [5]



Enjoy!

regards,

Kenneth (a.k.a. boegel)
EasyBuild release manager


[1] https://pypi.python.org/pypi/easybuild/3.1.1
[2] http://easybuild.readthedocs.io/en/latest/version-specific/Supported_software.html
[3] http://easybuild.readthedocs.io/en/latest/Release_notes.html
[4] http://easybuild.readthedocs.io/en/latest/Installation.html#updating-an-existing-easybuild-installation
[5] https://github.com/hpcugent/easybuild-easyconfigs/pull/4266/files





Reply via email to