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