Nasıl : CVS & SVN için PKGBUILD Oluşturmak

From Lapis Wiki

Jump to: navigation, search
Bu makale NASIL bölümü serisinin bir parçasıdır
MasaÜstü Donanım Dağıtımlar
Tarayıcılar Programlama Linux ve Oyunlar

Konu başlıkları

Giriş

  • CVS, SVN & GIT vb geliştiricilerin uygulamaları geliştirmekte kullandıkları versiyon kontrol sistemleridir.Aslında bu sistemler için pkgbuild oluşturmak çok da ekstra bir bilgi gerektirmez.Sadece birkaç detaya ve ipuçlarına dikkat etmeniz yeterli.

Dikkat Edilmesi Gerekenler

  • Öncelikle pkgname yani paketlerimizin adlarını belirlerken hangi sistemi( CVS, SVN & GIT ) kullandığımızı belirtmeliyiz.Bu sayede uygulamanın deneysel olup olmadığı ve,veya hangi version kontrol sisteminin kullanıldığı hakkında bilgimiz olucaktır.Bunun için sadece paket adının yanına -cvs veya -svn veya -git takılarını eklememiz yeterli.
    • Örneğin : lm_sensors-svn
  • Hazırladığımız PKGBUILD'de conflicts yani paketimize çakışan uygulamalara dikkat etmeliyiz.Mesela kararlı sürümü olan bir uygulamaya deneyleysel sürümü için PKGBUILD oluşturuyorsak kararlı sürümünü conflicts yani çakışan paketler arasına eklemeliyiz.
    • Örneğin : cgwd-cvs isimli deneysel sürüm için oluşturduğumuz PKGBUILD'e [ conflicts=('cgwd') ] satırını eklememiz gereklidir.
  • Deneysel sürüm olduğuğundan paketin adını -cvs , -svn ve -git takılarla belirdiğimizden dolayı provides yani başka paketi sağlayan bölümü eklemeliyiz.Mesela kararlı sürüm başka bir paketin bağımlıkları arasında deneysel sürümünde bu bağımlılığı karşılayacağı için provides bölümünü eklememiz gereklidir.
    • Örneğin : cgwd-cvs isimli deneysel sürüm için oluşturduğumuz PKGBUILD'e [ provides=('cgwd') ] satırını eklememiz yeterlidir.
  • İsteseniz replaces yer değiştir bölümünü ekleyebilirsiniz.Bunun için sadece [ provides=('paket') ] satırını eklememiz yeterli.Ancak bu bazen gereksiz hatalara yol açtığından bunu kullanmaktan çekinmelisiniz.
  • Her nekadar gerekli olmasada source=() ve md5sums=() satırlarını eklemelisiniz.Bu sayede metalarınızı AUR'a ekleyebilirsiniz.Aksi takdirde arşiviniz kabul görmez.
  • Yeni başlayanlar için makedepends yani paketin oluşturulması için gerekli bağımlılıklar bölümünü ekleyin.Bu sayede acamiler paketi derlerken sorun çekmeyeceklerdir.
    • Örneğin : svn sürüm kontrol sistemi ile hazırladığımız PKGBUILD'e [ makedepends=('subversion') ] satırını eklememiz yeterlidir.
  • Deneysel sürüm olduğu için bazen PKGBUILD de değişiklik(Yamaların eklenmesi vb) yapmanız gerekebilir.Bu yüzden her değişikliği pkgrel ile belirtebilirsiniz.
    • Örneğin : [ pkgrel=2 ]
  • Kaynaktan ayrı bir yerde paketi derleyebilirsiniz bunun için aşağıdaki satırları eklemeniz yeterlidir.
cp -r src/$_cvsmod src/$_cvsmod-build 
cd src/$_cvsmod-build 
  • pkgver yani sürümünü belirlemek.Cvs ve Git'te tarih=Yıl+ay+gün olarak belirlenir.Svn sisteminde ise revizyon numarası olarak belirlenir.
    • Örneğin : Cvs ve git için oluşturduğumuzPKGBUILD de [ pkgver=20060822 ] paket sürümünü bu şekilde belirleyebiliriz.
    • Svn için revizyon numarasını belirlemek için:
 source PKGBUILD 
 svn log $_svntrunk --limit 1 | grep -m 1 -o "r.*" | cut -d \| -f 1 | sed s@r@@g 
  • Örneğin : [ pkgver=576056 ]

Örnek PKGBUILDLER

CVS

Dosya: CVS için hazırlanmış örnek bir PKGBUILD
 
# Maintainer: Suat <forum.linux-sevenler.org>

pkgname=gset-compiz-cvs
pkgver=20060822
pkgrel=1
pkgdesc="Compiz configurator"
url="http://www.compiz.net"
depends=('xgl-git' 'mesa-xgl-cvs' 'libxevie' 'startup-notification' 'libpng' 'libxdamage' 'libxrandr' 
'gnome-desktop' 'control-center' 'libsvg-cairo' 'libxcomposite' 'glew' 'compiz-quinn-cvs')
provides=('gset-compiz')
replaces=('gset-compiz')
conflicts=('gset-compiz')
makedepends=('cvs')
source=()
md5sums=()

_cvsroot=":pserver:anonymous@metascape.afraid.org:/cvsroot"
_cvsmod="gset-compiz"

