Der Befehl "Modul laden" funktioniert nicht

12

Ich versuche das "Globale Klimamodell" mit den folgenden Befehlen zu kompilieren.

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

Wenn ich sie ausführe, antwortet das Terminal mit command not found.

Was mache ich falsch? Was ist der richtige Weg, um dies zu tun?

Uzair Mannan
quelle
Können Sie erklären, was das "globale Klimamodell" ist? Woher bekommen Sie diese Anweisungen?
Oli
1
Ich hätte diese Antwort in einen Kommentar eingefügt, kann sie aber aufgrund mangelnder Reputation nicht: (Es scheint, dass environment-modulessie in 12.04 nicht verfügbar ist, aber ab 12.10: < packages.ubuntu.com/search?keywords=environment-modules >
Tssch

Antworten:

25

Nur um fasst die bisherigen Kommentare und Antworten und ein bisschen hinzufügen aus erster Hand Installation Erfahrung:

Sie suchen nach dem moduleBefehl, der vom Paket " Umgebungsmodule" bereitgestellt wird. Es ist ein Tool zum Ändern der Shell-Umgebung (PATH, aber auch Aliase usw.) und vielen Mehrbenutzer-Clustern wie High-Performance-Computing-Clustern gemeinsam.

Die Anweisungen, die Sie erhalten haben, stammen wahrscheinlich von einem HPC-Cluster, da Sie ein globales Klimamodell ausführen möchten. Lesen Sie mehr über Umwelt Module auf HPC hier.

Nun zu etwas, das tatsächlich mit Ubuntu zu tun hat: Es ist eigentlich nicht so mühsam, Umgebungsmodule unter Ubuntu einzurichten. Ich habe es gerade in weniger als 10 Minuten für Ubuntu 14.10 und die Bash-Shell gemacht.

Wie in anderen Beiträgen erwähnt, können Sie Umgebungsmodule aus den Repos (Paket environment-modules) installieren .

Dann rennst du add.modules. In diesem Fall werden einige Zeilen in Ihre Shell-Initialisierungsdatei eingefügt ~/.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 $*`; }

Sie müssen die letzte Zeile auskommentieren und die vorletzte auskommentieren oder löschen. Diese Zeile definiert den gesuchten moduleBefehl. Es läuft effektiv modulecmd bashplus die Argumente, die Sie ihm geben.

Ich habe das Gefühl, dass diese Funktion eigentlich nicht sehr sicher ist, weil sie alles bewertet, was Sie in ihren Argumenten liefern. Einige Benutzer können möglicherweise kommentieren, wie dies verbessert werden kann.

Sie müssen nur noch ein Verzeichnis erstellen, das das sogenannte enthält, modulefilesund es $MODULEPATHbeispielsweise mit hinzufügen module use /path/to/your/modulefiles. Es gibt Beispiele für Moduldateien in den Interwebs.

Ich finde dies ein sehr praktisches Tool, nicht nur für Multi-User-Cluster. Ich benutze es zum Umschalten zwischen verschiedenen Python-Distributionen.

j08lue
quelle
1
Ich denke, dies sollte die akzeptierte Antwort auf die Frage sein
credondo
Beispiel Modul Dateien Link ist tot
Muenalan
1
Es /usr/share/modules/bin/add.modulesscheint unpraktisch zu sein, jeden Benutzer zum Ausführen zu verpflichten. Ich habe ". /Tc/profile.d/modules.sh" am Anfang der Datei /etc/bash.bashrc hinzugefügt. Dies könnte eine Lösung für Benutzer sein, die Bash als Anmeldeshell haben. Beachten Sie, dass dies nur für die GUI-Anmeldung benötigt wurde. Die SSH-Anmeldung funktionierte bereits vor der Änderung. Was denkst du, ist das eine gute Lösung oder empfehlen Sie etwas anderes?
Erik Sjölund
Ich kann sehen, dass das Paket " Umgebungsmodule" die Methode geändert hat, um die Funktion "Module" in Ihre Shell zu integrieren. Auf einem älteren Red Hat-System /etc/profile.d/modules.shmuss ich eine Quelle angeben, um die Modulfunktion bereitzustellen (ich habe früher rpm -ql environment-modulesverstanden, welche Dateien verfügbar waren). Unter Ubuntu wäre das dpkg-query -S /usr/share/modules- das hilft Ihnen nur zu verstehen, was das Paket bietet.
Qneill
6

Für diejenigen, die "überfliegen" (dich ansehen Seth): Dies ist keine Frage zu Kernelmodulen. Es geht um die Bearbeitung von Shell-Umgebungsvariablen mit einem Tool namens ENIRONMENT-MODULES. Wenn Sie mit Kernelmodulen überhaupt vertraut sind, werden Sie feststellen, dass es kein Standard-Kernel-Tool (Skript oder anderweitig) mit dem Namen "Modul" gibt. Alle Modulmanipulationswerkzeuge kürzen das Modul als mod ab (lsmod, insmod, modprobe usw.). Und es gibt kein Modul namens gcc.

Umgebungsmodule ( http://modules.sourceforge.net/ ) sind ein weiteres Umgebungstool zum Wechseln von Ausführungsumgebungen in der Shell. Es hilft Menschen, die Python 2.4 und Python 2.7 auf demselben Computer benötigen. Oder es hilft Benutzern bei der Verwaltung von Intel v. GNU-Compilern und -Bibliotheken.

Leider sind Umgebungsmodule kein Paket für Ubuntu 12.04 LTS.

Zu den Optionen gehören die Installation von der Quelle (folgen Sie dem obigen Link), das Upgrade auf 14.04 LTS oder das Anzeigen von Deb-Dateien. Von den dreien würde ich von der Quelle installieren. Die Deb-Datei hängt von libtcl8.6 ab, das sich in derselben Situation befindet und unter 12.04LTS nicht verfügbar ist.

Brian
quelle
4

Sie versuchen wahrscheinlich, ein Softwarepaket zu verwenden, das nicht auf Ihrem Computer installiert ist. Natürlich kann ich nicht wirklich sicher sein, aber ich würde vermuten, dass Sie versuchen, Umgebungsmodule zu verwenden . Wenn dies korrekt ist, können Sie Umgebungsmodule aus den Standard-Ubuntu-Repositorys installieren.

Beachten Sie jedoch, dass Umgebungsmodule ein ziemlich altes Programm sind. Auf der Homepage wird das letzte Update eines Hilfsprogramms ab 2011 vermerkt. Der Copyright-Hinweis geht nicht weiter als 1999. Es gibt also keine Garantie dafür, dass dieses Softwarepaket mit aktuellen Ubuntu-Versionen einwandfrei funktioniert. Es könnte sein, aber Sie können nicht sicher sein.

Henning Kockerbeck
quelle
2
Das Einrichten ist sehr mühsam, funktioniert aber sehr gut und ist de facto ein Standard für Mehrbenutzer-Cluster.
Emmet
0

Es geht nicht darum, module loadnicht zu funktionieren , es module loadist kein Standardbefehl in Ubuntu.

Wenn Sie versuchen, ein vorhandenes Modul zu laden, sudo modprobe <modulename>ist dies der Befehl, nach dem Sie suchen. Und Sie können ein Modul verwenden rmmododer modprobe -rentladen.

Oli
quelle
Oli Ich erhalte diese Anweisungen aus einem globalen Klimamodell "ECHAM6" Benutzerhandbuch. Die oben genannten Zeilen 'Modul laden' werden im Handbuch erwähnt, um den Compiler vom Terminal zu laden ...
uzair mannan
4
Er versucht, das Programm für Umgebungsmodule (normalerweise in Clustern installiert) zu verwenden, das Umgebungsvariablen für verschiedene Compiler, MPI-Implementierungen usw. verwaltet und keine Kernelmodule lädt.
Emmet
es existiert tatsächlich, wir benutzen es jeden Tag in unserer Firma: P
Bruno Pereira
moduleist ein Tool, das verwendet wird, um die Tool- und libs-Version von einer zur anderen zu ändern, ähnlich wie virtualenv für Python. Stattdessen werden Ihre Pfade und Variablen geändert, um andere Setups widerzuspiegeln, z. B.: Modul laden gcc-4.8 lädt gcc-4.8, Modul Laden gcc-4.7 wird 4.7 laden, etc.
Bruno Pereira
0

Fügen Sie dies einfach in die erste Zeile Ihres Skripts ein. Dann wird der Modulbefehl von gelesen tsch.

#!/bin/tcsh
Javad Mehrmashhadi
quelle