Modulsystem lua-lmod unter OpenSuSe Leap 15.5 nicht funktionsfähig

Hallo zusammen,

ich habe beim Wechsel von OpenSuse Leap 15.4 zu 15.5 ein Problem mit dem Modulsystem “lua-lmod”.

Sofern ich mit physisch am neuen 15.5-Rechner einlogge und eine Bash-Shell öffne, sind alle Befehle rund um “module load” unbekannt. Die Umgebungsvariablen $MODULEPATH und $BASH_ENV, welche durch das Profil /etc/profiles.d/lmod.sh beim Starten der Shell gesetzt werden, stimmen aber.

Bemerkenswert ist, sobald ich mich per SSH (aus einer BashShell von einem 15.4-Recehner) auf dem 15.5-Rechner einlogge, funktioniert das Modulsystem einwandfrei. Alle Module werden via “ml av” aufgelistet und können geladen werden.

Ich verstehe nicht ganz, worin für lmod der Unterschied besteht, ob ich eine lokale Bash-Shell öffne oder mich per SSH einlogge und eine Bash-Shell starte.

Die Versionen des Paketes lua-lmod haben sich geändert (8.4.28 bei 15.4 zu 8.7.17 bei 15.5). Die bash-Versionen sind identisch zwischen beiden OS Versionen.

Ich würde mich freuen, wenn mir jemand Hhinweise geben kann, wie ich das Modulsystem auch in der lokalen Bash Shell zum Laufen bekomme.

Vielen Dank

VG

Das ist mir nicht ganz klar. Meinst du an der Console? Aber dan hast du gleich einen Bash und brauchts du die nicht zu “öffnen”.

Es ist mir aucht nicht klar wer “ich” ist. Da das System keine Personen kennt, sondern nur Benutzer, solltest du erwähnen welche Benutzer was tut (besonders ob es root ist oder nicht)

1 Like

Hallo hcvv,

vielen Dank für deine schnelle Antwort und entschuldige meine fehlenden Informationen.

Ja, ich meine die Konsole.

Es handelt um einen beliebigen Domain-Nutzer-Account, nicht um einen Root-Nutzer. Dieser Benutzer kann sich lokal physisch am Rechner anmelden oder per SSH.

Viele Grüße

@SeglerEDCE:

Ich weiß nicht – hier mit Leap 15.5 –

 > zypper search lua-lmod
Repository-Daten werden geladen...
Installierte Pakete werden gelesen...

S | Name         | Summary                                   | Type
--+--------------+-------------------------------------------+------
i | lua-lmod     | Lua-based Environment Modules used in HPC | Paket
  | lua-lmod-doc | Documentation for Lmod                    | Paket
 > 
 > zypper info lua-lmod
Repository-Daten werden geladen...
Installierte Pakete werden gelesen...


Informationen zu Paket lua-lmod:
--------------------------------
Repository         : Haupt-Repository
Name               : lua-lmod
Version            : 8.7.17-150500.2.1
Arch               : x86_64
Anbieter           : SUSE LLC <https://www.suse.com/>
Installierte Größe : 1,4 MiB
Installiert        : Ja (automatisch)
Status             : aktuell
Quellpaket         : lua-lmod-8.7.17-150500.2.1.src
Upstream-URL       : https://github.com/TACC/Lmod
Zusammenfassung    : Lua-based Environment Modules used in HPC
Beschreibung       : 
    Lmod is an Environment Module System as used in High Performance Computing
    (HPC) based on Lua, Reads TCL Modules, Supports a Software Hierarchy.
    Environment Modules are to select the individual versions of HPC libraries
    and tools from a set of installed ones.
    It requires these libraries and tools to be available in separate independent
    directory structures. On SUSE systems default location for these structures
    is under /usr/lib/hpc.

    It is not recommended to install this tool on systems which do not belong
    to an HPC deployment which uses the module system.

 > 

Wer oder, was, das Ding automatische installiert hat, weiß ich nicht – ich benutze es nicht …

Aber –

 > rpm -ql lua-lmod
