Arch build system

21.01.2010 21:50 | Články | borg
V tomto článku sa pokúsim predstaviť jednu zaujímavú funkciu stále populárnejšej linuxovej distribúcie Arch Linux. Táto funkcia zbližuje Arch Linux a niektoré linuxové distribucie a BSD systémy, ktoré používajú systém portov pre kompiláciu a inštaláciu programov. Jej názov je Arch build system, skrátene ABS.

Systém portov a Arch Linux

Systém portov umožňuje používatelovi stiahnuť zdrojové súbory, rozbaliť ich, prípadne aj opatchovať, následne ich skompilovať a vytvoriť z nich balíček pre ľubovoľný program, ktorý sa v systéme portov nachádza.
Takže výsledným produktom bude klasický inštalačný balíček pre Arch Linux. Celý systém sa skladá z jednotlivých portov, čo je vlastne iba nejaký adresár na lokálnom počítači pomenovaný podľa názvu programu. Každý takýto adresár obsahuje PKGBUILD a install súbor. PKGBUILD-om sa určuje odkiaľ sa zdrojové súbory programu stiahnu, kde sa rozbalia a ako sa následne skompilujú. Install súbor, pomenovaný podľa šablóny názov_programu.install, obsahuje definíciu funkcií, ktoré sa vykonajú pri inštalácii, upgrade a odinštalovaní výsledného balíčku. Port môže obsahovať aj jeden alebo viac súborov, ktoré majú v názve prefix patch. Takýto súbor obsahuje potom patche, ktoré sa aplikujú na rozbalený archív zdrojákov.
Ako príklad si môžeme zobrať napríklad IM klienta psi:
$ ls -l /var/abs/extra/psi
celkom 12
-rw-r--r-- 1 root root 662 jan 17 06:10 archlinux.patch
-rw-r--r-- 1 root root 730 jan 17 06:10 PKGBUILD
-rw-r--r-- 1 root root 146 jan 17 06:10 psi.install

V tomto prípade obsahuje port pre IM klienta psi povinný PKGBUILD s install súborom psi.install.
Taktiež obsahuje patch, ktorý upraví zdrojáky pre potreby samotej distribúcie Arch Linux.

Výhody systému portov v Archu

  • možnosť prekompilovať program z ľubovoľného dôvodu
  • vytvoriť si vlastný balíček programu zo zdrojákov, pre ktorý ešte neexistuje binárna verzia
  • upraviť si zdrojáky podľa vlastných želaní
  • prebuildovať celý systém, ktorý bude optimalizovaný pre váš počitač a tak nebudete musieť strácať
    výkon, ktorý s binárnymi balíčkami strácate
  • prekonfigurovať a prebuildovať si vlastné jadro
  • prebuildovať moduly jadra
  • jednoducho skompilovať a nainštalovať najnovšiu, staršiu, beta alebo vývojovú verziu Arch balíčka
    iba upravením PKGBUILD-u.

Arch Build System (ABS)

Systém portov v Arch Linuxu zastrešuje Arch Build System, ABS. ABS je séria nástrojov, ktoré sa používajú pri získavaní PKGBUILD súborov (a tým aj pre vytváranie portov), z ktorých sa potom vytvoria binárne balíčky pre Arch. Jednotlivé porty sa zvyčajne nachádzajú v adresáry /var/abs, čo je tzv. ABS strom.
Tento adresár má vlastnú štruktúru a to [repozitár]/[názov balíčka]. [repozitár] je presne to isté ako repozitár pre binárne verzie balíčkov. [názov balíčka] je názov aplikácie, pre ktorú si chceme vytvoriť vlastný balíček. Tak napríklad, PKGBUILD pre už spomínaný IM klient psi možno nájsť v adresáry:
/var/abs/extra/psi

Inštalácia ABS

Aby sme ABS mohli používať, tak si musíme nainštalovať aplikáciu abs. To urobíme klasickým spôsobom:
# pacman -S abs

Pre vytváranie vlastných balíčkov je nutné ešte doinštalovať aj balíček base-devel:
# pacman -S base-devel

Po nainštalovaní potrebných balíčkov môžeme ABS ešte nakonfigurovať. Nie je to ale potrebné, keďže
východisková konfigurácia je postačujúca. Konfiguračný súbor pre ABS je /etc/abs.conf. Najzaujímavejšou
voľbou v tomto konfiguračnom súbore je určenie repozitárov, pre ktoré sa vytvorí systém portov:
REPOS=(core extra community testing)

