====== Utilisation du système de modules ======
De nombreuses versions de logiciels sont amenées à cohabiter sur le cluster, au fur et à mesure des nouvelles sorties et des migrations. Pour faciliter l'utilisation d'une version précise, et l'adaptabilité dans le temps, un ensemble de module correspondant à chaque installation ont été mis en place, de manière à simplifier le travail de l'utilisateur pour mettre à jour son environnement (PATH, et autres variables) et ses scripts : Voici les commandes principales pour les exploiter.
Voir la listes de tous les logiciels installés au mésocentre [[logiciels_installes]]
===== Lister l'ensemble des modules disponibles =====
$ module avail
...
bio/muscle/3.8.31 gcc/4.9.0(default) intel/itac/9.0.3.051 lib/boost/gcc/1.59.0 matlab/r2014b simgrid/3.12 zebulon/8.5
bio/raxml/8.2.4 gcc/5.1 intel/mic/14.0.2 lib/cudnn/6.5 matlab/r2015a simgrid/3.7.1
bio/ray/2.3.1 gpu/cuda/5.5 intel/mic/15.0.3 lib/gdal/1.10.0 mpi/openmpi/gcc/1.7.5 simgrid/3.8.1
bio/samtools/1.1 gpu/cuda/6.5 intel/mic/current lib/gdal/1.10.1 mpi/openmpi/icc/1.7.5 tools/ant/1.8.2
bio/sumatra/1.0 gpu/cuda/7.0 intel/tbb/4.3.5.187 lib/grass/6.4.3 namd/2.11b2(default) tools/carma/1.1
bio/t-coffee/10.00 gpu/cuda/7.5 lang/f2c/default lib/hdf5/1.8.12 namd/gpu/2.9b3 tools/cmake/2.8.1
bio/t-coffee/9.03 gromacs/mpi/5.0.4 lang/java/1.7.0_55 lib/libpng/1.6.6 numlib/armadillo/gcc/6.300.2 tools/cmake/3.2.3
...
Chaque entrée de la liste est de la forme suivante : ''''/''''/''''. Cette convention de nommage se retrouve dans l'ensemble des autres commandes, pour désigner un module spécifique.
Certains modules sont organisés en catégories :
* tools
* lang
* bio
* gpu
* lib
* numlib
* ...
==== Exemples ====
Afficher la tous les logiciels de la catégorie bio (bioinformatique)
$ module avail bio
Afficher la tous les logiciels de la catégorie lang (langages de programmation )
$ module avail lang
===== Charger un module =====
Charger la version 2.0 d'un logiciel :
$ module load logiciel/2.0
Il est possible de demander la **dernière version** de logiciel, si aucune version n'est précisée :
$ module load logiciel
Il est possible de charger plusieurs logiciels à la fois :
$ module load logiciel1 logiciel2 ...logicieln
==== Exemples ====
Charger la dernière version de Java
$ module load lang/java
Charger la version 1.7.5 de Open MPI compilé avec GCC
$ module mpi/openmpi/gcc/1.7.5
**Une fois le module est chargé, des informations supplémentaires (variables d'environnement) sont rajoutées à l'environnement utilisateur**
NOM_HOME
NOME_VERSION
**Exemple :**
* OMPI_HOME : répertoire d'installation du logiciel OMPI
* OMPI_VERSION (ex : OMP_VERSION) : version du logiciel OMPI
* LD_LIBRARY_PATH : mise à jour automatique de LD_LIBRARY_PATH pour prendre en compte les nouvelles bibliothèques
===== Lister les modules actuellement chargés =====
$ module list
===== Décharger un module =====
$ module rm logiciel
===== Chargement des modules au démarrage de la session =====
Il est possible de charger les modules au démarrage de l session en rajoutant les commandes dans le fichier ''$HOME/.basrc''
Par exemple, pour charger git et Java :
$ module load git lang/java
===== Search for module =====
To check if a module is installed in the system, one can use:
$ module avail 2>&1 | grep -i "modulename"
Why, so complicate? because module sends results to ''stderr''. We need to capture ''stderr'' in ''stdout'', and use ''grep'' to search for corresponding motifs.
for example, check if PAPI is installed:
$ module avail 2>&1 | grep -i "papi"
intel/imkl/11.1.2.144 perf/papi/gcc/5.4.3
intel/imkl/11.2.3.187 perf/papi/gcc/5.5.1
intel/impi/4.1.3.049 perf/papi/icc/5.4.3(default)