【问题标题】:Apache2 mod_jk segfaults with OS X MavericksOS X Mavericks 的 Apache2 mod_jk 段错误
【发布时间】:2013-11-02 00:04:20
【问题描述】:

我昨天刚刚升级到 Mavericks,不得不为我的开发环境重新安装 mod_jk。从源代码编译它有点痛苦。我在previously-asked question 上找到了this page 关于 OS X 上的 mod_jk,但是我不得不跳过一些额外的障碍。出于某种原因,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 CFLAGS='-arch x86_64' APXSLDFLAGS='-arch x86_64' --with-apxs=/usr/sbin/apxs

但是,配置失败,因为它找不到<stdio.h>,所以我将 OS X 10.9 工具链符号链接为:

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

然后我可以通过在 apache-2.0 子目录中运行 sudo make install -f Makefile.apxs 来编译和安装模块。然而,当我通过sudo apachectl start 启动 Apache 时,它​​立即因段错误而崩溃:

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

有人用 Mavericks 成功编译/运行 mod_jk 了吗?我有什么遗漏或做得不对吗?

【问题讨论】:

标签: macos apache apache2 mod-jk osx-mavericks


【解决方案1】:

从 tomcat.apache.org/download-connectors.cgi 下载最新的 Tomcat 连接器源代码

根据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

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

chmod 755 脚本/build/instdso.sh

制作

sudo 安装

【讨论】:

    【解决方案2】:

    前面提到的bug reported against Tomcat 有一个可能很快就会应用的提议补丁。随意使用该错误中描述的任何补丁——它们都可以工作。

    【讨论】:

      【解决方案3】:

      解决方法 - 不是解决方案

      我遇到了同样的事情,无法让 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 的相同连接器无需修改即可使用。

      【讨论】:

        猜你喜欢
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-26
        • 2014-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多