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

From ArchWiki
Jump to: navigation, search
 
(wikify some external links, use https for archlinux.org)
(32 intermediate revisions by 15 users not shown)
Line 1: Line 1:
 +
[[Category:Package management (Česky)]]
 +
[[Category:Package development (Česky)]]
 +
[[Category:Development (Česky)]]
 +
[[Category:Tutorials (Česky)]]
 +
[[Category:Česky]]
 +
[[da:Arch Build System]]
 +
[[de:Arch Build System]]
 +
[[el:Arch Build System]]
 +
[[en:Arch Build System]]
 +
[[es:Arch Build System]]
 +
[[fr:ABS]]
 +
[[it:Arch Build System]]
 +
[[ja:Arch Build System]]
 +
[[ko:Arch Build System]]
 +
[[pl:Arch Build System]]
 +
[[ro:ABS]]
 +
[[ru:Arch Build System]]
 +
[[tr:Arch_derleme_sistemi]]
 +
[[zh-CN:Arch Build System]]
 +
[[zh-TW:Arch Build System]]
 
==== Úvod ====
 
==== Úvod ====
Arch Build System (ABS for short) se používá pro
+
Arch Build System (ABS zkratkou) se používá pro
  
 
* Tvorbu nových balíčků jenž ještě neexistují
 
* Tvorbu nových balíčků jenž ještě neexistují
 
* Úpravu existujících balíčků pro vlastní potřeby (např. přidání parametru)
 
* Ú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, "a la freebsd" (a rozběhnutí modulů jádra s vaším vlastním kernelem!)
+
* 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ý.
 
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.
 
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:
 +
 +
<pre>
 +
pacman -S cvsup wget</pre>
 +
 +
Nebo, pokud máte stažené balíčky do adresáře pojmenovaného 'foo' (pro příklad):
 +
 +
<pre>
 +
cd foo
 +
pacman -U  cvsup-*.pkg.tar.gz  wget-*.pkg.tar.gz</pre>
 +
 +
==== 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 (Česky)|PKGBUILD]] obsahuje metadata o balíčcích. Je to jednoduchý textový soubor. Zde je příklad:
 +
 +
<pre>
 +
# $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
 +
}
 +
