본문 바로가기

UNIX_LINUX_C_C++

[펌] 아파치 http 서버의 확장모듈을 컴파일하고 설치하는 도구

apax (APache eXtension)


1.아파치 http 서버의 확장모듈을 컴파일하고 설치하는 도구
2.아파치에 모듈을 추가하고자 할때 아파치 소스파일을 "./configure" 을 이용하여 재컴파일 하는 방법도 있지만..
아파치 소스코드가 존재하지 않을때 모듈을 간단이 DSO화일로 만들때 사용하는 도구이다.

-> DSO 화일이란? Dynamic Shared Object : LoadModule 을 사용해서 동적으로 동작하는 모듈 화일.
* DSO가 아닌 모듈은 아파치 검파일시 --add_module, --enable-module, --disable-module 이용하여 정적으로 동작하는 모듈이다. (config.status에 --enable-module, --disable-module 리스트 있다.) -AddModule 지시어를 사용한다.
-> LoadModule : mod_so 모듈에서 제공하는 지시어.


3. apax를 사용하려면 플랫폼이 DSO기능을 지원하고, 아파치 httpd 실행화일을 mod_so 모듈과 같이 컴파일 해야한다.
(확인하는 방법 : "httpd -l" 을 실행했을때 mod_so 모듈이 나와야한다.)

-----------------------------------------------------------------------------------

$ apxs -i -a -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
cp mod_foo.so /path/to/apache/modules/mod_foo.so
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo' in /path/to/apache/etc/httpd.conf]
$ apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started

-----------------------------------------------------------------------------------


* -c 뒤의 화일들은 확장자를 보고 소스화일(.c), 오브젝트화일(.o), 라이브러리모음(.a)로 구분해서 알아서 컴파일 or 링크한다고 한다. 똑똑한 녀석..

* 컴파일한 오브젝트를 사용하려면 반드시 위치독립코드(PIC:Position Independent Code)로 컴파일 해야한다고 한다.(gcc 에선 -fpic 옵션)
PIC는 사이판에서 묵었던 리조트 이름인데. ㅋㅋ
->PIC : 적재시에 메모리의 어떤 주소에 적재되더라도 정상적으로 실행될 수 있는 코드