perl + mod_fcgid

Apache, Lighttpd, nginx, Cherokee
hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

perl + mod_fcgid

Post by hever » 2008-06-16 18:54

Hallo zusammen,
ich möchte perl mit mod_fcgid zum laufen bringen. (Perl funktioniert bereits über AddHandler cgi-script .cgi .pl)
PHP läuft bei mir bereits ohne Probleme mit mod_fcgid und suExec.

Das Problem ist, dass ich immer nur einen Internal Server Error erhalte und das Script auch nicht aufgerufen wird, da die testdatei nicht erzeugt wird, auch an einem Premature end of script headers zu erkennen.

Vhost config:

Code: Select all

<VirtualHost *:80>
    ServerName DOMAN.TLD
    ServerAlias WWW.DOMAIN.TLD

    SuexecUserGroup UID GID
    DocumentRoot /var/www/UID//public/

    ErrorLog "|usr/sbin/rotatelogs /var/www/UID//public//.logs//%Y-%m-%d.error.log 86400 120"
    CustomLog "|usr/sbin/rotatelogs /var/www/UID//public//.logs//%Y-%m-%d.access.log 86400 120" combined

    <Directory /var/www/UID//public//>
        AddHandler fcgid-script .php .php3 .php4 .php5 .php6 .pl
        FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php
        FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php3
        FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php4
        FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php5
        FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php6
        FCGIWrapper /var/www/cgi-bin/UID/perl-fcgi .pl
       
        # Scheint mir nicht erforderlich
        Options +ExecCGI

        AllowOverride AuthConfig Indexes FileInfo
        Order Allow,Deny
        Allow from All
    </Directory>
</VirtualHost>


perl-fcgi wrapper script:

Code: Select all

#!/bin/sh

exec /usr/bin/perl

oder

#!/usr/bin/perl



perl.pl testscript:

Code: Select all

#!/usr/bin/perl

use strict;
use CGI::Carp qw(fatalsToBrowser);

my $headline = "Ein sauberes Script!";

print "Content-type: text/htmlnn";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "n";
print "<html><head><title>Test</title></head><body>n";
print "<h1>$headline</h1>n";
print "<p>nur auf das CGI-Modul wurde hier verzichtet ;-)</p>n";
print "</body></html>n";


open(DATEI, ">server.cfg") || die "Datei nicht gefunden";
print DATEI "test";
close(DATEI);


Fehler:

Code: Select all

[Mon Jun 16 18:35:17 2008] [notice] mod_fcgid: call /var/www/UID/public/perl.pl with wrapper /var/www/cgi-bin/UID/perl-fcgi
[Mon Jun 16 18:35:17 2008] [notice] mod_fcgid: server /var/www/UID/public/perl.pl(2651) started
[Mon Jun 16 18:35:20 2008] [notice] mod_fcgid: process /var/www/UID/public/perl.pl(2651) exit(communication error), terminated by calling exit(), return code: 0

[Mon Jun 16 18:35:18 2008] [error] [client ] Premature end of script headers: perl.pl

(keine suExec Fehler)

Wenn ich perl mit der option -v aufufe erhalte ich folgendes errorlog:

Code: Select all

[Mon Jun 16 18:41:42 2008] [notice] mod_fcgid: call /var/www/UID/public/perl.pl with wrapper /var/www/cgi-bin/UID/perl-fcgi
[Mon Jun 16 18:41:42 2008] [notice] mod_fcgid: server /var/www/UID/public/perl.pl(2786) started

This is perl, v5.8.8 built for x86_64-linux-gnu-thread-multi

Copyright 1987-2006, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

[Mon Jun 16 18:41:48 2008] [notice] mod_fcgid: process /var/www/UID/public/perl.pl(2786) exit(communication error), terminated by calling exit(), return code: 0


Ich habe -v einfach mal mitgegeben und erwartet die Informationen würden im Browser erscheinen. Dort gibt es aber wieder nur den Internal Server Error. -w ändert nichts.

Ich hoffe auf Ratschläge wie ich Perl nun dazu bringen kann das Script auszuführen.
Das FCGID Wrapper Script wird aufgerufen. Dies ist an dem Versuch mit -v zu erkennen.
Ich habe auch mal anstelle von perl das php binary eingetragen. Dann wurde das perl script mit php geparst. (PHP Anweisungen wurden auch ausgeführt.)
Das Problem liegt also beim Aufruf des perl scripts vom Wrapper Script.

Die Berechtigungen scheinen mir alle in Ordnung, zumal es auch als PHP Script ausgeführt werden konnte.
Zudem hat es noch die Ausführen bits gesetzt.

Hoffentlich kann mir jemand weiterhelfen, warum das wrapper script das perl script nicht aufruft....

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: perl + mod_fcgid

Post by Roger Wilco » 2008-06-16 19:19

