[Gelistirici] kararli depoya paket gecis sureci

Ekin Meroğlu ekin at pardus.org.tr
5 Ara 2008 Cum 00:46:03 EET


Merhaba;

Öncelikle, bu mailden önce bu (ve bir önceki) tartışmaya yazdığım maillere 
devam ediyorum büyük oranda, okumaya oradan başlarsanız sevinirim. 

Thursday 04 December 2008 tarihinde, Doruk Fisek şunları yazmıştı: 
> On hazirlik :
> 1) Bakıcısız tüm paketler işaretlenir.
> 2) Her bilesen icin birer bilesen sorumlusu secilir.

+1

> 3) Sadece güvenlik güncellemelerinin yapılacağı bir kaynak depo
> olusturulur. Guvenlik depo sorumlusunun, guvenlik takımından biri
> olması mantıklı olur sanırım.

Bu deponun daha öce yazdığım sebeplerle o sürümün bir branch'i olması 
gerekiyor, iki deponun arası açıldıkça neredeyse iki ayrı dağıtım haline 
gelecekler unstable depoyu bleeding-edge tuttukça. 

Depo sorumlusu ile güvenlik ekibinin çok buluşacağını sanmıyorum, bu depo ayrı 
bir dağıtım olmaya gittikçe depo sorumlusu daha yukarıdan büyük resme 
bakacak, depo sorunları ile uğraşabilecek bir geliştirici olmalı, güvenlik 
ekibinin işi başından aşkınken bu görevi ona vermek zor olabilir (aşağıda bu 
depocunun neden bazı işleri paylaşamayacağı da var..) 

> 4) Tercihen ayri bir guvenlik deposu derleme ciftligi olur. Burada
> yapilan tum degisiklikler guvenlik deposundaki paketlere gore
> derlenerek sisteme kurulur. "Kırılma" riski en aza indirilir.

Bu da tercihen değil, zorunlu - kullanıcıya ulaşan paket üretiyorsak sadece o 
kaynak depodan beslenen tamamen izole bir farm gerekiyor. Farm yeterince 
kırılgan ve elle işlediğinden sorun çıkarmaya açık bir adımı tüm sürecin, 
örneğin iki deponun aynı farmda derlenmesi gibi bir şey teoride mümkün olsa 
da öngöremediğimiz sorunlara yol açması kuvvetle muhtemel. Genelde de farmda 
çıkan hataların debug edilmesi uzun ve kafa karıştırıcı oluyor, depoya 
güvenlik güncellemesi yetiştirmeye çalışırken bu tip şeylerle uğraşmak 
zorunda kalmak saçları teker teker yolmak için birebir.

Ya da farm ve paket build yapısını tamamen değiştireceğiz - her paketin temiz 
system.base/devel + bağımlılıklarının kurulduğu bir chroot içinde derlendiği 
bir farm yapısı ilk aklıma gelen yol, ama bu __her__ şeyi değiştirmek demek.
  
> Sürekli düzenek :
> 1) Tüm geliştiriciler surum (2007, 2008, vb) kaynak svn depolarına
> erişip değişiklik yapabilir. Surum-guvenlik kaynak depolarına sadece
> güvenlik takımı insanları yazabilir.

Her geliştiricinin 2008 deposuna kommit yaptığı bir süreçte buildfarmı 
işlettim (2008 çıkmadan önceki süreçte) ve sonucunda amelelik olarak 
gördüğünüz, benim de svn merge kısmının büyük oranda hamallık olduğunu 
düşündüğüm süreci sevinerek işletir hale geldim - Farmı çalıştırdığınızda 
acil güvenlik güncellemesi paketinizin yerine openoffice derlerken bulmak, 
stable depoya almanız gereken paketin yeni -ve alakasız- güncelleme 
atarfından ezildiğini farketmek pek güzel tecrübeler değil. 

