Как установить мод perl 2.0.9 в Apache 2.4 на OS X Yosemite?

с выпуском OS X 10.10 Yosemite Apple обновила свой сервер Apache до версии 2.4.

во время выпуска mod_perl 2.0.8 был несовместим с Apache 2.4, А mod_perl 2.0.9 еще не был официально выпущен (подробнее).

Итак, Apache был включен без него.

Я работаю локально на веб-сайте, используя perl и нужно установить него.

Я опытный программист, но я никогда не делал ничего подобного раньше, и только моя основная машина для работы. Я не против потратить некоторое время, чтобы понять это, но я не могу позволить себе Борк моего локального сервера.

Как установить mod_perl на OS X Yosemite?

подвопросы:

  • какую версию лучше устанавливать?
  • загрузить его в место установки или в другое место?
  • где я могу установить его?
  • несколько есть другие зависимости, которые необходимо установить заранее?
  • должен ли я повторно создать установку apache или установка mod_perl автономна?

Я опытен в bash и очень удобен в использовании терминала.

4 ответов


mod_perl 2.0.8 (последняя стабильная) не сократит его-он не знает об устаревании MPM_NAME в apache 2.4.икс Загрузите последнюю версию dev через svn:

svn checkout https://svn.apache.org/repos/asf/perl/modperl/trunk/ mod_perl-2.0

в файле изменений эта версия указана как 2.0.9-dev

Xcode 6.01 не будет вырезать его-это заголовки apache заставит mod_perl думать, что вы используете apache 2.2.26; получить Xcode 6.1 (выпущен 20 октября).

Makefile.PL по-прежнему будет трудно найти ap_release.h (чтобы получить версию apache). Это здесь:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/apache2/ap_release.h

Makefile.PL будет выглядеть по умолчанию в /usr/include/apache2. Он также будет искать заголовки apr в /usr/include/apr-1 потому что Йосемити-включен /usr/bin/apr-1-config скажет ему, что они там (они на самом деле в /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/apr-1 )

/usr/bin/apr-1-config --includedir
/usr/include/apr-1

я попытался установить env vars MP_AP_PREFIX и MP_APR_CONFIG соответствующим образом, но эти значения, казалось, игнорировались. Поэтому я облегчил себе задачу:--17-->

$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/apache2 /usr/include/apache2

$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/apr-1 /usr/include/apr-1

(спасибо Шону Койну)в блог Джейсона А. Кроума пост "llvm / clang на OS X по умолчанию C99, но mod_perl ожидает 89 "standard"

$ perl Makefile.PL MP_CCOPTS=-std=gnu89; make ; sudo make install

на LoadModule линия для mod_perl был удален из Йосемити .
Добавить

LoadModule perl_module libexec/apache2/mod_perl.so

в раздел модуль /etc/apache2/httpd.conf


дополнительное завинчивание требуется в El Capitan!

в El Capitan Apple запрещает пользователям писать в любом месте под /usr / кроме / usr/local/

ссылаясь на ответы Дэна Дила и Эндрю Свифта выше, и предполагая, что у вас установлен Xcode 7 и El Capitan (10.11) SDK:

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/apache2 /usr/local/include/apache2
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/apr-1 /usr/local/include/apr-1

будет мягкой связью заголовков Xcode с /usr/местные/включать.


Далее, мы должны сказать Makefile.PL где найти заголовки (поскольку по умолчанию предполагается /usr/include).

sudo cp /usr/sbin/apxs /usr/local/bin

сделать копию инструмента APXS, который Makefile.PL используется для поиска заголовков apache. Теперь отредактируйте его:

sudo vi /usr/local/bin/apxs        (or)
sudo nano /usr/local/bin/apxs

найдите строку, которая говорит:

my $prefix         = get_vars("prefix");

и замените его на:

my $prefix         = "/usr/local";

убедитесь, что /usr / local / bin находится на вашем пути перед /usr / sbin, чтобы он взял тот, который вы только что изменили:

export PATH=/usr/local/bin:$PATH

теперь вы можете идти вперед и строить него:

perl Makefile.PL MP_CCOPTS=-std=gnu89; make ; sudo make install

наконец, при редактировании httpd.conf, вам нужно явно передать полный путь к mod_perl.Итак, поскольку это не в каталоге, который apache ожидает найти:

