Nasil Archlinux ABS

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ı

Archlinux ile paket olusturma sistemi

Bu sistem (kisa adiyla ABS) asagidaki isler icin kullanilir ;

1. Yeni cikan yazilimlar icin paket hazirlar.

2. Varolan bir paketin ihtiyaca gore degistirilmesi (bazi ozelliklerin cikartilmasi ve eklenmesi vs.)

3. Sisteminizi tekrardan olusturmada.

Abs icin illaki arch linux kullanmak gerekli degildir, fakat kullanislidir..

Bu belge ABS ve arch paketleri hakkinda genel bir baslangic amacli yazilmistir kullanici klavuzu niteliginde degildir, eger daha fazla bilgi ogrenmek istiyorsaniz man sayfasina basvurun...

Paketlerin Kurulumu

Abs`yi kullanabilmek icin, ilk olarak cvsup ve wget paketlerinin sistemde kurulu olmasi gereklidir.

#pacman -Sy cvsup wget

veya paketleri daha onceden indirdip bir klasore kopyaladiysaniz (ornegin tmp klasoru):

#cd tmp
#pacman -A  cvsup-*.pkg.tar.gz  wget-*.pkg.tar.gz

Paket dosyasi nedir?

1. genel olarak paket, "foo.pkg.tar.gz" isimli bir dosyadir.

2. Aslinda, bildiginiz sikistirilmis arsiv dosyasindan baska birsey degildir ve asagidaki bilgileri icerir ;


Kurulum icin gereken Dosyalar

.PKGINFO : pacman`in ihtiyac duydugu tum `metadata` lari ve bagimliliklari icerir.

.FILELIST : arsivin tum dosyalarini listeler, paketi kaldirmak veya cakismalari kontrol etmek icin kullanilir.

.INSTALL : kurulum/guncelleme/kaldirma evresinden sonra komutlari calistirmak icin kullanilan dosyadir.

PKGBUILD nedir ve neler icerir?

PKGBUILD paketin hazirlanmasi icin tum gerekli `metadata`lari icerir basit anlasilmasi kolay duz bir text dosyasidir, ornegin;

Dosya: PKGBUILD
# $Id: PKGBUILD,v 1.12 2003/11/06 08:26:13 dorphell Exp $
# Maintainer: judd <jvinet@zeroflux.org>
# Contributor: Judd Vinet <jvinet@zeroflux.org>
pkgname=foo
pkgver=0.99
pkgrel=1
pkgdesc="short description of foo"
url="http://www.foo.org"
groups=
provides=
depends=('qt' 'python')
makedepends=('guile')
conflicts=('yafoo')
replaces=('mffoo')
backup=('/etc/foo/foo.conf')
install=('foo.install')
source=("http://www.foo.org/download/$pkgname-$pkgver.tar.gz")
md5sums=('2c0cca3ef6330a187c6ef4fe41ecaa4d35175bee593a7cc7d6205584a94d8625')

build() {
  cd $startdir/src/$pkgname-$pkgver
  ./configure --prefix=/usr
  make || return 1
  make prefix=$startdir/pkg/usr install
}

Parametreler aciklanmasi

# text : aciklama satiri

# $Id: PKGBUILD,v ... :

# Maintainer : paketi hazirlayan kisinin adi

# Contributor : paketi ilk yazan kisinin adi budurumda her iki isimde ayni

.pkgname : paketin adi

.pkgver : paketin surumu

.pkgrel : arch paketinin surum numarasi, paket surumunden farklidir, PKGBUILD degistiyi zaman buda degisir.

.pkgdesc : pakethakkinda kisa bir aciklama, paket deposunda arandigi zaman cikacak aciklama

.url : paketin internet adresi

.groups : paketleri gruplamak icin kullanilir : ornegin kde`yi yuklemek istediginizde kde grup`una dagil olan tum paketleri yukler.

.provides : eger bir paket baska bir paketi sagliyorsa kullanilir (bagimlilik ile karistirmayin) ornegin kernel-scsi kerneli saglar

.depends : paketin bagimli oldugu kisacasi calisa bilmesi icin ihtiyac duydugu diger paketler.

.makedepends : paketi olusturmak icin istenilen bagimliliklar, paket birkez olusturulduktan sonra ihtiyac duyulmaz.

.conflicts : bu paketler ayni anda kurulamaz ornegin foo paketu yafoo adli paketle cakistigindan dolayi es zamanli kurulamaz

.replaces : yeni paket eski paketin yerine gelir. ornegin myfoo (ilk olan) artik desteklenmiyor ve foo dosyasi ile yerdegistirmis.

.backup : yedeklenecek dosya (paket kaldirilmak istendiginde kullanilir)

.install : ozel bir kurulum scriptini belirler, paketin icinde bulunur (PKGBUILD ile ayni klasorde bulunur).