Aslında bunlar ve ve aşağıda farm derleme süreci hakkında söylediklerim 
birbirinin devamı : ben 2007 ve 2008 süreçlerinde aynı ofiste yüzyüze bakan 
adamların bu süreçleri birbirleri için nasıl zorlaştırabildiklerini ilk elden 
gördüm, daha çok hamallık yaparım ama sorunları çıktıktan sonra geriye dönmek 
zorunda kalmam bari diye düşündüm.

Merge sürecinin iyileştirilmesi için illa bu işin beş kişiye dağıtılması 
gerekmiyor diye düşünüyorum, bu yolda da konuşalım.

> 2) Her bileşenin sorumlusu, kendi bileşeninde yer alan paketlerde
> yapılan değişiklikleri takip eder. Gerekiyorsa müdahale eder, ilgili
> geliştiriciyi uyarır.

Bu en gerekli adım.

> 3) Her bileşenin sorumlusu, derleme çiftliğinde kendi bileşeninin
> paketlerini derletir[1] (ve test deposuna aktarılmasını sağlamış olur).

Bu pek yapılabilir değil bence : Farm paketleri derlerken tüm paketleri 
gözönüne alarak derleme ve kurma sırası çıkarmak, sonrasında yine tüm deponun 
tekrar oluşturulmasını sağlayıp belli kararlılık testleri yapmak gibi bir 
seri iş yapıyor, genelde de çıkan sorunlar tek bir bileşen çerçevesinde 
kalmıyor. Yani aslında depo yöneticisinin işin elle tutulan tarafını icra 
ettiği yer farm, her noktasını parmaklamak ve yaparken de kırıp dökmemek için 
fazlasıyla (çoğunlukla gereksiz) uğraşmak gerekiyor. 

Yukarıda söylediğim gibi tüm sürecin elle işletiliyor olması da ayrı bir 
sorun - ofiste temel olarak yeni buildfarm'ın denemelerini yapıp delta gibi 
yeni altyapıları geliştirdiğimiz ikinci bir farmımız var, yanyana masalarda 
oturan üç kişi olarak bile birbirimizin ayağına bastığımız oluyor - iki kere 
baştan kurdum o farmı. 
Daha otomatikleşmiş, farmcıbaşının müdahalelerine çok daha az ihtiyaç duyan 
bir farm yazılımı ile belki olabilir, ama paket ve depo üretmek fazlasıyla 
hata kaldırmaz bir iş olduğu için bu geliştirme ve test çalışmaları oldukça 
uzun sürüyor - sadece farm yazılımı değil, bir sürü temel teknolojide 
değişiklik gerektiriyor.

Bu dertli iş için bir köle yeter, beş kişiye aynı dertleri yüklemenin faydası 
yok diyorum yani.     

> 4) Güvenlik deposunun paketlerinin derlenmesi ve depoya aktarılması
> güvenlik depo sorumlusu tarafından yapılır.

Derlenmesi için bakınız yukarısı, yazma hakkı konusunda ise güvenlik için 
2007'de de, 2008'de de bu amaçla güvenlik ekibinden bir kişinin (zaten kaç 
kişiler ki :-)) yazma hakkı vardı (Önce İsmail, sonra Gökçen), 2008'e 
güvenlik ekibi olarak başlayan Gökçen kendi başına gökçen ekibi olup :-) 
Pınar'ı yalnız bırakınca Pınar'ı eklemek aklımıza gelmedi aslında. 

> 4) Güvenlik güncellemeleri test takımı tarafından hemen ve öncelikli
> olarak teste alınırlar. Hem surum-guvenlik hem de surum depolarına göre
> ayrı ayrı test edilirler.

Genelde test edilmeyecek kadar açık olmasını istiyoruz ama security dünyasında 
da ideallik pek gözde bir özellik değil - ayrı bir sec-test süreci tanımlamak 
iyi olur.
 
