>BuildFarm

>

Build farm hakkında bir ufak çaplı bir yazmıştım ancak kaza sonucu yok olunca kısa ve öz bir şekilde build farmdan bahsetmeyi daha doğru buldum.

Buildfarm bizim elimizle yaptığımız paket derlemeyi otomatikleştirmeye yarayan bir buluş diye adlandırabiliriz. Kendisini doğru yapılandırınca, verilen xml’lerin paketlerini yapıyor, svn’de paketlerde bir değişiklik oluştuğunda haberdar olup onların paketlerini yapıyor, şu paketleri yapmaya başlıyorum, şu paketleri bitirdim ve şu paketlerde sorunlar yaşadım diye mail atıyor. Yapamadığı paketleri de bekletiyor…

Peki çalışır hale nasıl getirilir?

Başlangıçta svndeki son revizyonunda bir takım sorunlar var. Pardus ekibinden yeniden yazıldığı hakkında bilgi aldım. O yüzden sayın Türker Sezer ile konuşmamdan sonra açıklayıcı bilgilerinin ışında revizyon 24480 kullanmaya başladım(Ve onu anlatacağım).

Teknik olarak buildfarm pisinin yapacağı birşeyi yapmıyor. Bizim ile pisi arasında duruyor diyebilirim. Biz buildfarm’a toplu görevler veriyoruz, o da pisiye sırası ile iletiyor, oluşan paketleri bir yere topluyor ve index oluşturuyor(wrapper olarak kullanılıyor yani). Hayat kurtarıyor bile diyebilirim.

İki şeye ihtiyacımız olacak başlangıç olarak;
– buildfarm kaynak kodlarına,
– Buildfarm’a verilecek olan paketlerin pspec.xml ve actions.py içeren havuzu(repository).(Birde pardus’a tabiki)

İlk olarak /root un içerisine indirmemenizi tavsiye ediyorum. Çünkü disk dolsa bile root için ufak bir alanın kalması gerektiği ve böylece sisteme müdahale edebilme imkiyanının bulunabilmesi için…

Örnek olsun diye ben /hede diye bir dizin açtım kabul edelim.

ilk olarak;

# cd /hede
# svn co -r 24480 http://svn.pardus.org.tr/uludag/trunk/buildfarm

Bu sayede build farm kaynak kodlarını sistemimize indirmiş bulunuyoruz.

# svn co http://svn.pardus.org.tr/pardus/2009/devel

Bu sayede havuzu /hede dizinimize indirmiş bulunuyoruz. Bu havuzun svn yapısı ile tutulması buildfarm içinde gereklidir çünkü kendisi bu havuzdaki güncellemeleri kontrol edebiliyor. Böylece kendisine bunları ekledim, bi zahmet yapı ver dememize gerek kalmıyor.

# cd /hede/buildfarm

Bu dizinde bulunan config.py python kodunu düzenleyerek buildfarm’ı çalışır hale getireceğiz(python bilmenize gerek yok bunun için).

localPspecRepo = “/hede/2009/devel” -> Burada indirmiş olduğumuz paket havuzumuzun yolunu gösteriyoruz. Böylece buildfarm ne üzerinde çalışacağını öğreniyor.

logFile = “/var/cache/pisi/buildfarm.log” -> Buildfarm’ın temel loglarının bulunacağı dosyayı belirtiyoruz.

outputDir = “/var/cache/pisi/buildlogs/” -> Yapılmaya çalışılan paketler ile ilgili logların tutulacağı dizini belirtiyoruz.

binaryPath = “/var/cache/pisi/packages/” -> Oluşan paketlerin koyulacağı dizin

testPath = “/var/cache/pisi/packages-test/” -> Build farm’ın kendi oluşturduğu paketlerin dizini

debugSupport = False

debugPath = “/var/cache/pisi/packages-debug/”

ignoreCheck = True -> Actions.py’lerde check kısımlarının geçilmesini sağlar. Pek çok pakette bu testler düzgün yapılamadığı için ön tanımlu true gelir.

