Difference between revisions of "Arch Build System (Česky)"

From ArchWiki
Jump to: navigation, search
m (úprava $startdir)
m (úprava $startdir)
Line 297: Line 297:
 
   <pre>
 
   <pre>
 
   build() {
 
   build() {
     cd $startdir/src/$pkgname-$pkgver
+
     cd ${srcdir}/${pkgname}-${pkgver}
 
     ./configure --prefix=/usr
 
     ./configure --prefix=/usr
 
     make || return 1
 
     make || return 1
     make prefix=$startdir/pkg/usr install
+
     make prefix=${pkgdir}/usr install
 
   }</pre>
 
   }</pre>
  
Line 307: Line 307:
 
   <pre>
 
   <pre>
 
   build() {
 
   build() {
     cd $startdir/src/$pkgname-$pkgver
+
     cd ${srcdir}/${pkgname}-${pkgver}
 
     ./configure --enable-arts --prefix=/usr
 
     ./configure --enable-arts --prefix=/usr
 
     make || return 1
 
     make || return 1
     make prefix=$startdir/pkg/usr install
+
     make prefix=${pkgdir}/usr install
 
   }</pre>
 
   }</pre>
  

Revision as of 18:38, 9 March 2009

Template:I18n links start Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n links end

Úvod

Arch Build System (ABS zkratkou) se používá pro

  • Tvorbu nových balíčků jenž ještě neexistují
  • Úpravu existujících balíčků pro vlastní potřeby (např. přidání parametru)
  • Re-build celého vašeho systému s použitím compiler flags, "ala freebsd" (a rozběhnutí modulů jádra s vaším vlastním kernelem!)

ABS není nezbytný pro používání Arch Linuxu ale je užitečný.

Toto how-to se vám pokusí dát přehled o ABS a baličcích Archu, není to kompletní referenční příručka! Pokud chcete víc, zkuste si přečíst manuálovou stránku.

Instalace balíčků

Pro použití abs, musíte nejprve nainstalovat cvsup a wget, to uděláte snadno příkazem:

pacman -Sy cvsup wget

Nebo, pokud máte stažené balíčky do adresáře pojmenovaného 'foo' (pro příklad):

cd foo
pacman -U  cvsup-*.pkg.tar.gz  wget-*.pkg.tar.gz

Co je to balíček ?

Typický soubor balíčku má tvar balíček.pkg.tar.gz

Ve skutečnosti to neni víc než gzipovaný tar archiv který obsahuje:

  • Soubory pro instalaci
  • .PKGBUILD : obsahuje všechna metadata potřebné pacmanem k výměně s balíčky, závislostmi, apod.
  • .FILELIST : seznam všech souborů obsažených v archivu. Je to vhodné pro zpětné odinstalování nebo konfliktu souborů.
  • .INSTALL : soubor pro provedení příkazů po instalaci/upgradu/odebrání.

Co je PKGBUILD a co obsahuje?

Vzhledem k vysvětlení výše, soubor PKGBUILD obsahuje metadata o balíčcích. Je to jednoduchý textový soubor. Zde je příklad:

# $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 # note: if the pkgver had been '0.99-10' then use an underscore. like '0.99_10'
pkgrel=1
pkgdesc="short description of foo"
arch=(i686 x86_64)
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 $srcdir/$pkgname-$pkgver
  ./configure --prefix=/usr
  make || return 1
  make prefix=$pkgdir/usr install
}

