abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 23:55 | Nová verze

    Byla vydána nová stabilní verze 24.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Uakari. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.

    Ladislav Hagara | Komentářů: 0
    včera 17:33 | Nová verze

    Byla vydána nová verze 1.48.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Mimo jiné se v nastavení místo mac-address-blacklist nově používá mac-address-denylist.

    Ladislav Hagara | Komentářů: 7
    včera 17:11 | Komunita

    Před 25 lety, 31. května 1999, započal vývoj grafického editoru Krita (Wikipedie). Tenkrát ještě pod názvem KImageShop a později pod názvem Krayon.

    Ladislav Hagara | Komentářů: 3
    včera 12:55 | Nová verze

    Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 24.05.0 editoru videa Kdenlive (Wikipedie). Ke stažení brzy také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    včera 11:22 | Zajímavý článek

    David Revoy, autor mj. komiksu Pepper&Carrot, se rozepsal o své aktuální grafické pracovní stanici: Debian 12 Bookworm, okenní systém X11, KDE Plasma 5.27, …

    Ladislav Hagara | Komentářů: 6
    30.5. 22:44 | Nová verze

    Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.

    Ladislav Hagara | Komentářů: 0
    30.5. 21:22 | Zajímavý článek

    Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:44 | Pozvánky

    V sobotu 1. června lze navštívit Maker Faire Ostrava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:22 | Nová verze

    Webový server Caddy (Wikipedie) s celou řadou zajímavých vlastností byl vydán ve verzi 2.8 (𝕏). Přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 13
    29.5. 22:11 | Nová verze

    Byla vydána verze 3.0 (@, 𝕏) svobodného softwaru HAProxy (The Reliable, High Performance TCP/HTTP Load Balancer; Wikipedie) řešícího vysokou dostupnost, vyvažování zátěže a reverzní proxy. Detailní přehled novinek v příspěvku na blogu společnosti HAProxy Technologies.

    Ladislav Hagara | Komentářů: 7
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (90%)
     (3%)
     (4%)
     (4%)
    Celkem 1067 hlasů
     Komentářů: 17, poslední včera 15:31
    Rozcestník

    Rukověť baliče RPM - IV (Fáze balení)

    9. 6. 2005 | David Nečas | Návody | 9004×

    Konfigurace zdrojových kódů, kompilace, instalace do pracovního adresáře.

    Fáze balení

    Nic není tak jednoduché, jak to napíši. Zabalení rpm balíčku, jež jsme zatím prováděli celé naráz, se ve skutečnosti skládá z několika fází (packaging stages), které lze spustit i samostatně. A co víc, mají samostatné sekce ve spec souboru. Každá sekce je skript v shellu, který vykoná, cokoli je v dané fázi balení zapotřebí. Sekce trochu připomínají pravidla makefile, na rozdíl od nich však opravdu obsahují skripty, nikoli seznamy příkazů – přejdeme-li např. jedním příkazem do jiného adresáře, bude se následující příkaz spouštět v novém adresáři.

    Jednotlivé fáze lze spouštět pomocí voleb -bněco. Při kompilaci za sebou následují ve stejném pořadí, ve kterém je zde uvádím.

    Sekce %prep-bp

    Přípravná fáze. Rozbalí zdrojový kód, aplikuje patche, případně provede další předkompilační úpravy. V lobster.spec obsahuje jen:

    %prep
    %setup

    %setup je mocné makro, které umí mimo jiné rozbalit zdrojový kód a přejít do vzniklého adresáře, což je vše, co od něj zatím chceme.

    Sekce %build-bc

    Vlastní překlad. Typicky spouští ./configuremake. Shodou okolností máme přesně tohle v lobster.spec:

    %build
    %configure
    make

    Tedy až na to, že namísto ./configure spouštíme %configure, což je opět makro, které mimo jiné přidává ./configure argumenty s cestami (--prefix=… a pod.), aby si program své soubory hledal v /usr namísto implicitního /usr/local.

    Chceme-li přidat ./configure další argumenty, uvedeme je jako argumenty %configure:

    %configure --enable-sandals --without-money

    Sekce %install-bi

    Instalace do dočasného adresáře, tedy do $RPM_BUILD_ROOT. Je to obyčejně tentýž adresář jako BuildRoot, který jsme definovali v hlavičce, ale lze ho při kompilaci změnit volbou --buildroot=adresář nebo definicí makra %buildroot~/.rpmmacros. Instalační sekce typicky spouští make install, ovšem do dočasného adresáře:

    %install
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
    make install DESTDIR=$RPM_BUILD_ROOT

    Je tu jedna novinka, a to vymazání adresáře $RPM_BUILD_ROOT, abychom měli jistotu, že bude obsahovat jen to, co do něj teď nainstalujeme. Testování rozumné hodnoty $RPM_BUILD_ROOT je pozůstatek z doby (zhruba RPM 2.0), kdy se při balení instalovalo přímo do /. Dnes už to snad nikdo nedělá a některé manuály výslovně označují testování za zbytečné, na druhé straně jím nelze nic zkazit.

    Kromě změny DESTDIR můžeme použít i standardní makro %makeinstall, které mění nastavení cest prefix=… a pod.

    %install
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
    %makeinstall
    

    Změna DESTDIR je modernější, čistší a teoreticky správnější; v praxi to může vypadat různě. Tedy tak, že správně nefunguje ani jedno a musíme patchovat Makefile[.in], aby se program nechal nainstalovat, kam chceme. Důležité je, že míchání obou způsobu je zaručený recept na katastrofu, tudíž musíme jeden zvolit. U programů s vysokým poměrem svéráznosti instalace ku počtu instalovaných souborů se může ukázat jako nejjednodušší neválčit s autorovým Makefile a nainstalovat soubory ručně installem.

    Sekce %check

    Kontrola funkčnosti. Používá se zřídka a obvykle obsahuje make check nebo nějaký jeho ekvivalent. Nelze ji spustit explicitně, spouští se automaticky po instalaci. V lobster.spec jsme %check nepoužili.

    Sekce %clean

    Vymazání dočasného instalačního adresáře. Tuto fázi nelze spustit explicitně, ale provede se automaticky po úspěšném zabalení balíčku. Prakticky vždy obsahuje jediný řádek:

    %clean
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
    

    který už známe.

    Sekce %files-bl

    Seznam souborů. Tato sekce neobsahuje skript, ale prostý seznam souborů, které se mají do balíku zahrnout, a jejich vlastnosti. Lze v něm používat žolíky (wildcards). Musí obsahovat všechny soubory, které %install nainstalovalo, a samozřejmě nesmí uvádět žádné, které neexistují. Mohlo by se zdát, že takový seznam je zbytečný, protože by stačilo zabalit celý $RPM_BUILD_ROOT. RPM však umí z jednoho zdrojového rpm vytvořit několik binárních, a pak je takový seznam, určující, co patří kam, nezbytný. Kromě toho v něm můžeme přiřadit souborům různé vlastnosti.

    Práva souborů definujeme pomocí

    %defattr(mód, vlastník, skupina[, mód_adresářů])

    který se vztahuje na následující soubory (do případného dalšího %defattr). Uvedeme-li jako mód pomlčku -, zachová se mód souborů, jak byly nainstalovány; mód adresářů je nepovinný. Deklarace nastavující vlastníka na roota

    %defattr(-,root,root)

    lobster.spec je standardní a měli bychom ji vždy uvádět, jinak by se soubory mohly do rpm zabalit s náhodným vlastníkem – typicky uživatelem, který balíček kompiloval. To je docela zrádné, protože kdo takový zmršený balíček vyrobil, má zrovna nejmenší šanci si toho všimnout – že /usr/bin/lobster vlastní pepa a ne root, nemusí mít na jeho počítači na funkčnost žádný vliv. Zato ostatní, kdo si ho nainstalují, se budou trochu divit. Přinejmenším na Red Hatu by se od verze RPM 4.0.4 měla tato deklarace vkládat automaticky (%files je tiše předefinováno makrem, které navíc vloží %defattr), ale nespoléhal bych na to.

    Chceme-li nastavit atributy jen pro jediný soubor, použijeme %attr. Má stejné argumenty, ale píše se na začátek řádku před název souboru:

    %attr(2755,root,games) %{_bindir}/lobster

    Další přívlastky (tags) jsou už vyloženě rpmoidní. Přívlastek %doc označuje soubor jako dokumentaci (tu lze při instalaci vynechat volbou --excludedocs):

    %doc %{_mandir}/man1/lobster.1*

    A %doc má ještě druhou funkci: uvedeme-li soubor bez cesty (resp. s relativní cestou), vezme se z adresáře se zdrojovým kódem a nainstaluje do adresáře s dokumentací balíčku /usr/share/doc/%{name}-%{version}. Tak snadno doplníme licenci a různé README a ChangeLogy, které make install neinstaluje:

    %doc README COPYING NEWS

    Dokumentace uvedená v %doc se přesněji instaluje do místa určeného makrem %docdir, resp. položkou hlavičky Docdir. To by ovšem měla definovat distribuce a jednotlivé balíčky už by je neměly měnit.

    Další běžný přívlastek je %dir označující adresář. Neuvedeme-li ho u adresáře, znamená to, že do balíčku patří všechno, co adresář obsahuje.

    Přívlastky lze kombinovat, napíšeme jich prostě několik za sebou a oddělíme mezerami:

    %attr(0755,rpm,rpm) %dir /var/lib/rpm

    Všímavějším jistě neuniklo, že se v seznamu souborů objevuje %{_bindir} namísto /usr/bin%{_mandir} namísto /usr/share/man. Ke každému standardnímu adresářovému argumentu ./configure je pro každou distribuci a architekturu definováno odpovídající makro s cestou, jež %configure předává jako argument ./configure. A dále je %makeinstall využívá v argumentech make install. Je proto konzistentní používat je i v seznamu souborů, byť se za normálních okolností jejich hodnoty neliší se od cest, které bychom tam napsali ručně.

    Konkrétně jsou to tato makra:

    Proměnná configureMakro RPM
    ${prefix}%_prefix
    ${exec_prefix}%_exec_prefix
    ${bindir}%_bindir
    ${sbindir}%_sbindir
    ${libexecdir}%_libexecdir
    ${datadir}%_datadir
    ${sysconfdir}%_sysconfdir
    ${sharedstatedir}%_sharedstatedir
    ${localstatedir}%_localstatedir
    ${libdir}%_libdir
    ${includedir}%_includedir
    ${oldincludedir}%_oldincludedir
    ${infodir}%_infodir
    ${mandir}%_mandir

    Spouštění jednotlivých fází

    Napsal jsem, že fáze lze spouštět samostatně, ale nic není tak jednoduché, jak to napíši. Každá z fází -bb, -bi, -bc-bp obsahuje implicitně všechny předchozí. Příkaz rpmbuild -bi lobster.spec proto spustí nejen %install, ale i %prep%build. Spustit opravdu jen %install lze s volbou --short-circuit:

    rpmbuild -bi --short-circuit lobster.spec

    Tato volba je však ignorována u příkazů, které vytvářejí balíček (-bb, -ba, -bs), ty provedou vždy všechny fáze. RPM se nás tím snaží přimět k reprodukovatelným kompilačním postupům, protože je tak o hodně obtížnější provést část kompilace, v čemsi se jaksi povrtat, spustit další kousek, …, tudíž se rozumný člověk raději zaměří na sepsání pořádného spec souboru.

    Volba -bl (kontrola seznamu souborů) je speciální a nespouští předchozí fáze.

    A nakonec zde uvedu ještě volbu --clean, která sice neodpovídá žádné kompilační fázi, ale smaže adresář s rozbaleným zdrojovým kódem v BUILD, což se po kompilaci neděje automaticky (zato to dělá %setup před novou kompilací).

    Nejčtenější články posledního měsíce

    Týden na ITBiz: Kvalita a přesnost dat generovaných AI rozhodne o důvěře zaměstnanců v umělou inteligenci
    Týden na ScienceMag.cz: Působivá simulace pádu do černé díry
    Týden na ITBiz: Platby výkupného za ransomware vzrostly za poslední rok na pětinásobek

    Nejkomentovanější články posledního měsíce

    Týden na ScienceMag.cz: Kosmologové se opět zkouší vypořádat se s problémem Hubbleovy konstanty
    Týden na ITBiz: Platby výkupného za ransomware vzrostly za poslední rok na pětinásobek
    Jaderné noviny – přehled za duben 2024
      všechny statistiky »

    Seriál Rukověť baliče RPM (dílů: 15)

    Rukověť baliče RPM - I (Úvod) (první díl)
    <—« Rukověť baliče RPM - III (Struktura spec souboru)
    »—> Rukověť baliče RPM - V (Zdrojové soubory)
    Rukověť baliče RPM 15 - XV (Závěr) (poslední díl)

    Související články

    Rukověť baliče RPM - I (Úvod)
    Rukověť baliče RPM - II (Prostředí)
    Rukověť baliče RPM - III (Struktura spec souboru)
    Rukověť baliče RPM - V (Zdrojové soubory)
    Rukověť baliče RPM - VI (Makro %setup)
    Rukověť baliče RPM - VII (Podepisování, verze)
    Rukověť baliče RPM - VIII (Závislosti)
    Rukověť baliče RPM - IX (Sekce %files)
    Rukověť baliče RPM - X (Skriptíky)
    Rukověť baliče RPM - XI (Architektury. systémy, platformy)
    Rukověť baliče RPM - XII (Makra, úvod)
    Rukověť baliče RPM - XIII (Makra, dokončení)
    Rukověť baliče RPM - XIV (Přizpůsobení)
    Rukověť baliče RPM 15 - XV (Závěr)
    Na co se často ptáme: Balíčkovací systémy kromě posledního odstavce o checkinstallu.
    Nebojíme se kompilace - I (Teorie)
    Nebojíme se kompilace - II (GCC, configure, make, checkinstall) kompilace a instalace software, opět kromě části o checkinstallu.
    Balíčkovací systém Mandrake Linuxu RPM na uživatelské úrovni (a pro Mandrake).

    Odkazy a zdroje

    Doporučené čtení

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

    VDR a DVB-T2, část 2.
    VDR a DVB-T2, část 1.
    Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
    MapTiler – proměňte obrázek v zoomovatelnou mapu
    Syncthing
           

    Hodnocení: 97 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Stanislav Brabec avatar 9.6.2005 13:08 Stanislav Brabec | skóre: 45 | Praha
    Rozbalit Rozbalit vše %doc README
    A %doc má ještě druhou funkci: uvedeme-li soubor bez cesty (resp. s relativní cestou), vezme se z adresáře se zdrojovým kódem a nainstaluje do adresáře s dokumentací balíčku /usr/share/doc/%{name}-%{version}.

    Pokud se nemýlím, tak alespoň v SuSE tento zápis ještě smaže to, co tam již bylo. Takže nelze kombinovat zápis s cestou a bez ní. Navíc ta cesta /usr/share/doc/%{name}-%{version} není napevno, ale lze ji měnit přes %{_defaultdocdir} (a SuSE tuto cestu předefinovává na %{_usr}/share/doc/packages).
    9.6.2005 14:35 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: %doc README
    Jo, maže to myslím všude. Pokud do toho adresáře chci strkat něco ručně, tak tam musím dát ručně vše.

    %_defaultdoc dir je výchozí hodnota %_docdir (definice jednoho na druhé je zadrátovaná ve funkci parseSpec(), netuším proč). Obecně bych stejně doporučil se v nich moc nevrtat a instalovat dokumentaci, kam je distro zvyklé.
    xxx avatar 10.6.2005 12:32 xxx | skóre: 42 | blog: Na Kafíčko
    Rozbalit Rozbalit vše %configure --enable-sandals --without-money
    tak tohle nama chybu :)))))))))))
    Please rise for the Futurama theme song.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.