Zentrum für Datenverarbeitung (ZDV)

Perl-Module auf dem BinAC installieren

Diese Anleitung beschreibt die Installation von Perl-Modulen im $HOME-Verzeichnis ohne Rootrechte. Die zugrundeliegende Idee ist, erst das Perl Modul local::lib in $HOME zu installieren, welches dann die Arbeitsumgebung so konfiguriert, dass sich mit cpanm installierte Module im $HOME-Verzeichnis befinden.

local::lib installieren

Zuerst muss Perl 5.26 per module load geladen werden. In dieser Version ist cpanm installiert.

$ module load devel/perl/5.26

Anschließend muss ins $HOME-Verzeichnis gewechselt und local::lib installiert werden.

$ cd $HOME
$ wget cpan.metacpan.org/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz
$ tar xvf local-lib-2.000024.tar.gz
$ cd local-lib-2.000024
$ perl Makefile.PL --bootstrap
$ make test && make install
$ rm ~/local-lib-2.000024.tar.gz

Mehr Informationen zu local::lib gibt es unter https://metacpan.org/pod/local::lib.

Konfiguration der Arbeitsumgebung

Die korrekte Konfiguration der Arbeitsumgebung ist entscheidend für die Ausführung von Programmen. Sie bestimmt unter anderem, welche Software in welcher Version zur Verfügung steht. Hier folgt deshalb eine kurze Einführung der für die Perl-Umgebung relevanten Umgebungsvariablen. Für die Installation von Perlmodulen sind diese nicht zwingend erforderlich, aber sie helfen beim Verständnis, wie Perl nach installierten Modulen sucht.

Perl sucht standardmäßig in bestimmten Verzeichnissen nach Modulen. Findet es dieses nicht, gibt es eine Fehlermeldung folgender Art aus:

Can't locate My/Module.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5

Die von Perl verwendeten Suchpfade können mit

$ perl -e "print \"@INC\""

aufgelistet werden und enthalten standardmäßig

  • /usr/local/lib64/perl5
  • /usr/local/share/perl5
  • /usr/lib64/perl5/vendor_perl
  • /usr/share/perl5/vendor_perl
  • /usr/lib64/perl5 /usr/share/perl5

Wird das Perl Modul auf dem BinAC geladen, ändert sich der Suchpfad

$ module load devel/perl/5.26
$ perl -e "print \"@INC\""

und enthält jetzt

  • /opt/bwhpc/common/devel/perl/5.26/lib/site_perl/5.26.1/x86_64-linux-thread-multi
  • /opt/bwhpc/common/devel/perl/5.26/lib/site_perl/5.26.1 /opt/bwhpc/common/devel/perl/5.26/lib/5.26.1/x86_64-linux-thread-multi

  • /opt/bwhpc/common/devel/perl/5.26/lib/5.26.1 /opt/bwhpc/common/devel/perl/5.26/lib

  • /opt/bwhpc/common/devel/perl/5.26/lib/site_perl/5.26.1/x86_64-linux-thread-multi

  • /opt/bwhpc/common/devel/perl/5.26/lib/site_perl/5.26.1

  • /opt/bwhpc/common/devel/perl/5.26/lib/5.26.1/x86_64-linux-thread-multi

  • /opt/bwhpc/common/devel/perl/5.26/lib/5.26.1

. Der Suchpfad hat sich also völlig geändert. In derselben Art ergänzen wir diese Liste um $HOME. Außerdem teilen wir cpanm mit, neue Module in $HOME zu installieren. Dazu nutzen wir das oben installierte local::lib.

Die Arbeitsumgebung wird folgendermaßen angepasst:

$ perl -I ~/perl5/lib/perl5/ -Mlocal::lib
PATH="~/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="~/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="~/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"~/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=~/perl5"; export PERL_MM_OPT;

Die Umgebungsvariablen PERL_MB_OPT und PERL_MM_OPT teilen Perl mit, wo neue Module installiert werden sollen. In diesem Fall sollen diese in $HOME/perl5 installiert werden.

Die Umgebungsvariable PERL5LIB definiert den Perls-Suchpfad. Auf diese weise werden die neu installierten Module auch von Perl gefunden.

Wenn neue Module installiert werden muss außerdem die Umgebungsvariable PERL_CPANM_HOME gesetzt sein. In diesem Fall soll cpanm die Module in $HOME/perl5 installiert werden:

$ eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
$ export PERL_CPANM_HOME=/tmp/cpanm_$USER

Die obigen Zeilen können auch in die ~/.bashrc geschrieben werden. Dann werden die Umgebungsvariablen bei jedem Login auf dem BinAC angepasst.

Neue Module installieren

Jetzt können wir Module mit cpanm installieren. Die Verwendung von cpanm hat gegenüber cpan den Vorteil, dass Abhängigkeiten automatisch mitinstalliert werden und die Fehlermeldungen genauer sind. Hier installieren wir exemplarisch das Modul Path::Tiny.

Wenn die oben beschriebenen Arbeitsumgebungsänderungen nicht in die ~/.bashrc aufgenommen wurden werden die in $HOME installierten Module nach einem erneuten Login nicht mehr gefunden und die Umgebungsvariablen müssen erneut angepasst werden.

$ cpanm Path::Tiny

Module entfernen

Module können ebenfalls mit cpanm entfernt werden.

$ cpanm --uninstall Path::Tiny

Arbeitsumgebung zurücksetzen

Wenn bei den obigen Änderungen an den Umgebungsvariablen ein Fehler passiert ist und die ~/.bashrc nicht verändert wurde, genügt es, sich ab- und wieder anzumelden. Die Arbeitsumgebung wird dann zurückgesetzt.

Wurde die ~/.bashrc verändert, müssen diese Änderungen rückgängig gemacht und sich erneut angemeldet werden.

Sollen die Spuren dieses Tutorials entfernt werden, können die folgenden Verzeichnisse problemlos gelöscht werden:

$ cd $HOME
$ rm -rf local-lib-2.000024
$ rm -rf perl5/
$ rm -rf .cpanm/