Módulos del Entorno

Introducción

Cuando se tienen varios programas que cumplen la misma función (por ejemplo, servidores SMTP como sendmail, exim y postfix; o servidores de impresión como lprng y cups), es habitual utilizar alternativas. Las alternativas permiten tener instalados simultáneamente varios tipos de software que cumplen la misma función y que comandos como mail y lpr apunten a las versiones deseadas.

Sin embargo, cuando hay múltiples variantes que cada una sirve las necesidades de algún usuario y por tanto debe estar disponible simultáneamente por los usuarios, las alternativas del sistema simplemente no es suficiente ya que es por todo el sistema. Esto ha sido realmente en supercomputación y clúster para eones, y múltiples implementaciones de una solución ha sido desarrollada: módulos de entorno y Lmod. Actualmente Fedora emplea esto primariamente para manipular interruptores entre diferentes implementaciones de MPI.

Los módulos de entorno también son útiles cuando un paquete desea instalar binarios que usan nombres comunes y podrían generar conflictos con el archivo /usr/bin o contaminarlo. Es necesario cargar un módulo de entorno antes de poder usar esos programas.

Uso de módulos de entorno

Para ver los módulos disponibles, ejecute $ module avail. Para cargar un módulo, ejecute, por ejemplo, $ module load mpi/openmpi-x86_64. Para descargar un módulo, ejecute, por ejemplo, $module unload mpi/openmpi-x86_64.

La documentación actual para el comando del módulo está disponible aquí o con man module.

Creación de módulos de entorno

Para instalar un módulo de entorno, coloque un archivo de módulo en %{_modulesdir}, el cual evaluaría /usr/share/modulefiles. Esta macro está disponible en Fedora y EPEL 7+. El directorio /usr/share/Modules/modulefiles está para utilizarse solo para módulos internos de environment-modules. /etc/modulefiles está disponible para el uso de administrador del sistema local.

Los archivos del módulo son texto simple con sintaxis tcl opcional, por ejemplo, un módulo de entorno para OpenMPI de 64-bit mpi/openmpi-x86_64:

#%Module 1.0
#
# Módulo OpenMPI para utilizar con el paquete 'environment-modules':
#
conflict                mpi
prepend-path            PATH            /usr/lib64/openmpi/bin
prepend-path            LD_LIBRARY_PATH /usr/lib64/openmpi/lib
prepend-path            PYTHONPATH      /usr/lib64/python2.7/site-packages/openmpi
prepend-path            MANPATH         /usr/share/man/openmpi-x86_64
setenv                  MPI_BIN         /usr/lib64/openmpi/bin
setenv                  MPI_SYSCONFIG   /etc/openmpi-x86_64
setenv                  MPI_FORTRAN_MOD_DIR     /usr/lib64/gfortran/modules/openmpi-x86_64
setenv                  MPI_INCLUDE     /usr/include/openmpi-x86_64
setenv                  MPI_LIB         /usr/lib64/openmpi/lib
setenv                  MPI_MAN         /usr/share/man/openmpi-x86_64
setenv                  MPI_PYTHON_SITEARCH     /usr/lib64/python2.7/site-packages/openmpi
setenv                  MPI_COMPILER    openmpi-x86_64
setenv                  MPI_SUFFIX      _openmpi
setenv                  MPI_HOME        /usr/lib64/openmpi

El archivo del módulo comienza con la cookie mágica +#%Module +, donde `es la versión del archivo del módulo utilizada. La versión actual es la 1.0.

Los comandos anteriores anteponen la ruta con el bindir de OpenMPI de 64 bits (compilado con GCC) y añaden la ruta de la biblioteca correspondiente. A continuación, configuran diversas variables de entorno.

También es posible configurar CFLAGS y LDFLAGS de la manera descrita anteriormente, pero en el caso de compiladores MPI no es necesario, ya que se invocan con los envoltorios mpicc, mpicxx, mpif77 y mpif90, que ya contienen las rutas de inclusión y biblioteca necesarias. Además, en el caso de paquetes de desarrollo, no es recomendable anular CFLAGS o LDFLAGS, ya que podría causar problemas al compilar RPM al anular %{optflags}.

La documentación ascendente para los archivos de módulo está disponible en aquí o con man modulefile.

Cambiar entre implementaciones de módulos

El cambio entre los módulos de entorno y las implementaciones de Lmod se realiza mediante alternativas. Los scripts de inicio del shell /etc/profile.d/modules.\{csh,sh} son enlaces a /etc/alternatives/modules.\{csh.sh} y pueden manipularse con el comando alternativo.

Lmod

Lmod es una implementación de módulos de entorno escrita en Lua y puede usar archivos de módulo escritos tanto en Lua como en Tcl. Estos archivos tienen la extensión ".lua". Sin embargo, estos archivos no deben instalarse en /usr/share/modulefiles para evitar problemas al usar el paquete environment-modules. En su lugar, instálelos en %{_datadir}/lmod/lmod/modulefiles/Core.