/etc/profile.d/lmod.csh
/etc/profile.d/lmod.sh
/usr/lib/rpm/macros.d/macros.lmod
/usr/share/doc/packages/lua-lmod
/usr/share/doc/packages/lua-lmod/README.design.md
/usr/share/doc/packages/lua-lmod/README.md
/usr/share/doc/packages/lua-lmod/README.new
/usr/share/doc/packages/lua-lmod/README.old
/usr/share/licenses/lua-lmod
/usr/share/licenses/lua-lmod/License
/usr/share/lmod
/usr/share/lmod/8.7.17
 .
 .
 .
 > 

Aha! In /etc/profile.d/ sind ein paar Profile Dateien – die das C-Shell und das Shell dienen – schau ma in das (Bash) Shell Profile –

 > cat /etc/profile.d/lmod.sh
# -*- shell-script -*-
########################################################################
#  This is the system wide source file for setting up
#  modules:
#
########################################################################

# NOOP if running under known resource manager
if [ ! -z "$SLURM_NODELIST" ];then
     return
fi

export LMOD_SETTARG_CMD=":"
export LMOD_FULL_SETTARG_SUPPORT=no
export LMOD_COLORIZE=no
export LMOD_PREPEND_BLOCK=normal

if [ $EUID -eq 0 ]; then
    export MODULEPATH=${MODULEPATH:+${MODULEPATH}:}/usr/share/lmod/admin/modulefiles:/usr/share/lmod/modulefiles
else
    export MODULEPATH=${MODULEPATH:+${MODULEPATH}:}/usr/share/lmod/modulefiles
fi

export BASH_ENV=/usr/share/lmod/8.7.17/init/bash

# Initialize modules system
. ${BASH_ENV} >/dev/null

# Load baseline SUSE HPC environment
module try-add suse-hpc

 >

Also, für die Benutzern die „Lmod” benutzen muss, das Login Profile muss ‚/etc/profile.d/lmod.sh’ aufrufen.

  • N.B.: Das ‚/usr/share/lmod/’ Versionierung …

Lass „rpmconfigcheck” laufen und, schaue nach ob, in ‚/etc/profile.d/’ ein „lmod.sh.rpmnew” gibt oder, nicht …

1 Like

Von ‘rpmconfigcheck’ erhalte ich keine Ausgabe und *.rpmnew Files sind im /etc/profile.d/ Verzeichnis auch nicht vorhanden.

Das Profilfile lmod.sh wird offetnlichlich auch aufgerufen. Ich habe die Pfade zu den Modulen abgeändert. Diese Änderungen sind nach dem Öffnen der Konsole in der Umgebungsvariable MODULEPATH sichtbar. Es lassen sich aber mit dem Befehl “module load” und anderen keine Module laden. Die Befehle sind nicht bekannt.

Ausgabe von "module list’ in der Konsole:

If 'module' ist not a typo you can use command-not-found to lookup the package that contains it, like this:
cnf module

Ausgabe von “moduel list” per SSH:

Es sind keine Module geladen.

@SeglerEDCE:

 > cat /usr/share/lmod/8.7.17/init/bash
# -*- shell-script -*-
#
########################################################################
# Start Lmod BASHENV
########################################################################
 . 
 . 
 . 
########################################################################
#  Define the module command:  The first line runs the "lmod" command
#  to generate text:
#      export PATH="..."
#  then the "eval" converts the text into changes in the current shell.
 . 
 . 
 . 
########################################################################
#  ml is a shorthand tool for people who can't type moduel, err, module
#  It is also a combination command:
#     ml            -> module list
#     ml gcc        -> module load gcc
#     ml -gcc intel -> module unload gcc; module load intel
#  It does much more. Do: "ml --help" for more information.
 . 
 . 
 . 
if [ -n "${BASH_VERSION:-}" -a "yes" != no ]; then
  export -f module
  export -f ml
fi
 . 
 . 
 . 
########################################################################
# End Lmod BASHENV
########################################################################
#
# Local Variables:
# mode: shell-script
# indent-tabs-mode: nil
# End:
 >

