Difference between revisions of "Arch Build System (Česky)"
m (moved ABS - The Arch Build System (Česky) to Arch Build System (Česky): match English title) |
m (recategorized) |
||
(9 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
+ | [[Category:About Arch (Česky)]] | ||
+ | [[Category:Package development (Česky)]] | ||
[[Category:Package management (Česky)]] | [[Category:Package management (Č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 zkratkou) se používá pro | Arch Build System (ABS zkratkou) se používá pro | ||
Line 27: | Line 33: | ||
<pre> | <pre> | ||
− | pacman - | + | pacman -S cvsup wget</pre> |
Nebo, pokud máte stažené balíčky do adresáře pojmenovaného 'foo' (pro příklad): | Nebo, pokud máte stažené balíčky do adresáře pojmenovaného 'foo' (pro příklad): | ||
Line 51: | Line 57: | ||
==== Co je PKGBUILD a co obsahuje?==== | ==== 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: | + | 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> | <pre> | ||
Line 90: | Line 96: | ||
* '''pkgver''' : verze 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. | * '''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 [ | + | * '''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í. | * '''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ů) | * '''url''' : domovská stránka softwaru (objevíse pokud kliknete na balíček v databázi balíčků) |
Revision as of 07:46, 2 June 2013
zh-CN:Arch Build System zh-TW:Arch Build System
Contents
Ú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