Portál AbcLinuxu, 2. června 2024 05:53

Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)

9. 5. 2007 | Vojtěch Gondžala
Články - Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)  

V tomto díle si ukážeme, jak vytvořit vlastní balíček, a jak takový balíček poskytnout ostatním uživatelům.

Úvod

Pro vytváření balíčku máme v Arch Linuxu skript makepkg, který podle instrukcí v souboru PKGBUILD sestaví balíček; ten lze následně nainstalovat pacmanem. PKGBUILDy jsou tedy jakousi obdobou ebuidů z Gentoo Linuxu.

Pokud chcete poskytnout balíček ostatním, pak je nejlepší umístit jej do AURu (ArchLinux User-community Repository). Je to nebinární repozitář, nachází se v něm jen PKGBUILDy.

Každý balíček musí splňovat Standardy balíčků Archu. Jde o omezení názvů balíčků, způsob verzování, omezení adresářů, do kterých se instaluje software, a několik dalších doporučení. Jen PKGBUILD, který splňuje tato pravidla, může být umístěn do AURu. Vše, co porušuje pravidla, je smazáno, o což se starají správci i samotní uživatelé, kteří tyto prohřešky hlásí.

PKGBUILD

Popisován je PKGBUILD pro makepkg 3.0.x, starší verze makepkg nemusely vyžadovat všechny direktivy.

Uvedeme si příklad a vysvětlíme si jednotlivé direktivy a volby:

# Maintainer: An Archist <archist@archlinux.org>
# Contributor: Big Boss  <bigboss@sf.net>
pkgname = helloworld
pkgver = 0.4
pkgrel = 1
pkgdesc = "helloworld: a kernel module and a userspace daemon \
 for controlling an atomic bomb"
url = "http://www.helloworld.sf.net"
arch = ('i686' 'x86_64')
license = ('GPL' 'LGPL')
replaces = ('helloworld-rc' 'helloworld-test')
depend = ('kernel26')
conflict = ('libatomicbomb' 'goodbyeworld')
provides = ('libatomicbomb' 'goodbyeworld')
backup = ('etc/helloworld.conf')
install = $pkgname.install
source = ('http://www.helloworld.sf.net/source/$pkgname-$pkgver.tar.gz')
md5sums = ('a3290cbce4ffabbf91ccb1e9fce64d9e')
sha1sums = ('99fdedaec3acc9a8107443b6bfe87c7cdc0165c2')
build() {
  cd $startdir/src
  ./configure --prefix=/usr
  make || return 1
  make DESTDIR=$startdir/pkg install || return 1
}
# vim:syntax=sh

Zde popsaný PKGBUILD je použitelný pro sestavení balíčku ze zdrojových souborů dostupných v archivech. Existuje možnost balíček sestavit přímo ze SVN i CVS repozitáře. I v tomto případě je třeba se držet pravidel pro tvorbu PKGBUILDu. Používají se proměnné _cvsroot a _cvsmod, respektive _svntrunk a _svnmod. Ve funkci build() se použije příkaz pro stažení CVS repozitáře a jeho překopírování; až z této kopie se sestavuje balíček.

if [ -d $_cvsmod/CVS ]; then
    cd $_cvsmod
    cvs -z3 update -d
else
    cvs -z3 -d $_cvsroot co -D $pkgver -f $_cvsmod
  fi

msg "CVS checkout done or server timeout"
msg "Starting make..."

cp -r $_cvsmod $_cvsmod-build
cd $_cvsmod-build
...

Podobně vypadá fragment pro SVN:

if [ -d $_svnmod/.svn ]; then
    cd $_svnmod
    svn up -r $pkgver
else
    svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod
fi

msg "SVN checkout done or server timeout"
msg "Starting make..."

cp -r $_svnmod $_svnmod-build
cd $_svnmod-build
...

Instalační skript

Pokud chcete ve svém balíčku používat instalační skript, musíte uvést v PKGBUILDu direktivu:

install=jméno_balíčku.install

Skript poskytuje tyto funkce:

Jak vypadá instalační skript, jsme si ukázali v prvním díle seriálu. Skript nemusí být umístěn v seznamu source; stačí, když je v adresáři, ve kterém je PKGBUILD.

makepkg

Makepkg je shellový skript, který umožní sestavit balíček podle PKGBUILDu. Je distribuován společně s pacmanem.

Popisovány jsou vlastnosti makepkg 3.0.x, starší verze se mohou lišit. Postupně probereme nejpoužívanější přepínače. Pokud chcete vědět více, prohlédněte si manuálovou stránku.

