Das module Werkzeug erlaubt die dynamische Modifizierung der Shell Umgebungsvariablen und kann unter jeder Linux Shell benutzt werden. Es wird eingesetzt um die Pfade (ausführbare Dateien, Bibliotheken, Hilfeseite usw.) verschiedener Software-Pakete und Abhängigkeiten untereinander zu konfigurieren. Dies soll dem Nutzer den Umgang mit der bereits installierten Software auf dem CHiC erleichtern. Weiterhin besteht auch die Möglichkeit für den Nutzer eigene Module zu erstellen.
Voraussetzung für die vollständige Nutzung des module Werkzeugs ist eine richtig vorkonfigurierte Shellinitialisierung. Für den CHiC wurde das bereits in das Knotenimage integriert und auf Nutzerebene beim Anlegen des Nutzeraccounts realisiert. In der ~/.bashrc sollte folgender Eintrag bereits vorhanden sein:
module load null
Bei anderen Shells wie tcsh muss ein entsprechender Eintrag in die jeweilige Shell-Konfigurationsdatei manuell erfolgen.
Um sich die komplette Liste aller Module anzeigen zu lassen gibt man in der Shell folgendes Kommando ein:
module avail
Dort kann man erkennen, dass die Module in Gruppen (bspw. comp oder mpi) und Untergruppen (bspw. mpi/mvapich2) eingeordnet sind. Diese kann man sich auch gezielt mit dem folgenden Befehl anzeigen lassen.
module avail <gruppe>[/<untergruppe>]
Eine Auflistung beispielsweise aller MVAPICH2 Versionen kann mit dem folgenden Aufruf erzeugt werden.
module avail mpi/mvapich2
Dies erzeugt die hier stehende Ausgabe:
------------------------/lustrefs/apps/Modules/3.2.5/modulefiles ------------------------ mpi/mvapich2/gcc346 mpi/mvapich2/gcc420 mpi/mvapich2/path30 mpi/mvapich2/gcc346_debug mpi/mvapich2/gcc420_debug
Möchte man sich anzeigen lassen welche direkten Änderungen beim Laden eines Moduls an der Shell vorgenommen werden, kann man das wie folgt realisieren.
module show <modulename>
Beispielsweise erzeugt
module show comp/path/30
die folgende Ausgabe:
------------------------------------------------------------------- /lustrefs/apps/Modules/3.2.5/modulefiles/comp/path/30: module-whatis configure environment for Qlogic/PathScale EKOPath Compiler Suite 3.0 prepend-path PATH /lustrefs/compiler/pathscale-3.0/bin:/lustrefs/compiler/pathscale-3.0/man prepend-path LD_LIBRARY_PATH /lustrefs/compiler/pathscale-3.0/lib/3.0/32:/lustrefs/compiler/pathscale-3.0/lib/3.0 -------------------------------------------------------------------
Für eine lesbarere Form wurde für jedes Module eine spezifische Hilfe geschrieben, welche man sich mit dem Befehl module help <modulename> ausgeben lassen kann. Das folgende Beispiel gibt die Hilfe für die PathScale Compilersuite 3.0 aus.
module help comp/path/30
----------- Module Specific Help for 'comp/path/30' ---------------
This is the Modulefile for configuring the environment to use the Qlogic/PathScale EKOPath Compiler Suite 3.0 with OpenMP support.
It sets the following environment variables:
- PATH -- Path to executables and man-pages
- /lustrefs/compiler/pathscale-3.0/bin
- /lustrefs/compiler/pathscale-3.0/man
- LD_LIBRARY_PATH -- Path to shared libraries
- /lustrefs/compiler/pathscale-3.0/lib/3.0/32
- /lustrefs/compiler/pathscale-3.0/lib/3.0
The following compiler/debugger would be available after loading:
- pathf90/pathf95 -- Fortran 77, 90 and 95
- pathcc -- C
- pathCC -- C++
- pathdb -- Debugger
Eine Kurzbeschreibung eines Moduls kann man mit dem folgenden Befehl erhalten.
module whatis <modulename>
Möchte man in allen Kurzbeschreibungen nach einem bestimmten Wort suchen kann man dies wie folgt machen.
module apropos <string>
Um sich anzeigen zu lassen welche Module bereits geladen sind, ist das folgende Kommando notwendig, welches eine Liste aller geladenen Module zurückgibt.
module list
Möchte man nun ein neues Module hinzufügen, wird dies wie folgt erledigt.
module add <modulename> [<modulename>]
Bei diesem Aufruf können auch mehrere Module angegeben werden. Wenn keine Konflikte oder Abhängigkeitsprobleme aufgetreten sind (diese werden ausgegeben), dann wird das Modul beim Aufruf von module list nun mitangezeigt und die Umgebung ist entsprechend angepasst.
Wenn man nun auf einem anderen Knoten per ssh wechselt ist diese Änderung nicht mehr vorhanden, da nur die Shell verändert worden ist in der man das obige Kommando abgesetzt hat. Möchte man nun das Modul dauerhaft in die Shellinitialisierung (bpsw. ~/.bashrc) mit aufnehmen geschieht das mit dem Kommando:
module initadd <modulename> [<modulename>]
Man kann sich die dauerhaft aufgenommenen Module wie folgt anzeigen lassen.
module initlist
Wenn nun einzelne Module aus der aktuellen Shell wieder entfernt werden sollen, dann geschieht das mit:
module rm <modulename> [<modulename>]
Nach erfolgreicher Ausführung dieses Befehls sollten beim Aufruf von module list die entsprechenden Module nicht mehr mit aufgeführt werden. Um diese Module aus der dauerhaften Initialisierung herauszunehmen muss noch der folgende Befehl ausgeführt werden.
module initrm <modulename> [<modulename>]
Für detailiertere Information bezüglich des module Werkzeugs bzw. zum Erstellen eines eigenen Moduls sei auf die folgenden Hilfeseiten verwiesen.
man module man modulefile
Wenn man das Module-Werkzeug auch in Shell-Skripten benutzen möchte, dann muss in dem entsprechenden Skript noch die richtige Initialisierungsdatei inkludiert werden. Am Beispiel der Shell Bash sieht das folgendermaßen aus:
#!/bin/bash source /lustrefs/apps/Modules/3.2.5/init/bash module load <module> # do something useful