Компиляция веб-сервера Apache с поддержкой динамического модуля - PullRequest
2 голосов
/ 10 марта 2011

Я только что скомпилировал Apache 2.2.17 в новой версии Ubuntu 10.04.2.Это учебное упражнение, чтобы узнать, что на самом деле происходит, когда вы что-то компилируете, а не просто с помощью 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, чтобы я мог связать их с LoadModule в конфигурации Apache?

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 10 марта 2011

Вы не должны запускать все как root../configure и make будут нормально работать без корневых разрешений, make install требует корневых разрешений для записи в такие каталоги, как /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 .

.
0 голосов
/ 16 декабря 2014

У меня возникла та же проблема: попытался скомпилировать apache 2.2.x со всеми (возможными) модулями, скомпилированными как динамические модули, а не статически.

Несмотря на то, что я использовал опцию конфигурации (--enable-mods-shared = "list, of, modules") модули были скомпилированы как статические, а не как общие.И что еще хуже, некоторые ошибки возникали при попытке «httpd -M» или «apachectl configtest», связанных с «* .so» файлами, которые не были найдены, даже если они перечислены в только что установленном httpd.conf (gmake install).

Я исследовал систему портов FreeBSD и обнаружил, что их порт действительно создает apache2.2.x со всеми общими модулями, как я и хотел.Я обнаружил, что это проблема с параметрами "configure".

Чтобы решить эту проблему, я сделал то же самое, что и порты, при настройке я сначала "отключил" все модули (сложно найти полный списоких, но получил) со многими записями "--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».

0 голосов
/ 12 марта 2011

Фантастическая. Спасибо вам обоим за помощь.

Потребовалось несколько попыток, но я наконец заработал. В итоге мне пришлось скачать исходный код более ранней версии Apache, прежде чем модули скомпилируются правильно, вместо того, чтобы создавать файлы .a и .la. Не уверен, что это произошло потому, что во время процесса configure / make / install происходит какое-то кеширование, о котором я не знаю, и некоторые мои предыдущие (неправильные) попытки компиляции были как-то перезапущены или возможно это было как-то связано с версией Apache 2.2.17 - не уверен. Во всяком случае, это сработало в конце.

0 голосов
/ 10 марта 2011

Попробуйте это

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 =Макс недействителен.Я думаю, что вы хотели использовать «большинство»?

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

...