Когда я пытаюсь скомпилировать коннектор 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 сгенерирован правильно.