Table of Contents
- 1 Ağ izlemeye giriş
- 2 Munin nedir?
- 3 Munin kurulumu
- 4 Sunucu ayarları
- 5 İstemci ayarları
- 6 Munin eklentileri
- 7 Kendi eklentilerinizi yazmak
- 8 Örnek Munin eklentisi
- 9 Teşekkürler
1 Ağ izlemeye giriş
Internet'e ArpaNet olarak hitap edildiği ve ağa sadece 4 bilgisayarın bağlı olduğu günler çok geride kaldı. Her geçen gün gelişen ve ucuzlayan ağ ve donanım teknolojileri sayesinde sunucu ve sunucular arası bağlantıların sayısı çığ gibi büyüyerek arttı. Günümüzde insanların evlerinde dahi yerel ağlar ve bu ağlara hizmet veren sunucular kurulması olağan bir durum haline geldi. Sunucular artıp ağ yapıları karmaşıklaştıkça bu sunucuların durumlarını doğrudan, teker teker el yordamıyla takip etmek gitgide imkansız bir hal almaya başladı. Tabiiki bu tip otomatize edilebilecek, belli parametreler kullanılarak ölçülebilecek işlerin el yordamıyla yapılması UNIX geleneğine pek uygun sayılmazdı. Böylece bu işi bizim yerimize yapacak olan ağ izleme programları ortaya çıktı.Ağ izleme programları, sistem sağlığını takip eden, bir terslik çıktığında uyarı üreten veya duruma göre önlem alanlar ve istatistik tutanlar olarak iki kategoriye ayrılabilir. Tabiiki başka ayrımlar da yapılabilir fakat bu yazının konusu dahilinde bu gruplandırma yeterli olacaktır.
Birinci tipteki programların en meşhuru şüphesiz ki Nagios'tur. Nagios ağınızdaki servisleri sürekli olarak takip altında tutar ve bu servislerde sıradışı bir durum oluşması halinde sizi e-posta, SMS, Jabber gibi servisler üzerinden uyarır. Yaptığınız ayarlara göre Nagios belli koşullar altında sizin belirlediğiniz bir komutu çalıştırarak duruma müdahale de edebilir. Nagios tarzı yazılımların bu güzel özelliklerine karşılık önemli bir eksikleri oluşan durumlara ilişkin verdiği bilginin anlık olmasıdır. Nagios size sistemin o anki durumunu sunar. Her ne kadar geçmiş olayları takip edebileceğiniz bir kayıt sistemi içeriyorsa da size sistemin genel gidişatını izleyebileceğiniz istatistiki bilgiler sunmaz.
İstatistiksel izleme yazılımları işte tam olarak Nagios gibi anlık izleme yazılımlarının bu eksiğini kapatırlar. İstatistiksel bir izleme yazılımı size ağ üzerinde izlediğiniz sistemlerin günlük, haftalık, aylık ve yıllık hareket biçimlerine ilişkin raporlar sunar. Bu raporlar sayesinde sisteme daha geniş bir açıdan bakarak sistem ihtiyaçlarını daha kesin bir biçimde saptamanız ve ileride oluşabilecek problemlere ilişkin daha sağlıklı projeksiyonlar yapmamız mümkün olur.
Hem itiraf edin, hangi geek renkli ve baştan aşağıya bilgi yüklü grafikleri sevmez ki?
2 Munin nedir?
Munin1 bir istatistiksel ağ izleme yazılımıdır. Munin adı İskandinav mitolojisinden gelir. Odin'in omuzlarına konarak ona haberleri ileten iki adet kuzgunu vardır. Bu kuzgunlardan biri Hugin (düşünce) diğeri ise Munin (bellek) olarak anılır. İşte Munin adını bu kuzgundan alır.UNIX dünyasında hepsi birbirinden farklı özelliklere sahip olan birçok istatistiksel ağ izleme programı vardır (bkz: MRTG, Cacti vs...). Bu kadar programın arasından Munin'i farklı kılan özellikler nedir?
- UNIX sistemleri izlemek için SNMP gibi protokollere ihtiyaç duymaz. İzlenen sistemlerde Munin'in kendi izleme servisi çalışır.
- UNIX dışı sistemleri SNMP üzerinden takip edebilir.
- Sunucu - istemci yapısı sayesinde yükü izlenen sistemlere dağıtarak sunucu sistemde izleme süreçlerinden dolayı oluşabilecek gereksiz sistem yükünün önüne geçer.
- Nagios ile entegre çalışabilir. Takip ettiği servislerin durumu belirlenen sınırları aştığında Nagios'a uyarı veya kritik hata mesajı gönderebilir.
- Eklentiere açık yapısı ve sade eklenti mimarisi sayesinde Bash betikleri ile bile çok rahatlıkla kendi eklentilerinizi yazarak hayal gücünüzün izin verdiği herşeyi takip edebilirsiniz.
3 Munin kurulumu
Bir Munin kurulumu iki adet bileşenden oluşur: Sunucu ve istemci. Munin sunucusu sistemleri takip eden verileri toplayıp veritabanına kaydeder ve sistemlerden gelen verilerin grafiğini çizer. Munin istemcisi ise üzerinde çalıştığı sistemden bilgileri toplar ve sunucuya iletir. Sunucu sistemde aynı zamanda istemci sistemi de çalışabileceği gibi sunucunun tek başına çalışması da mümkündür.Debian GNU/Linux sistemlerde Munin istemci ve sunucusunu APT sistemi üzerinden kolayca yükleyebilirsiniz. Sunucu için munin ve istemci için munin-node paketlerini yüklemeniz yeterlidir.
Bunun yanında Munin sunucusu tarafından üretilen istatistikleri web sayfası üzerinden görüntüleyebilmek için sisteminizde bir adet web sunucunun kurulu olması gerekmektedir. Munin sunucusu cron üzerinden çalışıp statik raporlar ürettiğinden Apache kurmanıza gerek yoktur. Apache yerine thttpd gibi daha küçük ve hafif sunucuları tercih edebilirsiniz.
4 Sunucu ayarları
Munin sunucusunun ayarlarını /etc/munin/munin.conf dosyasından yapabilirsiniz. Burada Munin veritabanının, sistem kayıtlarının ve html çıktısının nereye yerleştirileceği gibi sisteme özel ayarlar ile takip edilecek istemcilerin tanımlandığı bölüm bulunur.4.1 Sistem ayarları
APT üzerinden yapılan kurulumlarda bu ayarlar doğrudan Debian sisteminin dosya yerleşim standartlarına uygun biçimde öntanımlı olarak ayarlanmış şekilde gelir. Kaynak koddan yapılan kurulumlarda veya öntanımlı kurulumu sisteminizin farklı ihtiyaçları sebebiyle özelleştirmek isteyeceğinizi düşünerek bu ayarları bir açıklamakta fayda vardır.- dbdir: Bu ayar Munin'in takip ettiği sistemlerden gelen verileri içeren veritabanını tutacağı dizini belirtir. Bu dizinin munin kullanıcısı tarafından yazılabilir olması gereklidir.
- htmldir: HTML çıktısının yerleştirileceği dizini belirtir. Web sunucunuzun görebileceği ve munin kullanıcısının yazabileceği bir dizin olmalıdır.
- logdir: Munin'in işleyişine ilişkin kayıtların tutulacağı dizini belirtir. Diğer dizinler gibi bu dizin de munin kullanıcısı tarafından yazılabilir olmalıdır.
- rundir: Bu dizin Munin'in çalışma anında yaratacağı kilit ve pid dosyası gibi verileri tutar.
- tmpldir: Bu dizinde Munin'in ürettiği html çıktısına ilişkin şablon dosyaları tutulur.
- graph_period: Munin öntanımlı olarak zamanı saniye biriminden ifade eder. Bu ayara minute değerinin verilmesi halinde öntanımlı zaman birimi dakika olacaktır.
- contact.*.command: ``*'' karakteri yerine bir isim yazarak bir kullanıcıya izlenen servislerdeki durumların değişimini bildirebilirsiniz. Örneğin:
#Servis durumunu tonguc kullanicisina bildir contact.tonguc.command mail -s "Servis durumu haberi" tonguc@localhost #Servis durumunu Nagios'a ilet contact.nagios.command send_nsca -H localhost -c /etc/send_nsca.conf
4.2 İstemci tanımları
İstemci tanımları bölümünde ağımızdaki izlenecek istemcileri tanımlarız. İstemciler üzerinde izlenecek servisler ise istemci tarafında tanımlanacağı için bu bölümde sadece makinalara ilişkin tanımlar yapılır. Örnek bir istemci tanımı şu biçimdedir:[makina.ag.adi] address 123.123.123.123 port 4949 use_node_name yesKöşeli parantezler içerisinde sistemin ağımızdaki tam adını yazdıktan sonra alttaki satırlarda o sisteme ilişkin bilgileri yazarız. Bu bilgileri kısaca özetleyelim.
- address: İstemcinin ağ üzerindeki IP adresi veya DNS'e kayıtlı adını içerir. Bir istemci tanımına eklenmesi gereken tek mecburi kayıttır.
- port: Normal koşullar altında Munin sunucusu istemciden bilgileri istemcinin 4949 numaralı portundan alır. Bunun yerine farklı bir port kullanılması durumunda bunun ayar dosyasında port komutu ile belirtilmesi gerekir.
- use_node_name: Özellikle bir istemcinin kendi bildirdiği sistem adının değişebilmesi durumunda (mesela dizüstü bilgisayarlarda) daima o sistem için ayar dosyasında belirtilen ismin ullanılmasını sağlar.
5 İstemci ayarları
Munin sisteminde asıl izleme işi tamamen istemci tarafından yapılır. İstemcinin neleri takip edeceği tamamen /etc/munin/plugins/ dizinindeki dosyalar tarafından belirlenir. Bu dizine yerleştirilen her bir çalıştırılabilir dosya bir Munin eklentisi olarak değerlendirilir ve Munin'in kabul edeceği biçimde çıktı üretmesi beklenir. Tabii istemci ayarları yardımıyla dosya isimlerinin belli kriterlere uymasını sağlamak mümkündür. Munin istemci ayar dosyası iki parçadan oluşur. Birinci parça Munin istemcisine ilişkin temel ayarların yapıldığı /etc/munin/munin-node.conf dosyasıdır. Eklentilere ilişkin ayarlar ise /etc/munin/plugin-conf.d/ dizininin içindeki dosyalarda tutulur.5.1 Sistem ayarları
Bu dosyada Munin'in arkaplanda çalışan daemon sürecine ilişkin ayarlar tutulur. Bu ayarlar şöyle listelenebilir:- log_level: Munin istemcisi tarafından tutuluacak kayıtların içereceği detay seviyesini belirler. 0 ile 4 arasında bir değer almalıdır. Yüksek değerler daha detaylı kayıt anlamına gelir.
- log_file: İstemci sürecinin kayıtlarının tutulacağı dosyayı belirler.
- port: İstemcinin sunucudan gelen istekler için dinleyeceği portu belirler. Öntanımlı değeri 4949'dur.
- background: Bu ayar çalıştırılan istemci sürecinin arkaplana atılarak daemon olarak çalıştırılıp çalıştırılmayacağını belirler.
- host: Munin istemci sürecinin dinleyeceği IP adresini ayarlar. Öntanımlı olarak Munin bütün IP adreslerinde dinlemeye geçer. Burada ihtiyaç olmayan adresleri devredışı bırakmak güvenlik açısından faydalı olacaktır.
- user ve group: Munin istemcisinin hangi kullanıcı ve grup haklarıyla çalışacağını belirler. Her ne kadar tüm eklentileri öntanımlı değeri olan root yetkileriyle çalıştırmak tehlikeli olsa da bu yetkileri kullanmanın mecburi olması durumunda eklentiler teker teker farklı kullanıcı yetkileriyle çalışmak üzere ayarlanabilir.
- ignore_file: Eklenti dizininde çalıştırılabilir dosyalar taranırken gözardı edilecek dosyaların tespit edilmesini sağlayan düzenli ifadedir. Birden fazla defa tekrar edilebilir.
- host_name: Bu sisteme bağlanan Munin sunucusunun sistemin ismini doğru olarak tespit edememesi halinde kullanılacak sistem adını belirler.
- allow: Öntanımlı olarak sisteme yapılan bütün bağantılar reddedilir. Birden fazla tekrarlanabilen bu komut yardımıyla sisteme bağlanma izni olan sistemler belirlenir. Bir sistemin Munin istemcisine erişim yetkisi olup olmadığını tespit etmek için bu komut ile belirlenen düzenli ifade karşı taraftaki sistemin IP adresine uygulanır.
5.2 Eklenti ayarları
Munin eklentilerinin ayarları çevre değişkenleri yardımıyla yapılır. /etc/munin/plugins-conf.d/ dizinindeki ayar dosyaları yardımıyla bir eklentinin hangi kullanıcı yetkileri ile çalışacağı ve o eklenti çalışırken kullanılacak olan çevre değişkenleri ayarlanabilir. Örnek bir eklenti ayarı şu şekilde olabilir:[mysql*] user root env.mysqlopts --defaults-extra-file=/etc/mysql/debian.cnfKöşeli parantezler içindeki kısım eklenti adını belirler. Örnekte de olduğu gibi ``*'' karakteri kullanılarak birden fazla eklentiye ilişkin ayarlar yapılabilir. Örneğin yukarıdaki ayarlar sayesinde adı mysql ile başlayan bütün eklentilere mysqlopts çevre değişkeni --defaults-extra-file=/etc/mysql/debian.cnf değeri ile uygulanır. Bunun yanında user ve group parametreleri yardımıyla eklentinin hangi kullanıcının yetkileri ile çalışacağını ayarlayabilirsiniz.
Bir diğer ilginç ayar ise command komutudur. Bu şekilde bilirtilen komut o eklentinin yerini alır. Bu sayede sözkonusu eklenti yerine sizin verdiğiniz komut çalıştırılacaktır. Bu komutun içerisinde kullanacağınız %c karakteri ise yerine geçilen gerçek komut olarak oraya yerleştirilir. Çok karışık bir şekilde ifade ettim. En iyisi bir örnekle açıklamak.
Eğer Munin istemciniz güvenlik gerekçeleri ile root yetkilerinde çalışmıyorsa fakat takip etmek istediğiniz servis (mesela Postfix'te kuyrukta bekleyen e-posta sayısı) bu eklentinin farklı yetkilerle çalışmasını gerektiriyorsa şöyle bir yöntem uygulayabilirsiniz:
[postfix*] command sudo -u postfix %cEğer sudo ayarlarını doğru olarak yaptıysanız bu sayede Postfix'e ilişkin bütün eklentiler postfix kullanıcısının yetkileriyle çalışırken ana Munin süreciniz yetkisiz bir kullanıcı olarak çalışmaya devam edebilecektir.
6 Munin eklentileri
Munin kendi içinde oldukça geniş bir eklenti arşivine sahiptir. Bu eklentiler sayesinde Apache sunucunuza gelen isteklerden sabit disklerinizin S.M.A.R.T. ölçümlerine kadar birçok bilgiyi sürekli olarak takip edebilirsiniz. Munin'in Debian paketinden kurulması halinde kurulum betiği sisteminizi tarar ve sisteminizin ayarlarına bakarak uygun nitelikteki eklentileri otomatik olarak aktif hale getirir. Munin'in kendi içinde gelen eklentilerin tamamı /usr/share/munin/plugins dizininde bulunur. Debian tarafından otomatik kurulmamış olan eklentileri buradan /etc/munin/plugins/ dizinine kopyalamanız eklentinin aktif hale gelmesi için yeterli olacaktır. Aynı şekilde sisteminizde çalışmasını istemediğiniz eklentileri de bu dizinin dışına alarak veya silerek devredışı bırakabilirsiniz.7 Kendi eklentilerinizi yazmak
Munin'nin gerek kendi içinde gelen gerekse eklenti kataloğu3 üzerinden indirilebilen birçok eklentisi mevcuttur. Her ne kadar oldukça geniş bir ihtiyaç yelpazesine hitap eden eklentiler mevcutsa da yer yer kendi eklentilerinizi yazmanız gerekebilir.Munin için eklenti yazmak oldukça kolaydır. Eğer geçmişte ufak tefek Bash betikleri yazmışsanız Munin ile çalışmakta zorlanmazsınız. Munin eklentisi yazmak o kadar kolaydır ki Munin'in içinde öntanımlı olarak gelen eklentilerin tamamı standart Sh veya Perl kullanılarak yazılmıştır. Munin eklentileri yazarken herhangi bir programlama dili veya kütüphane bağımlılığı yoktur. Yazdığınız eklenti Munin'in kabul edeceği biçimde çıktı ürettiği sürece dilediğiniz dilde eklenti yazabilirsiniz.
Bir munin eklentisinin uyması gereken iki mecburi, iki de seçimlik kural vardır.
- Bir munin eklentisi kendi başına çalıştırıldığı zaman takip ettiği verileri o anki değerlerini standart çıktıya yazmalıdır.
- Eklenti config parametresi ile çalıştırıldığında çizilecek grafiğin başlığı, takip ettiği veri alanlarının isimleri gibi bilgileri standart çıktıya yazmalıdır.
- Mecburi olmamakla beraber bir eklenti autoconf parametresini destekleyebilir. Bu parametre ile çalıştırıldığında eklenti çevresini denetleyerek çalışma ortamının çalışması için gerekli koşulları sağlayıp sağlamadığına karar vermeli ve duruma göre yes veya no biçiminde tek satırlık bir çıktı üretmelidir.
- Son olarak suggest parametresi özellikle ethernet arayüzü gibi birden fazla veri kaynağının bulunabilmesi halinde kullanılabilecek değerleri döndürmelidir.
7.1 Genel grafik ayarları
Bu ayarlar yardımıyla grafiğimizin çıktısının alacağı biçimi ayarlayabiliriz. Bu ayarlar grafiğimizin hangi kategoride olacağı, çizilecek verinin minimum ve maksimum değerleri gibi bilgileri içerir.- graph_title: Çizilecek grafiğin başlığıdır. Grafiğin neyi takip ettiğine ilişkin bilgi vermeyi amaçlar. Kullanımı mecburidir.
- graph_category: Grafiğin dahil olduğu üst başlık. Munin tarafından üretilen grafikler belli başlıklar altında (ağ, disk vs...) gruplandırılır. Bu ayar sayesinde çizdirdiğiniz grafiğin hangi kategoriye dahil olduğunu belirleyebilirsiniz.
- update: Bu eklentinin Munin sunucusundan bilgi güncelleme isteği geldiği zaman çalıştırılıp çalıştırılmayacağını belirler.
- graph: Bu eklentiye ilişkin verilerin grafiğinin çizilip çizilmeyeceğini belirler. Sadece veri toplanmasının amaçlandığı durumlarda kullanılabilir.
- graph_vlabel: Grafiğin Y ekseni için kullanılacak olan etiketi belirler.
- graph_total: Eğer bu değişkene bir değer atanırsa grafikte çizilen verilerin toplam değeri bu isimde bir alanda tutulur.
7.2 Veri alanı ayarları
Veri alanı ayarları, grafik içerisinde çizilecek her alanın kendine özel ayarlarını tutar. Temel yapı olarak genel grafik ayarlarına benzerse de ufak bir farkla genel ayarlardan ayrılır. Alanların her birinin o alana özel ve başka alanlardan ayırd edilmesini sağlayan bir adı vardır. Bu ad sadece alfanumerik karakterler ile ``_'' oluşabilir ve en fazla 19 karakter uzunluğunda olabilir. Alana ilişkin ayarların her birinin önüne bu isim eklenir. Alana ilişkin ayarların genel yapısı alan_adi.ayar deger biçimindedir. Alanların ayarları için kullanılabilecek önemli seçenekler şöyledir.- label: Bu alan için kullanılacak etiketi belirtir. Kullanımı mecburidir.
- draw: Alanın çiziliş biçimini belirtir. Çizgi veya alan gibi farklı biçimlerde çizim mümkündür. AREA, LINE1, LINE2, LINE3 veya STACK değerlerinden birini alabilir. Öntanımlı değeri LINE2'dir
- min ve max: Bu alana girilebilecek verinin alt ve üst sınırlarını belirler. Verinin bu sınırları aşması halinde verinin yerine bu değerler kullanılır.
- negative: Veri alanındaki verinin değerinin sıfırın altına düşmesi halinde kullanılacak olan etiketi belirler.
- warning ve critical: Takip edilen verinin belli limitleri aşması halinde Munin'in uyarı mesajları üretmesini sağlar. Sadece üst limit biçiminde ayarlanabileceği gibi alt:üst şeklinde veya alt: şeklinde iki taraflı limit veya sadece bir alt limit belirlemek üzere de kullanılabilir.
8 Örnek Munin eklentisi
Şimdi basit bir Munin eklentisi yazarak yukarıda anlatılanları uygulayalım. Bu eklenti sistemdeki gerçek aktiviteyi takip etmek yerine, her çağrıldığında rastgele bir sayı üretecektir. Her ne kadar bize gerçek bir fayda sağlamasa da kısa sürede güzel görünümlü raporlar elde etmemizi sağlayacaktır.Önce betiğimizin iskeletini yazarak başlayalım. İlk yapmamız gereken komut satırından verilecek olan parametreleri doğru olarak işlemektir.
#!/bin/bash if [ $1 -a $1 = "config" ]; then dump_config exit 0 elif [ $1 -a $1 = "autoconf" ]; then dump_autoconf exit 0 fiŞimdi sıra geldi dump_config ve dump_autoconf komutlarını hazırlamaya. Daha kolay olduğu için önce dump_autoconf ile başlayalım. autoconf parametresi betiğimizin uygun ortam içinde olup olmadığını test etmeye yarıyordu. Bizim bu betik içerisinde kullanacağımız ortama bağlı tek değer $RANDOM adlı çevre değişkeninin varlığı olacaktır. O zaman bu değişkenin varlığını test eden bir fonksiyon yazalım.
function dump_autoconf() { if [ -n $RANDOM ]; then echo "yes" else echo "no" fi }Şimdi de grafiğimizin ayarlarını düzgün bir biçimde görüntüleyecek olan dump_config komutunu yazalım.
function dump_config() { # Grafik başlığı echo "graph_title Rastgele sayilar" # Grafik kategorisi echo "graph_category system" # Dikey eksenin değeri echo "graph_vlabel En buyuk sayi" # random adlı alanın etketi echo "random.label Rastgele sayi" # random alanının alt ve üst sınırları echo "random.min 0" echo "random.max 65535" }Eklentimizin zor kısımlarını bitirdik. Artık tek yapmamız greken normal koşullarda gerekli sayıyı üretmek. Neyse ki bu çok zor bir iş değil.
echo "random.value $RANDOM"Hepsini bir araya toplamak gerekirse, bir Munin eklentisi yazmak için yapmamız gereken config parametresini kabul eden ve bu parametreyi aldığında kendisine ilişkin ayarları, almadığında ise taki ettiği değerlerin o anki durumunu standart çıktısına yazan bir program yazmaktır. Örnek programımız bittiğinde elimizdeki sonuç kod şöyle olacaktır:
#!/bin/bash function dump_autoconf() { if [ -n $RANDOM ]; then echo yes else echo no fi } function dump_config() { # Grafik başlığı echo "graph_title Rastgele sayilar" # Grafik kategorisi echo "graph_category system" # Dikey eksenin değeri echo "graph_vlabel En buyuk sayi" # random adlı alanın etketi echo "random.label Rastgele sayi" # random alanının alt ve üst sınırları echo "random.min 0" echo "random.max 65535" } if [ $1 -a $1 = "config" ]; then dump_config exit 0 elif [ $1 -a $1 = "autoconf" ]; then dump_autoconf exit 0 fi echo "random.value $RANDOM"Bunun ardından eklentimizi Munin eklentilerinin bulunduğu dizine kopyalayıp kullanmaya başlayabiliriz. Tabiiki Bash dışındaki dillerle de Munin eklentileri yazmak mümkündür. Hatta bu tip eklenti yazma işlerini kolaylaştıracak bazı yardımcı kütüphaneler yardımıyla Munin konfigürsyonunun sözdizimi gibi şeylerle uğraşmadan eklentilerinizi yazmanız mümkün olabilir. Python için bu amaçlarla yazdığım bir modül mevcuttur.5
9 Teşekkürler
Pazar günü, üstelik sabahın körü sayılabilecek kadar erken saatlerde yazım hatalarımı bulup düşük cümlelerimi düzelten Can Burak Çilingir'e6 çok teşekkür ederim.- 1
- http://munin.projects.linpro.no/
- 2
- http://munin.projects.linpro.no/wiki/munin.conf
- 3
- http://munin.projects.linpro.no/wiki/PluginCat
- 4
- http://munin.projects.linpro.no/wiki/protocol-config
- 5
- http://tonguc.ath.cx/svn/Python/munin_plugin.py
- 6
- http://www.canb.net
This document was translated from LATEX by HEVEA.Bu belgenin en güncel haline ve kaynak kodlarına Subversion deposu üzerinden erişebilirsiniz.