24
May
14 mayıs'ta EMO ile Kocaeli üniversitesi bilişim topluluğu tarafından, Kocaeli üniversitesinde linux etkinliği gerçekleştirildi. Bir günlük bir etkinlikti.

Öncelikle, özgür yazılım felsefesini anlamak, benimsemek gerekliliği için ilk konuşma Enver
Altın'ın “Özgür Yazılım Felsefesi” idi . Bu konuşmayı daha önce dinlemiş olmama rağmen
dinlerken eğlendim; dinleyicilerin de sıkılmadığını, eğlenceli bulduğunu düşünüyorum.

Sonraki konuşma Pardus geliştiricisi Mete Aplarslan' ındı. Pardus ile ilgili her şey diyebiliriz:)

Ardından Linux kullanarak kolaylıkla yapılabilen, oldukça etkileyici birçok uygulamadan bahseden “Linux’ta Web ve güvenlik uygulamaları” konu başlığıyla Burak Oğuz'un konuşmasıydı. Oldukça ilgi çektiği 'Peki şu nasıl' sorularıyla anlaşılabiliyordu.

Etkinlikte, Metin Akdere ile birlikte “Üniversitelerde özgür yazılım” konu başlığı altında bir sunum yaptık. Özgür yazılıma nasıl katkı verilebilir, nereden başlanıp, nereye doğru gidilebilir, bizim için durum nasıldı gibi sorulara cevap vermeye çalıştık. Ardından TUBİTAK ile Üniversitemiz arasında yapılan, iki kurum içinde bu tarzda bir ilk olan anlaşma ve çalışmamız “Pardus'un 64 bit portunun hazırlanması” ile ilgili bilgiler vermeye çalıştık.

Özellikle birinci sınıfların katılımlarıyla üniversitede özgür yazılıma karşı ilgisizlikten ve
bilinçsizlikten rahatsız olan, bu tarz çalışmalarla bu durumu değiştirmeyi amaçlayan bilim
topluluğu ekibi ve EMO nun bir aşama kaydettiğini düşünüyorum.

Bu güsel etkinlik için tebrik ve teşekkür ediyorum.

Kocaeli etkinliğinin ardından ,14-16 tarihleri arasında gerçekleşen “Eskişehir Osmangazi
Üniversitesi bilişim günlerine
” katılmak için Eskişehir'e doğru yola çıktık. Orada da etkinlik içinde bizimde bir konuşmamız, çok eğlenceli, dinleyenler için oldukça öğretici,bu etkinlikten daha geniş kapsamlı, ayrıca yazmam gereken bir etkinlik geçirdiğimizi söyleyebilirim. Ayrıca Eskişehir'e hayran olduğumu:)
27
Mar

1 Şubatta ilk sürümü hazırladık. Eksik paket sayısı oldukça fazlaydı ve çok fazla farklı bilgisayar üstünde deneme fırsatımız olmamıştı. Onun bir adı yok :(


19 şubatta protokol imzalamak için gelen pardus ekibi ,ile atölye çalışmasından sonraki değişikliklerle yeni bir sürüm çıkardık. Sürümün adı "VECİHİ" .


Bilgi işlemde bir balığımız var; cinsi astronot. Parmağımızı akvaryum camına koyduğumuzda ağzını açıp hızlıca gelip kafasını cama vuran, kendinden küçük her şeyi yemeye çalışan, bize alışan, bizden kaçmayan. (cinsinden kaynaklı:) ve güneşin akvaryumunun üzerine vurmasıyla renkleriyle muhteşem bi görüntü oluşturan. Balığımızın adını Şener Şen' in pilot karakter adını, Vecihi' yi verdik. Sürüme ise balığımızın adını:)


6 Martta artan paket sayısı, yapılan değişiklikler sebepleriyle yeni bir sürüm çıkarttık. Sürümün adı "SERUHATTO"[1].


Çalışmalara başladığımızda dört kişiydik; Metin, Mete ve Serhat. Serhat geçen yıl bölümümüzden mezun oldu. Yanımızda olduğu sürece bizlere çok yardımda bulundu. Aralık ayında askere gitti ”o şimdi asker:)”. İsminin Japonca söylenmesiyle oluşan "SERUHATTO" kelimesi bu sürümün adı oldu.


Pardus 64 bit projesi ile ilgili yazıları bundan sonra 2uzeri6.blogspot.com adresinde yazacağız.



[1] http://tinyurl.com/seruhatto

4
Mar
Gecen bir aylık süre içerisinde yeni bir blog girdisi yapmamış olsam da, gerçekte piside ki ilk paketten pek çok gelişme oldu.

