Linode Forum
Linode Community Forums
 FAQFAQ    SearchSearch    MembersMembers      Register Register 
 LoginLogin [ Anonymous ] 
Post new topic  Reply to topic
Author Message
PostPosted: Sat Oct 30, 2010 10:53 am 
Offline
Newbie

Joined: Sat Oct 30, 2010 9:25 am
Posts: 4
Hello,

I'm running an almost new installation of Arch on a Linode 512.

I have Nginx configured to serve PHP as per the instructions in the LEMP section of the library. However, I am also trying to get Perl to work but am having some problems.

As there is no guide for configuring Perl with FastCGI on Arch, I tried to adapt one of the guides for a different OS. However, when I run
Code:
/usr/bin/fastcgi-wrapper.pl


I get the following error:
Code:
Illegal declaration of subroutine main::__INT16_C at /usr/lib/perl5/site_perl/_h2ph_pre.ph line 160.
Compilation failed in require at /usr/lib/perl5/site_perl/syscall.ph line 1.
Compilation failed in require at /usr/bin/fastcgi-wrapper.pl line 7.


Could anyone shed any light on the problem?

Thanks.


Top
   
 Post subject:
PostPosted: Sat Oct 30, 2010 1:52 pm 
Offline
Senior Member

Joined: Sun Mar 07, 2010 7:47 pm
Posts: 1970
Website: http://www.rwky.net
Location: Earth
That looks like a perl error to me. Whats the contents of your fastcgi-wrapper.pl ?


Top
   
 Post subject:
PostPosted: Sat Oct 30, 2010 2:21 pm 
Offline
Newbie

Joined: Sat Oct 30, 2010 9:25 am
Posts: 4
obs wrote:
That looks like a perl error to me. Whats the contents of your fastcgi-wrapper.pl ?

Exactly as here

That is:
Code:
#!/usr/bin/perl

use FCGI;
use Socket;
use POSIX qw(setsid);

require 'syscall.ph';

&daemonize;

#this keeps the program alive or something after exec'ing perl scripts
END() { } BEGIN() { }
*CORE::GLOBAL::exit = sub { die "fakeexit\nrc=".shift()."\n"; };
eval q{exit};
if ($@) {
   exit unless $@ =~ /^fakeexit/;
};

&main;

sub daemonize() {
    chdir '/'                 or die "Can't chdir to /: $!";
    defined(my $pid = fork)   or die "Can't fork: $!";
    exit if $pid;
    setsid                    or die "Can't start a new session: $!";
    umask 0;
}

sub main {
        $socket = FCGI::OpenSocket( "127.0.0.1:8999", 200 ); #use IP sockets
        $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );
        if ($request) { request_loop()};
            FCGI::CloseSocket( $socket );
}

sub request_loop {
        while( $request->Accept() >= 0 ) {
           
           #processing any STDIN input from WebServer (for CGI-POST actions)
           $stdin_passthrough ='';
           $req_len = 0 + $req_params{'CONTENT_LENGTH'};
           if (($req_params{'REQUEST_METHOD'} eq 'POST') && ($req_len != 0) ){
                my $bytes_read = 0;
                while ($bytes_read < $req_len) {
                        my $data = '';
                        my $bytes = read(STDIN, $data, ($req_len - $bytes_read));
                        last if ($bytes == 0 || !defined($bytes));
                        $stdin_passthrough .= $data;
                        $bytes_read += $bytes;
                }
            }

            #running the cgi app
            if ( (-x $req_params{SCRIPT_FILENAME}) &&  #can I execute this?
                 (-s $req_params{SCRIPT_FILENAME}) &&  #Is this file empty?
                 (-r $req_params{SCRIPT_FILENAME})     #can I read this file?
            ){
      pipe(CHILD_RD, PARENT_WR);
      my $pid = open(KID_TO_READ, "-|");
      unless(defined($pid)) {
         print("Content-type: text/plain\r\n\r\n");
                        print "Error: CGI app returned no output - ";
                        print "Executing $req_params{SCRIPT_FILENAME} failed !\n";
         next;
      }
      if ($pid > 0) {
         close(CHILD_RD);
         print PARENT_WR $stdin_passthrough;
         close(PARENT_WR);

         while(my $s = <KID_TO_READ>) { print $s; }
         close KID_TO_READ;
         waitpid($pid, 0);
      } else {
                   foreach $key ( keys %req_params){
                      $ENV{$key} = $req_params{$key};
                   }
                   # cd to the script's local directory
                   if ($req_params{SCRIPT_FILENAME} =~ /^(.*)\/[^\/]+$/) {
                           chdir $1;
                   }

         close(PARENT_WR);
         close(STDIN);
         #fcntl(CHILD_RD, F_DUPFD, 0);
         syscall(&SYS_dup2, fileno(CHILD_RD), 0);
         #open(STDIN, "<&CHILD_RD");
         exec($req_params{SCRIPT_FILENAME});
         die("exec failed");
      }
            }
            else {
                print("Content-type: text/plain\r\n\r\n");
                print "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not ";
                print "exist or is not executable by this process.\n";
            }

        }
}
[/url]


