본문 바로가기

Mac에서 빡치는 순간이 올 때.

Mac OSX 맥에서 apache2에 mod_jk.so 추가하기

반응형

apache2의 module에 mod_jk를 추가하는 이유는 생략...

➜ apachectl -t
httpd: Syntax error on line 191 of /private/etc/apache2/httpd.conf: Cannot load modules/mod_jk.so into server: dlopen(/usr/modules/mod_jk.so, 10): image not found

이미 빌드 된 mod_jk.so를 추가해주고 싶었지만,,, 아파치를 실행하면 위와 같은 문제가 계속 생겼다...

그 이유는 modules에 추가한 mod_jk.so 파일이 읽혀지지 않는 것.. 이유는 아마도 비트나 컴파일 버전의 문제인 것 같다.

➜ apachectl -v
Server version: Apache/2.4.46 (Unix)

정확한 나의 Apache 버전은 위와 같다.

http://tomcat.apache.org/download-connectors.cgi

 

Apache Tomcat® - Tomcat Connectors (mod_jk) Downloads

You must verify the integrity of the downloaded files. We provide OpenPGP signatures for every release file. This signature should be matched against the KEYS file which contains the OpenPGP keys of Tomcat's Release Managers. We also provide SHA512 checksu

tomcat.apache.org

결국 Apache Tomcat 사이트에 들어가서 Connectors 소스코드를 다운 받았다.. 내가 다운 받은건 JK 1.2.48 Source Release tar.gz (e.g. Unix, Linux, Mac OS)

아무튼 다운 받고 압축 풀고 native 디렉토리로 들어간다.

cd native

들어가서 configure 해주어야 하는데 이 때, apxs의 경로가 중요하다..

➜ find / -name apxs
find: /usr/sbin/authserver: Permission denied
/usr/local/bin/apxs

find로 apxs의 경로를 찾아서 복사한다. 나는 위 경로였다.

이 경로에 맞춰서 configure 해주자

./configure --with-apxs=/usr/local/bin/apxs
#이건 내가 했던거
./configure --with-apxs={APXS_LOCATION}

그 다음 아래와 같이 64비트 설정이 필요하다. 나는 64비트

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

여기에서도 apxs 경로를 잘 설정하자

위에까지 성공했으면 이제 make로 컴파일하자

➜ make
Making all in common
/usr/local/opt/apr/libexec/build-1/libtool --silent --mode=compile clang -I. -I/usr/local/opt/httpd/include/httpd -arch x86_64 -DHAVE_CONFIG_H -g -O2 -DHAVE_APR  -I/usr/local/opt/apr/libexec/include/apr-1 -I/usr/local/opt/apr-util/libexec/include/apr-1 -arch x86_64 -DHAVE_CONFIG_H -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -DDARWIN_10 -c jk_ajp12_worker.c -o jk_ajp12_worker.lo
In file included from jk_ajp12_worker.c:25:
In file included from ./jk_ajp12_worker.h:26:
In file included from ./jk_logger.h:26:
In file included from ./jk_global.h:340:
./jk_types.h:56:2: error: Can not determine the proper size for pid_t
#error Can not determine the proper size for pid_t
 ^
./jk_types.h:62:2: error: Can not determine the proper size for pthread_t
#error Can not determine the proper size for pthread_t
 ^
2 errors generated.
make[1]: *** [jk_ajp12_worker.lo] Error 1
make: *** [all-recursive] Error 1

make 했더니 귀신같이 에러가 뜬다;;

결국 찾아보니깐 common/jk_types.h 파일에 pid_t 와 pthread_t 가 define 되지 않아서 생긴 문제 ㅠㅠ

/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

/***************************************************************************
 * Description: Platform specific, auto-detected types.                    *
 * Author:      Rainer Jung <rjung@apache.org>                             *
 ***************************************************************************/

#ifndef JK_TYPES_H
#define JK_TYPES_H

/* GENERATED FILE WARNING!  DO NOT EDIT jk_types.h
 *
 * You must modify jk_types.h.in instead.
 *
 */

#ifdef __cplusplus
extern "C"
{
#endif                          /* __cplusplus */

/* jk_uint32_t defines a four byte word */
typedef unsigned int jk_uint32_t;

/* And JK_UINT32_T_FMT */
#define JK_UINT32_T_FMT "u"

/* And JK_UINT32_T_HEX_FMT */
#define JK_UINT32_T_HEX_FMT "x"

/* jk_uint64_t defines a eight byte word */
typedef unsigned long jk_uint64_t;

/* And JK_UINT64_T_FMT */
#define JK_UINT64_T_FMT "lu"

/* And JK_UINT64_T_HEX_FMT */
#define JK_UINT64_T_HEX_FMT "lx"

/* And JK_PID_T_FMT */
#define JK_PID_T_FMT "d"

/* jk_pthread_t defines a eight byte word */
typedef unsigned  jk_pthread_t;

/* And JK_PTHREAD_T_FMT */
#define JK_PTHREAD_T_FMT "d"

#ifdef __cplusplus
}
#endif                          /* __cplusplus */

#endif                          /* JK_TYPES_H */

그래서 에러가 나는 JK_PID_T_FMT 와 JK_PTHREAD_T_FMT를 위와 같이 수정해줬다.....

그러고 make 했더니 잘 빌드는 된 것 같은데...!!

그렇다면 가장 중요한 mod_jk.so 파일이 어디있냐면, native/apache-2.0 에 가보면 생성된 mod_jk.so가 있다..!

이제 이걸 apache2/modules 에 추가 해주고 apachectl -t 로 잘 설정 되는지 확인해보면 된다 ㅎㅎ

 

 

http://tomcat.10.x6.nabble.com/mod-jk-quot-Can-not-determine-the-proper-size-for-pid-t-quot-on-macOS-10-15-7-td5105303.html

 

Tomcat - User - mod_jk "Can not determine the proper size for pid_t" on macOS 10.15.7

Brian On 10/26/20 15:33, Paquin, Brian wrote: > I’m trying to build httpd and mod_jk for the first time on a macOS 10.15.7 box. XCode 12.1 is installed and I was able to compile OpenSSL 1.1.1g. > I got an error “Can not determine the proper size for pi

tomcat.10.x6.nabble.com

위 사람도 비슷한 문젠거 같은데 해결 했는진 모르겠다.. 답변 해준 사람이 좀 이상하게 알려준 것 같기도...

https://blog.csdn.net/vickqi/article/details/114791479

 

在macOS(Big Sur- 11.2.2)上通过源码安装apache httpd(2.4.46)_vickqi的专栏-CSDN博客

在macOS上通过源码安装apache httpd 安装环境 系统版本 macOS Big Sur(11.2.2) 硬件信息 Processor Name: Dual-Core Intel Core i5 Processor Speed: 2.3 GHz Number of Processors: 1 Total Number of Cores: 2 Memory: 8 GB 安装版本: 2.4.46

blog.csdn.net

난 다행히 중국의 한 개발자가 남긴 글을 보고 수정해서 고쳤다... 해석한건 아니지만 ㅠ

반응형