On Mon, May 09, 2011 at 12:10:29PM +0300, Ozan Çağlayan wrote:
>Author: ozan.caglayan
>Date: Mon May  9 12:10:28 2011
>New Revision: 118488
>
>Added:
>   playground/ozan/any/osc/
>   playground/ozan/any/osc/actions.py
>   playground/ozan/any/osc/pspec.xml
>   playground/ozan/any/osc/translations.xml
>Log:
>osc: OpenSUSE build service commander

Merhaba,

Cuma günü Suse'de bunula ilgili bir seminer verilecek. Ona katılmayı
düşünüyorum. Fakat bugün Suse standında uğradığımda orada saat 13:00'de workshp
verileceğini isteyen katılabileceği söylenmişti. Workshop'u veren de bizim eski
Pardus geliştiricilerinden İsmail Dönmez :) 

Her neyse saat 13:00'de oraya vardığımda benden başka kimse yoktu katılan. Bizde
de Berlin'de iki türk oturduk, o anlattı ben de dinledim :) (kimse katılmadığı
için Türkçe konuştuk haliyle)

Bununla ilgili aklıma gelen tüm soruları sordum, aldığım notları bilgi olsun
diye yazıyorum. Sizin de sorularınız varsa, hazır buradayken gidip sorayım.
Buraya yazdığım notlar biraz genel, sadece fikir verebilir, işin teknik
altyapısı ayrı bir konu.

***

İki ana bileşen var, bir OBS (OpenSource Build Service) ve OSC (OBS için konsol
frontendi). Bunların kodu açık ve kullanılabilinir halde. OBS sisteminin bir de
web arayüzü mevcut.

OBS sistemini ya Suse'nin kendi sunucularını kullanarak üye olabiliyorsunuz, ya
da kendimiz sunucuları kurup kullanabiliyoruz. Her iki türde de OBS'de bir takım
değişiklikler yapmamız gerekiyor. Bizim buildfarm.py'yi adapte etmemiz
gerekiyor mesela, pspec.xml'e parser yazmak gerekiyor. Bunları yapabilmek için
de Perl bilgisi gerekiyor çünkü OBS sistemi Perl ile yazılmış.

Örneğin OSB'yi kurduk ve OSC de kullanır halde. İşlevler nedir, ne
yapabileceğiz, neye derman olacak derseniz, onlar da şunlar.

OSC aslında git-vari bir fronted, bazı komutlar şu şekilde:

    osc co home:farslan
    osc commit -m "Initial release"
    osc delete home:farslan chromium-browser
    osc up

Örneğin commit ettikten sonra, daha önce yine OSC ya da web arayüzden
belirlediğiniz mimarilere göre derlemeye başlıyor. Herhangi bir commit'de
doğrudan derlemye başlıyor. Bunu neye göre yaptığını sorduğumda, SUSE'cilerin
bağımlılıklara göre ayarlardıklarını söyledi. Yani örneğin ben vim'e bir commit
yaptım, gcc'ye de başkası bir commit yaptı. O zaman sıraya ilk gcc giriyor.

Build başlamadan önce her bir build aşaması için sanal makine oluşturuluyor.
Makine'de haliyle hiç bir bağımlılık mevcut değil, on-the-fly bağımlılıkları
kuruyur (bizim farmdaki gibi herşeyi kurulu değil yani). Yani vim için bir
değişiklik mi yaptım, osc ile commit ettim örneğin, OBS gidip benim için yeni
bir sanal makine kurup derlemeye başlıyor. Güzel olan ise osc ile doğrudan
farm'da derlenen çıktıları görebilmemiz, hatalara müdahele edebilmemiz.

Burada aklıma takılan, bazı paketlerin derleme işlemi zaten çok uzun sürüyor
(örnek: chromium-browser), öntanımlı olarak her sanal makine de aynı olduğundan
uzun sürebilir. Fakat bunun da önüne geçebiliriz. OBS tarafı bizim elimizde
olduğunda, doğrudan ayrı cluster'ler oluşturabiliriz. Böylelikle derleme süresi
uzun süren paketlere daha güçlü bir sanal makine imkanı verebiliriz mesela.
Bunların hepsi bizim elimizde.

Genel olarak geliştiricilerin ev dizinleri oluyor home:farslan gibi. Bir de ayrı
dizinler mevcut openSUSE:Factory (bizim devel), openSUSE:11_4 (bizim stable),
vs..  Geliştirici sıkıntısı olmadığından Factory'de yüzlerce paketçi ve bunların
paketleri mevcutmuş. Peki bunların koordinesi nasıl oluyor ?

Mesela chromium'un yeni bir sürümü çıktı. Ben bunu openSUSE:Factory'de
güncelledim. Derlendi ve bana gerekli bilgileri verdi. Fakat bazen bir paketi
güncellerken onlarla beraber başka paketleri de derlemem gerekiyor (ABI
kırıldı). O zaman ilk önce asıl paketi (mesela chromium) home:farslan dizinine
kopyalıyorum. Sonra da diğer paketleri kopyalıyorum. Burada tıpkı bizim
playground gibi düşünebilirsiniz. Fakat buradaki farklı olan, sizin yaptığınız
değişikliklerin de doğrudan benim home:farslan'a yansımasıdır. Yani mesela ben
cups'u kopyaladım buraya, Ozan'ın bundan sonra yapacağı tüm commitler de bana
yansıyacak. Ama bu da bir opsiyona bağlı, kopyalareken seçenek sunuluyor,
istediğimde değişiklikler yansayacak, istemediğimde yansımayacak.

Şimdi tüm paketleri aldım, güncelledim iyice. Bunları stable'e merge edeceğim
değil mi ? Doğrudan OBS'nin arayüzünden bir review isteği yolluyorum. Review
isteği yolladıktan sonra benim yaptığım tüm commitler ve değişiklikler
(paketlerle ilgili olanlar) doğrudan review ekibine gidiyor. 

Review ekibi hem otomatik botlardan oluşuyor hem de insanlarda. Otomatik botlar
yapılan değişiklerin kod düzenine kontrol ediyorlar (bizim ismail.py gibi).
Bunun dışında legal-team de mevcut, bu takım da sadece lisans bilgilerine
bakıyor. Bu review ekibi içinde paketin bakıcısı da mevcut (başkasının paketini
değiştirdiğini mesela), ayrıca bir de openSuse:11_4 sürüm yöneticileri mevcut.
Bunlardan hepsinden ACK alması lazım. 

Yani bu adamlar bir nevi bizim Commit listesini takip ediyorlar ve yapılan
değişikleri review ediyorlar. Onların görevi bu. OBS'nin bir güzel yanı ise, ACK
aldığınız paketi otomatik olarak sizin ev dizininzden silmesi. Yani paket'den
onay aldığınızda sizin ev dizinizdeki bununla ilgili tüm paketler siliniyor (bu
da yine opsiyone bağlı)

Bu merge ve review kısımları bizde bir çok yere, özellikle paket reviewlerine
uygulanabilinir. Ciddi avantaj sağlayacağını düşünüyorum.

Biraz uzun oldu biliyorum, ama taze tazeyken yazayım dedim. Merak ettikleriniz
varsa burada doğrudan gidip sorabilirim.

Kolay gelsin, iyi günler

-- 
Fatih Arslan
_______________________________________________
Gelistirici mailing list
Gelistirici@pardus.org.tr
http://liste.pardus.org.tr/mailman/listinfo/gelistirici

Cevap