[gelöst!] microperl: CGI-Problem mit Lighty

ryazor

Neuer User
Mitglied seit
17 Dez 2009
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Guten Abend Gemeinde,

da es mein erster Thread hier ist, würde ich ganz gerne erstmal ein sehr, sehr herzliches Dankeschön an alle Freetz-Devs aussprechen. Das Projekt ist echt ein absoluter Traum für Hobbyfrickler wie mich.

Nun zum Problem.

Ich betreibe eine relativ aktuelles Trunk mit lighttpd, sowie microperl. Beim Aufruf eines Perl-Skripts erhalte ich immer einen HTTP 500 (internal server error).

Code:
$ tail -f /[lighttpd]/var/log/error.log
2010-01-07 17:34:18: (mod_cgi.c.588) cgi died, pid: 1190

Ich betreibe den Server nur auf Port 443 (HTTPS), PHP funktioniert (bis auf utf8_de/encoding, warum, weiß ich auch noch nicht).

https://[url]/test.pl wirft nun den 500er.

Um *.pl-Dateien ausführen zu können, habe ich in der lighty-additional config folgendes eingetragen:
Code:
# enable cgi support for *.pl files
cgi.assign += ( ".pl" => "/usr/bin/perl" )
Aber es ist so oder so nebensächlich, da *.cgi-Dateien den microperl ebenso zum sterben bringen.

Das merkwürde ist, dass wenn ich das oben genannte "test.pl" über microperl aufrufe, es mir das richtige Ergebnis ausspuckt.

Code:
$ cat test.pl 
#!/usr/bin/perl
print("test...\n");
Code:
$ microperl test.pl 
test...

Meiner Meinung nach muss es ein Problem mit dem mod_cgi sein, aber ich weiß nicht, wie ich weitermachen könnte. Gibt es diesbezüglich Tips?

Wäre sehr dankbar,
Grüße, r.
 
Zuletzt bearbeitet:
Wenn es eine Frage zu Freetz ist, dann verschieben wir sie besser mal ins Freetz Forum.
 
Ja ist es! Sorry meine Unachtsamkeit, kommt nicht wieder vor.
 
Wie siehts denn mit den Dateirechten deines aufzurufenden Scriptes aus?
 
selbst verständlich ist das x-bit gesetzt.

Code:
-rwxr-xr-x 1 root root 37 Jan 7 18:35 test.pl*
 
Und all die anderen Tipps beachtet, die man beachten muss?
 
Und all die anderen Tipps beachtet, die man beachten muss?
Erstmal danke für deine Beiträge. Was meinst du genau mit den anderen Tipps? Die Wiki-Seite zu Lighty und microperl im Trac ist ja leider etwas dürftig. Aber selbst redend habe ich kein Modul von Lighty im menuconfig deaktiviert, sowie Perl mit FastCGI kompiliert.

Mein Freetz läuft soweit, bis auf Kleinigkeiten mit denen ich mich noch beschäftigen werde, auch ziemlich stabil. Leider spuckt mir die error.log von Lighty ja nur aus, dass CGI "gestorben" ist, ein warum, oder Ansatz finde ich leider nicht (auch Onkel-Guhgel hilft nicht viel weiter). Microperl selbst hat ja keinen debug.log, was für solche Zwecke hilfreich wäre.
 
Ich denke mal, daß hier eher die allgemeinen Linux/UNIX Tips gefragt sind, als etwas Freetz spezifisches.
Du schreibst
Code:
$ cat test.pl 
#!/usr/bin/perl
print("test...\n");
$ microperl test.pl 
test...
Der richtige Test wäre
Code:
# Interpreter ist /usr/bin/perl, nicht microperl
/usr/bin/perl test.pl
# direkter Aufruf
./test.pl
Die nächste Frage wäre, ob Du chroot verwendest. Wenn ja, solltest DU Dich um die Voraussetzungen dafür kümmern.
 
Ich denke mal, daß hier eher die allgemeinen Linux/UNIX Tips gefragt sind, als etwas Freetz spezifisches.
Du schreibst
Code:
$ cat test.pl 
#!/usr/bin/perl
print("test...\n");
$ microperl test.pl 
test...
Der richtige Test wäre
Code:
# Interpreter ist /usr/bin/perl, nicht microperl
/usr/bin/perl test.pl
# direkter Aufruf
./test.pl
Also ich würde mich nicht mehr als Unix-Anfänger bezeichnen. (l ist natürlich ein Symlink auf ls -alF)
Code:
$ l /usr/bin/perl
lrwxrwxrwx 1 root root 9 Dec 24 12:19 /usr/bin/perl -> microperl*
Und wie zu erwarten:
Code:
$ ./test.pl
test...

