18
Nis
Biraz geç kalınmış bir yazı ile karşınızdayım :)

Taa 7-8 Nisan tarihinde yapılmış olan atölye çalışmasıyla ilgili blog girdisini anca şimdi yazabiliyorum. Bu aralar yoğunluk hiç bitmiyor.

Neyse, ÇOMAK ile ilgili olan atölye çalışmasına, geçen seneki mezun arkadaşlarımızdan Metin ve Mete de katıldı. Onlar haricinde Pardus ekibinden Enlightenment masaüstü ortamını paketleyen İbrahim ve ÇOMAK projesi ile ilgilenen Onur ve Gökmen de vardı. Son olarak da GNOME masaüstü ortamının paketlenmesi ile uğraşan Burak da atölye çalışmasına katıldı.

2 gün süren çalışmalarda yönetici ailesi ile uğraşan arkadaşlar öncelikli olarak Gökmen'i esir alıp yaptıkları değişiklikleri gözden geçirip, yamalarının Pardus depolarına alınması ile ilgilendiler.

Bunlar haricinde ise Enlightenment masaüstü ortamının açılış yöneticisi olan Elsa'yı sorunsuz çalışabilir hale getirme ilgili çalışmalar yaptık fakat bütün bunlar sonucunda da istediğimiz şekilde çalışmayınca (açılış uygulamalarını sorunsuz çalıştırma, ConsoleKit desteği vs.) Fluxbox için kullandığımız açılış yöneticisi olan SLiM'e geçme kararı aldık. SLiM için varolan Xsession betiği (açılacak masaüstü ortamının belirlendiği sağlayan betik) düzenlememiz gerekti çünkü eski hali sadece fluxbox'u çalıştırıyordu. (hem betik ile ilgili sorunlar vardı hem de gerekli dizinler olması gereken yerde değildi.)

Yapılan değişiklik (ekleme) şu şekilde oldu:

defaultDesktopSession=`sed -e '/^SESSION/!d' -e 's/\(.*\)=\(.*\)/\2/' /etc/default/desktop`