LoadModule perl_module /usr/local/libexec/apache2/mod_perl.so

это упрощенная версия ответа Dan Deal, с несколькими заметками для менее опытных разработчиков.

вам потребуется установить Xcode 6.1 из Mac App Store. Xcode-это набор инструментов, разработанных Apple для разработки программного обеспечения iOS и OS X. Он занимает почти 6gb, но можно удалить после этой установки.

запустите Xcode один раз, чтобы согласиться с условиями Apple.

В Терминале, перейдите в любой временный каталог, затем загрузите mod_perl 2.0.9-dev: (Внимание - "любой временный каталог" должен быть на корневом Томе и не должен иметь любые символы пробела в имени каталога; в противном случае скрипты make потерпят неудачу позже)

svn checkout https://svn.apache.org/repos/asf/perl/modperl/trunk/ mod_perl-2.0

перейдите во вновь созданный каталог mod_perl:

cd mod_perl-2.0

скажите установщику, где искать детали:

/usr/bin/apr-1-config --includedir /usr/include/apr-1
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/apache2 /usr/include/apache2
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/apr-1 /usr/include/apr-1

(ln-s делает символическую ссылку, а apr-1-config программа используется для получения информации о библиотеке apr и обычно используется для компиляции и ссылки на библиотеку.)

(внимание-на некоторых установках Yosemite каталог /usr/include не существует; вы возможно, придется создать его с помощью cd/usr; mkdir include)

принять от него:

perl Makefile.PL MP_CCOPTS=-std=gnu89; make ; sudo make install

удалить временную папку mod_perl-2.0.

скажите apache включить mod_perl в apache файл httpd.conf:

sudo vi /etc/apache2/httpd.conf (or)
sudo nano /etc/apache2/httpd.conf

добавить следующую строку в конце списка включает, около строки 170:

LoadModule perl_module libexec/apache2/mod_perl.so

сохранить, выйти и перезапустить apache:

sudo apachectl restart

Спасибо за все выше указателей. Вот решение / receipe, строящееся из источника без символической ссылки на нечетные файлы в Xcode и избегающее ошибки "ожидаемое в: плоское пространство имен".

(edit:) к моему большому удивлению, httpd, который предоставляет Apple (2.4.16), теперь способен работать с мой от него!

0 Xcode 7.3 (beta) и utils командной строки, OS X 10.11.3 El Capitan

1 установить perl,С темы:

perlbrew install -f -Dusethreads perl-stable; 

я поставил perl в /usr / local / perl5/

2 получить apr-1.5.2

3 получить apr-util-1.5.4

4 получить pcre-8.38 (./ configure --prefix= / usr / local/pcre; make; make install)

5 получить httpd-2.4.9

6 скопируйте (cp-r-p) dirs apr-1.5.2 и apr-util-1.5.4 в httpd-2.4.9/srclib/ as " apr " и "apr-util" соответственно, чтобы иметь возможность использовать --with-included-apr при создании httpd.

7 компакт-диск файл httpd-2.4.9

export CC=/usr/bin/gcc

export CPP=/usr/bin/cpp

./configure --prefix=/usr/local/apache2/ --enable-mods=most --enable-auth-basic --enable-rewrite --with-included-apr --with-pcre=/usr/local/pcre 

make clean 

make 

make install

8 него-2.0.9

perl Makefile.PL MP_CCOPTS=-std=gnu89 MP_APXS=/usr/local/apache2/bin/apxs

(MP_COPTS=-std=gnu89 жизненно важно здесь)

make
make install

информация о сборке и загруженных модулей:

# httpd -V
Server version: Apache/2.4.16 (Unix)
Server built:   Jul 31 2015 15:53:26
Server's Module Magic Number: 20120211:47
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_FLOCK_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"

# httpd -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_prefork_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 proxy_module (shared)
 proxy_connect_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_fcgi_module (shared)
 proxy_scgi_module (shared)
 proxy_wstunnel_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_express_module (shared)
 slotmem_shm_module (shared)
 lbmethod_byrequests_module (shared)
 lbmethod_bytraffic_module (shared)
 lbmethod_bybusyness_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 negotiation_module (shared)
 dir_module (shared)
 alias_module (shared)
 rewrite_module (shared)
 perl_module (shared)