2013-10-23 19 views
11

Tôi đã nâng cấp lên Mavericks ngay hôm qua và phải cài đặt lại mod_jk cho môi trường phát triển của mình. Biên dịch nó từ nguồn là một chút đau đớn. Tôi đã tìm thấy this page trên một số previously-asked question về mod_jk trên OS X, nhưng có thêm một vài vòng mà tôi phải nhảy qua. Vì một số lý do, apxs cho rằng gcc sống tại:Apache2 mod_jk segfaults với OS X Mavericks

/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc 

Nhưng thư mục chính xác đó không tồn tại; Tôi phải liên kết mềm các XcodeDefault.xctoolchain thư mục hiện có:

sudo ln -s XcodeDefault.xctoolchain/ OSX10.9.xctoolchain 

Sau đó, tôi đã cố gắng chạy configure:

./configure CFLAGS='-arch x86_64' APXSLDFLAGS='-arch x86_64' --with-apxs=/usr/sbin/apxs 

Tuy nhiên, cấu hình thất bại vì nó không thể tìm thấy <stdio.h>, vì vậy tôi symlinked OS X 10.9 toolchain như như vậy:

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/ /usr/include 

Tôi có thể biên dịch và cài đặt mô-đun bằng cách chạy sudo make install -f Makefile.apxs trong thư mục con apache-2.0. Tuy nhiên, khi tôi bắt đầu lên Apache qua sudo apachectl start, nó ngay lập tức bị treo với một 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 

Có ai đã thành công biên dịch/chạy mod_jk với Mavericks chưa? Có cái gì tôi đang thiếu hoặc không làm khá đúng?

+1

Chỉ cần phát hiện ra điều này có thể có liên quan: https://issues.apache.org/bugzilla/show_bug.cgi?id=55696 – aarestad

+1

các lỗi được báo cáo trong bugzilla thực sự giải quyết vấn đề này cho tất cả chúng ta trong văn phòng trên Mavericks. Chúc mừng cảm ơn. – David

Trả lời

2

Đã đề cập ở trên bug reported against Tomcat có bản vá được đề xuất có khả năng sẽ sớm được áp dụng. Vui lòng sử dụng bất kỳ bản vá nào được mô tả trong lỗi đó - tất cả đều sẽ hoạt động.

1

CÁCH GIẢI QUYẾT - KHÔNG PHẢI LÀ MỘT GIẢI PHÁP

Tôi đang gặp phải điều tương tự và không thể để có được mod_jk để chạy bên trong Apache.

Thay vì chỉ đơn giản làm cho nó hoạt động cục bộ và tiếp tục di chuyển về phía trước, tôi đã thay đổi một vài chỉ thị apache xung quanh để sử dụng mod_proxy_ajp thay thế.

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 
... 

Vì giao thức AJP vẫn đang được sử dụng, cùng một trình kết nối cho Tomcat có thể được sử dụng mà không sửa đổi.

2

Tải mới nhất nguồn Tomcat Connectors từ tomcat.apache.org/download-connectors.cgi

mỗi https://issues.apache.org/bugzilla/show_bug.cgi?id=55696 thay đổi phương pháp dưới đây trong ./native/common/jk_maps.c những gì bạn thấy ở đây:

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; 
} 

Cài đặt các công cụ dòng lệnh

xcode-chọn -install

Tạo thiếu syml mực

sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain

cd./ Mẹ đẻ

./configure CFLAGS = '- arch x86_64' APXSLDFLAGS = '- arch x86_64' --with-APXS =/usr/sbin/APXS

chmod 755 scripts/xây dựng/instdso.sh

làm

sudo make install

+0

đã làm cho ngày của tôi! cảm ơn – YvesLeBorg

Các vấn đề liên quan