ComarMimarisi.lyx 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  1. #LyX 1.3 created this file. For more info see http://www.lyx.org/
  2. \lyxformat 221
  3. \textclass article
  4. \begin_preamble
  5. \usepackage{hyperref}
  6. \tolerance 10000
  7. \end_preamble
  8. \language turkish
  9. \inputencoding auto
  10. \fontscheme pslatex
  11. \graphics default
  12. \paperfontsize default
  13. \spacing single
  14. \papersize Default
  15. \paperpackage a4
  16. \use_geometry 0
  17. \use_amsmath 0
  18. \use_natbib 0
  19. \use_numerical_citations 0
  20. \paperorientation portrait
  21. \secnumdepth 3
  22. \tocdepth 3
  23. \paragraph_separation skip
  24. \defskip medskip
  25. \quotes_language english
  26. \quotes_times 2
  27. \papercolumns 1
  28. \papersides 1
  29. \paperpagestyle default
  30. \layout Title
  31. ÇOMAR Mimari Belgesi
  32. \layout Author
  33. Gürer Özen (gurer @ uludag.org.tr)
  34. \layout Standard
  35. \pagebreak_top
  36. \begin_inset LatexCommand \tableofcontents{}
  37. \end_inset
  38. \layout Section
  39. \pagebreak_top
  40. Giriş
  41. \layout Standard
  42. Bu belge, Ulusal Dağıtım'ın yapılandırma yönetim sistemi olan ÇOMAR'ın,
  43. ne amaçla geliştirildiğini, hangi sorunlara çözüm getirdiğini, yapısını
  44. ve bileşenlerini anlatır.
  45. Hedef kitlesi, ÇOMAR'ı yakından tanımak isteyen kullanıcılar ve sistem
  46. yöneticileridir.
  47. Bilişim okuryazarı seviyesine göre yazılmış olmakla birlikte, bazı tartışmaları
  48. takip edebilmek için, bir işletim sisteminin bileşenleri, ve uygulamaların
  49. nasıl ayarlandığı gibi sistem yönetimi konularında bilgi sahibi olmak gerekebil
  50. ir.
  51. \layout Section
  52. \pagebreak_top
  53. Sorun
  54. \layout Standard
  55. Çeşitli uygulamalar bir sistem içinde bir araya getirildiklerinde, birbirleriyle
  56. uyumlu çalışabilmeleri için ayarlanmaları gerekmektedir.
  57. Kurulan bir uygulamanın masaüstü menüsüne eklenmesi, açabildiği dosya tiplerini
  58. sisteme bildirmesi, yeni kurulan bir spam (istenmeyen eposta) filtreleyicinin
  59. mevcut eposta sunucusuna bağlanması gibi çok sayıda entegrasyon işlemi
  60. bulunmaktadır.
  61. Kullanıcı, bu ayarları yapabilmek için, kendi yapmak istediği işin dışındaki
  62. teknik konularda bilgi kazanmak zorunda kalmakta ve zaman kaybetmektedir.
  63. \layout Subsection
  64. Belgeler
  65. \layout Standard
  66. Özgür yazılım camiası, bu işleri kolaylaştırmak için
  67. \begin_inset Quotes eld
  68. \end_inset
  69. nasıl
  70. \begin_inset Quotes erd
  71. \end_inset
  72. (ing.
  73. howto) belgeleri adıyla çeşitli belgeler hazırlamıştır.
  74. Bunlar bir işi yapabilmek için neler yapılması gerektiğini adım adım anlatan
  75. kısa belgelerdir.
  76. Kullanıcıların belge okumak istememeleri ve belgelerin kısıtlı sayıda senaryoyu
  77. kapsaması yüzünden faydalı olamamaktadırlar.
  78. \layout Standard
  79. Burda aklımıza, madem bir işi adım adım belgeleyebiliyoruz, bunu bir program
  80. haline getirip otomatik olarak yapılmasını sağlayamaz mıyız? sorusu gelmektedir.
  81. Bu yapılabilirse, kullanıcının zaman tasarrufu yanında, bu belgelerin çeşitli
  82. dillere tercüme edilmesi gibi işler de gereksiz hale gelecektir.
  83. \layout Subsection
  84. Diğer Linux Dağıtımları
  85. \layout Standard
  86. Linux dağıtımları gelişme süreçleri içerisinde bu tür entegrasyon problemleri
  87. ile karşılaştıkça bunlara ayrı ayrı çözümler üretip kendi sistemlerine
  88. (özellikle paket yönetici yazılımlarının içine) dahil etmişlerdir.
  89. Bu çözümler, kurulu uygulamalar (menü), fontlar, açılış işlemleri (initscripts)
  90. gibi tek tek alt sistemler bazındadır.
  91. \layout Standard
  92. Genellikle, uygulama paketleri, dosya sistemi üzerinde sabit bir dizine,
  93. söz konusu alt sisteme neler sağladıklarını kaydetmekte; bu alt sistemi
  94. kullanacak uygulamalar ise, buraya önceden belirlenmiş biçimde kaydedilen
  95. dosyaları tarayarak, sağlanan hizmetleri bulmaktadır.
  96. Uygulamaların entegrasyonu için, ya uygulamalar buradaki standartları bilecek
  97. biçimde değiştirilmekte, ya da gerekli çevrimi yapacak üçüncü bir yönetici
  98. uygulama araya sokulmaktadır.
  99. Kayıt ve çevrim işlemleri için özel veri biçimleri, kabuk, Perl ya da Python
  100. betikleri, bazen de bunların bir karışımı kullanılmaktadır.
  101. \layout Standard
  102. Bir de uygulama kurulur, kaldırılır ve güncellenirken çalışan özel betikler
  103. bulunmaktadır.
  104. Bunlarla güncelleme sırasında eski ayarların taşınması gibi işler yapılmaktadır.
  105. Bazı sistemler (örneğin Debian'ın debconf'u) kurulum anında bu betiklerin
  106. kullanıcıya soru sorabilmeleri ve uygulamayı cevaplara göre ayarlamalarını
  107. sağlamaktadır.
  108. \layout Standard
  109. Burda gördüğümüz noksanlıklar:
  110. \layout Itemize
  111. Her sorun için ayrı bir çözüm kullanılması benzer işlerin tekrar tekrar
  112. yapılmasına yol açmaktadır.
  113. Genel bir ayar profili oluşturmayı ve yönetmeyi zor kılmaktadır.
  114. Birbirleriyle ilişkileri eksik kaldığı için yeterli entegrasyonu sağlayamamakta
  115. dır.
  116. \layout Itemize
  117. Yapılandırma ile paket kurulumu iç içe geçmiştir.
  118. Bir paket (özellikle bir sunucu uygulaması) kurulduğunda çalışacak şekilde
  119. yapılandırılmasının yanlış olduğunu, uygulamanın ancak kullanıcı bir emir
  120. verdiğinde, verilen emre göre yapılandırılmasının anlamlı olduğunu düşünüyoruz.
  121. Yapılandırma, kurma ve kaldırma ile ilgisi olmayan ve uygulama sistemde
  122. durduğu sürece her an ihtiyaç duyulabilecek bir iştir.
  123. \layout Itemize
  124. Bir sürü veri biçimi ve dil kullanılması, öğrenme ve hata düzeltme süreçlerini
  125. çok güçleştirmektedir.
  126. \layout Itemize
  127. Bir sorun çıktığında sistemi çalışabilir bir konuma getirmek, uygulamalar
  128. güncellenirken kullanıcı ayarlarını ve sistemin tutarlılığını korumak çok
  129. zor olabilmektedir.
  130. \layout Subsection
  131. Diğer İşletim Sistemleri
  132. \layout Standard
  133. Windows, OS/2, MacOS X gibi işletim sistemlerinde, sistemin parçaları ve
  134. kullanıcının çalışma ortamını oluşturan uygulamalar genellikle tek bir
  135. merkezden çıktıkları için, uyum sorunları işletim sisteminin çağrıları
  136. (API si) üzerinden çözülmektedir.
  137. Ayarları toplu halde tutan merkezi bir kütük ile birlikte; çokluortam,
  138. ağ protokolü, donanım yöneticisi gibi parçalar için parçaların yerleşebileceği
  139. modül yapıları bulunmaktadır.
  140. \layout Standard
  141. Bu yaklaşımda şu noksanlıkları görüyoruz:
  142. \layout Itemize
  143. Uygulamaların ayarlarına merkezi erişim sunulması, tek başına istenen faydayı
  144. getirmemektedir.
  145. Bir genel model olmadığı için, bu bilgileri kullanmak isteyen kullanıcı
  146. yada diğer uygulamaların, bilgiyi sunan uygulama ve ayarları hakkında detaylı
  147. bilgiye sahip olması sorunu hala ortadadır.
  148. \layout Itemize
  149. Uygulamalar ve yönetim sistemi arasında API düzeyinde bir ilişki, iki grubu
  150. iç içe geçirip direkt bağlantı sağlayacağı için, parçaların bağımsızlığını
  151. azaltacaktır.
  152. Bu da, ayrı ayrı parçaların geliştiricilerinin, adam/ay modelinde bağımsız
  153. çalışmak yerine, bir araya gelip karşılıklı iletişim ve senkronizasyon
  154. ile çalışmasına, dolayısıyla geliştirme işlerinin ölçeklenebilirliğinin
  155. azalmasına yol açmaktadır.
  156. \layout Itemize
  157. Parçaların farklı ellerden çıktıkları ve alternatiflerin bol olduğu özgür
  158. yazılım modeline uymamaktadır.
  159. \layout Itemize
  160. Dağıtımımıza girecek uygulamaları yeni API leri kullanacak şekilde değiştir\SpecialChar \-
  161. mek,
  162. uy\SpecialChar \-
  163. gu\SpecialChar \-
  164. la\SpecialChar \-
  165. ma kodu üzerinde büyük değişiklikler yapmayı, ve yapılan değişikliklerin
  166. yeni sorunlara yol açmadığını kapsamlı olarak analiz etmeyi gerektirmektedir.
  167. Bu da büyük zaman ve emek harcamasına yol açacaktır.
  168. Kodunu değiştirme olanağı olmayan uygulamaların sisteme entegre edilebilmesini
  169. önleyecektir.
  170. \layout Itemize
  171. Bu API lerin her uygulamadan kullanılabilmesi ya CORBA, COM gibi karmaşık
  172. çözümler ya da çok sayıda
  173. \begin_inset Quotes eld
  174. \end_inset
  175. wrapper
  176. \begin_inset Quotes erd
  177. \end_inset
  178. gerektirmektedir.
  179. \layout Itemize
  180. Bir alt sistemin yetersiz kaldığı görülüp yeni bir alt sistem yapısı geliştirild
  181. iğinde, API değişikliğine yol açmamak için API üzerindeki değer ve çağrılara
  182. kapsamları dışında anlamlar ve görevler yüklenmekte, ve API yi öğrenmek
  183. ve kullanmak isteyenlerin işi çok zorlaşmaktadır.
  184. Ya da API değişikliği yapılmakta, ve varolan uygulamaların yeni API yi
  185. taşınması, eski ve üçüncü parti uygulamalar için uyumluluk katmanları hazırlanm
  186. ası gibi fazladan sorunlar çıkmaktadır.
  187. \layout Subsection
  188. Özel Yönetim Uygulamaları
  189. \layout Standard
  190. Linux'un masaüstü ve iş dünyasında kullanımının artmasıyla, bir takım genel
  191. yapılandırma ve yönetim araçları da geliştirilmiştir.
  192. YaST, LinuxConf, WebMin gibi bu araçlar kullanıcıya üst seviye bir arabirim
  193. sunup, kullanıcının burada yaptığı seçimleri uygulamaların alt seviye ayarların
  194. a taşımaktadır.
  195. İki seviye arasında geçiş yapabilmek için gereken bilgiler araçların içinde
  196. bir dizi kural olarak kodlanmıştır.
  197. \layout Standard
  198. Bundan başka, bilgisayar ağlarının yaygınlaşmasıyla birlikte, birden fazla
  199. bilgisayarın merkezi yönetimini yapabilecek IBM Tivoli, HP OpenView, CIM,
  200. SNMP, OSI CMIP gibi ürün ve çerçeveler ortaya çıkmıştır.
  201. Ayrıntılarda farkları olmakla birlikte, genel mimarileri, yönetilecek bilgisaya
  202. rda bulunacak ajanlar, yönetim bilgisayarında bir yönetici yazılım, bunlar
  203. arasında bir iletişim protokolü ve yönetilecek görev ve ayarları belirten
  204. bilgi modellerinden oluşmaktadır.
  205. Yalnızca yapılandırma ile sınırlı kalmayıp, hata bulma, performans ve güvenlik
  206. değerlendirmeleri, kullanım hesaplama gibi işleri de yapmaktadırlar.
  207. \layout Standard
  208. Bu araçlarda gördüğümüz yanlışlar:
  209. \layout Itemize
  210. Üst düzey bir model değil, alt düzey ayarlar yöneticiye sunulmaktadır.
  211. \layout Itemize
  212. Yapılandırma problemlerini görev tabanlı değil, uygulama tabanlı ele almaktadırl
  213. ar.
  214. \layout Itemize
  215. Uygulamalara görevi yaptırmak için gereken bilgi uygulamalarda değil merkezde
  216. (yönetici yazılımın içinde) bulunmaktadır.
  217. Bu bilgiler, bir arada oldukları ve birden fazla parçaya ait detayları
  218. içerdikleri için, öngörülmeyen durumlarda hata ortaya çıkarma ihtimalleri
  219. artmaktadır.
  220. \layout Section
  221. \pagebreak_top
  222. Gerekler
  223. \layout Standard
  224. Bir yapılandırma sisteminin iki müşterisi olacaktır.
  225. Biri sistemin çalışacağı bilgisayardaki kullanıcılar, diğeri ise bu sisteme
  226. paket veya yönetim araçları yapacak olan geliştiricilerdir.
  227. \layout Subsection
  228. Kullanıcı Gerekleri
  229. \layout Enumerate
  230. Yapılandırma sorunları mümkün olduğunda otomatik biçimde çözülmeli, kullanıcıdan
  231. ihtiyacı olmayan teknik detayları bilmesi ve ayarlaması istenmemelidir.
  232. \layout Enumerate
  233. Otonom olarak çalışabilmeli, gerektiğinde gömülü sistemlerde de kullanılabilmesi
  234. için grafik arayüzlerden bağımsız olmalıdır.
  235. \layout Enumerate
  236. Görevler koşutzamanlı (concurrent) çalışmalı, biri diğerini yavaşlatmamalıdır.
  237. \layout Enumerate
  238. Kullanıcının karar vermesi gereken durumlar kullanıcıya görev tabanlı bir
  239. yaklaşımla ve bilişim okuryazarına yönelik terimlerle sunulmalıdır.
  240. Görev yerine uygulama bazında ayarların sunulması, soruların teknik detaylara
  241. ait terimlerle sorulması istenmemektedir.
  242. \layout Enumerate
  243. Otomatik yapılacak yapılandırmalar veya kullanıcının yapılandırma istekleri,
  244. sistemi asla iç tutarlılığını kaybetmiş hale getirmemelidir.
  245. Başka bir sebepten bu duruma gelen sistemi tekrar tutarlı hale getirebilmek
  246. mümkün olmalıdır.
  247. \layout Enumerate
  248. Kullanıcının istekleri farklı adlar altında birer profil olarak gruplanabilmeli,
  249. sistem bir profilden diğerine rahatça geçebildiği gibi, gerektiğinde bu
  250. profiller bir sistemde kaydedilip, diğer bir sisteme taşınabilmelidir.
  251. \layout Enumerate
  252. Sistem yöneticisi diğer kullanıcılara belirli kriterlere göre yapılandırma
  253. kararı verme yetkisi dağıtabilmelidir.
  254. Böylece kullanıcıların gerektiğinde
  255. \begin_inset Quotes eld
  256. \end_inset
  257. kök
  258. \begin_inset Quotes erd
  259. \end_inset
  260. (ing.
  261. root) kullanıcı olmadan da sistemin belirli bir bölümünde (örneğin ağ iletişimi
  262. , paket kurulumu, ya da donanım) yapılandırma ve yönetim yapabilmesi mümkün
  263. olacak, kök kullanıcıya olan bağlılık ortadan kaldırılabilecektir.
  264. \layout Subsection
  265. Geliştirici Gerekleri
  266. \layout Enumerate
  267. Her yapılandırma problemi için aynı ortak alt yapının kullanılması, sistemin
  268. bir bütün olarak modellenmesi istenmektedir.
  269. Bu geliştirme işlerini kolaylaştıracaktır.
  270. \layout Enumerate
  271. Uygulamalar, üzerlerinde büyük değişiklikler yapılarak değil, gerekli yapılandır
  272. ma bilgisini taşıyan ufak aracılar eklenerek sisteme entegre edilmelidir.
  273. \layout Enumerate
  274. Her bir uygulama pakedinin yapılandırma bilgisi tamamen kendi içinde olmalı,
  275. ve tek bir dil ve veri biçimi ile tanımlanmalıdır.
  276. \layout Enumerate
  277. Yapılandırma sistemi, ilerde ortaya çıkabilecek değişik özellikte uygulamaların
  278. entegrasyonunda sorun çıkartmayacak esnek bir görev modeline sahip olmalıdır.
  279. \layout Enumerate
  280. Yapılandırma sistemi ile kurulacak iletişimde dil veya veri biçimi bağımlılığı
  281. problemi olmamalıdır.
  282. \layout Enumerate
  283. Sistem, kendi ile iletişim kuran uygulamalara, sürekli bir sorma gereksinimi
  284. bırakmadan, bir takım olayların oluştuğunu haber verebilmelidir.
  285. \layout Section
  286. \pagebreak_top
  287. ÇOMAR
  288. \layout Standard
  289. Bu gerekleri sağlayacak bir sistem oluşturabilmek için ilk adım, yapılandırma
  290. sorunlarının tarif edilebileceği bir model oluşturmaktır.
  291. Genel olarak iki tip sorun vardır.
  292. \layout Standard
  293. Birinci tip sorunlar iki uygulamanın birbiriyle uyumlu çalışmasının gerektiği
  294. yerlerde çıkarlar.
  295. Bunları çözebilmek için her uygulamanın,
  296. \layout Enumerate
  297. Diğer uygulamaların bilgilerine erişebilmesini ve kendi bilgilerini diğer
  298. uygulamalara sunabilmesini,
  299. \layout Enumerate
  300. Önceden belirlenmiş görevler içinden neleri yapabildiğini sisteme bildirebilmesi
  301. ni,
  302. \layout Enumerate
  303. Kendi görevleri dışındaki işlere karışmamasını, bunları ilgili uygulamalardan
  304. istemesini,
  305. \layout Enumerate
  306. Bilgileri değiştiğinde, ilgilenen uygulamaları haberdar edebilmesini sağlamak
  307. gerekir.
  308. \layout Standard
  309. Böylece uygulamalar kendilerini birbirlerine göre ayarlayabileceklerdir.
  310. \layout Standard
  311. İkinci tip sorunlar ise tek bir uygulamanın yapılandırılmasında ortaya çıkarlar.
  312. Aynı görevleri yapabilen uygulamalar fonksiyonel bir sınıf oluşturmaktadır.
  313. Değişen şey, her birinin bu görevi yapmak için farklı şekilde ayarlanması
  314. gerekeceğidir.
  315. \layout Standard
  316. Buradan, uygulamaların eş görevleri olan fonksiyonel sınıflar olarak sınıflandır
  317. ılabileceği, ve bu sınıflar ortogonal olarak tasarlandığında, uygulamalar
  318. arası yapılandırma problemlerinin çözümü için gereken şartları sağlayabileceğim
  319. iz sonuçlarına varıyoruz.
  320. \layout Standard
  321. Ortogonal olarak tasarlanmış sınıflardan oluşan kapsayıcı bir sistem modeli
  322. oluşturduktan sonra, karşımıza modelden istenen görevleri uygulamalara
  323. aktarma sorunu çıkmaktadır.
  324. \layout Standard
  325. Uygulamaları bize ait API leri kullanacak biçimde değiştirmek gereklerimize
  326. uygun değildir.
  327. Uygulamaların çalışmalarını yönetecek bilgiler ve ayarlanması gerektiği
  328. düşünülen seçenekler genellikle uygulama yazarları tarafından önceden düşünülüp
  329. , bir takım ayar dosyalarından, komut satırı parametrelerinden, ve benzer
  330. yollarla elde edilip kullanılacak duruma getirilmiştir.
  331. O halde en uygun yol, birer aracı programcık ile modeldeki görevleri, uygulamal
  332. arın kendi ayar ve komutlarına çevirmektir.
  333. \layout Standard
  334. Bu programcıkları bir arada ve düzenli olarak çalıştırabilmek, yapılandırmaları
  335. profiller bazında yönetebilmek, kullanıcılara görevlere erişim yetkisi
  336. verebilmek gibi gerekleri kolayca sağlayabilmek için, bir yönetici servis
  337. programı gerekmektedir.
  338. \layout Standard
  339. Yapılandırma grafik arayüzleri, paket yöneticisi, üst düzey yönetim programları
  340. bir iletişim kanalı aracılığı ile bu yönetici programa bağlanıp, model
  341. üzerindeki görevleri kullanabileceklerdir.
  342. \layout Standard
  343. Toparlarsak, gereksinimlerimizi karşılayabilecek ve diğer benzer sistemlerdeki
  344. sorunlara düşmeyecek bir yapılandırma yönetim çerçevesi için ihtiyacımız
  345. olan bileşenler, bir sistem modeli, uygulamaları bu modele oturtmak için
  346. gerekli aracı programcıklar ve bu programcıkları işletecek bir uygulamadır.
  347. Şimdi bu bileşenlere detaylı olarak bakalım.
  348. \layout Subsection
  349. Sistem Modeli
  350. \layout Standard
  351. Sistem modeli, eş görevleri olan uygulamaların fonksiyonel sınıflarından
  352. oluşmaktadır.
  353. Burdaki sınıf kavramı, nesne tabanlı programlamadaki (OOP) sınıf kavramına
  354. yakınlık taşıdığından, aynı isimlendirmeleri kullanmak öğrenme kolaylığı
  355. sağlayacaktır.
  356. \layout Standard
  357. Buna göre, bir sınıf, bir veya birden fazla uygulamaya ait aracı programcıklar
  358. (nesneler) tarafından sağlanan, ve üzerinde yapılacak görevlere karşılık
  359. gelen metotlar içeren bir tanımlamadır.
  360. \layout Standard
  361. Bu nesnelerin, metotlar dışında OOP anlamında özniteliklere sahip olmaları
  362. gerekli görülmemiştir.
  363. Bunlar işletilirken sistemin doğası gereği birer fonksiyon olarak çağrılacak
  364. ve tek parametreli bir metottan farklı olmayacaklardır.
  365. \layout Standard
  366. Ayrı yapılandırma problemlerine yönelik olduklarından dolayı, sınıflar arasında
  367. herhangi bir kalıtım (inheritance) ilişkisi yoktur.
  368. Bununla birlikte yakın amaçlara yönelik sınıflar (örneğin iletişimle ilgili
  369. sınıflar, donanım tanımayla ilgili sınıflar, vb) bir grup ismi altında
  370. bir araya toplanmıştır.
  371. Grup kavramı, model üzerinde yetki denetimi tanımlarken kolaylık sağladığı
  372. gibi, modeli mantıksal olarak düzenli tuttuğu için tercih edilmiştir.
  373. Bir grup yalnızca, kendine ait sınıfları bir arada tutar, metot ya da nesneleri
  374. yoktur.
  375. \layout Standard
  376. Benzer biçimde, aracı programcıklar arasında kod paylaşımı söz konusu değildir.
  377. Bunların ihtiyaç duyacağı ortak yordamlar, API olarak ÇOMAR tarafından
  378. kendilerine sunulacaktır.
  379. \layout Standard
  380. Böylece her bir nesne diğerinden yalıtılmış olacağından, nesnelerin birbirlerini
  381. n iç detaylarını bilmesi, ya da başka bir nesneye direkt olarak bağlı olması
  382. gibi durumlar oluşmayacaktır.
  383. \layout Standard
  384. Her uygulama sağladığı sınıflara ait nesneleri yanında taşır ve kurulum
  385. sırasında ÇOMAR'a kaydeder.
  386. Bu nesneler model üzerinde ait oldukları sınıflara yerleştirilir.
  387. \layout Subsubsection*
  388. İsimlendirmeler
  389. \layout Standard
  390. Model üzerinde gruplar direkt adlarıyla gösterilir, sınıflar grup adı ile
  391. birlikte,
  392. \layout Quote
  393. \series bold
  394. Grup.Sınıf
  395. \layout Standard
  396. biçiminde gösterilirler, her sınıf mutlaka bir grubun içindedir.
  397. Sınıf metotları ise
  398. \layout Quote
  399. \series bold
  400. Grup.Sınıf.metotAdı
  401. \layout Standard
  402. biçiminde yazılır.
  403. \layout Subsubsection*
  404. Tasarım Kuralları
  405. \layout Standard
  406. Sistem modeli tasarlanırken bazı noktalara dikkat edilmesi gerekmektedir.
  407. \layout Enumerate
  408. Belli uygulamaların değil, bu uygulamaların yaptığı görevlerin yapılandırılması
  409. gözetilmeli, modelin genelliği yitirilmemelidir.
  410. \layout Enumerate
  411. Modelin gelişen teknolojilerle birlikte eskiyip, kullanışsız hale gelmemesi
  412. için, esnek olması gözetilmelidir.
  413. \layout Enumerate
  414. Bununla birlikte, ucu açık, tanımlanmamış bilgi ve görevler modele sokulmamalıdı
  415. r.
  416. \layout Enumerate
  417. Burda ayrımı doğru yapabilmek için, görev ve bilgilerin genel kullanıma
  418. mı, yoksa özel kullanıma mı yönelik olduğu bir kriterdir.
  419. Bir nesnenin bir görevi eğer üst katmandaki her nesne tarafından kullanılabiliy
  420. orsa geneldir, açıkça ve kesin olarak tanımlanmalıdır.
  421. Eğer görevin kullanımı sadece özel bir üst nesne tarafından yapılabiliyorsa,
  422. özeldir ve bunun bilgisi tanımlanmaya çalışılmak yerine, üst nesneye hedef
  423. olarak verilip, kendi aralarındaki ilişkileri kendilerinin kurmaları desteklenm
  424. elidir.
  425. \layout Enumerate
  426. Model, kullanıcı ve görev tabanlı tasarlanmakla birlikte, görev uygulamalarının
  427. ihtiyaçlarına yönelik teknik bilgiler de taşıyacaktır.
  428. Bu durumların modelde açıkça belirtilmesi önemlidir.
  429. \layout Subsection
  430. Aracı Programcıklar (CSL)
  431. \layout Standard
  432. Ne yazık ki basit bir tanımlama dili, görevleri uygulamalara taşımaya yetmemekte
  433. dir.
  434. Çünkü aracının birçok durumda kendi içinde birden fazla işlem yapması,
  435. çeşitli kriterlere göre işi nasıl yaptıracağına karar vermesi, gerektiğinde
  436. uygulamayı yönetebilmek için, genel API lerin sağlayabileceğinin dışında
  437. fonksiyonlar kullanması gerekmektedir.
  438. İterasyon, karar verme, karşılaştırma, aritmetik ve string işlem yapma
  439. özellikleri olan bir dil gereklidir.
  440. \layout Standard
  441. Bu dilin seçimi özgür bırakılabilir, ancak bu durumda yapılandırma sisteminin
  442. bağımlılıkları artmaktadır.
  443. En önemlisi diller arası uyum, hata giderme işlemleri ve öğrenme süreci
  444. çok güçleşmektedir.
  445. Bu nedenle tek bir dil kullanılmalıdır.
  446. \layout Standard
  447. Genel bir programlama dilinde bulunan çoğu modül ve kitaplık (özellikle
  448. grafik arayüze yönelik olanlar) gerekmeyecektir.
  449. Sorun çıkmaması için dilde bu destekler hiç olmamalı ya da kapatılabilmelidir.
  450. İhtiyaç duyulacak API ler, ayar dosyalarını okuyup yazma, programları çalıştırı
  451. p durdurma gibi işlere yönelik olacaktır.
  452. \layout Standard
  453. Bu iş için en uygun dil olarak gördüğümüz Python'u temel aldık.
  454. Python işleticisini (VM), bizim belirlediğimiz bazı modülleri (string,
  455. re, config modülleri, vb...) alıp, bunun üstüne ihtiyacımız olan diğer fonksiyonla
  456. rı bir modül olarak ekleyerek CSL (Çomar Scripting Language) adını verdiğimiz
  457. bir alt dil oluşturduk.
  458. Nedenlerimiz:
  459. \layout Itemize
  460. PİSİ paketlerinin hazırlama ve derleme betiklerinde de Python kullanıldığı
  461. için paket yapıcı tek bir dil öğrenip kullanarak tam bir Pardus pakedi
  462. hazırlayabilecektir.
  463. \layout Itemize
  464. Python VM, hız ve kaynak kullanımı olarak çok uygundur.
  465. Bir işletici program içinden rahatça ayarlanıp kullanılabilen bir kitaplık
  466. halindedir.
  467. \layout Itemize
  468. Program yazarken sıkça karşılaşılan yapıların (design patterns) çoğu Python'da
  469. temel özellik olarak bulunduğu için kod temiz ve anlaşılır olmakta; implementas
  470. yon, mantığı gölgelememektedir.
  471. \layout Itemize
  472. Minimal ve temiz sentaksı dolayısıyla kodların boyutu kısa, okunabilirliği
  473. yüksek olmaktadır.
  474. \layout Subsection
  475. Yapılandırma Yöneticisi
  476. \layout Standard
  477. ÇOMAR işletici uygulaması (comard), kullanıcı arayüzleri, ÇOMAR destekli
  478. uygulamalar ve çeşitli araçlardan gelen görev isteklerini sistem modeli
  479. üzerindeki uygulama nesnelerine yaptıran bir sistem servisidir.
  480. \layout Standard
  481. Bu istekleri almak, ve olup biten yapılandırma olaylarını bağlanan uygulamalara
  482. aktarabilmek için bir iletişim kanalı gereklidir.
  483. ÇOMAR'ın ön tanımlı iletişim kanalı sistemde sabit bir UNIX soket olmakla
  484. birlikte, yerel bağlantılar için DBus, uzak bağlantılar için HTTP, SSH
  485. gibi protokoller, hatta e-posta ya da SMS gibi iletişim kanalları modüler
  486. olarak kullanılabilir.
  487. \layout Standard
  488. Her bir iletişim modülü, ÇOMAR çağrılarını iletmek, ve gelen çağrıların
  489. hangi kullanıcıdan geldiği, iletişim hattının şifreli olup olmadığı, iletinin
  490. elektronik imzayla doğrulanıp doğrulanmadığı gibi bilgilere bakarak ÇOMAR'ın
  491. yetki denetim mekanizmasından geçirmekle sorumludur.
  492. İşletici elindeki nesnelerle sisteme kullanıcı eklemek, alt düzey ayarları
  493. değiştirmek gibi işler yapabilmekte, bunları yapabilmek için en yüksek
  494. yetki seviyesinde çalışmaktadır.
  495. Güvenlik açıklarına yol açmamak için, iletişim modüllerinden gelen isteklerin
  496. yetki denetiminden geçmeden işleticiye geçmesine izin verilmemelidir.
  497. \layout Standard
  498. Yetki denetimi grup, sınıf ve metotlar üzerinde tanımlanabilmelidir.
  499. Böylece bir kullanıcıya ayar değiştirme yetkisi vermeden bilgi sorma metotların
  500. ı çağırma yetkisi verilebilmesi ya da bütün bir grubun yönetiminin tek bir
  501. kullanıcıya verilmesi kolayca tanımlanabilir.
  502. \layout Standard
  503. Görevleri sağlayan nesneler paralel olarak veya çağrı bir nesneye yönelikse
  504. tek olarak işletilir.
  505. Bir nesne içinden başka bir sınıfa yeni bir çağrı yapılabilir.
  506. Bir paket kurulduğunda uygulamanın nesnelerini model kaydettiren, kaldırıldığın
  507. da çıkaran çağrılar da mevcuttur.
  508. \layout Standard
  509. Özellikle açılış esnasında bir sürü işlem yapılmaktadır, bu işlemler birbirlerin
  510. den bağımsız oldukları, aralarındaki bağımlılıklar çok az olduğu için paralel
  511. çalıştırılmaları büyük hız kazancı sağlayacaktır.
  512. İsteklerin paralel yürütülebilmesi, kullanıcının interaktif işlemlerine
  513. çabuk yanıt verebilmek için de önemlidir.
  514. Bu amaçla her bir nesne ayrı bir süreç olarak işletilecektir.
  515. Linux'ta yeni bir süreç yaratan fork çağrısı, bir performans kaybı yaratmayacak
  516. kadar hızlı çalışmakta ve süreçlerin bellek alanları copy-on-write metodu
  517. ile çoğaltıldığı için gereksiz kaynak israfına da yol açmamaktadır.
  518. \layout Standard
  519. Yapılandırma işlemleri sistemde sürekli ve sık biçimde yapılmamaktadır.
  520. Yapılacak işler azaldığında ya da iş olmadığında minimum kaynak kullanımına
  521. geçilebilmelidir.
  522. Nesnelerin ayrı süreçler olarak işletilmesi bunu da kolaylaştırmakta, işler
  523. hep ana süreç dışında yapıldığı için, bir iş olmadığında sadece temel takip
  524. işlemleri çalışır halde kalmaktadır.
  525. \layout Standard
  526. Nesneler belirli bir durumda (bir sistem olayı ya da peryodik zaman olayları)
  527. bir metotlarının çağrılmasını isteyebilirler.
  528. ÇOMAR işleticisi bu istekleri kaydeder ve ilgili olay meydana geldiğinde
  529. ilgilenen nesneleri çağırır.
  530. \layout Subsection
  531. Kullanıcı Arayüzleri
  532. \layout Standard
  533. ÇOMAR'ı kullanacak en temel uygulama PİSİ'dir.
  534. Paketleri kurarken, pakede ait nesneleri ÇOMAR'a verecek ve uygulamanın
  535. sisteme entegre edilmesini sağlayacaktır.
  536. Paket kaldırılırken ise ÇOMAR'a durumu bildirerek nesnelerin modelden çıkarılma
  537. sını sağlar.
  538. \layout Standard
  539. Kullanıcının görevleri kullanmasını ve sistemini ayarlayabilmesini sağlayacak
  540. uygulama ise TASMA'dır.
  541. Bir grafik arayüzü olan TASMA, ÇOMAR'daki bilgileri kullanıcıya sunmak,
  542. ve kullanıcının emirlerini ÇOMAR çağrılarına dönüştürmek işlerini yapar.
  543. \layout Standard
  544. Bunlar dışında çeşitli arayüzler veya yönetim uygulamaları da ÇOMAR'a bağlanıp
  545. hizmetlerinden yararlanabilir.
  546. \layout Section
  547. \pagebreak_top
  548. Sıkça Sorulanlar
  549. \layout Subsection
  550. ÇOMAR'ın açılımı nedir?
  551. \layout Standard
  552. COnfiguration MAnageR.
  553. ÇOMAR'ın açılımı ilk olarak
  554. \begin_inset Quotes eld
  555. \end_inset
  556. Configuration by Objects, Modify and Restart
  557. \begin_inset Quotes erd
  558. \end_inset
  559. idi.
  560. Fakat ÇOMAR'ın tasarım sürecinde
  561. \begin_inset Quotes eld
  562. \end_inset
  563. Modify and Restart
  564. \begin_inset Quotes erd
  565. \end_inset
  566. kısmının ÇOMAR'ın işlevselliğini tam olarak ifade etmez hale geldiği görüldü
  567. ve açılımının
  568. \begin_inset Quotes eld
  569. \end_inset
  570. Configuration Manager
  571. \begin_inset Quotes erd
  572. \end_inset
  573. olmasının daha doğru ve anlamlı olacağında karar kılındı.
  574. \layout Subsection
  575. ÇOMAR bana ne fayda sağlayacak?
  576. \layout Standard
  577. Kurduğunuz uygulamaları elle ayarlamaktan, sistemin zaten bildiği ve kendi
  578. başına bulabileceği bilgileri elle girmekten, bunun için belge okuyup soru
  579. sorarak zaman kaybetmekten kurtulacaksınız.
  580. \layout Standard
  581. Sistemin sürekli olarak tutarlı bir durumda kalmasını sağlayarak, ayar sorunları
  582. yüzünden çalışamayan programlardan sizi kurtaracak.
  583. \layout Standard
  584. Sunduğu imkanlar ile tek tek uygulama ayarlamaktan ziyade, görev temelli
  585. düşünülmüş grafik arayüzler yazılmasını kolaylaştıracak, bu arayüzler sayesinde
  586. bilgisayara kölelik yapmak yerine kendi işinizle uğraşabileceksiniz.
  587. \layout Subsection
  588. ÇOMAR desteklemeyen uygulamaları kullanabilecek miyim?
  589. \layout Standard
  590. Elbette.
  591. Bu uygulamalar ÇOMAR'ın sağladığı avantajlardan faydalanmayacaklar, ama
  592. sistemde çalışabilmelerinin önünde bir engel olmayacak.
  593. \layout Subsection
  594. Bir uygulamaya ÇOMAR desteği vermek zor mu?
  595. \layout Standard
  596. Hayır.
  597. Bunun için uygulamayı değiştirmenize gerek yok.
  598. Yalnızca CSL ile ÇOMAR modelindeki görevlerin uygulamaya nasıl yaptırılacağını
  599. tarif eden betikler (nesneler) yazmanız yeterli.
  600. \layout Subsection
  601. CSL yeni bir dil mi?
  602. \layout Standard
  603. Aslında hayır.
  604. CSL bir Python alt dili.
  605. Python'un ihtiyacımız olmayan modülleri çıkarılıp, bazı yeni modüllerin
  606. eklenmesiyle oluşturulmuş, ve sistem modelimizdeki sınıflara nesne yazmak
  607. için kullanılacak hale getirilmiş hali diyebiliriz.
  608. İlk ÇOMAR tasarımı ve prototipinde Javascript/C arası ve çok kısıtlı bir
  609. dil olarak tasarlanmıştı, ama bunun yeterli gelmediği ve basitlik sağlamadığı
  610. görülünce Python temelli olmasına karar verildi.
  611. \layout Subsection
  612. ÇOMAR ile PİSİ arasında nasıl bir ilişki var?
  613. \layout Standard
  614. ÇOMAR ve PİSİ, diğer dağıtımlarda bir arada olan kurulum ve yapılandırma
  615. işlerini ayırıyor ve her işi kendi sorumluluk sahası içinde düzgünce tarif
  616. ediyorlar.
  617. Birbirlerine ihtiyaç duyduklarında kullanacakları arabirim ise düzgün bir
  618. biçimde tanımlanmış.
  619. Böylece temiz ve basit bir çözüm sağlıyorlar.
  620. \layout Subsection
  621. ÇOMAR'ı devreden çıkartırsam ne olur?
  622. \layout Standard
  623. Otomatik yapılandırma işleri durur, ve ÇOMAR ile çalışan yapılandırma arayüzleri
  624. niz (TASMA) artık çalışmaz.
  625. Yani artık kendi başınızasınız demektir.
  626. ÇOMAR'ı yeniden başlatarak bu durumdan kurtulabilirsiniz.
  627. \layout Subsection
  628. ÇOMAR'ın kconfig, gconf, elektra gibi sistemlerden farkı ne?
  629. \layout Standard
  630. Bu sistemler
  631. \begin_inset Quotes eld
  632. \end_inset
  633. configuration
  634. \begin_inset Quotes erd
  635. \end_inset
  636. ismini kullanmalarına rağmen aslen özel bir veri saklama (storage) sisteminden
  637. başka bir şey değildirler.
  638. Uygulama bazında, belirli anahtar kelimelere karşılık gelen verilerin saklanmas
  639. ı ve getirilmesini sağlarlar.
  640. Bu anahtarlar sistem çapında tanımlanmamıştır ve her uygulama için farklıdır.
  641. Uygulamaların alt düzey ayarlarına erişmenizi sağlarlar, ama bir görevi
  642. yapmak için hangi ayarların değişmesi gerektiği, aynı işi yapan farklı
  643. bir uygulamanın bilinmeden nasıl ayarlanabileceği, ayarlar karıştığında
  644. sistemin tutarlı bir hale nasıl getirilebileceği gibi sorunlara bir çözüm
  645. getirmezler.
  646. \layout Subsection
  647. Neden başkaları böyle bir çözüm getirmedi?
  648. \layout Standard
  649. Diğer dağıtımlar çözümlerini tarihsel gelişme süreçleri içinde adım adım
  650. geliştirdikleri ve geçmişe uyumluluk yüküyle yollarına devam ettikleri
  651. için bu tür kapsayıcı ve düzenli çözümler getirmeleri zor.
  652. Bir çok yeni girişim ise genel bir model oluşturmayı ihmal ederek, sorunu
  653. bir ayar deposu (configuration storage) olarak ele almaya devam etmekte.
  654. \layout Section
  655. \pagebreak_top
  656. Emeği Geçenler
  657. \layout Standard
  658. İlk sürüm:
  659. \layout Standard
  660. Serdar Köylü, A.
  661. Murat Eren, Gürer Özen
  662. \layout Standard
  663. Gözden geçirme:
  664. \layout Standard
  665. Barış Metin, S.
  666. Çağlar Onur, Onur Küçük
  667. \layout Standard
  668. İkinci sürüm:
  669. \layout Standard
  670. Gürer Özen, Barış Metin, Eray Özkural
  671. \the_end