makepkg se volá takto (musíme být v adresáři, kde je PKGBUILD, který chceme použít):

makepkg [volby]

makepkg.conf

Konfigurační soubor makepkg umožňuje nastavit optimalizace pro procesor, zapnout distribuovanou kompilaci a další proměnné prostředí, které ovlivňují software ve výsledném balíčku. Soubor je bohatě komentován, takže i neznalý uživatel se v něm neztratí.

Opět uvedu nejdůležitější volby:

AUR

AUR je repositář PKGBUILDů, do kterého může přispět každý uživatel Arch Linuxu. Jeho stránky jsou http://aur.archlinux.org/. Pokud chcete připívat, musíte si vytvořit účet.

Když zjistíte, že balíček pro daný software v binárních repozitářích není, nejprve se podívejte do AURu, obvykle ho tam najdete. Pokud vytvoříte PKGBUILD, který ještě neexistuje, pak jej stačí zabalit do archivu a uploadovat do AURu.

Ke každému balíčku je možné posílat komentáře, které mohou obsahovat hlášení chyb nebo návrhy na vylepšení PKGBUILDu určené pro autora. Každý má také možnost pro balíčky hlasovat - pokud bude mít daný balíček hodně hlasů, má velkou šanci se dostat do repozitáře community. Stejně tak se dá balíček označit za neaktuální (Out-of-date).

Vybraní důvěryhodní uživatelé se snaží udržovat AUR a PKGBUILDY v něm ve funkčním stavu, ale stejně je na každém přispěvateli, aby PKGBUILD udržoval v aktuální verzi a v sestavitelné podobě. Proto se může stát, že si stáhnete PKGBUILD, který je nepoužitelný, a nezbývá, než jej opravit. Toto se může odrazit ve vašem hodnocení balíčku.

AUR je dobrým zdrojem, ale často se vám může stát, že daný balíček nesestavíte - proto je dobré se podívat na poslední aktualizaci. Alespoň zjistíte, jestli je PKGBUILD ještě udržován. AUR je stále tak trochu džungle.

Příště

V příštím díle budeme pokračovat v sestavování balíčků - podíváme na ABS (Arch Build System) a makeworld.

Seriál Balíčkovací systém Arch Linuxu (dílů: 4)

První díl: Balíčkovací systém Arch Linuxu - 1 (formát balíčků), poslední díl: Balíčkovací systém Arch Linuxu - 4 (ABS, makeworld).
Předchozí díl: Balíčkovací systém Arch Linuxu - 2 (pacman, repozitáře)
Následující díl: Balíčkovací systém Arch Linuxu - 4 (ABS, makeworld)

Související články

Na co se často ptáme: Balíčkovací systémy
Seriál: Gentoo ebuild
Seriál: Rukověť baliče RPM
Balíčkovací systém Gentoo Linuxu - I
Balíčkovací systém Gentoo Linuxu - II
Balíčkovací systém Mandrake Linuxu
Seriál: Nebojíme se kompilace
„Archovský balíčkovač“ Pacman po třetí
Barevný pacman 3 (správce balíčků pro Arch)
Arch Linux

Další články z této rubriky

Úvod do Dockeru (1)
Paralelizace běžných činností v konzoli pomocí GNU Parallel
Unixové nástroje – 26 (triky pro práci v Bashi)
Unixové nástroje – 25 ((s,c)fdisk, gdisk, parted a findmnt)
Linux: systémové volání splice()

Diskuse k tomuto článku

kouzer avatar 9.5.2007 06:18 kouzer | skóre: 11 | Mladá Boleslav
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Odpovědět | Sbalit | Link | Blokovat | Admin
Pěkné..
Linux user #448944.
kozzi avatar 9.5.2007 19:22 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Odpovědět | Sbalit | Link | Blokovat | Admin
Moc pěkný, ale je tamn pár pravopisných chyb, což většinou moc nevadí. Ale v jednom případě je to zavádějíci viz. rozdíl mezi x68_64 a x86_64 ;-)
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
9.5.2007 20:11 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Pravopisné chyby prosím vypsat, ať je mohu opravit. Dík.
kozzi avatar 9.5.2007 20:31 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
No, koukám že jich pár ubylo. Jiank možná to není překlep, ale hned na začátku píše autor balíku(což je správně, ale mám pocit, že chtěl napsat balíčku, jelikož i nadále v textu používá daný výraz).
Potom tam je věta "Uvedeme se příklad.." myslím že yb tam mělo být Uvedeme si příklad...
A ještě to si ale nejsem jistý se mi zdá že u věty "...nastavte hodnotu na custom nebo custom:LicenseName a licenci umístěte..." by mělo být před nebo čárka
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
kozzi avatar 9.5.2007 20:34 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Zde popsaný PKGBUILD je použitelný pro sestavení balíčku se zdrojových souborů dostupných v archivech.
ze zdrojových balíčků - z koho z čeho 2.pád
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
9.5.2007 21:23 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Díky za upozornění. Opravil jsem (až na tu čárku před "nebo").
kozzi avatar 9.5.2007 21:35 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
JJ OK, proč vůbec tam nemá být čárka?
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
otula avatar 9.5.2007 22:31 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)

