~ubuntu-branches/ubuntu/karmic/apache2/karmic-security

« back to all changes in this revision

Viewing changes to docs/manual/dso.html.ja.utf8

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Fritsch
  • Date: 2008-10-01 11:50:18 UTC
  • mfrom: (34 intrepid)
  • mto: (14.2.1 squeeze)
  • mto: This revision was merged to the branch mainline in revision 40.
  • Revision ID: james.westby@ubuntu.com-20081001115018-1022gw429ce4pqyp
Tags: 2.2.9-10
Regression fix from upstream svn for mod_proxy_http:
Don't trigger a retry by the client if a failure to read the response line
was the result of a timeout.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="UTF-8"?>
 
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
3
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
 
4
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
5
              This file is generated from xml source: DO NOT EDIT
 
6
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
7
      -->
 
8
<title>動的共有オブジェクト (DSO) サポート - Apache HTTP サーバ</title>
 
9
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
 
10
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
 
11
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
 
12
<link href="./images/favicon.ico" rel="shortcut icon" /></head>
 
13
<body id="manual-page"><div id="page-header">
 
14
<p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p>
 
15
<p class="apache">Apache HTTP サーバ バージョン 2.2</p>
 
16
<img alt="" src="./images/feather.gif" /></div>
 
17
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
 
18
<div id="path">
 
19
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP サーバ</a> &gt; <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> &gt; <a href="./">バージョン 2.2</a></div><div id="page-content"><div id="preamble"><h1>動的共有オブジェクト (DSO) サポート</h1>
 
20
<div class="toplang">
 
21
<p><span>Available Languages: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
 
22
<a href="./ja/dso.html" title="Japanese">&nbsp;ja&nbsp;</a> |
 
23
<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 
24
</div>
 
25
<div class="outofdate">This translation may be out of date. Check the
 
26
            English version for recent changes.</div>
 
27
 
 
28
    <p>Apache HTTP サーバはモジュール化されたプログラムで、
 
29
    管理者がモジュールを選択することでサーバに組み込む機能を選ぶことができます。
 
30
    モジュールはサーバがビルドされるときに <code class="program"><a href="./programs/httpd.html">httpd</a></code> バイナリに
 
31
    静的に組み込むことができます。もしくは、<code class="program"><a href="./programs/httpd.html">httpd</a></code> バイナリとは
 
32
    別に存在する動的共有オブジェクト (訳注: Dynamic Shared Object)
 
33
    (DSO) としてコンパイルすることも
 
34
    できます。DSO モジュールはサーバがビルドされるときにコンパイルしたり、
 
35
    Apache 拡張ツール (<code class="program"><a href="./programs/apxs.html">apxs</a></code>) を
 
36
    使って後でコンパイルして追加したりできます。</p>
 
37
 
 
38
    <p>この文書は DSO モジュールの使い方と、仕組みについて
 
39
    説明します。</p>
 
40
  </div>
 
41
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">実装</a></li>
 
42
<li><img alt="" src="./images/down.gif" /> <a href="#usage">使用法の概要</a></li>
 
43
<li><img alt="" src="./images/down.gif" /> <a href="#background">背景</a></li>
 
44
<li><img alt="" src="./images/down.gif" /> <a href="#advantages">利点と欠点</a></li>
 
45
</ul></div>
 
46
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
 
47
<div class="section">
 
48
<h2><a name="implementation" id="implementation">実装</a></h2>
 
49
 
 
50
<table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>
 
51
 
 
52
    <p>個々の Apache モジュールをロードするための DSO サポートは
 
53
    <code class="module"><a href="./mod/mod_so.c.html">mod_so.c</a></code> というモジュールの機能に基づいています。
 
54
    このモジュール は Apache のコアに静的に組み込まれている必要があります。
 
55
    それは <code class="module"><a href="./mod/core.c.html">core.c</a></code> 以外では DSO にできない唯一の
 
