Environment Modules

Environment Modules est un logiciel libre de gestion d’environnement qui permet d’initialiser et de modifier simplement l’environnement d’une session de travail. Les logiciels peuvent être chargés ou déchargés automatiquement et dynamiquement de manière propre. Il prend également en compte les shells les plus populaires : bash, ksh, zsh, sh, csh, tcsh, fish, ainsi que les languages : perl, ruby, tcl, python, cmake et R.

Commandes utiles

Voici les commandes de bases utiles pour l’utilisation de Modules au CC-IN2P3.

% module help
Afficher l’aide de l’ensemble des commandes.
% module [avail|view] [options]
Afficher les logiciels disponibles.
% module alias
Afficher les alias disponibles.
% module help modulefile
Obtenir des informations sur la version installée d’un logiciel, telles que la version ou le lien vers le changelog.
% module whatis modulefile
Obtenir des informations génériques sur un logiciel, telles qu’une courte description, et le lien vers le site web officiel.
% module [load|add] modulefile
Charger un logiciel.

Note

Le chemin du répertoire vers la version est nécessaire pour charger le logiciel.

Des alias sont disponibles et permettent de charger/décharger directement le logiciel via l’alias sans passer par le chemin.

Pour charger/décharger directement la version la plus récente d’un logiciel, utilser le tag latest-release comme suit :

% module add /Cat/logiciel/latest-release
% module [unload|rm] modulefile
Décharger un logiciel chargé.
% module list
Afficher les logiciels chargés.
% module switch old-module new-module
Échanger de version.
% module [purge|clear]
Vider tout les logiciels chargés.
% module reload
Recharger tout les logiciels déjà chargés.
% module save [collection]
Sauvegarder la configuration actuelle dans une collection. Cette collection sera sauvegardée par défaut dans votre répertoire $HOME/.module.
% module restore [collection]
Restaurer une configuration enregistrée dans une collection.
% module saveshow [collection]
Afficher le contenu de la collection actuelle.
% module [show|display] modulefile
Afficher les variables d’environnement mises en place par le modulefile ainsi que les prérequis et les conflits.

Pour plus de commandes et d’options, veuillez vous réferer à la liste de commandes dans la documetantion officielle.

Note

La commande module peut être abbrégée en ml. Certaines commandes possèdent également des alias que vous trouverez dans la section dediée à l’alias dans la documentation officielle. Il est possible d’ajouter des raccourcis pour les versions de logiciels de votre choix à l’aide d’alias de tags ou de versions dans le fichier .modulerc comme décrit dans le paragraphe Création d’un fichier .modulerc.

Exemples d’utilisation

Obtenir la liste des catégories contenant les logiciels :

% module view -C                            % module view Compilers
 - Analysis                                 Compilers/ :
 - CC-IN2P3                                   - f95
 - Collaborative_Tools                        - g95
 - Compilers                                  - gcc
 ...                                          - ghc
                                              - intel
                                              - pgi

Charger et décharger Root 6.23.01 :

% module add Analysis/root/6.23.01
Loading Analysis/root/6.23.01
    Loading requirement: Programming_Languages/python/3.8.6 Compilers/gcc/8.3.1-rh

% module list
module list
Currently Loaded Modulefiles:
    1) Programming_Languages/python/3.8.6 <aL>   2) Compilers/gcc/8.3.1-rh <aL>   3) Analysis/root/6.23.01(last-release)

% module rm Analysis/root/6.23.01
Unloading Analysis/root/6.23.01
    Unloading useless requirement: Compilers/gcc/8.3.1-rh Programming_Languages/python/3.8.6

Personnaliser Modules

Initialisation spécifique

Modules est automatiquement initialisé avec le shell utilisé mais il possible de l’initialiser manuellement avec un shell ou un language particulier, en utilisant les scripts mis à disposition comme suit :

