10 Temmuz 2011 Pazar

OpenSUSE Build Service Projesi

     Geliştirmeye başladığımız build service projesinde ilk olarak nelere gereksinimimiz olduğunu araştırmaya başladık. Önce build service'in ne olduğundan bahsettikten sonra bu iş için nasıl araçlara ihtiyaç duyduğumuzu ve bunları nasıl işler hale getirdiğimizi anlatacağım.
   
     Open Build Service, openSUSE' nin geliştirdiği, farklı mimari ve işletim sistemlerinin(Fedora, Ubuntu, Debian, Mandriva gibi dağıtımlar) desteklendiği bir paket derleme platformudur, özet olarak. Projemizin amacıysa sadece RPM ve dpkg paket desteği olan build service' e pisi desteği kazandırmak.
 
     OBS kurulumu öncesi, kurulum yapacağımız bilgisayarın internete çıkıp çıkamadığını ifconfig ile kontrol edip dhcpcd ile ip aldık. İnternete erişir hale getirdik.·
    # ifconfig eth1 down  // kapatma
    # ifconfig eth1 up      // açma

    #dhcpcd eth1
    ile ip alma işlemini yaptırdık, eğer yanıt gelmezse (timed out gibi) killall dhcpcd ile süreci öldürüp yeniden üstteki komutla ip alma işlemini tekrarladık.

     OBS kurulumu için ilk önce iki fiziksel harddisk gerekli. Tek disk ile yapma yolları da var ama biz iki fiziksel disk ile çalıştık. Bunlardan ilkine    
http://download.opensuse.org/repositories/openSUSE:/Tools/images/obs-server.x86_64-2.X.Y-BuildN.M-raw.bz2  
adresinden indirdiğimiz iso ile /dev/sda diskine CD'den yürüterek obs-server kurulumunu yaptık.

# fdisk /dev/sda; /dev/sdb -> primary (birincil) partition üretmek
# pvcreate /dev/sda1 -> LVM hacimlerini oluşturmak için hazırlık
# vgcreate "OBS" /dev/sda1-> Mantıksal araç üretmek
# lvcreate -L 50G -n "server" /dev/OBS -> Not : Disk boyutuyla uyumlu olmalı.
# vgscan
# mkfs.ext4 /dev/OBS/server

    Sırasıyla yukarıdaki komutları uygulayarak obs - server kurulumunda ilerledik. Bu aşamaların ayrıntılı anlatımına [1]' deki linkten ulaşabilirsiniz.

     İkinci disk içinde obs workerlarını yarattık. OBS workerlarını oluşturmak için fdisk yardımıyla ikinci disk üzerinde LVM hacimlerini oluşturduk. OBS sunucusu boot ederken sistemdeki tüm LVM hacimlerini tarayarak arıyor ve bunları data partition olarak bağlıyor.

     Devamında oluşturduğumuz bu LVM üzerinde yine fdisk yardımıyla 2 tane worker yarattık. Her bir worker' da iki adet worker_root_1, worker_swap_1 gibi partitionlar oluşturduk. Bunlar adlarından da anlaşılacağı gibi biri asıl dosya sistemi diğeri de swap alanı için vardı. Ayrıca performansı arttırmak için indirilen paketlerin ortak tutulacağı bir cache alanı oluşturuldu. Bu aşamalarında kodlarını aşağıda kısaca verdim.

     # fdisk /dev/sdX -> fdisk ve 8e ile yeni birincil partition oluşturulur.
     # pvcreate /dev/sdX1 -> lvm için hazırlık kısmı yaratılır
     # vgcreate "OBS" /dev/sdX1-> antıksal araç yaratılır 
     # lvcreate -L 50G -n "cache" OBS 
     # vgscan   // yapılan bölümlemelerden sonra diskin güncellenmiş son halini gösterir 
     # mkfs.ext4 /dev/OBS/cache

      Her worker için iki partition ayrıldı. 
     # lvcreate -L 4G -n "worker_root_1" /dev/OBS 
     # lvcreate -L 512M -n "worker_swap_1" /dev/OBS 
     # lvcreate -L 4G -n "worker_root_2" /dev/OBS 
     # lvcreate -L 512M -n "worker_swap_2" /dev/OBS 
     # vgscan 
     # mkfs /dev/OBS/worker_root_1 
     # mkfs /dev/OBS/worker_root_2

     Disk tanıtma, sunucu kurulumu, disklerin bölümlendirilmesi ve birbirine bağlanmaları sonrasında login olup root parolasını değiştirip
     #insserv sshd·
     #rcsshd start komutlarıyla ssh ı çalışır hale getirdik.

     # insserv -r obsworker 
     # rcobsworker stop

     Yukarıdaki komutlar makine üzerindeki obs - server' ı durdurur. Eğer sen küçük bir sistem ya da başlangıç testleri yürütüyorsan bu gerekli değildir. 

     edit /usr/lib/obs/server/BSConfig.pm 
     If you have the line :- our $obsname = $hostname;
     # unique identifier for this Build Service instance replace it with our 
     $obsname = "your-obs-server-name.yourDomain.com";

     Yukarıdaki komutlarla dosya içine girerek gereken bahsedilen değişiklikler yapıldı.


     # find /etc/init.d -name \*obs\* -exec {} stop \;
     # rcmysql stop

     SSH ile obs sunucusuna bağlanıp yukarıdaki komutlar ile oluşan servisleri çalışır hale getirdik. Bunun sonrasında artk obs.comu.edu.tr adresiyle web arayüzüne erişim sağlamayı başardık. Aşağıdaki adreslerden çalıştırmayı başardığımız uygulamanın belirli kısımlarına erişilebilir.

     webui  -> http://hostname.domain/
     api       -> http://hostname.domain:81/
     repo    -> http://hostname.domain:82/

[1] - http://en.opensuse.org/openSUSE:Build_Service_private_installation#

     Şu an repo kısmı çalışır halde değil, bu konu nasıl halledilir bunun üzerinde çalışmalarıma devam edeceğim. Ve bu arada varolan örnek build service uygulamasını inceliyorum. Kullandığı uygulamalar neye ne kadar etkili bunları anlamaya çalışıyorum. Yapacağımız işin varolan kısımlardan ne kadarını içereceğini ve nelerin eksik olduğunu anlamama yardımcı olacağını düşünüyorum. Tekrar belirtmek isterim [1] deki linkte bu aşmaların daha ayrıntılı haline ulaşabilirsiniz.

     Herkese iyi çalışmalar

1 yorum:

  1. keşke devamı da olsaydı. pardus-anka'da şimdi çok işimize yarardı.

    YanıtlaSil