La commande «module load» ne fonctionne pas

12

J'essaie de compiler le "Global Climate Model" avec les commandes suivantes.

module unload pgi gcc
module load gcc/4.6.3 pgi/11.8

Lorsque je les exécute, le terminal répond par command not found.

Qu'est-ce que je fais mal? Quel est le bon moyen de le faire?

Uzair Mannan
la source
Pouvez-vous expliquer ce qu'est le «modèle climatique mondial»? Où obtenez-vous ces instructions?
Oli
1
J'aurais mis cette réponse dans un commentaire mais je ne peux pas en raison d'un manque de réputation :( Il semble que ce environment-modulesne soit pas disponible dans 12.04, mais à partir de 12.10: < packages.ubuntu.com/search?keywords=environment-modules >
tssch

Réponses:

25

Juste pour résumer les commentaires et réponses précédents et ajouter un peu d' expérience d'installation de première main :

Vous recherchez la modulecommande fournie par le package des modules d'environnement . Il s'agit d'un outil de modification de l'environnement shell (PATH mais aussi des alias etc.) et commun à de nombreux clusters multi-utilisateurs comme les clusters de calcul haute performance.

Les instructions que vous avez obtenues provenaient probablement d'un cluster HPC, car vous souhaitez exécuter un modèle climatique mondial. En savoir plus sur les modules d'environnement sur HPC ici.

Maintenant, pour quelque chose de réellement lié à Ubuntu : ce n'est vraiment pas si difficile de configurer des modules d'environnement sous Ubuntu. Je viens de le faire en moins de 10 minutes pour Ubuntu 14.10 et le shell Bash.

Comme mentionné dans d'autres articles, vous pouvez installer des modules d'environnement à partir du repos (package environment-modules).

Alors tu cours add.modules. Il mettra quelques lignes dans votre fichier d'initialisation du shell, dans ce cas ~/.bashrc:

case "$0" in
          -sh|sh|*/sh)  modules_shell=sh ;;
       -ksh|ksh|*/ksh)  modules_shell=ksh ;;
       -zsh|zsh|*/zsh)  modules_shell=zsh ;;
    -bash|bash|*/bash)  modules_shell=bash ;;
esac
module() { eval `/usr/Modules/$MODULE_VERSION/bin/modulecmd $modules_shell $*`; }
#module() { eval `/usr/bin/modulecmd $modules_shell $*`; }

Vous devez supprimer le commentaire de la dernière ligne et commenter ou supprimer l'avant-dernier. Cette ligne définit la modulecommande que vous cherchiez. Il s'exécute efficacement modulecmd bashainsi que les arguments que vous lui donnez.

J'ai le sentiment que cette fonction n'est en fait pas très sûre car elle évalue tout ce que vous lui fournissez dans ses arguments. Certains utilisateurs peuvent peut-être commenter comment améliorer cela.

Il vous suffit maintenant de créer un répertoire contenant le soi-disant modulefileset l' ajouter à $MODULEPATH, par exemple avec module use /path/to/your/modulefiles. Il y a des exemples pour modulefiles là - bas sur les interwebs.

Je trouve cela un outil très pratique et pas seulement pour les clusters multi-utilisateurs. Je l'utilise pour la commutation entre les différentes distributions de python.

j08lue
la source
1
Je pense que ce devrait être est la réponse acceptée à la question
credondo
le lien vers les fichiers d'exemple du module est mort
muenalan
1
Exiger que chaque utilisateur s'exécute /usr/share/modules/bin/add.modulessemble incommode. J'ai ajouté ". /Etc/profile.d/modules.sh" au début du fichier /etc/bash.bashrc Cela pourrait être une solution pour les utilisateurs ayant bash comme shell de connexion. Notez que cela n'était nécessaire que pour la connexion à l'interface graphique. La connexion SSH fonctionnait déjà avant le changement. Que pensez-vous, est-ce une bonne solution ou recommandez-vous autre chose?
Erik Sjölund
Je peux voir que le package environnement-modules a historiquement changé la méthode pour obtenir la fonction «modules» dans votre shell. Sur un ancien système Red Hat, il faut /etc/profile.d/modules.shque je source pour fournir la fonction des modules (j'avais l'habitude rpm -ql environment-modulesde comprendre quels fichiers étaient disponibles). Sur Ubuntu, ce serait dpkg-query -S /usr/share/modules- cela vous aidera simplement à comprendre ce que le paquet fournit.
qneill
6