Zde si vysvětleme jednotlivé pojmy :

  • # text : komentář
  • # $Id: PKGBUILD,v ... : cvs-tag pro tento balíček (z archlinux-cvs system)
  • # Maintainer : vývojář zodpovědný za balíček v oficiálním repozitáři
  • # Contributor : osoba která napsala PKGBUILD pro tento balíček
  • pkgname : jméno balíčku
  • pkgver : verze balíčku
  • pkgrel : číslo vydání Arch balíčku. V základu je to číslo verze změněné pokud je PKGBUILD modifikován. To se může přihodit z mnoha důvodů pro příklad pokud povolíte compile-time pro něco.
  • pkgdesc : výstižný popis balíčku. Toto je co uvidíte pokud se podíváte na databázi balíčků
  • arch : ukazuje na jakou architektutu je tvořen a odskoušen Arch64_FAQ pro portování.
  • url : domovská stránka softwaru (objevíse pokud kliknete na balíček v databázi balíčků)
  • groups : je užívané ve skupinách balíčků: například když zkusíte nainstalovat kde, nainstalujete všechny balíčky obsažené ve skupině kde.
  • provides : pokud balíček poskytuje jiný balíček, pro příklad kernel-scsi poskytuje kernel
  • depends : seznam závislostí balíčku (co potřebuje k běhu)
  • makedepends : závislosti potřebné k tvorbě balíčku ale nepotřebné k samotnému spuštění
  • conflicts : balíčky které jsou v konfliktu. Např, foo má konflikt s yafoo (yet another foo). Nemohou proto být nainstalovány společně.
  • replaces : nový balíček přepíše starý. Pokud mffoo (my first foo) je podporován, přepíše foo
  • backup : soubory pro zálohu (jako soubor.pacsave) pokud je balíček odstraněn
  • install : specifikuje speciální instalační script který může být obsažen v balíčku (ve stejném adresáři jako PKGBUILD)
  • source : specifikuje cestu odkud stáhnout zdrojový kód balíčku. Může to být např. "http" nebo "ftp".
  • md5sums : md5 součet pro ověření integrity

Tak pojdme si vysvětlit funkci :

  • build : všechny akce potřebné pro tvorbu balíčku (to bude vysvětleno v tomto dokumentu níže)

Dobře, podíváme se co PKGBUILD obsahuje za informace potřebné pro správce balíčků. To je srdce pacmana a abs.

Jsou tam také instalační soubory. Soubor PKGBUILD odkazuje na 'foo.install' jako na instalační soubor balíčku. Zde je příklad instalačního souboru:

post_install() {
/bin/true
}

post_upgrade() {
/bin/true
}

pre_remove() {
/bin/true
}

op=$1
shift

$op "$@"

Zde je vysvětlení funkcí :

  • post_install : tento script se spustí když jsou soubory nainstalovány, předává jeden argument :
    • the package version
  • post_upgrade : tento script se spustí jsou-li soubory upgradovány předává dva argumenty  :
    • the new package version
    • the old package version
  • pre_remove : spustí se jsou-li soubory odstraněny (například zastaví daemona) a předá jeden argument :
    • the package version

Ostatní jsou řádky potřebné pro každou instalaci.

Funkce build

Jestli nejste seznámen s tvorbou balíčku, měl by jste vědět že většina balíčků (ale ne všechny) jde vytvořit touto cestou :

  • rozbalit zdrojový soubor :
  tar -xzf foo-0.99.tar.gz
  tar -xjf foo-0.99.tar.bz2
  • otevřít adresář
cd foo-0.99
  • konfigurace balíčku : V adresáři je malý script zvaný configure který je použit ke konfiguraci balíčku a kontrole zda má váš pačítač všechen potřebný software. Můžete ho spustit pomocí :
./configure [[option]]

Klidně se můžete podívat na nápovědu jak to pracuje :

./configure --help
  • kompilace zdroje :
make
  • instalace
make install

Vždycky by jste měl číst soubor INSTALL pro informace jak program sestavit a nainstalovat ! Všechny balíčky nepoužívají configure; make; make install systém!

Podívejme se nyní na "standardní" build funkci :

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

Co děláme je to, že :

  • zadání adresáře kde máme zdrojové kódy :
cd ${srcdir}/${pkgname}-${pkgver}

Pokud zkoušíte sestavit balíček, pečlivě zkontrolujte, že je to správný adresář : někdy je adresář pojmenován :

tar -xzf foo-0.99.tar.gz

a ls může vypsat :

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

a ne :

  .
  ..
  foo-0.99.tar.gz
  foo-0.99/
  • konfigurace balíčku a provedení instalace v adresáři /usr :
  ./configure --prefix=/usr
  • kompilace
  make || return 1
  • instaluje software ale ne v adresáři /usr, ale v ${pkgdir}/usr.
  make prefix=${pkgdir}/usr install

Co potřebujeme je vytvořit balíček ale neinstalovat ho do standartního adresáře (/usr), my chceme pomocí make nastavit náš speciální adresář : ${pkgdir}/usr.

Strom ABS