56
    モジュールです。事実上、他のすべての Apache のモジュールは、
 
57
    <a href="install.html">インストールの文書</a>で説明されているように、
 
58
    <code class="program"><a href="./programs/configure.html">configure</a></code> の
 
59
    <code>--enable-<em>module</em>=shared</code> オプションでそれぞれを
 
60
    DSO ビルドにすることにより、DSO モジュールにすることができます。
 
61
    <code>mod_foo.so</code> のような DSO にモジュールがコンパイルされれば、
 
62
    <code>httpd.conf</code> ファイル中で <code class="module"><a href="./mod/mod_so.html">mod_so</a></code> の
 
63
    <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
 
64
    ディレクティブを使うことでサーバの起動や再起動時にこのモジュールを
 
65
    ロードするようにできます。</p>
 
66
 
 
67
    <p>Apache モジュール用の (特にサードパーティモジュールの) DSO ファイルの
 
68
    作成を簡単にするために、<code class="program"><a href="./programs/apxs.html">apxs</a></code>
 
69
    (<dfn>APache eXtenSion</dfn>) という新しいサポートプログラムがあります。
 
70
    Apache のソースツリーの<em>外で</em> DSO モジュールをビルドするために
 
71
    使うことができます。発想は単純です: Apache のインストール時の
 
72
    <code class="program"><a href="./programs/configure.html">configure</a></code>、<code>make install</code> のときに Apache の
 
73
    C ヘッダをインストールし、DSO ビルド用のプラットフォーム依存の
 
74
    コンパイラとリンカのフラグを <code class="program"><a href="./programs/apxs.html">apxs</a></code> プログラムに追加します。
 
75
    これにより、ユーザが Apache の配布ソースツリーなしで、さらに
 
76
    DSO サポートのためのプラットフォーム依存のコンパイラやリンカの
 
77
    フラグをいじることなく Apache のモジュールのソースをコンパイル
 
78
    できるようになります。</p>
 
79
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
 
80
<div class="section">
 
81
<h2><a name="usage" id="usage">使用法の概要</a></h2>
 
82
 
 
83
    <p>Apache 2.2 の DSO 機能の概略を知ることができるための、
 
84
    短く簡潔な概要です:</p>
 
85
 
 
86
    <ol>
 
87
      <li>
 
88
        <em>配布されている</em> Apache モジュール、仮に <code>mod_foo.c</code>
 
89
        として、それを DSO <code>mod_foo.so</code> にビルド、インストール: 
 
90
 
 
91
<div class="example"><p><code>
 
92
$ ./configure --prefix=/path/to/install --enable-foo=shared<br />
 
93
$ make install
 
94
</code></p></div>
 
95
      </li>
 
96
 
 
97
      <li>
 
98
        <em>サードパーティ</em> Apache モジュール、仮に <code>mod_foo.c</code>
 
99
        として、それを DSO <code>mod_foo.so</code> にビルド、インストール:
 
100
 
 
101
<div class="example"><p><code>
 
102
$ ./configure --add-module=<var>module_type</var>:/path/to/3rdparty/mod_foo.c \<br />
 
103
<span class="indent">
 
104
  --enable-foo=shared<br />
 
105
</span>
 
106
$ make install
 
107
</code></p></div>
 
108
      </li>
 
109
 
 
110
      <li>
 
111
        共有モジュールの <em>後々のインストール</em> のために
 
112
        Apache を設定:
 
113
 
 
114
<div class="example"><p><code>
 
115
$ ./configure --enable-so<br />
 
116
$ make install
 
117
</code></p></div>
 
118
      </li>
 
119
 
 
120
      <li>
 
121
        <em>サードパーティ</em> Apache モジュール、仮に <code>mod_foo.c</code>
 
122
        として、それを <code class="program"><a href="./programs/apxs.html">apxs</a></code> を使って
 
123
        Apache ソースツリーの<em>外で</em> DSO にビルド、インストール:
 