sessionscript=""
for x in /usr/share/xsessions/* ; do
if [ "$defaultDesktopSession" == `basename $x .desktop` ]; then
sessionscript=`sed -e '/^Exec/!d' -e 's/\(.*\)=\(.*\)/\2/' $x`
break
fi
done

Bu kod bloğu sayesinde açılacak masaüstü ortamını /etc/default/desktop dosyasından alıyoruz. Bu ve paketlerdeki bir kaç düzeltmeler ile birlikte Enlightenment, SLiM ile açılabilir hale geldi.

Bunun haricinde bir de 64 bit isolarındaki librt.so.1 dosyası bulunamadı hatası sorunu vardı. 64 Bit kurulan DVD hazırladığımızda librt.so.1 dosyası bulunamadı diye hata alıyorduk. Buna çözüm olarak da udev i bir önceki yayıma çekiyorduk. Onur ile bunun incelemesini yaptıktan sonra udev'in son güncellemesinde açılmış olan 32 bit paketinin 64 bit ikilik dosyaların üzerine yazdığı için böyle bir sorunla karşılaştığımızı öğrendik. (32 bit kütüphane arıyor) Pardus Geliştirici listesinde de bu konu geçiyor.[1] Şu anki güncel udev paketinde bu sorun çözüldü.

Son olarak da gnome3 paketlemesi işlemlerine başlamış olduk. Şu anda da gnome3 paketlenmesi ile ilgili ciddi gelişmeler kaydettik. En kısa zamanda gnome3'lü Pardus'u sizlere ulaştırmaya çalışacağız.

Ayrıca Onur bize Derleme işlemleri ve C programlama ile ilgili ufak bir ders verdi. (Derleyiciler ve C 101 diyebiliriz gibi.) Çok kısa sürdü ama çok teşekkürler Onur. Yine isteriz ama :)

Sonuçta süper zevkli 2 gün geçirdik. Yemekleriyle, çalışmalarıyla kısacası her şeyiyle çok güzel 2 gün geçirdik. Bir sonraki sefere görüşme üzere ayrıldık.

Herkese teşekkürler.
2
Şub
Merhabalar,

Aslında bu yazıyı daha önceden yazmayı planlıyordum ama hastalık ve diş sorunları nedeniyle sürekli ertelemek durumunda kaldım. Hala kurtulamadım fakat zorla da olsa yazayım diyorum.

Neyse, Pardus 2011 çıktı fakat 2011'i bir türlü virtualbox'un yeni sürümünde düzgün açamadığım için RC ile kurulumu anlatacağım.

İlk olarak [1] adresinden istediğimiz aşamadaki iso'yu indiriyoruz. (32-bit, 64-bit fark etmez, sisteminize göre seçin eğer 32bit sisteminiz var ise 64-bit olanı indirmeyin :))

İndirme bittikten sonra virtualbox'u kurduktan sonra çalıştırıyoruz. (pisi install virtualbox)

Ana ekrandan yeni diyoruz. İleri dedikten sonra makina'nın ismini yazıp (örn: pardus-lxde) işletim sistemi olarak Linux, versiyon olarak da Other Linux seçebiliriz.

İleri'ye bastığımızda ne kadar bellek ayırabileceğimizi soracak, buraya da ben 1024MB veriyorum. Sizin toplam belleğinize göre verebilirsiniz. Sadece lxde kurulumunda 512MB bile gayet yeterli olacaktır ama yine de bulunsun bence :) Buradan sonra harddisk oluşturma bölümüne giriyoruz. Yeni dinamik harddisk oluşturuyoruz. (fark etmez aslında, ben dinamik oluşturuyorum) Ve son olarak bitiriyoruz.

Tekrar ana menüye dönüp, makinanın isminin yazdığı yere çift tıklıyoruz. Burada yükleme ortamı seçiyoruz. Ortam kaynağı yazan yere gelip, sağdaki dizin simgesine benzeyen simgeye tıklayıp, indirdiğimiz isoyu seçip tamam diyoruz. Sonra seçtiğimiz iso'dan açılıyor sistem. Burada dili seçip, açılış seçeneklerine

yali=baseonly

yazıyoruz. Böylelikle sadece temel sistem kurulacak. Eğer böyle sistem açılmaz ise açılırken f5'e basıp çekirdeği güvenli ayarlar modunda açmanız gerekebilir. (bu durumda da yali=baseonly yazmalısınız.)

Sonra standart Pardus kurulumu yapıyoruz.

Sistem yeniden başladığında, konsolda kullanıcı adı soran ekran ile karşı karşıyayız. Bunun sebebi artık Kullanıcı işlemlerinin sistem başladıktan sonra yapılıyor olması. Bunun için de varsayılan root kullanıcısını kullanacağız.

Kullanıcı adı: root
Parola: pardus

Sizin de fark edeceğiniz üzere bir çok şey yok. Bunlardan en önemlisi Ağ. Sadece system.base'i kurduğumuz için ağ için gerekli paketleri kurmadı. Bunun için taktığımız iso'daki arşivi kullanarak ağ yöneticisini kuracağız.

Sistem açıldıktan sonra root ile oturum açıyoruz. Bu işlemden sonra

mkdir -p /mnt/cdrom

mount /dev/cdrom /mnt/cdrom

komutlarını sırayla uyguluyoruz. Eğer "no medium found" şeklinde bir yazı çıkarsa karşınıza yukarıdaki menüden aygıtlar->cd/dvd devices, buradan da iso'yu seçip sonra

mount /dev/cdrom /mnt/cdrom

komutunu uygulayabiliriz. Çıktı olarak, yazma korumalı, salt-okunur olarak bağlanıyor demeli.

Bu işlemden sonra "ls /mnt/cdrom" komutu ile doğru bağlayıp bağlamadığımızı kontrol edebiliriz.

Şimdi

"pisi lr" komutu ile o anki depoları görebiliyoruz. Buradaki çıktıdaki bütün depoları kapatmalıyız. Bunu da

üstteki komut çıktısındaki depo isimlerine göre

silmek için "pisi rr depo_adi"
kapatmak için "pisi dr depo_adi"

komutunu kullanabiliriz. Ben depoyu sileceğim. Bunun için

pisi rr pardus

yazıyorum. Varsayılan depo pardus olarak eklendiği için depo adına "pardus" yazıyorum.

Şimdi iso'daki depoyu sisteme ekleyelim. Bunun için

pisi ar pardus-cdrom /mnt/cdrom/repo/pisi-index.xml.bz2

yazıyoruz. Eğer çıktı olarak Paket veritabanı güncellendi yazarsa depo sorunsuz eklenmiş demektir. Yine de kontrol etmek için "pisi up" komutunu uygulayabilirsiniz. Burada "depo güncelleniyor" kısmında eklediğimiz "pardus-cdrom" yazmalı.

Ağ yöneticisini kurmak için

pisi it NetworkManager

yazıyoruz. Bu işlemden sonra

service NetworkManager start

yazarsak ağ, sorunsuz bir şeklide çalışır. (en azından çalışmalı)

Ağ'ın sorunsuz çalışıp çalışmadığını kontrol etmek için

ping www.google.com

gibi bir adres ile deneyebilirsiniz. Çıkmak için ctrl+c ye basın. Eğer ağ hala çalışmıyorsa sistemi yeniden başlatmayı deneyin. Sistemi yeniden başlatmak için "reboot" komutunu uygulamanız yeterli.

Bu işlemden sonra resmi Pardus depolarında da işlem yapabiliriz fakat indirmiş olduğumuz isodaki paketlerin yeterli olması sebebiyle ben iso üzerinden kurulum yapacağım.

Şimdi sırada grafik sunucusu var. Yani X. Bunun için

pisi it xorg-server
pisi it -c x11.driver

pisi it librsvg libgomp cairo tiff jpeg djvu fftw3 lcms libwmf liblqr

Komutlarını uyguluyoruz. Aslında normalde bu işlemlerden sonra yali'nin açılışta kullanıcı oluşturma vb. işlemleri yapması lazım ama henüz çözemediğim bir sebepten dolayı yali çalışmıyor. (aslında /etc/yali/yali.conf içerisinde installation u firstboot yapınca gelmesi lazım) Çözünce buraya yazarım tekrar. Eğer sistemi yeniden başlattıysanız ve kullanıcı adı soran bir ekran (grafik ekran) ile karşı karşıyayaysanız ctrl+alt gr+f1 ile konsola düşüp root ile oturum açabilirsiniz.

Yalı şimdilik işimizi görmediği için kaldırabiliriz fakat bağımlılıklarını kullandığımız için onları tekrar kuruyoruz:

pisi it yali --reinstall
pisi rm yali

Elle kullanıcı oluşturma da şu şekilde:

adduser kullanici_adi

parolayı belirlemek/değiştirmek için de

passwd kullanici_adi

komutunu uyguluyoruz. Bunun için de root olmamız gerekiyor. Son olarak da bu kullanıcının "su" komutunu uygulayabilmesi için de

usermod -a -G wheel kullanici_adi

komutunu uyguluyoruz.

Şimdi, oluşturmuş olduğumuz pardus-cdrom deposunu kaldırıp resmi pardus deposunu ve lxde deposunu ekleyeceğiz.

Komutlar şu şekilde:

pisi rr pardus-cdrom (ya da pardus-cdrom yerine verdiğiniz depo ismi)
pisi ar pardus-2011 http://packages.pardus.org.tr/pardus/2011/devel/x86_64/pisi-index.xml.xz (eğer eski depoyu silmek yerine kapattıysanız "pisi er depo_adi" ile aktif hale getirebilirsiniz)
pisi ar lxde-repo http://x86-64.comu.edu.tr/lxde/x86-64/pisi-index.xml.xz

(eğer 32 bit kuruyor iseniz x86-64 yerine i686 yazmanız gerekiyor. x86-64.comu.edu.tr adresi aynen kalmalı, sadece sondaki x86-64 değişmeli.)

Bunlardan sonra

pisi up

ile sistemimizi güncelleyebiliriz. Şimdi sırada lxde'yi kurmak var.

pisi it gnome-menus gpicview gtknetcat leafpad libfm lxappearance lxde-common lxde-icon-theme lxde-menu-cache lxdm lxinput lxlauncher lxmenu-data lxpanel lxrandr lxsession lxsession-edit lxshortcut lxtask lxterminal openbox obconf pcmanfm xarchiver

komutu ile gerekli bütün paketleri kuruyoruz. (aslında bunların hepsi bir bileşende olacak o zaman pisi it -c ile kurabileceğiz)

Şimdi sistemimizi yeniden başlatıyoruz. Eğer karşımıza grafik ekran gelirse ctrl+alt gr+f1 ile konsola düşüp root ile giriş yapıyoruz. Sonra

service xdm stop

komutu ile görüntü servisini durduruyoruz. (açılmasa bile kapatalım) Sonra

lxdm

ile LXDE açılış yöneticisini çalıştırıyoruz. Kullanıcı olarak belirlemiş olduğumuz kullanıcı adını ve parolasını girdikten sonra sistem açılıyor.

Eğer dosya yöneticisi çalışmıyor ise:

terminali açın (alt+f2 ile lxterminal)
/tmp/.pcmanfm-socket ile başlayan bir dosya olacak bunu silmek gerekir. Bunun için de

rm -f /tmp/.pcmanfm-socket-*

komutunu uyguluyoruz.

Ses için ise:

gerekli alsa ve pulseaudio modüllerini yüklememiz yeterli fakat yeni kernel (2011 sürümünün son kerneli) ile virtualbox'da sistemi açamadığım için sesi yazmıyorum. Bu halledildiği zaman yazarım. Eğer sistemi güncellediyseniz ve sistem açılmıyorsa diğer seçeneklerdeki eski kernel ile açmayı deneyin (RC kerneli)

Şimdilik bu kadar. Kolay gelsin.

27
Oca
Selamlar,

Herkesin bildiği üzere ÇOMAK ekibi olarak bugün (27 Ocak 2011) sadece LXDE kurulu bir sistem hazırlayacaktık.

Yoğun çalışmalar sonucu, üzerinde cnazar ve service-manager de olan ve sadece LXDE kurulu bir sistem hazırladık.

Şimdilik üzerinde tarayıcı olarak arora var. Geliştirici için gerekli paketler var. (system.devel vs.)

32 bit için olan dosyayı [1] adresinden, 64 bit için olan dosyayı [2] adresinden indirebilirsiniz.

Bu dosyaları indirdikten sonra, VirtualBox'u açıyoruz. VirtualBox'da Dosya->Import Appliance'ye tıklıyoruz. Gelen pencereden Choose'a tıklayarak indirmiş olduğumuz .ova dosyasını seçiyoruz. İleri ve Bitir dedikten sonra VirtualBox gerekli işlemleri yapıyor ve sanal makinayı oluşturuyor.

Bu işlemlerden sonra pardus-lxde-64bit (ya da pardus-lxde-32bit) ile sistemi başlatabilirsiniz.

Şimdilik açılışta LXDM (yani LXDE oturum yöneticisi) otomatik olarak başlamıyor. Bunun için de root ile giriş yapıp (kullanıcı adı: root, parola: pardus) konsola düştükten sonra

lxdm

yazarak LXDM'yi başlatabilirsiniz.

pars adında bir kullanıcı ekledik, parolası da pardus. Bununla giriş yaptıktan sonra LXDE karşınızda olacak.

Eğer ağa bağlanmak ile ilgili bir sorun yaşarsanız konsoldan "root" olduktan sonra

service NetworkManager stop
service NetworkManager start

komutlarını uygularsanız bu sorun çözülüyor.

Bu virtualbox dosyasını, bir önce yazmış olduğum yazıdakileri uygulayarak hazırladık, ekstra yüklediğimiz paketler oldu tabi. Fakat bunlar cnazar, service-manager, polkit-gnome ve diğer geliştirici araçları.

Yetkilendirme ile ilgili bir sorunumuz vardı. Bunu COMAK listesine yazmıştım [3]. Bunun da çözümü yine listede [4]. Yapmamız gereken:

/etc/xdg/lxsesssion/LXDE/autostart dosyasındaki

polkit-gnome yazan satırı

@/usr/libexec/polkit-gnome-authentication-agent-1

olarak düzeltmek ve polkit-gnome paketini kurmak. Bunun için de:

pisi it polkit-gnome

komutunu uygulamamız yeterli. Polkit, zaten system.base paketi olduğu için onu kurmamıza gerek yok.

cnazar paketine [5] adresinden ve service-manager paketine [6] adresinden ulaşabilirsiniz. Ya da svn ile [7] ve [8] adreslerinden çekebilirsiniz.

Emeği geçen herkese teşekkürler.

[1] http://x86-64.comu.edu.tr/lxde/source/pardus-lxde-32bit.ova
[2] http://x86-64.comu.edu.tr/lxde/source/pardus-lxde-64bit.ova
[3] http://liste.pardus.org.tr/comak/2011-January/000094.html
[4] http://liste.pardus.org.tr/comak/2011-January/000096.html
[5] http://svn.comu.edu.tr/websvn/listing.php?repname=Comak&path=%2Fpackage%2Fcnazar%2F&#ac07f244953fac5f228613d566b6b1cc8
[6] http://svn.comu.edu.tr/websvn/listing.php?repname=Comak&path=%2Fpackage%2Fservice-manager%2F&#ab7f287b0b508223aa3ccbff4fd9dec94
[7] svn://svn.comu.edu.tr/gpardus/package/cnazar
[8] svn://svn.comu.edu.tr/gpardus/package/service-manager
9
Oca
Bu sene derslerden 3 tane proje aldık. (aldık = Hepsinde ev arkadaşım Engin Manap da var.)

Öncelikle bütün projelerimize proje depo sayfamızdan ulaşabilirsiniz.[1] Ve hepsini SVN ile geliştirdik.

1. Veritabanı Yönetim Sistemleri (DBMS) Dersi Projesi - bmforum

Projenin asıl amacı veritabanını anlamak. Veritabanını kullanmak. Bunun için ne ile yazıldığı, nasıl olduğu önemli olmayan ama mutlaka veritabanı kullanılan bir proje yapmamız istendi. Ev arkadaşım da bu yaz yapmış olduğu stajda django ile beyin2'yi [2] geliştirdiği için django ile yapmaya karar verdik. Ve basit bir proje yaptık. Projeye [3] adresinden ulaşabilirsiniz. [3] adresinde bmforum/ dizininin (yani bmforum/bmforum oluyor) içerisi projenin tamamını kapsıyor. [3] adresindeki diğer dosyalar, projenin R diyagramı ER şeması vs.

Proje çok da karmaşık bir şey değil. Hedef öğrencilerin paylaşım yapabileceği bir portal. Özellikleri, forum (kişisel mesaj vs. de var), proje ekleyebilme, ders notu ekleyebilme, sınav soruları ekleyebilme ve bunların akabinde öğretmen, ders ekleyebilme. Forumda genel bilgi paylaşımı oluyor. Diğer ders notu, sınav ve projelerde ek dosya da gönderilebiliyor. Şekil açısından pek başarısız. Bir de gezegen ekledik ama sadece blog adreslerini listeliyor. O işi yapacak botu yazmadık. Veritabanı olarak da derste de anlatılan veritabanı olan PostgreSQL kullandık.

Bu proje bu şekilde.

2. Görsel Programlama Dersi Projesi - medyaindeksleme

Bu dersin projesinin amacı da java ile görsel programlamayı öğrendiğimizi uygulamak. (evet maalesef java)Dersin hocasının da tercih ettiği ve derste kullandığı eclipse'yi kullandık. Yaptığımız projede veritabanı da kullandık. Bu sefer MySQL kullandık. Projenin amacı medya indeksleme yapmak. Yani elinizdeki medyaları (cd, dvd vs.) bilgisayara teker teke takıp, listeden istediğiniz dosyayı seçip, medya numarası vererek veritabanına kaydediyorsunuz. Bu sayede de bir medyanın içerisinde ne olduğunu kolaylıkla takip edebiliyorsunuz, ya da aradığınız dosyanın hangi medyada olduğunu kolaylıkla bulabiliyorsunuz. Projenin özellikleri arasında yazdırma da var. Projeye [4] adresinden ulaşabilirsiniz.

Ve son olarak da

3. Çevik Yazılım Geliştirme Dersi Projesi - tist

Bu dersin projesi de aslında basit bir proje olacaktı, dvd kiralama programı gibi. Fakat bu ders seçmeli olduğu için ve bir şeyler öğrenelim diye aldığımız için ben derste çıkıp, hocam eğer bir proje yapacaksak daha düzgün bir şeyler öğrenebileceğimiz bir şeyler yapalım dedim ve öneri olarak da sürüm takip sistemi yapalım dedim. O da tamam siz yapın o zaman dedi. :) Ve bunun üzerine çalışmalara başladık.

Sürüm takip sistemi yapıyorduk. Java kullanmamız gerekiyordu (yine maalesef) ve çevik yazılım geliştirme pratiklerini kullanarak yazmalıydık. En basitinden test güdümlü geliştirme. Merkezi sürüm takip sistemi[5] yazmaya karar verdik. (SVN gibi) Ve dönem sonunda projemizi tamamladık. Şu an için, sunucu ve istemci için ayrı çalıştırılabilirler (jar dosyaları) var.

Sunucu ilk çalıştırıldığında hangi dizin üzerinde çalışılacağını soruyor ve bunu ayarlar.cfg dosyasına revizyon numarası (başlangıçta revizyon numarası 1 oluyor) ile birlikte kaydediyor. İleride de buradan çekip kullanıyor.

İstemci ise çalıştırıldığında verilen ip'yi (mesela "tist getir 192.168.1.5") bulunulan dizinde ".tist" adında bir dizin oluşturup onun içerisine sunucu.txt isminde bir dosyanın içerisine yazıyor.

Diğer kısımlar da şu şekilde çalışıyor, istemci sunucuya revizyon isteği gönderiyor (ya son ya da istediği revizyon) sunucu da ona göre gerekli diff dosyalarnı birleştirip yolluyor. Bu diff dosyalarını sunucudaki projenin ana dizinindeki "Deltas" dizini içerisindeki dosyaları birleştiriyor bunları geçici "Temp" dizinine koyduktan sonra sıkıştırıp istemciye yolluyor ve bu sıkıştırılmış dosyayı siliyor. İstemci, sunucuya yeni revizyonu yolladığı zaman (commit) bunları sıkıştırıp (Zipleyip) proje dizinindeki ".tist" dizininin içerisine atıyor. Sonra sunucuya yolluyor ve o sıkıştırılmış dosyayı siliyor. Sunucu bunu alıp "Temp" dizinine açıyor. Son revizyonu da "Head" dizinine "Deltas" dizinindeki diff dosyalarını birleştirerek koyuyor. Zaten "Head" dizininde son revizyon olduğu için (yollamadan önceki son revizyon) "Head" ile "Temp" dizinini karşılaştırıp gerekli diff dosyalarını en sonunda revizyon numarası olacak şekilde (x.txt.delta.r12 gibi) "Deltas" dizinine koyuyor.

Şimdilik bilinen sorunları, eğer bir dosyayı silersek ve silindikten sonraki revizyonu istersek, dosyayı boş olarak yolluyor. Bir de başlangıç işlemlerinde dizin isimlerinde "Slash"'ları düzgün vermek gerekiyor. Fazladan konulursa (hatta en sona da konulmaması gerekiyor) sorun yaratıyor.

Son projeye de [5] adresinden ulaşabilirsiniz. [5] adresine girdiğinizde projeamaclari.txt ve iterasyonlar.txt diye ayrı iki dosya daha göreceksiniz. Bunlarda ders ile ilgili raporlar diyebiliriz. "tist" dizini projenin tamamını içeriyor.

Bu proje için bir de ant dosyası oluşturduk(build.xml). Tabi bunları yapabilmek için Pardus'da "ant" paketinin kurulu olması gerekiyor. Bu dosyayı oluştururken yaşadığımız bir sorun vardı, gerekli kütüphaneleri bulamıyordu. Hata çıktısı da şu şekildeydi:

BUILD FAILED
/build/xml/yolu/build.xml:31: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/opt/sun-jdk/jre"

Bunun için de build.xml'e sağ tıklıyoruz, (soldaki menüden) run as -> external tools configurations'a giriyoruz. Buradan solda eğer Ant Build'in altında bir şey yoksa Ant Build'e çift tıklıyoruz varsa ona tıklıyoruz. Üstteki sekmelerden Classpath'i seçiyoruz. Burada herhangi bir yere sol tıkladıktan sonra (mesela User Entries) add external JARs'a tıklıyoruz. Buradan /opt/sun-jdk/lib/tools.jar'ı ekliyoruz. Eğer başka ayrı kütüphaneler kullandıysanız (mesela biz junit kullandık) bunu da eklemeniz gerekiyor. Bunun için de tekrar add external JARs'a tıklayıp /usr/share/java/junit.jar'ı ekliyoruz. Ve tekrar ant build işlemini başlatıyoruz. Ve tamamlanıyor.

Özet olarak projelerimiz bu şekilde. Her türlü yorum/öneri/eleştirilere açığız. Gördüğünüz sorunları [1] adresine issue girebilirsiniz.

8
Oca
Bütün sene içerisinde yoğun olduğum projeleri yapabilmemiz için eclipse'ye ihtiyacımız oldu. (Hocaların da çoğu eclipse'yi övüyor/öneriyordu.) Bunun için eclipse'yi kurdum ama yetmedi. 
 Öncelikle aldığım ders olan Çevik Yazılım Geliştirme (Agile Programming) gereği test güdümlü geliştirmemiz gerekiyordu. Bunun için de junit gerekiyordu. Pardus için olan paketini buldum ve kurdum fakat eclipse'in umurunda olmadı bu. Çözüm olarak, projeye dışardan jar ekleyerek (junit.jar'ı) çözdüm bu sorunu. Bu nasıl oldu: Projeye sağ tıklayıp oradan özellikler, java inşa yolu, üstteki sekmelerden kütüphaneler, oradan sağdaki dışarıdan jar ekle'ye tıklıyoruz. Oradan da /usr/share/java/junit.jar'ı seçiyoruz. Ve böylece bu sorun çözülüyor.
 Bende eclipse İngilizce, sizde de öyleyse yukarıda anlattığım yol şu şekilde oluyor. Projeye sağ tıklayıp oradan properties, oradan java build path, üstteki sekmelerden libraries, sağdaki butonlardan add external jar'a tıklıyoruz. Buradan da yine /usr/share/java/junit.jar'ı seçiyoruz.
 Bununla ilgili olarak, o zamanın eclipse paketinin bakıcısı olan Mete Alparslan'a eposta yolladım fakat o da sanıyorum ki Yalı ile uğraştığından dolayı pek fazla ilgilenemedi ve zaten eclipse paketinin bakıcısı da değişti. (zaten o zaman da yayımı güncelleyen de Mete değildi) Şu an yeni sürüm yayınlandı, isimler değişti. (bütün eclipse  paketlerindeki binary takıları atıldı.[1]) Bunun üzerine tekrar denemeler yapıp, eğer yine aynı işleri yapmak gerekirse bunu da bildireceğim. 
 Bunun haricinde de yaptığımız projeleri bir depoda tutuyoruz[1]. Bunun için de eclipse için svn'e ihtiyacımız var. Bunun için de eclipse eklentisi olan subversive'yi seçtim. Bunun için help->Install new software'ye giriyoruz. (Türkçesi sanırım yardım->yeni yazılım yükle) Aslında burada eclipse'in asıl deposunun olmasını bekleriz ama yok. (en azından eskisinde yoktu) Son hallerinde de durum böyleyse bakıcısına bildireceğim. Yandan add'e tıklayıp address (adres) kısmına:
 http://download.eclipse.org/releases/helios
 yazıyoruz. Name (isim) kısmına Helios vs. yazabiliriz. Bunu yaptıktan sonra Ok diyoruz. Orada  --All available sites-- (Türkçesi bütün mümkün siteler olabilir) i seçtiğimizde (üstteki work with yazan yerin yanındaki combobox'dan (açılır kutu)) bir güncelleme yapacak. (depodaki yüklenebilir paket vs.leri getiriyor ve bu işlem biraz uzun sürebilir). Arama kısmına "svn" yazıyoruz. Altta liste şeklinde çıkan seçeneklerden "Subversive SVN Team Provider (Incubation))" ya da buna en yakın olanını (subversive, svn team provider gibi şeyler olsun) seçin. Gerekli lisansı kabul etmenizi istedikten sonra indirip kuruyor. Kurulum tamamlandıktan sonra yeniden başlatmanızı isteyecek, yeniden başlattıktan sonra da ya başlarken ya da svn'den yeni proje çekmek istediğinizde svn connector kurmanızı isteyecek. SVNKit 1.3.2 yi tavsiye ederim. Eğer bunu seçtiğinizde kurulmuyorsa (ki bende böyle oldu) ve hata oluştu gibi bir hata veriyorsa endişelenmeyin. Yine help->install new software'ye girin. Add butonuna basın isim kısmına "svn connector" vb. isimler yazabilirsiniz. Adres kısmına da aşağıdaki adresi yazın:
 http://community.polarion.com/projects/subversive/download/eclipse/2.0/helios-site/
 Aslında bu siteyi eklemeden önce "Available Software Sites" e tıklayıp oradan 
 Update Site http://community.polarion.com/projects/subversive/download/eclipse/2.0/update-site/  Enabled
 yazan satırdaki işareti kaldırmamız iyi olur. Çünkü SVN connectorları buradan kurmaya çalışıyor. Bu da sorun yaratıyor.
 Sonra daha önceden --All available sites-- seçtiğimiz yeri açıp oradan yeni eklediğimiz ismi ve adresi bulup onu seçiyoruz. Arama bölümüne yine "svn" yazıyoruz. Buradan SVNKit 1.3.2'yi bulup işaretleyin. (zaten 1.3.3 mevcut ama onda bir sorun var, yüklenemiyor bu yüzden yukarıdaki siteyi seçiyoruz) Sonra yine lisansı kabul ettikten sonra indirip kuracaktır. Bu işlem bitince eclipse'yi yeniden başlatmanızı isteyecektir. Yeniden başlattıktan sonra "svn" çalışıyor olmalı. SVN'den yeni bir proje çekmek için yeni proje dedikten sonra listeden  SVN->Project from SVN e tıklayın. adresi girdikten sonra gerekli işlemleri halledin (hangi revizyon olacağı, ne isimde çekileceği vs.) ve bu kadar. Eğer doğru çekebildiyseniz sorun yok demektir. SVN başarı ile kurulmuştur. 
 Commit, update vb. işlemler için projeye sağ tıklayın, team kısmına gidin, her şey orada :).
 Eğer güncelleme sırasında (update) 'Refreshing external folders' has encountered a problem yazıyor ve detaylarda da Null Pointer Exception yazıyorsa bundan endişelenmeyin ve OK diyin. Böyle bir sorun var ama sanırım ilerideki sürümlerde düzelir umarım.
 [1] http://liste.pardus.org.tr/gelistirici/2011-January/027309.html
Necdet Hoca'nın Macbook Air'i geldikten sonra, zaten şekil olarak gayet beğendiğim (her ne kadar "konsolcu" olsam da) alttaki "Dock" u görünce, ya bunun bir de linux versiyonu vardı neydi o diye araştırmalara başladım ve buldum. Cairo-Dock[2]. Aslında bunun haricinde bir tane de Daisy[3][4] var. Daisy direkt olarak KDE uygulamacıklarına da eklenebiliyor ama hem yeterince yetenekli/başarılı/şekilli bulamadım hem de aradığım tam olarak öyle bir şey değil. Daisy'i de yeterince denedim aslında ama olmadı :).
Şu an Cairo-Dock'u da grafik kartı sorunları nedeniyle kullanmıyorum, ne olur ne olmaz. Kurulumlarından bahsedeyim biraz. (şimdilik burada bahsedeceğim ama ileride paketini yapabilirim :))
Daisy, zaten bir plasma. Kurulumu çok kolay ama programcık ekle'den yeni programcık al diyerek bulamadım ben. [3] adresinden tarball'ını indirdim. Sonra bu tarball'ı açıp, açılan dizine girdim. Burada 
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX='kde4-config --prefix'
make
sudo make install
komutlarını sırayla uyguladım. Sonuç olarak Programcıklar listesinde Daisy gözüktü ve oradan istediğim yere Daisy'i ekleyebiliyordum. Bu kadar :) Tabi bunu kurabilmek için, gerekli derleme araçlarının olması gerekiyor. (cmake vs. ve yanlış hatırlamıyorsam kdelibs-devel)
Cairo-Dock'un kurulumu benim için daha zahmetli oldu. Öncelikle [5] ve [6] adreslerinden cairo-dock-core ve cairo-dock-plugins in son hallerini indiriyoruz.
Yine cairo-dock için de bağımlılıklar çok önemli. Bunda yaşadığım bir sorun da şöyleydi: gtkglext paketine (ve gtkglext-devel) ihtiyaç duyuyordu. Pardus 2011 depolarında böyle bir paket yok, 2009'dan çekip derleyip kurdum fakat çalışmıyor. Sorun, undefined_symbol'müş. Bunun için diğer dağıtımlara baktım. Debian bununla ilgili bir yama almış[7]. Bununla beraber paketi de depoya aldım[8]. Aslında bu sorun 2009'da yok. Çünkü gdk-pixbuf/gtk güncellemesinden sonra kırılmış bu. Eklediğim yama da bunu düzeltiyor. Bundan sonra da gerekli diğer bağımlılıklar şu şekilde olmalı: 
cairo-devel, 
gtk2-devel, 
gdk-pixbuf-devel (bundan tam emin değilim), 
librsvg-devel, 
libgnomeui-devel, 
vte-devel, 
libXxf86vm-devel, 
alsa-lib-devel (bundan da tam emin değilim), 
libasound-devel (ya da asound{-lib}-devel, fakat bu paket Pardus 2011 Deposunda yok), 
libXtst-devel, 
gnome-menus-devel (bu paket de Burak Çalışkan'ın Gnome deposunda[1] mevcut), 
freeglut-devel (bu paket ayrıca gtkglext'de de var. 2009 da bu paketin ismi glut, 2011 de freeglut oluyor.),  
libetpan-devel (bu paket de Pardus 2011 Deposunda yok), 
libxklavier-devel, 
webkit-gtk-devel (sanırsam bu olmalı, webkit e gerek duyuyor), 
libexif-devel.
bir de XFCE için libthunar-devel ve diğerleri için gnome-vfs-devel istiyor. libthunar-devel ya da thunar-devel depoda yok. gnome-vfs-devel depoda mevcut.
Diğerler bağımlılıklar da system.devel bileşeni içerisinde (curl-devel, cmake, dbus-glib-devel, libX11-devel vb. araçlar) mevcut.
Bunların hepsinin kurulduğundan eminsek,
[7] adresinden indirdiğimiz tarball'ı bir yere açıyoruz ve içerisine giriyoruz (cairo-dock-X.X.X)
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make ( ya da make -j $(grep -c ^processor /proc/cpuinfo) )
sudo make install
Ve temel paket kuruluyor. Buradaki make satırında parantez içerisindeki yazan komut ile bütün işlemcilerin kullanılması sağlanıyor. 
Bunun üzerine bir de eklentileri kurmak için de, [8] adresinden indirdiğimiz tarball'ı açıyoruz ve içerisine giriyoruz (cairo-dock-plugins-X.X.X)
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make ( ya da make -j $(grep -c ^processor /proc/cpuinfo) )
sudo make install
Aslında bu da temel kurulumun aynısı. Bunlardan sonra direkt cairo-dock'u çalıştırabiliriz.(/usr/bin/cairo-dock) Bunun için Alt+f2 uygundur. :)
Afiyet olsun.
Pardus 2011'de medya oynatıcılar ile ilgili bir sorunum var. (Aslında müzik oynatıcılar)

Elimde biraz iyi bir müzik arşivim var. (1TB ye yaklaştım sanırım) Bunların da arasında tek tek, dizin dizin dolaşmak (her ne kadar baş_harf/sanatçı/albüm/şarkı olarak yapmış olsam da, mesela C/Camel/1996 - Rajaz/04 - Rajaz.flac) biraz sıkıcı olabiliyor. Onun yerine koleksiyondan Rajaz yazınca direkt bunun çıkmasını bekliyorum. Bunun için zaten kullanıyor olduğum Amarok üzerinden koleksiyon oluşturdum. Zaman geçti, artık Amarok arşivimdeki bir şeyi beğenmiyor ki %49 civarında kalıyor. Çok fazla deneme imkanı da bulamadım ama sorun var gibi. Bütün koleksiyonu baştan taradı. (ki bu bayağı bir vakit alıyor, tam hatırlamıyorum ama 1 saatten fazla) Ve bu sorun tekrar tekrar aramasında devam ediyor. (Aslında araçlar->tercihler->koleksiyondaki kütüphanedeki değişiklikleri izle'yi işaretlediğim zaman ya da Settings->Configure Amarok->Collection->Watch folders for changes'i , aradığında bu sorun ortaya çıkıyor) Halbuki amarokcollectionscanner Komutu ile taradığım zaman sorun olmuyor. Neyse bunu biraz daha zamanım olduğu zaman detaylı araştırıp, gerekirse hata gireceğim.

Bu hatalar sonucu depoda bulunan Clementine'i deneyeyim dedim. Bunda her şey çok güzel. Amarok 1.4 görmek süper bir şey fakat bu sefer de müziklerin bilgilerindeki kodlamalar ile ilgili bir sorun var. Yani Türkçe karakterleri düzgün okuyamıyor. Benim müziklerimden mi yoksa paketteki bir eksiklikten mi tam çözemedim ama bunda da böyle bir sorun var gibi. Tam olarak sorunun bu olduğundan emin olduktan sonra, çözümünü de araştırıp bununla ilgili bir çözüm ya da hata girdisi yaparım.

Clementine seçeneğini de tükettikten sonra geriye rhythmbox kalıyor. Pardus'un resmi depolarında yok fakat Burak Çalışkan'ın deposunda [1] bu paket mevcut. Buradan da rhythmbox'u kurdum. Bu sefer de diskteki bütün medyaları tarıyor. Ve bir türlü bunun önüne geçemedim. Milyonlarca medya buluyor ve taraması yıllar alacak gibi geldi bana birden. Elle dizin verdiğim zaman da nedense baştan tarıyor vb. sorunlar var. Yani sonuç olarak elimdeki sorunu çözemedim. Peki şu an ne mi yapıyorum? Dersler, Projeler vs. çok yoğun olduğu için bunlarla uğraşmayı bıraktım. Amarok'tan koleksiyon izlemeyi kapatıp öyle kullanıyordum. Fakat öyle de bir sürü ID3TAG ları yanlış alıyor. Yani başka bir sanatçı/albüm/şarkı gözüküyorken alakasız birini dinliyor oluyorsunuz. Şu an mesela Clementine'den dinliyorum :)

Bunlar ile ilgili sorunları çözdüğüm zaman ya da bir değişiklik olursa yine buraya yazarım. Umarım benim düzeltebileceğim bir şey çıkar. Olmadı zaten hata açarım, hallolur. :)

Pardus 2011'de yaşadığım sorunlardan en önemlisi Xserver ile ilgiliydi. Eskiden çok nadir (2-3 haftada 1) bir sorunum oluyordu. Artık her gün olmaya başladığında önemli olduğunu fark edip onunla ilgilendim. Sorun şu şekilde: Belirli bir zamanda bilgisayardaki grafik olan her şey donuyor sadece fare hareket ediyordu. Ve uzaktan ssh ile bağlandığım zaman her şeyin sorunsuz çalıştığını görüyordum. Tabi bu durumda uzaktan bağlandığım bilgisayardan kontrol ettim. /usr/bin/X, işlemciyi %100 kullanıyordu. Bunun üzerine grafik kartı ile ilgili bir sorun olabileceğini düşündüm. Bu arada grafik kartım Nvidia Geforce 310M. Ssh ile X i öldürüp yeniden başlatayım (service xdm restart ya da) dedim fakat böyle de sorun çözülmedi. Aslında sorun, grafiksel olarak fazla şeyler kullandığım zaman ortaya çıkıyordu. OpenGL ile ilgili bir şey gibi geldi bana. Neyse, bununla ilgili buzillaya hata girdim [1]. Fatih Aşıcı'nın da yardımıyla kernel parametresi olarak blacklist=nouveau yaparak bunu çözdüm. Hatanın çözümünü yaparken /var/log altındaki Xorg.0.log dosyasına ve Xorg.0.log.old dosyasına baktım ve
[  2079.377] [mi] EQ overflowing. The server is probably stuck in an infinite loop.
Satırını gördüm. Bu sorun şu an halledilmiş durumda fakat hala X bazen işlemciyi çok fazla kullanıyor. Ama yeni sürücü ile halledilir gibi geliyor bana. Kernel parametresi olarak verdiğimiz blacklist=nouveau ise açık kaynak kodlu nvidia sürücüsü olan nouveau'yu değil de kapalı kaynak olan nvidia-current sürücüsünü kullanıyor. Bunun yerine zorg ile 
zorg -d "nvidia-current" 
yapmak bir işe yaramıyor. Çünkü şu anki haliyle zorg sürücüyü değiştirmiyor. Doğru sürücü otomatik olarak seçildiği için, kernel parametresiyle öbürünü engellemeniz ya da elle xorg.conf oluşturmanız gerekiyor. Geliştirici listesinde de zorg'un tekrar sürücü seçebilme yeteneği tartışılıyor[2]. Tabi ki [1] adresinde girdiğim hatayı oraya da çözümü yazarak, çözdükten sonra kapattım. Fakat bu çözüm başka kişilerde işe yaramadığından hata tekrar açıldı. Yani bu yöntemin %100 işe yarayacağını söyleyemem. Gelişmeler için [1] adresini takip edebilirsiniz.
[1] http://bugs.pardus.org.tr/show_bug.cgi?id=15756
[2] http://liste.pardus.org.tr/gelistirici/2011-January/027264.html
Herkese mutlu yıllar,

Uzun zamandır buraları boş bıraktım. Bu aralar da bayağı bir yoğunluk var ama artık buralara bir şey yazmadıkça kötü hissetmeye başladım. 2011 de buraları boş bırakmayı düşünmüyorum. Zaten Çomak projesi yeterince doldurur gibime geliyor.

Neyse, staj projem olan guestlogin ile başlayayım.

Aslında bu yazıyı bayağı önceden yazmam gerekiyordu. Pardus-Geliştirici listesinde de tartıştığımız[1] üzere, guestlogin'e açılıp kapatılmasıyla ilgili bir özellik ekledim.

Bunlardan ilki guestlogin.conf dosyasına enabled'i eklemek oldu.

eğer enabled=false ise modül çalışmayacak. bunu eklemek için de diğer değerleri nasıl okuyorsam onun gibi 1-2 satır ekledim. Yani:
        guest_enabled = config.get('guest', 'enabled')         if guest_enabled == '':             guest_enabled = "true"
gibi oldu. Buradan da anlaşılacağı gibi, eğer değer boş bırakılsa da true oluyor.
Varsayılan guestlogin.conf dosyasında da o satır (ve yorum satırı) şu şekilde:
# If it is false, module will not work. (default is true) enabled = true
Bu işlemlerle birlikte bu sorunu halletmiş oldum. Şimdi bu proje ile ilgili geriye:
1. Bugzilla'da girilmiş bir hata[2]
2. KDM'ye bir buton eklemek.
2. sine bu aralar yine uğraşmayı düşünüyorum. Biraz uğraştım fakat araya sınavlar vs. girdi bu yüzden biraz ilgisiz kalmak zorunda kaldı. Eğer yapabilirsem çok süper olacak bence.
1. si için de pam kullanmam gerekiyor, onu uygulamak çok da kolay olmayacak ama 2. si daha öncelikli olduğu için 1 den önce onu halletmem gerekiyor.
Şimdilik guestlogin ile ilgili gelişmeler bu kadar. KDM'ye buton eklemek kısmıyla ilgili gelişmeleri de buraya aktarırım.
Diğer paketlerden bahsetmek gerekirse,
Evet, biliyorum Clanlib2'yi paketleyeceğim fakat çözemediğim zilyon tane hatası var. (undefined symbol vb.)Bunları halletmeden de review'e sokmak istemedim açıkçası. Onun haricindeki bütün sorunları hallettim, aslında biraz daha uğraşıp eğer olmaz ise review'e bu haliyle sokmayı düşünüyorum. Oradan gelen yardımlarla çözmek kolaylaşır gibi.
Clanlib2 haricinde, bir de gmailfs'i almıştım. O da eskiden çalışıyorken, şu aralar çalışmıyor, sanırım glibc güncellemesi sonucu patladı o. Zaten pek sağlıklı bir paket değildi ama bir ara bunu da gmailfs geliştiricisine bildirmeyi düşünüyorum. (sanırım o da pek ilgilenmiyor artık projeyle, bayağıdır güncellemiyor)
Ayrıca, fish paketini de üstüme aldım. Fish bir kabuk. Bence çok da güzel bir kabuk olmuş. Mesela "cp -" yazıp taba iki kere bastığınızda size hangi parametrelerin (cp için) ne işe yaradığını söylüyor. Tab tamamlaması bu konuda çoğu şeyde böyle davranıyor. Mesela "man"'ın yorumları da gayet iyi. "ls" yaparken dosyanın tipini de söylüyor. Şu anda review'da paket. Eklemek istediğim şeylerden birisi buna pisi'de tamamlama desteği. Başka tamamlamalar da eklenebilir tabi ama öncelik bu şimdilik.
Necdet Hoca'dan python-PyMT paketini aldım. 2009'da bulunan bu pakette açık bir hatası bulunuyor.[3] Hatayı çözdüm. mtdev adlı kütüphaneyi de paketlemek gerekiyormuş. Bunu da paketleyip, hatayı kapatmayı düşünüyorum.
Hermes paketini de üstüme aldım bu arada. :)
ÇOMAK projesi ile birlikte Fluxbox paketleriyle de uğraşıyorum. Biraz eksiklikler var tabi ama çok düzgün olmasa da fluxbox'u çalıştırmayı başarabildim :)
[1] http://liste.pardus.org.tr/gelistirici/2010-November/026568.html
[2] http://bugs.pardus.org.tr/show_bug.cgi?id=14233
[3] http://bugs.pardus.org.tr/show_bug.cgi?id=15793
30
Eki

Bir önceki yapmış olduğumuz testin ise görselleri şu şekilde:

Qt:


Gtk:




Tekrar Merhaba,

Daha önce yapmış olduğumuz testlerin yanına bir de daha fazla görsellik içeren uygulamanın testini yaptık.

Bilgisayarların teknik özelliklerini tekrar yazıyorum.

Pardus 2009 Gnome ve 2011 Kde yüklü bilgisayarlarda 4GB RAM Intel Core i3 310 işlemci, Pardus 2009 Kde yüklü bilgisayarda İntel Core Duo T2370 @ 1.73 işlemci, 2GB RAM bulunmakta, Ubuntu yüklü bilgisayarda
6GB RAM, Intel Core 2 Duo E6420 @ 2.8Ghz işlemci var.

Pardus 2009'da Python 2.6.5, Qt 4.7.3, Gtk 2.16, Pardus 2011'de Python 2.7, Qt 4.8_20100928, Gtk 2.16, Ubuntu 10.10'da Python 2.6.6, Qt 4.7.4, Gtk 2.21 var.

[0] adresindeki dosyadaki;

2009gnometest dizininde -> Pardus 2009 yüklü, Python 2.6.5, Qt 4.6.3, Gtk 2.18.9
bulunan bilgisayardaki test sonuçları,
2009kdetest dizininde -> Pardus 2009 yüklü, Python 2.6.5, Qt 4.6.3, Gtk 2.18.9
bulunan bilgisayardaki test sonuçları,
2011kdetest dizininde -> Pardus 2011 yüklü, Python 2.7, Qt 4.7.0, Gtk 2.22.0
bulunan bilgisayardaki test sonuçları,
ubuntutest dizininde -> Ubuntu 10.10 yüklü, Python 2.6.6, Qt 4.7.4, Gtk 2.21
bulunan bilgisayardaki test sonuçları bulunmaktadır.

Bu dosyalardaki;
fr_idle_qt.txt, fr_idle_gtk.txt dosyaları bilgisayarların boştaykenki free çıktıları,
ps_idle_qt.txt, ps_idle_gtk.txt dosyaları bilgisyarların boştaykenki ps aux çıktıları,

dosyalardaki idle yerine run1 olanlar betikler ilk kez çalışıyorkenki çıktılar, run2 olanlar ise ikinci kez çalıştırdığımızdaki çıktılar.
end1 olanlar betikler ilk kez kapatıldıktan sonraki çıktılar, end2 olanlar ise ikinci kez kapatıldığındaki çıktılardır.

Ayrıca /proc/$PID/status dosyaları da comak-test-gtk-status.txt ve comak-test-qt-status.txt olarak bulunmaktadır.

---------------------------------------------------------------------------------

Bunların yorumlanmış hali ise şu şekilde:

Pardus 2009 Gnome bilgisayarında:

QT için:

ps aux çıktısı:

1226 2.1 0.7 52168 23948 pts/1 S+ 21:46 0:00 python comak-test-qt.py

free çıktısında:

çalışırken 14MB civarı bellek kullanıyor. Kapattıktan sonra ise 8MB fazla gözüküyor.
Yani betik kapatıldığında sadece 6MB sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa, çalışırken 8MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı belleğin 7MB'sini boşaltıyor.

GTK için:

ps aux çıktısı:

1207 0.5 0.4 25528 15272 pts/1 S+ 21:39 0:00 python comak-test-gtk.py

free çıktısında:

çalışırken 5MB civarı bellek kullanıyor. Kapattıktan sonra ise 5MB civarı fazla gözüküyor.
Yani betik kapatıldığında neredeyse tamamı bellekte duruyor.

Eğer aynı uygulama tekrar çağırılırsa, çalışırken üzerine nereyse hiç bellek kullanmıyor.
Kapattıktan sonra ise toplam kullandığı 5MB belleği tamamen boşaltıyor.

Pardus 2011 Kde bilgisayarında:

QT için:

ps aux çıktısı:

1604 1.8 0.7 295232 31116 pts/2 S+ 23:09 0:00 python comak-test-qt.py

free çıktısında:

çalışırken 12MB civarı bellek kullanıyor. Kapattıktan sonra ise 2MB fazla gözüküyor.
Yani betik kapatıldığında sadece 10MB'sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa, çalışırken 12MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı belleğin 11MB'sini boşaltıyor.

GTK için:

ps aux çıktısı:

1617 0.2 0.9 332536 36980 pts/2 S+ 23:19 0:00 python comak-test-gtk.py

free çıktısında:

çalışırken 26MB civarı bellek kullanıyor. Kapattıktan sonra ise 13MB ye yakın fazla gözüküyor.
Yani betik kapatıldığında kullandığı belleğin 13MB'sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa, çalışırken 14MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı belleğin tamamını boşaltıyor.

Ubuntu bilgisayarında:

QT için:

ps aux çıktısı:

engin 2060 1.1 0.5 361104 32268 pts/1 Sl+ 21:31 0:00 python comak-test-qt.py

free çıktısında:

çalışırken 31MB civarı bellek kullanıyor. Kapattıktan sonra ise 20MB fazla gözüküyor.
Yani betik kapatıldığında sadece 11MB'sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa, çalışırken 12MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı belleğin 11MB'sini boşaltıyor.

GTK için:

ps aux çıktısı:

2073 1.3 0.4 323416 24540 pts/1 Sl+ 21:25 0:00 python comak-test-gtk.py

free çıktısında:

çalışırken 13MB civarı bellek kullanıyor. Kapattıktan sonra ise 1MB ye yakın fazla gözüküyor.
Yani betik kapatıldığında hemen hemen hepsini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa, çalışırken 12MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 12MB belleğin 10MB ini boşaltıyor.

Pardus 2009 Kde bilgisayarında:

QT için:

ps aux çıktısı:

1620 0.6 1.0 72652 21608 pts/2 S+ 21:27 0:00 python comak-test-qt.py

free çıktısında:

çalışırken 16MB civarı bellek kullanıyor. Kapattıktan sonra ise 11MB fazla gözüküyor.
Yani betik kapatıldığında sadece 5MB'sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa, çalışırken 12MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 12MB belleğin 5MB ini boşaltıyor.

GTK için:

ps aux çıktısı:

1448 2.7 0.7 25388 15344 pts/2 S+ 21:37 0:00 python comak-test-gtk.py

free çıktısında:

çalışırken 23MB civarı bellek kullanıyor. Kapattıktan sonra ise 19MB fazla gözüküyor.
Yani betik kapatıldığında sadece 4MB'sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa, çalışırken 9MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 9MB belleğin 3MB ini boşaltıyor.

Bu sonuçların görselleştirilmiş halleri ise şu şekilde:

Bu testin sonuçlarının, bir önceki hello world testine göre biraz daha farklı olduğunu fark ettikten sonra her 2 testi de bir kez daha yaptık. Fakat değişen bir şey yok. Değerler hakikatten buna çok yakın. Bir gariplik var evet, incelemeye devam...

[0] http://www.mesutcankurt.com/dosyalar/comak-testler2.tar.bz2

29
Eki

Merhabalar,

ÇOMAK projesinde hangi teknolojiyi kullanacağız sorusu bizi bu karşılaştırmaya itti: Qt vs. Gtk+

Bu konuda daha önce karşılaştırma yapanlar da var.[1], [2], [3]

Bizim Karşılaştırmamız:

[0] adresindeki dosyadaki;

2009gnometest dizininde -> Pardus 2009 yüklü, Python 2.6.5, Qt 4.6.3, Gtk 2.18.9
bulunan bilgisayardaki test sonuçları,
2011kdetest dizininde -> Pardus 2011 yüklü, Python 2.7, Qt 4.7.0, Gtk 2.22.0
bulunan bilgisayardaki test sonuçları,
ubuntutest dizininde -> Ubuntu 10.10 yüklü, Python 2.6.6, Qt 4.7.4, Gtk 2.21
bulunan bilgisayardaki test sonuçları bulunmaktadır.

Ayrıca bir bilgisayarda daha test yaptık. Bu bilgisayarın özellikleri;
İntel Core Duo T2370 @ 1.73 işlemci, 2GB RAM bulunmakta.

2009kdetest dizininde -> Pardus 2009 yüklü, Python 2.6.5, Qt 4.6.3, Gtk 2.18.9
bulunan bilgisayardaki test sonuçları bulunmaktadır.

Bu dosyalardaki;
fr_idle_qt.txt, fr_idle_gtk.txt dosyaları bilgisayarların boştaykenki free çıktıları,
ps_idle_qt.txt, ps_idle_gtk.txt dosyaları bilgisyarların boştaykenki ps aux çıktıları,

dosyalardaki idle yerine run olanlar betikler çalışıyorkenki çıktılar,
end olanlar ise betikler kapatıldıktan sonraki çıktılar.

Bunların yorumlanmış hali ise şu şekilde:

Pardus 2009 Gnome bilgisayarında:

QT için:

ps aux çıktısı:

17848 0.9 1.5 117004 48208 pts/0 S+ 22:16 0:00 python pyqt-hello.py

free çıktısında:

çalışırken 46MB civarı bellek kullanıyor. Kapattıktan sonra ise 21MB fazla gözüküyor.
Yani betik kapatıldığında sadece 25MB sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa,
çalışırken 23MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 23MB belleği tamamen boşaltıyor.
GTK için:

ps aux çıktısı:

1264 0.4 0.4 23856 13976 pts/0 S+ 22:09 0:00 python pygtk-hello.py

free çıktısında:

çalışırken 6.5MB civarı bellek kullanıyor. Kapattıktan sonra ise 2MB ye yakın fazla gözüküyor.
Yani betik kapatıldığında hemen hemen hepsini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa,
çalışırken 5MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 5MB belleği tamamen boşaltıyor.

Pardus 2011 Kde bilgisayarında:

QT için:

ps aux çıktısı:

1783 1.5 1.0 385784 41620 pts/0 S+ 22:20 0:00 python pyqt-hello.py

free çıktısında:

çalışırken 25MB civarı bellek kullanıyor. Kapattıktan sonra ise 10MB fazla gözüküyor.
Yani betik kapatıldığında sadece 15MB'sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa,
çalışırken 15MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 15MB belleği tamamen boşaltıyor.
GTK için:

ps aux çıktısı:

1631 1.5 0.8 325084 35192 pts/0 S+ 22:25 0:00 python pygtk-hello.py

free çıktısında:

çalışırken 25MB civarı bellek kullanıyor. Kapattıktan sonra ise 1MB ye yakın fazla gözüküyor.
Yani betik kapatıldığında hemen hemen hepsini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa,
çalışırken 15MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 15MB belleğin 7MB ini boşaltıyor.

Ubuntu bilgisayarında:

QT için:

ps aux çıktısı:

2047 0.5 0.6 476628 41488 pts/0 Sl+ 22:31 0:00 python pyqt-hello.py

free çıktısında:

çalışırken 73MB civarı bellek kullanıyor. Kapattıktan sonra ise 60MB fazla gözüküyor.
Yani betik kapatıldığında sadece 13MB'sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa,
çalışırken 15MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 15MB belleği tamamen boşaltıyor.

GTK için:

ps aux çıktısı:

2043 0.3 0.3 299932 22056 pts/0 Sl+ 22:27 0:00 python pygtk-hello.py

free çıktısında:

çalışırken 22MB civarı bellek kullanıyor. Kapattıktan sonra ise 4MB ye yakın fazla gözüküyor.
Yani betik kapatıldığında hemen hemen hepsini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa,
çalışırken 11MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 11MB belleğin 3MB ini boşaltıyor.

Pardus 2009 Kde bilgisayarında:

QT için:

ps aux çıktısı:

1412 1.3 1.2 113148 26560 pts/2 S+ 23:23 0:00 python pyqt-hello.py

free çıktısında:

çalışırken 22MB civarı bellek kullanıyor. Kapattıktan sonra ise 18MB fazla gözüküyor.
Yani betik kapatıldığında sadece 4MB'sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa,
çalışırken 10MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 10MB belleğin 8MB ini boşaltıyor.

GTK için:

ps aux çıktısı:

1510 2.0 0.6 23560 14036 pts/2 S+ 23:29 0:00 python pygtk-hello.py

free çıktısında:

çalışırken 24MB civarı bellek kullanıyor. Kapattıktan sonra ise 19MB fazla gözüküyor.
Yani betik kapatıldığında
sadece 5MB'sini boşaltıyor.

Eğer aynı uygulama tekrar çağırılırsa,
çalışırken 9MB civarı daha bellek kullanıyor.
Kapattıktan sonra ise ikinci çağrıda kullandığı 9MB belleğin 3MB ini boşaltıyor.

Bu testin basit bir hello world uygulaması olduğunu göz önünde bulundurursanız bu
sonuçlar daha anlaşılır olacaktır.

Basit bir hello-world dışında, daha fazla görsel ögelerin kullanıldığı testler de yapacağız fakat şimdilik elimizde karşılaştırabileceğimiz bir şeyler oldu.

Bu sonuçların grafiksel karşılaştırmaları ise şu şekilde:




Devamı gelecek...



[0] http://www.mesutcankurt.com/comak/comak_testler.tar.bz2


22
Eyl
Uzunca bir süre yazamadım ama gezmek, UPEM, başka işler falan internete de pek nadir girebildim. :)

Neyse, okulun ilk gününde Necdet Hoca ile spamassassin ve saz arkadaşları konusunda el sıkıştık. Artık ben bakıyorum bunlara :)

Spamassassin + 60 Perl bağımlılığı konu olunca insan biraz düşünüyor ama zevkli ya. Öncelikle pspec.xml dosyalarındak Pacakger tagındaki Name ve Email taglarını düzenlemem gerekiyordu. 60+1 paket + bir de 3 tane depoda da uygulamam gerekiyordu. Tek tek yapmak pek de mantıklı değildi. Sonradan da takeover betiğini kullanmak aklıma geldi ama onun yerine daha çok işe (işime) yarayacak bir betik hazırlayayım dedim. Python ile yazdım.

betiğin adı takePisiPackages. Şu an Pardus deposundaki playground'umda[0]. Kullanımı şu şekilde:

takePisiPackages paketlerin_isimleri_bulundugu_dosya yeni_paketci_adi yeni_paketci_eposta

buradaki "paketlerin_isimleri_bulundugu_dosya" ismindeki dosyada paketlerin listesi bulunuyor. Bu dosyada

ffmpeg

şeklinde

ya da

multimedia/video/ffmpeg

ya da

multimedia/video/ffmpeg/pspec.xml

şeklinde olabilir. Yarısı öyle yarısı öbür türlü de olabilir. Eğer sadece ffmpeg var ise bulunduğunuz dizinden itibaren içeri doğru özyinelemeli (recursive) olarak arıyor. Bulduğu yere göre de pspec.xml dosyaları tekrardan düzenleniyor. Arama fonksiyonunu da kendim yazdım.

Eğer isterseniz belirli dosyaları istediğiniz editör ile açabiliyorsunuz. Mesela her açtığınız paketteki actions.py'lere de bakmak isterseniz çalıştırdıktan sonra sorulan soruya 'y' diyorsunuz sonra editör'e vim, dosyaya da actions.py dediğiniz zaman her actions.py de vim ile açılmış oluyor.

Bunlar aslında sadece benim istediğim özellikler, eğer başkalarının da istekleri olursa onları da betiğe eklerim.

Şimdilik betik, sed'leme şeklinde değil de satır satır okuyup ona göre yapıyor. Bunu değiştirip değiştirmeme konusunda kararsız kaldım.

Hepsinin haricinde diğer projelerden:

guestlogin'in isminin değişmesi işi var. Bu işlemi de şöyle yapıyormuşuz. (Serdar'a teşekkürler)

önce sürüm yöneticilerine haber veriyormuşuz. Sonra

eğer paket pardus depolarındaysa paketin ismini devel'de değiştiriyoruz, devel root'undaki distribution.xml dosyasına

yorum satırı içerisinde ( !-- -- tagları) replaced by yeni_paket

ve Package tagı içerisinde eski paket



gibi ekliyoruz. ( burayı düzgün yazamıyorum çünkü blogger bunun öyle yazılmasını istemiyor :)

burada dikkat edilmesi gereken

************************************************************
not gone to binary stable yet, please don't remove this mark
************************************************************


satırlarının altına yazmak. Ondan sonra da devel'i stable ile birleştirmek kalıyor. (stable şu an için sadece Pardus 2009 Deposunda olduğu için sadece 2009 da stable ile birleştirmek var)

python-guestlogin paketinin ismini de pam_guestlogin yapacağım.

Guestlogin'in bir de bug'u mevcut. Aslında bug değil de yeni bir özellik isteği.[1] Onu da yakında tamamlayacağım. Bir de KDM'ye buton eklemek var. (hmm. bitireyim bi ara bunları ya)


[0] https://svn.pardus.org.tr/pardus/playground/mesutcan/takePisiPackages
[1] http://bugs.pardus.org.tr/show_bug.cgi?id=14233
3
Eyl
Öncelikle ptsp_installer projesinden başlayayım.

Hazırlamış olduğum betik zaten çalışıyordu fakat dosya düzenlemelerinde bir kaç iyileştirme yapmam gerekiyordu. (Mesela, gerekli girdi varsa bunun üzerine yazmak gibi)

Bunları tamamladım. Ben henüz bir sorunla karşılaşmadım. Proje aşağıdaki adreste mevcut:

https://svn.pardus.org.tr/uludag/trunk/playground/intern/ptsp_installer

Çalıştırmak için root iken

python ptsp_installer.py

komutunu çalıştırmanız yeterli.

Bunun haricinde de guestlogin projesi artık pardus depolarında. Projenin ismi python-guestlogin oldu.

Şu anki Kurumsal2, Pardus 2009 ve Pardus 2011 test depolarında mevcut.

Kurmak için:

pisi it python-guestlogin

yapmanız yeterli. Bunu kurarken pam_python paketini de bağımlılığı olduğu için kuruyor.

Bunu kurduktan sonra yapmanız gereken değişiklikler:

/etc/pam.d/system-auth dosyasında

auth sufficient pam_unix.so içeren satırın üstüne (genellikle en üstlerde olur):

auth sufficient pam_python.so guestlogin.py

--

session required pam_unix.so içeren satırın üstüne(genellikle en altta olur):

session sufficient pam_python.so guestlogin.py

satırlarını eklemeniz yeterli.

Bu işlemden sonra herhangi yapacağınız bir girişte "/etc/security/guestlogin.conf" dosyasındaki guestname değişkeninde yazanı yazdığınızda parola sormadan giriş yapılacaktır. (Yeni bir misafir kullanıcı oluşturulup)

Şimdilik kdm desteği yok. Bunun için kdebase-workspace'ye bir yama koymamız gerekiyor. Yama burada da bahsettiğim gibi hazır. Bunu depoya da yakında alırız.

Diğer yandan da başka alacağım paketler de olacak. (Projeler ile ilgili değil, Pardus'a katkı olarak)

Şimdilik durum böyle. Yapılması gerekenler şu an kdm'ye buton eklemek. Bunu da halledince buradan yine bilgi vereceğim.
31
Ağu
ptsp_installer projesi ile ilgili, daha önce de yapacağım dediğim, dosyaları düzenlerken girdilerin varlığı kontrolünü ekledim.

Şimdilik hosts ve exports dosyasındakilere bakıyor, dhcpd.conf dosyasında eskisi gibi kalıyor. Bu kontrolü ilk başta:

for line in file_pointer.readlines()

şeklinde yapıyordum. Fakat bu şekilde yapmanın bir açık/sorun yaratabileceğine karar verdim ve bu döngülerden önce:

orig_exports = file_pointer.readlines()

ya da

orig_hosts = file_pointer.readlines()

yapıyor ve ondan hemen sonra da:

file_pointer.close()

yaparak dosya ile işimi bitiriyorum.

Bundan sonra da for döngüsü ile satır satır okuyarak içinde IP'leri arıyorum. Eğer yok ise bunları bir string'e aktarıyorum. En son ise dosyayı "w" modunda oluşturarak (yok ise yarat var ise üzerine yaz) hepsini:

file_pointer.writelines(new_hosts)

veya

file_pointer.writelines(new_exports)

ile yazıyordum. Şimdilik bunlar sorunsuz çalışıyor. Bir sonraki iş olarak dhcpd.conf dosyasını da bu şekilde düzenlemek var.

Guestlogin projesinde de en son Onur'un fikri olan girişte parola sorma fikrini nasıl uygularız diyordum ve aklıma daha önce de gelmiş olan başka birisinin o kullanıcı adı ile giriş yapmasını nasıl engelleriz diye düşündüm. Ben, guestlogin.py üzerinden eğer kullanıcı adı guestX şeklinde ise reddet desem bile bir sonraki modül olan pam_unix burdan giriş yapılmasına izin verecektir.

Şimdilik aklıma bununla ilgili bir çözüm gelmiyor ama bunun bir sorun olacağı kanaatindeyim çünkü bu kullanıcı çıkış yaparken bütün verileri de silinecek ve öbür oturumdaki kullanıcının oturumu muhtemelen kilitlenecek. Bunu önlemenin bir yolunu bulmak lazım.
28
Ağu
Son olarak kısa bir kaç şey yazmak istedim.

Bence bir bilgisayar mühendisinin ve ya Linux ile ilgilenen, kendini geliştirmek isteyen herhangi birisinin kesinlikle gelip görmesi/staj yapması/çalışması gereken bir yer. Ben 20 iş günlük staj süresi boyunca bir çok şey öğrendim. Geliştiriciler hakikatten çok iyi insanlar. Yani kelimeler ile anlatmak gerçekten mümkün mü bilmiyorum ama süper diyelim şimdilik. (bir kelime bulursam ya da bulunursa yazacağım bunu :) )

Buradan herkese tek tek teşekkür ediyorum. Bana bu staj süresinin çok zevkli geçmesini sağladılar. Her gün yeni bir şeyler öğrenme heyecanı gerçekten çok güzel bir şey. (zaten böyleydi ama burada ve Necdet Hoca'nın yanında gerçekten bir başka oluyor bu)

Süper ya :)
Eveeeet, işte geldik stajın son gününe. Bugün ayrıca yaptığımız projeler ile ilgili bir sunum yapacaktık. Sunumlarımızı yaptık ve stajlarımızı tamamladık.

Sunumlara geçmeden önce yaptıklarımdan bahsedeyim. Öncelikle kdm için yapmış olduğum yamadaki ufak bir hata (aslında blog'a doğru yazmış olduğum ama yamaya yanlış geçirdiğim) sorunu çözmemi biraz geciktirdi. Bugün Fatih'in göstermesi sayesinde SVN'deki yamayı düzelttim. Son yama, Pardus 2009 için hem guestlogin'in hem de AutoLogin'in sorunsuz çalışmasını sağladı.

Yamanın eski hali şu şekilde idi

if (!curuser || psrv != "kde4-np" )

burda psrv'nin tipi char'a pointer olduğu için bir adres döndürüyordu ve "kde4-np" dizgisi (string) de bir adres döndürüyordu ve doğal olarak bunlar aynı olmuyordu. Bu yüzden yama yüzünden AutoLogin çalışmıyordu. Fakat bunu denemek için yazılan ufak C kodu çalışabilir çünkü psrv = "kde4-np" dediğinizde sanırım bir eniyileştirme (optimizasyon) yapılarak adresler eşitleniyor böylece yukarıdaki if sorunsuz çalışıyor. Ama kesinlikle yanlış. Demek ki dikkat etmek gerekiyormuş, dalgınlığa gelmiyor :)

Yamanın sondan bir önceki hali şu şekilde idi: (sadece if kısmı, zaten sadece burası değişiyor)

if (!curuser || strcmp(psrv, "kde4-np") ) {

Fakat sunum sırasında Onur bunun yerine strncmp kullanmamın daha güvenli olduğunu söyledi, anladığım kadarıyla strncmp ile strcmp arasındaki fark da strncmp yaparken ikinci verdiğimiz parametrenin uzunluğu kadar karşılaştırma yapıyor. Yamada bu olay daha iyi anlaşılıyor. Yamanın son hali:

if (!curuser || strncmp(psrv, "kde4-np", strlen("kde4-np"))) {

yani burda karşılaştırma "kde4-np" nin boyutu kadar olacak. Tabiki de bu yamayı da upstream'a yolladım. Upstream'a bizim yama haricinde KDM'deki bug'un çözümü olan yamayı da yolladım. Aradaki tek fark || yerine && kullanıyor olmam. Bunun sebebi de bizde PluginsLogin=generic iken curuser NULL olması gerekirken bir değer atanıyor. (kullanıcı adı) Bu yüzden OR kullanıyorum. KDM'deki bugda da buraya girmesini engellemek gerekiyor. (AutoLogin aktif iken) Bunun için de AND ile "kde4-np" ye eşit olup olmadığını kontrol ediyorum.

Ayrıca bugün bir de bu projeyi Pardus 2011'de de denedim. İlk olarak pam_python paketini oluşturmam gerekiyordu. Zaten review'de olan paketin inşa dosyalarını SVN ile çektikten paketini yapmaya çalıştım fakat henüz python-sphinx paketi daha depoya girmediği için hata veriyordu. Makefile içerisinde dökümantasyonu kapatıp bunu bir yama ile inşa dosyalarına koydum ve paket sorunsuz oluştu. Kurulum da sorunsuz tamamlandı. Guestlogin ile ilgili yapılandırma ve betik dosyalarını gerekli yerlere koyduktan sonra /etc/pam.d/system-auth dosyasında gerekli eklemeleri yaptım. Konsolda sorunsuz çalışıyordu. Sırada KDM vardı. KDM'de çalışabilmesi için kendi yamamı 2011'deki kdebase-workspace'in içine koyup derlemem gerekiyordu. Derleme sırasındaki bir kaç bağımlılıkla ilgili olan sorun sebebiyle (derleme zamanı bağımlılığı eksikliği: akonadi-devel ve docbooc-xml4_2) derlenmiyordu. Bunları Fatih'in yardımıyla hallettim. Aynı zamanda da bu eksiklikleri paket sorumlusuna da bildirdim. İkilik dosyalar oluştuktan sonra KDM'yi sistemden kaldırıp yeni oluşturduğum halini kurdum ve sorunsuz çalıştı. Yani projem Pardus 2011'de de çalışıyordu.

Bir de Onur'dan gelen bir istek olan, misafir kullanıcı giriş yaptığında kullanacağı parolanın sorulmasını araştıracağım. Mesela KDE'de oturup kilitlendiği zaman kullanıcının parolası soruluyor. Aslında misafir kullanıcı sırasında bu kapatılabilir ama parola işlemi mantıklı gözüküyor. Bunu araştırıp uygulamaya çalışacağım.

Şimdilik aklıma gelenler böyle, tabi ki de Pardus'a vereceğim desteğe her zaman devam edeceğim. Bu zaten staj ile sınırlı değildi (daha öncesinden) ve bundan sonrasında da devam edecek.

Ayrıca yapmış olduğum sunumu SVN'e koyacağım. Koyduktan sonra buraya yine adresi vereceğim.

Staj boyunca bana her konuda yardımcı olan herkese, bütün Pardus çalışanlarına çok teşekkür ediyorum.

Staj bitti diye de yazmayı bırakmayacağım tabi ki. Araştırmaya, kendimi geliştirmeye, bir şeyler öğrenmeye devam edeceğim. Ve bunları da buradan aktarmaya çalışacağım.
27
Ağu
Artık Pardus 2010 Yaz stajında son günlere geldik. Proje ile ilgili son sorunlardan birisi olan KDM'ye giriş yapamama ile ilgili başka gelişmeler oldu. Aslında dün hallettim dediğim KDM hallolmamıştı. Başka sorunlar çıktı.

Daha önceden Oswald ile konuştuğum kadarıyla PluginsLogin'i generic yaptığımda istediğim gibi çalışması gerekiyordu. Fakat bizim depoya aldığımız KDM'nin 2 yaması:

same-pam-generic-classic.diff

ve

kdm-fix-generic-greeter.diff

PluginsLogin generic olsa bile classic'miş gibi davranmasına sebep oluyor. Yani kdm/backend/client.c dosyasındaki curuser değişkenine bir şey atamaması gerekirken bir şeyler atıyor. Bununla ilgili nasıl bir çözüm bulabileceğimizi Oswald'a sordum ve haftasonundan sonra halledebileceğimizden bahsetti.

Şimdilik kendi eklediğim yama ile sorunsuz çalışıyor. Biraz daha düzeltme yapmam gerekecek tabi. Tam olarak çalıştığına karar verdiğim halini yine buraya yazmayı düşünüyorum.

Bir de KDM'nin açılış ekranında ek bir menü mü yoksa buton mu koysak konusunda kararsız kalıyorum. Eğer buton koyar isek görünür olup olmamasını kdmrc dosyasına koyacağımız

guestlogin

değişkeni ile sağlayabiliriz. Yani eğer guestlogin true ise buton görünecek, değil ise görünmeyecek. Tabi hem bunun için hem de PluginsLogin için pardus-air temasının xml dosyasını buna göre düzenlemem gerekecek.

Ya da başka bir fikir olarak kdmrc dosyasının içine herhangi bir değişken koymadan, xml dosyasından 2 tane oluşturup biri guestlogin'li diğeri ise guestlogin'siz yapabilirim. Guestlogin'lide buton olur.

Bugün Pardus 2011'in Alpha'sı çıktı. Bunu test etmek için sanal makina'ya bunu kurdum. Öncelikle X'in açılabilmesi için sistem açılırken (ve kurulurken) kernel'e (grub sırasında)

xorg=driver:fbdev

parametresini giriyorum. Bu parametre sayesinde kurulumu tamamladıktan sonra yeniden başlatınca sistem açılmadı. Onur'un ve Gökçen'in çalışmaları sonucu sorunu çözüldü. Anladığım kadarıyla sorun, YALI'da sistem saatinin değiştirilmesinden kaynaklanıyor. YALI saati yanlış ayarladığı için onu düzeltmiştim.

Ayrıca bugün bir şey daha oldu. Serdar'ın uğraştığı ve configure işlemi tamamlandıktan sonra make sırasında tekrar configure dosyasını çağırması sonucu make işlemi patlayan bir paket var, libmpcdec.

En sonunda hatayı çözmüşler ama bana söylemeden hadi bu kodu derle dedi Onur. :). Hmmm diyerek başladım uğraşmaya, sorun aslında basit gibi görünüyordu ilk configure'de sorun olmadığına göre ikinci kez yapılan configure'ü bir şekilde kapatırsam sorun çözülecekti. Configure'ün çağırıldığı yerdeki yazan yazıyı grep'leyip kaynak kodda araştırdım. config.status'de çağırılıyor. Ve düzeltmek için ./configure sırasında oluşturulan "config.status" dosyası içinde ufak bir değişiklik yaptım. Sorunsuz derleniyordu ama neden configure'u tekrar çağırıyordu? Tam olarak bir çözüm bulamıyordum. Onur geldi ve benim bunun neden olabileceği konusunda düşünmeme yardımcı oldu. Sonuç olarak sorun configure.ac dosyasının configure'den yeni olmasıymış. Yani makefile bir yerde bu dosyanın tarihini kontrol ediyor ve tarihi yeni olduğu için bu dosyanın değiştirildiğine kanaat getirip tekrar configure'ü çalıştırıyor.

Bana yukarıda yazdığım deneyimi yaşattığı için buradan tekrar Onur'a teşekkür ediyorum. Ayrıca sabahki yapmış olduğu disk kurtarma operasyonu ile kendisinin bu konulardaki (Linux vb.) bilgisine olan +sonsuzdaki saygımı yine +sonsuz ekleyerek +sonsuza götürmüştür.
25
Ağu
Artık Pardus 2010 Yaz Stajının son günlerine yaklaştık. Elimde bir adet sorun vardı. Ve yeterince büyüktü. KDM üzerinden giriş yapamıyordum.

Daha önce düşündüğüm gibi

if (!curuser)

yazan yere şimdilik

if (!curuser || strcmp(curuser, "guest") )

olarak değiştirdim ve çalışacak mı diye denedim. Çalıştı. Fakat bu biraz kötü bir çözüm yoluydu. Bununla ilgili upstream ile konuştum.(Oswald Buddenhagen) Bunun yanlış bir yöntem olduğunu ve kdmrc dosyasında

PluginsLogin=generic

yaparsam zaten curuser ataması yapılmadığı için o bloğa girileceğinden bahsetti. Denediğimde çalışmadı çünkü bizim (Pardus) varsayılan temamız "pardus-air" bu kimlik doğrulama metodunu kabul etmiyordu. Değiştirip "oxygen-air" yaptığımda sorunsuz çalıştı. Ama bu sefer de AutoLogin aktif iken çalışmıyordu.

Bununla ilgili hata mesajlarını Oswald'a yolladım ve bunun bir bug olduğuna karar verdik.

Bu hata mesajlarını incelerken dikkatimi çeken şey ise AutoLogin aktif iken PAM doğrulama metodu "kde4-np" yani nopassword girişi. Bu "kde4-np" değerini tutan değişken ise psrv değişkeni. Bunun pam dosyasına baktığımda ise:

#%PAM-1.0

auth required pam_nologin.so
auth required pam_permit.so

satırlarını görüyorum auth bölümünde. Sadece bunlar olduğu için ve bu modüller de kullanıcı adını pek önemsemeden girişe izin verdiği için pam_get_item() fonksiyonunda çakılıyor KDM.

AutoLogin kapalı iken PAM doğrulama metodu "kde4" olarak seçili. Bunun üzerine bir başka yama daha yaptım.

Bu yama

if (!curuser) {

satırını

if (!curuser && psrv != "kde4-np" ) {

olarak değiştiriyor. Bu şekilde denediğimde sorunsuz olarak çalıştı. Bunu upstream'a da yolladım. Aslında doğru bir yöntem değil ama en azından çözüm yolundan bahsetmek açısından yaptım bunu. Bunun yerine de eğer AutoLogin aktif ise curuser in boş olmaması gibi değişiklikler yapılırsa sorunun halledilebileceğinden de bahsettim.

Son aldığımız başka bir karar da KDM ekranında alttaki menüler gibi ayrı bir menü olsun ve simgesi anahtar olsun. (girişi simgelemek adına)

Bu menünün içine bir yandaki kapat, x i yeniden başlat'ın olduğu yerin ordaki konsol girişi ve uzaktan girişi alıp bir de misafir girişini ekleyecektim.

Bu misafir girişi temel olarak kullanıcı adını /etc/security/guestlogin.conf dan alıcak ve kullanıcı adına yazacak sonra da giriş yapacak.

Şimdilik bunun üzerine araştırmalar yapıyorum. Oswald'ın da yardımları sayesinde sanırım menü ekleme işi gayet kolay olacak.
Bugün ptsp_installer projesine ufak bir ekleme yaptım. Bu ekleme her adım çalışmadan önce çalıştırılsın mı diye sormak. Henüz bunun kesinlikle kalıp kalmaması konusunda emin değilim ama bence böyle olması daha iyi çünkü bazı dosyaları güncellemek istemeyebilir. (daha önceden güncellenmişi olabilir)

Bunu yaptıktan sonra Pardus Bugzilla'sında benim eklemiş olduğum yamadan sonra oluşan hatayı inceledim. Kendim hatayı tekrarlayamıyordum. Hatayı alan arkadaşın kdmrc dosyasını incelediğimde "AutoLogin" özelliğinin aktif hale getirildiğini fark ettim. Bunun için kendi kdmrc dosyamda da bunu açtım. Fakat yine hata ile karşılaşamadım. Biraz daha araştırdıktan sonra AutoLoginDelay=0 olduğunu gördüm. Bunu uyguladığımda hakikatten kdm'nin çöktüğünü fark ettim. Kdm yi tekrar:

kdm -debug 1

ile açtıktan sonra "/var/log/syslog" dosyasını inceledim. Benim kaldırdığım if bloğu her zaman çalıştığı için orada çakılıyor.

Yaptığım yamayı kaldırdığımda ise bu sorun düzeliyor. Bunun için çözüm arayışlarındayım.

AutoLoginDelay aslında 0 haricinde bir değer olsa sorunsuz çalışıyor ve kdmrc dosyasında '#' lı halinde AutoLoginDelay=10 olarak verilmiş ve varsayılan da 0 gözüküyor. Bunu kullanıcının elle mi oluşturduğunu araştırırken YALI'da eğer otomatik giriş seçilirse bunun 0 olarak ayarlandığını fark ettim.

Öncelikle tahminime göre AutoLoginDelay=0 ise KDM, PAM'i ya çağırmıyor ya da başka bir şekilde çağırıyor ki pam_get_item() fonkisoyunda sorun çıkıyor.

Bunu önlemek için de aklıma bir kaç yöntem geldi.

Başlangıç olarak kdmrc ye

guestlogin=true

satırını ekleyip buna göre o if bloğunu çalıştırmak olabilirdi

if(!curuser || guestLogin)

şeklide mesela. Ama burada da hem guestlogin aktif olup hem de AutoLoginDelay=0 olduğunda sorun olurdu ki bu da istenebilecek bir şey bir şey.

İlk olarak sorunu anlamamıştım ama o if bloğu ile ilgili bir şey olduğunu düşünüp oraya girip girmemesini kontrol etmek adına kullanıcı adını pam_get_item() ile çekiyor ve daha önce çekilmiş olan kullanıcı ismi olan curuser ile karşılaştırıyordum. Fakat bu kodda da kullanıcı adını çekerken sorun olduğunu fark ettim ve sorunun yukarıda da dediğim gibi PAM'ın çağrımı ile ilgili olduğunu düşündüm.

Şimdilik aklımda 2 çözüm var, bunları uygulayacağım.

1. si eğer kdmrc dosyasında

guestlogin=true

ise ve PAM'dan gelen kullanıcı adı eğer

/etc/security/guestlogin.conf (aslında burayı da kdmrc ye koyabiliriz, sonuçta günün birinde bunu değiştirmek istediğimizde kodda tekrar değişiklik yapmamız gerekecek) dosyasındaki

guestname=

satırındaki eşitliğin sağ tarafına eşit ise if bloğu çalışsın diyebilirim. Ya da

yine kdmrc dosyasında

guestlogin=true

ise bir şekilde PAM'in çalışıp çalışmadığını kontrol edip (pamh değişkeninden olabilir belki) ona göre if bloğu çalıştırılabilir.

Bunlar ile ilgili araştırma ve uygulamayı yarın yapmayı düşünüyorum.