Назад | Перейти на главную страницу

При компиляции коннектора tomcat не создается mod_jk.so

Когда я пытаюсь скомпилировать коннектор tomcat из источника, все выглядит нормально, за исключением того, что файл mod_jk.so не создается.

Версии программного обеспечения: RHEL6 x86_64
httpd-2.4.3
tomcat-connector 1.2.37

Команды:
cd native
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
cd apache-2.0
ls
Единственное предупреждающее сообщение во время сборки:
Предупреждение! dlname не найдено в /usr/local/tomcat-connectors-1.2.37-src/native/apache-2.0/mod_jk.la.

Есть ли у кого-нибудь предложения по созданию файла mod_jk.so?

Информация о системе

# uname -r
2.6.32-358.14.1.el6.x86_64

# cat /etc/redhat-release
CentOS release 6.4 (Final)

# rpm -qa | grep httpd
httpd-devel-2.2.15-28.el6.centos.x86_64
httpd-2.2.15-28.el6.centos.x86_64
httpd-tools-2.2.15-28.el6.centos.x86_64

Я предлагаю самому собрать модуль только из исходников

# cd /root/
# wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz

# tar -xzf tomcat-connectors-1.2.37-src.tar.gz
# cd tomcat-connectors-1.2.37-src/native/
# ./configure --prefix=/opt/ --with-apxs=/usr/sbin/apxs
# make
# file apache-2.0/mod_jk.so
apache-2.0/mod_jk.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

# cp apache-2.0/mod_jk.so /usr/lib64/httpd/modules/
# echo "LoadModule jk_module modules/mod_jk.so" > /etc/httpd/conf.d/mod_jk.conf

# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

# apachectl -t -D DUMP_MODULES | grep jk
Syntax OK
 jk_module (shared)

Таким образом, нет необходимости устанавливать apache / openssl / apr / apr-util из исходников. Если захочешь обновить пакеты - это было бы к черту

В конце концов я заставил это работать. Оказывается, у меня были проблемы посерьезнее, чем просто разъем tomcat.

Во-первых, мне нужно было сделать несколько вещей, чтобы скомпилировать apache с 64-битным Linux. Я получал такие ошибки сборки, как:

relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC 

Чтобы исправить это, OpenSSL должен был иметь специальный параметр конфигурации:

./configure -fPIC

Поэтому я перекомпилировал OpenSSL, что позволило Apache правильно скомпилировать модуль ssl. Затем я получил еще одну ошибку во время apache make install:

libtool: install: error: relink `libaprutil-1.la' with the above command before installing it

Чтобы исправить это, классам APR потребовалась особая опция конфигурации во время их компиляции:

CC="gcc -m64" ./configure --prefix=/usr/local/apr
CC="gcc -m64" ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

Их раздельная компиляция означала, что мне нужно было использовать параметр --with-apr вместо --with-included-apr в сборке Apache:

./configure ... --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

Я также использовал странную опцию конфигурации во время настройки Apache:

--with-apxs2=...

который должен был быть:

--with-apxs=...

После того, как все эти вещи были исправлены и перекомпилировали apache, я попробовал еще раз со сборкой коннектора tomcat. После этого файл mod_jk.so сгенерирован правильно.