Principales différences entre une variable d’environnement et un module d’environnement.
Variables d’environnement
Les variables d’environnemt permettent de communiquer des informations entre différentes applications et sont fournies par l’OS.
Manipuler les variables
Pour lister les variables d’environnemt :
# printenv |
Pour définir une variable d’environnement :
# export $NOM_VAR=valeur |
Pour supprimer une variable d’environnement :
# unset $NOM_VAR |
Exemples les plus courants
Parmi les plus célèbres :
$TMP
= chemin dossier temporaire$HOME
= chemin dossier personnel$USER
= nom utilisateur$PATH
= chemins des éxécutables pour les commandes externes
Modules d’environnement
Les modules d’environnement sont généralement utilisés dans les clusters. Ils permettent d’utiliser plusieurs compilateurs ou bibliothèques lors de l’exécution de tâches parallèles.
Problème du $PATH
Les clusters fournissent généralement lors de leur installation un compilateur une bibliothèque MPI par défaut. Parfois il est nécessaire d’utiliser d’autres compilateurs ou d’autres bibliothèques et même de les mettre à jour.
Pour modifier tout ce qui touche à l’environnement machine, comme le compilateur ou les bibliothèques, il est tentant de modifier le $PATH
dans .bashrc
mais cette manipulation de fonctionne pas dans le cas où plusieurs tâches sont effectuées avec l’utilisation de compilateurs et bibliothèques MPI différent·es.
Exemple : une tâche doit utiliser GCC 4.6 avec OpenMPI et une autre tâche GCC 4.5 avec MPICH2. Pour ces deux travaux dans la même file d’attente, les deux fichiers liront le même $PATH
.
Utilisation des modules d’environnement
Les modules d’environnement permettent la modification dynamique de l’environnement d’un utilisateur via des fichiers de module.
Il est possible d’utiliser les modules d’environnement pour modifier les variables d’environnement elles-mêmes, telles que $PATH
, $MANPATH
, $LD_LIBRARY_LOAD
, etc.
Il est possible d’incorporer les modules d’envrionnement dans des scripts shell afin de définir le $PATH
(ou toutes autres variables d’environnement) approprié à la combinaison compilateur/blibliothèque.
A ne pas confondre avec les kernel modules
Modules noyau / Kernel modules
Un noyau monolithique, bien que plus rapide qu’un micronoyau, manque de modularité et d’extensibilité mais, sur les version modernes, on utilise des kernel modules pour palier au problème.
Un kernel module (ou loadable kernel mode) est un fichier objet qui contient du code qui peut étendre les fonctionnalités du noyau au moment de l’exécution (chargé selon les besoins).
Quand le kernel module n’est plus nécessaire, il peut être unload.
La plupart des pilotes de périphériques sont utilisés sous la forme de kernel module.
Documentation
https://www.admin-magazine.com/HPC/Articles/Environment-Modules
https://modules.readthedocs.io/en/latest/
https://linux-kernel-labs.github.io/refs/heads/master/labs/kernel_modules.html
https://linuxconfig.org/how-to-set-and-list-environment-variables-on-linux
https://www.man7.org/linux/man-pages/man1/manpath.1.html