Öncelikle PİSİyi sistemde çalışır hale getirmek için gereken programları onların bağımlılıkları ve onların bağımlılıklarını… gösteren belgeyi oluşturduk.

ilk paketin(helloWord:) ardından Pardus kurumsal 2 deposunun görüntüsünü alıp kapsadığı paketleri 64 bit mimariye taşımaya başladık. Daha çok Gentoo'nun o paket için ne yaptığıyla ilgilenerek ilerledik.

64 it mimaride derlenmesi için değişiklikler yapılması gereken paketleri değişiklikleri uygulanmış halde kullandığımız svn deposuna(devel-X86_64) commit ettik. Ayrıca paketlerde ki bu değişikleri PardusWiki'deki X86_64-64_Mimarisine_Port_Edilmesi başlığı altındaki Paketlerin X86_64 Mimarisine Taşınmasında Yapılması Gerekenler maddesi altında gruplanmış halde yazdık.

System-base ve system-devel deki paketlerin tamamı 64 bit mimariye taşındığında, kök dosya sistemi duyuruldu. Duyurulduğun da grup tam olarak halledilmediği için rootfs i kullanmak isteyenler rootfs i bir disk bölümüne açıp eski grup içine yazmaları gerekiyordu; ya da sanal makine kullanmak ki bu kısımda x olmadığı için eğer yeterli donanıma sahipse daha mantıklı bir seçimdi bence. Fakat bu kısımda geçmişte kaldı. Artık Ximiz, KDEmiz var:))

Grub 64 bit mimaride derlenmiyor ve artık geliştirilmemekte. Diğer dağıtımlar Grubı 32 bitte static olarak derleyerek kullanmışlar. Bizde bu yöntemi kullandık. Artık bir GRUBımız da var.

Şu anda kurulan cd için yeterli paketimiz olduğunu düşünerek, kurulan cd hazırlamaya çalışıyoruz.

Pek çok şey öğrendiğim bu işte olmak, bu ekiple çalışmak çok güzel:). Kurulan cd den sonra ekibimizin büyüyeceğini düşünüyoruz;)

20
Şub
Staj süresi içerisinde VPN için Güvenli Açılış CD'si Nasıl belgesinden yararlanarak çalışan bir prototip elde ettik. Belgenin aslını buradan okuyabilirsiniz.

CD, kurum çalışanlarının yerel ağlarına kararlı ve güvenli bir şekilde erişmelerini sağlar. kişiler herhangi bir bilgisayarı kendisine verilen cd ile boot ettiğinde, iç ağdaki bilgisayarının masaüstü karşısına gelir ve ağdaki sahip olduğu haklarla işlem yapabilir.

Oluşturduğumuz sistem aşağıdaki gibiydi.













Sistemde neden bu seçimlerin yapıldığını incelersek;

İsteğimiz iç ağa güvenli erişimdi. Bu isteği karşılamak için önceleri sabit bağlantı(kiralık hatlar vb.)kullanılmaktaydı. Her kullanıcı için iç ağdaki ve dışarıdaki bilgisayarı bağlanılıyordu. Bu işlemi her kullanıcı için yapmak; yapılandırma problemi oluşturuyor ve kullanıcı sayısınca hat kiralamak anlamına geliyordu ki bu da maliyeti yükseltiyordu. Bu problemlerden dolayı bu isteği karşılayacak yeni çözüm yolları bulunmuştur.

Bu çözüm yollarından biri OpenVPN'dir. OpenVPN iki bağlantı noktasını arasında güvenli iletişim sağlar. Yani iki farklı bağlantı noktası seçmemiz gerekiyordu. B
u secimi de iki farklı şekilde yapabilirdik. Bunlardan ilki her kullanıcının iç ağdaki bilgisayarı ( openVPN sunucu), dışarıdaki bilgisayarı(istemci) olarak seçmek fakat bu durumda her kullanıcıyı bir sunucu sahibi yapmış oluruz ki sunucu sahibi olmak sertifika yani yeni bir kullanıcı oluşturabilmek kadar geniş yetkiler vermek demektir. Diğeri ise sistemde de kullanılan, yetki sınırlandırması yapabileceğimiz ve bir çok sunucu oluşturma işinden kurtulabileceğimiz, iç ağda bir sunucu oluşturmak.

OpenVPN in çalışma şekli;


Sunucuyu başlatmadan istemcide “ifconfig” terminal komutunu çalıştırdığımızda, ”eth0” (donanımsal olarak bulunan ethernet aygıtımızı tanımlar.) ethernet aygıtımızı gördük.


