3

我刚刚在全新安装的 Ubuntu 10.04.2 上编译了 Apache 2.2.17。这是一个学习练习,可以发现当你编译某些东西时实际发生了什么,而不是仅仅使用 apt-get 因此避免使用 apt-get 来编译自己的东西。

我跑了:

sudo ./configure --prefix=/etc/apache --enable-module=so --enable-rule=SHARED_CORE --enable-shared=max --enable-ssl=shared --enable-rewrite=shared

其次是强制性的:

sudo make && sudo make install

一切似乎都很顺利(Apache 启动没有问题),除了在 Apache 模块目录中我希望看到 mod_rewrite.so 和 mod_ssl.so,而是我看到:

#cd /etc/apache/modules
#ls -l
mod_rewrite.a
mod_rewrite.la
mod_ssl.a
mod_ssl.la

如何将这些转换为 .so 文件,以便我可以将它们与 Apache 配置中的 LoadModule 链接?

提前致谢。

4

4 回答 4

4

您不应该以 root 身份运行所有内容。./configure并且make在没有 root 权限的情况下也可以正常工作,make install需要 root 权限才能写入 和 之类的/etc目录/usr/bin

/etc不适合可执行文件,更不用说完整的 Apache 安装了。如果要将配置文件放入/etc/apache,请使用--sysconfdir=/etc/apache. 安装自定义构建 Apache 的正确位置是/usr/local.

要启用共享模块,您必须传递该--enable-so选项,应将应编译为共享的模块添加到--enable-mods-shared.

Apache + mod_ssl(共享模块)+ mod_rewrite(共享模块)的正确配置行/usr/local/apache与配置文件一起安装在/etc/apache

./configure --prefix=/usr/local/apache --sysconfdir=/etc/apache --enable-so \
  --enable-rewrite --enable-ssl --enable-mods-shared='rewrite ssl'

成功配置 Apache HTTPd 后,make运行sudo make install.

有关配置选项的更多信息,请参阅Apache HTTPd 文档

于 2011-03-10T13:17:12.397 回答
1

我遇到了同样的问题:尝试编译 apache 2.2.x,将所有(可能的)模块编译为动态模块而不是静态模块。

即使我使用了配置选项(--enable-mods-shared="list,of,modules"),模块也被编译为静态而不是共享的。更糟糕的是,在尝试与“*.so”文件相关的“httpd -M”或“apachectl configtest”时出现了一些错误,即使它们已在刚刚安装的 httpd.conf 中列出(gmake install)。

我调查了 FreeBSD 端口系统,发现他们的端口确实如我所愿创建了一个包含所有共享模块的 apache2.2.x。我发现这是“配置”选项的问题。

为了解决这个问题,我已经完全按照端口进行了配置,在配置时我首先“禁用”了所有模块(很难找到它们的完整列表但得到了它)在配置中有许多“--disable-MODULE”条目。这是我的工作示例:

"./configure" 
"--enable-layout=FreeBSD" 
"--with-perl=/usr/local/bin/perl5.12.4" 
"--with-expat=/usr/local" 
"--with-iconv=/usr/local" 
"--with-pcre=/usr/local" 
"--disable-authn-file" 
"--disable-authn-default" 
"--disable-authz-host" 
"--disable-authz-groupfile" 
"--disable-authz-user" 
"--disable-authz-default" 
"--disable-auth-basic" 
"--disable-charset-lite" 
"--disable-include" 
"--disable-log-config" 
"--disable-env" 
"--disable-setenvif" 
"--disable-mime" 
"--disable-status" 
"--disable-autoindex" 
"--disable-asis" 
"--disable-cgid" 
"--disable-cgi" 
"--disable-negotiation" 
"--disable-dir" 
"--disable-imagemap" 
"--disable-actions" 
"--disable-userdir" 
"--disable-alias" 
"--disable-filter" 
"--disable-substitute" 
"--disable-proxy" 
"--disable-proxy-connect" 
"--disable-proxy-ftp" 
"--disable-proxy-http" 
"--disable-proxy-ajp" 
"--disable-proxy-balancer" 
"--disable-proxy-scgi" 
"--disable-reqtimeout" 
"--enable-so" 
"--enable-mods-shared=auth_basic auth_digest authn_file authn_dbm authn_anon authn_default authn_alias authz_host authz_groupfile authz_user authz_dbm authz_owner authz_default cache disk_cache file_cache dav dav_fs actions alias asis autoindex cern_meta cgi charset_lite deflate dir dumpio env expires headers imagemap include info log_config logio mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias filter version reqtimeout ssl" 
"--with-dbm=sdbm" 
"--with-ssl=/usr" 
"--disable-ipv6" 
"--with-devrandom" 
"--with-mpm=worker" 
"--prefix=/usr/local" 
"--mandir=/usr/local/man" 
"--infodir=/usr/local/info/" 

这样,所有 apache2.2.x 模块都被构建为动态而不是静态的。如果您忘记“--disable-XXX”它们而只尝试“--enable-XXX”甚至“--enable-mods-shared=XXX,YYY,ZZZ”,它不起作用。您必须在设置“--enable-mods-shared”配置选项之前禁用它们。

于 2014-12-16T20:05:33.517 回答
0

极好的。谢谢你们的帮助。

尝试了几次,但我终于让它工作了。我最终不得不下载早期版本的 Apache 的源代码,然后模块才能正确编译,而不是生成 .a 和 .la 文件。不知道这是否是因为在配置/制作/安装过程中发生了某种我不知道的缓存事情,并且我以前(不正确的)编译尝试的某些部分正在以某种方式或可能重新运行这与 Apache 的 2.2.17 版本有关 - 不确定。无论如何,它最终奏效了。

于 2011-03-12T12:51:27.210 回答
0

尝试这个

sudo ./configure --prefix=/etc/apache --enable-so --enable-shared=max --enable-rewrite -enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache"

警告: --enable-mods-shared=all 实际上并不构建所有模块。

--enable-shared=max 无效。我想你想用“最”?

http://httpd.apache.org/docs/2.2/programs/configure.html

于 2011-03-10T13:16:53.080 回答