Mod_perl fa parte di quel gruppo di moduli non incluso nella distribuzione standard che ormai è diventato un progetto a parte, direttamente supportato dalla Apache Foundation.
Di fatto mod_perl permette di integrare in Apache un interprete Perl, con notevoli vantaggi in termini di prestazioni rispetto ad un sito che utilizza script CGI scritti in Perl.
Insiene a Java e PHP è uno dei linguaggi server side più utilizzati con Apache.
Il codice sorgente è disponibile sul sito ufficiale (http://perl.apache.org/) oppure presso l'archivio di CPAN (http://www.perl.com/CPAN/modules/by-module/Apache/).
Procedura di massima per l'installazione di mod_perl
Il primo esempio si riferisce all'installazione del mod_perl come modulo che viene caricato dinamicamente tramite apxs, questa soluzione non è del tutto idonea poiché storicamente mod_perl ha avuto dei problemi con questa configurazione.
- Download del package
- Scompattare il package:
[neo@dido neo]$ tar zxvf mod_perl-1.0-current.tar.gz
- Compilare seguendo l seguenti passi:
[neo@dido mod_perl-1.27]$ perl Makefile.PL WITH_APXS=/usr/local/apache/bin/apxs \
PERL_MARK_WHERE=1 \
EVERYTHING=1
[neo@dido mod_perl-1.27]$ make
[neo@dido mod_perl-1.27]$ make test
[neo@dido mod_perl-1.27]$ make install
La seconda possibilità è quella di installare il mod_perl in modo statico ovvero in modalità Builtin direttamente con il core di Apache. Rispetto alla procedura precedente, richiede i sorgenti di Apache e parametri differenti nel lancio del Makefile.PL.
Ecco un esempio:
[neo@dido mod_perl-1.27]$ perl Makefile.PL APACHE_SRC=/usr/src/apache-1.3.19 \
DO_HTTPD=1 \
PERL_MARK_WHERE=1 \
EVERITHING=1 \
[Altre opzioni]
L'alternativa alla compilazione di sorgenti è l'installazione dei binari tramite RPM, ormai tutte le principali distribuzioni prevedono la possibilità di installare direttamente mod_perl con Apache.
Di seguito sono riportate le principali direttive, implementate con l'installazione del modulo.
PerlChildInitHandler e PerlChildExitHandler - Gestione dei processi figli.
PerlPostReadRequestHandler e PerlInitHandler - Header Manipulation.
PerlTransHandler - Transla L'url in un filename come Alias.
PerlHeaderParserHandler - Manipolazione delle richieste HTTP, post translation.
PerlAccessHandler - Controllo degli accessi.
PerlAuthenHandler - Autenticazione utente, come AuthType e AuthUserFile.
PerlAuthzHandler - Autenticazione Utente come la direttiva require.
PerlTypeHandler - Translazione da URL a MIME type, come AddType
PerlFixupHandler - Direttiva per la gestione di processi addizionali, come ad esempio il settaggio dell'enviroment di un CGI
PerlHandler - HTTP response e generazione dei contenuti.
PerlLogHandler - Logging
PerlCleanupHandler - Direttiva per la gestione della chiusura delle connessioni
La direttiva comunemente utilizzata è PerlHandler, la quale permette di definire i vari "handler" per la generazione dei contenuti, un esempio sono i CGI.
Di seguito sono riportati alcuni esempi esplicativi della funzionalità del modulo mod_perl.
Parsing Header
Normalmente mod_perl non gestisce gli header inviati da altri moduli, per far si che tenga in considerazione anche gli Header settati da moduli come mod_expire occorre settare ad on la seguente direttiva:
PerlSendHeader on
Inizializzazione dei moduli allo start-up
Mod_perl ha la possibilità di fare un pre-load dei moduli (PerlModules) all'avvio di Apache evitando così un successivo caricamento se un'altro modulo o script CGI lo richiede, diventando cosi una risorsa comune per tutti i moduli o script che ne fanno uso. Il pre-load del caricamento dei moduli perl è consentito grazie alla direttiva PerlModule:
PerlModule Apache::Registry Apache::Status Apache::DB
oppure
PerlModule Apache::Registry
PerlModule Apache::Status
PerlModule Apache::DB
Status Page con mod_perl
Tramite il modulo perl Apache::Status (che richiede Apache::Registry) è possibile generare una pagina di status del server:
< Location /info>
AddHandler perl-script .perl
PerlHandler Apache::Status
AddHandler server-info .info
AddHandler server-status .status
<Location >
Eseguire i CGI script da mod_perl
Il modulo più utilizzato in queste occasioni è Apache::Registry, poiché permette di cachare il CGI velocizzando le successive operazioni. E' possibile settare una directory che verrà gestita dalla direttiva PerlHandler Apache::Registry:
Alias /cgi /usr/local/apache/cgi-bin/
<Location /cgi>
Option +ExecCGI
SetHandler perl-script
PerlHandler Apache::Registry
</Location>
CPAN ovvero Comprehensive Perl Archive Network è un repository per moduli, documentazione, ports, script e quant'altro tutto relativo al perl, suddiviso in varie categorie per agevolare il download e la ricerca delle risorse.
CPAN.pm è il modulo Perl che permette di eseguire ricerche, scaricare, compilare moduli Perl dal sito cpan.org.
Lo scopo di questo modulo è quello di automatizzare il processo di installazione di un modulo Perl, il quale viene scaricato, scompresso in una directory dedicata e successivamente compilato e installato.
Per agevolare l'utente nell'uso di questa utility il modulo gestisce tramite un "session manager" cio che è stato scaricato, compilato e installato e tramite un "cache manager" gestice anche lo spazio su disco occupato dalle risorse installate.
Sono possibili due metodi di utilizzo del modulo, quello interattivo che permette di avere a disposizione una shell particolare in cui poter lanciare i comandi di ricerca, compilazione e installazione oppure in modalità batch mode.
Interactive Mode
Per avviare la modalità interattiva occore lanciare il seguente comando:
[neo@dido neo]$ perl -MCPAN -e shell
Nel caso in cui fosse la prima volta che viene lanciato il comando, vengono presentati all'utente alcuni quesiti per la configurazione del modulo, indispensabili per lo scaricamento e la compilazione dei moduli.
[neo@dido neo]$ perl -MCPAN -e shell
/home/neo/.cpan/CPAN/MyConfig.pm initialized.
CPAN is the world-wide archive of perl resources. [...]
Richiede se si vuole effettuare una configurazione manuale
Are you ready for manual configuration? [yes] yes
Selezione della cache directory
I see you already have a directory
/home/neo/.cpan
Shall we use it as the general CPAN build and cache directory?
CPAN build and cache directory? [/home/neo/.cpan]
Configurazione dello spazio massimo da riservare alla cache
Cache size for build directory (in MB)? [10]
Opzioni per lo scanning della cache per ottimizzare le funzioni di CPAN
Perform cache scanning (atstart or never)? [atstart]
Configurazione per la compilazione di moduli che hanno dipendenze, si ha la possibilità di downlodare, compilare e installare le dipendenze in modo del tutto automatico. Scelta consigliata.
Policy on building prerequisites (follow, ask or ignore)? [follow]
Verifica del path di alcuni comandi e programmi
Where is your gzip program? [/bin/gzip]
Where is your tar program? [/bin/tar]
Where is your unzip program? [/usr/bin/unzip]
Where is your make program? [/usr/bin/make]
Where is your lynx program? [/usr/bin/lynx]
Where is your ncftpget program? [/usr/bin/ncftpget]
Where is your ftp program? [/usr/bin/ftp]
What is your favorite pager program? [/usr/bin/less]
What is your favorite shell? [/bin/bash]
Opzioni standard da passare ai comandi per la compilazione come il prefisso predefinito
Parameters for the 'perl Makefile.PL' command? []
Parameters for the 'make' command? []
Parameters for the 'make install' command? []
Settaggio del time-out per il comando Makefile.pl
Timeout for inactivity during Makefile.PL? [0]
Settaggio di eventuali proxy server per accedere alle risorse.
Your ftp_proxy?
Your http_proxy?
Your no_proxy?
Download del file contenente i mirror site di cpan.org
You have no /home/neo/.cpan/sources/MIRRORED.BY
I'm trying to fetch one
CPAN: LWP::UserAgent loaded ok
Fetching with LWP:
ftp://ftp.perl.org/pub/CPAN/MIRRORED.BY
MIRRORED.BY: 125.78 kB 37.56 kB/s
Settaggio del mirror da cui eseguire i download delle risorse
(1) Africa
(2) Asia
(3) Central America
(4) Europe
(5) North America
(6) Oceania
(7) South America
[...]
(1) Austria
...
(15) Italy
...
(31) United Kingdom
Select your country (or several nearby countries) []
(1) ftp://cis.uniRoma2.it/CPAN/
(2) ftp://ftp.edisontel.it/pub/CPAN_Mirror/
(3) ftp://ftp.flashnet.it/pub/CPAN/
(4) ftp://ftp.unina.it/pub/Other/CPAN/CPAN/
(5) ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
(6) ftp://gusp.dyndns.org/pub/CPAN
(7) ftp://softcity.iol.it/pub/cpan
(8) http://cpan.nettuno.it/
Select as many URLs as you like []
Settaggio del Wait server
Your favorite WAIT server?
[wait://ls6.informatik.uni-dortmund.de:1404]
commit: wrote /home/neo/.cpan/CPAN/MyConfig.pm
Ed infine la shell da dove poter inviare i comandi
cpan shell -- CPAN exploration and modules installation (v1.52)
ReadLine support available (try ``install Bundle::CPAN'')
Batch mode
Il modulo CPAN.pm in modalità batch mode (utilizzato in uno script Perl) viene inizializzato come qualsiasi altro modulo perl. Nell'esempio che segue viene inizializzato il modulo e viene installato l'utility MakeMaker
use CPAN ;
my $obj = CPAN::Shell->install ('ExtUtils'::MakeMaker');
Tramite la shell messa a disposizione dal modulo CPAN.pm è possibile interrogare i server remoti per ricercare, downlodare e compilare un modulo Perl, soddisfandone anche le dipendenze.
Lanciare la shell interattiva:
[neo@dido neo]$ perl -MCPAN -e shell
Per richiamare l'help della shell è sufficiente lanciare il comando ?
cpan> ?
Criteri di visualizzazione delle informazioni, indispensabili per una ricerca
Display Information
a authors
b string display bundles
d or info distributions
m /regex/ about modules
i or anything of above
r none reinstall recommendations
u uninstalled distributions
Lista dei comandi per il download e la compilazione del modulo
Download, Test, Make, Install...
get download
make make (implies get)
test modules, make test (implies make)
install dists, bundles make install (implies test)
clean make clean
look open subshell in these dists' directories
readme display these dists' README files
Comandi per gestire la configurazione e l'indice dei mirror
Other
h,? display this menu ! perl-code eval a perl command
o conf [opt] set and query options q quit the cpan shell
reload cpan load CPAN.pm again reload index load newer indices
autobundle Snapshot force cmd unconditionally do cmd
Esempi di comandi:
Installazione del modulo Bundle::CPAN e delle relative dipendenze
cpan> install Bundle::CPAN
Ricerca dei moduli che relativi ad X11
cpan> m /X11::*/
Scaricamento e reload di nuovi indici
cpan> reload index
Abilitazione del debug in modalita' complete
cpan> o debug on Complete
Settaggio impostazioni, in questo caso viene settato a 15M lo spazio riservato alla cache.
cpan> o conf build_cache 15
build_cache 15
Salvataggio delle impostazioni modificate
cpan> o conf commit
commit: wrote /home/neo/.cpan/CPAN/MyConfig.pm
Query per avere informazioni sul modulo con id vga
cpan> i vga
Strange distribution name [vga]Module id = vga
CPAN_USERID SCOTTVR (Scott VanRavenswaay
CPAN_VERSION 0.4
CPAN_FILE S/SC/SCOTTVR/perl-vgalib-0.4.tgz
INST_FILE (not installed)