UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

377 lines (262 loc) 12 kB
## 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)