Probleme beim Installieren eines Moduls
Johnny B.
- perl
Hallo SelfForum,
nach etlichen Stunden ergebnislosen Herumprobierens wende ich mich hilfesuchend an diese Community. Was bisher geschah:
Ich möchte das Modul WWW::Mechanize installieren und habe keinen root-Zugriff.
Download von CPAN, Upload per FTP, dann mit SSH (PuTTY) Makefile.PL, make, make test gemacht und...
...WWW::Mechanize benötigt weitere Module, die nicht installiert sind. Nachdem ich mich vier Ebenen nach unten gearbeitet habe, ist das Modul Pod::Escapes installiert, welches von Pod::Simple benötigt wird...
...aber nicht gefunden wird! Die Rückfrage bei meinem Provider ergab: ich soll die Enviroment-Variable "PERL5LIB=/usr/home/pfad/zu/meiner/cgi-bin" setzen. Ich habe PuTTY angewiesen, dies zu tun, erhalte dann allerdings die Fehlermeldung "Server refused to set enviroment variables". Die Nachfrage an meinen Provider ergab bisher weiter nichts.
ERSTE SACKGASSE!
Daraufhin probiere ich es über die CPAN-Shell und gebe in PuTTY ein:
perl -MCPAN -e shell
Statt der erhofften CPAN-Shell erhalte ich folgende Fehlermeldung:
mkdir /etc/perl: Permission denied at /usr/share/perl/5.8/CPAN.pm line 1252
ZWEITE SACKGASSE!
Ich schreibe mir ein Perl-Script, welches die Module installieren soll. Die erste Version gibt dieselbe Fehlermeldung aus wie das direkte Ansteuern der Shell:
mkdir /etc/perl: Permission denied at /usr/share/perl/5.8/CPAN.pm line 1252
Ich finde eine CPAN::Config-Vorlage im Netz, wo ich die Installationsverzeichnisse angeben kann. Das Ganze sieht dann so aus:
<<< START >>>
#!/usr/bin/perl -w
use strict;
use warnings;
use CGI::Carp "fatalsToBrowser";
use CGI qw(:standard :html3);
use CPAN;
$CPAN::Config = {
'build_cache' => q[10],
'build_dir' => q[~/.cpan/build],
'cache_metadata' => q[1],
'cpan_home' => q[~/.cpan],
'cpan_version_check' => q[1],
'dontload_hash' => { },
'ftp' => q[/usr/bin/ftp],
'ftp_proxy' => q[],
'getcwd' => q[cwd],
'gpg' => q[/usr/bin/gpg],
'gzip' => q[/bin/gzip],
'histfile' => q[~/.cpan/histfile],
'histsize' => q[100],
'http_proxy' => q[],
'inactivity_timeout' => q[0],
'index_expire' => q[1],
'inhibit_startup_message' => q[0],
'keep_source_where' => q[~/.cpan/sources],
'lynx' => q[/usr/bin/lynx],
'make' => q[/usr/bin/make],
'make_arg' => q[],
'make_install_arg' => q[UNINST=0],
'makepl_arg' => q[PREFIX=~/cgi-bin/lib LIB=~/cgi-bin/lib INSTALLMAN1DIR=~/cgi-bin/man/man1 INSTALLMAN3DIR=~/cgi-bin/man/man3],
'ncftpget' => q[/usr/bin/ncftpget],
'no_proxy' => q[],
'pager' => q[/usr/bin/less],
'prerequisites_policy' => q[ask],
'scan_cache' => q[atstart],
'shell' => q[/bin/bash],
'tar' => q[/bin/tar],
'term_is_latin' => q[0],
'unzip' => q[/usr/bin/unzip],
'urllist' => [q[http://cpan.mirror.solnet.ch]],
'wget' => q[/usr/bin/wget],
};
CPAN::Shell->install("WWW::Mechanize");
print "Content-type: text/html\n\n";
print "fertig";
exit;
<<< END >>>
Dieses Script gibt dann keine Fehlermeldung mehr aus, sondern endet in einem 500er Fehler. Das Error-Log sagt folgendes aus:
[2009-03-07 15:23:06]: /cgi-bin/gocpan.pl: [Sat Mar 7 15:23:06 2009] gocpan.pl: Use of uninitialized value in join or string at /usr/share/perl/5.8/File/Spec/Unix.pm line 37.
[Sat Mar 07 15:23:07 2009] [error] [client xx.xxx.xx.xx] malformed header from script. Bad header=Going to read ~/.cpan/Metadata: gocpan.pl
[2009-03-07 15:23:06]: /cgi-bin/gocpan.pl: [Sat Mar 7 15:23:08 2009] gocpan.pl:
Es legt vorher ein Verzeichnis '~' im Verzeichnis 'cgi-bin' an und schreibt dort mehrere Unterverzeichnisse und Dateien hinein. Ich vermute, daß das Script aufgrund von zu hohem Ressourcen-Verbrauch gestoppt wurde?
DRITTE SACKGASSE!
...und nun bin ich mit meinem Latein am Ende. Eigentlich bin ich noch nicht einmal AM ANFANG, denn das Modul zu installieren ist ja nicht Selbstzweck, sondern ich wollte es nutzen, um etwas damit zu programmieren. Das war vor über einer Woche und ich weiß jetzt keinen Rat mehr. Hat hier jemand noch einen Rat für mich?
1000Dank!
Ich bin mir sicher, dieses Thema wurde schon über 9000 Mal abgehandelt. Du hast die Perl-FAQ nicht gelesen. http://p3rl.org/faq8#How-do-I-keep-my-own-module%2Flibrary-directory%3F Aber wer liest schon Doku.
Im Grunde setzt du in der CPAN-Shell folgende zwei Konfigurationen:
o conf makepl_arg INSTALL_BASE=/home/nutzername/basisverzeichnis
o conf mbuildpl_arg --install_base /home/nutzername/basisverzeichnis
Das o ist ein tatsächliches o und steht für Option; es gehört zum Befehl dazu. Die Sachen sind in http://search.cpan.org/perldoc?CPAN#Config_Variables beschrieben. Vom Einsatz von PREFIX für makepl_arg ist abzuraten.
tl;dr:
Wenn dir das zu viel Aufwand ist, wirst du mit local::lib glücklich. http://search.cpan.org/dist/local-lib/ Dies hat keine weiteren Abhängigkeiten und bootstrappst dich gleich in eine Umgebung, wie du sie brauchst.
Hallo Gast,
vielen Dank für die schnelle Antwort.
Leider hilft mir das nicht, denn:
Im Grunde setzt du in der CPAN-Shell folgende zwei Konfigurationen:
--- in die CPAN-Shell komme ich ja gar nicht erst rein... :(
<<< Zitat mein Posting: >>>
Daraufhin probiere ich es über die CPAN-Shell und gebe in PuTTY ein:
perl -MCPAN -e shell
Statt der erhofften CPAN-Shell erhalte ich folgende Fehlermeldung:
mkdir /etc/perl: Permission denied at /usr/share/perl/5.8/CPAN.pm line 1252
<<< Zitat Ende >>>
Ich bin mir sicher, daß ich das Modul installieren kann, wenn ich es schaffe, an die CPAN-Shell zu gelangen.
Bitte um weitere Ratschläge...
1001Dank!
Um local::lib zu installieren, brauchst du die CPAN-Shell nicht. Es hat keine weiteren Abhängigkeiten. Also einfach runterladen, auspacken, und den Abschnitt »To bootstrap if you don't have local::lib itself installed« in der Doku befolgen. http://search.cpan.org/perldoc?local::lib
mkdir /etc/perl: Permission denied
Du solltest mal deine CPAN-Shell-Konfiguration bereinigen. Schau in ~/.cpan/CPAN/MyConfig.pm, es gibt auch noch andere Orte abhängig vom Vendor, wo sie sein könnte.
Es ist in Ordnung, die Konfigurationsdatei komplett zu entfernen, beim ersten Aufruf der CPAN-Shell wird die Konfiguration noch mal auf Wunsch abgefragt und eine neue Datei geschrieben.
Hallo Gast,
nochmal besten Dank für die Antwort.
Um local::lib zu installieren, brauchst du die CPAN-Shell nicht. Es hat keine weiteren Abhängigkeiten. Also einfach runterladen, auspacken, und den Abschnitt »To bootstrap if you don't have local::lib itself installed« in der Doku befolgen. http://search.cpan.org/perldoc?local::lib
--- ich lade local::lib aus CPAN, entpacke und wechsele ins Verzeichnis. Dann befolge ich die Anweisungen, aber irgendwas scheint nicht so zu laufen, wie es sollte:
<<< START >>>
perl Makefile.PL --bootstrap
Attempting to create directory /xxx/perl5
Attempting to create file /xxx/perl5/.modulebuildrc
ExtUtils::MakeMaker version 6.31 required--this is only version 6.30_01.
BEGIN failed--compilation aborted.
CPAN version 1.8 required--this is only version 1.7602.
BEGIN failed--compilation aborted.
Prototype mismatch: sub ExtUtils::MakeMaker::prompt ($;$) vs none at -e line 9.
mkdir /etc/perl: Permission denied at /usr/share/perl/5.8/CPAN.pm line 1252
mkdir /etc/perl: Permission denied at /usr/share/perl/5.8/CPAN.pm line 1252
mkdir /etc/perl: Permission denied at /usr/share/perl/5.8/CPAN.pm line 1252
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
==> Should we try to install the required module(s) anyway? [n] n
*** Module::AutoInstall installation finished.
Warning: prerequisite CPAN 1.80 not found. We have 1.7602.
Warning: prerequisite ExtUtils::CBuilder 0 not found.
Warning: prerequisite ExtUtils::MakeMaker 6.31 not found. We have 6.3001.
Warning: prerequisite ExtUtils::ParseXS 0 not found.
Warning: prerequisite Module::Build 0.28 not found.
'INSTALL_BASE' is not a known MakeMaker parameter name.
Writing Makefile for local::lib
[19:44:19] server282-han:~/www.xxx.de/cgi-bin/temp/local-lib-1.003002 >
[19:45:17] server282-han:~/www.xxx.de/cgi-bin/temp/local-lib-1.003002 > make test && make install
/usr/local/bin/perl "-Iinc" Makefile.PL --config= --installdeps=ExtUtils::MakeMaker,6.31,ExtUtils::CBuilder,0,ExtUtils::ParseXS,0,Module::Build,0.28,CPAN,1.80
*** Installing dependencies...
*** You are not allowed to write to the directory '/sources';
the installation may fail due to insufficient permissions.
==> Should we try to install the required module(s) anyway? [n]
<<< ENDE >>>
Es wurde in mein Hauptverzeichnis ein Verzeichnis "perl5" erstellt. Außerdem etwas in cgi-bin.
Der dritte Schritt nach Makefile und make test && make install ist
echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >>~/.bashrc
"echo" heißt doch, daß eine Ausgabe erfolgen sollte, oder nicht? Wenn ich die Zeile so eingebe wie oben, passiert weiter nichts.
Wenn ich dann ein Modul installieren will auf folgende Weise:
perl Makefile.PL --bootstrap=~/cgi-bin
Checking if your kit is complete...
Looks good
'--BOOTSTRAP' is not a known MakeMaker parameter name.
Writing Makefile for Pod::Escapes
[20:10:11] server282-han:~/www.xxx.de/cgi-bin/temp/Pod-Escapes-1.04 >
Doch wie geht es jetzt weiter? Ich verstehe das Wirken von local::lib leider überhaupt nicht. Wahrscheinlich ist es ganz einfach, aber ich versuche jetzt seit über einer Woche, dieses Modul WWW::Mechanize zu installieren und mir raucht die Birne...
»» mkdir /etc/perl: Permission denied
Du solltest mal deine CPAN-Shell-Konfiguration bereinigen. Schau in ~/.cpan/CPAN/MyConfig.pm, es gibt auch noch andere Orte abhängig vom Vendor, wo sie sein könnte.
Es ist in Ordnung, die Konfigurationsdatei komplett zu entfernen, beim ersten Aufruf der CPAN-Shell wird die Konfiguration noch mal auf Wunsch abgefragt und eine neue Datei geschrieben.
--- es gibt bei mir kein Verzeichnis ~/.cpan/CPAN?!??
Beim ersten Aufruf der CPAN-Shell kam der beschriebene Fehler. Ich hab die CPAN-Shell-Konfiguration noch nie gesehen... Und Server-Root-Rechte um in die Perl-Dateien reinzukommen, habe ich nicht.
Kannst Du mir den Weg noch etwas erhellen?
1002Dank!
Okay, local::lib ist leider eine Sackgasse. Ich helfe dir, wieder aufzuräumen.
»» Es hat keine weiteren Abhängigkeiten.
Das stimmt wohl nicht ganz, die Abhängigkeiten werden mit Perl mitgeliefert, aber sind auf deinem System zu alt. Mir ist dieser Umstand vorher nicht aufgefallen, weil ich ein modernes Perl habe.
Sieht man hier:
ExtUtils::MakeMaker version 6.31 required--this is only version 6.30_01.
CPAN version 1.8 required--this is only version 1.7602.
Meiner Meinung nach ist es nicht sinnvoll, die Abhängigkeiten zu holen, um sie temporär zu installieren, um local::lib zu installieren, um ein lokales Module-Verzeichnis zu bootstrappen, um WWW::Mechanize zu installieren. Du kennst bestimmt das Lied »Wenn der Topf aber nun ein Loch hat« - so ein elendes Gefrickle will ich dir Neuling nicht zumuten. Gute Lösung am Ende dieses Postings.
Die nächste Frage richte ich mal an die anderen in der Runde:
mkdir /etc/perl: Permission denied at /usr/share/perl/5.8/CPAN.pm line 1252
Offensichtlich ist das CPAN 1.7602 auf 5.8.8, http://cpansearch.perl.org/src/NWCLARK/perl-5.8.8/lib/CPAN.pm. Wenn man sich mal Zeile 1252 und davor anschaut, wird der Config-Pfad relativ zum Standort von CPAN.pm gesetzt. Wie kommt /etc/perl beim Johnny zustande, wo doch das Modul in /usr/share/... liegt?
Außerdem etwas in cgi-bin.
Aus sicherheitstechnischen Gründen ist es eine ganz schlechte Idee, Perlmodule in cgi-bin zu installieren. Lösche alles außer deinen wirklichen CGI-Programmen.
echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >>~/.bashrc
"echo" heißt doch, daß eine Ausgabe erfolgen sollte, oder nicht? Wenn ich die Zeile so eingebe wie oben, passiert weiter nichts.leitet die Ausgabe um und hängt sie an besagte Datei an. Schau rein, lösche die letzten paar Befehle raus, die so anfangen:
export MODULEBUILDRC=
export PERL_MM_OPT=
export PERL5LIB=
export PATH=
Lösche auch das Verzeichnis ~/perl5. Damit bist du wieder sauber und die Veränderungen von local::lib sind rückgängig gemacht.
»» Du solltest mal deine CPAN-Shell-Konfiguration bereinigen. Schau in ~/.cpan/CPAN/MyConfig.pm, es gibt auch noch andere Orte abhängig vom Vendor, wo sie sein könnte.
--- es gibt bei mir kein Verzeichnis ~/.cpan/CPAN?!??
Wie gesagt kann sie woanders sein. Ich habe auch gesehen, ein alternativer Dateiname ist »Config.pm«. Der Befehl »locate« zum Aufspüren von Dateien ist das angebrachte Werkzeug.
Aber egal. Mein Vorschlag für dich ist, dein eigenes Perl in deinem Homeverzeichnis zu installieren. Die Vorteile liegen auf der Hand:
* Du kriegst moderne Software aus dem Jahr 2008, nicht 2006. Standardmodule liegen in halbwegs neuer Version vor, und sind auch leichter upzugraden.
* Du musst dich nie mehr mit PERL5LIB, PREFIX, INSTALL_BASE und deren Konfiguration in der CPAN-Shell ärgern, du musst nie 'use lib ...' benutzen. Wenn du zusätzliche Module installierst, gelangen sie in Pfade, die bereits in @INC sind.
Live-Hilfe erhältst du auf irc.perl.org im Kanal #perlde.
So geht's in aller Schnelle: http://www.cpan.org/src/perl-5.10.0.tar.gz runterladen und auspacken, in der Datei INSTALL den Abschnitt »Installation prefix« lesen.
sh Configure -Dprefix=$HOME/local -des
make
make test
make install
Das Ergebnis davon ist, dass du $HOME/local/bin, $HOME/local/lib usw. bekommst. Nimm $HOME/local/bin in deinen PATH auf, und zukünftig fangen deine Programme mit dem Shebang »#!/home/benutzer/local/bin/perl« an. Ich glaube nämlich, wenn Perl auf deiner Kiste schon so alt ist, wirst du noch andere Software lokal in deinem Verzeichnis installieren wollen, um an moderne Versionen zu gelangen. Enorm viele Sachen basieren auf GNU autoconf, erkennbar am Schema zum Installieren:
./configure
make
make install
Gib in diesem Falle
./configure --prefix=$HOME/local
an, und zusätzliche Software fügt sich nett in dieses Gebilde ein.
Hallo Gast!
Erstmal vielen Dank für Deine ausführlichen Antworten an Johnny und die Zeit, die Du dafür investierst!
Die nächste Frage richte ich mal an die anderen in der Runde:
»» mkdir /etc/perl: Permission denied at /usr/share/perl/5.8/CPAN.pm line 1252
Offensichtlich ist das CPAN 1.7602 auf 5.8.8, http://cpansearch.perl.org/src/NWCLARK/perl-5.8.8/lib/CPAN.pm. Wenn man sich mal Zeile 1252 und davor anschaut, wird der Config-Pfad relativ zum Standort von CPAN.pm gesetzt. Wie kommt /etc/perl beim Johnny zustande, wo doch das Modul in /usr/share/... liegt?
Ich hatte/habe hier ähnliche Probleme. Vielleicht ist Johnny auch bei 1und1? Im weiteren Verlauf dieses Thread-Zweigs ging es um File::Find, bis ich herausfand, das bei 1und1 Symlinks in @INC enthalten sind, denen File::Find ohne explizite Anweisung wg. Deep Recursion nicht folgt.
Nur eine Feststellung aufgrund meiner bescheidenen Kenntnisse und Erfahrung, viellicht ist es in irgendeiner Form hilfreich...
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo Gast,
superDANK für Deine erneute Antwort. Ich bewundere Deine Geduld...
(und ich hoffe, sie ist noch nicht am Ende?!?? s.u.)
Okay, local::lib ist leider eine Sackgasse. Ich helfe dir, wieder aufzuräumen.
--- das hört sich prima an!
Meiner Meinung nach ist es nicht sinnvoll, die Abhängigkeiten zu holen, um sie temporär zu installieren, um local::lib zu installieren, um ein lokales Module-Verzeichnis zu bootstrappen, um WWW::Mechanize zu installieren. Du kennst bestimmt das Lied »Wenn der Topf aber nun ein Loch hat« - so ein elendes Gefrickle will ich dir Neuling nicht zumuten. Gute Lösung am Ende dieses Postings.
--- elendes Gefrickle - genau so fühlt es sich an... (Die Verzweiflung des Nicht-Verstehens...)
»» Außerdem etwas in cgi-bin.
Aus sicherheitstechnischen Gründen ist es eine ganz schlechte Idee, Perlmodule in cgi-bin zu installieren. Lösche alles außer deinen wirklichen CGI-Programmen.
--- ok, dann habe ich in cgi-bin meine eigenen Scripte, und in meinem Hauptverzeichnis dann die logs, mails, meine eigenen Dateien und demnächst hoffentlich local/perl und dadrunter sind dann alle Module?
leitet die Ausgabe um und hängt sie an besagte Datei an. Schau rein, lösche die letzten paar Befehle raus, die so anfangen:
export MODULEBUILDRC=
export PERL_MM_OPT=
export PERL5LIB=
export PATH=
--- besagte Datei enthält ausschließlich:
eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)
eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)
Hab jetzt die ganze Datei gelöscht...?!
Lösche auch das Verzeichnis ~/perl5. Damit bist du wieder sauber und die Veränderungen von local::lib sind rückgängig gemacht.
--- yepp, done...
So geht's in aller Schnelle: http://www.cpan.org/src/perl-5.10.0.tar.gz runterladen und auspacken, in der Datei INSTALL den Abschnitt »Installation prefix« lesen.
sh Configure -Dprefix=$HOME/local -des
--- diese Möglichkeit habe ich auch schonmal angedacht, habe ich aber nicht rangetraut. Nundenn, mit Hilfe gewappnet mache ich mich frohen Mutes frisch ans Werk und was sagt mir das Programm? ... :
<<< START >>>
sh Configure -Dprefix=$HOME/local -des
Configure: line 92: uname: command not found
First let's make sure your kit is complete. Checking...
Locating common programs...
Checking compatibility between /bin/echo and builtin echo (if any)...
Symbolic links are supported.
Checking how to test for symbolic links...
You can test for symbolic links with 'test -h'.
Good, your tr supports [:lower:] and [:upper:] to convert case.
Using [:upper:] and [:lower:] to convert case.
3b1 dos_djgpp irix_6_0 nonstopux sunos_4_0
aix dragonfly irix_6_1 openbsd sunos_4_1
aix_3 dynix isc opus super-ux
aix_4 dynixptx isc_2 os2 svr4
altos486 epix linux os390 svr5
amigaos esix4 lynxos os400 ti1500
apollo fps machten posix-bc titanos
atheos freebsd machten_2 powerux ultrix_4
aux_3 genix midnightbsd qnx umips
beos gnu mint rhapsody unicos
bsdos gnukfreebsd mips riscos unicosmk
catamount gnuknetbsd mpc sco unisysdynix
convexos greenhills mpeix sco_2_3_0 utekv
cxux hpux ncr_tower sco_2_3_1 uts
cygwin i386 netbsd sco_2_3_2 uwin
darwin interix newsos4 sco_2_3_3 vmesa
dcosx irix_4 next_3 sco_2_3_4 vos
dec_osf irix_5 next_3_0 solaris_2
dgux irix_6 next_4 stellar
Which of these apply, if any? [none]
Operating system name? [none]
Operating system version? [none]
Installation prefix to use? (~name ok) [/xxx/local]
Directory /xxx/local doesn't exist. Use that name anyway? [y]
AFS does not seem to be running...
What installation prefix should I use for installing files? (~name ok)
[/xxx/local]
Directory /xxx/local doesn't exist. Use that name anyway? [y]
Build Perl for SOCKS? [n]
Use the PerlIO abstraction layer? [y]
Getting the current patchlevel...
Build a threading Perl? [n]
Build Perl for multiplicity? [n]
Use which C compiler? [cc]
./trygcc: line 10: cc: command not found
Uh-oh, the C compiler 'cc' doesn't seem to be working.
You seem to have a working gcc, though.
Would you like to use it? [y]
Checking for GNU cc in disguise and/or its version number...
Now, how can we feed standard input to your C preprocessor...
Directories to use for library searches? [/usr/local/lib /lib /usr/lib]
What is the file extension used for shared libraries? [so]
Try to use long doubles if available? [n]
Checking for optional libraries...
What libraries to use? [-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc]
What optimizer/debugger flag should be used? [-O]
Any additional cc flags? [-fno-strict-aliasing -pipe]
Let me guess what the preprocessor flags are...
Any additional ld flags (NOT including libraries)? [ -L/usr/local/lib]
Checking your choice of C compiler and flags for coherency...
I've tried to compile and run the following simple program:
#include <stdio.h>
int main() { printf("Ok\n"); return(0); }
I used the command:
gcc -o try -O -fno-strict-aliasing -pipe -L/usr/local/lib try.c -lnsl -l gdbm -ldb -ldl -lm -lcrypt -lutil -lc
./try
and I got the following output:
/usr/bin/ld: cannot find -ldb
collect2: ld returned 1 exit status
I can't compile the test program.
You have a BIG problem. Shall I abort Configure [y]
<<< ENDE >>>
Also wenn ich nicht schon so ewig an dieser Sache festhängen würde, ohne wirklich weiterzukommen, würde ich über Äußerungen wie:
"Uh-oh, the C compiler 'cc' doesn't seem to be working."
und
"You have a BIG problem."
schmunzeln.
Dummerweise bewege ich mich hier seit einer guten Woche auf Terrain, von dem ich mit Glück gerade mal 25% verstehe und ansonsten viel Bahnhof und "Uh-oh" achwas? Dabei lese ich permanent, wie einfach es doch eigentlich ist... <heul doch> <ja mach ich auch!>
Kann mir jemand sagen, was denn mein "BIG Problem" ist und wie ich weiterkommen kann? Mille Grazie...
1003Dank!
P.S.
Ich bin übrigens bei Profihost, nicht 1und1, Patrick.
--- ok, dann habe ich in cgi-bin meine eigenen Scripte, und in meinem Hauptverzeichnis dann die logs, mails, meine eigenen Dateien und demnächst hoffentlich local/perl und dadrunter sind dann alle Module?
Ja, hört sich vernünftig an. Die Hauptsache ist, dass du keine Dateien in cgi-bin und public_html ablegst, bei denen du gar nicht die Absicht hast, sie wirklich übers Web auszuliefern.
--- besagte Datei enthält ausschließlich:
eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)
eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)
Hab jetzt die ganze Datei gelöscht...?!
Ist okay so.
./trygcc: line 10: cc: command not found
Uh-oh, the C compiler 'cc' doesn't seem to be working.
Das ist kein Problem, denn:
You seem to have a working gcc, though.
I used the command:
gcc -o try -O -fno-strict-aliasing -pipe -L/usr/local/lib try.c -lnsl -l gdbm -ldb -ldl -lm -lcrypt -lutil -lc
./tryand I got the following output:
/usr/bin/ld: cannot find -ldb
collect2: ld returned 1 exit status
I can't compile the test program.
Du solltest eine config.sh dort liegen haben. Bearbeite sie und finde die Zeile, die mit »libs=« anfängt. Lösche dort »-ldb« raus. Starte die Konfiguration nochmal, ohne den Parameter für automatische Erkennung (»-des«), so:
sh Configure -Dprefix=$HOME/local
Lese und bestätige die Prompts, bis du gefragt wirst, ob du die Antworten aus config.sh laden möchtest. Antworte dort mit »y«. Danach kannst du den Rest wieder automatisch laufen lassen, wie es dir in den Prompts zu Anfang erklärt wurde (also »& -d«). Ich hoffe, der Configure-Schritt läuft diesmal gut bis zum Ende durch.
Kann mir jemand sagen, was denn mein "BIG Problem" ist
Dein Hosting-Provider stellt keine angemessene Entwicklungsumgebung für Perl bereit. (Dazu gehört für mich als Mindestgrundlage Perl 5.10; die komplette Compiler-Toolkette; alle C-Libraries, die zum Kompilieren von Perl, Apache und Perl-Modulen benötigt werden; sowie C-Header für alle installierten Libraries.) Daraus ergeben sich alle deine lustigen Probleme.
Ich persönlich hätte ihn schon zum Mond geschossen und mir einen sauberen gesucht, bei dem Experten das System aufsetzen und pflegen.
Du solltest eine config.sh dort liegen haben.
--- ich finde drei:
perl-5.10.0/epoc/ mit 21kb
perl-5.10.0/Porting/ mit 28kb
perl-5.10.0/symbian/ mit 16kb
Soll ich alle bearbeiten?
1004Dank!
Nein, die config.sh liegt im Basisverzeichnis der Quellen, also dort, wo auch das Programm Configure ist. Es gibt wohl noch keine config.sh da, weil Configure noch nicht komplett durchgelaufen ist.
Rufe auf:
sh Configure -Dprefix=$HOME/local
und bestätige die Antworten. Und ungefähr die zwölfte Frage lautet dann:
What libraries to use?
In den eckigen Klammern danach kommt die Vorgabe. Diese tippst/fügst sie noch mal so ein, wie sie dasteht, aber ohne »-ldb«. Danach kannst du den Rest der Fragen automatisch durchlaufen lassen, wie schon vorher beschrieben.
Ok, der Configure-Schritt lief durch. Ich habe jetzt auch die configure.sh im Quellenverzeichnis. Die (das?) Libary -ldb ist gelöscht und somit wird auch der Fehler nicht mehr verursacht.
Der Fehler nicht, allerdings läuft es leider immer noch nicht durch.
Nach make, make test und make install habe ich keine neuen Verzeichnisse $HOME/local/bin usw. Ich kann gar keine neuen Verzeichnisse finden?!
Hier die Ausgabe vom SSH:
<<< START >>>
Making DynaLoader (static)
opendir(./../../../../../../..): Permission denied at ../../lib/File/Spec/Unix.pm line 478
opendir(./../../../../../../..): Permission denied at ../../lib/File/Spec/Unix.pm line 478
Writing Makefile for DynaLoader
make[1]: Entering directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ext/DynaLoader' /bin/sh: /miniperl: No such file or directory make[1]: \*\*\* [../../lib/.exists] Error 127 make[1]: Leaving directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ext/DynaLoader'
make config failed, continuing anyway...
make[1]: Entering directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ext/DynaLoader' /bin/sh: /miniperl: No such file or directory make[1]: \*\*\* [../../lib/.exists] Error 127 make[1]: Leaving directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ext/DynaLoader'
make: *** [DynaLoader.o] Error 2
[13:18:51] server282-han:~/www.xxx.de/cgi-bin/temp/perl-5.10.0 > make test
AutoSplitting perl library
./miniperl -Ilib -e 'use AutoSplit; \
autosplit_lib_modules(@ARGV)' lib/*.pm
./miniperl -Ilib -e 'use AutoSplit; \
autosplit_lib_modules(@ARGV)' lib/*/*.pm
make lib/re.pm
make[1]: Entering directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0' make[1]:
lib/re.pm' is up to date.
make[1]: Leaving directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0' cd x2p; make s2p make[1]: Entering directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/x2p'
../miniperl -I../lib s2p.PL
Extracting s2p (with variable substitutions)
Linking s2p to psed.
make[1]: Leaving directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/x2p' ./miniperl -I
pwd/lib pod/pod2html.PL Extracting pod2html (with variable substitutions) ./miniperl -I
pwd/lib pod/pod2latex.PL Extracting pod2latex (with variable substitutions) ./miniperl -I
pwd/lib pod/pod2man.PL Extracting pod2man (with variable substitutions) ./miniperl -I
pwd/lib pod/pod2text.PL Extracting pod2text (with variable substitutions) ./miniperl -I
pwd/lib pod/pod2usage.PL Extracting pod2usage (with variable substitutions) ./miniperl -I
pwd/lib pod/podchecker.PL Extracting podchecker (with variable substitutions) ./miniperl -I
pwd`/lib pod/podselect.PL
Extracting podselect (with variable substitutions)
Making utilities
make[1]: Entering directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/utils' ../miniperl -I../lib c2ph.PL Extracting c2ph (with variable substitutions) Linking c2ph to pstruct. ../miniperl -I../lib config\_data.PL Extracting config\_data (with variable substitutions) ../miniperl -I../lib corelist.PL Extracting corelist (with variable substitutions) ../miniperl -I../lib cpan.PL Extracting cpan (with variable substitutions) ../miniperl -I../lib h2ph.PL Extracting h2ph (with variable substitutions) ../miniperl -I../lib h2xs.PL Extracting h2xs (with variable substitutions) ../miniperl -I../lib instmodsh.PL Extracting instmodsh (with variable substitutions) ../miniperl -I../lib perlbug.PL Extracting perlbug (with variable substitutions) ../miniperl -I../lib perldoc.PL Extracting "perldoc" (with variable substitutions) ../miniperl -I../lib perlivp.PL Extracting perlivp (with variable substitutions) ../miniperl -I../lib pl2pm.PL Extracting pl2pm (with variable substitutions) ../miniperl -I../lib prove.PL Extracting prove (with variable substitutions) ../miniperl -I../lib ptar.PL Extracting ptar (with variable substitutions) ../miniperl -I../lib ptardiff.PL Extracting ptardiff (with variable substitutions) ../miniperl -I../lib cpanp-run-perl.PL Extracting cpanp-run-perl (with variable substitutions) ../miniperl -I../lib cpanp.PL Extracting cpanp (with variable substitutions) ../miniperl -I../lib cpan2dist.PL Extracting cpan2dist (with variable substitutions) ../miniperl -I../lib shasum.PL Extracting shasum (with variable substitutions) ../miniperl -I../lib splain.PL Extracting splain (with variable substitutions) ../miniperl -I../lib dprofpp.PL Extracting dprofpp (with variable substitutions) ../miniperl -I../lib libnetcfg.PL Extracting libnetcfg (with variable substitutions) ../miniperl -I../lib piconv.PL Extracting piconv (with variable substitutions) ../miniperl -I../lib enc2xs.PL Extracting enc2xs (with variable substitutions) ../miniperl -I../lib xsubpp.PL Extracting xsubpp (with variable substitutions) make[1]: Leaving directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/utils'
Making DynaLoader (static)
make[1]: Entering directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ext/DynaLoader' /bin/sh: /miniperl: No such file or directory make[1]: \*\*\* [../../lib/.exists] Error 127 make[1]: Leaving directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ext/DynaLoader'
make config failed, continuing anyway...
make[1]: Entering directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ext/DynaLoader' /bin/sh: /miniperl: No such file or directory make[1]: \*\*\* [../../lib/.exists] Error 127 make[1]: Leaving directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ext/DynaLoader'
make: *** [DynaLoader.o] Error 2
make install.perl install.man STRIPFLAGS= DESTDIR=""
make[1]: Entering directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0 ' AutoSplitting perl library ./miniperl -Ilib -e 'use AutoSplit; \ autosplit\_lib\_modules(@ARGV)' lib/\*.pm ./miniperl -Ilib -e 'use AutoSplit; \ autosplit\_lib\_modules(@ARGV)' lib/\*/\*.pm make lib/re.pm make[2]: Entering directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0 '
make[2]: lib/re.pm' is up to date. make[2]: Leaving directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0'
Making DynaLoader (static)
make[2]: Entering directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0 /ext/DynaLoader' /bin/sh: /miniperl: No such file or directory make[2]: \*\*\* [../../lib/.exists] Error 127 make[2]: Leaving directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ ext/DynaLoader'
make config failed, continuing anyway...
make[2]: Entering directory /xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0 /ext/DynaLoader' /bin/sh: /miniperl: No such file or directory make[2]: \*\*\* [../../lib/.exists] Error 127 make[2]: Leaving directory
/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0/ ext/DynaLoader'
make[1]: *** [DynaLoader.o] Error 2
make[1]: Leaving directory `/xxx/www.xxx.de/cgi-bin/temp/perl-5.10.0'
make: *** [install] Error 2
[13:20:08] server282-han:~/www.xxx.de/cgi-bin/temp/perl-5.10.0 >
<<< ENDE >>>
Sollte ich es nocheinmal versuchen und statt $HOME/local den Pfad zu meinem Home-Verzeichnis direkt eingeben, also ausgehend vom Verzeichnis, in dem die temp-Dateien sind(../../../local)? Hat da was nicht geklappt?
/bin/sh: /miniperl: No such file or directory
Wenn ich in meine perl-5.10.0/ext/DynaLoader/Makefile schaue, sehe ich
PERL = ../../miniperl
[...]
ABSPERL = /home/benutzer/perl-5.10.0/ext/DynaLoader/../../miniperl
Wie wird bei dir daraus nur »/miniperl«? Keine Ahnung, vermutlich hat es was mit diesem Fehler vorher zu tun:
opendir(./../../../../../../..): Permission denied at ../../lib/File/Spec/Unix.pm line 478
Zur Info für andere Mitlesende: Diese Zeile 478 ist
Cwd::getcwd();
Das ist leider eine XS-Funktion; ich kann daher nicht genau sagen, unter welchen Bedingungen sie versagt.
Johnny: Vermutlich hast du mehr Fehler unterschlagen, die noch davor kamen. Ich kann diesmal ganz schlecht aus der Entfernung diagnostizieren und nur vage Vermutungen anstellen. Hm, 6 Ebenen aufwärts von dort aus ist das Homeverzeichnis...
ls -ld $HOME
sollte als Permissions linkerhand »drwxr-xr-x« zeigen oder womöglich »drwx------«. Überprüfe mal die Kette der Verzeichnisse von / bis zum Ort, wo der Fehler aufgeworfen wurde, ob es seltsame Permissions gibt. Hinweis: das Attribut »x« bei einem Verzeichnis bedeutet nicht etwa »ausführbar«, sondern »durchsuchbar«. In einem Verzeichnis ohne dieses können keine Dateien aufgelistet werden.
Sollte ich es nocheinmal versuchen und statt $HOME/local den Pfad zu meinem Home-Verzeichnis direkt eingeben, also ausgehend vom Verzeichnis, in dem die temp-Dateien sind(../../../local)?
Ich empfehle, nochmal sauber von vorne anzufangen und diesmal bitte bitte außerhalb von cgi-bin; d.h. fange noch mal mit dem Schritt Auspacken des Perl-Quelltext-Archivs an in einem anderen Verzeichnis an. $HOME/temp oder sowas bietet sich an.
Statt »direkt« meinst du wohl »relativ«. Aber das ist unerheblich. Der Parameter prefix wird sowieso in einen absoluten Pfad umgewandelt. Auch die Angabe der $HOME-Variable ist unproblematisch, weil die Shell sie durch einen Stringwert ersetzt, den dann Configure und folgende Programme zu sehen bekommen. Deswegen belasse es bei »-Dprefix=$HOME/local«.
Johnny: Vermutlich hast du mehr Fehler unterschlagen, die noch davor kamen. Ich kann diesmal ganz schlecht aus der Entfernung diagnostizieren und nur vage Vermutungen anstellen.
Ok, ich hab nochmal ganz von vorne angefangen in $HOME/temp. Ich kopiere mal alles, was nach Fehler aussieht. Da kommen ja einige, von manchen wird geschrieben, sie seien nicht so wichtig - mal schauen ob etwas dabei ist, was uns weiterbringt...
<<<<<
Installation prefix to use? (~name ok) [/vivnemhc/local]
AFS does not seem to be running...
In some special cases, particularly when building perl5 for distribution,
it is convenient to distinguish the directory in which files should be
installed from the directory (/vivnemhc/local) in which they will
eventually reside. For most users, these two directories are the same.
---------------------------------------------
Checking for optional libraries...
No -lsfio.
No -lsocket.
No -lbind.
No -linet.
Found -lnsl (shared).
No -lnm.
No -lndbm.
Found -lgdbm (shared).
No -ldbm.
Found -ldb (shared).
No -lmalloc.
Found -ldl (shared).
No -ldld.
No -lld.
No -lsun.
Found -lm (shared).
Found -lcrypt (shared).
No -lsec.
Found -lutil (shared).
Found -lc (shared).
No -lcposix.
No -lposix.
No -lucb.
No -lbsd.
No -lBSD.
In order to compile perl5 on your machine, a number of libraries
are usually needed. Include any other special libraries here as well.
Say "none" for none. The default list is almost always right.
---------------------------------------------
Shall I use /usr/bin/nm to extract C symbols from the libraries? [n]
<dld.h> NOT found.
Checking for C++...
You are not using a C++ compiler.
dlopen() found.
<unistd.h> found.
---------------------------------------------
qgcvt() found.
Checking how to print long doubles...
fwalk() NOT found.
access() found.
<sys/file.h> defines the *_OK access constants.
accessx() NOT found.
aintl() NOT found.
alarm() found.
<pthread.h> found.
<sys/types.h> found.
<sys/select.h> found.
Checking to see if your struct tm has tm_zone field...
Yes, it does.
---------------------------------------------
er findet im Verlauf einige Funktionen nicht...
dann sowas wie hier:
*** WHOA THERE!!! ***
The previous value for $d_drand48_r on this machine was "undef"!
Keep the previous value? [y]
kommt für viele verschiedene Variablen...
---------------------------------------------
Das war's mit den Fehlern bei Configure.
Jetzt kommt make:
---------------------------------------------
make
sh cflags "optimize='-O'" miniperlmain.o
miniperlmain.c
<<< hier mußte ich was löschen, ich wurde für zu geschwätzig gehalten :) >>>
gcc -L/usr/local/lib -o miniperl \
echo gv.o toke.o perly.o op.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro.o hv.o av.o perl.o run.o pp\_hot.o sv.o pp.o scope.o pp\_ctl.o pp\_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o xsutils.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp\_pack.o pp\_sort.o | sed 's/ op.o / /'
\
miniperlmain.o opmini.o -lnsl -ldl -lm -lcrypt -lutil -lc
./miniperl -w -Ilib -MExporter -e '<?>' || make minitest
./miniperl -Ilib configpm
written lib/Config.pod
updated lib/Config.pm
updated lib/Config_heavy.pl
./miniperl -Ilib lib/lib_pm.PL
Extracting lib.pm (with variable substitutions)
AutoSplitting perl library
./miniperl -Ilib -e 'use AutoSplit; \
autosplit_lib_modules(@ARGV)' lib/*.pm
./miniperl -Ilib -e 'use AutoSplit; \
autosplit_lib_modules(@ARGV)' lib/*/*.pm
make lib/re.pm
make[1]: Entering directory /vivnemhc/temp/perl-5.10.0' make[1]:
lib/re.pm' is up to date.
make[1]: Leaving directory /vivnemhc/temp/perl-5.10.0' ./miniperl minimod.pl > lib/ExtUtils/Miniperl.pm cd lib/unicore && ../../miniperl -I../../lib mktables -w touch uni.data
sh cflags "optimize='-O'" perlmain.o` perlmain.c
CCCMD = gcc -DPERL_CORE -c -fno-strict-aliasing -pipe -std=c89 -O -Wall -ansi -pedantic -W -Wextra -Wdeclaration-after-statement -Wendif-labels -Wc++-compat -DPERL_GCC_PEDANTIC
Making DynaLoader (static)
make[1]: Entering directory /vivnemhc/temp/perl-5.10.0/ext/DynaLoader' Makefile out-of-date with respect to ../../lib/Config.pm ../../config.h Cleaning current config before rebuilding Makefile... make -f Makefile.old clean > /dev/null 2>&1 ../../miniperl "-I../../lib" "-I../../lib" Makefile.PL "INSTALLDIRS=perl" "INSTALLMAN3DIR=none" "PERL\_CORE=1" "LIBPERL\_A=libperl.a" opendir(./../../../../..): Permission denied at ../../lib/File/Spec/Unix.pm line 478 opendir(./../../../../..): Permission denied at ../../lib/File/Spec/Unix.pm line 478 Writing Makefile for DynaLoader ==> Your Makefile has been rebuilt. <== ==> Please rerun the make command. <== false make[1]: \*\*\* [Makefile] Error 1 make[1]: Leaving directory
/vivnemhc/temp/perl-5.10.0/ext/DynaLoader'
make config failed, continuing anyway...
make[1]: Entering directory /vivnemhc/temp/perl-5.10.0/ext/DynaLoader' /bin/sh: /miniperl: No such file or directory make[1]: \*\*\* [../../lib/.exists] Error 127 make[1]: Leaving directory
/vivnemhc/temp/perl-5.10.0/ext/DynaLoader'
make: *** [DynaLoader.o] Error 2
---------------------------------------------
Ja, da ist der Fehler, oder sagen wir mal EIN Fehler. Ich habe dann gemäß den Anweisungen "make" nochmal laufen lassen, bevor ich "make test" gemacht habe.
Ich werde mal schauen, ob ich rausbekomme, wo opendir(./../../../../..) landet, wobei meine Hoffnungen gering sind. Völlig außerstande sehe ich mich "seltsame Permissions" zu entdecken, weiß ich doch nicht, wie "normale Permissions" aussehen, sorry... Huh, eine verzwickte Kiste.
Also für mich kurzes Zwischenfazit:
Module per CPAN installieren geht nicht aufgrund von unbekanntem Fehler, der die CPAN-Shell nicht öffnen läßt
Module per Perl-Script, welches auf CPAN zugreift, zu installieren, geht nicht, weil das Script abbricht
Module per Hand eines nach dem anderen zu installieren geht nicht, da das eine Modul nicht erkennt, wo das bereits installierte, benötigte Modul ist - und es ihm auch nicht gezeigt werden kann, da der Server die enviroment variablen ablehnt
Perl selbst neu zu installieren geht nicht aufgrund von unbekanntem Fehler
WAS BLEIBT MIR? Hat irgendjemand noch eine weiterführende Idee?
opendir(./../../../../..): Permission denied at ../../lib/File/Spec/Unix.pm line 478
Hätte ich schon vorher machen sollen, aber nicht dran gedacht: ich hab nach dieser Fehlermeldung gesucht und hab einen Volltreffer gelandet. http://www.nntp.perl.org/group/perl.perl5.porters/2008/08/msg139339.html
Dort steht, dass es ausgelöst wird durch fehlende Leseberechtigung (also Attribut »r«) für den Benutzer auf dem Home-Verzeichnis. Also war meine Vermutung mit den Permissions doch sehr nahe dran! Unter diesen Bedingungen kann ich den Bug auch exakt auf meinem System nachstellen! Sobald irgendeinem übergeordneten Verzeichnis die Leseberechtigung fehlt, steigt der Vorgang an genau dieser Stelle aus.
Völlig außerstande sehe ich mich "seltsame Permissions" zu entdecken, weiß ich doch nicht, wie "normale Permissions" aussehen
Na das ist doch ganz einfach; du hast das nicht gut aufgefasst. Beispiel: von den vielen Tausenden Verzeichnissen in meinem Home-Verzeichnis haben die meisten »drwxr-xr-x« und eine Minderheit »drwx------«. Normal ist die Mehrheit; seltsam ist, was auffallend anders ist. Blatante Unterschiede kann jeder sehen, da muss man nicht mal Experte fürs Thema sein.
Ich schreibe dir mal die Kette der Verzeichnisse von meinem System (openSUSE 11) auf, jeweils ermittelt durch den Befehl »ls -ld« gefolgt vom Verzeichnisnamen. Ich zeige lediglich Berechtigungen, Benutzer, Gruppe und Name, den irrelevanten Rest hab ich weggelassen.
drwxr-xr-x root root /
drwxr-xr-x root root /home
drwxr-xr-x benutzer users /home/benutzer/
drwxr-xr-x benutzer users /home/benutzer/temp/
drwxr-xr-x benutzer users /home/benutzer/temp/perl-5.10.0/
drwxr-xr-x benutzer users /home/benutzer/temp/perl-5.10.0/ext/
drwxr-xr-x benutzer users /home/benutzer/temp/perl-5.10.0/ext/DynaLoader/
Du hast ja jetzt folgendes offenbart: Dein Home-Verzeichnis heißt /vivnemhc, gehört dem Benutzer 1450 und der Gruppe 2441. (Das mutet mir seltsam an, unter Linux hätte man standardmäßig bspw. $HOME = /home/benutzer oder unter BSD /usr/home/benutzer, und der Benutzer und die Gruppe hätten Namen, nicht nur Nummern. Obwohl also kein Standard, ist dieses Setup aber durchaus möglich und wohl damit zu begründen, dass du in einer Umgebung für Massenhosting bist und dir die Kiste »server282-han« mit zig anderen Personen teilst, deren Privatsphäre nicht einsehbar sein soll.)
Du bist doch der Benutzer 1450, oder?! Demnach sollte die Kette bei dir wie folgt aussehen, oder jedenfalls stark ähnlich wie das.
drwxr-xr-x root root /
drwxr-x--x 1450 2441 /vivnemhc/
drwxr-xr-x 1450 2441 /vivnemhc/temp/
drwxr-xr-x 1450 2441 /vivnemhc/temp/perl-5.10.0/
drwxr-xr-x 1450 2441 /vivnemhc/temp/perl-5.10.0/ext/
drwxr-xr-x 1450 2441 /vivnemhc/temp/perl-5.10.0/ext/DynaLoader/
Jetzt bist du wieder dran, zu ermitteln und zu vergleichen. Ich bin auch daran interessiert, was der Befehl »umask« ausgibt. Auf meinem System ist das 0022. Wenn dieser Wert bei dir anders ist, sind die Berechtigungen auf neu erstellten Verzeichnissen/Dateien eben auch anders.
- Perl selbst neu zu installieren geht nicht aufgrund von unbekanntem Fehler
Das ist dennoch deine beste Chance. Du bist nahe dran am Erfolg. Nicht den Mut aufgeben - hang in there, little trooper!
(Säße ich direkt neben dir, wären wir wohl innerhalb einer Stunde fertig geworden statt nun mehr als drei Tagen. Ich weise nochmal auf die Möglichkeit von Live-Hilfe im IRC hin.)
»» opendir(./../../../../..): Permission denied at ../../lib/File/Spec/Unix.pm line 478
Hätte ich schon vorher machen sollen, aber nicht dran gedacht: ich hab nach dieser Fehlermeldung gesucht und hab einen Volltreffer gelandet. http://www.nntp.perl.org/group/perl.perl5.porters/2008/08/msg139339.htmlDort steht, dass es ausgelöst wird durch fehlende Leseberechtigung (also Attribut »r«) für den Benutzer auf dem Home-Verzeichnis. Also war meine Vermutung mit den Permissions doch sehr nahe dran! Unter diesen Bedingungen kann ich den Bug auch exakt auf meinem System nachstellen! Sobald irgendeinem übergeordneten Verzeichnis die Leseberechtigung fehlt, steigt der Vorgang an genau dieser Stelle aus.
--- aaaaha... Wenn der Fehler bereits bekannt ist, steigen die Chancen, daß auch eine Lösung bekannt ist... Meine Hoffnung steigt auch grad wieder... :)
Du bist doch der Benutzer 1450, oder?!
--- wahrscheinlich?! Mich hat bisher niemand so genannt, die Zahl ist nirgendwo aufgetaucht, also ja, nein - vielleicht bin ich das?!
Demnach sollte die Kette bei dir wie folgt aussehen, oder jedenfalls stark ähnlich wie das.
drwxr-xr-x root root /
drwxr-x--x 1450 2441 /vivnemhc/
drwxr-xr-x 1450 2441 /vivnemhc/temp/
drwxr-xr-x 1450 2441 /vivnemhc/temp/perl-5.10.0/
drwxr-xr-x 1450 2441 /vivnemhc/temp/perl-5.10.0/ext/
drwxr-xr-x 1450 2441 /vivnemhc/temp/perl-5.10.0/ext/DynaLoader/
Jetzt bist du wieder dran, zu ermitteln und zu vergleichen.
--- das sieht bei mir so aus:
drwxr-x--x 1450 2441 .
drwxr-x--x 1450 2441 /vivnemhc
drwxr-xr-x 1450 2441 /vivnemhc/temp
drwxr-xr-x 1450 2441 /vivnemhc/temp/perl-5.10.0
drwxr-xr-x 1450 2441 /vivnemhc/temp/perl-5.10.0/ext
drwxr-xr-x 1450 2441 /vivnemhc/temp/perl-5.10.0/ext/DynaLoader
Ich bin auch daran interessiert, was der Befehl »umask« ausgibt. Auf meinem System ist das 0022. Wenn dieser Wert bei dir anders ist, sind die Berechtigungen auf neu erstellten Verzeichnissen/Dateien eben auch anders.
--- ist gleich...
»» - Perl selbst neu zu installieren geht nicht aufgrund von unbekanntem Fehler
Das ist dennoch deine beste Chance. Du bist nahe dran am Erfolg. Nicht den Mut aufgeben - hang in there, little trooper!
(Säße ich direkt neben dir, wären wir wohl innerhalb einer Stunde fertig geworden statt nun mehr als drei Tagen. Ich weise nochmal auf die Möglichkeit von Live-Hilfe im IRC hin.)
--- bin wiederhergestellt!
So, und nun? Die Leseberechtigung des root und /vivnemhc-Verzeichnisses setzen? Hilft ja nicht, wenn ich die Fehlerbeschreibung hinter dem Link oben richtig verstanden habe.
<<<<<
I asked the superuser to make that directory readable to me and perl
built and installed regularly.
<<<<<
opendir(./../../../../..): Permission denied at ../../lib/File/Spec/Unix.pm line 478
Welches Verzeichnis ist das? Ich kann da ja nicht mehr hingucken...
Oder sind die Angaben unten in der Fehlerbeschreibung die Lösung?
<<<<<
Locally applied patches:
---
@INC for perl 5.10.0:
/usr/home/italpro/localperl/lib/5.10.0/i386-freebsd
/usr/home/italpro/localperl/lib/5.10.0
/usr/home/italpro/localperl/lib/site_perl/5.10.0/i386-freebsd
/usr/home/italpro/localperl/lib/site_perl/5.10.0
.
---
Environment for perl 5.10.0:
HOME=/usr/home/italpro
LANG (unset)
LANGUAGE (unset)
LC_ALL=en_US.UTF-8
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/home/italpro/bin:/home/italpro/localperl/bin:/home/italpro/localperl/scripts:/home/italpro/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/home/italpro/bin
PERL_BADLANG (unset)
SHELL=/usr/local/bin/bash
<<<<<
Bin gespannt, wie es weiter geht. ...
1015Dank!
»» Du bist doch der Benutzer 1450, oder?!
--- wahrscheinlich?! Mich hat bisher niemand so genannt, die Zahl ist nirgendwo aufgetaucht, also ja, nein - vielleicht bin ich das?!
Das solltest du doch wissen, so du dich doch mit SSH dorthin verbindest?
ssh 1450@server282-han.profihost.irgendwas ← Qua?
Der Befehl »id« zeigt deine Benutzer und Gruppe vollständig an. Auf meiner Kiste:
uid=1000(benutzer) gid=100(users) groups=100(users),16(dialout),33(video)
Verwandte Befehle: »whoami« und »groups«.
--- das sieht bei mir so aus:
drwxr-x--x 1450 2441 .
Hier ist dir ein Fehler unterlaufen: ich wollte das Wurzelverzeichnis »/« haben, nicht das aktuelle Verzeichnis ».«.
Die anderen sind in Ordnung. Alle sind für den Benutzer lesbar. (Das ist der zweite Buchstabe, also »r« ist immer vorhanden statt »-«.)
Hilft ja nicht, wenn ich die Fehlerbeschreibung hinter dem Link oben richtig verstanden habe.
Dann hast du nicht richtig verstanden: in der zitierten Bugmail steht, die Wiederherstellung der Leseberechtigung hilft sehr wohl, und genauso konnte ich das Problem ja auch bei mir nachstellen.
Wie gesagt ist das Verzeichnis /vivnemhc und seine ihm untergeordneten in Ordnung - das ist nicht der Auslöser.
So, und nun? Die Leseberechtigung des root und /vivnemhc-Verzeichnisses setzen?
Bleibt für mich abzuwarten, wie es sich mit dem Verzeichnis »/« verhält. Sollte dort die Leseberechtigung fehlen: da dieses Verzeichnis dem speziellen Benutzer »root« gehört, und du natürlich nicht dessen Fähigkeit hast, kannst du dort keine Berechtigungen verändern. Das muss der Systemadministrator vornehmen.
opendir(./../../../../..): Permission denied at ../../lib/File/Spec/Unix.pm line 478
Welches Verzeichnis ist das?
Vorher steht ja
make[1]: Entering directory `/vivnemhc/temp/perl-5.10.0/ext/DynaLoader'
Also von diesem Verzeichnis aus 5 Ebenen höher ist man im Wurzelverzeichnis »/« angekommen.
Ich kann da ja nicht mehr hingucken...
Was meinst du damit? Kannst du genau sagen, was du machst und was passiert?
Oder sind die Angaben unten in der Fehlerbeschreibung die Lösung?
Nein, nicht relevant.
Das solltest du doch wissen, so du dich doch mit SSH dorthin verbindest?
--- ich habe von meinem Provider Zugangsdaten bekommen und die sehen ganz anders aus... Aber das ist vielleicht nur ein Alias?
Hier ist dir ein Fehler unterlaufen: ich wollte das Wurzelverzeichnis »/« haben, nicht das aktuelle Verzeichnis ».«.
ls -ld /
drwx--x--x 0 0 /
So richtig?!
Die anderen sind in Ordnung. Alle sind für den Benutzer lesbar. (Das ist der zweite Buchstabe, also »r« ist immer vorhanden statt »-«.)
--- dann wäre das Wurzelverzeichnis ja auch lesbar?
»» Hilft ja nicht, wenn ich die Fehlerbeschreibung hinter dem Link oben richtig verstanden habe.
Dann hast du nicht richtig verstanden: in der zitierten Bugmail steht, die Wiederherstellung der Leseberechtigung hilft sehr wohl, und genauso konnte ich das Problem ja auch bei mir nachstellen.
--- ja, ok, Schritt zurück: im Bereich Serverarchitektur bin ich völlig ahnungslos. Meinem rudimentären Verständnis nach gibt es ein "Wurzelverzeichnis", also das "C:" auf windozisch gesprochen. Dann gibt es wohl mehrere Unterverzeichnisse und in einem dieser Unterverzeichnisse wohnen alle Kundensites, die auf dem Server untergebracht sind. Eines davon wiederum ist "mein Wurzelverzeichnis", also $HOME. In den Bereich dadrunter (oder dadrüber, wie man's sieht) komme ich nicht hinein, weil das nur der Admin selbst kann. Dort kann ich nichts sehen und auch nichts ändern.
Bleibt für mich abzuwarten, wie es sich mit dem Verzeichnis »/« verhält. Sollte dort die Leseberechtigung fehlen: da dieses Verzeichnis dem speziellen Benutzer »root« gehört, und du natürlich nicht dessen Fähigkeit hast, kannst du dort keine Berechtigungen verändern. Das muss der Systemadministrator vornehmen.
--- ja, genau ... wenn er das denn für mich tut. Muß er ja nicht, mir das "heilige Wurzelverzeichnis" zum Lesen freigeben nur weil Perl 5.10.0 einen Bug hat?!
»» Ich kann da ja nicht mehr hingucken...
Was meinst du damit? Kannst du genau sagen, was du machst und was passiert?
--- ich meine damit, daß ich die Verzeichnisse, Inhalte und Zustände außerhalb meines Bereiches nicht mehr sehen kann. Wobei wenn der Befehl oben tatsächlich Aussage über die Lesbarkeit des Wurzelverzeichnisses gibt, dann kann ich ja doch etwas sehen... <erstaunlich!>
Ok, wenn jetzt das 'r' allerdings für 'lesbar' steht, haben wir einen richtigen Fehler ohne richtigen Auslöser? Das ist ja wie Achterbahn fahren hier... Hoffnung sinkt wieder... Hoppalaaa...
Zugangsdaten [...] vielleicht nur ein Alias?
So wird's wohl sein.
drwx--x--x 0 0 /
»» Die anderen sind in Ordnung. Alle sind für den Benutzer lesbar. (Das ist der zweite Buchstabe, also »r« ist immer vorhanden statt »-«.)
--- dann wäre das Wurzelverzeichnis ja auch lesbar?
Nein, denn hier verhält es sich anders, weil das Verzeichnis dem Benutzer root (= nummerische Id 0) gehört. Ausschlaggebend ist daher nicht das erste »r«, sondern das dritte. Ich erörtere das nicht im Detail, um Berechtigungen zu verstehen, lies Kapitel 9 von der Linuxfibel. http://www.fibel.org/linux/lfo-0.6.0/node223.html
Serverarchitektur
Ist das falsche Wort, aber das, was du meinst, ist erklärt in http://de.wikipedia.org/wiki/Filesystem_Hierarchy_Standard.
Meinem rudimentären Verständnis nach gibt es ein "Wurzelverzeichnis" [...] Dann gibt es wohl mehrere Unterverzeichnisse und in einem dieser Unterverzeichnisse wohnen alle Kundensites, die auf dem Server untergebracht sind.
So kommt es mir nicht vor. Ich denke, dass im Wurzelverzeichnis schon die einzelnen Kundenverzeichnisse sind, in deinem Fall /vivnemhc.
»» Bleibt für mich abzuwarten, wie es sich mit dem Verzeichnis »/« verhält. Sollte dort die Leseberechtigung fehlen:
Ich stelle fest: es ist so.
»» da dieses Verzeichnis dem speziellen Benutzer »root« gehört, und du natürlich nicht dessen Fähigkeit hast, kannst du dort keine Berechtigungen verändern. Das muss der Systemadministrator vornehmen.
--- ja, genau ... wenn er das denn für mich tut. Muß er ja nicht, mir das "heilige Wurzelverzeichnis" zum Lesen freigeben nur weil Perl 5.10.0 einen Bug hat?!
Soll er mal machen. Du überbewertest die Heiligkeit zu stark, weil du dich nicht gut mit Berechtigungen und was damit zusammenhängt auskennst. Was wären die Auswirkungen von »chmod o+r /« (Setzen der Leseberechtigung für andere/»others«)? Jeder Kunde könnte die Namen der Verzeichnisse in / lesen. Welche Schlüsse kann man daraus ziehen?
* Man kann die Anzahl der Nicht-System-Verzeichnisse zählen und weiß dann, wieviele Kunden auf diesem Host angelegt wurden. Müssen ja nicht alle aktiv sein.
* Wenn die Verzeichnisnamen der Kunden nicht zufällige Zeichenketten sind (das ist bevorzugte Praxis), kann man vielleicht auf Teile der Identität der Kunden im realen Leben schließen.
* Lücken in Sicherheitskonzept der Berechtigungen werden entschleiert. Beispiel: ein Kunde hat aus irgendeinem Grund seinem Verzeichnis die Leseberechtigung für andere gegeben. Dann kann jeder reinschauen und sehen, was es dort für lustige Dateien gibt. Hinweis: diese Lücke würde schon existiert haben, würde auch somit schon ausbeutbar sein, aber durch Setzen der Leseberechtigung auf / wird sie erst klar und offensichtlich.
Ich denke, dass ist der Grund, weshalb überhaupt die Leseberechtigung auf / fehlt: der Hoster möchte Kunden vor ihrer eigenen Dummheit schützen, auch wenn es nur »security by obscurity« ist.
Ich habe mich mit dem Bug beschäftigt, um eventuell einen Workaround für dich zu erarbeiten. Im Laufe des Make-Vorgangs möchte Perl den absoluten Pfad zu sich selber ermitteln (das ist lib/ExtUtils/MM_Unix.pm Funktion Zeile 1931), und das Helfermodul lib/Cwd.pm steigt die Verzeichniskette aufwärts und die Fehlerbedingung tritt in Zeile 560 hinzu. Ich glaube, es ist nicht möglich, den absoluten Pfad zu bilden, ohne dass alle beteiligten Verzeichnisse lesbar sind - das geht aus rein konzeptionellen Gründen nicht. Sollte sich jemand von den Perl5 Porters den Bug http://rt.perl.org/rt3/Public/Bug/Display.html?id=58180 nochmal vornehmen, so vermute ich, wird er zum gleichen Schluss kommen und den Bug als WONTFIX invalidieren. Vielleicht gibt es einen Workaround, aber ich sehe ihn nicht - die P5P haben ja wesentlich mehr Erfahrung.
Du solltest die Leseberechtigung auf / unter Berufung auf dieses Bugticket einfordern.
»» --- ja, genau ... wenn er das denn für mich tut. Muß er ja nicht, mir das "heilige Wurzelverzeichnis" zum Lesen freigeben nur weil Perl 5.10.0 einen Bug hat?!
Soll er mal machen.
--- hat er gemacht:
<<<<<
ein eigenes perl installieren wird sehr schwierig. Desweiteren können wir
keinerlei Berechtigungen ändern. So etwas steht Ihnen nur auf einem Rootserver zu.
<<<<<
Sehr kooperativ finde ich das nicht... Sachlich richtig ist es auch nicht, denn natürlich KÖNNEN sie die Berechtigungen ändern, sie WOLLEN es nicht. "Was tun?", sprach Zeus!
Ohne Mithilfe meines Providers komme ich damit, Perl selbst zu installieren, wohl nicht weiter?
Ich gehe also nochmal einen oder drei Schritte zurück und versuche es woanders weiter:
Ich installiere also das in den Abhängigkeiten unterste Modul "Pod-Escapes" in das Verzeichnis '/local'.
Es legt dann drei Unterordner lib, man und share an.
In 'lib' sind weitere Unterordner '/perl/5.8.8/auto/Pod/Escapes'.
In 'man' gibt es '/man3'.
In 'share' gibt es '/perl/5.8.8/Pod'.
Als nächstes will ich das Modul 'Pod-Simple' installieren. Ich setze also
export PERL5LIB=$HOME/local
und dann
perl Makefile.PL PREFIX=../../local (die Dateien sind im Ordner '/temp'.)
Trotzdem bekomme ich die Meldung
'Warning: prerequisite Pod::Escapes 1.04 not found.'
auch
perl Makefile.PL PREFIX=../../local LIB=../../local oder $HOME/local funzt net...
Wie kann ich jetzt dem Modul Pod-Simple das Modul Pod-Escapes zeigen? Irgendwie muß das doch gehen?!??
So, zwei Stunden weitere Versuche und das Modul Pod-Simple findet immer noch Pod-Escapes nicht.
Ich habe versucht
export PERL5LIB=$HOME/local/lib/perl und ca. 357 andere Verzeichnis-Kombinationen
dann
perl Makefile.PL PREFIX=../../local LIB=$HOME/local/lib
egal, was ich in "LIB=" angebe, selbst den kompletten Pfad "$HOME/local/lib/perl/5.8.8/auto/Pod/Escapes", er findet es nicht.
in o.a. Pfad befindet sich nur eine Datei ".packlist"
Dann probierte ich dasselbe mit "$HOME/local/share", weil unter "$HOME/local/share/perl/5.8.8/Pod" eine Datei "Escapes.pm" liegt. Aber egal, ob mittels "export" oder "LIB=", er findet sie einfach nicht.
Dann habe ich die Datei Makefile.PL modifiziert:
<<<<< ORIGINAL >>>>>
require 5;
use strict;
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'Pod::Simple',
VERSION_FROM => 'lib/Pod/Simple.pm',
ABSTRACT_FROM => 'lib/Pod/Simple.pod',
# INSTALLDIRS => 'perl',
PREREQ_PM => {
'Text::Wrap' => '98.112902',
'Pod::Escapes' => '1.04',
# RT#29439
'Test' => '1.25',
# And finally, things I don't have any particular version in mind for:
map {; $_ => 0 } qw[
File::Spec File::Basename Cwd Config Carp overload Symbol strict
constant integer File::Find Test::More
]
},
);
package MY;
sub libscan
{ # Determine things that should *not* be installed
my($self, $path) = @_;
return '' if $path =~ m/~/;
$path;
}
__END__
<<<<< ENDE >>>>>
Ich habe use lib "$HOME/local/perl" ausprobiert und "$HOME/local/lib/perl/5.8.8/auto/Pod/Escapes" und dasgleiche mit "share" - nix!
Abschließend habe ich versuche, Pod-Escapes mit
require "$HOME/local/share/perl/5.8.8/Pod/Escapes.pm";
einzubinden, aber auch dann findet er nix...
use lib "/home/vivnemhc/man/man3" bringt auch keinen Erfolg...
Daher meine Frage: wonach sucht er denn überhaupt und wo sucht er? Ich will das ja gerne verstehen und nicht blind im Heuhaufen herumstochern. Würde irgendwas jetzt funktioniert haben, dann könnte ich daraus Rückschlüsse ziehen, welche Angaben ich machen muß.
Ich denke, er sucht "Escapes.pm"? Oder in 'man/man3' die 'Pod::Escapes.3pm'?
Wenn ich use lib '/home/vivnemhc'; angebe, dann sind in dieser Angabe doch die drei Unterverzeichnisse 'lib, man und share' enthalten? Sucht er die nicht alle durch? Welche sind wichtig?
Manche Module installieren sich unter 'perl/5.8.8', andere unter 'perl/5.8.4' und dann jeweils in Unterverzeichnisse. Also muß ich doch das "Hauptverzeichnis" angeben, also $HOME/local/lib - oder $HOME/local/lib/perl?
Eine weitere Idee, aus der Verzweiflung geboren: ist es möglich, von meinem Windows-Rechner zuhause (wo ich Active-State-Perl installiert habe) ein Modul mittels CPAN auf dem Server in $HOME/local zu installieren?
Andere Idee: gibt es eine Möglichkeit, nachdem ich das Modul CPAN auf dem Server installiert habe, dort die CPAN-Shell zu nutzen (die von Perl mitgelieferte bricht ja leider mit in diesem Thread beschriebener Fehlermeldung ab).
Kann mir jemand weiterführende Lektüre empfehlen? Meistens lese ich in "Wie-installiere-ich-Perl-Module-Tutorials" immer dieselben Dinge, die bei mir alle mit Fehlermeldungen abbrechen. Aber irgendwas muß doch gehen?!
HEEEEEEEELP... :)
ls -ld $HOME
sollte als Permissions linkerhand »drwxr-xr-x« zeigen oder womöglich »drwx------«.
ls -ld $HOME
drwxr-x--x 7 1450 2441 4096 Mar 9 21:01 /vivnemhc
ähja... sagt uns das was?
Live-Hilfe erhältst du auf irc.perl.org im Kanal #perlde.
--- #perlde habe ich dort nicht gefunden?
By the way ist IRC die nächte komplett neue Geschichte, mit der ich mich noch nie befaßt habe. Mein Englisch ist rudimentär, und mir fliegt bald der Kopf auseinander - ich wollte am Anfang nur einen Cookie simulieren und das habe ich nicht hinbekommen. Eine Woche und etliche englische Manuals, Forenbeiträge und unaufhörlich Fehlermeldungen googlen später geht mir langsam die Luft aus. Wenn es nötig ist, arbeite ich mich auch in IRC ein? Doch vielleicht bin ich ja auch der Lösung schon ganz nahe?!?? <nu heul ich wirklich>
Ich bin mir sicher, dieses Thema wurde schon über 9000 Mal abgehandelt. Du hast die Perl-FAQ nicht gelesen. http://p3rl.org/faq8#How-do-I-keep-my-own-module%2Flibrary-directory%3F Aber wer liest schon Doku.
Ich bin einen Schritt weiter. Du hast Recht: von DIESER Doku wußte ich bisher nicht.
Jetzt habe ich mittels
export PERL5LIB=/pfad/zu/meinem/verzeichnis
und anschließendem
perl Makefile.PL PREFIX=pfad/zu/cgi-bin
das Modul Pod::Simple installieren können, welches zur Installation Pod::Escapes benötigt hat.
Nun dachte ich leichtfertig, mein Problem wäre gelöst. Doch das nächte Modul in der Reihe, Test::Pod, welches wiederum Pod::Simple benötigt, findet dieses trotz der Angabe der PERL5LIB-Variable nicht.
Ich habe auf meinem Webspace einen Ordner "cgi-bin", dort hinein lasse ich alle Module installieren. In die PERL5LIB-Variable kommt dann als Pfad "/home/domain/cgi-bin/lib". Probiert habe ich auch "/home/domain/cgi-bin", doch bei beiden Varianten findet das Test-Modul den Pod-Simple nicht.
Mir wachsen hier schon graue Haare. Das kann doch keine Doktorarbeit sein?!?? Kann mir bitte nochmal jemand auf die Sprünge helfen?
...WWW::Mechanize benötigt weitere Module, die nicht installiert sind. Nachdem ich mich vier Ebenen nach unten gearbeitet habe, ist das Modul Pod::Escapes installiert, welches von Pod::Simple benötigt wird...
Da ich keinen Shell Zugang habe, kann ich den kompletten Thread nicht nachvollziehen, ich hätte gedacht, dass das einfacher ist. Was aber klar ist und bei den meisten (allen?) Hosting Angeboten so ist, dass du natürlich nicht in den Systempfaden etwas installieren kannst.
Also ich würde so vorgehen:
1. ein Verzeichnis für meine Module anlegen, am besten wie schon gesagt, ausserhalb von www
2. ein Test skript anlegen, dass im Prinzip nichts anderes macht, als das gewünschte Modul einzubinden
#!/usr/bin/perl -w
BEGIN
{
use strict;
use lib '/home/www/xxx/file/'; # Das Verzeichniss für meine Module
use CGI::Carp q[fatalsToBrowser];
print "Content-type: text/html\n\n";
print "Start.\n";
}
use WWW::Mechanize;
print "OK.";
3. Die nötigen Module in das Verzeichnis kopieren.
Struppi.
- Die nötigen Module in das Verzeichnis kopieren.
Ich hab das mal angefangen bei einem Anbieter, der das Modul auch nicht instaliert hat.
WWW angelegt
Mechanize.pm kopiert
Ordner Mechanize kopiert
Das war's zumindest bei mir, die anderen Module sind vorhanden.
Struppi.
Ich bin weiter!
ERSTE SACKGASSE!
Daraufhin probiere ich es über die CPAN-Shell und gebe in PuTTY ein:
perl -MCPAN -e shell
Statt der erhofften CPAN-Shell erhalte ich folgende Fehlermeldung:
mkdir /etc/perl: Permission denied at /usr/share/perl/5.8/CPAN.pm line 1252
Ich bin soeben das erste Mal in der cpan-Shell! Das ist ja wie Weihnachten!
Geholfen hat mir dies hier:
http://www.archivum.info/suse-linux@suse.com/2005-06/msg01951.html
und hier:
http://www.deimeke.net/dirk/blog/index.php?/pages/snippets.html
Ich habe die Anweisungen befolgt und der o.a. Fehler taucht nicht mehr auf! Jezt bin ich sehr gespannt, ob ich denn nun nach drei Wochen oder vier endlich mein Modul installieren kann?! Yippey!
Ich habe die Anweisungen befolgt und der o.a. Fehler taucht nicht mehr auf! Jezt bin ich sehr gespannt, ob ich denn nun nach drei Wochen oder vier endlich mein Modul installieren kann?! Yippey!
--- yepp, yippey. Aber viel weiter ging's leider nicht:
cpan> install WWW::Mechanize
Running install for module WWW::Mechanize
Running make for P/PE/PETDANCE/WWW-Mechanize-1.54.tar.gz
Fetching with LWP:
http://cpan.mirror.solnet.ch/authors/id/P/PE/PETDANCE/WWW-Mechanize-1.54.tar.gz
Fetching with LWP:
http://cpan.mirror.solnet.ch/authors/id/P/PE/PETDANCE/CHECKSUMS
Checksum for .cpan/sources/authors/id/P/PE/PETDANCE/WWW-Mechanize-1.54.tar.gz ok
Cannot gzopen .cpan/sources/authors/id/P/PE/PETDANCE/WWW-Mechanize-1.54.tar.gz: No such file or directory
Diese Fehlermeldung verstehe ich nicht, denn die Datei ist vorhanden!? Ein weiterer Test mit einem anderen Modul ergab denselben Abbruch mit derselben Meldung.
Meine MyConfig.pm sieht so aus:
$CPAN::Config = {
'build_cache' => q[10],
'build_dir' => q[.cpan/build],
'cache_metadata' => q[1],
'cpan_home' => q[.cpan],
'cpan_version_check' => q[1],
'dontload_hash' => { },
'ftp' => q[/usr/bin/ftp],
'ftp_proxy' => q[],
'getcwd' => q[cwd],
'gpg' => q[/usr/bin/gpg],
'gzip' => q[/bin/gzip],
'histfile' => q[.cpan/histfile],
'histsize' => q[100],
'http_proxy' => q[],
'inactivity_timeout' => q[0],
'index_expire' => q[1],
'inhibit_startup_message' => q[0],
'keep_source_where' => q[.cpan/sources],
'lynx' => q[/usr/bin/lynx],
'make' => q[/usr/bin/make],
'make_arg' => q[],
'make_install_arg' => q[UNINST=0],
'makepl_arg' => q[PREFIX=PerlMod/lib LIB=PerlMod/lib INSTALLMAN1DIR=PerlMod/man/man1 INSTALLMAN3DIR=PerlMod/man/man3],
'ncftpget' => q[/usr/bin/ncftpget],
'no_proxy' => q[],
'pager' => q[/usr/bin/less],
'prerequisites_policy' => q[ask],
'scan_cache' => q[atstart],
'shell' => q[/bin/bash],
'tar' => q[/bin/tar],
'term_is_latin' => q[0],
'unzip' => q[/usr/bin/unzip],
'urllist' => [q[http://cpan.mirror.solnet.ch]],
'wget' => q[/usr/bin/wget],
};
Diese MyConfig.pm habe ich allerdings nicht vom meinem Server kopiert, wie im ersten Link vorgeschlagen, sondern von dem zweiten oben angegebenem Link, da ich CPAN/Config.pm auf meinem Server nicht gefunden habe...
Hhmmm, vielleicht kann mir ja jemand einen Tip geben, in welche Richtung die Suche weitergehen sollte? Dankeeee schonmal!
Yerf!
Cannot gzopen .cpan/sources/authors/id/P/PE/PETDANCE/WWW-Mechanize-1.54.tar.gz: No such file or directory
evtl. bezieht sich das nicht auf das Archiv sondern den Entpacker...
'gzip' => q[/bin/gzip],
'tar' => q[/bin/tar],
Stimmt der Pfad zu gzip und tar?
Gruß,
Harlequin
Yerf?! :)
Stimmt der Pfad zu gzip und tar?
--- ich bin mir nicht 100% sicher, hier der Inhalt von /bin:
[13:01:58] server282-han:/bin > ls -l
total 3780
...
-rwxr-xr-x 8 0 0 60216 Sep 19 2006 gzip
...
-rwxr-xr-x 2 0 0 319120 Dec 26 2007 tar
Dürfte passen, oder?
Yerf!
Yerf?! :)
Ein "Hallo" in Fuchssprache[1] ;-)
[13:01:58] server282-han:/bin > ls -l
total 3780
...
-rwxr-xr-x 8 0 0 60216 Sep 19 2006 gzip
...
-rwxr-xr-x 2 0 0 319120 Dec 26 2007 tarDürfte passen, oder?
Jo, sieht eigentlich gut aus. Das ist dann wohl nicht der Grund.
Gruß,
Harlequin
[1] hab grad keinen guten Link zur Erklärung parat, der Wikipedia-Eintrag ist leider hochgradig unvollständig
Ich bin soeben das erste Mal in der cpan-Shell! Das ist ja wie Weihnachten!
Ich hatte dir einen anderen Weg gezeigt, der bei mir super funktioniert hat und innerhalb von wenigen Minuten konnte ich das Modul nutzen. Du sitzt jetzt seit fast zwei Wochen dran, warum versuchst du nicht meinen Vorschlag?
Struppi.
Hi Struppi,
Ich hatte dir einen anderen Weg gezeigt, der bei mir super funktioniert hat und innerhalb von wenigen Minuten konnte ich das Modul nutzen. Du sitzt jetzt seit fast zwei Wochen dran, warum versuchst du nicht meinen Vorschlag?
--- hhmmm...
Ich habe es jetzt auf Deine Weise probiert - und es geht! Ich mußte zwar noch ein paar andere Module dazukopieren, aber das Testscript läuft!
Nun bin ich einerseits sehr happy (1000Dank!), andererseits auch bös verwirrt: was soll denn das ganze make, make test, make install-Getue und die Anleitungen u.a. auf http://de.selfhtml.org/perl/module/cpanmodule.htm#downloaden_installieren@title=SelfHTML, wenn es ausreicht, die Dateien STUMPF zu kopieren?!??
Dies schien mir keine 'saubere' Lösung zu sein. Oder doch? Na, mein Ziel ist erreicht, wenn mich auch keine 'Energie des Verstehens' durchdrungen hat.
Ich mach jetzt mal Pause und kratz mich 15min am Kopf...
Danke Dir nochmal, Struppi!
Nun bin ich einerseits sehr happy (1000Dank!), andererseits auch bös verwirrt: was soll denn das ganze make, make test, make install-Getue und die Anleitungen u.a. auf http://de.selfhtml.org/perl/module/cpanmodule.htm#downloaden_installieren@title=SelfHTML, wenn es ausreicht, die Dateien STUMPF zu kopieren?!??
Da ich das Perl von ActiveState benutze und wie erwähnte, keinen Shellzugang zu einem Linuxserver habe, kann ich nur Vermutungen anstellen.
Das Problem in deinem Fall, hing höchst wahrscheinlich mit fehlenden Rechten zusammen. Ich hätte an deiner Stelle erstmal versucht alle Pfade, wo Dateien hinkopiert oder erzeugt werden, auf deinen Webspace "umzubiegen". Ich bin mir ziemlich sicher, dass du gescheitert bist, da du versucht hast in Systempfade zu schreiben, was kein Hoster erlauben kann.
Da ich aber, wie ich schon sagte, nur wenig Ahnung von der Materie habe, kann ich dir nicht genau sagen an welcher Stelle du genau die Fehler machst.
Struppi.
Hallo Johnny!
Nun bin ich einerseits sehr happy (1000Dank!), andererseits auch bös verwirrt: was soll denn das ganze make, make test, make install-Getue und die Anleitungen u.a. auf http://de.selfhtml.org/perl/module/cpanmodule.htm#downloaden_installieren@title=SelfHTML, wenn es ausreicht, die Dateien STUMPF zu kopieren?!??
Versuch mal Date::Calc zu kopieren... Mittlerweile dürfte das Modul bei jedem Provider vorhanden sein, aber falls nicht... dieses Modul (sowie einige andere) greift auf C-Bibliotheken zurück.
Viele Grüße aus Frankfurt/Main,
Patrick