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

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.8.

    Ladislav Hagara | Komentářů: 2
    včera 14:22 | IT novinky

    Herní studio Hangar 13 vydalo novou Mafii. Mafia: Domovina je zasazena do krutého sicilského podsvětí na začátku 20. století. Na ProtonDB je zatím bez záznamu.

    Ladislav Hagara | Komentářů: 0
    včera 13:22 | IT novinky

    Operátor O2 má opět problémy. Jako omluvu za pondělní zhoršenou dostupnost služeb dal všem zákazníkům poukaz v hodnotě 300 Kč na nákup telefonu nebo příslušenství.

    Ladislav Hagara | Komentářů: 5
    včera 05:55 | IT novinky

    Společnost OpenAI představila GPT-5 (YouTube).

    Ladislav Hagara | Komentářů: 0
    včera 05:00 | Nová verze

    Byla vydána (𝕏) červencová aktualizace aneb nová verze 1.103 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.103 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    7.8. 17:33 | IT novinky

    Americký prezident Donald Trump vyzval nového generálního ředitele firmy na výrobu čipů Intel, aby odstoupil. Prezident to zdůvodnil vazbami nového šéfa Lip-Bu Tana na čínské firmy.

    Ladislav Hagara | Komentářů: 8
    7.8. 16:55 | Nová verze

    Bylo vydáno Ubuntu 24.04.3 LTS, tj. třetí opravné vydání Ubuntu 24.04 LTS s kódovým názvem Noble Numbat. Přehled novinek a oprav na Discourse.

    Ladislav Hagara | Komentářů: 0
    7.8. 16:44 | Nová verze

    Byla vydána verze 1.89.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    7.8. 12:22 | IT novinky

    Americká technologická společnost Apple uskuteční v USA další investice ve výši sta miliard dolarů (2,1 bilionu korun). Oznámil to ve středu šéf firmy Tim Cook při setkání v Bílém domě s americkým prezidentem Donaldem Trumpem. Trump zároveň oznámil záměr zavést stoprocentní clo na polovodiče z dovozu.

    Ladislav Hagara | Komentářů: 5
    7.8. 04:55 | Nová verze

    Zálohovací server Proxmox Backup Server byl vydán v nové stabilní verzi 4.0. Založen je na Debianu 13 Trixie.

    Ladislav Hagara | Komentářů: 0
    Kolik tabů máte standardně otevřeno ve web prohlížeči?
     (46%)
     (21%)
     (4%)
     (6%)
     (3%)
     (1%)
     (1%)
     (19%)
    Celkem 308 hlasů
     Komentářů: 23, poslední 4.8. 13:01
    Rozcestník

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

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

    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

    Událo se v týdnu 29/2025
    Jaderné noviny – přehled za červen 2025
    Kdo si hraje, nezlobí! Kupte Windows 11 jen za €20.00!

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

    Týden na ScienceMag.cz: Teploty supravodivosti mohou souviset se základními konstantami přírody
    Událo se v týdnu 31/2025
    Týden na ScienceMag.cz: Kdyby objekt 3I/ATLAS byl mimozemskou sondou…
      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.