]> granicus.if.org Git - apache/blob - docs/manual/dso.xml.tr
Documentation rebuild
[apache] / docs / manual / dso.xml.tr
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
4 <!-- English Revision: 1199481 -->
5 <!-- =====================================================
6  Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
7    Reviewed by: Yücel Haluk Bugüner <haluk belgeler.org>
8 ========================================================== -->
9
10 <!--
11  Licensed to the Apache Software Foundation (ASF) under one or more
12  contributor license agreements.  See the NOTICE file distributed with
13  this work for additional information regarding copyright ownership.
14  The ASF licenses this file to You under the Apache License, Version 2.0
15  (the "License"); you may not use this file except in compliance with
16  the License.  You may obtain a copy of the License at
17
18      http://www.apache.org/licenses/LICENSE-2.0
19
20  Unless required by applicable law or agreed to in writing, software
21  distributed under the License is distributed on an "AS IS" BASIS,
22  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23  See the License for the specific language governing permissions and
24  limitations under the License.
25 -->
26
27 <manualpage metafile="dso.xml.meta">
28
29   <title>Devingen Paylaşımlı Nesne Desteği</title>
30
31   <summary>
32     <p>Apache HTTP Sunucusu modüler bir program olup, yönetici sadece bir
33       grup modül seçerek sunucuya işlevsellik ekleyebilir. Modüller, Devingen
34       Paylaşımlı Nesneler (DSO - Dynamic Shared Object) halinde
35       <program>httpd</program> programından ayrı olarak derlenir. DSO modülleri
36       sunucunun derlenmesi sırasında derlenebileceği gibi ayrı olarak derlenip
37       daha sonra Apache Eklenti Aracı (Apache Extension Tool)
38       <program>apxs</program> programı kullanılarak da sunucuya eklenebilir.</p>
39
40     <p>Bu belgede DSO modüllerinin kullanımının yanında teorisine de
41       değinilecektir.</p>
42   </summary>
43
44
45 <section id="implementation"><title>Gerçeklenim</title>
46
47 <related>
48   <modulelist>
49     <module>mod_so</module>
50   </modulelist>
51   <directivelist>
52     <directive module="mod_so">LoadModule</directive>
53   </directivelist>
54 </related>
55
56     <p>Apache httpd modüllerini yüklemek için DSO desteği, Apache httpd
57       çekirdeğine durağan olarak ilintilenerek derlenmiş olan
58       <module>mod_so</module> adında bir modül tarafından sağlanır.
59       <module>core</module> modülünden  başka, bir DSO modülü olamayan tek modül
60       <module>mod_so</module> modülüdür. Apache ile dağıtılan hemen hemen tüm
61       diğer Apache modülleri bir DSO modülüne yerleştirilebilir. Derlenmiş
62       modüller <code>mod_filanca.so</code> biçeminde birer DSO ismi alırlar ve
63       her biri istenirse <code>httpd.conf</code> dosyasında
64       <module>mod_so</module> modülünün <directive module="mod_so"
65       >LoadModule</directive> yönergesiyle belirtilerek sunucu başlatılırken
66       veya yeniden başlatılırken sunucuya yüklenebilir.</p>
67
68     <p><a href="install.html">Kurulum belgesinde</a> açıklandığı gibi, her DSO
69       modülü <program>configure</program> programının
70       <code>--enable-mods-static</code> seçeneği ile devredışı bırakılabilir.</p>
71
72     <p>Apache httpd modülleri için (özellikle üçüncü parti modüller için) DSO
73       dosyası üretimini kolaylaştırmak amacıyla <program>apxs</program>
74       (<dfn>APache eXtenSion</dfn>) adında yeni bir destek programı
75       kullanılmaktadır. Bu program Apache httpd modüllerini Apache httpd kaynak
76       ağacından ayrı olarak derlemek için kullanılabilir. Fikir basittir: Apache
77       HTTP Sunucusu derlenirken DSO dosyalarını derlemek için platforma bağımlı
78       derleyici ve ilintileyici seçenekleri <program>apxs</program>
79       programının içine konur ve <code>make install</code> ile kurulum sırasında
80       Apache httpd C başlık dosyaları da kurulur. Böylece
81       kullanıcı Apache httpd dağıtımının kaynak ağacına ihtiyaç duymadan ve
82       platforma bağımlı derleyici ve ilintileyici seçeneklerini bilmek zorunda
83       kalmadan istediği Apache httpd modülünü <program>apxs</program>
84       programını kullanarak derleyebilir.</p>
85 </section>
86
87 <section id="usage"><title>Kullanım Özeti</title>
88
89     <p>Apache HTTP Sunucusu 2.x’in DSO özelliklerine bir giriş olarak burada
90       kısaca bir bilgi vermekle yetinilecektir:</p>
91
92     <ol>
93       <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
94         <em>özgün</em> Apache htpd modülünü <code>mod_filanca.so</code> isminde
95         bir  DSO modülü olarak derlemek ve kurmak için şöyle yapılır:</p>
96
97 <example>
98   $ ./configure --prefix=/kurulum/yeri --enable-filanca<br />
99   $ make install
100 </example>
101       </li>
102
103       <li><p>Apache HTTP Sunucusunu tüm modüller etkin olarak
104         derleyebilirsiniz. Fakat sunucunun başlatılması sırasında sadece temel
105         modüller yüklenir.  Daha sonra <code>httpd.conf</code> içindeki
106         <directive module="mod_so">LoadModule</directive> yönergelerini etkin
107         veya etkisiz hale getirerek yüklenecek modülleri
108         değiştirebilirsiniz.</p>
109
110 <example>
111 $ ./configure --enable-mods-shared=all<br />
112 $ make install
113 </example>
114       </li>
115
116       <li><p>Bazı modüller sadece geliştiriciler içindir ve bunlar tüm
117         modüllerin derlenmesini (<em>all</em>) seçseniz bile derlenmeyecektir.
118         Geliştirici modülleri dehil tüm modülleri derlemek isterseniz
119         <em>reallyall</em> kullanınız. Ek olarak, derlenmiş modüller için
120         kullanılan <directive module="mod_so">LoadModule</directive>
121         yönergelerinin tamamını <code>--enable-load-all-modules</code> derleme
122         seçeneği ile etkin kılabilirsiniz.</p>
123
124 <example>
125 $ ./configure --enable-mods-shared=reallyall --enable-load-all-modules<br />
126 $ make install
127 </example>
128       </li>
129
130       <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
131         <em>üçüncü parti</em> Apache httpd modülü <code>mod_filanca.so</code>
132         isminde bir DSO modülü olarak Apache httpd kaynak ağacının dışında
133         <program>apxs</program> kullanarak derlemek ve kurmak için şöyle
134         yapılır:</p>
135
136 <example>
137 $ cd /bir/kurulum/yeri<br />
138 $ apxs -c mod_filanca.c<br />
139 $ apxs -aci filanca mod_filanca.la
140 </example>
141       </li>
142     </ol>
143
144     <p>Tüm durumlarda derlenen paylaşımlı modülü Apache httpd’nin etkin
145       kılabilmesi  için <code>httpd.conf</code> dosyasında o modül için bir
146       <directive module="mod_so">LoadModule</directive> yönergesi
147       bulunmalıdır.</p>
148
149     <p>Ayrıntılı bilgi için <a href="programs/apxs.html">apxs belgelerine</a>
150       bakınız.</p>
151 </section>
152
153 <section id="background"><title>Artalan Bilgisi</title>
154
155     <p>Günümüzün Unix türevlerinde var olan bir mekanizma sayesinde
156       çalıştırılabilir bir programın adres uzayına çalışma anında yüklenmek
157       veya ilintilenmek üzere <em>Devingen Paylaşımlı Nesneler</em> (DSO -
158       Dynamic Shared Object) adı verilen, özel bir biçem kullanarak kodlanmış
159       program parçaları oluşturulabilir.</p>
160
161     <p>Bu yükleme normalde iki yolla yapılabilir: Ya çalıştırılabilir
162       programın başlatılması sırasında yüklenen <code>ld.so</code> adlı bir
163       sistem programınının devingen olarak yüklenmesi ile ya da
164       çalıştırılabilir programın içinden Unix yükleyicisine programsal sistem
165       arayüzü sağlayan <code>dlopen()/dlsym()</code> sistem çağrılarının elle
166       yapılması suretiyle.</p>
167
168     <p>İlk yöntemde kullanılan DSO’lara genelde <em>paylaşımlı
169       kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir ve
170       bunların dosyaları <code>libfilanca.so</code> veya
171       <code>libfilanca.so.1.2</code> biçiminde isimlendirilir. Belli bir
172       sistem dizininde (normalde <code>/usr/lib</code>) bulunurlar ve derleme
173       sırasında ilintileyici komutuna <code>-lfilanca</code> şeklinde
174       belirtilerek çalıştırılabilir programla ilintilenirler. Doğrudan
175       çalıştırılabilir koda eklenen bu kodlar Unix yükleyicisinin programın
176       başlatılması sırasında kütüphaneyi <code>/usr/lib</code> altında
177       <code>libfilanca.so</code> adıyla bulabilmesini sağlar. Kütüphanelerin
178       aranacağı yerler ya <code>-R</code> gibi bir ilintileyici seçeneği ile
179       koda eklenir ya da arama yolları <code>LD_LIBRARY_PATH</code> ortam
180       değişkeni aracılığıyla yapılandırılır. Böylece çalıştırılabilir
181       programda henüz çözümlenmemiş simgeler DSO içinde bulunarak
182       çözümlenebilir.</p>
183
184     <p>Çalıştırılabilir program içindeki simgelere normalde DSO içinden
185       atıfta bulunulmaz (genel kod kütüphanesinin başka programlarca da
186       kullanılması nedeniyle). Bu bakımdan DSO tarafında böyle bir çözümleme
187       yapılmaz. Çalıştırılabilir program da DSO’daki simgeleri kendisi
188       çözümlemeye uğraşmaz, bu işlemlerden tamamen Unix yükleyicisi
189       (<code>ld.so</code>) sorumludur. (Aslında, <code>ld.so</code>’yu
190       çağıracak kod, her çalıştırılabilir programın içine ilintilenmiş
191       (durağan değil) başlatma kodunun bir parçasıdır.) Programlar tarafından
192       ortaklaşa kullanılan kütüphanelerin devingen olarak yüklenmesinin sebebi
193       basittir: Kütüphane kodu <code>libc.so</code> gibi bir sistem
194       kütüphanesine bir kere kaydedilip disk alanından yer kazanılmış
195       olur.</p>
196
197     <p>İkinci yöntemde kullanılan DSO’lara yine <em>paylaşımlı
198       kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir fakat
199       bunların dosyaları geçerli kabule göre <code>filanca.so</code> gibi
200       isimlendirilse de genelde keyfi olarak seçilen bir dosya uzantısı
201       kullanılarak isimlendirilirler. Bu dosyalar genellikle programa özel bir
202       dizinde dururlar ve bu dosyaları kullanacak olan çalıştırılabilir
203       programla aralarında özdevimli olarak bağ kurulmamıştır. Bunun yerine,
204       çalıştırılabilir program DSO’yu çalışma anında <code>dlopen()</code>
205       sayesinde kendi adres uzayına ekler. Çalıştırılabilir program için
206       DSO’daki simgeler bu sırada çözümlenmez. Özdevimli olarak devreye
207       giren Unix yükleyicisi, (varsa) artakalan simgeleri, çalıştırılabilir
208       ihraç edilen simge kümelerini (ve özellikle her yerde hazır ve nazır
209       <code>libc.so</code> içindeki tüm simgeleri) kullanarak çözümler. Bu
210       yolla DSO, çalıştırılabilir programın simge kümesi bilgilerini sanki
211       kendisine baştan durağan olarak ilintilenmiş gibi ulaşabilir.</p>
212
213     <p>Son olarak, DSO’nun programlama arayüzünün getirilerinden yararlanmak
214       amacıyla çalıştırılabilir program, daha sonra dağıtım tabloları vb.
215       yerlerde kullanmak üzere <code>dlsym()</code> üzerinden DSO’daki belli
216       simgeleri çözümlemek zorundadır. Başka bir deyişle: Çalıştırılabilir
217       program ihtiyaç duyduğu her simgeyi kullanmak için kendisi çözümleme
218       yapmak zorundadır. Böyle bir mekanizmanın getirisi, programın isteğe
219       bağlı parçalarının gerekli olana kadar yüklenmemesidir (böylece daha az
220       bellek alanı kullanılır). Gerektiği zaman programın işlevselliğini
221       arttırmak amacıyla bu parçalar devingen olarak programa
222       yüklenebilir.</p>
223
224     <p>DSO mekanizmasının bu basit gibi görünen işleyişinde zorluk içeren bir
225       adım şudur (başkaları da olabilir): Bir programın işlevselliğini
226       genişletmek için DSO kullanılırken (ikinci yöntem) çalıştırılabilir
227       programdan DSO için simgelerin çözümlenmesi.  Zorluğun sebebi,
228       "tersine çözümleme" yapılmasıdır; çalıştırılabilir programın simge
229       kümesindeki DSO simgeleri kütüphane tasarımına aykırı bir şekilde
230       çözümlenir ve bu uygulama tüm platformlarda hazır olarak
231       desteklenmediği gibi standartlaşmış da değildir. Geçer uygulamada
232       çalıştırılabilir programın evrensel simgeleri çoğunlukla yeniden dışa
233       verilmez ve bu bakımdan bir DSO içinde kullanılmaları uygun değildir.
234       Esas sorun, çalıştırılabilir bir programın işlevselliğini çalışma
235       anında genişletmek için DSO kullanımı sırasında ilintileyicinin tüm
236       evrensel simgeleri dışa vermesini zorlamanın bir yolunu bulmaktır.</p>
237
238     <p>Paylaşımlı kütüphane yaklaşımı bu bakımdan türünün tek örneğidir,
239       çünkü DSO mekanizması özellikle bunun için tasarlanmıştır, dolayısıyla
240       işletim sisteminin sağladığı hemen hemen tüm kütüphaneler için
241       kullanılabilir.</p>
242 </section>
243
244 <section id="advantages"><title>Getiriler ve Götürüler</title>
245
246     <p>Yukarıda bahsedilen DSO’ya dayalı özelliklerin getirileri
247       şunlardır:</p>
248
249     <ul>
250       <li>Sunucu paketi çalışma anında daha esnektir çünkü, sunucuyu
251         oluşturan parçalar derleme sırasında <program>configure</program>
252         seçenekleriyle birleştirilmek yerine <code>httpd.conf</code> içinde
253         <directive module="mod_so">LoadModule</directive> yönergeleri
254         sayesinde çalışma anında birleştirilebilmektedir. Bu yolla, örneğin
255         tek bir Apache kurulumuyla birbirinden farklı yapılandırmalara sahip
256         çok sayıda sunucu çalıştırmak mümkündür. (standart veya SSL sürümü;
257         basitleştirilmiş veya devingen sürümü [mod_perl, PHP3], vs.)</li>
258
259       <li>Sunucu paketi kurulumdan sonra bile üçüncü parti modüllerle kolayca
260         genişletilebilir. Bu özellikle, bir Apache temel paketinin yanında
261         PHP, mod_perl, mod_security gibi ek paketler oluşturan paket
262         dağıtıcılarına büyük yarar sağlar.</li>
263
264       <li>Yeni Apache httpd modülleri için daha kolay prototip
265         geliştirilebilir: Modül kaynak kodunu DSO/<program>apxs</program> çifti
266         sayesinde Apache httpd kaynak ağacının dışında derleyip modülün yeni
267         bir sürümünü bir <code>apxs -i</code> komutunun ardından
268         <code>apachectl restart</code> yaparak çalışan bir Apache HTTP
269         Sunucusunda denemek daha kolay hale getirilmiştir.</li>
270     </ul>
271
272     <p>DSO kullanımının götürüleri ise şunlardır:</p>
273
274     <ul>
275       <li>İlk yüklemede %20 yavaşlama: Unix yükleyicisi simgeleri çözümlemek
276         zorunda olduğundan sunucu ilk başlatılırken yaklaşık %20 daha yavaş
277         faaliyete geçer.</li>
278
279       <li>Çalışma sırasında % 5 yavaşlama: Konumdan bağımsız kodun (PIC -
280         Position Independent Code) göreli adresleme için karmaşık oyunlara
281         girmesi ve bunun mutlak adresleme kadar hızlı olmaması nedeniyle
282         sunucu bazı platformlarda çalışma anında yaklaşık %5 daha yavaş
283         çalışabilir.</li>
284
285       <li>DSO'nun tüm modüller için uygun olmaması: DSO modülleri bazı
286         platformlarda diğer DSO temelli kütüphanelerle ilintilenemediğinden
287         (<code>ld -lfilanca</code>) DSO mekanizmasını tüm modül türleri için
288         kullanamazsınız (örneğin a.out temelli platformlar bu işlevselliği
289         ELF temelli platformlar kadar iyi sağlamaz). Başka bir deyişle, DSO
290         dosyaları olarak derlenmiş modüllerin kullanabileceği simgeler ya
291         Apache httpd temel kodunda vardır ya Apache httpd temel kodunun
292         kullandığı C kütüphanesinde (<code>libc</code>) ve diğer durağan ve
293         devingen kütüphanelerde vardır ya da konumdan bağımsız kodu içeren
294         durağan kütüphane arşivlerinde (<code>libfilanca.a</code>)
295         vardır. Diğer modülleri kullanmak için tek şansınız ya Apache httpd
296         çekirdeğinin modüle bir atıf içermesini sağlamak ya da modül kodunu
297         <code>dlopen()</code> vasıtasıyla yüklemektir.</li>
298     </ul>
299
300 </section>
301
302 </manualpage>