https://wiki.archlinux.org/api.php?action=feedcontributions&user=M+ax&feedformat=atomArchWiki - User contributions [en]2024-03-29T07:06:39ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=Arch_Build_System_(%C4%8Ce%C5%A1tina)&diff=37847Arch Build System (Čeština)2008-02-29T21:51:10Z<p>M ax: /* Instalace balíčků */</p>
<hr />
<div>[[Category:Package management (Česky)]]<br />
[[Category:Package development (Česky)]]<br />
[[Category:Development (Česky)]]<br />
[[Category:Tutorials (Česky)]]<br />
{{i18n_links_start}}<br />
{{i18n_entry|Česky|ABS - The Arch Build System (Česky)}}<br />
{{i18n_entry|English|ABS - The Arch Build System}}<br />
{{i18n_entry|繁體中文|ABS - The Arch Build System (繁體中文)}}<br />
{{i18n_entry|Polski|ABS - The Arch Build System (Polski)}}<br />
{{i18n_entry|Русский|ABS - The Arch Build System (Russian)}}<br />
{{i18n_links_end}}<br />
<br />
==== Úvod ====<br />
Arch Build System (ABS zkratkou) se používá pro<br />
<br />
* Tvorbu nových balíčků jenž ještě neexistují<br />
* Úpravu existujících balíčků pro vlastní potřeby (např. přidání parametru)<br />
* 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!)<br />
<br />
ABS není nezbytný pro používání Arch Linuxu ale je užitečný.<br />
<br />
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.<br />
<br />
==== Instalace balíčků====<br />
<br />
Pro použití abs, musíte nejprve nainstalovat '''cvsup''' a '''wget''', to uděláte snadno příkazem:<br />
<br />
<pre><br />
pacman -Sy cvsup wget</pre><br />
<br />
Nebo, pokud máte stažené balíčky do adresáře pojmenovaného 'foo' (pro příklad):<br />
<br />
<pre><br />
cd foo<br />
pacman -U cvsup-*.pkg.tar.gz wget-*.pkg.tar.gz</pre><br />
<br />
==== Co je to balíček ?====<br />
<br />
Typický soubor balíčku má tvar ''balíček''.pkg.tar.gz<br />
<br />
Ve skutečnosti to neni víc než gzipovaný tar archiv který obsahuje:<br />
<br />
* Soubory pro instalaci<br />
<br />
*.PKGBUILD : obsahuje všechna metadata potřebné pacmanem k výměně s balíčky, závislostmi, apod.<br />
<br />
*.FILELIST : seznam všech souborů obsažených v archivu. Je to vhodné pro zpětné odinstalování nebo konfliktu souborů.<br />
<br />
*.INSTALL : soubor pro provedení příkazů po instalaci/upgradu/odebrání.<br />
<br />
==== Co je PKGBUILD a co obsahuje?====<br />
<br />
Vzhledem k vysvětlení výše, soubor PKGBUILD obsahuje metadata o balíčcích. Je to jednoduchý textový soubor. Zde je příklad:<br />
<br />
<pre><br />
# $Id: PKGBUILD,v 1.12 2003/11/06 08:26:13 dorphell Exp $<br />
# Maintainer: judd <jvinet@zeroflux.org><br />
# Contributor: Judd Vinet <jvinet@zeroflux.org><br />
pkgname=foo<br />
pkgver=0.99 # note: if the pkgver had been '0.99-10' then use an underscore. like '0.99_10'<br />
pkgrel=1<br />
pkgdesc="short description of foo"<br />
arch=(i686 x86_64)<br />
url="http://www.foo.org"<br />
groups=<br />
provides=<br />
depends=('qt' 'python')<br />
makedepends=('guile')<br />
conflicts=('yafoo')<br />
replaces=('mffoo')<br />
backup=('etc/foo/foo.conf')<br />
install=('foo.install')<br />
source=(http://www.foo.org/download/$pkgname-$pkgver.tar.gz)<br />
md5sums=('2c0cca3ef6330a187c6ef4fe41ecaa4d35175bee593a7cc7d6205584a94d8625')<br />
<br />
build() {<br />
cd $startdir/src/$pkgname-$pkgver<br />
./configure --prefix=/usr<br />
make || return 1<br />
make prefix=$startdir/pkg/usr install<br />
}<br />
</pre><br />
Zde si vysvětleme jednotlivé pojmy :<br />
<br />
* '''# text''' : komentář<br />
* '''# $Id: PKGBUILD,v ...''' : cvs-tag pro tento balíček (z archlinux-cvs system)<br />
* '''# Maintainer''' : vývojář zodpovědný za balíček v oficiálním repozitáři<br />
* '''# Contributor''' : osoba která napsala PKGBUILD pro tento balíček<br />
* '''pkgname''' : jméno balíčku<br />
* '''pkgver''' : verze balíčku<br />
* '''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.<br />
* '''pkgdesc''' : výstižný popis balíčku. Toto je co uvidíte pokud se podíváte na [http://archlinux.org/packages/ databázi balíčků]<br />
* '''arch''' : ukazuje na jakou architektutu je tvořen a odskoušen [[Arch64_FAQ]] pro portování.<br />
* '''url''' : domovská stránka softwaru (objevíse pokud kliknete na balíček v databázi balíčků)<br />
* '''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.<br />
* '''provides''' : pokud balíček poskytuje jiný balíček, pro příklad kernel-scsi poskytuje kernel<br />
* '''depends''' : seznam závislostí balíčku (co potřebuje k běhu)<br />
* '''makedepends''' : závislosti potřebné k tvorbě balíčku ale nepotřebné k samotnému spuštění<br />
* '''conflicts''' : balíčky které jsou v konfliktu. Např, <i>foo</i> má konflikt s <i>yafoo (yet another foo)</i>. Nemůže proto být instalován ve stejnou dobu.<br />
* '''replaces''' : nový balíček přepíše starý. Pokud <i>mffoo (my first foo)</i> je podporován, přepíše <i>foo</i><br />
* '''backup''' : soubory pro zálohu (jako soubor.pacsave) pokud je balíček odstraněn<br />
* '''install''' : specifikuje speciální instalační script který může být obsažen v balíčku (ve stejném adresáři jako PKGBUILD)<br />
* '''source''' : specifikuje cestu odkud stáhnout zdrojový kód balíčku. Může to být např. "http" nebo "ftp". <br />
* '''md5sums''' : md5 součet pro ověření integrity<br />
<br />
Tak pojdme si vysvětlit funkci :<br />
<br />
* build : všechny akce potřebné pro tvorbu balíčku (to bude vysvětleno v tomto dokumentu níže)<br />
<br />
Dobře, podíváme se co PKGBUILD obsahuje za informace potřebné pro správce balíčků. To je srdce pacmana a abs.<br />
<br />
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:<br />
<br />
<pre><br />
post_install() {<br />
/bin/true<br />
}<br />
<br />
post_upgrade() {<br />
/bin/true<br />
}<br />
<br />
pre_remove() {<br />
/bin/true<br />
}<br />
<br />
op=$1<br />
shift<br />
<br />
$op "$@"<br />
</pre><br />
<br />
Zde je vysvětlení funkcí :<br />
<br />
* post_install : tento script se spustí když jsou soubory nainstalovány, předává jeden argument : <br />
** the package version<br />
* post_upgrade : tento script se spustí jsou-li soubory upgradovány <em>předává dva argumenty </em> :<br />
** the new package version<br />
** the old package version<br />
* pre_remove : spustí se jsou-li soubory odstraněny (například zastaví daemona) a předá jeden argument : <br />
** the package version<br />
<br />
Ostatní jsou řádky potřebné pro každou instalaci.<br />
<br />
==== Funkce build====<br />
<br />
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 :<br />
* rozbalit zdrojový soubor : <br />
<br />
<pre><br />
tar -xzf foo-0.99.tar.gz<br />
tar -xjf foo-0.99.tar.bz2</pre><br />
<br />
* otevřít adresář<br />
<br />
<pre>cd foo-0.99</pre><br />
<br />
* 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í :<br />
<br />
<pre>./configure [[option]]</pre><br />
<br />
Klidně se můžete podívat na nápovědu jak to pracuje :<br />
<br />
<pre>./configure --help</pre><br />
<br />
* kompilace zdroje :<br />
<br />
<pre>make</pre><br />
<br />
* instalace<br />
<br />
<pre>make install</pre><br />
<br />
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!<br />
<br />
Podívejme se nyní na "standardní" build funkci :<br />
<br />
<pre><br />
build() {<br />
cd $startdir/src/$pkgname-$pkgver<br />
./configure --prefix=/usr<br />
make || return 1<br />
make prefix=$startdir/pkg/usr install<br />
}<br />
</pre><br />
<br />
Co děláme je to, že :<br />
* zadání adresáře kde máme zdrojové kódy :<br />
<br />
<pre>cd $startdir/src/$pkgname-$pkgver</pre><br />
<br />
Pokud zkoušíte sestavit balíček, pečlivě zkontrolujte, že je to správný adresář : někdy je adresář pojmenován :<br />
<br />
<pre>tar -xzf foo-0.99.tar.gz</pre><br />
<br />
a <code>ls</code> může vypsat :<br />
<br />
<pre><br />
.<br />
..<br />
foo-0.99.tar.gz<br />
foo/</pre><br />
<br />
a ne :<br />
<br />
<pre><br />
.<br />
..<br />
foo-0.99.tar.gz<br />
foo-0.99/</pre><br />
<br />
* konfigurace balíčku a provedení instalace v adresáři <code>/usr</code> :<br />
<br />
<pre><br />
./configure --prefix=/usr</pre><br />
<br />
* kompilace<br />
<br />
<pre><br />
make || return 1</pre><br />
<br />
* instaluje software ale ne v adresáři <code>/usr</code>, ale v <code>$startdir/pkg/usr</code>.<br />
<br />
<pre><br />
make prefix=$startdir/pkg/usr install</pre><br />
<br />
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>$startdir/pkg/usr</code>.<br />
<br />
==== Strom ABS ====<br />
<br />
Když spustíte poprvé abs :<br />
<br />
<pre><br />
# abs</pre><br />
<br />
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 :<br />
<br />
<pre><br />
|-<br />
| -- base/<br />
|-<br />
| ||-- autoconf/<br />
|-<br />
| ||-- automake/<br />
|-<br />
| ||-- ...<br />
|-<br />
| -- devel/<br />
|-<br />
| -- ...<br />
|-<br />
| -- extra/<br />
|-<br />
| || -- daemons/<br />
|-<br />
| || || -- acpid/<br />
|-<br />
| || || || -- PKGBUILD<br />
... ... ... ...<br />
</pre><br />
<br />
ABS strom má strukturu abs databáze :<br />
* první úroveň adresáře reprezentuje kategorii<br />
* první úroveň adresářů reprezentuje balíčky<br />
* PKGBUILD obsahují všechny informace vztahující se k balíčku<br />
<br />
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 !.<br />
<br />
<br />
Takže nyní již víme co je ABS strom. Jak ho ale používat ?<br />
<br />
==== První použití ABS : přizpůsobení balíčku====<br />
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>.<br />
<br />
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 :<br />
* najděte kde je ''foo'' balíček umístěn. Můžete to udělat pomocí :<br />
<br />
<pre><br />
find /var/abs -name "foo"</pre><br />
<br />
nebo použijte příkaz slocate :<br />
<br />
<pre><br />
slocate foo | grep ^/var/abs</pre><br />
<br />
Zjistili jsme že foo patří do <code>extra</code> a <code>multimedia</code> (pro příklad)<br />
<br />
* kopírujte ''foo'' <code>PKGBUILD</code> do <code>/var/abs/local/foo</code><br />
<br />
<pre><br />
mkdir /var/abs/local/foo<br />
cp /var/abs/extra/multimedia/foo/* /var/abs/local/foo<br />
cd /var/abs/local/foo</pre><br />
<br />
* modifikujte <code>PKGBUILD</code> : pro podporu '''arts''' :<br />
<br />
<pre><br />
build() {<br />
cd $startdir/src/$pkgname-$pkgver<br />
./configure --prefix=/usr<br />
make || return 1<br />
make prefix=$startdir/pkg/usr install<br />
}</pre><br />
<br />
becomes :<br />
<br />
<pre><br />
build() {<br />
cd $startdir/src/$pkgname-$pkgver<br />
./configure --enable-arts --prefix=/usr<br />
make || return 1<br />
make prefix=$startdir/pkg/usr install<br />
}</pre><br />
<br />
* launch <code>makepkg</code> :<br />
<br />
<pre><br />
makepkg</pre><br />
<br />
* nainstalujte balíček (<code>-A</code> pro instalaci, <code>-U</code> pro upgrade):<br />
<br />
<pre><br />
pacman -A foo-*.pkg.tar.gz<br />
pacman -U foo-*.pkg.tar.gz</pre><br />
<br />
==== Compiler Flags a úpravy makepkg====<br />
<br />
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>.<br />
<br />
<pre><br />
# FTP/HTTP download utilita kterou makepkg použije k získání zdrojových kódů<br />
export FTPAGENT="/usr/bin/wget --continue --passive-ftp --tries=3 --waitretry=3"<br />
<br />
# Informace pro gcc jaký typ počítače používáte.<br />
export CARCH="i686"<br />
export CHOST="i686-pc-linux-gnu"<br />
<br />
# Flags pro gcc když balíček zkompiluje<br />
export CFLAGS "-march athlon-tbird -O2 -pipe"<br />
export CXXFLAGS "-march athlon-tbird -02 -pipe"<br />
<br />
# Flags pro make když balíček zkompiluje<br />
export MAKEFLAGS="-j 2"<br />
<br />
# Povolí barevně odlišený výstup<br />
export USE_COLOR="y"<br />
<br />
# Povolte fakeroot pro sestavení balíčků bez nutnosti být root.<br />
# Napište 'man fakeroot' pro více informací<br />
export USE_FAKEROOT="y"<br />
<br />
# Adresář kde jsou umístěny všechny balíčky (default is ./)<br />
export PKGDEST=/home/packages<br />
<br />
# ABS strom (default is /var/abs)<br />
export ABSROOT=/var/abs<br />
<br />
# Zde napište svoje jméno chcete-li<br />
export PACKAGER="John Doe <nowhere@microsoft.com>"<br />
</pre><br />
<br />
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>.<br />
<br />
References for gcc and make flags<br />
* [http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Option-Summary.html#Option-Summary]<br />
* [http://www.gnu.org/software/make/manual/html''chapter/make''9.html#SEC102]</div>M ax