Environment modules

Environment modules#

Modules permite el cambio rápido de un entorno a otro porque nos deja cargar o borrar las variables necesarios para un programa ejecutando un comando sencillo y avisa si hay conflictos entre un entorno ya definido con otro que el usuario quiere cargar.

Los modulefiles están escritos en Tcl (Tool Command Language) y son interpretados por el modulecmd que se ejecuta cada vez que invocamos module

Debe inicializarse con el login de los usuarios según la shell que se usa

source /usr/share/modules/init/bash

Especifica variables como el MODULESHOME o MODULEPATH

Los comandos básicos de la herramienta son:

module avail   # Muestra los módulos de entornos de programas disponibles
module load    # Carga el entorno del programa <prog> de la versión por defecto
module load    # Carga el entorno del programa <prog> de la versión <vers>
module list    # Muestra los módulos cargados actualmente
module unload  # Quita el entorno del <prog>
module show    # Muestra el entorno que define el módulo
module whatis  # información que aparecerá al usar module whatis modulefile

Para configurar modules enviroment empezamos instalando en el servidor y clientes :

apt-get install environment-modules

Podemos comprobar que se ha instalado

tunombre1@compute-0-0:~$ module avail
------------------------ /usr/share/modules/modulefiles ------------------------
dot  module-git  module-info  modules  null  use.own

Vamos a crear un nuevo modulo

root@compute-0-0:/usr/share/modules/modulefiles# cat test
#%Module
##
## test modulefile
##
##
proc ModulesHelp { } {
global version modroot
puts stderr "\ttest carga nada"
}
module-whatis "Entorno para test"
prepend-path PATH /export/apps/test/bin

root@compute-0-0:~# cat /export/apps/test/bin/test.x
echo hola $(whoami)
echo hoy es $(date)

Tenemos que copiar el modulo al resto de los nodos, pero el ejecutable o script lo exportaremos por nfs

root@compute-0-0:~$ scp /usr/share/modules/modulefiles/test compute-0-1:/usr/share/modules/modulefiles/test

root@compute-0-0:~$ tail -5 /etc/exports
/home/tunombre1 172.16.0.12(rw,sync,no_root_squash,no_subtree_check)
/home/tunombre1 172.16.0.13(rw,sync,no_root_squash,no_subtree_check)
/home/tunombre1 172.16.0.14(rw,sync,no_root_squash,no_subtree_check)
/export 172.16.0.10(rw,async,no_root_squash) 172.16.0.0/255.255.255.0(rw,async)
/export/apps *(rw,async,no_root_squash)

root@compute-0-1:~$ tail -4 /etc/auto.master
#
+auto.master
/home /etc/auto.home
/export /etc/auto.share --timeout=1200

root@compute-0-1:~$ tail -4 /etc/auto.home
*    compute-0-0:/home/&

root@compute-0-1:~$ tail -4 /etc/auto.share
apps compute-0-0:/export/&

Volvemos a lanzar el proceso y comprobamos que ahora si existe el comando test.x

tunombre1@compute-0-0:~$ sbatch script.sh
Submitted batch job 11

tunombre1@compute-0-0:~$ cat salida
/home/tunombre1
compute-0-1
hola tunombre1
hoy es vie 14 abr 2023 10:23:51 UTC

#No hace falta tenerlo cargado en el nodo principal
tunombre1@compute-0-0:~$ module list
No Modulefiles Currently Loaded.