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 : module load Category/software/version

Des alias sont disponibles et permettent de charger/décharger directement le logiciel via l’alias : module load <alias>

Certains logiciels nécessitent des options appelées variant pour être chargés. On peut afficher les différents variant avec la commande module show <modulefile>

% 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 (voir la section dédiée Collections). 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.

Attention

En cas de problème avec la commande module, comme command not found: module, veuillez forcer la bonne mise en place de l’environnement avec les commandes suivantes :

  • (t)csh

    % source /etc/profile.d/modules.csh
    
  • bash, ksh, zsh

    % source /etc/profile.d/modules.sh
    
  • Une autre solution peut être de spécifier l’option -l dans le shebang du script

    #!/bin/SHELL -l
    

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 cat
 Analysis/
 CC-IN2P3/
 Collaborative_Tools/
 Compilers/
 Containers/
 [...]
% module view Compilers
--- Compilers/ : ---
  f95/  g95/  gcc/  ghc/ intel/ pgi/  swig/
% module view gcc
  Compilers/gcc/
  10.2.0  10.3.0 (gcc) [...] 8.3.1  9.3.1 (rh-devtoolset)

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/10.3.0
% module list
module list
Currently Loaded Modulefiles:
    1) Programming_Languages/python/3.8.6 <aL>   2) Compilers/gcc/10.3.0(latest) <aL>   3) Analysis/root/6.23.01
% module rm Analysis/root/6.23.01
Unloading Analysis/root/6.23.01
    Unloading useless requirement: Compilers/gcc/10.3.0 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 :

% source /usr/share/Modules/init/SHELL

Création d’un fichier .modulerc

Afin de pouvoir gérer vos alias, versions, etc, vous avez tout d’abord besoin de créer un fichier .modulerc dans votre répertoire $HOME. Ce fichier est ensuite automatiquement lu à chaque utilisation de la commande module. Ci-dessous, un fichier .modulerc présentant les principales commandes à utiliser :

#%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'
#
#############################################################################
# To load the default CC-IN2P3 configuration:
module config rcfile /pbs/software/modulefiles/redhat-9-x86_64/modulerc

# 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...

Note

Afin d’avoir à la fois la configuration par défault mise en place au CC-IN2P3 et votre configuration personnalisée, il faut ajouter dans le fichier $HOME/.modulerc la ligne suivante : module config rcfile /pbs/software/modulefiles/redhat-9-x86_64/modulerc

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/modulefiles/redhat-9-x86_64/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             redhat-9-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:module
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 utilisateurs .

Gérer des collections

Les collections dans Modules permettent de sauvegarder un environnement complet, en utilisant une séquence de commandes module use et module load.

  1. En ligne de commande :

Défini un chemin personnalisé
% module use my/modulepath
Charge le soft choisi
% module load soft1
% module load soft2
Sauvegarde la collection
% module save my_collection

Cela enregistrera la collection dans le fichier $HOME/.module/my_collection.

Note

Si aucun nom est donnée lors de la commande module save, alors un fichier nommé $HOME/.module/default est créé.

La collection default est automatiquement chargée au login.

  1. Édition d’un fichier collection :

On peut également directement éditer un fichier $HOME/.module/my_collection avec les commandes module use et module load.

Enfin, on peut charger une collection enregistrée à l’aide de la commande module restore my_collection.