Pour ceux qui "survolent" (en vous regardant Seth): Ce n'est PAS UNE QUESTION SUR LES MODULES KERNEL. Il s'agit de manipuler des variables d'environnement shell à l'aide d'un outil appelé ENIRONMENT-MODULES. Si vous êtes familier avec les modules du noyau, vous vous rendrez compte qu'il n'y a pas d'outil standard du noyau (script ou autre) nommé "module". Tous les outils de manipulation de modules abrègent le module en mod (lsmod, insmod, modprobe, etc.). Et il n'y a pas de module nommé gcc.

Les modules d'environnement ( http://modules.sourceforge.net/ ) sont encore un autre outil d'environnement pour changer les environnements d'exécution dans le shell. Il aide les personnes qui ont besoin de Python 2.4 et Python 2.7 sur la même machine. Ou il aide les gens à gérer les compilateurs et les bibliothèques Intel v. GNU.

Malheureusement, les modules d'environnement ne sont pas un package pour Ubuntu 12.04 LTS.

Les options incluent l'installation à partir de la source (suivez le lien ci-dessus), la mise à niveau vers 14.04 LTS ou la recherche de fichiers deb. Des trois, j'installerais depuis la source. Le fichier deb dépend de libtcl8.6 qui est dans la même situation, non disponible sur 12.04LTS.

Brian
la source
4

Vous essayez probablement d'utiliser un progiciel qui n'est pas installé sur votre machine. Bien sûr, je ne peux pas vraiment être sûr, mais je suppose que vous essayez d'utiliser des modules d'environnement . Si cela est correct, vous pouvez installer des modules d'environnement à partir des référentiels Ubuntu standard.

Mais sachez que les modules d'environnement sont un programme assez ancien. La page d'accueil note la dernière mise à jour d'un outil d'aide à partir de 2011, l'avis de droit d'auteur ne va pas plus loin que 1999. Il n'y a donc aucune garantie que ce progiciel fonctionne parfaitement avec les versions actuelles d'Ubuntu. C'est possible, mais vous ne pouvez pas en être sûr.

Henning Kockerbeck
la source
2
C'est une énorme difficulté à mettre en place, mais cela fonctionne extrêmement bien et est une norme de facto sur les clusters multi-utilisateurs.
Emmet
0

Il ne s'agit module loadpas de ne pas fonctionner , ce module loadn'est pas une commande standard dans Ubuntu.

Si vous essayez de charger un module existant, sudo modprobe <modulename>c'est la commande que vous recherchez. Et vous pouvez utiliser rmmodou modprobe -rdécharger un module.

Oli
la source
Oli Je reçois ces instructions d'un guide d'utilisation du modèle climatique mondial "ECHAM6". Les lignes mentionnées ci-dessus 'charge de module' sont mentionnées dans le manuel pour charger le compilateur depuis le terminal ...
uzair mannan
4
Il essaie d'utiliser le programme de modules d'environnement (généralement installé sur des clusters) qui gère les variables d'environnement pour différents compilateurs, implémentations MPI, etc. et non pas de charger les modules du noyau.
Emmet
il existe réellement, nous l'utilisons tous les jours dans notre entreprise: P
Bruno Pereira
moduleest un outil utilisé pour changer la version de l'outil et des bibliothèques de l'un à l'autre, un peu comme virtualenv pour python, mais à la place il change vos chemins et variables pour refléter d'autres configurations, par exemple: module load gcc-4.8 will load gcc-4.8, module charger gcc-4.7 chargera 4.7, etc
Bruno Pereira
0

ajoutez simplement ceci à la première ligne de votre script. Ensuite, la commande du module sera lue par tsch.

#!/bin/tcsh
Javad Mehrmashhadi
la source