Sunucu başlatıldığında “tcpdump” ile trafiğin nasıl ilerlediğine baktığımızda; sunucu ile istemci arasında veri akışı olduktan sonra, sunucu ve istemcinin onlu bloktan aldığı yeni ip ile veri iletimine başladığını gördük.


İstemcide “ifconfig” komutunu çalıştırdığımızda ise “eth0” ın yanında “tun0” sanal ethernet aygıtının oluştuğunu ve onlu bloktan ip aldığını gördük.


Yani sunucu ve istemci arasında handshake gerçekleştikten sonra, sunucu yapılandırma dosyasında tanımlanan aralıktan istemciye ve kendisine ip atıyor ve bu ip'lerle ”tun0” üzerinden şifreli veri iletimine başlıyorlar.


Ağın girişine kadar openVPN ile veri iletişimini sağladık. OpenVPN sunucusu tarafından ağa girişi kabul edilen -sertifikası onaylanmış- kullanıcıları iç ağdaki bilgisayarına yönlendirmek istiyorduk. Ağ içinde güvenlik problemimiz olmadığı için bu iletişimi tek bir komutla -rdesktop -u kullanıcı_adı makine_ip- sağladık. Bu komut ile kullanıcılar bilgisayarlarını açtıkları anda iç ağdaki bilgisayarlarının masaüstü ile karşılaşıyorlardı ve bilgisayarlarında yapabildikleri her şeyi yapabiliyorlardı.


Çalışabilir gözüken sistemimiz, bu haliyle bazı sorunlar oluşturur;


- Kullanıcı bilgisayarları ağa direk dahil olduğu için kullanıcının bilgisayarında bulunan tüm tehditler(portlarına gelen saldırılar, virusler, spy ware vb.) ağa dahil olur.

- Kullanıcılar dışarıdaki bilgisayarına ağdaki verileri taşıyabilir ki verilerin ağın dışına çıkması veri güvenliğini tehlikeye atar.

- Her kullanıcının dışarıdaki her bilgisayarına openVPN istemcisi olarak tasarlamamız gerekir

- OpenVPN in kurulu olduğu bilgisayar kullanıcının daima yanında olması gerekir.

Bu problemleri aşmak için ise çalışan cd kullandık. Çalışan cd ile ;

- Her kullanıcı bu cd ile ağa girecegi için kullanıcının hangi işletim sistemini kullandığıyla ve bilgisayarında bulundurduğu tehditlerle ilgilenmek zorunda kalmayız.

- Sadece okunabilir olduğu için ağ dışına veri çıkışını engelleriz.

