Apache HTTP Server Version 2.2
This document refers to a legacy release (2.2) of Apache httpd. The active release (2.4) is documented here. If you have not already upgraded, please follow this link for more information.
You may follow this link to go to the current version of this document.
apxs
는 아파치 하이퍼텍스트 전송 프로토콜
(HTTP) 서버의 확장모듈을 컴파일하고 설치하는 도구이다. 이
도구는 여러 소스와 오브젝트파일을 가지고,
mod_so
의 LoadModule
지시어로 실행중에
아파치 서버로 읽어들일 수 있는 동적공유객체(DSO)를 만든다.
그래서 이런 확장방식을 사용하려면 플래폼이 DSO 기능을
지원하고 아파치 httpd
실행파일을
mod_so
모듈과 같이 컴파일해야 한다.
apxs
도구는 이 조건이 만족하지않으면 실행하지
않는다. 직접 명령어를 실행하여 조건이 만족하는지 알아볼
수 있다
$ httpd -l
목록에 mod_so
모듈이 나와야 한다. 조건을
만족하면 apxs
도구로 DSO 모듈을 설치하여
아파치서버의 기능을 쉽게 확장할 수 있다:
$ 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
$ _
아규먼트 files에는 C 소스파일 (.c) 이나
오브젝트파일 (.o), 라이브러리모음 (.a)을 사용할 수 있다.
apxs
도구는 확장자를 보고 자동으로 C 소스파일은
컴파일하고, 오브젝트와 모음파일은 링크에만 사용한다. 그러나
컴파일한 오브젝트를 사용하려면 동적으로 읽어들일 수 있는
공유객체로 사용하기위해 반드시 오브젝트를 위치독립코드(PIC,
position independent code)로 컴파일해야 한다. GCC의 경우
-fpic
을 사용하면 된다. 다른 C 컴파일러는 설명서를
참고하거나 apxs
가 오브젝트파일을 컴파일할때
사용하는 옵션을 참고하라.
아파치의 DSO 지원에 대한 더 자세한 내용은
mod_so
문서를 참고하거나
src/modules/standard/mod_so.c
소스파일을 읽어봐라.
apxs -g
[ -S name=value ]
-n modname
apxs -q
[ -S name=value ]
query ...
apxs -c
[ -S name=value ]
[ -o dsofile ]
[ -I incdir ]
[ -D name=value ]
[ -L libdir ]
[ -l libname ]
[ -Wc,compiler-flags ]
[ -Wl,linker-flags ]
files ...
apxs -i
[ -S name=value ]
[ -n modname ]
[ -a ]
[ -A ]
dso-file ...
apxs -e
[ -S name=value ]
[ -n modname ]
[ -a ]
[ -A ]
dso-file ...
-n modname
-i
(install)과 -g
(template
generation) 옵션을 사용할때 직접 모듈명을 지정한다. 이
옵션을 사용하여 모듈명을 직접 지정한다. -g
옵션을 사용한다면 이 옵션을 반드시 사용해야하고,
-i
옵션을 사용한다면 apxs
도구는
소스나 (마지막 시도로) 파일명을 가지고 이름을 추측한다.-q
apxs
의 설정값을 알아낸다. query에는
다음을 사용할 수 있다: CC
, CFLAGS
,
CFLAGS_SHLIB
, INCLUDEDIR
,
LD_SHLIB
, LDFLAGS_SHLIB
,
LIBEXECDIR
, LIBS_SHLIB
,
SBINDIR
, SYSCONFDIR
, TARGET
.
설정을 직접 알아낼때 사용한다.
INC=-I`apxs -q INCLUDEDIR`
예를 들어, 아파치 C 헤더파일을 직접 접근한다면 Makefile에서 위와 같이 사용한다.
-S name=value
-g
-n
옵션 참고) 그곳에 파일 두개를 만든다: 한 파일은
mod_name.c
라는 견본 모듈소스파일로,
자신의 모듈을 만들때 견본으로 사용하거나 apxs 기능을
시험해볼때 사용한다. 다른 파일은 이 모듈을 쉽게 컴파일하고
설치하기위한 Makefile
이다.-c
-o
옵션을 사용하지않으면 files의
첫번째 파일명에서 이름을 추측하여 보통
mod_name.so
를 사용한다.-o dsofile
mod_unknown.so
를 이름으로
사용한다.-D name=value
-I incdir
-L libdir
-l libname
-Wc,compiler-flags
libtool --mode=compile
명령어로 전달한다.
컴파일러 특유의 옵션을 추가할때 사용한다.-Wl,linker-flags
libtool --mode=link
명령어로 전달한다. 링커
특유의 옵션을 추가할때 사용한다.-i
-a
httpd.conf
설정파일에 적절한
LoadModule
줄을
추가하거나 이미 있다면 활성화하여 모듈을 사용하도록
만든다.-A
-a
와 비슷하지만, LoadModule
지시어 앞에
우물정자(#
)를 붙인다. 즉, 현재는
사용하지않지만 나중에 사용할 수 있도록 모듈을 준비한다.-e
-a
혹은 -A
옵션과 같이 사용할 수 있으며, -i
명령과
비슷하지만 모듈을 설치하지않고 아파치
httpd.conf
설정파일만 편집한다.아파치서버의 기능을 확장하는 mod_foo.c
라는
아파치 모듈이 있다고 가정하자. 먼저 다음 명령어를 사용하여
C 소스를 아파치 서버가 읽어들일 공유객체로 컴파일한다:
$ apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
$ _
그리고 이 공유객체를 읽어들이는 LoadModule
지시어를 아파치
설정에 추가한다. apxs
는 자동으로 공유객체를
"modules" 디렉토리에 설치하고 httpd.conf
파일을
알맞게 수정하여 간단히 작업을 마친다. 다음 같이 실행한다:
$ apxs -i -a mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules
...
chmod 755 /path/to/apache/modules/mod_foo.so
[/path/to/apache/conf/httpd.conf에서 `foo' 모듈을 활성화한다]
$ _
그러면 다음과 같은 줄을
LoadModule foo_module modules/mod_foo.so
설정파일에 없다면 추가한다. 이 설정을 기본적으로 사용하지
않는다면 -A
옵션을 사용한다. 즉
$ apxs -i -A mod_foo.c
apxs를 쉽게 사용하려고 다음과 같이 아파치 모듈 견본과 Makefile을 만들 수 있다:
$ apxs -g -n foo
Creating [DIR] foo
Creating [FILE] foo/Makefile
Creating [FILE] foo/modules.mk
Creating [FILE] foo/mod_foo.c
Creating [FILE] foo/.deps
$ _
그런후 바로 견본 모듈을 공유객체로 컴파일하여 아파치 서버가 읽도록한다:
$ cd foo
$ make all reload
apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
apxs -i -a -n "foo" mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules
...
chmod 755 /path/to/apache/modules/mod_foo.so
[/path/to/apache/conf/httpd.conf에서 `foo' 모듈을 활성화한다]
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
$ _