Как установить mod_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 был включен без mod_perl.

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

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

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

подвопросы:

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

У меня есть опыт работы в bash и очень удобный с помощью Terminal.

Ответ 1

mod_perl 2.0.8 (последняя стабильная версия) не сократит его - он не знает об устаревании MPM_NAME в apache 2.4.x Загрузите последнюю версию с помощью 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, потому что включенный в Yosemite /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 соответственно, но эти значения, казалось, были проигнорированы. Поэтому я облегчил себе задачу:

$ 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

(спасибо Sean Coyne) В блоге в блоге Jason A. Crome "llvm/clang по OS X по умолчанию имеет значение C99, но mod_perl ожидает 89" стандартных "

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

Строка LoadModule для mod_perl была удалена из файла Yosemite /etc/apache2/httpd.conf.
Добавить

LoadModule perl_module libexec/apache2/mod_perl.so

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

Ответ 2

Дополнительный завинчивание в El Capitan!

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

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

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/ локальном/include.


Далее нам нужно сообщить 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

Теперь вы можете продолжить и построить mod_perl:

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

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

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

Ответ 3

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

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

Запустите 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)

Сделайте mod_perl:

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

Ответ 4

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

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

0 Xcode 7.3 (бета) и утилиты командной строки, OS X 10.11.3 El Capitan

1 установить perl, с потоками:

perlbrew install -f -Dusethreads perl-stable; 

Я положил perl в /usr/local/perl 5/

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

3 get apr-util-1.5.4

4 get pcre-8.38 (./configure --prefix =/usr/local/pcre; make; make install)

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

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

7 cd 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 mod_perl-2.0.9

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

(MP_CCOPTS = -std = gnu89 здесь VITAL)

make
make install

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

# httpd -V
Server version: Apache/2.4.16 (Unix)
Server built:   Jul 31 2015 15:53:26
Server 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)