如何在OS X Yosemite上的Apache 2.4中安装mod_perl 2.0.9?

And*_*ift 11 apache perl mod-perl osx-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.

我是一名经验丰富的程序员,但我之前从未做过这样的事情,只有我的主机才能工作.我不介意花一些时间来解决这个问题,但我承担不起我本地服务器的费用.

如何在OS X Yosemite上安装mod_perl?

子问题:

  • 我应该安装哪个版本?
  • 将其下载到安装位置或其他地方?
  • 我在哪里安装它?
  • 还有其他需要事先安装的依赖项吗?
  • 我是否必须重新创建apache安装或mod_perl安装是否自包含?

我在bash方面经验丰富,使用终端很舒服.

小智 12

mod_perl 2.0.8(最新稳定版)不会削减它 - 它不知道apache 2.4.x中MPM_NAME的弃用.通过svn下载最新的dev:

svn checkout https://svn.apache.org/repos/asf/perl/modperl/trunk/ mod_perl-2.0
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我试着设置包膜增值经销商MP_AP_PREFIXMP_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
Run Code Online (Sandbox Code Playgroud)

(感谢Sean Coyne)Per Jason A. Crome的博客文章 "OS X上的llvm/clang默认为C99,但mod_perl期望89"标准"

$ perl Makefile.PL MP_CCOPTS=-std=gnu89; make ; sudo make install
Run Code Online (Sandbox Code Playgroud)

LoadModulemod_perl已从Yosemite的/etc/apache2/httpd.conf文件中删除.

LoadModule perl_module libexec/apache2/mod_perl.so
Run Code Online (Sandbox Code Playgroud)

到模块部分 /etc/apache2/httpd.conf


chr*_*too 6

El Capitan需要额外拧紧!

在El Capitan,Apple阻止用户写入/ usr/except/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
Run Code Online (Sandbox Code Playgroud)

将Xcode标头软链接到/ usr/local/include.


接下来,我们需要告诉Makefile.PL在哪里找到头文件(因为它默认采用/ usr/include).

sudo cp /usr/sbin/apxs /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

制作一份APXS工具的副本,Makefile.PL用它来定位apache头.现在编辑它:

sudo vi /usr/local/bin/apxs        (or)
sudo nano /usr/local/bin/apxs
Run Code Online (Sandbox Code Playgroud)

找到说:

my $prefix         = get_vars("prefix");
Run Code Online (Sandbox Code Playgroud)

并替换为:

my $prefix         = "/usr/local";
Run Code Online (Sandbox Code Playgroud)

确保/ usr/local/bin位于/ usr/sbin之前的路径中,以便它选择刚修改的那个:

export PATH=/usr/local/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

现在你可以继续构建mod_perl:

perl Makefile.PL MP_CCOPTS=-std=gnu89; make ; sudo make install
Run Code Online (Sandbox Code Playgroud)

最后,在编辑httpd.conf时,需要显式传递mod_perl.so的完整路径,因为它不在apache期望找到它的目录中:

LoadModule perl_module /usr/local/libexec/apache2/mod_perl.so
Run Code Online (Sandbox Code Playgroud)


And*_*ift 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
Run Code Online (Sandbox Code Playgroud)

切换到新创建的mod_perl目录:

cd mod_perl-2.0
Run Code Online (Sandbox Code Playgroud)

告诉安装人员在哪里寻找零件:

/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
Run Code Online (Sandbox Code Playgroud)

(ln -s是一个符号链接,apr-1-config程序用于检索有关apr库的信息,通常用于编译和链接库.)

(注意 - 在某些Yosemite安装中,/ usr/include目录不存在;您可能必须通过cd/usr创建它; mkdir include)

make mod_perl:

perl Makefile.PL MP_CCOPTS=-std=gnu89; make ; sudo make install
Run Code Online (Sandbox Code Playgroud)

删除临时文件夹mod_perl-2.0.

告诉apache在apache httpd.conf中包含mod_perl:

sudo vi /etc/apache2/httpd.conf (or)
sudo nano /etc/apache2/httpd.conf
Run Code Online (Sandbox Code Playgroud)

在第170行附近的包含列表的末尾添加以下行:

LoadModule perl_module libexec/apache2/mod_perl.so
Run Code Online (Sandbox Code Playgroud)

保存,退出并重新启动apache:

sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)