> 5) system.base bileşenindeki paketlerin testi yapılırken, "emniyet
> mandalı" nedeniyle sadece system.base guncellenmesi durumu da farkli
> guncelleme safhalarindaki Pardus sistem kombinasyonları ile test
> edilmelidir [2].
> [2] Guncelleme yapmak icin degil, sadece bir paket kurmaya kalkan bir
> kullanici zorunlu olarak (istegi disinda) sadece system.base
> guncellemelerini yapiyor. Tum sistemi yukseltmediginden dolayi
> bagimliliklardan dolayi problem yasiyor. Bu tur guncellemeyi "zorla"
> yaptirdigimizdan, hic problem yasanmamasi gerekir bu durumda.

Tamam bunu test edelim de burada verdiğin örnekte ya aynı şeyden 
bahsetmiyoruz, ya da başka bir sorun var -
Makinemde katapult kurulu değil, sistemim up-to-date değil, katapult kur 
diyorum : 

# pisi it katapult
Total size of package(s): 315.00 KB
Package katapult found in repository pardus-2008-test
katapult-0.3.2.2-12-2.pisi     (315.0 KB)100%    398.63 KB/s [00:00:00] 
[complete]
Installing katapult, version 0.3.2.2, release 12, build 2
Extracting the files of katapult
Configuring katapult package
Configured katapult
Installed katapult

ama depoda system.base güncellemesi var - hemen ardından :

mekbuk ekin # pisi up --dry-run
Updating repositories
* Updating repository: contrib
pisi-index.xml.bz2.sha1sum     (40.0  B)100%      0.00 --/- [--:--:--] 
[complete]
pisi-index.xml.bz2             (118.0 KB)100%      0.00 --/- [--:--:--] 
[complete]
No signature found for 
http://paketler.pardus.org.tr/contrib-2008/pisi-index.xml.bz2
* Package database updated.
* Updating repository: devel
devel repository information is up-to-date.
* Updating repository: pardus-2008-test
pisi-index.xml.bz2.sha1sum     (40.0  B)100%      0.00 --/- [--:--:--] 
[complete]
pisi-index.xml.bz2             (755.0 KB)100%    423.64 KB/s [00:00:00] 
[complete]
No signature found for 
http://yali.pardus.org.tr/pardus-2008-test/pisi-index.xml.bz2
* Package database updated.
Safety switch: Following packages in system.base will be upgraded: pisi
The following packages will be upgraded: pisi package-manager zpspell 
bash-completion gst-plugins-ugly gparted cups
Total size of package(s): 3.13 MB

Tek paket kurarken elle index güncellemediğimiz sürece güncellemeler gelmiyor 
bende ? 

> 6) CD içinde gelen paketler [3], ozel olarak gelistiricisi o paketle
> ilgili kendisinden onay alinmasini istemiyorsa, test deposuna girdikten
> 7 gun sonra test takimi araciligiyla test surecine alinir [4]. Bu
> surecten gecen paketler ilk toplu güncellemede kararli depoya aktarilir.

Bunu CD ile gelenler olarak tanımlamak ne kadar doğru ? CD ile bi ton sürücü 
de geliyor ama kullanıcıların bir bölümü hayatlarında ihtiyaç duymuyorlar 
onlara örneğin.

Aslında test adı altında konuştuğumuz her durumumdaki asıl dert kullanıcıların 
anlamlı bir bölümüne uydurabileceğimiz bir kullanım / güncelleme / kurulum 
senaryosu olmaması - her kullanıcı için ayrı (ve yeni) bir senaryo öncelikli 
oluyor - anlamlı test senaryosu sayısı (neredeyse) pardus kullancısı sayısı 
ile eşit. 

> 7) Test sürecinde yakalanan hatalar için Uluzilla'da bir hata raporu
> açılır ve paketi güncelleyen geliştiriciye atanır. Hata çözüldükten
> sonra süreç yeni paketle tekrar başlar (don't pass go, don't collect
> 200 gayme).