124
 
 
125
<div class="example"><p><code>
 
126
$ cd /path/to/3rdparty<br />
 
127
$ apxs -c mod_foo.c<br />
 
128
$ apxs -i -a -n foo mod_foo.la
 
129
</code></p></div>
 
130
      </li>
 
131
    </ol>
 
132
 
 
133
    <p>どの場合においても、共有モジュールをコンパイルした後で、
 
134
    <code>httpd.conf</code> で 
 
135
    <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
 
136
    ディレクティブを使って Apache がモジュールを使用するように
 
137
    しなければなりません。</p>
 
138
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
 
139
<div class="section">
 
140
<h2><a name="background" id="background">背景</a></h2>
 
141
 
 
142
    <p>最近の Unix 系の OS には <em>動的共有オブジェクト</em> (DSO)
 
143
    の動的リンク/ロードという気のきいた機構が
 
144
    存在します。これは、実行時にプログラムのアドレス空間に
 
145
    ロードできるような特別な形式でプログラムをビルドすることを
 
146
    可能にします。</p>
 
147
 
 
148
    <p>このロードは二つの方法で行なうことができます: 実行プログラムが
 
149
    起動されたときに <code>ld.so</code> というシステムプログラム
 
150
    により自動的に行なわれる方法と、実行プログラム中から、システムコール
 
151
    <code>dlopen()/dlsym()</code> による Unix ローダへの
 
152
    プログラムシステムのインタフェースを使って手動で行なう方法とが
 
153
    あります。</p>
 
154
 
 
155
    <p>最初の方法では DSO は普通は<em>共有ライブラリ</em>や <em>DSO
 
156
    ライブラリ</em> と呼ばれていて、DSO の名前は
 
157
    <code>libfoo.so</code> や <code>libfoo.so.1.2</code> のようになっています。
 
158
    これらはシステムディレクトリ (通常 <code>/usr/lib</code>) に存在し、
 
159
    実行プログラムへのリンクはビルド時に <code>-lfoo</code> をリンカに
 
160
    指定することで確立されます。これによりライブラリへの参照が実行プログラムの
 
161
    ファイルに書き込まれて、起動時に Unix のローダが <code>/usr/lib</code> や、
 
162
    リンカの <code>-R</code> のようなオプションによりハードコードされたパス、
 
163
    環境変数 <code>LD_LIBRARY_PATH</code> により設定されたパス、の中から
 
164
    <code>libfoo.so</code> の場所を見つけることができます。それから、
 
165
    実行プログラム中の (まだ未解決の) シンボルを DSO にあるシンボルで
 
166
    解決します。</p>
 
167
 
 
168
    <p>普通は実行プログラム中のシンボルは DSO からは参照されません
 
169
    (DSO は一般的なコードによる再利用可能なライブラリですので)。
 
170
    ですから、さらなるシンボルの解決は必要ありません。
 
171
    シンボルは Unix ローダにより完全な解決が行なわれますので、実行ファイル自身は
 
172
    何もする必要がありません。(実際のところ、静的でない方法でリンクされている
 
173
    すべての実行プログラムに組み込まれている開始用のコードの一部に
 
174
    <code>ld.so</code> を起動するコードが含まれています)。よく使われる
 
175
    ライブラリの動的ロードの利点は明らかです。ライブラリのコードは
 
176
    システムライブラリに <code>libc.so</code> のようにして一度保存するだけでよく、
 
177
    プログラムのために必要なディスクの領域を節約することができます。</p>
 
178
 
 
179
    <p>二つめの方法では DSO は普通は<em>共有オブジェクト</em>や
 
180
    <em>DSO ファイル</em>と呼ばれていて、任意の拡張子を付けることができます
 
181
    (ただし、標準的な名前は <code>foo.so</code> です)。
 
182
    これらのファイルは通常はプログラム専用のディレクトリに置かれ、
 
183
    これらを使う実行プログラムへのリンクは自動的にはされません。
 