Jednotlivé repozitáre sú oddelené medzerou. Ak pred názov repozitára pridáme výkričník (!), tak tento
repozitár sa bude ignorovať a nebude sa pre neho inštalovať systém portov, prípadne sa nebude synchronizovať
pri opätovnom spustení utility abs.
Tak napríklad, ak by sme chceli vynechať repozitár testing, tak premenná REPOS v /etc/abs.conf by mala
takýto obsah:
REPOS=(core extra community !testing)

Pozor, ak si naozaj neželáme vytvárať systém portov (alebo jeho synchronizáciu) pre určitý repozitár, tak
nestací ho iba zmazať zo zoznamu, ale musíme ho nechať v zozname a pridať len výkričník. Inak abs bude aj
naďalej synchronizovať takýto neželaný repozitár.
Po prípadnej konfigurácii ABS systému, môžeme prejsť na samotnú prvotnú inicializáciu nášej lokálnej kópie
systemú portov, ABS stromu. To sa vykoná spustením utility abs s administrátorskými (root) právami:
# abs

Tento príkaz vytvorý lokálnu kópiu ABS stromu v adresáry /var/abs. Ak abs budeme spúšťať ešte raz,
tak už sa nebude celý strom sťahovať nanovo, ale iba sa zosynchronizuje a updatnú sa len tie subčasti stromu,
ktoré sa od posledného spustenia abs zmenili v centrálnom repozitáry.
Utilita abs má len tri parametre:
-h, --help zobrazí nápovedu pre túto utilitu
-V, --version zobrazi verziu abs
-t, --tarball s touto voľbou sa bude ABS strom synchronizovať pomocou tarballov z mirroru,
ktorý je definovaný pre pacman.

Potom, čo máme ABS strom, teda systém portov nainštalovaný, možeme ho začať používať. Pred samotným vytváraním
vlastných balíčkov pomocou ABS je vhodné ešte upraviť konfiguračný súbor pre makepkg, čo je utilita pre
vytváranie balíčkov, viac man 8 makepkg. Konfiguračný súbor sa nazýva /etc/makepkg.conf. V tomto konfiguračnom
súbore si nastavíme potrebné optimalizačné flagy pre kompilátor, host systém, architektúru atď. Viac man 5 makepkg.conf.

Používanie ABS

Samotné použitie ABS je veľmi jednoduché. Je vhodné si vytvoriť napríklad v domovskom adresáry bežného používateľa
nejaký pracovný adresár pre ABS. Je to z toho dôvodu, že akákoľvek práca v pôvodnom ABS strome vo /var/abs sa zmaže
pri každej synchronizácii ABS stromu. Takže vytvorme si náš pracovný adresár:
$ mkdir -p ~/abs

Práca v našom domovskom adresáry má aj tú výhodu, že nemusíme pracovať ako root. Administrátorské právomoci budeme
potrebovať iba pri inštalácii už vytvoreného balíčka. Pre náš príklad práce s ABS si vytvoríme nový balíček pre
IM klienta psi. Predstavme si (čisto pre fakultatívne účely), že sa nám nepáči kontrola pravopisu v už nainštalovom
psi. Aby sme odstránili podporu pre kontrolu pravopisu, musíme upraviť súbor PKGBUILD v ~/abs/psi:
$ cd ~/abs/psi
$ vim PKGBUILD

Upravíme riadok, kde sa volá skript configure a pridáme mu parameter –disable-aspell:
./configure --prefix=/usr --disable-bundled-qca --disable-aspell || return 1

Pre vytváranie balíčkov sa používa utilita makepkg, viac man 8 makepkg. Takže ako ďaľši krok bude
spustenie tejto utility:
$ makepkg -s

Parameter -s zabezpečí, že pri inštalácii novovytvoreného balíčka sa pacman pokúsi doinštalovať aj zavíslosti,
na ktorých balíček závísi. Spustenie makepkg zabezpečí všetky kroky pre vytvorenie nového balíčka: stiahnutie
zdrojákov, kontrola ich checksumu, ich rozbalenie a prípadné aplikovanie patchov, kontrola závislostí pre
kompiláciu a závislostí pre naištalovanie balíčka, nasleduje kompilácia a vytvorenie binárnej verzie balíčka.
Ak všetko prebehne v poriadku, tak v aktuálnom adresáry sa objaví nový balíček. Jeho názov v tomto prípade
bude psi-0.14-1-x86_64.pkg.tar.gz. Takýto balíček stačí už len nainštalovať pomocou pacmana:
# pacman -U psi-0.14-1-x86_64.pkg.tar.gz