Ganz einfach: du hast kein Perlskript, das FastCGI unterstützt.

-> http://search.cpan.org/search?query=FCGI&mode=module

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: perl + mod_fcgid

Post by hever » 2008-06-18 17:49

Ja danke, du hattest recht.
Das hab ich jetzt auch verstanden, jedoch klappt es auch nicht mit einem richtigen fastcgi perl script...

http://www.fastcgi.com/devkit/doc/fastc ... h3perl.htm

Code: Select all

#!/usr/bin/perl

use FCGI; # Imports the library; required line

# Initialization code

$cnt = 0;

# Response loop

while (FCGI::accept >= 0) {
  print "Content-type: text/htmlrnrn";
  print "<head>n<title>FastCGI Demo Page (perl)</title>n</head>n";
  print  "<h1>FastCGI Demo Page (perl)</h1>n";
  print "This is coming from a FastCGI server.n<BR>n";
  print "Running on <EM>$ENV{SERVER_NAME}</EM> to <EM>$ENV{REMOTE_HOST}</EM>n<BR>n";
   $cnt++;
  print "This is connection number $cntn";
}


Die Erklärung liegt wohl tatsächlich darin, dass man eine spezielle perl binary braucht (http://www.fastcgi.com/devkit/doc/fastc ... h3perl.htm)
Before you can build FastCGI applications in Perl, you must have a FastCGI-savvy version of the Perl interpreter.


Ich habe jedoch mit jemandem im IRC gechattet, der mir sagte er habe es ohne besondere perl Version laufen...
Last edited by hever on 2008-06-18 17:57, edited 2 times in total.

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: perl + mod_fcgid

Post by Roger Wilco » 2008-06-18 17:55

Und welche Meldungen erhältst du jetzt?

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: perl + mod_fcgid

Post by hever » 2008-06-18 17:57

Die Fehlermeldungen sind die gleichen...

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: perl + mod_fcgid

Post by hever » 2008-06-18 18:01

Das FastCGI perl Testscript läuft auch als normales CGI script.

Tut das Script nicht auch letztendlich das gleiche egal ob ich es mit FastCGI oder "normalem" CGI ausführe. Also als deamon agieren, nur langsamer?

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: perl + mod_fcgid

Post by Roger Wilco » 2008-06-18 18:23

hever wrote:Das FastCGI perl Testscript läuft auch als normales CGI script.

Dann ist da noch etwas anderes kaputt.

hever wrote:Tut das Script nicht auch letztendlich das gleiche egal ob ich es mit FastCGI oder "normalem" CGI ausführe. Also als deamon agieren, nur langsamer?

In der Ausgabe sicherlich, aber normalerweise kann man ein FastCGI Skript nicht via CGI ausführen und andersherum.

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: perl + mod_fcgid

Post by hever » 2008-06-18 18:49

Ich glaube es liegt an der Binary:
hever wrote:Die Erklärung liegt wohl tatsächlich darin, dass man eine spezielle perl binary braucht (http://www.fastcgi.com/devkit/doc/fastc ... h3perl.htm)
Before you can build FastCGI applications in Perl, you must have a FastCGI-savvy version of the Perl interpreter.



Roger Wilco wrote:
hever wrote:Das FastCGI perl Testscript läuft auch als normales CGI script.

hever wrote:Tut das Script nicht auch letztendlich das gleiche egal ob ich es mit FastCGI oder "normalem" CGI ausführe. Also als deamon agieren, nur langsamer?

In der Ausgabe sicherlich, aber normalerweise kann man ein FastCGI Skript nicht via CGI ausführen und andersherum.

Aber mein Script konnte ich ja Problemlos als normales CGI Script ausführen. Also entweder ist es immer noch kein richtiges FastCGI Script (aber das glaube ich eher nicht, da es schließlich von der FastCGI Seite kommt) oder es geht doch (FastCGI Script unter CGI ausführen). In die andere Richtung, also das ein normales CGI Script unter FastCGI läuft kann ich mir persönlich zwar vorstellen, aber so wie wohl FastCGI funktioniert, also auf Deamons basierend, wird es wohl eher nicht möglich sein ein normales CGI Script unter FastCGI laufen zu lassen.

Wieder http://www.fastcgi.com/devkit/doc/fastc ... h3perl.htm:
The FastCGI-savvy binaries are extensions of standard Perl, and are intended to replace your existing Perl installation. There is no need to maintain two versions of Perl: the version that we supply will work fine when invoked from a shell or a CGI program.


Es gibt dieses savvy binary jedoch nicht für Debian und ich müsste es selber bauen um letztendlich festzustellen ob es daran liegt. Da ich aber auf jeden Fall die Ausführung normaler CGI Scripte den Nutzern anbieten möchte, bleibe ich beim "normalen" CGI. Ich glaube mom. nicht das ein normales CGI Script unter FastCGI läuft.