easybuilders / easybuild-framework

EasyBuild is a software installation framework in Python that allows you to install software in a structured and robust way.
https://easybuild.io
GNU General Public License v2.0
148 stars 201 forks source link

No checking for conflicting dependencies #1241

Open ocaisa opened 9 years ago

ocaisa commented 9 years ago

EB currently doesn't check if something is being installed that has a conflicting set of dependencies. With tcl modules this isn't a problem because the module command would not load the conflict, triggering an error. Lmod however swaps the module and the software will install.

See below for a conflict between implicit and explicit dependencies:

-bash-4.1$ eb --dry-run netCDF4-python-1.1.3-intel-para-2014.11-Python-2.7.9.eb
== temporary log file in case of crash /tmp/eb-WfmnYs/easybuild-3FTUys.log
Dry run: printing build status of easyconfigs and dependencies
 * [x] /usr/local/software/juropatest/eb_repo/binutils/binutils-2.24.eb (module: Core | binutils/2.24)
 * [x] /usr/local/software/juropatest/eb_repo/icc/icc-2015.0.090.eb (module: Core | icc/2015.0.090)
 * [x] /usr/local/software/juropatest/eb_repo/ifort/ifort-2015.0.090.eb (module: Core | ifort/2015.0.090)
 * [x] /usr/local/software/juropatest/eb_repo/iccifort/iccifort-2015.0.090.eb (module: Core | iccifort/2015.0.090)
 * [x] /usr/local/software/juropatest/eb_repo/popt/popt-1.14-iccifort-2015.0.090.eb (module: Compiler/intel/2015.0.090 | popt/1.14)
 * [x] /usr/local/software/juropatest/eb_repo/pscom/pscom-5.0.44-1-iccifort-2015.0.090.eb (module: Compiler/intel/2015.0.090 | pscom/5.0.44-1)
 * [x] /usr/local/software/juropatest/eb_repo/psmpi/psmpi-5.1.0-1-iccifort-2015.0.090.eb (module: Compiler/intel/2015.0.090 | psmpi/5.1.0-1)
 * [x] /usr/local/software/juropatest/eb_repo/ipsmpi/ipsmpi-2014.11.eb (module: Core | ipsmpi/2014.11)
 * [x] /usr/local/software/juropatest/eb_repo/imkl/imkl-11.2.0.090-ipsmpi-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | imkl/11.2.0.090)
 * [x] /usr/local/software/juropatest/eb_repo/intel-para/intel-para-2014.11.eb (module: Core | intel-para/2014.11)
 * [x] /usr/local/software/juropatest/eb_repo/Szip/Szip-2.1-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | Szip/2.1)
 * [x] /usr/local/software/juropatest/eb_repo/ncurses/ncurses-5.9-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | ncurses/5.9)
 * [x] /usr/local/software/juropatest/eb_repo/flex/flex-2.5.37-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | flex/2.5.37)
 * [x] /usr/local/software/juropatest/eb_repo/bzip2/bzip2-1.0.6-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | bzip2/1.0.6)
 * [x] /usr/local/software/juropatest/eb_repo/zlib/zlib-1.2.8-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | zlib/1.2.8)
 * [x] /usr/local/software/juropatest/eb_repo/libreadline/libreadline-6.3-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | libreadline/6.3)
 * [x] /usr/local/software/juropatest/eb_repo/HDF5/HDF5-1.8.10-intel-para-2014.11-gpfs.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | HDF5/1.8.10-gpfs)
 * [x] /usr/local/software/juropatest/eb_repo/Python/Python-2.7.9-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | Python/2.7.9)
 * [x] /usr/local/software/juropatest/eb_repo/HDF5/HDF5-1.8.14-intel-para-2014.11-gpfs.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | HDF5/1.8.14-gpfs)
 * [x] /usr/local/software/juropatest/eb_repo/Cython/Cython-0.22-intel-para-2014.11-Python-2.7.9.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | Cython/0.22-Python-2.7.9)
 * [x] /usr/local/software/juropatest/eb_repo/M4/M4-1.4.16-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | M4/1.4.16)
 * [x] /usr/local/software/juropatest/eb_repo/Bison/Bison-2.6.5-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | Bison/2.6.5)
 * [x] /usr/local/software/juropatest/eb_repo/Doxygen/Doxygen-1.8.2-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | Doxygen/1.8.2)
 * [x] /usr/local/software/juropatest/eb_repo/netCDF/netCDF-4.2.1.1-intel-para-2014.11.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | netCDF/4.2.1.1)
 * [x] /usr/local/software/juropatest/eb_repo/netCDF4-python/netCDF4-python-1.1.3-intel-para-2014.11-Python-2.7.9.eb (module: MPI/intel/2015.0.090/psmpi/5.1.0-1 | netCDF4-python/1.1.3-Python-2.7.9)
== temporary log file /tmp/eb-WfmnYs/easybuild-3FTUys.log has been removed.
== temporary directory /tmp/eb-WfmnYs has been removed.

Notice the two HDF5 dependencies!! One of these is explicit, the other implicit.

ocaisa commented 9 years ago

This could be fixed by TACC/Lmod#48 being set during the build process

ocaisa commented 9 years ago

Using that potential fix didn't seem to have any impact, flawed config still installed.

boegel commented 9 years ago

@ocaisa: you had $LMOD_DISABLE_SAME_NAME_AUTOSWAP defined, yet EB still succeeds in installing something that depends on two different HDF5 versions?

Which version of Lmod are you using?

ocaisa commented 9 years ago

I made sure I was using 5.9. When I tried to load a module directly afterwards it complained as expected because the toolchain was loaded already (so failed to reload)

boegel commented 9 years ago

Hmm, that's weird.

Anyway, this needs a pure EB solution, without relying on the modules tools to detect conflicts (since Lmod doesn't care).