2011-03-10 71 views
2

我剛剛在Ubuntu 10.04.2的新安裝版上編譯了Apache 2.2.17。這是一個學習練習,可以在編譯某些東西時發現實際發生的情況,而不僅僅是使用apt-get,因此避免使用apt-get來自己編譯。編譯支持動態模塊的Apache web服務器

我跑:

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 

我怎麼可以T將這些文件放到.so文件中,以便我們可以將它們與Apache配置中的LoadModule鏈接起來?

在此先感謝。

回答

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共享=一切並沒有 實際構建所有模塊。

--enable-shared = max無效。我想你想用「最」?

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

4

您不應該以root身份運行所有內容。 ./configuremake可以在沒有根權限的情況下正常工作,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 documentation

0

太棒了。謝謝你們的幫助。

這花了一些嘗試,但我終於得到它的工作。我最終不得不下載Apache的早期版本的源代碼,然後才能正確編譯模塊,而不是生成。a和.la文件。不確定是否因爲在配置/製作/安裝過程中發生了某種緩存事情,我不知道這些緩存事件,並且我以前(不正確)編譯嘗試的某些部分正在以某種方式重新運行或可能這與2.2.17版本的Apache有關 - 不確定。無論如何,它最終奏效了。

0

我遇到了同樣的問題:試圖編譯apache 2.2.x所有(可能)模塊編譯爲動態模塊而不是靜態的。

儘管我已經使用了配置選項(--enable-mods-shared =「list,of modules」),但模塊被編譯爲靜態而不是共享。更糟糕的是,在嘗試與「* .so」文件相關的「httpd -M」或「apachectl configtest」文件時,即使它們在剛剛安裝的httpd.conf(gmake install)中列出,也會出現一些錯誤。

我調查了FreeBSD ports系統,發現他們的端口確實創建了一個帶有所有共享模塊的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」配置選項之前,必須禁用它們。