perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 23
Click for quality!




11.02.2012 / 07:44

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Installation der Umgebung zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragperl liefert keine ausgabe
Seitenanfang
Hallo zusammen,

ich habe auf meiner NAS BusyBox (ein Minilinux) laufen und habe per ipkg perl und mittlerweile microperl (unter "/volume1/opt") installiert. Nach der Installation habe ich per

ln -s /volume1/opt /opt
einen Alias erstellt
und mittels
export PATH=/opt/bin:/opt/sbin:$PATH
den Pfad der Pfad-Variable hinzugefügt.
Der Befehl
which perl
gibt mir "/opt/bin/perl" aus und
perl -v
auch die korrekten Informationen ("This is perl, v5.8.8 built for powerpc-603e-linux...")

Soweit so gut! Wenn ich nun aber mein perlskript auf der Konsole mittels "perltest2.pl"ausführen will, erscheint die Meldung "-ash: perltest2.pl: not found
", mittels "perl perltest2.pl"erscheint gar keine Ausgabe (

DiskStation> perl perltest2.pl
DiskStation>
)und im Browser erscheint nur der Quelltext!?

Der Quelltext meines Perlskripts:

#!/opt/bin/perl -w

print("Just another Perl hacker\n");

Ich hoffe Ihr könnt mir bei meinem Problem helfen!

Vielen Dank im Vorraus!
Effeksys

Datum: 27.09.2007-16:45

Beitragre: perl liefert keine ausgabe
Seitenanfang
Und wenn du einen Einzeiler aufrufst?

perl -le 'print "Test"'

Datum: 27.09.2007-18:45

Beitragre: perl liefert keine ausgabe
Seitenanfang
Hi dash,
das gibt er zumindestens aus.

DiskStation> perl -le 'print "Test"'
Test
DiskStation>

Datum: 27.09.2007-23:17

Beitragre: perl liefert keine ausgabe
Seitenanfang
Dann funktioniert dein Perl, es muss also an der Datei 'perltest2.pl' liegen, was anderes hatte ich eigentlich ehrlich gesagt auch nicht erwartet ;)

Steht in perltest2.pl auch wirklich der Code den du im ersten Beitrag gepostet hast?

Achso und was ich beinahe vergessen haette:
>> Soweit so gut! Wenn ich nun aber mein perlskript auf der Konsole mittels
>> "perltest2.pl"ausführen will, erscheint die Meldung "-ash: perltest2.pl: not found
>> ", mittels "perl perltest2.pl"erscheint gar keine Ausgabe (

Damit du das Script direkt aufrufen kannst musst du es ausfuehrbar machen, falls dass noch nicht geschehen ist.

Erlaubnis zum Ausfuehren den Besitzer- und Gruppenrechten hinzufuegen


chmod ug+x perltest2.pl

Ausfuehren laesst sich das Script dann mit


./perltest2.pl

um es so aufrufen zu koennen

perltest2.pl

muss der Pfad in dem das Script liegt in deiner PATH-Umgebungsvariable eingetragen sein.

Datum: 28.09.2007-00:33

Beitragre: perl liefert keine ausgabe
Seitenanfang
Hi dash,

in meiner perltest2.pl steht wirklich nur:

#!/opt/bin/perl -w

print("Just another Perl hacker\n");

Und die Berechtigungen müssten ja eigentlich auch stimmen.

18989094    4 -rwxrwxrwx    1 Thomas   users          56 Sep 28 00:54 perltest2.pl

