Paul Brunner: CPAN Module installieren

Gute Morgen,

Als php-Umsteiger und Perl-Neuling wurden mir als besondere Vorzüge von Perl das Umfangreiche Modulangebot und Möglichkeit unabhänig von der Konfiguration des Provider eigene Module dazu zu installieren gepriesen. Sehr verlockende Aussichten für einen Standard-PHP-Installations-Geplagten.

Alle Experten sind sich offensichtlich einig, das (1) das cpan.pm dafür am besten geeignet und (2) alles ganz einfach ist. Ich bin trotzdem zu blöd dazu.

Ich habe bei meinem Provider (Unix/Apache) natürlich weder Root-Rechte noch Shell-Zugang, muss die Module also lokal und per Programm installieren. Nach intensivem Studium diverser Dokumentation und How-to-in-two-easy-steps-Seiten und zahllosen vergeblichen Versuchen bin ich soweit gekommen:

MyConfig.pm in Verzeichnis /.cpan/CPAN hinterlegt:

--------------------------------
$CPAN::Config = {
  'build_cache' => q[10],
  'build_dir' => q[/homepages/27/ddxxxxxxx/htdocs/.cpan/build],
  'cache_metadata' => q[1],
  'cpan_home' => q[/homepages/27/ddxxxxxxx/htdocs/.cpan],
[...]
  'makepl_arg' => q[PREFIX=/homepages/27/ddxxxxxxx/htdocs/_test/modules/lib  INSTALLMAN1DIR=/homepages/27/ddxxxxxxx/htdocs/_test/modules/man1 INSTALLMAN3DIR=/homepages/27/ddxxxxxxx/htdocs/_test/modules/man3],
[...]
__END__
-------------------------------

und unter /_test/ folgendes Programm gestartet:

-------------------------------
#! /usr/bin/perl

use CPAN;

my $obj = CPAN::Shell->expand('Module','File::Find::Rule');
     $obj->install;
-------------------------------

Ergebnis: Noch ein netter 500er

  • 255 CGI returned nonzero status
    mkdir /root/.cpan: Permission denied at /usr/share/perl/5.6.1/CPAN.pm line 1145

Wenn ich das richtig interpretiere findet oder mag er also meine temporäre Konfiguration nicht.

Inzwischen bin ich so genervt, das ich kurz davor bin das Perl-Experiment abzubrechen bevor ich auch nur eine Zeile programmiert habe. Kann mir jemand helfen.

Gruß
Paul

P.S. In einigen Dokumentationen wird für die Position von .cpan/ auf $HOME oder $ENV{HOME} bezug genommen. Diese Variable schein bei mir leer zu sein und ist auch nicht Teil des %ENV-Hashes, seltsam!

  1. Gute Morgen,

    einige Module, namentlich die welche keine binaries benötigen, funktionieren auch wie folgt:

    Beispiel Config::IniFiles;

    -im aktuellen Verzeichnis /cgi-bin/ das Verzeichnis /Config erstellen.
    -die Datei Config.pm dort ablegen.

    Einbinden wie gehabt als
    use Config::IniFiles;

    Hintergrund: Das aktuelle Verzeichnis steht auch in @INC: .

    Ansonsten Pragma lib:
    use lib '/home/rosti/libraries';

    Module die als root installiert werden und einen c-kompiler erfordern, wie z.B. Date::Calc lassen sich so nicht verwenden, da fehlen dann die binaries.

    Gruss, Rolf

    1. Hallo Rolf,

      einige Module, namentlich die welche keine binaries benötigen, funktionieren auch wie folgt:

      Wie lassen sich die einen von den anderen unterscheiden?

      Ansonsten Pragma lib:
      use lib '/home/rosti/libraries';

      Das betrifft aber nur das Einbinden installierter Module, nicht die Installation selbst.

      Module die als root installiert werden und einen c-kompiler erfordern, wie z.B. Date::Calc lassen sich so nicht verwenden, da fehlen dann die binaries.

      Und das ist wohl mein Problem ;-)

      Gruss
      Paul

      1. Hallo Paul,

        einige Module, namentlich die welche keine binaries benötigen, funktionieren auch wie folgt:

        Wie lassen sich die einen von den anderen unterscheiden?

        Entweder wenn das Paket eine XS-Datei enthält oder die PM-Datei die Module DynaLoader oder XSLoader einbindet.

        Viele Grüße
          Patrick Canterino

        1. Hallo Patrick,

          Entweder wenn das Paket eine XS-Datei enthält oder die PM-Datei die Module DynaLoader oder XSLoader einbindet.

          Wenn ich das richtig verstehe ermoeglichen DynaLoader/XSLoader nicht die Installation sondern lediglich das dynamische Einbinden von c-Bibliotheken zur Laufzeit.

          Die Frage ob und fuer welche Module im Zuge einer Installation Binaries erstellt werden muessen, aber vor allem wie ich das bewerkstelligen kann ist leider damit nicht beantwortet.

          Gruss
          Paul

          1. Hallo Paul,

            Wenn ich das richtig verstehe ermoeglichen DynaLoader/XSLoader nicht die Installation sondern lediglich das dynamische Einbinden von c-Bibliotheken zur Laufzeit.

            Wenn das Modul C-Erweiterungen hat, muss es diese ja auch mit DynaLoader oder XSLoader laden. Und diese C-Erweiterungen liegen normalerweise als Binaries vor.

            Die Frage ob und fuer welche Module im Zuge einer Installation Binaries erstellt werden muessen, aber vor allem wie ich das bewerkstelligen kann ist leider damit nicht beantwortet.

            Frage doch einfach deinen Provider.

            Viele Grüße
              Patrick Canterino