Die nächste Frage wäre, ob Du chroot verwendest. Wenn ja, solltest DU Dich um die Voraussetzungen dafür kümmern.
Ich verwende chroot über USB-root, ja. Mein Minimal-System besteht nur aus dem AVM-Image, plus Dropbear und USB-Root. Und wie gesagt, es läuft sonst soweit rund.
 
Mit unnötigen Full-Quotes machst Du Dich bei den Moderatoren hier schnell unbeliebt.

Wenn Du die Grundlagen für die Ausführung von Shell-Skripts kennst, dann umso besser. Wenn Du mit einem Fehler kommst, kannst Du davon ausgehen, daß zunächst die einfachen Lösungsvorschläge kommen. Wenn Du die schon durch hast, kannst Du das schreiben, das spart Zeit auf beiden Seiten.

Ich meinte vorhin eher, ob lighttpd chroot verwendet oder nicht.

Außerdem, ist diese Datei test.pl tatsächlich genau das, was Du aufrufst? Die Ausgabe davon ist nicht genau das, was von einem CGI Skript erwartet wird.
 
Hallo RalfFriedl!

Sorry, ich habe mich hier noch nicht eingelebt, dachte nicht, dass Quotes ungern gesehen sind. War nicht böse gemeint.

Lighty benutzt ein chroot, ja. Was du mit deinen letzten zwei Sätzen meinst, verstehe ich jedoch nicht genau. Ich rufe test.pl bspw. über https://fritz.box/test.pl auf und erwarte eine ganz normale Ausgabe von "test..." ohne Header oder sowas.

Gruß, r.
 
Wenn du chroot benutzt, dann musst du perl und alle benötigten Libraries ins chroot kopieren.

MfG Oliver
 
Ich hatte oben zwei Punkte angesprochen:

Ist Dein Skript innerhalb des chroot ausführbar? Wie Oliver bereits geschrieben hat, müssen alle Programme und deren Libraries im chroot vorhanden sein, in diesem Fall also perl mitsamt allen Libraries. Als nicht Unix-Anfänger weißt Du das vermutlich.

Ich rufe test.pl bspw. über https://fritz.box/test.pl auf und erwarte eine ganz normale Ausgabe von "test..." ohne Header oder sowas.
Anscheinend erwartest Du das. Aber was erwartet der Web-Server?
 
Vielen, vielen Dank an olistudent und RalfFriedl.

Ja, ich wusste es schon mit den Libraries, hatte allerdings genau in diesem Fall nicht daran gedacht. Ein manuelles chroot über SSH hat mir die Augen geöffnet.

Ich habe durch Freetz auch schon einiges Neues über Unix (speziell Daemons) dazugelernt. So auch in diesem Fall.

Für alle anderen:
Um microperl zum Laufen zu bekommen musste ich folgende Schritte erledigen (Webserver macht chroot auf /www ):

Code:
cp /usr/bin/microperl /www/usr/bin/perl
chmod 755 /www/usr/bin/perl
mkdir /www/lib
cp /lib/ld-uClibc.so.0 /www/lib
cp /lib/libc.so.0 /www/lib
cp /lib/libgcc_s.so.1 /www/lib
cp /lib/libm.so.0 /www/lib
chmod -R 755 /www/lib

Nochmals vielen Dank für eure Hilfe!
Gruß, r.
 
Wie wäre es mit nem Minihowto im trac, damit das zentral irgendwo zu finden ist?
 
Das Kommando cp hat noch die praktische Option -p, damit kann man sich nachher das chmod sparen.
Code:
cp -p /usr/bin/microperl /www/usr/bin/perl
mkdir /www/lib
cp -p /lib/ld-uClibc.so.0 /www/lib
cp -p /lib/libc.so.0 /www/lib
cp -p /lib/libgcc_s.so.1 /www/lib
cp -p /lib/libm.so.0 /www/lib
Außerdem könnte man mehrere Dateien mit einem Kommando kopieren, wenn das Zielverzeichnis gleich ist und es einem nicht zu unübersichtlich wird.
 
Danke für den Tipp mit dem "preserve" Argument, wie gesagt, man lernt nie aus :)
Ich habe den Wiki-Artikel zum lighttpd etwas angepasst: http://trac.freetz.org/wiki/packages/lighttpd

Ich hoffe, ich bin damit niemandem auf die Füße getreten o.ä. (mein erster Wiki-Artikel).
 
Vergiss nicht, auf eventuelle Perl Module zu verweisen, die ggf. auch ins chroot kopiert werden müssen.

Ciao
Stephan
 
Du machst das auf USB-Root? Ist halt schlecht, wenn jemand ohne USBRoot deine Anleitung versucht. Vielleicht ersetzt du /www besser durch /var/media/ftp/uStorxy/www oder so. Ansonsten weiter so.

MfG Oliver
 

Neueste Beiträge

Statistik des Forums

Themen
244,695
Beiträge
2,216,684
Mitglieder
371,314
Neuestes Mitglied
Gjorstn
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.