Alapértelmezetten az OpenBSD alaprendszerében található Apache 1.3 chroot-olva fut a /var/www könyvtárban. Röviden ez annyit jelent, hogy az Apache által kiszolgált oldalak és alkalmazásók a /var/www könyvtárat látják root (/) könyvtárként. A Perl CGI állományok esetében például a teljes /usr/lib/perl mappát be kellene másolni a /var/www könyvtár alá, hogy a Perl elérhető legyen a CGI programjaink számára. Ez eléggé kezelhetetlen, nem igazán helytakarékos.
A mod_perl megfelelő beállítása esetén működésre bírhatjuk Perl-ben írt CGI programjainkat anélkül, hogy a releváns Perl binárisokat és libeket bemásolnánk az Apache chroot gyökérkönyvtárába, illetve növeli is a Perl CGI programok teljesítményét ez a modul.
Telepítsük fel csomagból vagy a ports fából a mod_perl alkalmazást.
Utána aktiváljuk az előírásoknak megfelelően:
# mod_perl-enable
Ezután állítsuk be azt a vhost-ot, ahol Perl alapú CGI állományokat szeretnénk futtatni.
Vegyük fel az alábbi sorokat a vhost-ot definiáló konfigurációs fájlba
PerlModule Apache::Registry ... SetHandler perl-script PerlHandler Apache::Registry PerlRequire /var/www/..../cgi-bin/startup.pl Options +ExecCGI PerlSendHeader On
A legfontosabb opció a startup.pl fájl. Ezt a fájlt mi hozzuk létre és a tartalma nem más, mint a CGI scriptjeink által használt Perl modulok behívása. Erre azért van szükség, mert az Apache chroot előtt a mod_perl segítségével betölti a teljes Perl futtatókörnyezetet a memóriába, a mod_perl pedig a PerlRequire utasítás alapján betölti a szükséges modulokat. Chroot után ezek az állományok már nem lennének elérhetőek a mod_perl számára, ezért szükséges az Apache indulásakor az összes modul betöltése.
Nálam a cvsweb-hez készült ez a vhost és a startup.pl az alábbi sorokat tartalmazza:
use strict; use File::Basename (); use Time::Local (); use IPC::Open2 qw(open2); 1;
Az utolsó sorban lévő 1; feltétlenül szükséges, mert enélkül a startup.pl hamis értékkel tér vissza és a mod_perl leállítja az Apache-t.
Láthatjuk, hogy az egyedüli nehézséget az összes használatban lévő modul megtalálása jelenti. Természetesen arra is figyeljünk, hogyha Perl scriptjeink meghívnak más binárisokat is, akkor azokat is be kell másolnunk a /var/www alá a szükséges lib-ekkel együtt.