随着OS X 10.10 Yosemite的发布,Apple将其Apache服务器升级到2.4版。
在发布时,mod_perl 2.0.8与Apache 2.4不兼容,mod_perl 2.0.9尚未正式发布(more info)。
所以,Apache没有mod_perl。
我使用perl在本地工作,需要来安装mod_perl。
我是一名经验丰富的程序员,但我之前从未做过这样的事情,只有我的主机才能工作。我不介意花一些时间来解决这个问题,但是我负担不起我的本地服务器。
如何在OS X Yosemite上安装mod_perl?
子的问题:
我在bash方面经验丰富,使用终端非常舒服。
答案 0 :(得分:12)
mod_perl 2.0.8(最新稳定版)不会削减它 - 它不知道apache 2.4.x中MPM_NAME的弃用 通过svn下载最新的开发:
svn checkout https://svn.apache.org/repos/asf/perl/modperl/trunk/ mod_perl-2.0
Changes文件将此版本列为2.0.9-dev
Xcode 6.01不会削减它 - 它的apache标头会让mod_perl认为你正在运行apache 2.2.26;获得Xcode 6.1(10月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
中。它还会在/usr/include/apr-1
中查找apr标题,因为包含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)Per Jason A. Crome's blog post “OS X上的llvm / clang默认为C99,但mod_perl需要89”标准“
$ perl Makefile.PL MP_CCOPTS=-std=gnu89; make ; sudo make install
LoadModule
的{{1}}行已从Yosemite的mod_perl
文件中删除。
添加
/etc/apache2/httpd.conf
到LoadModule perl_module libexec/apache2/mod_perl.so
答案 1 :(得分:6)
在El Capitan,Apple阻止用户写入/ usr /中的任何地方/ usr / local /
参考Dan Deal和Andrew Swift上面的答案,并假设你安装了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 / 本地 / 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
答案 2 :(得分:5)
这是Dan Deal的答案的简化版本,为经验较少的开发人员提供了一些说明。
您需要从Mac App Store安装Xcode 6.1 。 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)
制作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
答案 3 :(得分:0)
感谢上面的所有指示。这是一个解决方案/ recipe,从源代码构建,没有符号链接到Xcode中的奇数文件,并避免'预期在:平面命名空间'错误。
(编辑:)令我惊讶的是,Apple提供的httpd(2.4.16)现在能够运行我的 mod_perl!
0 Xcode 7.3(beta)和命令行工具,OS X 10.11.3 El Capitan
1个perl, with threads :
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 COPY(cp -r -p)dirs apr-1.5.2和apr-util-1.5.4分别为httpd-2.4.9 / srclib /作为'apr'和'apr-util'分别为能够在构建httpd时使用--with-included-apr。
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'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)