Как установить 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)