Nasil Archlinux ABS
From Lapis Wiki
Bu makale NASIL bölümü serisinin bir parçasıdır
|
| MasaÜstü • Donanım • Ağ • 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