Geliştiricinin test deposuna gönderdiği pakette sorun olduğunu farkettiği anda 
kendine hata girmesi lazım - hadi bakalım :-?

> 8) CD içinde gelmeyen paketler test deposunda haklarında bir hata
> raporu açılmadan 7 gün zaman geçirirlerse [5] ilk toplu güncellemede
> kararlı depoya aktarılırlar.

7 gün yerine ilk önerin iki haftayı tercih edeceğim galiba.
 
> 9) Rüştünü ispatlanmış paketlerin test deposundan kararlı depoya toplu
> güncelleme işlemini ilgili depo sorumlusu her haftanın başında yapar.
> Güncellemeler girdikten sonra Turkce ve Ingilizce olarak depoya yeni
> giren paketleri ve niye yapıldıklarını e-posta ile yayinlar.

Burada yine bir gerekliği hatırlatacağım - bu güncellemeler depoya girerken :
- depoya eksik/kırık bağımlılık girmediği, 
- en azından bir önceki depo state'inde olan bir kullanıcının yeni state'e 
sorunsuz güncelleyebilir durumda olduğunu teste etmemiz gerekiyor - bu uzun 
ve ekip isteyen birşey değil, ama bu adıma kadar her sorunun çözülmüş 
olduğunu, burada bir hatayla karşılaşmayacağımızı kabul etmemeliyiz - örneğin 
yeni kernelle birlikte alınması unutulan bir sürücü depoyu güncellenemez 
halde bırakabiliyor. 

> 10) Pardus deposu için bu süreç oturtulduktan *sonra*, donanım ve insan
> gücü olanakları dahilinde contrib deposu için de uygulanabilir (bir test
> deposu oluşturmak, bileşen sorumluları belirlemek, vb). CD'de gelen,
> system.base ve benzeri paketler olmadığı için, Contrib deposunun test
> süreci sadece 8. maddeden ibaret oluyor elbette.

Bunu bilemiyorum, önemli olan istenip istenmeyeceği - ama stable / unstable 
kaynak depo ayrımı yaparsak contribin de bu şekilde dallanması gerekecek - 
yoksa yine contrib'i hangi depo üzerinde derleyeceğiz karmaşası çıkacak, ve 
bu sefer birbirinden şimdiki test-stable ayrımından çok  daha ayrı iki depo 
olacak.
 
> [1] Bunun kolay yapılabilmesi icin derleme çiftliğinde bazı
> değişiklikler gerekebilir elbette. Ama çok masraf ettirmeyeceğini
> umuyorum.

Ufak değişiklikler masraf çıkarmaz ama senin senaryoya uydurmak farm sürecini 
tamamen değiştirip oldukça otomatize etmek gerektiriyor, bu da kolay ve 
ağrısız bir süreç değil - tahminen bayağı uzun ve masraflı olur.

> [4] CD'de gelen paketler kullanicinin sistemine zorunlu olarak
> kuruldugundan ve ozellikle kaldirilmadiklari surece tum kullanicilarda
> guncelleneceginden ozel olarak dikkat edilmesi gerekiyor.

+1, ama bu özel dikkat biraz muallak, nasıl kağıda dökülür bilemiyorum - her 
paketin dikkat isteyen noktaları ayrı çünkü.

Özetle, çok başındayız, bu sürece karar vermek kendi başına uzun bir süreç 
olacak. Yapmamız elzem, ama hem karar hem uygulama sürecinde bu tartışmaların 
on katı gerekecek. Bence sorun değil uzun ve zor olması, ama tüm 
geliştiricilerin katkıda bulunup beyin fırtınası (ben beyin fırtınası gördüm) 
yapmadan imkansıza yakın.
--
İyi Çalışmalar;
Ekin Meroglu <ekin_at_pardus.org.tr>

... did i listen to pop music because i was miserable, or was i miserable
because i listened to pop music?... - rob [nick hornby / hi fi]



Gelistirici mesaj listesiyle ilgili daha fazla bilgi