</pre>
 +
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 [https://archlinux.org/packages/ 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ř, <i>foo</i> má konflikt s <i>yafoo (yet another foo)</i>.  Nemohou proto být nainstalovány společně.
 +
* '''replaces''' : nový balíček přepíše starý.  Pokud <i>mffoo (my first foo)</i> je podporován, přepíše <i>foo</i>
 +
* '''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:
 +
 +
<pre>
 +
post_install() {
 +
/bin/true
 +
}
 +
 +
post_upgrade() {
 +
/bin/true
 +
}
 +
 +
pre_remove() {
 +
/bin/true
 +
}
 +
 +
op=$1
 +
shift
 +
 +
$op "$@"
 +
</pre>
 +
 +
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 <em>předává dva argumenty </em> :
 +
** 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 :
 +
 +
  <pre>
 +
  tar -xzf foo-0.99.tar.gz
 +
  tar -xjf foo-0.99.tar.bz2</pre>
 +
 +
* otevřít adresář
 +
 +
  <pre>cd foo-0.99</pre>
 +
 +
* konfigurace balíčku : V adresáři je malý script zvaný <code>configure</code> 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í :
 +
 +
  <pre>./configure [[option]]</pre>
 +
 +
Klidně se můžete podívat na nápovědu jak to pracuje :
 +
 +
  <pre>./configure --help</pre>
 +
 +
* kompilace zdroje :
 +
 +
  <pre>make</pre>
 +
 +
* instalace
 +
 +
  <pre>make install</pre>
 +
 +
Vždycky by jste měl číst soubor <code>INSTALL</code> pro informace jak program sestavit a nainstalovat ! '''Všechny balíčky nepoužívají <code>configure; make; make install</code> systém!
 +
 +
Podívejme se nyní na "standardní" build funkci :
 +
 +
<pre>
 +
build() {
 +
  cd ${srcdir}/${pkgname}-${pkgver}
 +
  ./configure --prefix=/usr
 +
  make || return 1
 +
  make prefix=${pkgdir}/usr install
 +
}
 +
</pre>
 +
 +
Co děláme je to, že :
 +
* zadání adresáře kde máme zdrojové kódy :
 +
 +
  <pre>cd ${srcdir}/${pkgname}-${pkgver}</pre>
 +
 +
Pokud zkoušíte sestavit balíček, pečlivě zkontrolujte, že je to správný adresář : někdy je adresář pojmenován :
 +
 +
  <pre>tar -xzf foo-0.99.tar.gz</pre>
 +
 +
a <code>ls</code> může vypsat :
 +
 +
  <pre>
 +
  .
 +
  ..
 +
  foo-0.99.tar.gz
 +
  foo/</pre>
 +
 +
a ne :
 +
 +
  <pre>
 +
  .
 +
  ..
 +
  foo-0.99.tar.gz
 +
  foo-0.99/</pre>
 +
 +
* konfigurace balíčku a provedení instalace v adresáři <code>/usr</code> :
 +
 +
  <pre>
 +
  ./configure --prefix=/usr</pre>
 +
 +
* kompilace
 +
 +
  <pre>
 +
  make || return 1</pre>
 +
 +
* instaluje software ale ne v adresáři <code>/usr</code>, ale v <code>${pkgdir}/usr</code>.
 +
 +
  <pre>
 +
  make prefix=${pkgdir}/usr install</pre>
 +
 +
Co potřebujeme je vytvořit balíček ale neinstalovat ho do standartního adresáře (<code>/usr</code>), my chceme pomocí <code>make</code> nastavit náš speciální adresář : <code>${pkgdir}/usr</code>.
 +
 +
==== Strom ABS ====
 +
 +
Když spustíte poprvé abs :
 +
 +
<pre>
 +
# abs</pre>
 +
 +
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 :
 +
 +
<pre>
 +
|-
 +
| -- base/
 +
|-
 +
|    ||-- autoconf/
 +
|-
 +
|    ||-- automake/
 +
|-
 +
|    ||-- ...
 +
|-
 +
| -- devel/
 +
|-
 +
| -- ...
 +
|-
 +
| -- extra/
 +
|-
 +
|      || -- daemons/
 +
|-
 +
|      ||      || -- acpid/
 +
|-
 +
|      ||      ||      || -- PKGBUILD
 +
...    ...    ...    ...
 +
</pre>
 +
 +
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 <code>--enable</code> nebo <code>--disable</code>.
 +
 +
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í :
 +
 +
  <pre>
 +
  find /var/abs -name "foo"</pre>
 +
 +
nebo použijte příkaz slocate :
 +
 +
  <pre>
 +
  slocate foo | grep ^/var/abs</pre>
 +
 +
Zjistili jsme že foo patří do <code>extra</code> a <code>multimedia</code> (pro příklad)
 +
 +
* kopírujte ''foo'' <code>PKGBUILD</code> do <code>/var/abs/local/foo</code>
 +
 +
  <pre>
 +
  mkdir /var/abs/local/foo
 +
  cp /var/abs/extra/multimedia/foo/* /var/abs/local/foo
 +
  cd /var/abs/local/foo</pre>
 +
 +
* modifikujte <code>PKGBUILD</code> : pro podporu '''arts''' :
 +
 +
  <pre>
 +
  build() {
 +
    cd ${srcdir}/${pkgname}-${pkgver}
 +
    ./configure --prefix=/usr
 +
    make || return 1
 +
    make prefix=${pkgdir}/usr install
 +
  }</pre>
 +
 +
becomes :
 +
 +
  <pre>
 +
  build() {
 +
    cd ${srcdir}/${pkgname}-${pkgver}
 +
    ./configure --enable-arts --prefix=/usr
 +
    make || return 1
 +
    make prefix=${pkgdir}/usr install
 +
  }</pre>
 +
 +
* launch <code>makepkg</code> :
 +
 +
  <pre>
 +
  makepkg</pre>
 +
 +
* nainstalujte balíček (<code>-A</code> pro instalaci, <code>-U</code> pro upgrade):
 +
 +
  <pre>
 +
  pacman -A foo-*.pkg.tar.gz
 +
  pacman -U foo-*.pkg.tar.gz</pre>
 +
 +
==== Compiler Flags a úpravy makepkg====
 +
 +
Konfigurační soubor <code>makepkg</code> je <code>/etc/makepkg.conf</code>.  Zde můžeme nastavit parametry pro <code>gcc</code> a <code>make</code>, také nějaké pro <code>makepkg</code>.  Následuje příklad <code>/etc/makepkg.conf</code>.
 +
 +
<pre>
 +
# 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>"
 +
</pre>
 +
 +
Upozornění: Uživatel by si měl být jistý že změny <code>CFLAGS</code>, <code>CXXFLAGS</code> a <code>MAKEFLAGS</code> nezpůsobí problémy nebo nestabilitu.  Většina uživatelů nemění hodnoty pro <code>CARCH</code>, <code>CHOST</code>, a <code>USE_FAKEROOT</code>.
 +
 +
References for gcc and make flags
 +
* [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]

Revision as of 04:05, 3 December 2012

Ú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 -S 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