mirror of
https://github.com/apache/httpd.git
synced 2026-01-13 21:42:17 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1495584 13f79535-47bb-0310-9956-ffa450edef68
321 lines
12 KiB
XML
321 lines
12 KiB
XML
<?xml version='1.0' encoding='EUC-KR' ?>
|
|
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
|
|
<!-- English Revision: 105989:1494952 (outdated) -->
|
|
|
|
<!--
|
|
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.
|
|
-->
|
|
|
|
<manualpage metafile="apxs.xml.meta">
|
|
<parentdocument href="./">Programs</parentdocument>
|
|
|
|
<title>apxs - APache eXtenSion 도구</title>
|
|
|
|
<summary>
|
|
<p><code>apxs</code>는 아파치 하이퍼텍스트 전송 프로토콜
|
|
(HTTP) 서버의 확장모듈을 컴파일하고 설치하는 도구이다. 이
|
|
도구는 여러 소스와 오브젝트<var>파일</var>을 가지고,
|
|
<module>mod_so</module>의 <directive
|
|
module="mod_so">LoadModule</directive> 지시어로 실행중에
|
|
아파치 서버로 읽어들일 수 있는 동적공유객체(DSO)를 만든다.</p>
|
|
|
|
<p>그래서 이런 확장방식을 사용하려면 플래폼이 DSO 기능을
|
|
지원하고 아파치 <code>httpd</code> 실행파일을
|
|
<module>mod_so</module> 모듈과 같이 컴파일해야 한다.
|
|
<code>apxs</code> 도구는 이 조건이 만족하지않으면 실행하지
|
|
않는다. 직접 명령어를 실행하여 조건이 만족하는지 알아볼
|
|
수 있다</p>
|
|
|
|
<example>
|
|
$ httpd -l
|
|
</example>
|
|
|
|
<p>목록에 <module>mod_so</module> 모듈이 나와야 한다. 조건을
|
|
만족하면 <code>apxs</code> 도구로 DSO 모듈을 설치하여
|
|
아파치서버의 기능을 쉽게 확장할 수 있다:</p>
|
|
|
|
<example>
|
|
$ apxs -i -a -c mod_foo.c<br />
|
|
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
|
|
ld -Bshareable -o mod_foo.so mod_foo.o<br />
|
|
cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
|
|
chmod 755 /path/to/apache/modules/mod_foo.so<br />
|
|
[activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
|
|
$ apachectl restart<br />
|
|
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
|
|
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
|
|
/path/to/apache/sbin/apachectl restart: httpd started<br />
|
|
$ _
|
|
</example>
|
|
|
|
<p>아규먼트 <var>files</var>에는 C 소스파일 (.c) 이나
|
|
오브젝트파일 (.o), 라이브러리모음 (.a)을 사용할 수 있다.
|
|
<code>apxs</code> 도구는 확장자를 보고 자동으로 C 소스파일은
|
|
컴파일하고, 오브젝트와 모음파일은 링크에만 사용한다. 그러나
|
|
컴파일한 오브젝트를 사용하려면 동적으로 읽어들일 수 있는
|
|
공유객체로 사용하기위해 반드시 오브젝트를 위치독립코드(PIC,
|
|
position independent code)로 컴파일해야 한다. GCC의 경우
|
|
<code>-fpic</code>을 사용하면 된다. 다른 C 컴파일러는 설명서를
|
|
참고하거나 <code>apxs</code>가 오브젝트파일을 컴파일할때
|
|
사용하는 옵션을 참고하라.</p>
|
|
|
|
<p>아파치의 DSO 지원에 대한 더 자세한 내용은
|
|
<module>mod_so</module> 문서를 참고하거나
|
|
<code>src/modules/standard/mod_so.c</code> 소스파일을 읽어봐라.</p>
|
|
</summary>
|
|
<seealso><a href="apachectl.html">apachectl</a></seealso>
|
|
<seealso><a href="httpd.html">httpd</a></seealso>
|
|
|
|
<section id="synopsis"><title>개요</title>
|
|
<p><code><strong>apxs</strong> -<strong>g</strong>
|
|
[ -<strong>S</strong> <var>name</var>=<var>value</var> ]
|
|
-<strong>n</strong> <var>modname</var></code></p>
|
|
|
|
<p><code><strong>apxs</strong> -<strong>q</strong>
|
|
[ -<strong>S</strong> <var>name</var>=<var>value</var> ]
|
|
<var>query</var> ...</code></p>
|
|
|
|
<p><code><strong>apxs</strong> -<strong>c</strong>
|
|
[ -<strong>S</strong> <var>name</var>=<var>value</var> ]
|
|
[ -<strong>o</strong> <var>dsofile</var> ]
|
|
[ -<strong>I</strong> <var>incdir</var> ]
|
|
[ -<strong>D</strong> <var>name</var>=<var>value</var> ]
|
|
[ -<strong>L</strong> <var>libdir</var> ]
|
|
[ -<strong>l</strong> <var>libname</var> ]
|
|
[ -<strong>Wc,</strong><var>compiler-flags</var> ]
|
|
[ -<strong>Wl,</strong><var>linker-flags</var> ]
|
|
<var>files</var> ...</code></p>
|
|
|
|
<p><code><strong>apxs</strong> -<strong>i</strong>
|
|
[ -<strong>S</strong> <var>name</var>=<var>value</var> ]
|
|
[ -<strong>n</strong> <var>modname</var> ]
|
|
[ -<strong>a</strong> ]
|
|
[ -<strong>A</strong> ]
|
|
<var>dso-file</var> ...</code></p>
|
|
|
|
<p><code><strong>apxs</strong> -<strong>e</strong>
|
|
[ -<strong>S</strong> <var>name</var>=<var>value</var> ]
|
|
[ -<strong>n</strong> <var>modname</var> ]
|
|
[ -<strong>a</strong> ]
|
|
[ -<strong>A</strong> ]
|
|
<var>dso-file</var> ...</code></p>
|
|
</section>
|
|
|
|
<section id="options"><title>옵션</title>
|
|
<section id="options.common"><title>공통 옵션</title>
|
|
<dl>
|
|
<dt><code>-n <var>modname</var></code></dt>
|
|
<dd><code>-i</code> (install)과 <code>-g</code> (template
|
|
generation) 옵션을 사용할때 직접 모듈명을 지정한다. 이
|
|
옵션을 사용하여 모듈명을 직접 지정한다. <code>-g</code>
|
|
옵션을 사용한다면 이 옵션을 반드시 사용해야하고,
|
|
<code>-i</code> 옵션을 사용한다면 <code>apxs</code> 도구는
|
|
소스나 (마지막 시도로) 파일명을 가지고 이름을 추측한다.</dd>
|
|
</dl>
|
|
</section>
|
|
|
|
<section id="options.query"><title>질의 옵션</title>
|
|
<dl>
|
|
<dt><code>-q</code></dt>
|
|
<dd><code>apxs</code>의 설정값을 알아낸다. <var>query</var>에는
|
|
다음을 사용할 수 있다: <code>CC</code>, <code>CFLAGS</code>,
|
|
<code>CFLAGS_SHLIB</code>, <code>INCLUDEDIR</code>,
|
|
<code>LD_SHLIB</code>, <code>LDFLAGS_SHLIB</code>,
|
|
<code>LIBEXECDIR</code>, <code>LIBS_SHLIB</code>,
|
|
<code>SBINDIR</code>, <code>SYSCONFDIR</code>, <code>TARGET</code>.
|
|
|
|
<p>설정을 직접 알아낼때 사용한다.</p>
|
|
<example>
|
|
INC=-I`apxs -q INCLUDEDIR`
|
|
</example>
|
|
|
|
<p>예를 들어, 아파치 C 헤더파일을 직접 접근한다면
|
|
Makefile에서 위와 같이 사용한다.</p></dd>
|
|
</dl>
|
|
</section>
|
|
|
|
<section id="options.conf"><title>설정 옵션</title>
|
|
<dl>
|
|
<dt><code>-S <var>name</var>=<var>value</var></code></dt>
|
|
<dd>이 옵션은 위에서 설명한 apxs 설정을 변경한다.</dd>
|
|
</dl>
|
|
</section>
|
|
|
|
<section id="options.template"><title>견본(template) 생성 옵션</title>
|
|
<dl>
|
|
<dt><code>-g</code></dt>
|
|
<dd>하위디렉토리 <var>name</var>을 만들고 (<code>-n</code>
|
|
옵션 참고) 그곳에 파일 두개를 만든다: 한 파일은
|
|
<code>mod_<var>name</var>.c</code>라는 견본 모듈소스파일로,
|
|
자신의 모듈을 만들때 견본으로 사용하거나 apxs 기능을
|
|
시험해볼때 사용한다. 다른 파일은 이 모듈을 쉽게 컴파일하고
|
|
설치하기위한 <code>Makefile</code>이다.</dd>
|
|
</dl>
|
|
</section>
|
|
|
|
<section id="options.dso"><title>DSO 컴파일 옵션</title>
|
|
<dl>
|
|
<dt><code>-c</code></dt>
|
|
<dd>컴파일을 지시한다. 먼저 <var>files</var>에서 C
|
|
소스파일들(.c)을 오브젝트파일(.o)로 컴파일하고,
|
|
<var>files</var>의 나머지 오브젝트파일들(.o과 .a)과
|
|
링크하여 동적공유객체 <var>dsofile</var>을 만든다.
|
|
<code>-o</code> 옵션을 사용하지않으면 <var>files</var>의
|
|
첫번째 파일명에서 이름을 추측하여 보통
|
|
<code>mod_<var>name</var>.so</code>를 사용한다.</dd>
|
|
|
|
<dt><code>-o <var>dsofile</var></code></dt>
|
|
<dd>생성할 동적공유객체 파일명을 직접 지정한다. 이름을
|
|
지정하지않고 <var>files</var> 목록에서 이름을 추측하지
|
|
못하면 마지막으로 <code>mod_unknown.so</code>를 이름으로
|
|
사용한다.</dd>
|
|
|
|
<dt><code>-D <var>name</var>=<var>value</var></code></dt>
|
|
<dd>이 옵션을 컴파일 명령어로 직접 전달한다.
|
|
컴파일때 자신의 define을 추가한다.</dd>
|
|
|
|
<dt><code>-I <var>incdir</var></code></dt>
|
|
<dd>이 옵션을 컴파일 명령어로 직접 전달한다.
|
|
컴파일때 include를 찾을 디렉토리를 추가한다.</dd>
|
|
|
|
<dt><code>-L <var>libdir</var></code></dt>
|
|
<dd>이 옵션을 링커 명령어로 직접 전달한다.
|
|
컴파일때 라이브러리를 찾을 디렉토리를 추가한다.</dd>
|
|
|
|
<dt><code>-l <var>libname</var></code></dt>
|
|
<dd>이 옵션을 링커 명령어로 직접 전달한다.
|
|
컴파일때 사용할 라이브러리를 추가한다.</dd>
|
|
|
|
<dt><code>-Wc,<var>compiler-flags</var></code></dt>
|
|
<dd>이 옵션은 추가 옵션 <var>compiler-flags</var>를
|
|
<code>libtool --mode=compile</code> 명령어로 전달한다.
|
|
컴파일러 특유의 옵션을 추가할때 사용한다.</dd>
|
|
|
|
<dt><code>-Wl,<var>linker-flags</var></code></dt>
|
|
<dd>이 옵션은 추가 옵션 <var>linker-flags</var>를
|
|
<code>libtool --mode=link</code> 명령어로 전달한다. 링커
|
|
특유의 옵션을 추가할때 사용한다.</dd>
|
|
</dl>
|
|
</section>
|
|
|
|
<section id="options.dsoinstall">
|
|
<title>DSO 설치과 설정 옵션</title>
|
|
<dl>
|
|
<dt><code>-i</code></dt>
|
|
<dd>설치를 지시한다. 여러 동적공유객체를 서버의
|
|
<var>modules</var> 디렉토리에 설치한다.</dd>
|
|
|
|
<dt><code>-a</code></dt>
|
|
<dd>아파치 <code>httpd.conf</code> 설정파일에 적절한
|
|
<directive module="mod_so">LoadModule</directive> 줄을
|
|
추가하거나 이미 있다면 활성화하여 모듈을 사용하도록
|
|
만든다.</dd>
|
|
|
|
<dt><code>-A</code></dt>
|
|
<dd><code>-a</code>와 비슷하지만, <directive
|
|
module="mod_so">LoadModule</directive> 지시어 앞에
|
|
우물정자(<code>#</code>)를 붙인다. <em>즉</em>, 현재는
|
|
사용하지않지만 나중에 사용할 수 있도록 모듈을 준비한다.</dd>
|
|
|
|
<dt><code>-e</code></dt>
|
|
<dd>편집을 지시한다. <code>-a</code> 혹은 <code>-A</code>
|
|
옵션과 같이 사용할 수 있으며, <code>-i</code> 명령과
|
|
비슷하지만 모듈을 설치하지않고 아파치
|
|
<code>httpd.conf</code> 설정파일만 편집한다.</dd>
|
|
</dl>
|
|
</section>
|
|
</section>
|
|
|
|
<section id="examples"><title>예제</title>
|
|
<p>아파치서버의 기능을 확장하는 <code>mod_foo.c</code>라는
|
|
아파치 모듈이 있다고 가정하자. 먼저 다음 명령어를 사용하여
|
|
C 소스를 아파치 서버가 읽어들일 공유객체로 컴파일한다:</p>
|
|
|
|
<example>
|
|
$ apxs -c mod_foo.c<br />
|
|
/path/to/libtool --mode=compile gcc ... -c mod_foo.c<br />
|
|
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo<br />
|
|
$ _
|
|
</example>
|
|
|
|
<p>그리고 이 공유객체를 읽어들이는 <directive
|
|
module="mod_so">LoadModule</directive> 지시어를 아파치
|
|
설정에 추가한다. <code>apxs</code>는 자동으로 공유객체를
|
|
"modules" 디렉토리에 설치하고 <code>httpd.conf</code> 파일을
|
|
알맞게 수정하여 간단히 작업을 마친다. 다음 같이 실행한다:</p>
|
|
|
|
<example>
|
|
$ apxs -i -a mod_foo.la<br />
|
|
/path/to/instdso.sh mod_foo.la /path/to/apache/modules<br />
|
|
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules
|
|
...
|
|
chmod 755 /path/to/apache/modules/mod_foo.so<br />
|
|
[/path/to/apache/conf/httpd.conf에서 `foo' 모듈을 활성화한다]<br />
|
|
$ _
|
|
</example>
|
|
|
|
<p>그러면 다음과 같은 줄을</p>
|
|
|
|
<example>
|
|
LoadModule foo_module modules/mod_foo.so
|
|
</example>
|
|
|
|
<p>설정파일에 없다면 추가한다. 이 설정을 기본적으로 사용하지
|
|
않는다면 <code>-A</code> 옵션을 사용한다. <em>즉</em></p>
|
|
|
|
<example>
|
|
$ apxs -i -A mod_foo.c
|
|
</example>
|
|
|
|
<p>apxs를 쉽게 사용하려고 다음과 같이 아파치 모듈 견본과
|
|
Makefile을 만들 수 있다:</p>
|
|
|
|
<example>
|
|
$ apxs -g -n foo<br />
|
|
Creating [DIR] foo<br />
|
|
Creating [FILE] foo/Makefile<br />
|
|
Creating [FILE] foo/modules.mk<br />
|
|
Creating [FILE] foo/mod_foo.c<br />
|
|
Creating [FILE] foo/.deps<br />
|
|
$ _
|
|
</example>
|
|
|
|
<p>그런후 바로 견본 모듈을 공유객체로 컴파일하여 아파치
|
|
서버가 읽도록한다:</p>
|
|
|
|
<example>
|
|
$ cd foo<br />
|
|
$ make all reload<br />
|
|
apxs -c mod_foo.c<br />
|
|
/path/to/libtool --mode=compile gcc ... -c mod_foo.c<br />
|
|
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo<br />
|
|
apxs -i -a -n "foo" mod_foo.la<br />
|
|
/path/to/instdso.sh mod_foo.la /path/to/apache/modules<br />
|
|
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules
|
|
...
|
|
chmod 755 /path/to/apache/modules/mod_foo.so<br />
|
|
[/path/to/apache/conf/httpd.conf에서 `foo' 모듈을 활성화한다]<br />
|
|
apachectl restart<br />
|
|
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
|
|
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
|
|
/path/to/apache/sbin/apachectl restart: httpd started<br />
|
|
$ _
|
|
</example>
|
|
|
|
</section>
|
|
</manualpage>
|