]> granicus.if.org Git - apache/blob - docs/manual/dso.html.fr
mod_reqtimeout: Change the default to set some reasonable timeout values if loaded
[apache] / docs / manual / dso.html.fr
1 <?xml version="1.0" encoding="ISO-8859-1"?>
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="fr" xml:lang="fr"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>Support des objets dynamiques partagés (DSO) - Serveur 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/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
15 <p class="apache">Serveur Apache HTTP Version 2.3</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/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.3</a></div><div id="page-content"><div id="preamble"><h1>Support des objets dynamiques partagés (DSO)</h1>
20 <div class="toplang">
21 <p><span>Langues Disponibles: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
22 <a href="./fr/dso.html" title="Français">&nbsp;fr&nbsp;</a> |
23 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
24 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
25 <a href="./tr/dso.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
26 </div>
27
28     <p>La conception modulaire du serveur HTTP Apache permet à l'administrateur
29     de choisir les fonctionnalités à inclure dans le serveur en sélectionnant
30     un certain nombre de modules. Les modules seront compilés en tant
31     qu'Objets Dynamiques Partagés (Dynamic Shared Objects ou DSOs)
32     qui mènent une existence séparée du fichier binaire principal
33     <code class="program"><a href="./programs/httpd.html">httpd</a></code>. Les modules DSO peuvent être compilés en
34     même temps que le serveur, ou compilés et ajoutés ultérieurement via
35     l'Outil des Extensions à Apache (Apache Extension Tool ou
36     <code class="program"><a href="./programs/apxs.html">apxs</a></code>).</p>
37     <p>Les modules peuvent aussi être intégrés statiquement dans le
38     binaire <code class="program"><a href="./programs/httpd.html">httpd</a></code> lors de la compilation de ce
39     dernier.</p>
40
41     <p>Ce document décrit l'utilisation des modules DSO ainsi que les dessous
42     de leur fonctionnement.</p>
43   </div>
44 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">Implémentation</a></li>
45 <li><img alt="" src="./images/down.gif" /> <a href="#usage">Mode d'emploi succinct</a></li>
46 <li><img alt="" src="./images/down.gif" /> <a href="#background">Les dessous du fonctionnement des DSO</a></li>
47 <li><img alt="" src="./images/down.gif" /> <a href="#advantages">Avantages et inconvénients</a></li>
48 </ul></div>
49 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
50 <div class="section">
51 <h2><a name="implementation" id="implementation">Implémentation</a></h2>
52
53 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</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>
54
55     <p>Le support DSO pour le chargement de modules individuels d'Apache
56     httpd est
57     assuré par un module nommé <code class="module"><a href="./mod/mod_so.html">mod_so</a></code> qui doit être compilé
58     statiquement dans le coeur d'Apache httpd. Il s'agit du seul module avec le
59     module <code class="module"><a href="./mod/core.html">core</a></code> à ne pas pouvoir être compilé en tant que
60     module DSO lui-même. Pratiquement tous les autres modules d'Apache httpd
61     distribués seront alors compilés en tant que modules DSO. Une fois
62     compilé en tant que module DSO nommé <code>mod_foo.so</code>, un
63     module peut être chargé en mémoire au
64     démarrage ou redémarrage du serveur à l'aide de
65     la directive <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> du module
66     <code class="module"><a href="./mod/mod_so.html">mod_so</a></code>, placée
67     dans votre fichier <code>httpd.conf</code>.</p>
68     <p>La compilation en mode DSO peut être désactivée pour certains
69     modules via l'option <code>--enable-mods-static</code> du script
70     <code class="program"><a href="./programs/configure.html">configure</a></code>, comme expliqué dans la <a href="install.html">Documentation sur l'installation</a>.</p>
71
72     <p>Un utilitaire permet de simplifier la création de
73     fichiers DSO pour les modules d'Apache httpd
74     (particulièrement pour les modules tiers) ; il s'agit du programme nommé
75     <code class="program"><a href="./programs/apxs.html">apxs</a></code> (<dfn>APache
76     eXtenSion</dfn>). On peut l'utiliser pour construire des modules de type
77     DSO <em>en dehors</em> de l'arborescence des sources d'Apache httpd. L'idée est
78     simple : à l'installation du serveur HTTP Apache, la procédure <code>make install</code>
79     du script <code class="program"><a href="./programs/configure.html">configure</a></code> installe les fichiers d'en-têtes
80     d'Apache httpd et positionne, pour la plateforme de compilation,  les drapeaux du compilateur et de
81     l'éditeur de liens à l'intérieur du programme
82     <code class="program"><a href="./programs/apxs.html">apxs</a></code>, qui sera utilisé pour la construction de fichiers DSO.
83     Il est ainsi possible d'utiliser le programme <code class="program"><a href="./programs/apxs.html">apxs</a></code>
84     pour compiler ses sources de modules Apache httpd sans avoir besoin de
85     l'arborescence des sources de la distribution d'Apache, et sans avoir à
86     régler les drapeaux du compilateur et de l'éditeur de liens pour le support DSO.</p>
87 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
88 <div class="section">
89 <h2><a name="usage" id="usage">Mode d'emploi succinct</a></h2>
90
91     <p>Afin que vous puissiez vous faire une idée des fonctionnalités DSO
92     du serveur HTTP Apache 2.x, en voici un résumé court et concis :</p>
93
94     <ol>
95       <li>
96         <p>Construire et installer un module Apache httpd <em>faisant partie de la
97         distribution</em>, par exemple <code>mod_foo.c</code>,
98         en tant que module DSO <code>mod_foo.so</code> :</p>
99
100 <div class="example"><p><code>
101 $ ./configure --prefix=/chemin/vers/installation --enable-foo<br />
102 $ make install
103 </code></p></div>
104       </li>
105
106       <li>
107         <p>Configure le serveur HTTP Apache avec tous les modules
108         activés et chargés en tant qu'objets partagés. Vous pouvez
109         ensuite les désactiver un à un en commentant la directive <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> correspondante dans le
110       fichier <code>httpd.conf</code>.</p>
111
112 <div class="example"><p><code>
113 $ ./configure --enable-mods-shared=all<br />
114 $ make install
115 </code></p></div>
116
117         <p>L'argument <code>most</code> de l'option
118         <code>--enable-modules</code> indique que tous les modules
119         non-expérimentaux ou qui ne sont pas là à titre d'exemple seront
120         compilés.</p>
121       </li>
122
123       <li>
124         Construire et installer un module Apache httpd <em>tiers</em>, par exemple
125         <code>mod_foo.c</code>, en tant que module DSO
126         <code>mod_foo.so</code> <em>en dehors</em> de l'arborescence des sources
127         d'Apache httpd à l'aide du programme <code class="program"><a href="./programs/apxs.html">apxs</a></code> :
128
129 <div class="example"><p><code>
130 $ cd /chemin/vers/module_tiers<br />
131 $ apxs -cia mod_foo.c
132 </code></p></div>
133       </li>
134     </ol>
135
136     <p>Dans tous les cas, une fois le module partagé compilé, vous devez
137     ajouter une directive <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
138     dans le fichier <code>httpd.conf</code> pour qu'Apache httpd active le module.</p>
139
140     <p>Voir la <a href="programs/apxs.html">documentation sur apxs</a>
141     pour plus de détails.</p>
142 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
143 <div class="section">
144 <h2><a name="background" id="background">Les dessous du fonctionnement des DSO</a></h2>
145
146     <p>Les clônes modernes d'UNIX proposent un mécanisme
147     appelé édition de liens et chargement dynamiques d'
148     <em>Objets Dynamiques Partagés</em> (DSO), qui permet de construire un
149     morceau de programme dans un format spécial pour le rendre chargeable
150     à l'exécution dans l'espace d'adressage d'un programme exécutable.</p>
151
152     <p>Ce chargement peut s'effectuer de deux manières : automatiquement par
153     un programme système appelé <code>ld.so</code> quand un programme
154     exécutable est démarré, ou manuellement à partir du programme en cours
155     d'exécution via sa propre interface système vers le chargeur Unix à l'aide
156     des appels système <code>dlopen()/dlsym()</code>.</p>
157
158     <p>Dans la première méthode, les DSO sont en général appelés
159     <em>bibliothèques partagées</em> ou encore <em>bibliothèques DSO</em>, et
160     possèdent des noms du style
161     <code>libfoo.so</code> ou <code>libfoo.so.1.2</code>. Ils résident dans un
162     répertoire système (en général <code>/usr/lib</code>)
163     et le lien avec le programme exécutable est établi à la compilation en
164     ajoutant <code>-lfoo</code> à la commande de l'éditeur de liens. Les
165     références à la bibliothèque sont ainsi codées en dur dans le fichier du
166     programme exécutable de façon à ce qu'au démarrage du programme, le
167     chargeur Unix soit capable de localiser <code>libfoo.so</code> dans
168     <code>/usr/lib</code>, dans des chemins codés en dur à l'aide d'options de
169     l'éditeur de liens comme <code>-R</code> ou dans des chemins définis par la
170     variable d'environnement
171     <code>LD_LIBRARY_PATH</code>. Le chargeur peut dès lors résoudre tous les symboles
172     (jusque là non encore résolus) du DSO dans le programme exécutable.</p>
173
174     <p>Les symboles du programme exécutable ne sont en général pas
175     référencés par le DSO (car c'est une bibliothèque de code à usage général
176     et réutilisable),
177     et ainsi aucune résolution supplémentaire n'est nécessaire. De son côté,
178     le programme exécutable ne doit accomplir aucune action particulière
179     pour utiliser les
180     symboles du DSO car toutes les résolutions sont effectuées par le chargeur
181     Unix. En fait, le code permettant d'invoquer
182     <code>ld.so</code> fait partie du code de démarrage pour l'exécution qui
183     est lié dans tout programme exécutable non statiquement lié.
184     L'avantage du chargement dynamique du code d'une bibliothèque partagée est
185     évident : le code de la bibliothèque ne doit être stocké qu'une seule fois
186     dans une bibliothèque système telle que <code>libc.so</code>, ce qui permet
187     d'économiser de l'espace disque pour les autres programmes.</p>
188
189     <p>Dans la seconde méthode, les DSO sont en général appelés <em>objets
190     partagés</em> ou <em>fichiers DSO</em>, et peuvent être nommés avec
191     l'extension de son choix (bien que le nom conseillé soit du style
192     <code>foo.so</code>). Ces fichiers résident en général dans un répertoire
193     spécifique à un programme, et aucun lien n'est automatiquement établi avec
194     le programme exécutable dans lequel ils sont utilisés.
195     Le programme exécutable charge manuellement le DSO à l'exécution dans son
196     espace d'adressage à l'aide de l'appel système <code>dlopen()</code>.
197     A ce moment, aucune résolution de symboles du DSO n'est effectuée pour le
198     programme exécutable. Par contre le chargeur Unix
199     résoud automatiquement tout symbole du DSO (non encore résolu)
200     faisant partie de l'ensemble de symboles exporté par le programme
201     exécutable et ses bibliothèques DSO déjà chargées (et en particulier tous
202     les symboles de la bibliothèque à tout faire <code>libc.so</code>).
203     De cette façon, le DSO prend connaissance de l'ensemble de symboles du
204     programme exécutable comme s'il avait été lié statiquement avec lui
205     auparavant.</p>
206
207     <p>Finalement, pour tirer profit de l'API des DSO, le programme exécutable
208     doit résoudre certains symboles du DSO à l'aide de l'appel système
209     <code>dlsym()</code> pour une utilisation ultérieure dans les tables de
210     distribution, <em>etc...</em> En d'autres termes, le programme exécutable doit
211     résoudre manuellement tous les symboles dont il a besoin pour pouvoir les
212     utiliser.
213     Avantage d'un tel mécanisme : les modules optionnels du programme n'ont pas
214     besoin d'être chargés (et ne gaspillent donc pas de ressources mémoire)
215     tant qu'il ne sont pas nécessaires au programme en question. Si nécessaire,
216     ces modules peuvent être chargés dynamiquement afin d'étendre les
217     fonctionnalités de base du programme.</p>
218
219     <p>Bien que ce mécanisme DSO paraisse évident, il comporte au moins une
220     étape difficile : la résolution des symboles depuis le programme exécutable
221     pour le DSO lorsqu'on utilise un DSO pour étendre les fonctionnalités d'un
222     programme (la seconde méthode). Pourquoi ? Parce que la "résolution
223     inverse" des symboles DSO à partir du jeu de symboles du programme
224     exécutable dépend de la conception de la bibliothèque (la bibliothèque n'a
225     aucune information sur le programme qui l'utilise) et n'est ni standardisée
226     ni disponible sur toutes les plateformes. En pratique, les symboles globaux
227     du programme exécutable ne sont en général pas réexportés et donc
228     indisponibles pour l'utilisation dans un DSO. Trouver une méthode pour
229     forcer l'éditeur de liens à exporter tous les symboles globaux est le
230     principal problème que l'on doit résoudre lorsqu'on utilise un DSO pour
231     étendre les fonctionnalités d'un programme au moment de son exécution.</p>
232
233     <p>L'approche des bibliothèques partagées est la plus courante, parce que
234     c'est dans cette optique que le mécanisme DSO a été conçu ; c'est cette
235     approche qui est ainsi
236     utilisée par pratiquement tous les types de bibliothèques que fournit le
237     système d'exploitation.</p>
238
239 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
240 <div class="section">
241 <h2><a name="advantages" id="advantages">Avantages et inconvénients</a></h2>
242
243     <p>Les fonctionnalités ci-dessus basées sur les DSO présentent les
244     avantages suivants :</p>
245
246     <ul>
247       <li>Le paquetage du serveur est plus flexible à l'exécution car le
248       processus serveur peut être assemblé à l'exécution via la
249       directive <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> du fichier de
250       configuration <code>httpd.conf</code> plutôt que par des options du script
251       <code class="program"><a href="./programs/configure.html">configure</a></code> à la compilation. Par exemple,
252       on peut ainsi exécuter différentes instances du serveur
253       (standard et version SSL, version minimale et version dynamique
254       [mod_perl, mod_php], <em>etc...</em>) à partir d'une seule installation
255       d'Apache httpd.</li>
256
257       <li>Le paquetage du serveur peut être facilement étendu avec des modules
258       tiers, même après l'installation. Ceci présente un gros
259       avantage pour les mainteneurs de paquetages destinés aux distributions,
260       car ils peuvent créer un paquetage Apache httpd de base, et des paquetages
261       additionnels contenant des extensions telles que PHP, mod_perl, mod_fastcgi,
262       <em>etc...</em></li>
263
264       <li>Une facilité de prototypage des modules Apache httpd, car la paire
265       DSO/<code class="program"><a href="./programs/apxs.html">apxs</a></code> vous permet d'une part de travailler en
266       dehors de l'arborescence des sources d'Apache httpd, et d'autre part de n'avoir
267       besoin que de la commande <code>apxs -i</code>
268       suivie d'un <code>apachectl restart</code> pour introduire une nouvelle
269       version de votre module fraîchement développé dans le serveur HTTP Apache
270       en cours d'exécution.</li>
271     </ul>
272
273     <p>Inconvénients des DSO :</p>
274
275     <ul>
276       <li>Le serveur est environ 20 % plus lent au démarrage
277       à cause des résolutions de symboles supplémentaires que le chargeur
278       Unix doit effectuer.</li>
279
280       <li>Le serveur est environ 5 % plus lent à l'exécution
281       sur certaines plates-formes, car le code indépendant de la position (PIC)
282       nécessite parfois des manipulations compliquées en assembleur pour
283       l'adressage relatif qui ne sont pas toujours aussi rapides que celles
284       que permet l'adressage absolu.</li>
285
286       <li>Comme les modules DSO ne peuvent pas être liés avec d'autres
287       bibliothèques basées sur DSO (<code>ld -lfoo</code>) sur toutes les
288       plates-formes
289       (par exemple, les plates-formes basées sur a.out ne fournissent en
290       général pas cette fonctionnalité alors que les plates-formes basées sur
291       ELF le font), vous ne pouvez pas utiliser le mécanisme DSO pour tous les
292       types de modules. Ou en d'autres termes, les modules compilés comme
293       fichiers DSO sont contraints de n'utiliser que les symboles du coeur
294       d'Apache httpd, de la bibliothèque C
295       (<code>libc</code>) et toutes autres bibliothèques statiques ou
296       dynamiques utilisées par le coeur d'Apache httpd, ou d'archives statiques
297       (<code>libfoo.a</code>) contenant du code indépendant de la
298       position (PIC).
299       Il y a deux solutions pour utiliser un autre type de code : soit le
300       coeur d'Apache httpd contient déjà lui-même une référence au code, soit vous
301       chargez le code vous-même via <code>dlopen()</code>.</li>
302     </ul>
303
304 </div></div>
305 <div class="bottomlang">
306 <p><span>Langues Disponibles: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
307 <a href="./fr/dso.html" title="Français">&nbsp;fr&nbsp;</a> |
308 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
309 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
310 <a href="./tr/dso.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
311 </div><div id="footer">
312 <p class="apache">Copyright 2011 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
313 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
314 </body></html>