Ответ 1
У вышеупомянутого ошибка, сообщаемая против Tomcat, есть предлагаемый патч, который, скорее всего, будет применен в ближайшее время. Не стесняйтесь использовать любые исправления, описанные в этой ошибке - все они будут работать.
Я вчера обновился до Mavericks, и мне пришлось переустановить mod_jk для моей среды разработки. Компиляция из источника была немного больной. Я нашел эту страницу на ранее заданном вопросе об mod_jk на OS X, но было несколько дополнительных обручей, с которыми мне пришлось перепрыгнуть. По какой-то причине apxs считает, что gcc живет при:
/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc
Но эта точная папка не существует; Мне пришлось символизировать существующий каталог XcodeDefault.xctoolchain
:
sudo ln -s XcodeDefault.xctoolchain/ OSX10.9.xctoolchain
Затем я попытался запустить configure:
./configure CFLAGS='-arch x86_64' APXSLDFLAGS='-arch x86_64' --with-apxs=/usr/sbin/apxs
Однако configure завершился неудачно, потому что он не смог найти <stdio.h>
, поэтому я привязал OSch 10.9 toolchain так:
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/ /usr/include
Затем я смог скомпилировать и установить модуль, запустив sudo make install -f Makefile.apxs
в подкаталоге apache-2.0. Однако, когда я запустил Apache через sudo apachectl start
, он немедленно сработает с segfault:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff875fb866 __pthread_kill + 10
1 libsystem_pthread.dylib 0x00007fff8b8a435c pthread_kill + 92
2 libsystem_c.dylib 0x00007fff92480bba abort + 125
3 libsystem_c.dylib 0x00007fff92480d31 abort_report_np + 181
4 libsystem_c.dylib 0x00007fff924a48c5 __chk_fail + 48
5 libsystem_c.dylib 0x00007fff924a48d5 __chk_fail_overlap + 16
6 libsystem_c.dylib 0x00007fff924a4906 __chk_overlap + 49
7 libsystem_c.dylib 0x00007fff924a4ad1 __strcpy_chk + 64
8 mod_jk.so 0x0000000105a0c631 jk_map_get_int + 225
9 mod_jk.so 0x0000000105a1f7f1 jk_get_worker_maintain_time + 33
10 mod_jk.so 0x0000000105a17683 wc_open + 755
11 mod_jk.so 0x0000000105a2f13f init_jk + 1151
12 mod_jk.so 0x0000000105a28b7e jk_post_config + 1566
13 httpd 0x000000010568b7d5 ap_run_post_config + 133
14 httpd 0x00000001056947c7 main + 2567
15 libdyld.dylib 0x00007fff9176e5fd start + 1
Кто-нибудь успел скомпилировать/запустить mod_jk с Mavericks? Есть ли что-то, что мне не хватает или не совсем правильно?
У вышеупомянутого ошибка, сообщаемая против Tomcat, есть предлагаемый патч, который, скорее всего, будет применен в ближайшее время. Не стесняйтесь использовать любые исправления, описанные в этой ошибке - все они будут работать.
Загрузите последний источник Tomcat Connectors из tomcat.apache.org/download-connectors.cgi
Per https://issues.apache.org/bugzilla/show_bug.cgi?id=55696 измените метод ниже в. /native/common/jk _maps.c на то, что вы видите здесь:
int jk_map_get_int(jk_map_t *m, const char *name, int def)
{
const char *rc;
int int_res;
rc = jk_map_get_string(m, name, NULL);
if(NULL == rc) {
int_res = def;
} else {
size_t len = strlen(rc);
int multit = 1;
if (len) {
char buf[100];
char *lastchar;
strncpy(buf, rc, 100);
lastchar = buf + len - 1;
if ('m' == *lastchar || 'M' == *lastchar) {
*lastchar = '\0';
multit = 1024 * 1024;
}
else if ('k' == *lastchar || 'K' == *lastchar) {
*lastchar = '\0';
multit = 1024;
}
int_res = multit * atoi(buf);
}
else
int_res = def;
}
return int_res;
}
Установить инструменты командной строки
xcode-select --install
Создать отсутствующую символическую ссылку
sudo ln -s/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain
cd./native
./настроить CFLAGS = '- arch x86_64' APXSLDFLAGS = '- arch x86_64' --with-apxs =/usr/sbin/apxs
chmod 755 scripts/build/instdso.sh
сделать
sudo make install
ПРОГРАММА - НЕ РЕШЕНИЕ
Я сталкиваюсь с одним и тем же и не смог получить mod_jk для запуска внутри Apache.
В качестве альтернативы просто заставить его работать локально и продолжать двигаться вперед, я изменил несколько директив apache для использования mod_proxy_ajp.
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_ajp_module libexec/apache2/mod_proxy_ajp.so
ProxyPassMatch ^(/.*\.(jsp|json))$ ajp://localhost:8009/$1
ProxyPass /aircharge ajp://localhost:8009/aircharge
...
Поскольку протокол AJP все еще используется, один и тот же разъем для Tomcat можно использовать без изменений.