arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
377 lines (262 loc) • 12 kB
Markdown
## Contents
* [1 Úvod](#.C3.9Avod)
* [2 Instalace balíčků](#Instalace_bal.C3.AD.C4.8Dk.C5.AF)
* [3 Co je to balíček ?](#Co_je_to_bal.C3.AD.C4.8Dek_.3F)
* [4 Co je PKGBUILD a co obsahuje?](#Co_je_PKGBUILD_a_co_obsahuje.3F)
* [5 Funkce build](#Funkce_build)
* [6 Strom ABS](#Strom_ABS)
* [7 První použití ABS : přizpůsobení balíčku](#Prvn.C3.AD_pou.C5.BEit.C3.AD_ABS_:_p.C5.99izp.C5.AFsoben.C3.AD_bal.C3.AD.C4.8Dku)
* [8 Compiler Flags a úpravy makepkg](#Compiler_Flags_a_.C3.BApravy_makepkg)
#### Ú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](/index.php/PKGBUILD_(%C4%8Cesky) "PKGBUILD (Česky)") 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ů](https://archlinux.org/packages/)
* **arch** : ukazuje na jakou architektutu je tvořen a odskoušen [Arch64 FAQ](/index.php/Arch64_FAQ "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
* [[1]](http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Option-Summary.html#Option-Summary)
* [*chapter/make*9.html#SEC102](http://www.gnu.org/software/make/manual/html)