EasyBuild

About

We use a build and installation framework called EasyBuild that connects the software we compile and maintain on the clusters with the module system that makes it available to you.

What you need to know

Toolchains

When we install software, we use pre-defined build environments called toolchains. These are modules that include core compilers and libraries (e.g. GCC, OpenMPI, zlib). We do this for two main reasons. One is to try to keep our build process simpler. The other is so that you can load two different modules for software built with the same toolchain and expect everything to work. The two common toolchains you will interact with are foss and intel. Each of these have module versions corresponding to the year they were built. Toolchain name and version information is appended to the name of a module so it is clear to us and to the module system what should be compatible. An example would be Python/2.7.12-foss-2016b, where the software name is Python, version 2.7.12, built with the foss toolchain version 2016b. The easiest way to see what software a toolchain includes is to load it and then list loaded modules.

[be59@farnam2 ~]$ module load foss/2016b
[be59@farnam2 ~]$ module list

Currently Loaded Modules:
  1) StdEnv                        (S)   7) OpenMPI/1.10.3-GCC-5.4.0-2.26
  2) GCCcore/5.4.0                       8) OpenBLAS/0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.1
  3) binutils/2.26-GCCcore-5.4.0         9) gompi/2016b
  4) GCC/5.4.0-2.26                     10) FFTW/3.3.4-gompi-2016b
  5) numactl/2.0.11-GCC-5.4.0-2.26      11) ScaLAPACK/2.0.2-gompi-2016b-OpenBLAS-0.2.18-LAPACK-3.6.1
  6) hwloc/1.11.3-GCC-5.4.0-2.26        12) foss/2016b

  Where:
   S:  Module is Sticky, requires --force to unload or purge

The takeaway here is that you should try to use modules that match their foss or intel identifiers. If there is a combination of modules that doesn't exist that you'd like to use please email us.

Environment Variables

If you ever want to refer to the directory where the software from a module is stored, you can use the environment variable $EBROOTMODULENAME where modulename is the name of the module in all caps with no spaces. This can be useful for finding the executables, libraries, or readme files that are included with the software:

[be59@farnam2 ~]$ module load SAMtools/1.9-foss-2016b
[be59@farnam2 ~]$ ls $EBROOTSAMTOOLS
bin  easybuild  include  lib  share
[be59@farnam2 ~]$ ls $EBROOTSAMTOOLS/bin
ace2sam        interpolate_sam.pl  md5sum-lite    r2plot.lua   seq_cache_populate.pl  wgsim
blast2sam.pl   maq2sam-long        novo2sam.pl    sam2vcf.pl   soap2sam.pl            wgsim_eval.pl
bowtie2sam.pl  maq2sam-short       plot-bamstats  samtools     varfilter.py           zoom2sam.pl
export2sam.pl  md5fa               psl2sam.pl     samtools.pl  vcfutils.lua