Když spustíte poprvé abs :

# abs

provede se synchronizace věci zvané "strom ABS" což by se vlastně dalo nazvat jako cvs system Archlinuxu. Takže co je vlastně ABS strom ? Je uložen v /var/abs vypadá takto :

|-
| -- base/
|-
|     ||-- autoconf/
|-
|     ||-- automake/
|-
|     ||-- ...
|-
| -- devel/
|-
| -- ...
|-
| -- extra/
|-
|      || -- daemons/
|-
|      ||      || -- acpid/
|-
|      ||      ||      || -- PKGBUILD
...    ...    ...    ...

ABS strom má strukturu abs databáze :

  • první úroveň adresáře reprezentuje kategorii
  • první úroveň adresářů reprezentuje balíčky
  • PKGBUILD obsahují všechny informace vztahující se k balíčku

Existuje speciální adresář : local. Tento adresář je váš, Tohle je to pravé místo kam budete vše dávat : Nikdy nemodifikujte položky stromu !.


Takže nyní již víme co je ABS strom. Jak ho ale používat ?

První použití ABS : přizpůsobení balíčku

Tato situace nastane jistě víckrát než se domníváte : oficiální balíčky jsou kompilované s centrálním kódováním --enable nebo --disable.

Pro ilustraci uvedu příklad : foo Balíček foo je sestaven bez arts podpory. Představme si že chceme povolit arts. Zde je návod jak to udělat :

  • najděte kde je foo balíček umístěn. Můžete to udělat pomocí :
  find /var/abs -name "foo"

nebo použijte příkaz slocate :

  slocate foo | grep ^/var/abs

Zjistili jsme že foo patří do extra a multimedia (pro příklad)

  • kopírujte foo PKGBUILD do /var/abs/local/foo
  mkdir /var/abs/local/foo
  cp /var/abs/extra/multimedia/foo/* /var/abs/local/foo
  cd /var/abs/local/foo
  • modifikujte PKGBUILD : pro podporu arts :
  build() {
    cd ${srcdir}/${pkgname}-${pkgver}
    ./configure --prefix=/usr
    make || return 1
    make prefix=${pkgdir}/usr install
  }

becomes :

  build() {
    cd ${srcdir}/${pkgname}-${pkgver}
    ./configure --enable-arts --prefix=/usr
    make || return 1
    make prefix=${pkgdir}/usr install
  }
  • launch makepkg :
  makepkg
  • nainstalujte balíček (-A pro instalaci, -U pro upgrade):
  pacman -A foo-*.pkg.tar.gz
  pacman -U foo-*.pkg.tar.gz

Compiler Flags a úpravy makepkg

Konfigurační soubor makepkg je /etc/makepkg.conf. Zde můžeme nastavit parametry pro gcc a make, také nějaké pro makepkg. Následuje příklad /etc/makepkg.conf.

# FTP/HTTP download utilita kterou makepkg použije k získání zdrojových kódů
export FTPAGENT="/usr/bin/wget --continue --passive-ftp --tries=3 --waitretry=3"

# Informace pro gcc jaký typ počítače používáte.
export CARCH="i686"
export CHOST="i686-pc-linux-gnu"

# Flags pro gcc když balíček zkompiluje
export CFLAGS "-march athlon-tbird -O2 -pipe"
export CXXFLAGS "-march athlon-tbird -02 -pipe"

# Flags pro make když balíček zkompiluje
export MAKEFLAGS="-j 2"

# Povolí barevně odlišený výstup
export USE_COLOR="y"

# Povolte fakeroot pro sestavení balíčků bez nutnosti být root.
# Napište 'man fakeroot' pro více informací
export USE_FAKEROOT="y"

# Adresář kde jsou umístěny všechny balíčky (default is ./)
export PKGDEST=/home/packages

# ABS strom (default is /var/abs)
export ABSROOT=/var/abs

# Zde napište svoje jméno chcete-li
export PACKAGER="John Doe <nowhere@microsoft.com>"

Upozornění: Uživatel by si měl být jistý že změny CFLAGS, CXXFLAGS a MAKEFLAGS nezpůsobí problémy nebo nestabilitu. Většina uživatelů nemění hodnoty pro CARCH, CHOST, a USE_FAKEROOT.

References for gcc and make flags