Die Kommandos „module” und „ml” sind definiert wenn – das Datei ‚/usr/share/lmod/8.7.17/init/bash’ ausgeführt worden ist.

  • Es ist, normalerweise, ausgeführt wenn, ‚/etc/profile.d/lmod.sh’ ausgeführt worden ist –
    Und, für ALLE Benutzern, normalerweise/etc/profile’ führt ALLE „*.sh” in ‚/etc/profile.d’ aus …
 > grep '/etc/profile.d/' -B 4 -A 4 /etc/profile
# But do not source this if PROFILEREAD is already set to avoid
# overriding locale variables already present in the environment
#
if test -z "$PROFILEREAD" ; then
    test -r /etc/profile.d/sh.ssh && . /etc/profile.d/sh.ssh
fi

#
# Source profile extensions for certain packages, the super
# may disable some of them by setting the sticky bit.
#
if test -d /etc/profile.d -a -z "$PROFILEREAD" ; then
    for s in /etc/profile.d/*.sh ; do
        test -r $s -a ! -k $s && . $s
    done
    unset s
fi
 >

Ist, auf die Systeme wo diese Problem auftaucht, die Systemweit Profil Definition gegenüber der Standard Einstellung auf irgendeine Art und Weise geändert worden?

1 Like

@dcurtisfra
Es wurde lediglich die Datei /etc/profile.d/lmod.sh variiert, indem der Modulpath erweitert wurde:

# -*- shell-script -*-
########################################################################
#  This is the system wide source file for setting up
#  modules:
#
########################################################################

# NOOP if running under known resource manager
if [ ! -z "$SLURM_NODELIST" ];then
     return
fi

export LMOD_SETTARG_CMD=":"
export LMOD_FULL_SETTARG_SUPPORT=no
export LMOD_COLORIZE=no
export LMOD_PREPEND_BLOCK=normal

if [ $EUID -eq 0 ]; then
    export MODULEPATH=XXX
else
    export MODULEPATH=XXX
fi

export BASH_ENV=/usr/share/lmod/8.7.17/init/bash

# Initialize modules system
. ${BASH_ENV} >/dev/null

# Load baseline SUSE HPC environment
module try-add suse-hpc

Die Datei /etc/profiles oder die /usr/share/lmod/8.7.17/init/bash wurden nicht verändert.

Zusätzlich zu diesen Änderungen wurde eine Anmeldung via Kerberos mit einem Homeverzeichnis auf einem Server ermöglicht.

Ich habe lmod aber ebenso mit dem lokalen root getestet. Auch dabei zeigt sich das gleiche Verhalten:

  • Die Variable MODULEPATH wird korrekt erweitert.
  • Die Variable BASH_ENV wird korrekt gesetzt.
  • Via SSH sind die lmod-Kommandos verfügbar.
  • In einer lokalen Shell sind die lmod-Kommandos nicht verfügbar.

@SeglerEDCE:

Was ist wenn, einfach ‚/usr/share/lmod/8.7.17/init/bash’ aufgerufen wird?

Hier, mit Standard MODULEPATH –

 > echo $MODULEPATH
/usr/share/lmod/modulefiles
 > 
 > . /usr/share/lmod/8.7.17/init/bash
 > module

Modules based on Lua: Version 8.7.17  2023-01-12 15:02 -06:00
    by Robert McLay mclay@tacc.utexas.edu

module [options] sub-command [args ...]

Unterbefehle für Hilfe:
------------------
  help                              Gibt diesen Text aus.
  help                module [...]  Gibt Hilfe-Text eines Moduls aus.

Unterbefehle zum Laden/Entladen:
-------------------------------
  load | add          module [...]  Lädt Module.
  try-load | try-add  module [...]  Lädt Module und zeige keine Fehlermeldungen, wenn sie nicht gefunden werden.
  del | unload        module [...]  Entlädt Module und zeigt keine Fehlermeldungen, wenn sie nicht gefunden werden.
  swap | sw | switch  m1 m2         Entlädt "m1" und lädt "m2".
  purge                             Entlädt alle Module.
  refresh                           Lädt alle Aliase der aktuellen Module neu.
  update                            Lädt alle geladenen Module neu.

Unterbefehle zum Anzeigen und Durchsuchen:
---------------------------------
  list                              Zeigt alle geladenen Module.
  list                s1 s2 ...     Zeigt alle geladenen Module, die zu dem Muster passen.
  avail | av                        Zeigt alle verfügbaren Module.
  avail | av          string        Zeigt alle verfügbaren Module, die "string" enthalten.
  category | cat                    List all categories
  category | cat      s1 s2 ...     List all categories that match the pattern and display their modules
  overview | ov                     List all available modules by short names with number of versions
  overview | ov       string        List available modules by short names with number of versions that contain
                                    "string"
  spider                            Zeigt alle möglichen Module.
  spider              module        Zeigt alle verfügbaren Versionen des Moduls.
  spider              string        Zeigt alle Module die "string" enthalten.
  spider              name/version  Zeigt detaillierte Informationen zu dieser Version des Moduls.
  whatis              module        Gibt alle "whatis"-Informationen zu einem Modul.
  keyword | key       string        Durchsucht alle "name" und "whatis" nach "string".

Suchen mit Lmod:
--------------------
  Alle Suchbefehle (spider, list, avail, keyword) unterstützen reguläre Ausdrücke:
  

  -r spider           '^p'          Findet alle Module, deren Name mit "p" oder "P" anfängt.
  -r spider           mpi           Findet alle Module, die "mpi" in ihrem Namen enthalten.
  -r spider           'mpi$         Findet alle Module, deren Name auf "mpi" endet.

Befehle zu Modulsammlungen:
--------------------------------
  save | s                          Speichert die geladenen Module in die Standard-Module des Nutzers (Sammlung mit
                                    dem Namen "default").
  save | s            name          Speichert die geladenen Module in der Sammlung "name".
  reset                             Das gleiche wie "restore system"
  restore | r                       Setzt die Module auf die Standard-Module des Nutzers (Sammlung mit dem Namen
                                    "default") oder des Systems zurück.
  restore | r         name          Setzt die Module auf die Sammlung "name" zurück.
  restore             system        Setzt die Module auf die Standard-Module des Systems zurück.
  savelist                          Liste der gespeicherten Sammlungen.
  describe | mcc      name          Beschreibt die Inhalte einer Modulsammlung.
  disable             name          Disable (i.e. remove) a collection.

Veraltete Befehle:
--------------------
  getdefault          [name]        Lädt die angegebene Modulsammlung oder "default" des Nutzers, falls kein Name
                                    angegeben wird.
                                    ===> Nutzen sie "restore" stattdessen <====
  setdefault          [name]        Speichert die aktuell geladenen Module unter dem angegebenen Namen. Falls kein
                                    Name angegeben ist, werden die Module als Standard für ihren Benutzer
                                    gespeichert.
                                    ===> Nutzen Sie "save" stattdessen. <====

Sonstige Unterbefehle:
---------------------------
  is-loaded           modulefile    return a true status if module is loaded
  is-avail            modulefile    return a true status if module can be loaded
  show                modulefile    Zeigt die Befehle in der Modul-Datei.
  use [-a]            path          Voranstellen oder Anfügen eines Pfades zu MODULEPATH.
  unuse               path          Entfernt einen Pfad aus MODULEPATH.
  tablelist                         Ausgabe der aktiven Module als Lua-Liste.

Wichtige Umgebungsvariablen:
--------------------------------
  LMOD_COLORIZE                     Wenn dieser Wert auf "YES" festgelegt ist, wird Lmod Meldungen farbig ausgeben.

    ------------------------------------------------------------------------------------------------------------------

Lmod-Webseiten

  Documentation:    http://lmod.readthedocs.org
  GitHub:           https://github.com/TACC/Lmod
  SourceForge:      https://lmod.sf.net
  TACC Homepage:    https://www.tacc.utexas.edu/research-development/tacc-projects/lmod

  Um einen Fehler zu melden, lesen Sie bitte http://lmod.readthedocs.io/en/latest/075_bug_reporting.html
    ------------------------------------------------------------------------------------------------------------------


 > 

Normalerweise, ich benutze „Lua” nicht …

1 Like

@dcurtisfra

Das klappt. :slight_smile: Also muss irgendetwas beim Starten der lokalen Shell nicht wie gewünscht funktionieren. :thinking:

@SeglerEDCE:

Es ist schlimmer als gedacht!

<https://lmod.readthedocs.io/en/latest/030_installing.html#bash>

Und, obendrauf – „PROFILEREAD” → ‚/etc/profile’ – ab Zeilennummer 291 –

#   
# Source profile.d files and UTF8 settings
#
# But do not source this if PROFILEREAD is already set to avoid
# overriding locale variables already present in the environment
#
if test -z "$PROFILEREAD" ; then
    test -r /etc/profile.d/sh.ssh && . /etc/profile.d/sh.ssh
fi

#
# Source profile extensions for certain packages, the super
# may disable some of them by setting the sticky bit.
#
if test -d /etc/profile.d -a -z "$PROFILEREAD" ; then
    for s in /etc/profile.d/*.sh ; do
        test -r $s -a ! -k $s && . $s
    done 
    unset s
fi

Also, beim einloggen, egal wie, ‚/etc/profile’ wird aufgerufen und, beim erste Lauf, „PROFILEREAD” wird gesetzt –

 > echo $PROFILEREAD
true
 >

‚/etc/profile’ – ab Zeilennummer 320 –

#
# Avoid overwriting user settings if called twice
#
if test -z "$PROFILEREAD" ; then
    readonly PROFILEREAD=true
    export PROFILEREAD
fi

Und, das „PROFILEREAD” Wert kann nicht geändert werden –

 > help readonly
readonly: readonly [-aAf] [Name[=Wert] ...] oder readonly -p
    Mark shell variables as unchangeable.
    
    Mark each NAME as read-only; the values of these NAMEs may not be
    changed by subsequent assignment.  If VALUE is supplied, assign VALUE
    before marking as read-only.
 . 
 . 
 >

Auch hier – <https://github.com/TACC/Lmod/issues/492>


Und, die Lmod Umgebungsvariablen sind gesetzt worden –

 > set | grep -i 'lmod'
BASH_ENV=/usr/share/lmod/8.7.17/init/bash
LMOD_CMD=/usr/share/lmod/lmod/libexec/lmod
LMOD_COLORIZE=no
LMOD_DIR=/usr/share/lmod/lmod/libexec
LMOD_FULL_SETTARG_SUPPORT=no
LMOD_PKG=/usr/share/lmod/lmod
LMOD_PREPEND_BLOCK=normal
LMOD_ROOT=/usr/share/lmod
LMOD_SETTARG_CMD=:
LMOD_SETTARG_FULL_SUPPORT=no
LMOD_VERSION=8.7.17
MODULEPATH=/usr/share/lmod/modulefiles
MODULESHOME=/usr/share/lmod/lmod
__LMOD_REF_COUNT_MODULEPATH=/usr/share/lmod/modulefiles:1
 > which -a lmod
which: no lmod in (/home/xx/bin:/usr/local/bin:/usr/bin:/bin)
 > 
 > echo $BASH_ENV
/usr/share/lmod/8.7.17/init/bash
 >

Also, was ist passiert?

  • Bei einloggen, die Skripten in ‚/etc/profile.d/’ sind aufgerufen worden und, die Kommandos „module” und „ml” sind definiert worden …

  • Aber, nicht bei das Systemprozess wo das Eingabeaufforderung auftaucht …

Lösung:

  • Jeder Benutzer der Lmod benutzen will, muss die Shell-Skripten in ‚/etc/profile.d/’ vom seine „bashrc” Datei (nochmals) aufrufen …
1 Like

@dcurtisfra

Vielen Dank für deine Lösung.

Hat sich gegenüber openSUSE 15.4 etwas geändert? Bisher benötigten wir das zusätzliche Ausführen der init/bash nicht.

Scheinbar ja – irgendwas in das Login-Prozedur und das Prozess verantwortlich für das Benutzer spezifisch Eingabeaufforderung …