184
    ですので、実行プログラムは <code>dlopen()</code> を使って
 
185
    実行時に手動で DSO をプログラムのアドレス空間にロードする必要があります。
 
186
    この時点では実行プログラムに対して DSO のシンボルの解決は行なわれません。
 
187
    しかし、その代わりに Unix のローダが DSO の (まだ未解決の) シンボルを
 
188
    実行プログラムによりエクスポートされたシンボルと既にロードされた
 
189
    DSO ライブラリによりエクスポートされたシンボル (特に、どこにでもある
 
190
    <code>libc.so</code> のすべてのシンボル) で自動的に解決します。
 
191
    こうすることで、DSO は最初から静的にリンクされていたかのように、
 
192
    実行プログラムのシンボルを知ることができます。</p>
 
193
 
 
194
    <p>最後に、DSO の API を利点を生かすために、プログラムは
 
195
    後でディスパッチテーブル<em>など</em>でシンボルを使うことができるように、
 
196
    <code>dlsym()</code> を使っていくつかのシンボルを解決します。
 
197
    すなわち: 実行プログラムは必要なすべてのシンボルを手動で解決しなければ
 
198
    なりません。この機構の利点はプログラムのオプショナルな部分は
 
199
    必要になるまでロードする必要がない (だからメモリも消費しない)
 
200
    ことです。必要ならば、基本プログラムの機能を拡張するために
 
201
    これらの部分を動的にロードすることができます。</p>
 
202
 
 
203
    <p>この DSO 機構は簡単なように見えますが、少なくとも一つ難しい点が
 
204
    あります: プログラムを拡張するために DSO を使っているときに、
 
205
    DSO が実行プログラムからシンボルを解決する点です (二番目の方法)。
 
206
    これはなぜでしょうか。それは、DSO のシンボルを実行プログラムの
 
207
    シンボルから「逆解決」するというのはライブラリの設計
 
208
    (ライブラリはそれを使用するプログラムのことは何も
 
209
    知らない) に反していて、この機能はすべてのプラットフォームに
 
210
    あるわけではなく、標準化もされていないからです。
 
211
    実際には実行プログラムのグローバルなシンボルは再エクスポートされることは
 
212
    あまりなく、DSO から使うことができません。リンカにグローバルシンボルすべてを
 
213
    エクスポートするようにさせる方法を見つけることが、実行時にプログラムを
 
214
    拡張するために DSO を使うときの一番の問題です。</p>
 
215
 
 
216
    <p>共有ライブラリのアプローチが普通の方法です。DSO 機構はそのために
 
217
    設計されたものですから。したがって、その方法はオペレーティングシステムが
 
218
    提供するほとんどすべての種類のライブラリで使われています。
 
219
    一方、プログラムの拡張のために共有オブジェクトを使用する、という方は
 
220
    あまり使われていません。</p>
 
221
 
 
222
    <p>1998 年の時点で、実行時に実際に機能拡張のために DSO 機構を使っている
 
223
    ソフトウェアパッケージは少しだけでした: Perl 5 (XS 機構と DnaLoader モジュール
 
224
    によるもの)、Netscape サーバ<em>など</em>です。Apache はすでに
 
225
    モジュールの概念を使って機能拡張をしていて、内部的にディスパッチリストに
 
226
    基づいた外部モジュールの Apache コア機能へのリンクを行なっていましたので、
 
227
    バージョン 1.3 から、Apache も DSO 機構を使う仲間になりました。
 
228
    Apache は実行時に DSO を使ってモジュールをロードするようにすでに
 
229
    運命付けられていたのです。</p>
 
230
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
 
231
<div class="section">
 
232
<h2><a name="advantages" id="advantages">利点と欠点</a></h2>
 
233
 
 
234
    <p>上記の DSO に基づいた機能は以下の利点があります:</p>
 
235
 
 
236
    <ul>
 
237
      <li>実際のサーバプロセスを組み立てるために、
 
