Variables et modules d'environnement

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
# env
# echo $NOM_VAR

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

> Partager <