В свое время намучившись с устанвокой mod_perl к Apache2 на FreeBSD 6.2 и не найдя у гугла вразумительного ответа искал овтета на http://perl.apache.org, но там достаточно все зумедрено и много лишего, так что человеку выполняющему данную операцию в первый раз на голову вывалится куча бесполезнйо инфы, в которой он тту же запутается. Пишу эту тсатью людям таким же как и я, которые хоятт получить ответ на данный вопрос ПРОСТО и ПОНЯТНО. Без лишней "воды". Итак начнем. 1. Устанавливаем сам perl - его не мудрствовая лукаво, ставим из портов.
#cd /usr/ports/lang/perl5.8 #make install clean
2. Apache2 и mod_perl ставим из исходников, ибо другово вразумительного пути полд FreeBSD не знаю и заморачиваться не буду. Для начала создадим дирректорию куда сольем сорцы
#mkdir -p /work/src
Теперь тянем исходникеи сначала апача
#fetch http://apache.rinet.ru/dist/httpd/httpd-2.2.6.tar.bz2
Теперь mod_perl
#fetch http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz
Далее распаковываем архивы
#tar zxvf httpd-2.2.6.tar.bz2 #tar zxvf mod_perl-2.0-current.tar.gz
Теперь переходим к конфигурации и компиляции. #cd mod_perl-2.0.3 #/usr/bin/perl Makefile.PL \ MP_USE_STATIC=1 \ MP_AP_PREFIX="/work/src/httpd-2.2.6" \ MP_AP_CONFIGURE="--with-prefix=/usr/local/apache2 --with-mpm=prefork" #make #make install
Теперь немного пояснений. Вопервых опущена команда make test - под FreeBSD 6.2 она благополучно вываливалась с ошибкой. Теперь паораметры. MP_USE_STATIC=1 - значит что собираем mod_perl статично MP_AP_PREFIX="/work/src/httpd-2.2.6" - путь до дирректории с исходниками апача (для mod_perl2 - необходим apache2 дял mod_perl1 - соответсвенно первый апач) MP_AP_CONFIGURE="--with-prefix=/usr/local/apache2 --with-mpm=prefork" - указываем параметры, которые будут переданы скрипту конфигурации сервера Apache.
3. Запуск. Для анчала сделаем так чтобы наш сервер понял что за скрипты ледат в cgi-bin. Для этого в файле https.conf (в нашем случае он тут /usr/local/apache2/conf/httpd.conf) ищем строку
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
и после ней вставляем следующий блок текста
PerlModule ModPerl::Registry <Location /cgi-bin/> SetHandler perl-script PerlHandler ModPerl::Registry Options ExecCGI allow from all </Location> </IfModule>
Теперь пробуем запустить Apache.
#/usr/local/apache2/bin/httpd Если вылезла ошибка что то со словами No such file or directory: Failed to enable the 'httpready' Accept Filter (на работу апача она не влияет но лучше от ней избавится - апачу не нравится что не подгружен модуль ядра accf_http) то выполняем
#kldload accf_http
Перезаупскаем Apache
#killall -9 httpd #/usr/local/apache2/bin/httpd
4. Теперь необходимо проверить работоспособность perl скриптов. #ee /usr/local/apache2/cgi-bin/test.pl
вставляем туда следующий код
#!/usr/bin/perl print "Content-type: text/plain; charset=iso-8859-1\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; }
Далее в броузере набираем http://host/cgi-bin/test.pl На экране должно отобразится что то вроде
Content-type: text/plain; charset=iso-8859-1
DOCUMENT_ROOT="/usr/local/apache2/htdocs" GATEWAY_INTERFACE="CGI/1.1" HTTP_ACCEPT="text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1" HTTP_ACCEPT_CHARSET="iso-8859-1, utf-8, utf-16, *;q=0.1" HTTP_ACCEPT_ENCODING="deflate, gzip, x-gzip, identity, *;q=0" HTTP_ACCEPT_LANGUAGE="ru-RU,ru;q=0.9,en;q=0.8" HTTP_CACHE_CONTROL="no-cache" HTTP_CONNECTION="Keep-Alive, TE" HTTP_HOST="utmsrv.itk" HTTP_TE="deflate, gzip, chunked, identity, trailers" HTTP_USER_AGENT="Opera/9.23 (X11; Linux i686; U; ru)" MOD_PERL="mod_perl/2.0.3" MOD_PERL_API_VERSION="2" PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/ usr/X11R6/bin:/root/bin" QUERY_STRING="" REMOTE_ADDR="192.168.1.40" REMOTE_PORT="43034" REQUEST_METHOD="GET" REQUEST_URI="/cgi-bin/printenv" SCRIPT_FILENAME="/usr/local/apache2/cgi-bin/printenv" SCRIPT_NAME="/cgi-bin/printenv" SERVER_ADDR="192.168.10.42" SERVER_ADMIN="you@example.com" SERVER_NAME="utmsrv.itk" SERVER_PORT="80" SERVER_PROTOCOL="HTTP/1.1" SERVER_SIGNATURE="" SERVER_SOFTWARE="Apache/2.2.6 (Unix) mod_perl/2.0.3 Perl/v5.8.8"
Если такое видим - значит мы можем начинаеть писать на Perl свои web-приложения!