Inštalujeme samozrejme s administrátorskými právami, teda pod root účtom.
Základnú prácu s ABS v Arch Linuxe máme predstavenú. Dúfam, že sa mi podarilo aspoň trochu ozrejmiť ABS a
jeho využitie. Prípadne námietky, návrhy, ďaľšie tipy prosím uveďte do kometárov.

    • dopad 22.01.2010 | 03:24
      Avatar Tommy Angelo   Používateľ
      velmi pekny clanok o mojej srdcovej distribucii, ale z textu som sa nedozvedel, ze aky ma dopad pouzivanie ABS v Archovi, kedze vieme, ze Arch je skor zalozeny na najnovsich verziach a aktualnych balickov, kedy sa velakrat stane, ze system proste bude nestabilny. Ak to chapem dobre, tak je to vlastne stare zname podobne PKBUILDOM a la Gentoo a BSD portom. Takze da sa pouzivat aj takto vytvoreny soft a aj prostrednictvom ABS a pacman ho vidi?
      • Re: dopad 22.01.2010 | 10:08
        Avatar borg Arch, Debian jessie  Administrátor
        ano, pomocou ABS si vytvoris klasicky balicek, taky ktory instaluje aj pacman. ak sa objavi novsia verzia toho balicka v repozitoroch pacmana, bude ABS verzia balicka upgradnuta na tuto. takze si budes musiet znova skompilovat novu verziu pomocu ABS a nainstalovat ju. da sa to obist s tym sposobom, ze pred zacatim vytvarania noveho balicka pomocou ABS, prepises v PKGBUILDe verziu na nejaku ovela vyssiu a pacman pri upgrade nebude tento balicek upgradovat, len bude vykecavat, ze je nainstalovana novsia verzia balicka ako sa nachadza v jeho repozitary. samozrejme toto riesenie nejsie aj riziko nestability problemu. zatial som to pouzil len raz, pri kniznici libnova a vsetko v pohode slapalo.
        • Re: dopad 22.01.2010 | 12:12
          Avatar Tommy Angelo   Používateľ
          ten sposob sa mi paci, vyskusam v buducnosti urcite. Arch, *BSD sa dost priblizuju k sebe
          • Re: dopad 22.01.2010 | 12:42
            Avatar borg Arch, Debian jessie  Administrátor
            mozno som aj na nejake veci zabudol (ale hlavne veci su tam), je to moj prvy clanok.
        • Re: dopad 22.01.2010 | 19:10
          Avatar rebrik Arch, Ubuntu  Používateľ
          Nie je lepsi sposob, ako vymyslanie vysokej verzie, pridat balicek do IgnorePkg v pacman.conf?
          Of All The Things I've Lost, I Miss My Mind The Most.
    • Nechapem 22.01.2010 | 19:37
      Avatar << Tomino >> Windows 7 & Arch Linux KDE  Používateľ
      Stale nechapem jednej veci...

      Ako resp. kde sa nastavuje ake vlastnosti ma ten balicek mat ? Lebo vlastne ak tomu spravne rozumiem, tak pomocou ABS si skompilujem balicek presne pre moj pc. A arch akoze uz vie aky mam pc??? alebo niekde sam nastavujem ze ktore veci povolit a ktore zakazat? Dakujem
      Prečo platiť za Windows keď viac ako 90% sw ide aj na linuxe a k tomu máte extra rýchly, aktuálny systém bez vírusov, bez nutnosti defragmentácie a iných hávedí :)
      • Re: Nechapem 22.01.2010 | 21:55
        Avatar Marián Sova Ubuntu 10.10  Administrátor
        Veď je to v článku napísané, že sa to nastavuje v súbore /etc/makepkg.conf
        Čo ťa nezabije, to ťa posilní | Leták na propagáciu jabbera v pdf | www.mikroprocesory.sk
        • Re: Nechapem 23.01.2010 | 15:24
          xenol   Návštevník
          ano, ale on sa asi pyta na obdobu USE flagov z gentoo. ak viete niekto o niecom, dajte vediet, lebo po 3 rokoch pouzivania archu som zatial neprisiel na nic take. inac dobra praca, borgcube
          • Re: Nechapem 23.01.2010 | 15:27
            xenol   Návštevník
            este by som upovedomil ludi na moznost "makeworld", ktory vlastne je akysi wrapper nad makepkg a dokaze to skompilovat cele repozitare balickov
          • Re: Nechapem 23.01.2010 | 20:24
            Avatar borg Arch, Debian jessie  Administrátor
            je to tam spominane, mozno nejasne. je nutne si upravit PKGBUILD, odstranit zavislosti a upravit volanie skriput configure, pripadne niecoho ineho, co sa vyhodnocuje pri kompilacii.
    • Systém portov? 25.01.2010 | 14:02
      Avatar hramat Arch + Openbox  Používateľ
      nazov: "Systém portov" ma dost zmiatol. Teraz pozeram ze ten nazov asi pochadza z BSD. Inac dobry clanok. PKGBUILD mohol byt trosku hlbsie vysvetleny. Mozno stacilo zahrnut cely PKGBUILD do clanku
    • makepkg 30.01.2010 | 13:33
      maro   Návštevník
      abych se priznal, mam v tom trochu chaos ja instaluju balicky z AURu tam si najdu balicek, stahnu tarbal, rozbalim do sveho '/home/adresare' pak spustim makepkg , nainstaluju balicek a hotovo
      Vubec jsem z clanku nepochopil, na co vlastne abs je, jak zjistim jaky pkgbuild muzu stahnout (kde najdu treba ten psi) je mi to stale jaksi nepochopitelne, zbytecne slozite
      • Re: makepkg 31.01.2010 | 15:50
        Avatar borg Arch, Debian jessie  Administrátor
        v AUR mas PKGBUILDy, ktore sa nenachadzaju v oficialnych repozitaroch, kdezto abs je subor PKGBUILDov pre balicky v oficialnych repozitaroch.
        abs ma rovnaku adresarovu strukturu ako repozitare, ten psi sa nachadza v repo extra. samozrejme, ak nevies co sa kde nachadza, tak existuje napr. utilita find.
        • Re: makepkg 27.04.2010 | 17:44
          Harvie   Návštevník
          naco find? pacman -Ss je rychlejsi...

          jinak bych poznamenal, ze standartne se pro sestavovani pouziva adresar ~/src, abs muze trochu zavadet :-P
    • adresarY?? 14.02.2010 | 13:59
      jose   Návštevník
      omg
    • chýba tam krok medzi 15.03.2010 | 16:27
      Peter S.   Návštevník
      chýba tam krok medzi
      $ mkdir -p ~/abs
      a
      $ cd ~/abs/psi
      Skadiaľ sa v novovytvorenom adresari vzal podadresár psi s nejakým obsahom?

      Štruktúra článku by možno potrebovala "vyladiť" všetko to pôsobí takým dojmom že "guláš", napríklad očíslované kroky alebo nadpisy častí a pod by určite pomohli...
    • makepkg, AUR 27.04.2010 | 17:21
      Harvie   Návštevník
      mnohem zajimavejsi moznost je vytvoreni celeho balicku ktery by jinak v archlinuxu nabyl.
      takovy balicek je pak mozne nahrat do auru ( http://aur.archlinux.org/ ) a sdilet s ostatnimi uzivateli, kteri si ho muzou sestavit nainstalovat pomoci yaourt -S balicek AUR je tedy takova wiki na balicky, kam muze prispivat kazdy... (je tedy nutne si PKGBUILD pred instalaci precist).

      moznost si takhle sestavit balicek ma kazda distribuce (vypliva to i z GPL), ale ArchLinux ma nejjednodussi postup pro vytvareni takovych balicku a balicek pro prumerny program udelate treba za 7 minut... (nebo i za min, pokud uz mate predpripraveny PKGBUILD, kde jenom prepisete par radek) Tesne je nasledovan BSD portama, ktery mi prisli trochu min prehledny...

      To ma vyhodu v tom, ze uz nikdy nemusite delat "make install" a zajistit si tak, ze program uz nikdy poradne neodinstalujete... Kdyz je vsechno v balickovacim systemu, je vsechno prehledny a bezpecny...
    • chybajuce zdrojaky jadra 03.12.2010 | 10:12
      sulostar   Návštevník
      zdravim pri instalacii ovladacu mi chybaju zdrojaky jadra v /usr/src/linux-verzia mal by na nich viest symbolicky odkaz symlink /lib/modules/$(uname -r)/build
      pomozu mi baliky "base-devel" alebo "abs" tento problem napravit alebo musim aj tak stiahnut jadro a rozbalit ?
      dakujem