sendEmail = True -> Yaptıklarını bize haber verecek olan güzel teknoloji.

mailFrom = “buildfarm@pardus.org.tr” -> Gönderilecek mail’de kimden gelmiş kısmı

announceAddr = “buildfarm@pardus.org.tr” ->

ccList = [“buildfarm@pardus.org.tr”] -> Kime ek olarak gönderilecek

smtpServer = “mail.pardus.org.tr” -> Smtp servisi veren ve mail’in gönderileceği sunucu

useSmtpAuth = True -> Smtp gönderirken kimlik kanıtlaması yapılacağını belirtiyor.

generateDelta = True -> Hayatı kolaylaştıran delta paketlerin yapılacağını belirtiyor.

deltaBlacklist = [] -> Bu liste ise delta paketlerinin yapılmaması gereken paketlerin isimleri yazılması gerekiyor.

Şimdi bir adet mailauth.py diye dosya oluşturuyoruz. Çünkü mail gönderirken hangi kullanıcı ve parolası ile göndereceğini buraya bakarak söyleyecek. İçerisine

username = “hede@hodu.org.tr”
password = “xxxxxxxxxxxxxxxx”

yazılması yeterli. Çalıştırırken ilk olarak repomanager.py çalıştırılması daha sonra ise main.py çalıştırılması gerekmektededir.

Buildfarm çalıştıktan sonra /var/pisi altında iki tane dosya oluşacak;

workQueue, -> Burada yapılacak olan paketlerin pspec.xml’lerinin tam yolları yazılıyor,
waitQueue -> Burada ise yapılmasında bir sorun oluşmuş paketlerin bir sonraki çalışmada yeniden yapılabilmesi için sırada beklemeleri için tam yolları yazılı.

Ek olarak da /etc/pisi/pisi.conf’da bir kaç düzenlemeyle daha hızlı bir buildfarm elde edebiliriz;

[build]
buildhelper = ccache -> Bu seçenek derleme yaparken ccache paketinden yardım alır. Daha hızlı bir derleme oluşur.

buildno = True -> Bu seçenek ile aynı sürümden iki paketin çakışması engellenir.

cflags = -mtune=generic -march=i686 -O2 -pipe -fomit-frame-pointer -fstack-protector -D_FORTIFY_SOURCE=2 -g3 -ggdb -> Sona gelen -g3 -ggdb ile debug parametresi verilmiş olur. Oluşan hatalarda daha anlaşışır çıktılar gözlemlenebilir.

compressionlevel = 9 -> Paketlerdeki sıkıştırma oranını arttırır. Ancak sistemin canına okur.

cxxflags = -mtune=generic -march=i686 -O2 -pipe -fomit-frame-pointer -fstack-protector -D_FORTIFY_SOURCE=2 -g3 -ggdb -> Sona gelen -g3 -ggdb ile debug parametresi verilmiş olur. Oluşan hatalarda daha anlaşı
şır çıktılar gözlemlenebilir

enableSandbox = True -> Paket derlenirken temel sisteme erişim kontorlü yapmasını sağlar.

fallback = ftp://ftp.pardus.org.tr/pub/source/2009 -> Paketin kaynak kodunun adresi cevap vermiyorsa buradan indirmeye çalış.

generateDebug = True ->

host = i686-pc-linux-gnu -> Üzerinde bulunan gcc’nin hangi mimari için derlendiği(biraz karışık oldu galiba 🙂

jobs = -j5 -> Yapılan derleme işleminin paralelleştirilme sayısı(çekirdek sayısı +1 diye hesaplayabiliriz.)

ldflags = -Wl,-O1 -Wl,-z,relro -Wl,–hash-style=gnu -Wl,–as-needed -Wl,–sort-common -> Dinamik kütüphaneler için gerekli bayraklar.

Not: Buildfarm kurarken kullandığınız dağıtımın o sürümünün havuzunu almaya dikkat ediniz(2008 üzerinde 2009 buildfarm’ı mantıklı değil;)

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

I'm not a spammer This plugin created by memory cards