简体   繁体   中英

Apache2 mod_jk segfaults with OS X Mavericks

I upgraded to Mavericks just yesterday, and had to reinstall mod_jk for my development environment. Compiling it from source was a bit of a pain. I found this page on a previously-asked question about mod_jk on OS X, but there were a couple extra hoops I had to jump through. For some reason, apxs thinks that gcc lives at:

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

But that exact folder doesn't exist; I had to symlink the existing XcodeDefault.xctoolchain directory:

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

Then I tried running configure:

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

However, configure failed because it couldn't find <stdio.h> , so I symlinked the OS X 10.9 toolchain as so:

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

I was able to then compile and install the module by running sudo make install -f Makefile.apxs in the apache-2.0 subdirectory. However, when I started up Apache via sudo apachectl start , it immediately crashes with a 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

Has anyone had success compiling/running mod_jk with Mavericks yet? Is there something I'm missing or not doing quite right?

The aforementioned bug reported against Tomcat has a proposed patch which is likely to be applied soon. Feel free to use any of the patches described in that bug -- they will all work.

Download latest Tomcat Connectors source from tomcat.apache.org/download-connectors.cgi

Per https://issues.apache.org/bugzilla/show_bug.cgi?id=55696 change the method below in ./native/common/jk_maps.c to what you see here:

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

Install command line tools

xcode-select --install

Create missing symlink

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

cd ./native

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

chmod 755 scripts/build/instdso.sh

make

sudo make install

WORKAROUND - NOT A SOLUTION

I am encountering the same thing and was unable to get mod_jk to run inside of Apache.

As an alternative to simply get it to work locally and keep moving forward, I changed a few of the apache directives around to use mod_proxy_ajp instead.

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

Since the AJP protocol is still being used, the same connector for Tomcat can be used without modification.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM