[Cascavel-pm] instalando mod_perl no Conectiva 10

glasswalk3r em yahoo.com.br glasswalk3r em yahoo.com.br
Terça Fevereiro 6 07:45:38 PST 2007


Oi Champs,

Luis Motta Campos luismottacampos em yahoo.co.uk wrote:

> Claro, você lembrou de reiniciar o webserver entre cada tentativa, certo?

<piadinha>Não, eu assoviei
(http://www-128.ibm.com/developerworks/library/os-whistle/index.html?ca=dgr-
lnxw02whistlework)  para ele fazer isso sozinho.</piadinha>

> Você tem um arquivo startup.pl declarado? Seria interessante ter um.

Não, eu não me preocupei em criar um. Achei que seria melhor testar com a
configuração mais simples possível (e nem isso funcionou).

> > Alguém já passou por isso?
> Eu, várias vezes. :-)

Eu tentei o FastCGI... achei um porre configurá-lo e deixei de lado. Se a
ferramenta não é mal documentada, eu ainda não encontrei o tutorial
adequado.

Minhas experiências com CGI's persistentes realmente não tem sido muito
boas...

> > Duramente minhas pesquisas eu encontrei alguns relatos de que era  
> > melhor
> > compilar mod_perl junto com os fontes do Apache já que os pacotes  
> > feitos
> > geralmente apresentam problemas. Vocês recomendam isso? Eu  
> > particularmente
> > prefiro trabalhar com pacotes.

> Sim, eu desconfio que este é o melhor caminho para você, também.
> É a melhor forma de evitar problemas com dependências entre bibliotecas
mais novas que 
> as que você tem.
>
> Se você puder me enviar os arquivos de configuração que você está  
> usando, a versão do seu apache (2.0?), sua versão do mod_perl e o  
> resultado de
>
>   perl -le 'print "@INC"'
>
>   para a gente dar uma sapeada, pode ser que o pessoal da lista (eu  
> inclusive) pegue alguma coisa estranha nas suas configurações.

Aí vai as informações:

Versão do Apache:

[Mon Feb 05 23:24:45 2007] [notice] Apache/2.0.49 (Unix) mod_perl/1.99_13
Perl/v5.8.3 configured -- resuming normal operations

mod_perl 1.99_13? Muito esquisito... isso só é quase a versão 2?

O caminho de busca dos módulos:

[root em foobar conf]# perl -e 'map { print "$_\n"; } @INC'
/usr/lib/perl5/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/5.8.3
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl

Arquivo de configuração do Apache:

httpd.conf:

LoadModule perl_module modules/mod_perl.so
PerlModule Apache2

Alias /perl /srv/www/default/perl
<Location /perl/>
    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    PerlOptions +ParseHeaders
    Options +ExecCGI
</Location>

Rodando um programa de teste:

<code>
#!/usr/bin/perl

use CGI qw(standard);
use warnings;
use strict;

our $counter;

( $counter ) ? ( $counter++ ) : ( $counter = 1 );

my $cgi = CGI->new();
print $cgi->header, "You are request number $counter. Have a good day!\n";
</code>

Esse foi o resultado:

[Mon Feb 05 23:26:18 2007] [error] 5019: ModPerl::Registry: Can't locate
Apache.pm in @INC (@INC contains:
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi/Apache2
/usr/lib/perl5/5.8.3/i386-linux-thread-multi /usr/lib/perl5/5.8.3
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl . /etc/apache/
/etc/apache/lib/perl) at /usr/lib/perl5/5.8.3/CGI.pm line 194.\nCompilation
failed in require at /srv/www/default/perl/ajax.cgi line 3.\nBEGIN
failed--compilation aborted at /srv/www/default/perl/ajax.cgi line 3.\n

Resolvi procurar o módulo ausente:

[root em foobar conf]# find /usr -name Apache.pm
/usr/lib/perl5/5.8.3/CGI/Apache.pm
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi/DBI/ProfileDumper/Apa
che.pm

Isso não foi produtivo, mas me deu uma idéia de que o culpado poderia ser o
CGI.pm: testei o código abaixo e funcionou perfeitamente:

<code>
#!/usr/bin/perl

#use CGI qw(standard);
use warnings;
use strict;

our $counter;

( $counter ) ? ( $counter++ ) : ( $counter = 1 );

print "Content-type: text/plain\n\n";
print "You are request number $counter. Have a good day!\n";
</code>

E depois de executar algumas vezes, gerou isso:

You are request number 7. Have a good day!

O mod_perl não ajudou muito com a mensagem de erro anterior, mas parece que
meu módulo CGI.pm é novo demais para a versão do mod_perl que tenho
instalada. Uma fuçada no código do CGI.pm e encontrei isso:

# Turn on special checking for Doug MacEachern's modperl
if (exists $ENV{MOD_PERL}) {
  # mod_perl handlers may run system() on scripts using CGI.pm;
  # Make sure so we don't get fooled by inherited $ENV{MOD_PERL}
  if (exists $ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2)
{
    $MOD_PERL = 2;
    require Apache2::Response;
    require Apache2::RequestRec;
    require Apache2::RequestUtil;
    require Apache2::RequestIO;
    require APR::Pool;
  } else {
    $MOD_PERL = 1;
    require Apache;
  }
}

A documentação diz que a versão mínima para compilar o mod_perl2 do CGI.pm
é 3.11:

[root em foobar conf]# perl -MCGI -e 'print $CGI::VERSION, "\n"'
3.17

Até aí tudo bem. Resolvi arriscar um pouco mais:

<code>
#!/usr/bin/perl

BEGIN{

$ENV{MOD_PERL_API_VERSION} = 2;

}

use CGI qw(standard);
use warnings;
use strict;

our $counter;

( $counter ) ? ( $counter++ ) : ( $counter = 1 );

my $cgi = CGI->new();
print $cgi->header, "You are request number $counter. Have a good day!\n";
</code>

Esse foi o resultado:

[Tue Feb 06 00:11:06 2007] [error] 5019: ModPerl::Registry: Can't locate
object method "register_cleanup" via package "Apache::RequestRec" at
/usr/lib/perl5/5.8.3/CGI.pm line 347.\n

Parece que estou num mato sem cachorro. Vou ter que apelar para a
compilação manual do mod_perl2? Não sei se fazer um downgrade do CGI.pm é
uma boa idéia.

[]'s
Alceu


--------------------------------------------------------------------
mail2web.com – Enhanced email for the mobile individual based on Microsoft®
Exchange - http://link.mail2web.com/Personal/EnhancedEmail




Mais detalhes sobre a lista de discussão Cascavel-pm