21
Eki
Çanakkale 18 Mart Üniversitesi, bilgisayar mühendisliği son sınıf öğrencilerinden biri olarak, Necdet Yücel hocamızın önderliğinde, yaz başlarında duyurulan Pardus'un 64bit portunu hazırlama çalışmalarına birkaç hafta önce başladığımızı duyurmak istiyorum. Şu anda iki grup olarak yürütmeyi planladığımız çalışmaların ilk grubunda Meltem Parmaksız, Serhat İrem Ersel ve de Mete Bilgin ile beraber gerçekten verimli ve bir o kadar da eğlenceli bir ortamda çalışmalara devam ediyoruz. Öncelikle şunu söylemeliyim ki, bu proje ile bu kadar kısa bir sürede bile bir çok şey öğrendiğimize ve de daha öğreneceğimiz bir çok şey olduğuna inanıyoruz. Yaptığımız çalışmaları belgelendirip, neler ile uğraştığımızı iyi bir şekilde açıklayabilmek amacıyla çalışmalar üzerinde her adımı tartışıp, detaylar üzerinde uzun uzun konuşmamak kaçınılmaz oluyor doğal olarak. Kimi zaman derlenecek araçların beklenmedik bağımlılıkları çıkıyor; o bağımlılıkların da başka başka bağımlılıkları. Ve üstüne üstlük uygun sürüm arayışı da işin içine girince, bazen çalışma tahtamızda nokta koyacak kadar bile yer kalmadığını fark ediyoruz. Belki de okuldan daha fazla vakit geçirdiğimiz, ki gerçekten öyle, çalışma masamızda neler ile uğraştığımızı fırsat buldukça da paylaşmaya çalışacağız.
Geliştirme sürecinde nasıl bir yol izlememiz gerektiğini CLFS (Cross-Compiled Linux From Scratch ) belgesinden takip ediyoruz. "O da ne?" diyen arkadaşlara, bu belgenin içeriği ile ilgili güzel ve detaylı bir yazı dizisi hazırlayan Serhat arkadaşımızın günlüğüne bakmalarını tavsiye ediyorum.
Geçen süre zarfında çalışmalarımızın temelini oluşturan ve en çok yaptığımız işlem ise çapraz derleme (cross-compile). Hakkında detaylı bilgiye buradan ulaşabileceğiniz çapraz derleme, özet olarak üzerinde çalıştığımız mimariden (host), farklı bir mimari (target) için derleme yapma işi. Çapraz derlemede uygulamalar "host" üzerinde derleniyor; ancak "target" üzerinde çalıştırılabiliyor. Örneğin, eğer isterseniz x86 mimari üzerinde çapraz derleme ile PowerPC için sistem geliştirebilirsiniz; zaten dağıtımların günümüzde birçok mimariyi destekleyen paketleri yapma işi de bu şekilde gerçekleştiriliyor. Gömülü sistemler için geliştirme yapılırken de çapraz derlemeden yararlanıldığını görüyoruz. Pardus'u 64bit'e port etme sürecinde Pardus-2008'i kuluçka sistem olarak kullanacağız. Bu yüzden oluşturacağımız hedef sistem üzerindeki tüm araçlar da Pardus-2008'de hangi kararlı sürümü ile kullanılıyorsa o sürümü ile oluşturulacak. Ancak, çapraz derleme araçlarında böyle bir zorunluluk bulunmuyor; sonuçta onlar sadece hedef sistemi oluşturmak için geçici sistem üzerinde kullanılacak ve daha sonra silinecekler. Ancak; biz yine de bu çalışmalarımızda sürüm uyumunun her aşamada korunmasında bir sakınca görmedik.
Gelelim 3. haftasını geride bıraktığımız çalışmalarda neler yaptığımıza ve Pardus-64bit geliştirme sürecinde nerede olduğumuza. Pardus-2008'i kuluçka sistem olarak alıp, onun üzerinde önce çapraz derleme araçlarını oluşturup (gcc,glibc,binutils, ...), ardından da bu çapraz derleme araçlarını kullanarak, temel ve geçici bir sistem oluşturmayı başarabildik. Bu geçici sistem (sadece gcc, make, bash gibi komutların olduğunu düşünürsek) şu anda çok minimal bir ortam olmakla beraber, hedeflediğimiz şekilde üzerinde Pardus-64bit sistemi geliştirebileceğimiz, 32bit paketleri 64bit olarak hazırlayabileceğimiz bir ortam olacak. Ama; bunun için henüz erken tabi ki. Şimdi bu minimal sistemi nasıl kullanmamız gerektiği üzerinde çalışıyoruz: Bu minimal sisteme "chroot" yapmak ya da makineyi bu sistem ile "boot" etmek? Bu konu üzerinde uzun süre kafa yorduk."chroot" yapılan bir ortam sağlamak paket yapma işinde çalışma ortamını çok kolaylaştıran bir seçenek olmakla beraber, daha sonra bunun mümkün olamayacağını öğreniyoruz. Çünkü; farklı bir mimari için sistem geliştiriyorsak, yani "host" sistem ile "target" sistem birbirinden farklı mimariler ise "chroot" yapılamıyor. "chroot" seçeneğinin, üzerinde çalışılan mimari ile geliştirilecek mimari benzer olduğunda ve de aynı sürüm çekirdek kullandığında mümkün olduğunu öğreniyoruz. Biraz daha ayrıntıya girmek gerekirse, "chroot" seçeneği için GCC 3.0 (veya daha yeni bir sürüm) ile derlenmiş Linux 2.6.x çekirdeği gerekiyor. Bu sağlanmadığı zaman Binutils'de TLS (thread-local storage) desteği inşa edilemiyor ve NPTL (Native POSIX Threading Library) test takımı segmentasyon hatası ile sonuçlanıyor. Bu yüzden, bundan sonra artık bizim izlememiz gereken yol ise makineyi elimizdeki minimal sistem ile "boot" etmek ve geliştirme sürecine bu şekilde devam etmek. Şimdilerde elimizdeki sistemi "boot" edilebilir hale getirmek için uğraşıyoruz. Daha sonraki aşamalarda da bu minimal sistemin, üzerinde paket derlenebilir hale getirilmesi için çalışmalara devam edeceğiz.
Son olarak, kısa bir süre içerisinde, elimizdeki çalışan minimal sistemi "boot" edebilme hedefimizi gerçekleştirerek, devamında da daha detaylı bir yol haritası sunmayı planladığımızı belirtmek istiyorum.
Geliştirme sürecinde nasıl bir yol izlememiz gerektiğini CLFS (Cross-Compiled Linux From Scratch ) belgesinden takip ediyoruz. "O da ne?" diyen arkadaşlara, bu belgenin içeriği ile ilgili güzel ve detaylı bir yazı dizisi hazırlayan Serhat arkadaşımızın günlüğüne bakmalarını tavsiye ediyorum.
Geçen süre zarfında çalışmalarımızın temelini oluşturan ve en çok yaptığımız işlem ise çapraz derleme (cross-compile). Hakkında detaylı bilgiye buradan ulaşabileceğiniz çapraz derleme, özet olarak üzerinde çalıştığımız mimariden (host), farklı bir mimari (target) için derleme yapma işi. Çapraz derlemede uygulamalar "host" üzerinde derleniyor; ancak "target" üzerinde çalıştırılabiliyor. Örneğin, eğer isterseniz x86 mimari üzerinde çapraz derleme ile PowerPC için sistem geliştirebilirsiniz; zaten dağıtımların günümüzde birçok mimariyi destekleyen paketleri yapma işi de bu şekilde gerçekleştiriliyor. Gömülü sistemler için geliştirme yapılırken de çapraz derlemeden yararlanıldığını görüyoruz. Pardus'u 64bit'e port etme sürecinde Pardus-2008'i kuluçka sistem olarak kullanacağız. Bu yüzden oluşturacağımız hedef sistem üzerindeki tüm araçlar da Pardus-2008'de hangi kararlı sürümü ile kullanılıyorsa o sürümü ile oluşturulacak. Ancak, çapraz derleme araçlarında böyle bir zorunluluk bulunmuyor; sonuçta onlar sadece hedef sistemi oluşturmak için geçici sistem üzerinde kullanılacak ve daha sonra silinecekler. Ancak; biz yine de bu çalışmalarımızda sürüm uyumunun her aşamada korunmasında bir sakınca görmedik.
Gelelim 3. haftasını geride bıraktığımız çalışmalarda neler yaptığımıza ve Pardus-64bit geliştirme sürecinde nerede olduğumuza. Pardus-2008'i kuluçka sistem olarak alıp, onun üzerinde önce çapraz derleme araçlarını oluşturup (gcc,glibc,binutils, ...), ardından da bu çapraz derleme araçlarını kullanarak, temel ve geçici bir sistem oluşturmayı başarabildik. Bu geçici sistem (sadece gcc, make, bash gibi komutların olduğunu düşünürsek) şu anda çok minimal bir ortam olmakla beraber, hedeflediğimiz şekilde üzerinde Pardus-64bit sistemi geliştirebileceğimiz, 32bit paketleri 64bit olarak hazırlayabileceğimiz bir ortam olacak. Ama; bunun için henüz erken tabi ki. Şimdi bu minimal sistemi nasıl kullanmamız gerektiği üzerinde çalışıyoruz: Bu minimal sisteme "chroot" yapmak ya da makineyi bu sistem ile "boot" etmek? Bu konu üzerinde uzun süre kafa yorduk."chroot" yapılan bir ortam sağlamak paket yapma işinde çalışma ortamını çok kolaylaştıran bir seçenek olmakla beraber, daha sonra bunun mümkün olamayacağını öğreniyoruz. Çünkü; farklı bir mimari için sistem geliştiriyorsak, yani "host" sistem ile "target" sistem birbirinden farklı mimariler ise "chroot" yapılamıyor. "chroot" seçeneğinin, üzerinde çalışılan mimari ile geliştirilecek mimari benzer olduğunda ve de aynı sürüm çekirdek kullandığında mümkün olduğunu öğreniyoruz. Biraz daha ayrıntıya girmek gerekirse, "chroot" seçeneği için GCC 3.0 (veya daha yeni bir sürüm) ile derlenmiş Linux 2.6.x çekirdeği gerekiyor. Bu sağlanmadığı zaman Binutils'de TLS (thread-local storage) desteği inşa edilemiyor ve NPTL (Native POSIX Threading Library) test takımı segmentasyon hatası ile sonuçlanıyor. Bu yüzden, bundan sonra artık bizim izlememiz gereken yol ise makineyi elimizdeki minimal sistem ile "boot" etmek ve geliştirme sürecine bu şekilde devam etmek. Şimdilerde elimizdeki sistemi "boot" edilebilir hale getirmek için uğraşıyoruz. Daha sonraki aşamalarda da bu minimal sistemin, üzerinde paket derlenebilir hale getirilmesi için çalışmalara devam edeceğiz.
Son olarak, kısa bir süre içerisinde, elimizdeki çalışan minimal sistemi "boot" edebilme hedefimizi gerçekleştirerek, devamında da daha detaylı bir yol haritası sunmayı planladığımızı belirtmek istiyorum.