.source :paketin cekilecegi adresi belirtir. "http" yada "ftp" . "pkgname ve pkgver" adli degiskenler kullanilmistir, surum degistiginde kaynagin degismesini engeller.

.md5sums : paketin dogrulugunu kontrol eder


Fonksiyon nedir neye yarar?

.build : paket`i olusturmak icin gerekli tum atraksiyonlar (ayrintili olarak aciklanacaktir).

Goruldugu gibi PKGBUILD paket yoneticisi tarafindan istenilen tum bilgileri icerir. pacmanin ve abs nin kalbidir. Ayrica kurulum dosyalarida bulunur. PKGBUILD "foo.install" paketin kurulum dosyasini belirtir. ornek bir kurulum dosyasi :

Dosya: $Kurulum Dosyasi
post_install() {
/bin/true
}

post_upgrade() {
/bin/true
}

pre_remove() {
/bin/true
}

op=$1
shift

$op $*

fonksiyonlarin aciklamalari:

.post_install : bu skript dosyalar kurulduktan sonra calisir, birtane arguman almistir : paketin surumu

.post_upgrade : bu skript paket guncellendikten sonra calisir, iki tane arguman almistir :yeni paket surumu ve eski paket surumu

.pre_remove : bu skript paket kaldirildiktan sonra calisir, birtane arguman almistir :paketin surumu

alttaki son 3 satir her kurulum dosyasi tarafindan istenilir sabittir.

Build fonsiyonu

eger paket olusturma islemini ilkkez yapiyorsaniz, bilmelisinizki cogu paket (hepsi degil) asagidaki yolla olusturulur

1. kaynak dosyayi acmak

#tar -xzf foo-0.99.tar.gz
#tar -xjf foo-0.99.tar.bz2 

2. dizine gitmek

#cd foo-0.99

3. paketin konfigurasyonunu yapmak: genellikle kaynak dizindeki "configure" adli skript paketi konfigurasyon etmek icin kullanilir. gerektiginde cesitli ozellikler eklenir ve cikartilir (ornegin kurulum dizini vs. vs.)

#./configure [option]

nasil calistigini anlamak icin yardim secenegini deneyin nasil calistigini daha iyi anlayabilirsiniz :

#./configure --help

4. kaynagi derlemek

#make


5. kurulum

#make install


Bununla birlikte herzaman INSTALL dosyasini okumanizi tavsiye ederim, paketin nasil kurulacagi bilmek icin gerekli her paket configure; make; make install; kullanmiyabilir


Dosya: Standart bir build fonksiyonu:

build() {
  cd $startdir/src/$pkgname-$pkgver
  ./configure --prefix=/usr
  make || return 1
  make prefix=$startdir/pkg/usr install
}

build fonksiyonu ile ne yapariz

1. kaynagin acildigi dizine gir

cd $startdir/src/$pkgname-$pkgver

kaynagin acildigi isim bazen degisik olabilir, dogru dizin oldugundan emin olun. Bazen acilan dizin farkli isimde olabilir : ornegin

#tar -xzf foo-0.99.tar.gz

ve "ls" komutunun ciktisi asagidaki gibi olabilir

.
..
foo-0.99.tar.gz
foo/

2. paketi konfigurasyon eder ve /usr dizininin icine kurar

./configure --prefix=/usr

3. derleme

make || return 1

4.paketi $startdir/pkg/usr icine kur, boylelikle pacman dosyalari kontrol edebilir

make prefix=$startdir/pkg/usr install

yapmak istedigimiz sey paketi kurmak yerine olusturmak. O halde standart kurmak yerine (/usr), tum dosyalari kendi istedigimiz ozel klasore koy. Boylelikle, "makepkg" ile paket hangi dosyalari kuracagini gorebilir ve kullanilacak paketleri arch paketine sikistirabilir.

Not : bazi durumlarda prefix takisi makefile icinde kullanilmaya bilir; yerine DESTDIR kullanilabilir, eger yaratilan "filelist" olmasi gerektiginden kisa ise, "make DESTDIR=$startdir/pkg install" cozumunu deneyin. eger calismaz ise "INSTALL" dosyasindan kurulum komutlarini ayrintili bir sekilde incelemeniz gerekir.

ABS agaci

Abs`yi ilk calistirdiginizda;

#abs

cvs sistemini kullanarak arch serverdeki database ile kendini senkronize eder. Peki tam olarak nedir bu abs agac? /var/abs altinda bulunan asagidaki gibi gozuken bir agactir.

Dosya: ABS agaci
| -- base/

|     |-- autoconf/

|     |-- automake/

|     |-- ...

| -- devel/

| -- ...

| -- extra/

|      | -- deamons/

|      |      | -- acpid/

