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 사이트에 들어가서 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 로 잘 설정 되는지 확인해보면 된다 ㅎㅎ
위 사람도 비슷한 문젠거 같은데 해결 했는진 모르겠다.. 답변 해준 사람이 좀 이상하게 알려준 것 같기도...
https://blog.csdn.net/vickqi/article/details/114791479
난 다행히 중국의 한 개발자가 남긴 글을 보고 수정해서 고쳤다... 해석한건 아니지만 ㅠ
'Mac에서 빡치는 순간이 올 때.' 카테고리의 다른 글
Could not reliably determine the server's fully qualified domain name (4) | 2021.06.09 |
---|