Vielleicht hilft die strace Ausgabe etwas weiter(siehe: http://www.perlunity.de/cgi-bin/forum/forum_thread.cgi?tid=20183&mid=41373&fid=7&pn= ).

Und vielen Dank für Deine Mühe!
Effeksys

Datum: 28.09.2007-01:02

Beitragre: perl liefert keine ausgabe
Seitenanfang
strace perl -w /volume1/web/cgi-bin/perltest2.pl spuckt mir folgendes aus:

 execve("/opt/bin/perl", ["/opt/bin/perl", "-w", "/volume1/web/cgi-bin/perltest2.p"...], [/* 10 vars */]) = 0
uname({sys="Linux", node="DiskStation", ...}) = 0
brk(0) = 0x10012560
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x30016000
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/lib/libperl.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/opt/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/opt/lib/perl5/5.8.8/ppc-linux/CORE/libperl.so", O_RDONLY) = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\t\200"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1536312, ...}) = 0
mmap(0xfe66000, 1612044, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xfe66000
mprotect(0xffd5000, 108812, PROT_NONE) = 0
mmap(0xffd6000, 94208, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0x160000) = 0xffd6000
mmap(0xffed000, 10508, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffed000
close(3) = 0
open("/opt/lib/libnsl.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/lib/perl5/5.8.8/ppc-linux/CORE/libnsl.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=10536, ...}) = 0
mmap(NULL, 10536, PROT_READ, MAP_PRIVATE, 3, 0) = 0x30017000
close(3) = 0
open("/lib/libnsl.so.1", O_RDONLY) = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\0A\320"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=78532, ...}) = 0
mmap(0xfe30000, 152108, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xfe30000
mprotect(0xfe42000, 78380, PROT_NONE) = 0
mmap(0xfe50000, 12288, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0x10000) = 0xfe50000
mmap(0xfe53000, 8748, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xfe53000
close(3) = 0
open("/opt/lib/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/lib/perl5/5.8.8/ppc-linux/CORE/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libdl.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\0 8"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=11524, ...}) = 0
mmap(0xfe0d000, 75832, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xfe0d000
mprotect(0xfe10000, 63544, PROT_NONE) = 0
mmap(0xfe1d000, 12288, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xfe1d000
close(3) = 0
open("/opt/lib/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/lib/perl5/5.8.8/ppc-linux/CORE/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libm.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\0\242"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=487776, ...}) = 0
mmap(0xfd77000, 547412, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xfd77000
mprotect(0xfdeb000, 72276, PROT_NONE) = 0
mmap(0xfdf7000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0x70000) = 0xfdf7000
close(3) = 0
open("/opt/lib/libcrypt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/lib/perl5/5.8.8/ppc-linux/CORE/libcrypt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libcrypt.so.1", O_RDONLY) = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\0\f"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=21380, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x3001a000
mmap(0xfd2b000, 245516, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xfd2b000
mprotect(0xfd30000, 225036, PROT_NONE) = 0
mmap(0xfd3b000, 20480, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xfd3b000
mmap(0xfd40000, 159500, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xfd40000
close(3) = 0
open("/opt/lib/libutil.so.1", O_RDONLY) = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\0\16"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=8616, ...}) = 0
mmap(0xfd09000, 73320, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xfd09000
mprotect(0xfd0b000, 65128, PROT_NONE) = 0
mmap(0xfd19000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xfd19000
close(3) = 0
open("/opt/lib/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/lib/perl5/5.8.8/ppc-linux/CORE/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\1\324"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1310504, ...}) = 0
mmap(0xfbac000, 1361912, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xfbac000
mprotect(0xfcdd000, 112632, PROT_NONE) = 0
mmap(0xfcec000, 40960, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0x130000) = 0xfcec000
mmap(0xfcf6000, 10232, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xfcf6000
close(3) = 0
mprotect(0xfe66000, 1503232, PROT_READ|PROT_WRITE) = 0
mprotect(0xfe66000, 1503232, PROT_READ|PROT_EXEC) = 0
munmap(0x30017000, 10536) = 0
rt_sigaction(SIGFPE, {SIG_IGN}, {SIG_DFL}, 8) = 0
brk(0) = 0x10012560
brk(0x10033560) = 0x10033560
brk(0) = 0x10033560
brk(0x10034000) = 0x10034000
getuid() = 0
geteuid() = 0
getgid() = 0
getegid() = 0
open("/dev/urandom", O_RDONLY) = 3
read(3, "\f6\35s", 4) = 4
close(3) = 0
time([1190932603]) = 1190932603
ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0
lseek(0, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
lseek(1, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
lseek(2, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
open("/volume1/web/cgi-bin/perltest2.pl", O_RDONLY) = 3
ioctl(3, TCGETS, 0x7ffff810) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(3, 0, SEEK_CUR) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0
readlink("/proc/self/exe", "/volume1/opt/bin/perl5.8.8", 4095) = 26
getpid() = 10426
read(3, "#!/opt/bin/perl -w\r\rprint(\"Just "..., 4096) = 56
read(3, "", 4096) = 0
close(3) = 0
exit(0) = ?
Process 10426 detached

Datum: 28.09.2007-00:51

Beitragre: perl liefert keine ausgabe
Seitenanfang
>> und im Browser erscheint nur der Quelltext!?

Dann weisz der Webserver nichts besseres mit der Datei anzufangen als sie auszugeben. Du musst festlegen dass die Datei ausgefuehrt werden soll. Keine Ahnung welcher Webserver auf dein NAS laeuft.

Beim Apachen laesst sich dass auf unterschiedliche Weisen festlegen...
Variante I


ScriptAlias /cgi-bin/ /pfad/zum/verzeichnis/mit/cgi_scripts

Apache nimmt dann an dass alle Dateien im Verzeichnis /pfad/zum/verzeichnis/mit/cgi_scripts CGI-Script-Dateien sind und versucht sie auszufuehren, wenn eine HTTP-Anfrage an /cgi-bin/dateiname.ext gestellt wird.

Variante II

<Directory "/pfad/zum/verzeichnis/des/cgi_scripts/">
AddHandler cgi-script .cgi .pl
Options +ExecCGI
</Directory>


Zuerst wird der Handler 'cgi-script' fuer die Dateinamenerweiterung .cgi und .pl aktiviert und dann fuer das Verzeichnis /pfad/zum/verzeichnis/des/cgi_scripts/ die Option ExecCGI gesetzt, damit in diesen Verzeichnis Dateien mit der Endung .pl oder .cgi als CGI-Script ausgefuehrt werden.

Datum: 27.09.2007-21:09

Beitragre: perl liefert keine ausgabe
Seitenanfang
Hi,

ja bei mir läuft ein Apache/2.2.3.

In meiner httpd.conf habe ich dies eingetragen:


<VirtualHost *>
DocumentRoot /Pfad/zum_web
Servername meineSite
ServerAlias meineSite *.meineSite

#Perl aktivieren
<Directory "/volume1/web/cgi-bin/">
AddHandler cgi-script .cgi .pl
Options +ExecCGI
</Directory>
</VirtualHost>

Leider zeigt er mir auch nach einem

/usr/syno/etc/rc.d/S97apache-user.sh restart
immer noch den Quelltext an.

Er reagiert wie in der Konsole scheinbar nicht darauf!?


DiskStation> /opt/bin/perl -w /volume1/web/perltest2.pl
DiskStation> /opt/bin/perl -w /volume1/web/cgi-bin/perltest2.pl

Vielen Dank im Vorraus!

Datum: 28.09.2007-00:33

Beitragre: perl liefert keine ausgabe
Seitenanfang
Relativ am Ende der strace-Ausgabe hat mich jemand darauf hingewiesen, das "\r" bei dem Perlaufruf dabei steht.

read(3, "#!/opt/bin/perl -w\r\rprint(\"Just "..., 4096) = 56

Er meinte:"das kommt mit hoher wahrscheinlichkeit
daher, dass du das skript auf windows geschrieben hast und mit den
falschen ftp-optionen hochgeladen hast. du musst ascii anklicken."

Ich arbeite aber unter Mac OS/unix und bearbeite die Dateien auf einer Samba-Freigabe. Und ich arbeite mit dem Zeichensatz Unicode (UTF-8), soweit ich weiss ist doch da eh die erste Codepage dem ASCII gleich.

Ich habe daraufhin in meinem Perlskript nach der #!-Zeile einen neuen Zeilenumbruch eingefügt (Enter-Taste) und danach funktionierte es!?
Kommandozeile:

DiskStation> perl -w /volume1/web/cgi-bin/perltest.pl
DiskStation> perl -w /volume1/web/cgi-bin/perltest2.pl
Just another Perl hacker

und die strace-Ausgabe:
read(3, "#!/opt/bin/perl -w\n\rprint(\"Just "..., 4096) = 56

Es scheint nun auf der Kommandozeile zu funktionieren. ;-)

Im Browser (Firefox 2.0.0.7) erscheint nun von meiner "perlwebtest.pl" der HTML-Quelltext?!

err.txt von Apache meldet:

[Fri Sep 28 19:52:48 2007] [notice] Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7m PHP/5.2.0 configured -- resuming normal operations
[Fri Sep 28 19:52:52 2007] [error] [client 192.168.0.14] Premature end of script headers: perlwebtest.pl

Meine httpd.conf-user:
# Virtual hosts                                                         
NameVirtualHost *
<VirtualHost *>
DocumentRoot /volume1/web
Servername www.effeksys.homelinux.org
ServerAlias effeksys.homelinux.org *.effeksys.homelinux.org

#Perl
ScriptAlias /cgi-bin/ "/volume1/web/cgi-bin/"
<Directory "/volume1/web/cgi-bin/">
AddHandler cgi-script .cgi .pl
Options +ExecCGI
</Directory>
</VirtualHost>

Sind die Perl-Skripte mit Perl nur aufrufbar, wenn sie unter "/volume1/web/cgi-bin/" liegen?
Ich wollte gern, Twiki auf meinen Apache laufen lassen. Muss ich Twiki dann unter "cgi-bin" ablegen?

Vielen Dank im Vorraus!
Effeksys

Datum: 28.09.2007-20:55

-






-
-