- Kullanıcı herhangi bilgisayardan bu cd ile ağa giriş yapabilir yani yanında bulunması gereken bilgisayar yerine bir cd olacaktır.





  • 17
    Şub
    Oluşturduğumuz temel sistem(pardus64-rootfs-0.1.tar) kendi içinde bağımlı ve 64 bit mimaride.

    Sıradaki hedefimiz 64 bit paketlerin hazırlanabileceği bir ortam hazırlamak için pisi ve bağımlılıklarını kurmak. Bu adımdan önce programlar tarafından sistemden istenen destekleri bilmediğimiz için derleme araçlarına Pardus de verilen tüm destekleri sağlama kararı aldık.

    (Örnegin; gcc ye derleme parametresi olarak verilen "--enable long long" programında long long veri tipini tanımlayabilmene izin veriyor. bu desteği vermemiş isen long long veri tipini sistemde derleyemiyorsun. Bu tarz olası durumlardan en başta kaçmak için.

    64 bit mimari için kullandığımız derleme parametreleri ve yamalara artı olarak Pardus de kullanılan derleme parametreleri(sadece 32 de kullanılan parametreler hariç "--enable-fat") ve yamalar ile derleme araçlarını ve bu araçların kullandıkları kütüphaneleri tekrar derledik(-kernel-headers-glibc-gmp-mprf-zlib-binutils-gcc-make-).

    Derleme araçları(crosstools) döngü halinde birbirine bağımlı; sistem için herhangi bir derleme aracını derlerken diğer araçları kullanıyorsun. Bir araca verdiğin yeni bir desteği diğerlerinde görebilmek için onları son kurduğun araç ile yeniden derlemen gerekiyor.

    Bu döngüden kaynaklı derleme araçlarını birbiri ile birkaç kez derledik.

    Sırada ki ; sistemin paket hazırlanabilir halde olması için Pardus paket yöneticisi(pisi) ve onun bağımlılıklarını sisteme kurmak.
    Pisi için gerekli olan tüm bağımlılıkların ve Pisinin, 64 bit için yapılması gereken ekler için Gentoo paketlerini kontrol ederek, Pardus deki yapılandırma parametreleri ve yamalar ile sistemimize kurulumunu bitirdik.

    Pisi artık 64 Bit:)) ve ilk paketimiz merhaba-pisi:)))
    Chroot olabilmek için gerekli adımları yaparak başarılı bir şekilde chroot olduğumuz geçici kök dosya sistemi üzerinde, kurulan programları tast edebilmek için test araçlarının( Tcl, Expect, DejaGNU ) kurulumunu da yaptıktan sonra kök dosya sistemini oluşturmaya çalışıyoruz.

    Sisteme derlemenin temel araçlarından(kernel headers, C kütüphanesi ( glibc veya uclibc veya eglibc ), binutils (linker,assembler) ve gcc) , kernel headers-2.6.30 problemsiz olarak, glibc-2.9 ise " bin/ld: final link failed: Bad value " hatasını çözümleyerek sisteme kurduk.

    binutils ve gcc ile test araçlarının çalışabilmesi için PYS nin uyumlu çalışması( host sistemimiz(bizde Debian) yeterli sayıda pseudo terminaline destek vermesi) gerekliliğini öğrendik. Yaptığımız testte doğru sonuç alamadık.
    $expect -c "spawn ls"
    spawn ls
    The system has no more ptys.Ask your system administrator to create mor
    Bunun için öncelikle host sistemimizin çekirdeğinin bu desteği verir halinin paketini yapıp kurduk.Host sistemimizdeki test sonucunu "spawn ls" olarak gördük.

    Chroot olurken yaptığımız adımlardaki sanal çekirdek için gerekli olan mount adımındaki -f(fake) mountlarını(gerçek bir bağlama işlemi gerçekleşmiyor.);

    $mounth -vt devpts devpts $clfs/dev/pts
    $mounth -vt tmps shm $clfs/dev/shm


    -f siz yaptığımızda chroot olduğumuz sistemimizde de test sonucunu "spawn ls" olarak gördük. Testi geçtik.

    Ardından derleme araçlarından binutils ve gcc nin kurulumu ve temel sistem için gerekecek diğer programların(pardus sürümleriyle uyumlu) kurulumunu yaptık.

    Oluşturduğumuz 64 bit mimaride çalışan programlar tarafından oluşturulmuş, host sisteme bağımlılığı olmayan temel sistemi tarladık.
    (pardus64-rootfs-0.1.tar)

    Bir ayı geçkin bir süredir, Necdet Yücel hocamız önderliğinde dört arkadaş (serhat, metin, mete) çok şey öğrendiğimiz ve severek yaptığımız bir iş içindeyiz; Pardusun 64 bit portunu hazırlama. 07.11.2009 cumartesi 6.30 civarında önemli bir aşama kaydettik, 64 bit debian üzerinde pardus üzerinde hazırladığımız geçici sisteme chroot olduk:)

    Bu süreç;

    Geçici sistemi hazırlamak için üzerinde çalışacağımız sistemin Pardus olması kararını verdikten sonra, çapraz derleme(cross-coppiler) araçlarını(herhangi bir mimaride çalışan ve derleyeceği kodu çalıştığı mimariden farklı bir mimari için derleyebilen) ve bağımlı olduğu kütüphaneleri derledik. Bu adımdan sonra 32 bit mimarideki Pardus üzerinde, kodlarımızı 64 bit mimaride derleyebilir durumdaydık.

    Geçici sistem için, host sisteme bağımlılığı olmayacak şekilde çapraz derleyicimiz ile 64 bit mimaride gerekli olan programları -uyum problemi oluşmaması için Pardus un kullandığı sürümlerdeki- ayrı bir dizin içerisine derledik. Host sistemde, 64 bit mimari için derlenen programlar çalıştırılamıyor ve geçici sistemin bulunduğu dizine chroot yapılamıyor çünkü çekirdek 32 bit mimaride çalışıyor.

    Bu durumda iki seçenek vardı. Hazırladığımız geçici sisteme 64 bit mimaride çalışan bir sistem üzerinde chroot yapma ya da geçici sistemi boot edilebilir hale getirme. Hedef olarak temel sistemi kullanarak paket oluşturacak olan arkadaşlar için daha kolay bir yol olduğu düşünülerek boot edilebilir bir sistem oluşturma kararını aldık fakat tamamen konsolda çalışmaları gerekecekti.

    Boot sürecinde, çekirdek için Pardus tarafından seçilen çekirdek sürümünü ve onun kullandığı yapılandırma dosyasını kullandık. Çekirdeğin 64 bit mimariye destek verebilmesi için 32 ve 64 bit Debian yapılandırma dosyaları arasındaki farkı yapılandırma dosyasına uyguladık.

    İnitramfs için Pardus un kullandığı init dosyasını, kaynak kodunu indirip 64 bit olarak derlediğimiz busyboxı ve init kodu içerisinde çalıştırılan diğer programları (coolplug ve disktype) kullandık.

    Coolplug; klcc ile derlenmiş, klibc ye bağımlı bir yazılım. Gcc ile derlediğimizde derleme de hata oluştu ve çalışmadı. Host sistemde çapraz derleme yapabilecek klcc oluşturmak yerine; aynı donanım üzerinde çalışacağı ve statik linkleme kullandığı için problem oluşturmayacağını düşündüğümüz, aynı donanım üzerinde koşan 64 bit mimariye sahip bir sistemde(Debian) derleme işlemini yapma seçimini yaptık.

    Son haliyle oluşturduğumuz initramfs ile sistemi boot etmeye çalıştığımızda, init dosyasının kodlarıyla ilerleyerek busybox araçlarının ve coolplug programının çalıştığını gördük fakat coolplug ile disk bağlanırken farklı bir hata oluştu.

    Sürecin zamanında ilerlemesi amacıyla boot etme sürecini sonraya ertelemeye, 64 bitlik sistemde(Debian) geçici sisteme chroot yapmaya karar verdik. Şimdi paket yapacak olan arkadaşların 64 bit mimaride çalışan bir dağıtım kurmaları ve chroot yapmaları gerekecek fakat sadece konsolda çalışmak zorunda kalmayacaklar.

    Sıradaki hedefimiz ise chroot yaptığımız sistem üzerine, temel bir sistem için gereken yazılımları, paket hazırlanabilir halde olması için pisi ve onun bağımlılıklarını kurmak.



    Tasarımımızı yapıp başladığımız programlar, başlarda anlaşılır ve sadedirler. Programımız, yeni isteklere cevap verebilmek için eklediğimiz yamalarla beraber tasarımımızın ne kadar ii olduğuyla ters orantılı olarak bozulmaya başlarlar. Hatta kodumuz içinden çıkılmaz, anlaşılmaz bir duruma gelebilir.

    İi bir tasarım diyebilmek için ilk üç şartımız; değişikliklerin kolayca uygulanması,bir yerde yapılan değişiğin kalan kodu etkilememesi,kodun tekrar kullanılabilir olması.

    Bundan dolayı taşarım şablonlarını kullanmalıyız. Lazy Loading şablonu kullanılması en kolay şablonlardan bir tanesi. Genellikle bir sınıfın içindeki bir değişkeninin ihtiyaç duyulana kadar oluşturulmasını bekletmek için kullanırız. Böylelikle kullanmadığımız değişkenler için fazladan oluşturma zamanı ve bellek kullanmamış oluruz.

    Private nesneye başlangıçta null atarız ve her istek geldiğinde null kontrolü yaparız. Eğer nesne null ise yeni oluşturulur; deil ise elde olan geri döndürülür. java örneği:


    ......................

    private int boyut;
    private int[] dizi=null;

    public int[] getDizi() {
    if(dizi==null) {
    dizi=new int[boyut];
    }
    return dizi;
    }

    .....................


    Diğer bir kullanım şekli; ihtiyacımız olan veriyi içermeyen ama nasıl elde edebileceğimizi bilen bir nesne olarak kullanmak.
    Özellikle database çagrımlarında kullanırız. Örneğin müşteriye ait id, ad, soyad, siparişleri tutan müşteri sınıfımız olsun. Databasede tuttuğumuz bu bilgileri id özelliği ile gerek duyulduğunda ulaşırız.


    ...................

    private java.awt.List siparisListe=null;
    private int musteri_id;

    public java.awt.List getSiparisListe(){
    if(siparisListe==null){
    ResultSet result = connection_object.executeQuery ("select siparis from musteri where musteri_id="+ musteri_id);
    while (result.next()) {
    siparisListe.add(result.getInt(1));
    }
    }
    return siparisListe;
    }

    .......................


    11
    Oca
    Bugünlerde herkes gitmek istiyor.
    Küçük bir sahil kasabasına,
    Bir başka ülkeye, dağlara, uzaklara...

    Hayatından memnun olan yok. Kiminle konuşsam aynı şey... Herşeyi, herkesi bırakıp gitme isteği.

    Öyle "yanına almak istediği üç şey" falan yok.
    Bir kendisi.
    Bu yeter zaten.
    Herşeyi, herkesi götürdün demektir.

    Keşke kendini bırakıp gidebilse insan.

    Ama olmuyor.
    ...

    Can Yücel