|      |      |      | -- PKGBUILD

...    ...    ...    ...


Abs agaci paket database`indeki yapi ile tamamen aynidir.

.ilk seviyedeki dizin kategoriye simgeler .ikinci seviye dizinler paketleri simgeler .PKGBUILD paket ile iliskili olan her bilgiyi icerir

Oteyandan, ozel bir dizin vardir bu "local" dizinidir; bu dizin kendimize aittir, herseyi uyguladigimiz dizindir. Agacin geri kalan bolumlerini degistirmemiz kisitlanmistir.

Abs`nin ilk kullanimi:

Paket iceriginin ayarlanmasi

Bu durum dusundugunuzden cok fazla karsiniza gelebilir. Bircok paket ontanimli olan yasal --enable yada --disable secenekleri ile derlenir, fakat bu secenekler gerekli olmayabilir bunu anlamak icin bir ornekle aciklayalim. Ornegin foo paketi "arts" destegi onayi verilmeden olusturulmustur, fakat biz paketimizin "arts" destegi ile olusturmak istiyoruz nasil yaptigimizi inceleyelim:

1. Ilk olarak paketin nerede konumlandigini bulalim, bu islemi su sekilde yapabiliriz:

foo paketini http://archlinux.org/packages.php adresinden bakarak yada find /var/abs -name "foo" komutunu kullanarak yada slocate foo | grep /var/abs komutunu kullanarak elde edebiliriz. her 3 durumda paketinin "extra" "multimedia" altinda konumlandigini bulmus oluruz.

2. foo PKGBUILD dosyasini /var/abs/local/foo dizini altina kopyalayalim.

#mkdir /var/abs/local/foo
#cp /var/abs/extra/multimedia/foo/* /var/abs/local/foo
#cd /var/abs/local/foo

3. PKGBUILD dosyasini degistirelim : arts destegini verelim.

Dosya: PKGBULD in degismemis hali :
build() {
  cd $startdir/src/$pkgname-$pkgver
  ./configure --prefix=/usr
  make || return 1
  make prefix=$startdir/pkg/usr install
}
Dosya: degistikten sonra:
build() {
  cd $startdir/src/$pkgname-$pkgver
  ./configure --enable-arts --prefix=/usr
  make || return 1
  make prefix=$startdir/pkg/usr install
}

4. makepkg`yi calistirin

#makepkg


5. paketi asagidaki komutu kullanarak kuruluma baslayin (-A paketi kurmak -U kurulu paketi guncellemek)

pacman -A foo-*.pkg.tar.gz
pacman -U foo-*.pkg.tar.gz

Derleyici takilari ve makepkg nin degistirilmesi

makepkg`nin konfigurasyon dosyasi /etc/makepkg.conf dir. Bu dosya icinde "gcc ve make" icin degisken parametreleri ayarlayabilirsiniz. ornek bir makepkg dosyasi :

Dosya: /etc/makepkg.conf
# The FTP/HTTP download utility that makepkg will use to acquire sources
export FTPAGENT="/usr/bin/wget --continue --passive-ftp --tries=3 --waitretry=3"

# Information passed to gcc about what type of computer this is.
export CARCH="i686"
export CHOST="i686-pc-linux-gnu"

# Flags passed to gcc when a package is being compiled
export CFLAGS="-march=athlon-tbird -O2 -pipe"
export CXXFLAGS="-march=athlon-tbird -02 -pipe"

# Flags passed to make when a package is being compiled
#export MAKEFLAGS="-j 2"

# Enable colorized output messages
export USE_COLOR="y"

# The remaining variables only affect the behavior of makepkg
# Enable fakeroot for building packages as a non-root user.
# See 'man fakeroot' for more information on fakeroot
export USE_FAKEROOT="y"

# The directory where all packages will be placed (default is ./)
#export PKGDEST=/home/packages

# Base of the ABS tree (default is /var/abs)
#export ABSROOT=/var/abs

# Set this if you want your name to show up in the packages you build
#export PACKAGER="John Doe <nowhere@microsoft.com>"  

Dikkat : Kullanici`nin CFLAGS, CXXFLAGS, ve MAKEFLAGS degiskenlerine yaptigi degisikliklerden emin olmalidir aksi taktirde paketlerin derlenmesinde tutarsiz durumlar olusabilir. Ayrica arch linux kullanicilarinin CARCH, CHOST, ve USE_FAKEROOT degiskenlerini degistirmeye ihtiyaci yoktur.

[Gcc ve make takilari icin basvuru adresleri]

http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Option-Summary.html#Option-Summary http://www.gnu.org/software/make/manual/html_chapter/make_9.html#SEC102

Olcy

Kaynak Site: http://wiki2.archlinux.org/index.php/ABS%20-%20the%20Arch%20Build%20System