Top
   
 Post subject:
PostPosted: Sat Oct 30, 2010 7:28 pm 
Offline
Senior Member

Joined: Sun Mar 07, 2010 7:47 pm
Posts: 1970
Website: http://www.rwky.net
Location: Earth
Hrmm I assume you installed the arch equivalent of libfcgi-perl ? What's your perl version?


Top
   
 Post subject:
PostPosted: Sun Oct 31, 2010 9:10 am 
Offline
Newbie

Joined: Sat Oct 30, 2010 9:25 am
Posts: 4
obs wrote:
Hrmm I assume you installed the arch equivalent of libfcgi-perl ? What's your perl version?


Code:
This is perl 5, version 12, subversion 1 (v5.12.1) built for i686-linux-thread-multi


Yes, I have perl-fcgi installed.


Top
   
 Post subject:
PostPosted: Sun Oct 31, 2010 10:02 am 
Offline
Senior Member

Joined: Sun Mar 07, 2010 7:47 pm
Posts: 1970
Website: http://www.rwky.net
Location: Earth
Hrmm well my bright ideas are wearing thin, all I can suggest is try perl 5.12.2

_________________
Paid support
How to ask for help
1. Give details of your problem
2. Post any errors
3. Post relevant logs.
4. Don't hide details i.e. your domain, it just makes things harder
5. Be polite or you'll be eaten by a grue


Top
   
 Post subject:
PostPosted: Sun Oct 31, 2010 5:44 pm 
Offline
Newbie

Joined: Sat Oct 30, 2010 9:25 am
Posts: 4
obs wrote:
Hrmm well my bright ideas are wearing thin, all I can suggest is try perl 5.12.2

Thanks for the help regardless :)

I tried running a the script:
Code:
#!/usr/bin/perl
require 'syscall.ph'


On my friend's Debian VPS, on Perl version:
Code:
This is perl, v5.10.0 built for i486-linux-gnu-thread-multi


It runs fine. It causes the previously mentioned error with my setup. This does indeed seem to indicate that it's something to do with my version of Perl. I'll try some other versions and see what happens.


Top
   
 Post subject:
PostPosted: Sun Oct 31, 2010 9:31 pm 
Offline
Senior Member

Joined: Sun Mar 07, 2010 7:47 pm
Posts: 1970
Website: http://www.rwky.net
Location: Earth
Hrmm yes works for me on my ubuntu box running perl 5.10..so maybe a downgrade of perl is in order if the upgrade doesn't work?

Also..have you ensured all your cpan modules are up to date?

_________________
Paid support
How to ask for help
1. Give details of your problem
2. Post any errors
3. Post relevant logs.
4. Don't hide details i.e. your domain, it just makes things harder
5. Be polite or you'll be eaten by a grue


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
RSS

Powered by phpBB® Forum Software © phpBB Group