Protože v případě, že jde o libovolně zaměnitelné alternativy, čárka se nepíše. Třeba Koupím hrušky nebo jablka.

Pokud se nejedná o libovolně zaměnitelné alternativy, čárka se tam píše. Líbí se ti to, nebo na to máš jiný názor?

Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
kozzi avatar 9.5.2007 22:34 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
JJ díky. Jsem sám, komu se zdá čeština občas až příliš složitá?
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
otula avatar 9.5.2007 22:50 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Nejsi, znám takových spoustu :-) Už jsi dobuildil to icc? Já už z něj mám hlavu na prasknutí a naprosto to vzdávám. Pokud bys s tím dospěl k úspěchu, můžeš o tom napsat pár řádek do blogu (pravopisné chyby ti odpustím;-) )
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
kozzi avatar 9.5.2007 22:54 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Jo zatím se mi to jesště stahuje, takže to nechám přes noc vybuildit a o víkendu si stím pohraju, a blog o tom určitě napíšu.
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
otula avatar 9.5.2007 22:59 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Ten balíček je hotový okamžitě. Nekompiluje se. Hlavně si pak hned oprav tu konfigurák /etc/ld.so.conf :)
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
10.5.2007 01:47 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Co je na ní složitého? :-D
10.5.2007 10:51 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
A když přijdu z nákupu s jablky i hruškami? Mě učili (ale možná to je profesionalání deformace), že když je poměr XOR, tak se čarka píše.
otula avatar 10.5.2007 16:36 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
To je jedno. Klidně můžeš koupit i ananas a brambory :-) Čeština není matematika ;-)
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
9.5.2007 23:04 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Odpovědět | Sbalit | Link | Blokovat | Admin
Koukám, že redakce se rozhodla, že probere všechny možné balíčkovací systémy - rpm už tu bylo, teď Gentoo a Arch... bude taky něco pro Debian?
Quando omni flunkus moritati
Vykook avatar 9.5.2007 23:55 Vykook | skóre: 23 | blog: Tomas
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
A nebylo uz před lety?
Nejde nám o dobro druhých. Nejde nám o bohatství. Jde o čisté opojení mocí.
freshmouse avatar 10.5.2007 07:49 freshmouse | skóre: 42 | blog: Bruno Banány
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Repríza?
10.5.2007 11:01 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Bylo? Já nevím, hledal jsem, nenašel jsem.
Quando omni flunkus moritati
10.5.2007 11:31 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
Nebylo. Nejbližší balíčkovacímu systému Debianu byl článek Zdroje balíčkov pre Ubuntu. Takže pokud by se našel někdo, kdo by chtěl popsat debianní balíčky, ať se mi prosím ozve, budu jen rád.
freshmouse avatar 10.5.2007 15:53 freshmouse | skóre: 42 | blog: Bruno Banány
Rozbalit Rozbalit vše Re: Balíčkovací systém Arch Linuxu - 3 (PKGBUILD, makepkg, AUR)
To bych potřeboval, poněvadž jsem začal mít zájem tvořit balíčky (pro osobní i cizí potřebu) pri Ubuntu. Už mám patřičné odkazy v záložkách, že se po tom mrknu... Článek by mi ale ušetřil čas (na nějakou dobu). ;-)
14.5.2007 23:02 zbynek
Rozbalit Rozbalit vše Jak hlasovat v AURu?
Odpovědět | Sbalit | Link | Blokovat | Admin
Asi jsem trouba, ale jak se hlasuje v AURu? Žádnou volbu pro hlasování u balíčků nemám, používám Konquer 3.5.6. Díky
14.5.2007 23:15 zbynek
Rozbalit Rozbalit vše Re: Jak hlasovat v AURu?
Už jsem na to došel, musím si vytvořit účet a přihlásit se :)

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.