|
|
 |

|

 |

| Community » Installation der Umgebung |
|
perl 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 -wprint("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

|
re: perl liefert keine ausgabe
|
Seitenanfang |
Und wenn du einen Einzeiler aufrufst?
perl -le 'print "Test"'
Datum: 27.09.2007-18:45

|
re: 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

|
re: 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

|
re: perl liefert keine ausgabe
|
Seitenanfang |
| Hi dash, in meiner perltest2.pl steht wirklich nur:
#!/opt/bin/perl -wprint("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

|
re: 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

|
re: 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

|
re: 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

|
re: 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

|
|

|

|

|
 |

|

|
|