build() {
  cd $startdir/src
  msg "Connecting to metascape.afraid.org CVS server...."
  cvs -z3 -d $_cvsroot co -D $pkgver -f $_cvsmod
  cd $_cvsmod
  ./configure --prefix=/usr 

   msg "CVS checkout done or server timeout"
   msg "Starting make..."

#  ./configure --prefix=/opt/gnome --disable-mime-update
   make || return 1
   make DESTDIR=$startdir/pkg install

}

  

SVN

Dosya: SVN için hazırlanmış bir PKGBUILD
 
# Maintainer: suat <forum.linux-sevenler.org>
pkgname=lm_sensors-svn
pkgver=4103
pkgrel=1
pkgdesc="Collection of user space tools for general SMBus access and hardware monitoring."
arch=(i686 x86_64)
depends=('perl')
makedepends=('subversion')
conflicts=('lm_sensors')
backup=(etc/sensors.conf)
provides=('lm_sensors')
replaces=('lm_sensors')
source=()
url="http://www.lm-sensors.org/"
md5sums=()

_svnmod="lm-sensors"
_svntrunk="http://lm-sensors.org/svn/lm-sensors/trunk/"

build() {
  cd $startdir/src/

  svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod

  cd $startdir/src/lm-sensors

  msg "Starting make..."

  make PREFIX=/usr user || return 1
  make user_install PREFIX=/usr DESTDIR=$startdir/pkg

  # FIXME: avoid conflicts with glibc headers
  rm -rf $startdir/pkg/usr/include/linux
}

  

GIT

Dosya: GIT için hazırlanmış bir PKGBUILD örneği
 
# Contributor: DaNiMoTh <jjdanimoth@gmail.com>

pkgname=cairo-git
pkgver=20060822
pkgrel=1
pkgdesc="Cairo vector graphics library"
url="http://cairographics.org/"
depends=('libpng' 'libxrender' 'fontconfig' 'glitz-cvs')
makedepends=('git')
provides=('cairo')
conflicts=('cairo')
replaces=('cairo-devel' 'cairo-cvs')
source=()
md5sums=()

_gitroot="git://git.cairographics.org/git/cairo"
_gitname="cairo"

build() {
  cd $startdir/src
  msg "Connecting to git.cairographics.org GIT server...."

  if [ -d $startdir/src/$_gitname ] ; then
  cd $_gitname && git-pull origin
  msg "The local files are updated."
  else
  git clone $_gitroot
  fi

  msg "GIT checkout done or server timeout"
  msg "Starting make..."

  cp -r $startdir/src/$_gitname $startdir/src/$_gitname-build
  cd $startdir/src/$_gitname-build

  
  ./autogen.sh --enable-glitz --enable-pdf --prefix=/usr
  make || return 1
  make DESTDIR=${startdir}/pkg install
  rm -rf ${startdir}/pkg/usr/share/gtk-doc
  find ${startdir}/pkg -name '*.la' -exec rm {} \;
}

  

Versionpkg ( cvs/svn pkglerini derlemeyi kolaylaştıran betik )

  • Makepkg yerine bundan sonra versionpkg'yi kullanacağız.Bu sayede her güncelleme yaptığımızda sürüm numarısını düzenlememiz gerekmeyecek.
  • Daha detaylı bilgi için Lapis Forum İncelemesi

Versionpkg için gerekli düzenlemeler

  • pkgver'in PKGBUILD'imiz de ilk 10 satır arasında olmalı aksi takdirde versionpkg çalışmayacaktır.

CVS

  • _cvsroot= Bağlanacağımız CVS ağının kök dizinidir. :pserver:anonymous:@Ağ(hede.hödö.bla):/dizin
  • _cvsmod= Ağdan indireceğimiz modulu belirlediğimiz bölümdür.
    • Örneğin :
_cvsroot=":pserver:anonymous@metascape.afraid.org:/cvsroot"
_cvsmod="gset-compiz"
  • Son olarak checkout yani cvs'den kaynağı kontrol komutu.Bir kaç parametre ile birlikte kullanmalıyız
 cvs -z9 -q -d $_cvsroot co -D $pkgver -f $_cvsmod 
    • -z şıkıştırma seviyesini kontrol eder.1 ile 9 arasında tercih yapabilirsiniz.1 (yüksek hız, düşük sıkıştırma) ... 9 (düşük hız, yüksek sıkıştırma) yada 0 sıkıştırmayı devre dışı bırakma anlamına gelir...
    • -D belirlenmiş gün için kaynağı çekmemize yarar.-fparametresi ile birlikte kullanmalıyız aksi takdirde versionpkg sorun çıkaracaktır.Versionpkg $pkgver'i güncel tarih olarak değiştirecektir.
    • -q bir dereceye(Hata vb gibi durumlar hariç) kadar uyarı mesajlarının görünmesini önler

SVN

  • _svntrunk= Uygulamanın çalışma dizini diyebiliriz.Geliştiriciler bütün düzenlemerini burda yaparlar.Bu yüzden buraya projenin SVN trunk adresini eklemeliyiz.
  • _svnmod= Cvs'deki gibi ağdan indireceğimiz modulu belirlediğimiz bölümdür.
    • Örneğin :
_svnmod="lm-sensors"
_svntrunk="http://lm-sensors.org/svn/lm-sensors/trunk/"
  • SVN için checkout komutu:
svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod
    • -r belirlediğimiz gün için geçerli olan kaynağı indirmemize yarar.Versionpkg $pkgver'i güncel revizyon numarası ile değiştirecektir.


Kaynak : Arch-wiki (Arch CVS & SVN PKGBUILD guidelines)

Konu ile ilgili fikirlerinizi paylaşmak için; Lapis Wiki Başlığı