Shell:
% source /usr/share/Modules/init/SHELL
Perl:
% require "/usr/share/Modules/init/perl.pm"
Python:
% import os
% exec(open('/usr/share/Modules/init/python.py').read())

Création d’un fichier .modulerc

Modules cherche automatiquement un fichier nommé .modulerc dans votre répertoire $HOME. Celui-ci servira notamment à sélectionner le ou les dossiers contenant les modulefiles que vous souhaitez utiliser mais également à gérer vos alias, versions, etc. Pour personnaliser votre environnement avec Modules, vous avez tout d’abord besoin de créer un fichier .modulerc dans votre répertoire $HOME.

Remplissez ce fichier avec le chemin de votre/vos répertoire(s) contenant vos modulefiles avec la commande module use {/path/to/modulefiles}. Vous pouvez également gérer vos alias, vos versions et vos tags ou encore cacher certains logiciels comme dans le fichier suivant:

#%Module1.0##################################################################
#
# This file defines the initial module command configuration, the default
# modulefiles search path and modulefiles you want to load by default for all
# users. It should contains lines of module command like 'module config conf
# val', 'module use path' and 'module load mod'
#
#############################################################################

# Add a modulefiles directory:
module use --append {/path/to/modulefiles}

# Remove a modulefiles directory from list:
module unuse {/path/to/already/used/modulefiles}

# Add alias to a module. It acts as a shortcup name to call a module.
module-alias name modulefile

# Add a version name to a module. It is shown by module as a tag after the module name and allows to load it with this name.
module-version modulefile version

# Add a virtual name to a module. This name is hide and allow to load the module with this name.
module-virtual name /path/to/the/modulefile

# Add a tag to a module.
module-tag [option] tag module

# Hide a modulefile.
module-hide [options] modulefile...

Vous pouvez ajouter les commandes Modules de votre choix à ce fichier pour mettre en place votre environnement initial personnalisé de Modules. Vous trouverez plus d’options dans la section dediée à modulefile dans la documentation officielle.

Créer son propre modulefile

Un modulefile permet de mettre en place les variables d’environnement nécessaires pour le fonctionnement d’un logiciel. Il est également possible de gérer les dépendances facilement en forçant, ou au contraire en empêchant le chargement d’autres modules si ceux-ci sont en conflit avec un autre. Pour cela, vous avez à votre disposition la documentation officielle ainsi qu’un template contenue dans /pbs/software/centos-7-x86_64/modules/modulefiles/module-template :

#%Module1.0####################################################################
##
##  my_module modulefile
##
##  Modulefile template, specifies some usefull and general commands.
##
##
###############################################################################

## Display help message:
proc ModulesHelp { } {
        puts stderr "Adds my personal infos to the environment."
}

## Create a whatis file.  Not nessecary but cool.
module-whatis   "Adds my own personal links, aliases and paths"

## Make conflict if some not wanted packages are already loaded.
## Print error if at least one of the modulefiles are already loaded.

conflict [modulefile or folder of modulefiles]

## Make prerequisites to load other modulefiles requested.
## Load automatically the module if it is not already loaded.

prereq [modulefile]

##
# for Tcl script use only
## Set local variables (usually: version, top dir and OS) :

set     var             var-value
set     version         v.XX-XX
set     topdir          path/to/soft/version
set     sys             centos-7-x86_64

## Set environnement variable:
setenv          SOFT_NAME             $topdir/bin/soft

## Unset an environment variable:
unsetenv        MY_VAR  "hello"

## Append a specific path:
append-path     PATH    /path/to

## Prepend a specific path:
prepend-path    PATH    /path/to

## Remove path:
remove-path     PATH    /path/to

## Source a shell script:
source-sh       /path/to/script.sh

## Set personal aliases:
set-alias       "alias"    "command"

## More options are avalaible here:
## https://modules.readthedocs.io/en/latest/modulefile.html#modules-specific-tcl-commands

En cas de problèmes ou de demandes spécifiques contactez le support utilisateur .