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
require "/usr/share/Modules/init/perl.pm";
>>> import os
>>> exec(open('/usr/share/Modules/init/python.py').read())
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/centos-7-x86_64/modules/modulefiles/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/centos-7-x86_64/modules/modulefiles/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/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: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
.
En ligne de commande :
% module use my/modulepath
% module load soft1
% module load soft2
% 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.
É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
.