apxs - APache eXtenSion 도구 - Apache HTTP Server

Apache Server 2.0

Apache HTTP Server Version 2.0

<-

apxs - APache eXtenSion 도구

이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요.

apxs는 아파치 하이퍼텍스트 전송 프로토콜 (HTTP) 서버의 확장모듈을 컴파일하고 설치하는 도구이다. 이 도구는 여러 소스와 오브젝트파일을 가지고, mod_soLoadModule 지시어로 실행중에 아파치 서버로 읽어들일 수 있는 동적공유객체(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 소스파일을 읽어봐라.

top

개요

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 ...

top

옵션

공통 옵션

-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
이 옵션은 위에서 설명한 apxs 설정을 변경한다.

견본(template) 생성 옵션

-g
하위디렉토리 name을 만들고 (-n 옵션 참고) 그곳에 파일 두개를 만든다: 한 파일은 mod_name.c라는 견본 모듈소스파일로, 자신의 모듈을 만들때 견본으로 사용하거나 apxs 기능을 시험해볼때 사용한다. 다른 파일은 이 모듈을 쉽게 컴파일하고 설치하기위한 Makefile이다.

DSO 컴파일 옵션

-c
컴파일을 지시한다. 먼저 files에서 C 소스파일들(.c)을 오브젝트파일(.o)로 컴파일하고, files의 나머지 오브젝트파일들(.o과 .a)과 링크하여 동적공유객체 dsofile을 만든다. -o 옵션을 사용하지않으면 files의 첫번째 파일명에서 이름을 추측하여 보통 mod_name.so를 사용한다.
-o dsofile
생성할 동적공유객체 파일명을 직접 지정한다. 이름을 지정하지않고 files 목록에서 이름을 추측하지 못하면 마지막으로 mod_unknown.so를 이름으로 사용한다.
-D name=value
이 옵션을 컴파일 명령어로 직접 전달한다. 컴파일때 자신의 define을 추가한다.
-I incdir
이 옵션을 컴파일 명령어로 직접 전달한다. 컴파일때 include를 찾을 디렉토리를 추가한다.
-L libdir
이 옵션을 링커 명령어로 직접 전달한다. 컴파일때 라이브러리를 찾을 디렉토리를 추가한다.
-l libname
이 옵션을 링커 명령어로 직접 전달한다. 컴파일때 사용할 라이브러리를 추가한다.
-Wc,compiler-flags
이 옵션은 추가 옵션 compiler-flags를 컴파일 명령어로 전달한다. 컴파일러 특유의 옵션을 추가할때 사용한다.
-Wl,linker-flags
이 옵션은 추가 옵션 linker-flags를 링커 명령어로 전달한다. 링커 특유의 옵션을 추가할때 사용한다.

DSO 설치과 설정 옵션

-i
설치를 지시한다. 여러 동적공유객체를 서버의 modules 디렉토리에 설치한다.
-a
아파치 httpd.conf 설정파일에 적절한 LoadModule 줄을 추가하거나 이미 있다면 활성화하여 모듈을 사용하도록 만든다.
-A
-a와 비슷하지만, LoadModule 지시어 앞에 우물정자(#)를 붙인다. , 현재는 사용하지않지만 나중에 사용할 수 있도록 모듈을 준비한다.
-e
편집을 지시한다. -a 혹은 -A 옵션과 같이 사용할 수 있으며, -i 명령과 비슷하지만 모듈을 설치하지않고 아파치 httpd.conf 설정파일만 편집한다.
top

예제

아파치서버의 기능을 확장하는 mod_foo.c라는 아파치 모듈이 있다고 가정하자. 먼저 다음 명령어를 사용하여 C 소스를 아파치 서버가 읽어들일 공유객체로 컴파일한다:

$ apxs -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
$ _

그리고 이 공유객체를 읽어들이는 LoadModule 지시어를 아파치 설정에 추가한다. apxs는 자동으로 공유객체를 "modules" 디렉토리에 설치하고 httpd.conf 파일을 알맞게 수정하여 간단히 작업을 마친다. 다음 같이 실행한다:

$ apxs -i -a mod_foo.c
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]
$ _

그러면 다음과 같은 줄을

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/mod_foo.c
$ _

그런후 바로 견본 모듈을 공유객체로 컴파일하여 아파치 서버가 읽도록한다:

$ cd foo
$ make all reload
apxs -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
apxs -i -a -n "foo" mod_foo.so
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
$ _

심지어 아파치 소스 밖에서 apxs를 사용하여 PHP3와 같이 복잡한 모듈을 컴파일할 수 있다:

$ cd php3
$ ./configure --with-shared-apache=../apache-1.3
$ apxs -c -o libphp3.so mod_php3.c libmodphp3-so.a
gcc -fpic -DSHARED_MODULE -I/tmp/apache/include -c mod_php3.c
ld -Bshareable -o libphp3.so mod_php3.o libmodphp3-so.a
$ _

apxs는 자동으로 C 소스파일과 오브젝트파일을 구별한다. C 소스파일만 컴파일하고 나머지 오브젝트파일은 링크할때 사용한다.