Environment Modules es una herramienta para la administración de diferentes entorno en sistemas Unix o Linux. Un entorno es la configuración necesaria del shell para que una aplicación pueda ejecutarse correctamente en un sistema Unix o Linux si asi lo requiere la aplicación.
Environment Modules permite cargar y descargar módulos dinámicamente con la información necesaria para la configuración, muchas veces esta información son valores variables, path de librerias, comandos del shell, cargar otros modulos, etc.
Lo expuesto anteriormente son las dos ventajas principales de Environment Modules: poder tener varias configuraciones de las aplicaciones para diferentes versiones o casos (con la carga y descarga de módulos) , y la independencia del shell (posee su propios comandos).
Dependencias entre los módulos
Las configuraciones de entornos pueden estar organizadas en diferentes niveles de módulos y entre ellos tener dependencias. O sea se necesita cargar un modulo en particular para cargar otro dependiente del primero.
Por ejemplo para una aplicación que necesita ser compilada en GNU gcc y utiliza bibliotecas externas, primero se cargarían el módulo de compilador GNU y a continuación los módulos de las bibliotecas.
Para mostrar los módulos disponibles utilice el comando
"module avail".
- [usuario@clemente ~]$ module avail
-
- ----------------------------- /opt/modules/archs -----------------------------
- cuda/8 gcc/7 gcc/8
Para cargar una arquitectura se debe utilizar el comando "module load <module>".
- [usuario@clemente ~]$ module load gcc/8.2.0
Una vez cargada una arquitectura podremos ver los nuevos módulos disponibles a nivel de aplicaciones y compiladores
- [usuario@clemente ~]$ module avail
-
- ------------------------- /opt/modules/compiladores-------------------------
- cuda/8 gcc/7 gcc/8.2.0
-
- ----------------------- /opt/modules/gcc/8/bibliotecas ---------------------
- cfitsio/3.450 fftw/3.3.8 hdf5/1.8.12 hypre/2.15.1 zlib/1.2.11
-  
- fftw gsl/2.5 hdf5/1.10.5 openblas/0.3.5
-  
- ------------------------- /opt/modules/gcc/8/herramientas ------------------
- cmake/3.13.4
-  
- ------------------------- /opt/modules/gcc/8/mpi ---------------------------
- openmpi/3.1.3
-
- ------------------------- /opt/modules/gcc/8/sistema -----------------------
- python/2.7.16
-
Para ver que módulos tenemos cargados actualmente en nuestro entorno "module list"
- [usuario@clemente ~]$ module load openmpi/3.1.3
- [usuario@clemente ~]$ module list
-
- Currently Loaded Modulefiles:
- 1) gcc/8.2.0 2) openmpi/3.1.3
Tips: hay módulos que cargan otros módulos
Si se cargan módulos incompatibles, modules avisará
- [usuario@clemente ~]$ module load gcc/7
- [usuario@clemente ~]$ module load gcc/8.2.0
-
- WARNING: gcc/8.2.0 cannot be loaded due to a conflict.
- HINT: Might try "module unload gcc/7" first.
Para descargar un módulo activo utilizamos el comando "module unload <module>" .
Para descargar todos los módulos activos utilizamos el comando "module purge" .
Para ver el contenido de un módulo utilizamos el comando "module display <module>" o "module show <modulo>".
- [usuario@clemente ~]$ module display gcc/7
-
- -----------------------------------------------------------
- /opt/modules/clemente/compiladores/gcc/7:
- module-whatis The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages.
- prepend-path PATH /opt/spack/opt/spack/linux-centos7-x86_64/gcc-4.8.5/gcc-7.2.0-l4hli7sr4wtb5bdzdvgpdwujh4amdkj2/bin
- setenv CC /opt/spack/opt/spack/linux-centos7-x86_64/gcc-4.8.5/gcc-7.2.0-l4hli7sr4wtb5bdzdvgpdwujh4amdkj2/bin/gcc
- setenv FC /opt/spack/opt/spack/linux-centos7-x86_64/gcc-4.8.5/gcc-7.2.0-l4hli7sr4wtb5bdzdvgpdwujh4amdkj2/bin/gfortran
- setenv AR gcc-ar
- setenv CXX g++
- setenv F90 gfortran
- setenv CXXFLAGS -O3 -march=broadwell
- -----------------------------------------------------------
Para ver información que proporciona el programador del módulo "module whait <module>" .
- [usuario@clemente ~]$ module whatis gcc77
-
- ---------------------- /opt/modules/compiladores ----------------------
- gcc/7: The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages.
Si queremos ver una pequeña ayuda de los comando de Environment Modules utilice el comando "module help" .