238
      ビルド時に <code>configure</code> のオプションを使う代わりに
 
239
      実行時に <code>httpd.conf</code> の設定用コマンド
 
240
      <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
 
241
      を使うことができますので、サーバパッケージの柔軟性が高まりました。
 
242
      たとえば、一つの Apache のインストールから
 
243
      違う構成のサーバ (標準版と SSL 版、最小構成と拡張版 [mod_perl, PHP3]
 
244
      <em>など</em>) を実行することができます。</li>
 
245
 
 
246
      <li>インストールの後であっても、サーバのパッケージをサードパーティ
 
247
      モジュールで簡単に拡張できるようになりました。これは、Apache コア
 
248
      パッケージと、PHP3, mod_perl, mod_fastcgi <em>など</em> の追加の
 
249
      パッケージを作成できるので、少なくともベンダのパッケージ管理者にとって
 
250
      大きな利点があります。</li>
 
251
 
 
252
      <li>Apache モジュールの開発が簡単になります。
 
253
      これは DSO と <code class="program"><a href="./programs/apxs.html">apxs</a></code> の組み合わせにより、Apache ソースツリーの
 
254
      外で作業でき、開発中のモジュールの新しいバージョンを
 
255
      実行中の Apache サーバに組み込むために <code>apxs -i</code> と
 
256
      <code>apachectl restart</code> を行なうだけで良くなるからです。</li>
 
257
    </ul>
 
258
 
 
259
    <p>DSO には以下の欠点があります:</p>
 
260
 
 
261
    <ul>
 
262
      <li>すべてのオペレーティングシステムがプログラムのアドレス空間に
 
263
      コードを動的ロードすることをサポートしているわではないので、
 
264
      プラットフォームによっては DSO 機構は使えません。</li>
 
265
 
 
266
      <li>Unix のローダがシンボルの解決をする必要ができたので、
 
267
      そのオーバヘッドによりサーバの起動時間が約 20% 遅くなっています。</li>
 
268
 
 
269
      <li>位置非依存コード (PIC) (訳注 position independent code) は
 
270
      相対アドレスのために複雑なアセンブラのトリックが必要なことがあり、
 
271
      それは必ずしも絶対アドレスと同じくらいの速度がでるわけではありませんので、
 
272
      プラットフォームによってはサーバの実行速度が約 5% 遅くなります。</li>
 
273
 
 
274
      <li>DSO モジュールはすべてのプラットフォームで他の DSO に基づいた
 
275
      ライブラリに対してリンクできる (<code>ld -lfoo</code>)
 
276
      というわけではありませんので (たとえば、a.out のプラットフォームでは
 
277
      この機能はありませんが、ELF のプラットフォームにはあります)、
 
278
      すべての種類のモジュールに DSO 機構を使えるわけではありません。
 
279
      言い換えると、DSO ファイルとしてコンパイルされたモジュールの
 
280
      使えるシンボルは、
 
281
      Apache のコアのシンボル、C ライブラリ (<code>libc</code>) と
 
282
      Apache コアが使っている他のすべての静的なライブラリと動的ライブラリの
 
283
      シンボル、PIC による静的なライブラリ (<code>libfoo.a</code>) の
 
284
      シンボルのみに制限されます。その他のコードを使う方法は、
 
285
      Apache コア自身がすでにそのコードへの参照があるようにするか、
 
286
      <code>dlopen ()</code> を使ってコードを自分自身でロードするかの
 
287
     どちらかしかありません。</li>
 
288
    </ul>
 
289
 
 
290
</div></div>
 
291
<div class="bottomlang">
 
292
<p><span>Available Languages: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
 
293
<a href="./ja/dso.html" title="Japanese">&nbsp;ja&nbsp;</a> |
 
294
<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 
295
</div><div id="footer">
 
296
<p class="apache">Copyright 2008 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
 
297
<p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p></div>
 
298
</body></html>
 
 
b'\\ No newline at end of file'